[
  {
    "path": ".editorconfig",
    "content": "# This file is for unifying the coding style for different editors and IDEs\n# editorconfig.org\n\nroot = true\n\n\n[*]\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n# Tabs in JS unless otherwise specified\n[**.js]\nindent_style = space\nindent_size = 4\n\n[**.html]\nindent_style = space\nindent_size = 4\n\n[**.css]\nindent_style = space\nindent_size = 4\n\n[**.sass]\nindent_style = space\nindent_size = 4\n"
  },
  {
    "path": ".gitignore",
    "content": "#################\n## Eclipse\n#################\n\n*.pydevproject\n.project\n.metadata\nbin/\n*.tmp\n*.bak\n*.swp\n*~.nib\nlocal.properties\n.classpath\n.settings/\n.loadpath\n\n# External tool builders\n.externalToolBuilders/\n\n# Locally stored \"Eclipse launch configurations\"\n*.launch\n\n# CDT-specific\n.cproject\n\n# PDT-specific\n.buildpath\n\n\n#################\n## Visual Studio\n#################\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n\n# Build results\n\n[Dd]ebug/\n[Rr]elease/\nx64/\nbuild/\n[Bb]in/\n[Oo]bj/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n*_i.c\n*_p.c\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.log\n*.scc\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n*.ncrunch*\n.*crunch*.local.xml\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.Publish.xml\n*.pubxml\n\n# NuGet Packages Directory\n## TODO: If you have NuGet Package Restore enabled, uncomment the next line\n#packages/\n\n# Windows Azure Build Output\ncsx\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.[Pp]ublish.xml\n*.pfx\n*.publishsettings\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file to a newer\n# Visual Studio version. Backup files are not needed, because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\nApp_Data/*.mdf\nApp_Data/*.ldf\n\n#############\n## Windows detritus\n#############\n\n# Windows image file caches\nThumbs.db\nehthumbs.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Mac crap\n.DS_Store\n\n\n#############\n## Python\n#############\n\n*.py[co]\n\n# Packages\n*.egg\n*.egg-info\ndist/\nbuild/\neggs/\nparts/\nvar/\nsdist/\ndevelop-eggs/\n.installed.cfg\n\n# Installer logs\npip-log.txt\n\n# Unit test / coverage reports\n.coverage\n.tox\n\n#Translations\n*.mo\n\n#Mr Developer\n.mr.developer.cfg\n\n#############\n## NodeJS\n#############\nnode_modules/\ncoverage.html\nweb-debug.bat\n\n\n#############\n## webstorm\n#############\n.idea/\n"
  },
  {
    "path": ".jshintrc",
    "content": "// 根据 knightli 提供的配置改编, 欢迎试用\n// update by kaelyang 2015/07/31\n{\n    // 参考 http://jslinterrors.com/\n    // ==============预定义变量============\n    \"globals\":{\n        \"$\": true,\n        \"GLOBAL\": true,\n        \"global\": true,\n        \"jQuery\": true,\n        \"exports\": true,\n        \"module\": true,\n        \"define\": true,\n        \"require\": true,\n        \"it\": true,\n        \"before\": true,\n        \"describe\": true,\n        \"beforeEach\": true,\n        \"afterEach\": true,\n        \"__inline\": true,\n        \"__uri\": true\n    },\n\n    // ==============Legacy Options============\n    // 注: 这些选项继承自jslint\n\n    // 当变量名以\"_\"开头或结尾时,是否告警\n    \"nomen\": false,\n    // 是否只允许出现一个var在函数中\n    \"onevar\": false,\n    // 是否遇到第一个错误的时候就终止\n    \"passfail\": false,\n    // 让JSHint检查你的代码是否违反道格拉斯的JS编码风格(严格的空白规范??).\n    \"white\": false,\n    // 最大错误数目,超过则停止分析(默认:50)\n    \"maxerr\": 50,\n\n    // ==============Environments Options============\n\n    // 是否预定义现代浏览器暴露出来的全局变量（不包括alert和console）\n    \"browser\": true,\n\n    // 是否预定义console,alert这种开发阶段的调试代码\n    \"devel\": true,\n\n    // 该选项定义了一些非标准但广泛使用的全局变量，像\"escape\"和\"unescape\".\n    \"nonstandard\": true,\n\n    // ==============Enforcing Options============\n\n    // 禁止使用位运算符\n    \"bitwise\": true,\n    // 只允许使用camelCase or UPPER_CASE\n    \"camelcase\": false,\n    // 必须给block加括号\n    \"curly\": false,\n    // 不安全的== (会建议换成===或者!==)\n    \"eqeqeq\": false,\n    // 不安全的for in\n    \"forin\": false,\n    // 立即函数调用必须用(function(){}())而不是(function(){})()\n    \"immed\": true,\n    // 必须先定义再使用\n    \"latedef\": false,\n    // 构造函数名的首字母必须大写\n    \"newcap\": true,\n    // 禁止arguments.caller和arguments.callee的使用(ES5的严格模式中被禁用了,并且不是所有js实现中都有)\n    \"noarg\": true,\n    // 禁止空的代码块或未赋值的构造器\n    \"noempty\": false,\n    // 不允许不做赋值的构造函数\n    \"nonew\": true,\n    // 不允许使用++或者--的操作符\n    \"plusplus\": false,\n    // 正则中不允许使用.或者[^…]\n    \"regexp\": false,\n    // 未定义的XXX\n    \"undef\": true,\n    // 未使用的XXX\n    \"unused\": false,\n    // 需要使用strict mode，详见http:// ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/\n    \"strict\": false,\n    // 行末有多余的空格\n    \"trailing\": false,\n\n    // 配置单双引号规则: \"false\"或者不设置 不做限制  \"single\" 只许单引号  \"double\" 只许双引号 \"true\" 两者选其一,但不能同时出现\n    \"quotmark\": \"false\",\n\n    // 配置缩进规则: 设置缩进对应的空格数,如不设置,则不对缩进做要求\n    // 注: 这里配置了indent,则即使上面的white设置了false,也还是会导致 swindent 报warning(https:// github.com/jshint/jshint/issues/935)\n    // TODO:确认jshint解决了 swindent 的支持后可重新配置此项\n    // \"indent\": 4,\n\n    // 配置单行代码的最大长度\n    // \"maxlen\": 120,\n\n    // 配置函数的最多参数个数: 参数过多时,可读性下降,可考虑用options对象字段来减少参数个数\n    // \"maxparams\": 5,\n\n    // 配置函数内代码块嵌套最多层数\n    // \"maxdepth\": 5,\n\n    // 配置函数内最多有多少条语句(一个函数声明会被当作一条语句)\n    // \"maxstatements\": 50,\n\n    // 配置最大圈复杂度(http://en.wikipedia.org/wiki/Cyclomatic_complexity)\n    // \"maxcomplexity\": 10, // TODO:打开来优化代码复杂度\n\n\n    // ==============Relaxing Options============\n\n    // 代码末尾缺失分号,是否放过\n    \"asi\": false,\n    // for等预期是==的地方用了=,是否放过\n    \"boss\": false,\n    // 代码中有debugger语句,是否放过\n    \"debug\": false,\n    // 使用\"==\"来比较变量与null,是否放过\n    \"eqnull\": false,\n    // ES5语法校验报警,是否放过\n    \"es5\": false,\n    // ECMAScript 6语法校验报警,是否放过\n    \"esnext\": true,\n    // 代码中使用了eval,是否放过\n    \"evil\": true,\n    // 只允许在函数调用或赋值时使用表达式(原因???)  2 > 1 ? (alert(1)) : (alert(2));\n    \"expr\": true,\n    // 在控制语句中定义了变量，却在控制语句之外使用变量  function(){ if(1) {var x = 0;} x = x + 1;}\n    \"funcscope\": false,\n    // 使用了全局级别的严格模式,是否放过\n    \"globalstrict\": false,\n    // 使用了__iterator__这个属性(并非所有浏览器支持), 是否放过 (原因???)\n    \"iterator\": false,\n\n\n    // 是否允许单行语句块中最后一条语句不写分号\n    \"lastsemic\": false,\n    // 是否允许出现不安全的换行(示例???)\n    \"laxbreak\": true,\n    // 是否允许逗号出现在行首的换行方式\n    \"laxcomma\": false,\n    // 是否允许在循环里定义函数\n    \"loopfunc\": true,\n    // 是否允许多行字符串(原因???)\n    \"multistr\": true,\n    // 是否允许在代码中使用__proto__属性(并非所有浏览器支持)\n    \"proto\": false,\n    // 是否允许在switch语句中只出现一个case\n    \"onecase\": true,\n    // 是否允许unescaped - in the end of regular expressions.\n    \"regexdash\": false,\n    // 是否允许在代码中使用\"javascript:...\"这样的url\n    \"scripturl\": true,\n    // 是否使用smarttab风格混用tab和space(http:// www.emacswiki.org/emacs/SmartTabs)\n    \"smarttabs\": false,\n    // 是否允许使用shadow变量(shadow变量：当一个变量所在的作用域之外还有一个同名的变量，称为shadow变量)\n    // http:// stackoverflow.com/questions/5373278/variable-shadowing-in-javascript\n    \"shadow\": false,\n    // 是否允许用obj['name']和obj.name两种方式访问对象的属性\n    \"sub\": true,\n    // 是否允许使用像\"new function() {...}\"这样怪异的构造器\n    \"supernew\": true,\n    // 是否允许在严格模式下的非构造函数中使用this(该选项只能用于函数作用域中)\n    \"validthis\": false,\n\n    // Missing radix parameter to parseInt (defaults to 10)\n    \"-W065\": false,\n    // Literal accessor is better written in dot notation\n    \"-W069\": false\n}"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 , imweb(http://imweb.io/)\nCopyright (c) 2015 , chriscai(345446383@qq.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Readme.md",
    "content": "#badjs-storage\n\n> badjs manage system .\n\n# 运行\n```javascript\nnode app.js\n```\n\n# 启动参数\n--debug  log 采用debug 级别, 默认使用info\n\n--project 使用测试环境（ project.debug.json ）配置 ， 默认使用 project.json\n\n# 构建\n静态页面使用webpack ，开发阶段使用\n```javascript\nwebpack -w\n```\n上线阶段需要打包打包命令\n```javascript\nwebpack\n```\n\n# 数据库初始化\ndb/create.sql 是需要初始化到 mysql 的中。其中默认的超级管理员帐号是 admin ， 密码是 admin\n# 配置说明\n```\n{\n    \"host\" : \"http://badjs.server.com/\",   //配额管理服务器地址，用于邮件中的图片展示\n    \"mysql\" : {\n           \"url\" : \"mysql://root:root@localhost:3306/badjs\" // mysql 地址\n    },\n    \"storage\" : {         // 存储服务器的地址， 这里配置badjs-storage 的地址\n        \"errorMsgTopUrl\" : \"http://127.0.0.1:9000/errorMsgTop\",\n      \"errorMsgTopCacheUrl\" : \"http://127.0.0.1:9000/errorMsgTopCache\",\n        \"queryUrl\" : \"http://127.0.0.1:9000/query\"\n    },\n    \"acceptor\": {     //badjs-acceptor 模块的地址， 这里用于同步审核通过的业务的id 到接入层进行验证\n          \"pushProjectUrl\" : \"http://127.0.0.1:9001/getProjects\"\n    },\n     \"openapi\": {        //badjs-acceptor 模块的地址， 这里用于同步审核通过的业务的appkey 到openapi 进行验证\n        \"pushProjectUrl\" : \"http://127.0.0.1:9002/getProjects\"\n    },\n    \"mq\" : {       // badjs-mq 的地址\n        \"url\" : \"tcp://127.0.0.1:10000\",\n        \"subscribe\" : \"badjs\"     // 跟 badjs-aceptor 中的subscribe 对应\n         \"module\": \"axon\"      // 指定 mq 模块， \n    },\n    \"email\": {      // 发送 email 配置\n        \"homepage\": \"http://badjs.server.com/user/index.html\",  // 邮件中的 快捷入口\n        \"from\": \"noreply-badjs@demo.com\",                    //邮件中的发送者名字\n        \"smtp\": \"smtp.demo.com\",                             // smtp 服务器\n        \"emailSuffix\" : \"@demo.com\",         //收件人的邮件后缀，收件人地址 username +  emailSuffix\n        \"time\": \"09:00:00\",                     // 几点发送邮件\n        \"top\": 20,                            //邮件只发送错误排名的配置的top20\n        \"module\": \"email\"                 // 邮件发送模块\n    },\n    \"oos\" : {                                 //接入公司的统一登录， 删掉使用系统自己的用户管理\n        \"module\":\"demo/demooos\"\n    }\n}\n```\n\n# oos 接入\n查看当前目录的 oos/demooos.js 如何处理。\n> 腾讯内部接入可以[参考](https://github.com/BetterJS/oos-tencent)\n"
  },
  {
    "path": "app.js",
    "content": "var workflow = require('./workflow.config.json'),\n    _ = require(\"underscore\");\n\n\nvar workflowPath = workflow.path;\n\nif(!workflowPath){\n    workflowPath = \"./\"\n}\n\nif(!workflow.workflow){\n    return ;\n}\n\n_.each(workflow.workflow , function (value , key){\n    require(workflowPath +\"/\"+ value)();\n\n})\n\n\n\n"
  },
  {
    "path": "controller/action/ApplyAction.js",
    "content": "/**\n * @info : APPLY ACION\n * @author : coverguo\n * @date : 2015-01-07\n */\n\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger(),\n    _ = require('underscore'),\n    crypto = require('crypto'),\n    ApplyService = require('../../service/ApplyService'),\n    isError = function(res, error) {\n        if (error) {\n            res.json({\n                ret: 1,\n                msg: error\n            });\n            return true;\n        }\n        return false;\n    };\n\nvar REG_DOMAIN_STAR = /^\\*(\\.[^\\/]+)?$/;\nvar REG_REFERER = /^https?:\\/\\/[^\\/]+\\//i;\n\nvar processData = function(data) {\n    _.each(data, function(value, key) {\n        if (value.createTime) {\n            value.createTime = (new Date(value.createTime) - 0);\n        }\n\n        if (value.passTime) {\n            value.passTime = (new Date(value.passTime) - 0);\n        }\n    });\n\n    return data;\n};\n\n\nvar applyAction = {\n\n    addApply: function(params, req, res) {\n        // 必要信息为空，则报错\n        var url = params.url;\n        var url_no_match = !REG_DOMAIN_STAR.test(url) && !REG_REFERER.test(url);\n        if (params.name === \"\" || url_no_match) {\n            res.json({\n                ret: 1002,\n                msg: \"params error\"\n            });\n            return;\n        }\n\n        var apply = params;\n        apply.userName = params.user.loginName;\n\n        var applyService = new ApplyService();\n        if (apply.id) {\n            applyService.update(apply, function(err, items) {\n                if (isError(res, err)) {\n                    return;\n                }\n                res.json({\n                    ret: 0,\n                    msg: \"success-add\"\n                });\n            });\n        } else {\n            apply.status = 0;\n            apply.createTime = new Date();\n            apply.appkey = crypto.createHash(\"md5\").update(new Date - 0 + \"badjsappkey\" + params.user.loginName).digest('hex');\n            applyService.add(apply, function(err, items) {\n                if (isError(res, err)) {\n                    return;\n                }\n                res.json({\n                    ret: 0,\n                    msg: \"success-add\"\n                });\n            });\n        }\n\n    },\n    queryListByUser: function(params, req, res) {\n        var applyService = new ApplyService();\n        if (params.user.role != 1) {\n            applyService.queryListByUser(params, function(err, items) {\n                if (isError(res, err)) {\n                    return;\n                }\n                res.json({\n                    ret: 0,\n                    msg: \"success\",\n                    data: {\n                        role: params.user.role,\n                        item: processData(items)\n                    }\n                });\n            });\n        } else {\n            applyService.queryListByAdmin(params, function(err, items) {\n                if (isError(res, err)) {\n                    return;\n                }\n                res.json({\n                    ret: 0,\n                    msg: \"success\",\n                    data: {\n                        role: params.user.role,\n                        item: processData(items)\n                    }\n                });\n            });\n        }\n\n    },\n    queryListByAdmin: function(params, req, res) {\n        var applyService = new ApplyService();\n        //不是管理员的话直接返回错误提示\n        if (params.user.role != 1) {\n            res.json({\n                ret: 1003,\n                msg: \"权限不足\"\n            });\n            return;\n        }\n        applyService.queryListByAdmin(params, function(err, items) {\n            if (isError(res, err)) {\n                return;\n            }\n            res.json({\n                ret: 0,\n                msg: \"success\",\n                data: processData(items)\n            });\n        });\n    },\n    queryListBySearch: function(params, req, res) {\n        var applyService = new ApplyService();\n\n        var searchParam = {};\n        if (params.user.role != 1) {\n            searchParam.userName = params.user.loginName;\n        }\n\n        //搜索全部\n        if (params.statusType != 3) {\n            searchParam.status = params.statusType;\n        }\n\n        applyService.queryListBySearch(searchParam, function(err, items) {\n            if (isError(res, err)) {\n                return;\n            }\n            res.json({\n                ret: 0,\n                msg: \"success\",\n                data: {\n                    role: params.user.role,\n                    item: processData(items)\n                }\n            });\n        });\n    },\n    queryByApplyId: function(params, cb) {\n        var applyService = new ApplyService();\n        applyService.queryById({\n            id: params.applyId\n        }, function(err, apply) {\n            cb(err, apply);\n        });\n    },\n    update: function(params, req, res) {\n        var as = new ApplyService();\n        as.update(params, function() {\n\n        });\n    },\n    remove: function(params, req, res) {\n        var applyService = new ApplyService();\n        applyService.remove(params, function(err) {\n            if (err) {\n                res.json({\n                    ret: 3,\n                    msg: \"fail remove\"\n                });\n            } else {\n                res.json({\n                    ret: 0,\n                    msg: \"success remove\"\n                });\n            }\n\n        });\n    }\n\n};\n\nmodule.exports = applyAction;"
  },
  {
    "path": "controller/action/ApproveAction.js",
    "content": "/**\n * @info : APPROVE ACION\n * @author : coverguo\n * @date : 2015-01-12\n */\n\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger(),\n    ApproveService = require('../../service/ApproveService'),\n    LogService = require('../../service/LogService'),\n    isError = function (res , error){\n        if(error){\n            res.json({ret : 1 , msg : error});\n            return true;\n        }\n        return false;\n    };\n\n\n\n\nvar approveAction = {\n\n   doApprove: function(params, req , res){\n        var approve = params;\n        approve.createTime = new Date();\n        approve.userName = params.user.loginName;\n        logger.debug('add_approve param :' + approve);\n        var approveService = new ApproveService();\n        var logService = new LogService();\n        approveService.add(params, function (err, items) {\n            if(isError(res, err)){\n                return;\n            }\n\n\n\n            if(params.applyStatus == 1 || params.applyStatus == 2){\n                var pushProject = function (){\n                    logService.pushProject(function (err){\n                        if(err){\n                            logger.warn('push project  error ' + err);\n                        }else {\n                            logger.info('push project success from approve ');\n                        }\n                    });\n                }\n                pushProject();\n            }\n\n            res.json({ret:0, msg:\"审核完成\"});\n        });\n    },\n    queryList : function (params,cb) {\n        var as = new ApproveService();\n        as.query(params,cb);\n    },\n    update:function(){\n        var as = new ApproveService();\n        as.update(params,cb);\n    },\n    remove: function(params , cb){\n        var as = new ApproveService();\n        as.remove(params,cb);\n\n    }\n\n};\n\nmodule.exports = approveAction;\n\n"
  },
  {
    "path": "controller/action/IndexAction.js",
    "content": "/**\n * Created by chriscai on 2015/1/15.\n */\n\n\nvar BusinessService = require('../../service/BusinessService');\n\nvar fs = require(\"fs\");\nvar path = require(\"path\");\n\nvar  log4js = require('log4js'),\n    logger = log4js.getLogger();\n\nvar IndexAction = {\n\n\n\n    index :  function(parm , req, res){\n        var params = req.query,\n            user  = req.session.user;\n\n        var businessService =  new BusinessService();\n\n        businessService.findBusinessByUser(user.loginName , function (err, item){\n            res.render('log', { layout: false, user: user, index:\"log\" , items : item} );\n        });\n\n\n    },\n\n\n    realtime :  function(parm , req, res){\n        var params = req.query,\n            user  = req.session.user;\n\n        var businessService =  new BusinessService();\n\n        businessService.findBusinessByUser(user.loginName , function (err, item){\n            res.render('realtimelog', { layout: false, user: user, index:\"realtime\" , items : item , systime : new Date - 0} );\n        });\n    },\n\n    offline :  function(parm , req, res){\n\n        var params = req.query,\n            user  = req.session.user;\n\n        var businessService =  new BusinessService();\n\n        businessService.findBusinessByUser(user.loginName , function (err, item){\n            res.render('offlinelog', { layout: false, user: user, index:\"offlinelog\" , items : item , systime : new Date - 0} );\n        });\n    }\n\n\n};\n\nmodule.exports = IndexAction;\n"
  },
  {
    "path": "controller/action/LogAction.js",
    "content": "/**\n * @info : LOG ACION\n * @author : coverguo\n * @date : 2014-12-16\n */\n\nvar LogService = require('../../service/LogService'),\n    log4js = require('log4js'),\n    http = require('http'),\n    logger = log4js.getLogger(),\n    isError = function (res , error){\n        if(error){\n            res.json({ret : 1 , msg : error});\n            return true;\n        }\n        return false;\n    };\n\nvar fs = require(\"fs\")\nvar path = require(\"path\")\n\nvar LogAction = {\n    queryLogList : function (params, req , res) {\n\n        var logService = new LogService();\n\n        params['endDate'] -=0;\n        params['startDate'] -=0;\n        params['id'] -=0;\n        delete params.user;\n        logService.query(params,function(err, items){\n            if(isError(res, err)){\n                return;\n            };\n\n            res.json({ret:0, msg:\"success-query\", data:items });\n        });\n    },\n    showOfflineFiles : function (params, req , res) {\n\n        if(!params.id){\n            res.json({ret:0, msg:\"success-query\", data:[] });\n            return\n        }\n        \n        if(!/^\\w+$/i.test( params.id)){\n              res.json({ret:0, msg:\"success-query\", data:[] });\n            return ;\n        }\n\n        var filePath = path.join(__dirname , '..' , '..'  , 'offline_log' , params.id +\"\");\n\n\n        if(!fs.existsSync(filePath)){\n            res.json({ret:0, msg:\"success-query\", data:[] });\n            return\n        }\n\n\n        var offlineFiles = fs.readdirSync(filePath);\n        var offlineFilesList = [];\n        offlineFiles.sort(function (a, b){\n            if(a < b ){\n                return 1;\n            }else {\n                return -1;\n            }\n        })\n\n        offlineFiles = offlineFiles.slice(0,50);\n\n        offlineFiles.forEach(function (item){\n            offlineFilesList.push({\n                id : item\n            })\n        })\n\n        res.json({ret:0, msg:\"success-query\", data:offlineFilesList });\n\n\n    },\n\n    showOfflineLog : function (params, req , res) {\n\n        if(!params.fileId || !params.id){\n            res.json({ret:0, msg:\"success-query\", data:[] });\n            return\n        }\n        \n        if(!/^\\w+$/i.test( params.id)){\n              res.json({ret:0, msg:\"success-query\", data:[] });\n            return ;\n        }\n        \n         if(!/^\\w+$/i.test( params.fileId)){\n           res.json({ret:0, msg:\"success-query\", data:[] });\n            return ;\n        }\n\n        var filePath = path.join(__dirname , '..' , '..'  , 'offline_log' ,params.id +\"\" , params.fileId);\n\n\n        if(!fs.existsSync(filePath)){\n            res.json({ret:0, msg:\"success-query\", data:[] });\n            return\n        }\n\n\n        var offlineFiles = fs.readFileSync(filePath);\n\n        res.json({ret:0, msg:\"success-query\", data:offlineFiles.toString() });\n\n\n    },\n\n    deleteOfflineLogConfig : function (params, req , res){\n        if(!params.id ||  !params.uin ){\n            res.json({ret:0, msg:\"\", data:{} });\n            return\n        }\n\n\n        if (global.offlineLogMonitorInfo[params.id] && global.offlineLogMonitorInfo[params.id][params.uin] ){\n            delete global.offlineLogMonitorInfo[params.id][params.uin]\n        }\n\n        res.json({ret:0, msg:\"\", data:{} });\n    },\n\n    getOfflineLogConfig : function (params, req , res){\n        if(!params.id ){\n            res.json({ret:0, msg:\"\", data:{}});\n            return\n        }\n\n        var result = {};\n        if (global.offlineLogMonitorInfo[params.id]  ){\n            result = global.offlineLogMonitorInfo[params.id];\n        }\n\n        res.json({ret:0, msg:\"\", data:result});\n    },\n\n    addOfflineLogConfig : function (params, req , res){\n        if(!params.id || !params.uin){\n            res.json({ret:-1, msg:\"\", data:{} });\n            return\n        }\n\n        if(!global.offlineLogMonitorInfo[params.id]){\n            global.offlineLogMonitorInfo[params.id] = {}\n        }\n\n        var hadAdd = false;\n        if(!global.offlineLogMonitorInfo[params.id][params.uin]){\n            global.offlineLogMonitorInfo[params.id][params.uin] = true;\n        }else {\n            hadAdd = true;\n        }\n\n\n        res.json({ret:0, msg:\"success-query\", data:{hadAdd : hadAdd } });\n    },\n\n    code : function (params, req , res){\n        http.get(params.target  , function(response){\n            var buffer = '';\n            response.on('data' , function (chunk){\n                buffer += chunk.toString();\n            }).on('end' , function (){\n                res.json({ret:0, msg:\"success-query\", data:buffer});\n            });\n        })\n    }\n};\n\nmodule.exports = LogAction;\n\n"
  },
  {
    "path": "controller/action/StatisticsAction.js",
    "content": "/**\n * Created by chriscai on 2015/1/15.\n */\nvar BusinessService = require('../../service/BusinessService'),\n    _ = require('underscore'),\n    StatisticsService = require('../../service/StatisticsService');\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\nvar StatisticsAction = {\n\n\n    index: function(param, req, res) {\n        var params = req.query,\n            user = req.session.user;\n\n        var businessService = new BusinessService();\n\n        businessService.findBusinessByUser(user.loginName, function(err, item) {\n            res.render(param.tpl, {\n                layout: false,\n                user: user,\n                index: 'statistics',\n                statisticsTitle: param.statisticsTitle,\n                items: item\n            });\n        });\n    },\n    projectTotal: function(param, req, res) {\n        var params = req.query,\n            user = req.session.user;\n\n        var businessService = new BusinessService();\n\n        businessService.findBusiness(function(err, items) {\n            res.render(param.tpl, {\n                layout: false,\n                user: user,\n                index: 'projectTotal',\n                statisticsTitle: param.statisticsTitle,\n                items: items\n            });\n        });\n\n    },\n    queryByChart: function(param, req, res) {\n        var statisticsService = new StatisticsService();\n        if (!param.projectId || isNaN(param.projectId) || !param.timeScope) {\n            res.json({\n                ret: 0,\n                msg: 'success',\n                data: {}\n            });\n            return;\n        }\n        statisticsService.queryByChart({\n            userName: param.user.loginName,\n            projectId: param.projectId - 0,\n            timeScope: param.timeScope - 0\n        }, function(err, data) {\n            if (err) {\n                res.json({\n                    ret: -1,\n                    msg: \"error\"\n                });\n                return;\n            }\n            res.json(data);\n        });\n    },\n    queryByChartForAdmin: function(param, req, res) {\n        var statisticsService = new StatisticsService();\n        if (!param.projectId || isNaN(param.projectId) || !param.timeScope || param.user.role != 1) {\n            res.json({\n                ret: 0,\n                msg: 'success',\n                data: {}\n            });\n            return;\n        }\n\n        statisticsService.queryByChart({\n            projectId: param.projectId - 0,\n            timeScope: param.timeScope - 0\n        }, function(err, data) {\n            if (err) {\n                res.json({\n                    ret: -1,\n                    msg: \"error\"\n                });\n                return;\n            }\n            res.json(data);\n            return;\n        });\n    },\n    queryById: function(param, req, res) {\n        var statisticsService = new StatisticsService();\n        if (!req.query.projectId || isNaN(req.query.projectId) || !req.query.startDate) {\n            res.json({\n                ret: 0,\n                msg: 'query invalid！',\n                data: {}\n            });\n            return;\n        }\n        //console.log(param);\n        statisticsService.queryById({\n            userName: param.user.loginName,\n            projectId: req.query.projectId - 0,\n            startDate: new Date(param.startDate - 0)\n        }, function(err, data) {\n            if (err) {\n                res.json({\n                    ret: -1,\n                    msg: 'error',\n                    data: {}\n                });\n            } else {\n                res.json({\n                    ret: 0,\n                    msg: 'success',\n                    data: data\n                });\n            }\n\n        });\n    }\n\n};\n\nmodule.exports = StatisticsAction;"
  },
  {
    "path": "controller/action/UserAction.js",
    "content": "/**\n * Created by coverguo on 2015/1/12.\n */\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger(),\n    UserService = require('../../service/UserService'),\n    crypto = require('crypto'),\n    BusinessService = require('../../service/BusinessService'),\n    isError = function (res , error){\n        if(error){\n            res.json({ret : 1 , msg : error});\n            return true;\n        }\n        return false;\n    };\n\n\nvar userAction = {\n    index: function(params , req ,  res){\n        var params = req.query,\n            user  = req.session.user;\n\n        var businessService =  new BusinessService();\n\n        if(user.role == 1 ){\n            businessService.findBusiness(  function (err, item){\n                res.render('userManage', { layout: false, user: user, index:'manage', manageTitle: '项目用户权限' , items : item} );\n            });\n        }else {\n            businessService.findBusinessByProjectOwner(user.loginName , function (err, item){\n                res.render('userManage', { layout: false, user: user, index:'manage', manageTitle: '项目用户权限' , items : item} );\n            });\n        }\n\n    },\n\n    authUserManger : function (params , req ,  res){\n        var user = req.session.user;\n        res.render('authUserManage', { layout: false, user: user, index:'manage', manageTitle: '注册用户列表' } );\n\n    },\n\n    login : function (params , req ,  res){\n\n        var method = req.method.toLowerCase();\n        if(method == \"post\"){\n\n            var userDao = req.models.userDao;\n\n            userDao.one({ loginName : req.body.username } ,function (err , user) {\n                if(err || !user || (crypto.createHash(\"md5\").update(req.body.password).digest('hex') != user.password)){\n                    res.render('login', { name:req.body.username,   isUseOA : !! global.pjconfig.oos, index:\"login\"   , message : \"帐号或则密码错误\"} );\n                }else {\n                    req.session.user = {\n                        role : user.role,\n                        id : user.id,\n                        email : user.email,\n                        loginName : user.loginName ,\n                        chineseName : user.chineseName\n                    }\n                    res.redirect(req.protocol + \"://\" + req.get('host') + '/user/index.html');\n                }\n            });\n\n        }else {\n            res.render('login', {  isUseOA : !! global.pjconfig.oos, message : \"\" } );\n        }\n\n    },\n\n    register : function (params , req ,  res){\n\n        var method = req.method.toLowerCase();\n        if(method == \"post\"){\n\n            if( !req.body.username || !req.body.password) {\n                res.render('register', { isUseOA : !! global.pjconfig.oos, name: req.body.username ,  message : \"帐号密码不能为空\"} );\n                return ;\n            }else if( req.body.password != req.body.password2) {\n                res.render('register', { isUseOA : !! global.pjconfig.oos, name: req.body.username ,  message : \"密码和确认密码不一致\"} );\n                return ;\n            }\n\n            var userDao = req.models.userDao;\n\n            userDao.one({ loginName : req.body.username } ,function (err , user) {\n                if(err){\n                   logger.error(\"register user error : \" + err.toString());\n                    res.render('register', { isUseOA : !! global.pjconfig.oos,  name: req.body.username ,  message : \"系统错误，请联系管理员\"} );\n                } else if(user){\n                    res.render('register', {isUseOA : !! global.pjconfig.oos,  name: req.body.username ,  message : \"用户已经存在\"} );\n                    return ;\n                } else {\n                    var newUser = { chineseName: req.body.username, role : 0 ,loginName : req.body.username ,password : crypto.createHash(\"md5\").update(req.body.password).digest('hex')};\n                    userDao.create(newUser  , function (err) {\n                        if(err){\n                            res.render('register', { isUseOA : !! global.pjconfig.oos,     message : \"系统错误，请联系管理员\"} );\n                        }\n                        res.render('register', { isUseOA : !! global.pjconfig.oos,  type : \"1\", message : '注册成功 '} )\n\n                    });\n                }\n            });\n\n        }else {\n            res.render('register', {   isUseOA : !! global.pjconfig.oos, message : \"\" } );\n        }\n\n    },\n\n    modify : function (params , req ,  res){\n        var params = req.query,\n            user  = req.session.user;\n\n        var method = req.method.toLowerCase();\n        if(method == \"post\"){\n\n            if( !req.body.newpassword || !req.body.oldpassword) {\n                res.render('modifyUser', {  layout:false, user: user , index:'modifyUser', manageTitle: '修改密码',    message : \"密码不能为空\"} );\n                return ;\n            }if( req.body.newpassword != req.body.newpassword2) {\n                res.render('modifyUser', {  layout:false, user: user , index:'modifyUser', manageTitle: '修改密码' , message : \"密码和确认密码不一致\"} );\n                return ;\n            }else if( req.body.oldpassword == req.body.newpassword) {\n                res.render('modifyUser', {  layout:false, user: user , index:'modifyUser', manageTitle: '修改密码' , message : \"新旧密码不能一致\"} );\n                return\n            }\n\n            var userDao = req.models.userDao;\n\n            userDao.one({ loginName : user.loginName } ,function (err , user) {\n                var newpassword =  crypto.createHash(\"md5\").update(req.body.newpassword).digest('hex')\n                var oldpassword =  crypto.createHash(\"md5\").update(req.body.oldpassword).digest('hex')\n                if(err){\n                    logger.error(\"modifyUser user error : \" + err.toString());\n                    res.render('modifyUser', {   layout:false, user: user , index:'modifyUser', manageTitle: '修改密码'  ,  message : \"系统错误，请联系管理员\"} );\n                }else if(!user){\n                    res.render('modifyUser', {    layout:false, user: user , index:'modifyUser', manageTitle: '修改密码'  ,  message : \"用户不存在\"} );\n                }else if (oldpassword != user.password){\n                    res.render('modifyUser', {    layout:false, user: user , index:'modifyUser', manageTitle: '修改密码'  ,  message : \"原始密码不正确\"} );\n                }else {\n                    user.password = newpassword;\n                    user.save( function (err) {\n                        if(err){\n                            res.render('modifyUser', {  layout:false, user: user , index:'modifyUser', manageTitle: '修改密码'  ,    message : \"系统错误，请联系管理员\"} );\n                        }\n                        req.session.user = null;\n                        res.render('modifyUser', {  layout:false, user: user , index:'modifyUser', manageTitle: '修改密码'  ,   type : \"1\", message : '修改成功 ,3s 后跳转到登录界面'} );\n\n                    });\n                }\n            });\n\n        }else {\n\n            res.render('modifyUser', { layout:false, user: user , index:'modifyUser', manageTitle: '修改密码'} );\n        }\n    },\n\n//    addUser: function(params, cb){\n//        var us = new UserService();\n//        us.add(params,cb);\n//    },\n    queryListByCondition : function (params , req ,  res) {\n        var userService = new UserService();\n        var isAdmin  = req.session.user.role == 1;\n        //用户根据项目查询项目成员\n        if(params.applyId && params.role){\n            params.applyId -=0;\n            params.role -=0;\n        }else{\n            res.json({ret:1002, msg:\"need some params\"});\n            return;\n        }\n\n        if(params.user.role != 1){\n            params.userId = params.user.id;\n        }\n\n        userService.queryListByCondition(params,function(err, items){\n            if(isError(res, err)){\n                return;\n            }\n            res.json({ret:0, data:items, msg:\"success\" , isAdmin : isAdmin});\n        });\n    },\n\n    queryUserByCondition : function (params , req ,  res){\n        var userService = new UserService();\n        var user = req.session.user;\n        var isAdmin  = req.session.user.role == 1;\n        if(!isAdmin){\n            res.json({ret:-1, data:{}, msg:\"error\" });\n            return ;\n        }\n\n        var target = {};\n\n\n        if(params.roleType >= 0){\n            target.role = params.roleType;\n        }\n\n        userService.queryUsersByCondition(target , function (err , item){\n            res.json({ret:0, data:item, msg:\"success\" });\n        })\n    },\n\n    authUser : function (params , req ,  res){\n        var userService = new UserService();\n        userService.update({id : params.id, role : params.role} , function (err ){\n            if(err){\n                res.json({ret:-1,  msg:\"error\" });\n            }else {\n                res.json({ret:0,  msg:\"success\" });\n            }\n        })\n    },\n\n    update:function(req, res){\n\n    },\n    remove: function(){\n\n\n    }\n\n};\n\nmodule.exports = userAction;\n\n"
  },
  {
    "path": "controller/action/UserApplyAction.js",
    "content": "/**\n * Created by coverguo on 2015/1/12.\n */\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger(),\n    UserApplyService = require('../../service/UserApplyService'),\n    isError = function (res , error){\n        if(error){\n            res.json({ret : 1 , msg : error});\n            return true;\n        }\n        return false;\n    };\n\n\nvar userAction = {\n    addUserApply: function(userApply, req , res){\n\n        if(userApply.userName ==\"\"){\n            res.json({ret: 1002, msg: \"userName为空\"});\n            return;\n        }\n        userApply.createTime = new Date();\n        var userApplyService = new UserApplyService();\n        userApplyService.add(userApply,function(err, items) {\n            if (isError(res, err)) {\n                return;\n            }\n            res.json({ret: 0, msg: \"success-add\"});\n        });\n    },\n\n\n    //update:function(req, res){\n    //\n    //},\n    remove: function(remove, req, res){\n        if(remove.id ==\"\"){\n            res.json({ret: 1002, msg: \"id为空\"});\n            return;\n        }\n        var userApplyService = new UserApplyService();\n        userApplyService.remove(remove,function(err, items) {\n            if (isError(res, err)) {\n                return;\n            }\n            res.json({ret: 0, msg: \"success-remove\"});\n        });\n\n    },\n\n    auth: function(auth, req, res){\n        if(auth.id ==\"\"){\n            res.json({ret: 1002, msg: \"id为空\"});\n            return;\n        }\n        var userApplyService = new UserApplyService();\n        userApplyService.auth(auth,function(err, items) {\n            if (isError(res, err)) {\n                return;\n            }\n            res.json({ret: 0, msg: \"success-update\"});\n        });\n\n    }\n\n};\n\nmodule.exports = userAction;\n\n"
  },
  {
    "path": "controller/router.js",
    "content": "/**\n * @info : 页面申请路由\n * @author : coverguo\n * @date : 2014-12-16\n */\n\nvar LogAction = require('./action/LogAction'),\n    ApplyAction = require('./action/ApplyAction'),\n    UserAction = require(\"./action/UserAction\"),\n    IndexAction = require(\"./action/IndexAction\"),\n    StatisticsAction = require(\"./action/StatisticsAction\"),\n    ApproveAction = require(\"./action/ApproveAction\"),\n    realtimeService = require(\"../service/RealtimeService\"),\n    UserApplyAction = require(\"./action/UserApplyAction\");\n\nvar _ = require(\"underscore\");\n\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\nmodule.exports = function(app){\n\n\n    realtimeService(app);\n\n    //html页面请求\n    app.get('/', function (req , res){\n        res.render('index',{} );\n    });\n\n    app.get('/index.html', function (req , res){\n        res.render('index',{} );\n    } );\n\n    app.get('/user/index.html', function (req , res){\n        IndexAction.index({} , req , res);\n    } );\n\n    app.use('/login.html', function (req , res){\n        UserAction.login({}, req , res);\n    } );\n\n    app.use('/register.html', function (req , res){\n        UserAction.register({}, req , res);\n    } );\n\n    app.get('/user/apply.html', function(req, res){\n        var user  = req.session.user;\n        if(req.query && req.query.applyId){\n            ApplyAction.queryByApplyId({applyId :req.query.applyId } , function (err , apply){\n                res.render('apply', { layout: false, user: user, index:'apply' , apply : apply });\n            });\n        }else {\n            res.render('apply', { layout: false, user: user, index:'apply' , apply  : {} });\n        }\n    });\n    app.get('/user/applyList.html', function(req, res){\n        var user = req.session.user;\n        res.render('applyList', { layout: false, user: user, index:'manage', manageTitle: '申请项目列表'});\n    });\n\n    app.get('/user/userManage.html', function (req , res){\n        UserAction.index({} , req , res);\n    });\n    app.use('/user/modifyUser.html', function (req , res){\n        UserAction.modify(req.param  , req , res);\n    });\n\n    app.get('/user/authUserManage.html', function (req , res){\n        UserAction.authUserManger(req.param , req , res);\n    });\n\n    app.get('/user/statistics.html' , function (req , res){\n        StatisticsAction.index({tpl:\"statistics\", statisticsTitle: \"日志统计\"} , req , res);\n    });\n    app.get('/user/realtimelog.html' , function (req , res){\n        IndexAction.realtime({} , req , res);\n    });\n\n    app.get('/user/offlinelog.html' , function (req , res){\n        IndexAction.offline({} , req , res);\n    });\n\n\n    app.get('/user/charts.html' , function (req , res){\n        StatisticsAction.index({tpl:\"charts\", statisticsTitle: \"图表统计\"} , req , res);\n    });\n    app.get('/user/projectTotal.html' , function (req , res){\n        StatisticsAction.projectTotal({tpl:\"projectTotal\", statisticsTitle: \"项目统计\"} , req , res);\n    });\n    app.get('/user/introduce.html' , function (req , res){\n        res.render('introduce', { layout: false, user: req.session.user, index:'guide', guideTitle: '使用指南'});\n    });\n\n    app.get('/user/monitor.html' , function (req , res){\n        res.render('monitor', { layout: false, user: req.session.user, index:'guide', guideTitle: '实时监控'});\n    });\n\n\n    /**\n     * 登出\n     * */\n    app.get('/logout', function(req, res){\n        req.session.user = null;\n        var homeUrl = req.protocol + \"://\" + req.get('host') + '/index.html';\n        delete req.session.user;\n        res.redirect(homeUrl);\n    });\n\n\n    // 请求路径为： controller/xxxAction/xxx.do (get || post)\n    app.use(\"/\",function(req, res , next){\n        //controller 请求action\n            if(!/\\/controller/i.test(req.url)){\n                next();\n                return ;\n            }\n            var url = req.url;\n            var action = url.match(/controller\\/(\\w*)Action/i)[1];\n            var operation = url.match(/\\/(\\w+)\\.do/i)[1];\n            logger.debug(\"the operation is: \" + action + \" --operation: \"+ operation);\n            //判断是get还是post请求， 获取参数params\n            var method = req.method.toLowerCase();\n            var params = method ==\"post\"? req.body : req.query;\n\n            params = _.extend({} , params );\n\n            params.user = req.session.user;\n\n\n            if( !params.user ){\n                res.json({ret : -2 , msg : \"should login\"});\n                return ;\n            }\n\n            //根据不同actionName 调用不同action\n            try{\n                switch(action){\n                    case \"user\": UserAction[operation](params,req, res);break;\n                    case \"apply\": ApplyAction[operation](params,req,  res);break;\n                    case \"approve\": ApproveAction[operation](params,req, res);break;\n                    case \"log\" : LogAction[operation](params,req, res); break;\n                    case \"userApply\": UserApplyAction[operation](params,req, res);break;\n                    case \"statistics\" : StatisticsAction[operation](params, req, res); break;\n\n                    default  : next();\n                }\n            }catch(e){\n                logger.warn(e)\n                res.send(404, 'Sorry! can not found action.');\n            }\n            return;\n    });\n\n\n};\n"
  },
  {
    "path": "dao/ApplyDao.js",
    "content": "\n/**\n *  @info: ApplyDao\n *  @author: coverGuo\n *  @date: 2014-12-30\n */\n//status: 0 审核中- 1-审核通过， 2-审核失败\nmodule.exports  = function (db){\n    var apply = db.define(\"b_apply\", {\n        id          : Number,\n        userName    : String,\n        status      : Number,\n        name        : String,\n        appkey      : String,\n        url         : String,\n        blacklist   : String,\n        description : String,\n        mail        : String,\n        createTime  : Date,\n        passTime    : Date\n    });\n\n    return apply;\n}\n"
  },
  {
    "path": "dao/ApproveDao.js",
    "content": "/**\n *  @info: approveDao\n *  @author: coverguo\n *  @date: 2014-12-30\n */\n\nmodule.exports  = function (db){\n    var approve = db.define(\"b_approve\", {\n        id          : Number,\n        userName    : String,\n        reply       : String,\n        createTime  : Date,\n        applyId     : Number,\n        applyStatus : Number\n    });\n    return approve;\n}"
  },
  {
    "path": "dao/StatisticsDao.js",
    "content": "\n/**\n *  @info: statisticsDao\n *  @author: chriscai\n *  @date: 2014-01-14\n */\n\nmodule.exports  = function (db){\n    var Statistics = db.define(\"b_statistics\", {\n        id          : Number,\n        projectId   : Number,\n        startDate   : Date,\n        endDate     : Date,\n        content     : String,\n        total       : Number\n    });\n\n    return Statistics;\n}\n"
  },
  {
    "path": "dao/UserApplyDao.js",
    "content": "/**\n *  @info: UserApplyDao\n *  @author: coverguo\n *  @date: 2014-01-15\n */\n\nmodule.exports  = function (db){\n    var user_apply = db.define(\"b_user_apply\", {\n        userId      : Number,\n        applyId     : Number,\n        role        : Number,\n        createTime  : Date\n    });\n    return user_apply;\n};"
  },
  {
    "path": "dao/UserDao.js",
    "content": "\n/**\n *  @info: userDao\n *  @author: coverGuo\n *  @date: 2014-12-30\n */\n\nmodule.exports  = function (db){\n    var user = db.define(\"b_user\", {\n        id          : Number,\n        loginName   : String,\n        chineseName : String,\n        role        : Number,\n        email        : String,\n        password        : String\n    });\n\n    return user;\n}"
  },
  {
    "path": "db/create.sql",
    "content": "-- --------------------------------------------------------\n-- 主机:                           127.0.0.1\n-- 服务器版本:                        5.6.21-log - MySQL Community Server (GPL)\n-- 服务器操作系统:                      Win64\n-- HeidiSQL 版本:                  9.1.0.4867\n-- --------------------------------------------------------\n\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;\n/*!40101 SET NAMES utf8mb4 */;\n/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;\n/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;\n\nCREATE DATABASE  IF NOT EXISTS `badjs` /*!40100 DEFAULT CHARACTER SET latin1 */;\nUSE `badjs`;\n\n-- 导出  表 betterjs.b_statistics 结构\nDROP TABLE IF EXISTS `b_statistics`;\nCREATE TABLE IF NOT EXISTS `b_statistics` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `projectId` int(11) DEFAULT NULL,\n  `startDate` datetime DEFAULT NULL,\n  `endDate` datetime DEFAULT NULL,\n  `content` longtext COLLATE utf8_unicode_ci,\n  `total` int(11) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;\n\n\n--\n-- Table structure for table `b_apply`\n--\n\nDROP TABLE IF EXISTS `b_apply`;\n/*!40101 SET @saved_cs_client     = @@character_set_client */;\n/*!40101 SET character_set_client = utf8 */;\nCREATE TABLE `b_apply` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `userName` varchar(25) COLLATE utf8_unicode_ci NOT NULL,\n  `status` int(11) NOT NULL,\n  `name` varchar(25) COLLATE utf8_unicode_ci NOT NULL,\n  `appkey` varchar(200) COLLATE utf8_unicode_ci NOT NULL,\n  `url` varchar(200) COLLATE utf8_unicode_ci NOT NULL,\n  `blacklist` text COLLATE utf8_unicode_ci ,\n  `description` text COLLATE utf8_unicode_ci,\n  `mail` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL,\n  `createTime` datetime DEFAULT NULL,\n  `passTime` datetime DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;\n/*!40101 SET character_set_client = @saved_cs_client */;\n\n--\n-- Table structure for table `b_approve`\n--\n\nDROP TABLE IF EXISTS `b_approve`;\n/*!40101 SET @saved_cs_client     = @@character_set_client */;\n/*!40101 SET character_set_client = utf8 */;\nCREATE TABLE `b_approve` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `userName` varchar(20) COLLATE utf8_unicode_ci NOT NULL,\n  `reply` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,\n  `applyId` int(11) NOT NULL,\n  `createTime` timestamp NULL DEFAULT NULL,\n  `applyStatus` int(11) NOT NULL,\n  PRIMARY KEY (`id`),\n  KEY `applyId` (`applyId`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;\n/*!40101 SET character_set_client = @saved_cs_client */;\n\n--\n-- Table structure for table `b_user`\n--\n\nDROP TABLE IF EXISTS `b_user`;\n/*!40101 SET @saved_cs_client     = @@character_set_client */;\n/*!40101 SET character_set_client = utf8 */;\nCREATE TABLE IF NOT EXISTS `b_user` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `loginName` varchar(100) COLLATE utf8_unicode_ci NOT NULL,\n  `chineseName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,\n  `role` int(11) NOT NULL,\n  `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,\n  `password` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;\n\n\n--\n/*!40000 ALTER TABLE `b_user` DISABLE KEYS */;\nINSERT INTO `b_user` (`id`, `loginName`, `chineseName`, `role`, `email`, `password`) VALUES\n\t(1, 'admin', 'admin', 1, NULL, '21232f297a57a5a743894a0e4a801fc3');\n\n\n\n--\n-- Table structure for table `b_user_apply`\n--\n\nDROP TABLE IF EXISTS `b_user_apply`;\n/*!40101 SET @saved_cs_client     = @@character_set_client */;\n/*!40101 SET character_set_client = utf8 */;\nCREATE TABLE `b_user_apply` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `userId` int(11) NOT NULL,\n  `applyId` int(11) NOT NULL,\n  `role` int(1) NOT NULL DEFAULT '0',\n  `createTime` timestamp NULL DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `applyId_idx` (`applyId`)\n) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;\n\n\n-- Dump completed on 2015-01-20  9:43:38\n\n\n"
  },
  {
    "path": "gulpfile.js",
    "content": "var gulp = require(\"gulp\");\nvar del = require('del');\nvar webpack = require(\"webpack\");\n\n\ngulp.task('clean', function(cb) {\n    del(['public'], cb);\n});\n\ngulp.task('default', function() {\n\n});\n\n\n\ngulp.task(\"webpack\", function(callback) {\n\n\n    // run webpack\n    webpack({\n\n    }, function(err, stats) {\n        if(err) throw new gutil.PluginError(\"webpack\", err);\n        gutil.log(\"[webpack]\", stats.toString({\n            // output options\n        }));\n        callback();\n    });\n});"
  },
  {
    "path": "model/Apply.js",
    "content": "/**\n * *@info: Apply 数据实体\n *  @author: coverGuo\n *  @date: 2014-12-30\n */\n\n\nvar _ = require('underscore')._;\n\n/**\n * status 0 审核中 , 1 通过  , 2 不通过\n * @param args\n * @constructor\n */\nvar Apply = function (args){\n    if(!args){\n        return ;\n    }\n    _.defaults( this ,  _.pick(args , 'userName' ,'name' ,  'id' ,  'description' , 'main', 'createTime' , 'passTime' ) );\n}\n\n\nApply.prototype  = {\n    userName : undefined,\n    name : undefined,\n    url : undefined,\n    status : undefined,\n    id : undefined,\n    mail : undefined,\n    description : undefined,\n    createTime : undefined,\n    passTime : undefined\n}\n\nApply.STATUS_APPLYING = 0 ; // 审核中\nApply.STATUS_PASS = 1 ; // 通过\nApply.STATUS_FAIL = 2 ; // 拒绝\n\nmodule.exports =  Apply;"
  },
  {
    "path": "model/Approve.js",
    "content": "/**\n * *@info: Approve 数据实体\n *  @author: coverGuo\n *  @date: 2014-12-30\n */\n\nvar _ = require('underscore')._;\n\nvar Approve = function (args){\n\n    if(!args){\n        return ;\n    }\n\n    _.defaults(this ,  _.pick(args , 'id' ,'reply' , 'applyId' ));\n}\n\nApprove.prototype = {\n    id : undefined,\n    reply : undefined,\n    applyId : undefined,\n    userName : undefined,\n    createTime : undefined,\n    applyStatus : undefined\n}\n\nmodule.exports =  Approve;\n"
  },
  {
    "path": "model/User.js",
    "content": "/**\n * *@info: User 数据实体\n *  @author: coverGuo\n *  @date: 2014-12-30\n */\n\n\nvar _ = require(\"underscore\");\n\n/**\n * role :  0 普通成员  1 管理员\n * @param args\n * @constructor User\n */\nvar User = function(args){\n    if(!args){\n        return;\n    }\n    _.defaults(this, _.pick(args, 'id', 'loginName', 'chineseName', 'role'));\n}\n\nUser.prototype  = {\n    id : undefined,\n    loginName : undefined,\n    chineseName: undefined,\n    role : undefined\n}\n\nmodule.exports =  User;"
  },
  {
    "path": "model/UserApply.js",
    "content": "/**\n * *@info: userApply 数据实体\n *  @author: coverGuo\n *  @date: 2015-01-15\n */\n\nvar _ = require('underscore')._;\n\nvar User_Apply = function (args){\n\n    if(!args){\n        return ;\n    }\n\n    _.defaults(this ,  _.pick(args , 'userId' ,'applyId' ,'createTime', 'role' ));\n}\n\nUser_Apply.prototype = {\n    userId : undefined,\n    applyId : undefined,\n    createTime : undefined,\n    role : undefined\n}\n\nmodule.exports =  User_Apply;\n"
  },
  {
    "path": "oos/demo/demooos.js",
    "content": "var oa = require('yourOaModuel');\nvar crypto = require('crypto');\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\nvar isError = function(res, error) {\n    if (error) {\n        res.json({\n            ret: 1,\n            msg: error\n        });\n        return true;\n    }\n    return false;\n};\n\nmodule.exports = function(req, res, next) {\n    var params = req.query,\n        user = req.session.user,\n        userDao = req.models.userDao;\n\n    req.indexUrl = req.protocol + \"://\" + req.get('host') + '/user/index.html';\n\n    //跳转到 oa 进行登录\n    if (/^\\/oalogin/i.test(req.url)) {\n        var redirectUrl = req.indexUrl;\n        res.redirect('http://youroalogin.com?url=' + redirectUrl);\n        return;\n    }\n    //判断是否有ticket ，一般的oa统一登录都会有用 ticket进行统一登录\n    if (params && params.ticket) {\n        // 调用你的oa 组件，进行登录处理\n        oa.passport(params.ticket, function(result) {\n            if (result) {\n\n                // 存入session ，用于判断此用户已经登录\n                user = req.session.user = {\n                    loginName: result.LoginName,\n                    chineseName: result.ChineseName,\n                    role: 0\n                };\n\n\n                userDao.one({\n                    loginName: result.LoginName\n                }, function(err, dbUser) {\n                    if (isError(res, err)) {\n                        return;\n                    }\n\n                    // 用户没有登录 badjs， 进行创建用户信息\n                    if (!dbUser) {\n                        req.session.user.email = user.loginName + GLOBAL.pjconfig.email.emailSuffix;\n                        req.session.user.password = crypto.createHash(\"md5\").update(user.loginName).digest('hex');\n\n                        userDao.create(req.session.user, function(err, result) {\n                            if (isError(res, err)) {\n                                return;\n                            }\n\n                            req.session.user.role = result.role;\n                            req.session.user.id = result.id;\n\n                            logger.info(\"New User:\" + JSON.stringify(req.session.user) + \"insert into db-badjs\");\n                            next();\n                        });\n                    } else {\n                        // 已经登陆过了，将更加详细的信息注入到session中\n                        logger.info(\"Old User:\" + JSON.stringify(req.session.user));\n                        req.session.user.role = dbUser.role;\n                        req.session.user.id = dbUser.id;\n                        req.session.user.email = dbUser.email;\n\n                        // 用户没有登陆过，但是在 http://badjs.server.com/user/userManage.html 创建过id\n                        // 讲oa 回传的信息存入数据库\n                        if (!dbUser.chineseName) {\n                            dbUser.chineseName = result.ChineseName;\n                            dbUser.save(function(err, result) {});\n                        }\n                        next();\n                    }\n\n                });\n\n            } else {\n                res.send(403, 'Sorry! you can not see that.');\n            }\n        });\n    } else {\n        next();\n    }\n};"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"badjs-web\",\n  \"version\": \"0.1.0\",\n  \"description\": \"\",\n  \"main\": \"app.js\",\n  \"dependencies\": {\n    \"body-parser\": \"^1.9.0\",\n    \"connect-flash\": \"^0.1.1\",\n    \"cookie-parser\": \"^1.3.3\",\n    \"crypto\": \"0.0.3\",\n    \"ejs-loader\": \"^0.2.1\",\n    \"emailjs\": \"0.3.16\",\n    \"expose-loader\": \"^0.6.0\",\n    \"express\": \"^4.9.8\",\n    \"express-micro-tpl\": \"^0.3.1\",\n    \"express-session\": \"^1.9.0\",\n    \"jquery\": \"^2.1.3\",\n    \"log4js\": \"^0.6.2\",\n    \"map-stream\": \"0.0.5\",\n    \"moment\": \"^2.10.2\",\n    \"mysql\": \"^2.11.1\",\n    \"node-highcharts-exporting\": \"~0.0.9\",\n    \"orm\": \"^3.2.0\",\n    \"orm-transaction\": \"0.0.2\",\n    \"passport\": \"^0.2.1\",\n    \"passport-local\": \"^1.0.0\",\n    \"request\": \"^2.63.0\",\n    \"serve-static\": \"^1.7.1\",\n    \"underscore\": \"1.5.2\",\n    \"url-join\": \"0.0.1\",\n    \"url-valid\": \"^0.3.0\",\n    \"ws\": \"~1.0.0\",\n    \"axon\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"webpack\": \"~1.8.5\",\n    \"glob\": \"~5.0.5\"\n  },\n  \"scripts\": {},\n  \"author\": \"\",\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "project.debug.json",
    "content": "{\n    \"host\" : \"http://badjs.server.com/\",\n    \"port\": 8081,\n    \"mysql\" : {\n        \"url\" : \"mysql://root:root@localhost:3306/badjs\"\n    },\n    \"storage\" : {\n        \"errorMsgTopUrl\" : \"http://127.0.0.1:9000/errorMsgTop\",\n        \"queryUrl\" : \"http://127.0.0.1:9000/query\"\n    },\n    \"acceptor\": {\n        \"pushProjectUrl\" : \"http://127.0.0.1:9001/getProjects\"\n    },\n    \"openapi\": {\n        \"pushProjectUrl\" : \"http://127.0.0.1:9002/getProjects\"\n    },\n    \"mq\": {\n        \"url\": \"tcp://127.0.0.1:10000\",\n        \"subscribe\": \"badjs\",\n        \"module\": \"axon\"\n    },\n    \"email\": {\n        \"homepage\": \"http://badjs.server.com/user/index.html\",\n        \"from\": \"noreply-badjs@demo.com\",\n        \"emailSuffix\" : \"@demo.com\",\n        \"smtp\": \"smtp.demo.com\",\n        \"smtpUser\":   \"username\", \n        \"smtpPassword\":\"password\", \n        \"time\": \"09:00:00\",\n        \"top\": 20,\n        \"module\": \"email\"\n    }\n}\n"
  },
  {
    "path": "project.json",
    "content": "{\n    \"host\" : \"http://badjs.server.com/\",\n    \"port\": 8081,\n    \"mysql\" : {\n        \"url\" : \"mysql://root:root@localhost:3306/badjs\"\n    },\n    \"storage\" : {\n        \"errorMsgTopUrl\" : \"http://127.0.0.1:9000/errorMsgTop\",\n        \"queryUrl\" : \"http://127.0.0.1:9000/query\"\n    },\n    \"acceptor\": {\n        \"pushProjectUrl\" : \"http://127.0.0.1:9001/getProjects\"\n    },\n    \"openapi\": {\n        \"pushProjectUrl\" : \"http://127.0.0.1:9002/getProjects\"\n    },\n    \"mq\": {\n        \"url\": \"tcp://127.0.0.1:10000\",\n        \"subscribe\": \"badjs\",\n        \"module\": \"axon\"\n    },\n    \"email\": {\n        \"homepage\": \"http://badjs.server.com/user/index.html\",\n        \"from\": \"noreply-badjs@demo.com\",\n        \"emailSuffix\" : \"@demo.com\",\n        \"smtp\": \"smtp.demo.com\",\n        \"smtpUser\":   \"username\", \n        \"smtpPassword\":\"password\",\n        \"time\": \"09:00:00\",\n        \"top\": 20,\n        \"module\": \"email\"\n    }\n\n}\n"
  },
  {
    "path": "retCode.txt",
    "content": "\n\nret结果码记录：\n\n\n0 ： 成功\n1001： 没有登录\n1002： 缺少参数 或参数错误\n1003： 权限不足\n1004:  查询为空\n"
  },
  {
    "path": "service/ApplyService.js",
    "content": "/**\n * Created by coverguo on 2015/01/08.\n */\n\nvar http = require('http');\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\nvar UserApplyService = require('./UserApplyService');\n\nvar LogService = require('./LogService');\n\n\n\nvar ApplyService = function() {\n    this.applyDao = global.models.applyDao;\n    this.userApplyDao = global.models.userApplyDao;\n};\n\n\n\nvar logService = new LogService();\nvar pushProject = function(from) {\n    logService.pushProject(function(err) {\n        if (err) {\n            logger.warn('push project  error ' + err);\n        } else {\n            logger.info('push project success from ' + from + ' .');\n        }\n    });\n}\n\n\n\nApplyService.prototype = {\n\n    queryListByAdmin: function(target, callback) {\n\n        this.applyDao.find([\"createTime\", \"Z\"], function(err, items) {\n            if (err) {\n                callback(err);\n                return;\n            }\n            callback(null, items);\n        });\n    },\n    queryListByUser: function(target, callback) {\n        this.applyDao.find({\n            userName: target.user.loginName\n        }, [\"createTime\", \"Z\"], function(err, items) {\n            if (err) {\n                callback(err);\n                return;\n            }\n            callback(null, items);\n        });\n    },\n    queryListBySearch: function(searchParam, callback) {\n\n\n        this.applyDao.find(searchParam, [\"createTime\", \"Z\"], function(err, items) {\n            if (err) {\n                callback(err);\n                return;\n            }\n            callback(null, items);\n        });\n    },\n    add: function(target, callback) {\n        var self = this;\n        var userId = target.user.id;\n        this.applyDao.create(target, function(err, newApply) {\n            if (err) {\n                callback(err);\n                return;\n            }\n            logger.debug(\"Insert into b_apply success! target1: \" + newApply.id);\n            //创建项目的即为管理员 故role ==1\n            var userApply = {\n                userId: userId,\n                applyId: newApply.id,\n                role: 1,\n                createTime: new Date()\n            };\n            self.userApplyDao.create(userApply, function(err, items) {\n                if (err) {\n                    callback(err);\n                    return;\n                }\n                callback(null);\n            })\n\n        });\n    },\n    remove: function(target, callback) {\n        this.applyDao.one({\n            id: target.id\n        }, function(err, apply) {\n            // SQL: \"SELECT * FROM b_apply WHERE name = 'xxxx'\"\n            if (err || !apply) {\n                callback(new Error(\"can not found apply , id\" + target.id));\n                return;\n            }\n            for (var key in target) {\n                apply[key] = target[key];\n            };\n            apply.remove(function(err) {\n\n                if (err) {\n                    console.error(\"remove error : \" + err.toString())\n                    throw err;\n                }\n\n                var userApplyService = new UserApplyService();\n\n                userApplyService.removeByApplyId({\n                    applyId: apply.id\n                }, function(err) {\n                    if (err) {\n                        callback(null);\n                    } else {\n                        callback(null);\n                    }\n\n                });\n\n                pushProject('remove');\n\n            });\n        });\n    },\n    update: function(target, callback) {\n        this.applyDao.one({\n            id: target.id\n        }, function(err, apply) {\n            // SQL: \"SELECT * FROM b_apply WHERE name = 'xxxx'\"\n            for (var key in target) {\n                apply[key] = target[key];\n            };\n\n            apply.save(function(err) {\n                // err.msg = \"under-age\";\n                callback(null, {\n                    ret: 0,\n                    msg: \"success update\"\n                });\n\n                // update project.db\n                pushProject('update');\n            });\n        });\n    },\n    queryById: function(target, callback) {\n        this.applyDao.one({\n            id: target.id\n        }, function(err, apply) {\n\n            callback(err, apply);\n        });\n    }\n}\n\n\nmodule.exports = ApplyService;\n"
  },
  {
    "path": "service/ApproveService.js",
    "content": "/**\n * Created by coverguo on 2015/01/12.\n */\n\nvar http = require('http');\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\n\n\nvar ApproveService = function() {\n    this.approveDao = global.models.approveDao;\n    this.applyDao = global.models.applyDao;\n\n};\n\n\n\nApproveService.prototype = {\n    query: function(target, callback) {\n\n\n        //管理员\n        if (target.user.role == 1) {\n            this.approveDao.all({}, function(err, items) {\n                if (err) {\n                    callback(err);\n                    return;\n                }\n                callback(null, {\n                    ret: 0,\n                    msg: \"success\",\n                    data: items\n                });\n            });\n        } else {\n            this.approveDao.find({\n                userName: target.user.loginName\n            }, function(err, items) {\n                if (err) {\n                    callback(err);\n                    return;\n                }\n                callback(null, {\n                    ret: 0,\n                    msg: \"success\",\n                    data: items\n                });\n            });\n        }\n\n\n    },\n    add: function(target, callback) {\n        var self = this;\n        this.approveDao.create(target, function(err, items) {\n            if (err) {\n                callback(err);\n                return;\n            }\n            logger.info(\"Insert into b_approve success! target: \", target);\n            // 改变申请表状态\n            var apply = {\n                id: parseInt(target.applyId, 10),\n                status: parseInt(target.applyStatus, 10)\n            };\n            if (target.applyStatus == 1) {\n                apply.passTime = target.createTime;\n            }\n            self.update(apply, function(err, data) {\n                if (err) {\n                    callback(err);\n                    return;\n                }\n                logger.info(\"Update b_apply success! apply: \", apply);\n                callback(null, {\n                    ret: 0,\n                    msg: \"success add\"\n                });\n            })\n\n        });\n\n    },\n    remove: function(target, callback) {\n\n    },\n    update: function(target, callback) {\n        this.applyDao.one({\n            id: target.id\n        }, function(err, apply) {\n            // SQL: \"SELECT * FROM b_apply WHERE name = 'xxxx'\"\n            for (key in target) {\n                apply[key] = target[key];\n            }\n            apply.save(function(err) {\n                if (err) {\n                    callback(err);\n                    return;\n                }\n                callback(null);\n            });\n        });\n    }\n}\n\n\nmodule.exports = ApproveService;\n"
  },
  {
    "path": "service/BusinessService.js",
    "content": "/**\n * Created by chriscai on 2014/12/17.\n */\n\n\nvar Apply = require('../model/Apply');\nvar _ = require('underscore');\n\nvar BusinessService = function() {\n\n    this.db = global.models.db;\n};\n\n\nBusinessService.prototype = {\n\n    findBusinessByUser: function(userName, callback) {\n\n        var string = \"select a.id, u.loginName, u.chineseName, ua.role, a.name \" +\n            \"from  b_user as u join b_user_apply as ua on(ua.userId = u.id) \" +\n            \"join b_apply as a on (a.id =ua.applyId) \" +\n            \"where  a.status=? and u.loginName=? \";\n        var condition = [Apply.STATUS_PASS];\n\n        condition.push(userName);\n\n        // console.log(string);\n        this.db.driver.execQuery(string, condition, function(err, data) {\n            if (err) {\n                callback(err);\n                return;\n            }\n            callback(null, data);\n        });\n\n    },\n    findBusinessByProjectOwner: function(userName, callback) {\n\n        var string = \"select a.id, u.loginName, u.chineseName, ua.role, a.name \" +\n            \"from  b_user as u join b_user_apply as ua on(ua.userId = u.id) \" +\n            \"join b_apply as a on (a.id =ua.applyId) \" +\n            \"where  a.status=? and u.loginName=?  and ua.role =1\";\n        var condition = [Apply.STATUS_PASS];\n\n        condition.push(userName);\n\n        // console.log(string);\n        this.db.driver.execQuery(string, condition, function(err, data) {\n            if (err) {\n                callback(err);\n                return;\n            }\n            callback(null, data);\n        });\n\n    },\n\n    findBusiness: function(callback) {\n\n        var string = \"select a.id, a.url, a.blacklist , a.appkey, u.loginName, u.chineseName, a.name \" +\n            \"from b_apply a join b_user u on (a.userName=u.loginName) \" +\n            \"where a.status=?\";\n        var condition = [Apply.STATUS_PASS];\n\n        // console.log(string);\n        this.db.driver.execQuery(string, condition, function(err, data) {\n            if (err) {\n                return callback(err);\n            }\n\n            _.each(data, function(value, ke) {\n                value.role = 1;\n            });\n            callback(null, data);\n        });\n\n    }\n\n};\n\nmodule.exports = BusinessService;\n"
  },
  {
    "path": "service/EmailService.js",
    "content": "/* global global, global, module, __dirname, Buffer */\n/**\n * Created by kaelyang on 2015/5/19.\n */\nvar fs = require(\"fs\");\nvar http = require('http');\nvar path = require(\"path\");\n\nvar _ = require('underscore');\nvar logger = require('log4js').getLogger();\nvar UserService = require('./UserService');\nvar dateFormat = require(\"../utils/dateFormat\");\nvar exporting = require('node-highcharts-exporting');\nvar StatisticsService = require('./StatisticsService');\nvar sendEmail = require(\"../utils/\" + global.pjconfig.email.module);\n\nvar DAY_LENGTH = 30;\n\nvar EmailService = function() {\n    this.userService = new UserService();\n    this.statisticsService = new StatisticsService();\n    this.top = parseInt(global.pjconfig.email.top, 10) || 20;\n    this.from = global.pjconfig.email.from || \"noreply-badjs@tencent.com\";\n    this.homepage = global.pjconfig.email.homepage;\n};\n\nvar getYesterday = function() {\n    var date = new Date();\n    date.setDate(date.getDate() - 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n};\n\nvar setChartX = function(number) {\n    var days = [];\n    var nowDay = new Date() - 0;\n\n    for (var i = number; i > 0; i--) {\n        var day = nowDay - i * 1000 * 60 * 60 * 24;\n        days.push(dateFormat(new Date(day), 'MM-dd'));\n    }\n    return days;\n};\n\nvar getImageData = function(name, data) {\n\n    var totalArray = [];\n    var categories = setChartX(DAY_LENGTH);\n\n    for (var i = 0; i < DAY_LENGTH; i++) {\n        totalArray.push(0);\n    }\n\n    function whichDayIndex(day1) {\n        for (var i = 0, len = categories.length; i < len; i++) {\n            if (day1 == categories[i]) {\n                return i;\n            }\n        }\n        return false;\n    }\n\n    _.forEach(data, function(value, key) {\n        var index = whichDayIndex(dateFormat(new Date(value.startDate), 'MM-dd'));\n        totalArray[index] = value.total;\n    });\n\n    return {\n        data: {\n            width: 800,\n            title: {\n                text: \"The last \" + DAY_LENGTH + \" days line charts\"\n            },\n            xAxis: {\n                categories: categories\n            },\n            yAxis: {\n                min: 0,\n                title: {\n                    text: 'Total'\n                }\n            },\n            series: [{\n                data: totalArray,\n                name: \"-\"\n            }]\n        }\n    };\n};\n\nvar encodeHtml = function(str) {\n    return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;').replace(/\\u0000/g, ' ');\n};\n\nEmailService.prototype = {\n    render: function(data, imagePath) {\n        var that = this;\n        data = data || {};\n        var html = [];\n        html.push('<html>');\n        html.push('<h3>【BadJS日报邮件】 ' + data.title + '</h3>');\n        that.homepage &&\n            html.push('<p style=\"font-size:12px\"><a href=\"{{homepage}}\">日志查看点这: {{homepage}}</a></p>'\n                .replace(/{{homepage}}/g, that.homepage));\n        var content = data.content;\n        if (content && content.length) {\n\n            if (imagePath) {\n                html.push('<h4>最近' + DAY_LENGTH + '天图表统计</h4>');\n                html.push('<p><img src=\"' + global.pjconfig.host + imagePath + '\"></p>');\n            }\n\n            html.push('<table style=\"border-collapse:collapse;;width:95%\"><tr style=\"background-color:#188eee;text-align:left;color:#fff\"><th style=\"padding:2px 0 2px 10px;border:1px solid #dedede;width:60px\">#</th><th style=\"padding:2px 0 2px 10px;border:1px solid #dedede;;width:120px\">出现次数</th><th style=\"padding:2px 0 2px 10px;border:1px solid #dedede\">错误内容</th></tr>');\n            var total_top = 0;\n            var index = 0;\n            content.forEach(function(v) {\n                v = typeof v === 'object' ? v : null;\n                if (v) {\n                    html.push('<tr style=\"background-color:{{bgc}}\"><td style=\"padding:2px 0 2px 10px;border:1px solid #dedede\">{{index}}</td><td style=\"padding:2px 0 2px 10px;border:1px solid #dedede\">{{times}}</td><td style=\"padding:2px 0 2px 10px;border:1px solid #dedede\">{{desc}}</td></tr>'\n                        .replace(/{{index}}/g, index + 1)\n                        .replace(/{{times}}/g, v.total)\n                        .replace(/{{desc}}/g, encodeHtml(v.title))\n                        .replace(/{{bgc}}/g, index % 2 ? '#fff' : '#eee')\n                    );\n                    total_top += v.total;\n                    ++index;\n                }\n            });\n            html.push('</table>');\n            var total = data.total;\n            total > 0 && html.push('<p style=\"border-top:1px solid #666;margin-top:20px;width:520px;padding:5px 0 0 10px\">共 {{total}} 条记录, Top {{top}} 占 {{per}}.</p>'\n                .replace(/{{total}}/g, total)\n                .replace(/{{top}}/g, that.top)\n                .replace(/{{per}}/g, (total_top * 100 / total).toFixed(2) + '%')\n            );\n\n        } else {\n            html.push('<p style=\"border-top:1px solid #666;margin-top:20px;width:520px;padding:5px 0 0 10px\">暂无数据</p>');\n        }\n\n        html.push('</html>');\n        return html.join('');\n    },\n    queryAll: function(isRetry, sendObject) {\n        var that = this;\n        that.date = getYesterday();\n        logger.info('Send mail query all start');\n        that.userService.queryListByCondition({\n            applyId: -1,\n            role: -1\n        }, function(err, userlist) {\n            if (err) {\n                return logger.error('Send email userService queryListByCondition error');\n            } else {\n                var orderByApplyId = {};\n                userlist.forEach(function(v) {\n                    // 兼容没有登陆过的用户，自动拼接 邮箱后缀\n                    if (!v.email) {\n                        v.email = v.loginName + global.pjconfig.email.emailSuffix;\n                    }\n                    if (orderByApplyId[v.applyId]) {\n                        orderByApplyId[v.applyId].push(v);\n                    } else {\n                        orderByApplyId[v.applyId] = [v];\n                    }\n                });\n                var count = 0 ;\n                for (var applyId in orderByApplyId) {\n                    (function(users, applyId) {\n                        var to_list = []; // 收件方\n                        var cc_list = []; // 抄送方\n                        var name = '';\n                        users.forEach(function(v) {\n                            v.role === 0 ? cc_list.push(v.email) : to_list.push(v.email);\n                            name = v.name;\n                        }); // jshint ignore:line\n\n                        // 测试代码\n                        if (sendObject) {\n                            if (sendObject.sendId && sendObject.sendId != applyId) {\n                                return;\n                            }\n                            if (sendObject.sendToList.length) {\n                                to_list = sendObject.sendToList;\n                            }\n                            cc_list = [];\n                        }\n                        that.statisticsService.queryById({\n                            top: that.top,\n                            projectId: applyId,\n                            startDate: that.date\n                        }, function(err, data) {\n                            if (err) return logger.error('Send email statisticsService queryById error ' + applyId);\n                            if (data && data.length > 0) {\n                                that.statisticsService.queryByChart({\n                                    projectId: applyId,\n                                    timeScope: 2\n                                }, function(err, chartData) {\n                                    if (err || chartData.data.length <= 0) {\n                                        that.sendEmail({\n                                            to: to_list,\n                                            cc: cc_list,\n                                            title: name\n                                        }, data[0]);\n                                    } else {\n                                        count ++ ;\n                                        setTimeout(function (){\n                                            exporting(getImageData(name, chartData.data), function(err, image) {\n                                                if (err) {\n                                                    logger.info(\"generate image error \" + err.toString() + \", id =\" + applyId);\n                                                    that.sendEmail({\n                                                        to: to_list,\n                                                        cc: cc_list,\n                                                        title: name\n                                                    }, data[0]);\n                                                } else {\n                                                    var imagePath = \"static/img/tmp/\" + (new Date - 0 + applyId) + \".png\";\n                                                    fs.writeFile(path.join(__dirname, \"..\", imagePath), new Buffer(image, 'base64'), function() {\n                                                        that.sendEmail({\n                                                            to: to_list,\n                                                            cc: cc_list,\n                                                            title: name,\n                                                            imagePath: imagePath\n                                                        }, data[0]);\n                                                    });\n                                                }\n                                            });\n                                        }, 1000 * count)\n                                    }\n                                });\n                            } else {\n                                logger.error('Send email data format error by ' + applyId );\n                            }\n                        }); // jshint ignore:line\n                    })(orderByApplyId[applyId], applyId); // jshint ignore:line\n                }\n            }\n        });\n        // if( isRetry === undefined ? true : !!isRetry) {\n        setTimeout(function() {\n            that.queryAll();\n        }, 86400000);\n        // }\n    },\n    sendEmail: function(emails, data) {\n        var title = \"【BadJS 日报 \" + dateFormat(this.date, \"yyyy-MM-dd\") + \"】- \" + emails.title;\n        data.title = emails.title;\n        var content = this.render(data, emails.imagePath);\n        sendEmail(this.from, emails.to, emails.cc, title, content);\n    },\n    start: function() {\n        var that = this;\n        var date = new Date();\n        date.setDate(date.getDate() + 1);\n        var time = global.pjconfig.email.time.toString().split(':');\n        date.setHours(parseInt(time[0], 10) || 9, parseInt(time[1], 10) || 0, parseInt(time[2], 10) || 0, 0);\n        var timeDiff = date.valueOf() - (new Date()).valueOf();\n        setTimeout(function() {\n            that.queryAll();\n        }, timeDiff);\n        logger.info('Email service will start after: ' + timeDiff);\n    }\n};\n\nmodule.exports = EmailService;\n"
  },
  {
    "path": "service/LogService.js",
    "content": "/* global global */\n/**\n * Created by chriscai on 2014/12/16.\n */\n\nvar http = require('http');\n\nvar log4js = require('log4js'),\n    BusinessService = require('./BusinessService'),\n    _ = require('underscore'),\n    logger = log4js.getLogger();\n\nvar request = require(\"request\");\n\n\n\nvar LogService = function() {\n\n    /*\n        if(global.DEBUG){\n            this.queryUrl = 'http://localhost:9000/query';\n        }else {\n            this.queryUrl = 'http://10.143.132.205:9000/query';\n            this.pushProjectUrl = 'http://10.143.132.205:9001/getProjects';\n        }\n    */\n\n    this.queryUrl = global.pjconfig.storage.queryUrl;\n    this.pushProjectUrl = global.pjconfig.acceptor.pushProjectUrl;\n    this.pushProjectUrl2 = global.pjconfig.openapi.pushProjectUrl;\n\n    // this.url = 'http://127.0.0.1:9000/query';\n    logger.debug('query url : ' + this.queryUrl);\n};\n\n\n\nLogService.prototype = {\n    query: function(params, callback) {\n        var startDate = new Date;\n        var strParams = '';\n        for (var key in params) {\n            if (key == 'index') {\n                strParams += key + \"=\" + params[key] + \"&\";\n            } else {\n                strParams += key + \"=\" + encodeURIComponent(JSON.stringify(params[key])) + \"&\";\n            }\n        }\n        strParams += '_=1';\n        logger.debug('query param : ' + strParams);\n        http.get(this.queryUrl + '?' + strParams, function(res) {\n            var buffer = '';\n            res.on('data', function(chunk) {\n                buffer += chunk.toString();\n            }).on('end', function() {\n                try {\n                    callback(null, JSON.parse(buffer));\n                } catch (e) {\n                    callback(e);\n                }\n                logger.info('query log spend : ' + (new Date - startDate) + \"ms by \" + params.id);\n            });\n\n        }).on('error', function(err) {\n            logger.warn('error :' + err);\n            callback(err);\n        });\n    },\n    pushProject: function(callback) {\n        var self = this;\n\n        callback || (callback = function() {});\n\n        var businessService = new BusinessService();\n\n        var push = function() {\n\n            businessService.findBusiness(function(err, item) {\n\n                var projectsInfo = {};\n\n                _.each(item, function(value) {\n\n                    try{\n                        value.blacklist =  JSON.parse(value.blacklist || {})\n                    }catch(e){\n                        value.blacklist = {}\n                    }\n\n                    projectsInfo[value.id] = {id : value.id , url : value.url , blacklist : value.blacklist , appkey : value.appkey};\n                });\n\n                var result = [0, 0];\n\n                var resultCall = function() {\n                    if (result[0] < 0 && result[1] < 0) {\n                        callback(new Error(\"error\"));\n                    } else if (result[0] > 0 && result[1] > 0) {\n                        callback();\n                    }\n                };\n\n                request.post(self.pushProjectUrl, {\n                    form: {\n                        projectsInfo: JSON.stringify(projectsInfo),\n                        auth: \"badjsAccepter\"\n                    }\n                }, function(err) {\n                    if (err) {\n                        logger.warn('push projectIds to acceptor  error :' + err);\n                        result[0] = -1;\n                    } else {\n                        logger.info('push projectIds to acceptor  success');\n                        result[0] = 1;\n                    }\n                    resultCall();\n                });\n\n                request.post(self.pushProjectUrl2, {\n                    form: {\n                        projectsInfo: JSON.stringify(projectsInfo),\n                        auth: \"badjsOpen\"\n                    }\n                }, function(err) {\n                    if (err) {\n                        logger.warn('push projectIds to open  error :' + err);\n                        result[1] = -1;\n                    } else {\n                        logger.info('push projectIds to openapi success');\n                        result[1] = 1;\n                    }\n                    resultCall();\n                });\n\n            });\n        };\n\n        push();\n\n    }\n};\n\n\nmodule.exports = LogService;\n"
  },
  {
    "path": "service/OfflineLogService.js",
    "content": "/**\n * Created by chriscai on 2015/4/29.\n */\n\nvar fs = require(\"fs\");\nvar http = require(\"http\");\nvar path = require(\"path\");\nvar bodyParser = require('body-parser');\nvar express = require('express');\nvar app = express();\n\n\nglobal.offlineLogMonitorInfo = {}\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\nvar offlineLogMonitorPath = path.join(__dirname , '..'  , 'offline_log' , \"offline_log_monitor.db\");\ntry{\n    global.offlineLogMonitorInfo = JSON.parse( fs.readFileSync(offlineLogMonitorPath).toString());\n    logger.info(\"offline_log_monitor.db success \" )\n}catch(e){\n    logger.error(\"offline_log_monitor.db error \" , e)\n}\n\nsetInterval(function (){\n    fs.writeFileSync(offlineLogMonitorPath , JSON.stringify(global.offlineLogMonitorInfo));\n},3600000 )\n\napp.use(bodyParser.urlencoded({ extended: false }));\n\n\napp.post(\"/offlineLogReport\" , function (req, res){\n    var param = req.body;\n    if(param && param.offline_log){\n        try{\n            var offline_log = JSON.parse(param.offline_log);\n            if(!/[\\w]{1,7}/.test(offline_log.id) ){\n                throw new Error(\"invalid id \" + offline_log.id)\n            }\n\n\n\n            global.models.applyDao.one({\n                id: offline_log.id\n            }, function(err, apply) {\n\n                if(!apply || err || apply.status != 1){\n                    logger.info('invaild offlineLog  id: ' + offline_log.id);\n                    return ;\n                }\n                \n                if(!/^\\w+$/i.test( offline_log.id )){\n                    logger.info('error log_id: ' + offline_log.id);\n                    return ;\n                }\n\n                var filePath = path.join(__dirname , '..'  , 'offline_log' , offline_log.id +\"\");\n                var fileName = offline_log.uin +\"_\"+ offline_log.startDate + \"_\" + offline_log.endDate;\n\n                if(!fs.existsSync(filePath)){\n                    fs.mkdirSync(filePath)\n                }\n                fs.writeFile(path.join(filePath , fileName ) , param.offline_log, function(err) {\n                    if (err) {\n                        logger.info('write offline log error', err);\n                        throw err;\n                    }\n                });\n\n                logger.info('get offline log : ' + path.join(filePath , fileName ));\n            });\n\n\n        }catch(e){\n            logger.warn(\"invaild offlineLog error  \"+ e);\n        }\n    }\n\n    res.end();\n})\n\napp.use(\"/offlineLogCheck\" , function (req, res){\n\n    var param = req.query;\n    if(param.id && param.uin && global.offlineLogMonitorInfo[param.id] && global.offlineLogMonitorInfo[param.id][param.uin]){\n        delete global.offlineLogMonitorInfo[param.id][param.uin]\n        logger.info('should download offline log: ' + (param.id + \"_\" + param.uin));\n        res.end(\"true\")\n    }else {\n        res.end(\"false\")\n    }\n})\n\n\n\n/**\n * dispatcher\n * @returns {Stream}\n */\nmodule.exports = function () {\n\n    logger.info(\"offline service start ok...\")\n    app.listen(9010);\n\n};\n"
  },
  {
    "path": "service/RealtimeService.js",
    "content": "/**\n * Created by chriscai on 2015/4/29.\n */\n\nvar ProcessorThread = require(\"../service/worker/ProcessorPool\");\n\n\nvar WebSocketServer = require('ws').Server;\n\nvar http = require(\"http\");\n\nvar path = require(\"path\");\n\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\n\n\n/**\n * dispatcher\n * @returns {Stream}\n */\nmodule.exports = function (app) {\n\n\n    logger.info(\"starting mq ...\" );\n\n\n    var server = http.createServer(app);\n    app.listen = function(){\n        return server.listen.apply(server, arguments)\n    };\n    var webSocketServer = new WebSocketServer({\n        server: server,\n        path: \"/ws/realtimeLog\"\n    });\n\n\n    ProcessorThread.createPool();\n\n    webSocketServer.on('connection', function (ws) {\n        try{\n            logger.info(\"one client connected , ip: \" + ws._socket.remoteAddress)\n        }catch(e){}\n        createProcessor(ws);\n    });\n\n    webSocketServer.on('close', function (ws) {\n        try{\n            logger.info(\"one client closed , ip: \" + ws._socket.remoteAddress)\n        }catch(e){}\n    });\n\n\n    var createProcessor = function (ws){\n        ProcessorThread.getProcessor().start({wbClient : ws});\n    }\n\n};\n"
  },
  {
    "path": "service/StatisticsService.js",
    "content": "/**\n * Created by chriscai on 2015/1/12.\n */\nvar http = require('http');\n\nvar log4js = require('log4js'),\n    Apply = require('../model/Apply'),\n    http = require('http'),\n    _ = require('underscore'),\n    logger = log4js.getLogger(),\n    ORM = require(\"orm\");\n\nvar dateFormat = function(date, fmt) {\n    var o = {\n        \"M+\": date.getMonth() + 1, //月份\n        \"d+\": date.getDate(), //日\n        \"h+\": date.getHours(), //小时\n        \"m+\": date.getMinutes(), //分\n        \"s+\": date.getSeconds(), //秒\n        \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度\n        \"S\": date.getMilliseconds() //毫秒\n    };\n    if (/(y+)/.test(fmt)) {\n        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n    }\n    for (var k in o) {\n        if (new RegExp(\"(\" + k + \")\").test(fmt)) {\n            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((\"00\" + o[k]).substr((\"\" + o[k]).length)));\n        }\n    }\n    return fmt;\n};\n\nvar StatisticsService = function() {\n\n    this.statisticsDao = global.models.statisticsDao;\n    this.applyDao = global.models.applyDao;\n\n    //this.triggerUrl = global.pjconfig.storage.errorMsgTopCacheUrl;\n    this.url = global.pjconfig.storage.errorMsgTopUrl;\n\n    logger.debug('query url : ' + this.url);\n};\n\nStatisticsService.prototype = {\n    queryById: function(param, callback) {\n        this.statisticsDao.find({\n            projectId: param.projectId,\n            startDate: dateFormat(param.startDate, 'yyyy-MM-dd hh:mm:ss')\n        }, function(err, items) {\n            if (err) {\n                callback(err);\n                return;\n            }\n\n            try {\n                if (items[0]) {\n                    items[0].content = JSON.parse(items[0].content);\n\n                    if (param.top) {\n                        items[0].content = items[0].content.slice(0, param.top);\n                    }\n                }\n            } catch (e) {\n                callback(e);\n                logger.error(\"queryById error :  \" + param.projectId + \", error :\" + e.toString());\n                return;\n            }\n\n            callback(null, items);\n        });\n\n    },\n    queryByChart: function(param, callback) {\n        //筛选参数\n        var s_params = {};\n        if (param.projectId != -1) {\n            s_params.projectId = param.projectId;\n        }\n\n        //时间开始范围 7天内 或者1个月内\n        var oneDay = 1000 * 60 * 60 * 24;\n        var day = param.timeScope == 1 ? 7 : 30;\n        param.startTime = new Date() - oneDay * day;\n        param.startTime = dateFormat(new Date(param.startTime), 'yyyy-MM-dd');\n\n        if (global.DEBUG) {\n            logger.debug(\"query start time is \" + param.startTime);\n        }\n        this.statisticsDao.find(s_params)\n            .only(\"endDate\", \"startDate\", \"projectId\", \"id\", \"total\")\n            .where(\"startDate >=?\", [param.startTime])\n            .all(function(err, items) {\n                if (err) {\n                    callback(err);\n                    return;\n                }\n                callback(null, {\n                    ret: 0,\n                    msg: \"success\",\n                    data: items\n                });\n            }).where(function() {\n\n            });\n    },\n    fetchAndSave: function(id, startDate, cb) {\n        var self = this;\n        http.get((this.url + '?id=' + id + '&startDate=' + (startDate - 0)), function(res) {\n            var buffer = '';\n            res.on('data', function(chunk) {\n                buffer += chunk.toString();\n            }).on('end', function() {\n                var saveModel = {};\n                try {\n                    //replace emoji to empty , mysql unsupported emoji code\n                    buffer=buffer.replace(/\\ud83d[\\udc00-\\udfff]/gi , \"\")\n                    var result = JSON.parse(buffer);\n\n                    _.forEach(result.item, function(value, key) {\n                        value.title = value._id;\n                        delete value._id;\n                    });\n                    saveModel = {\n                        startDate: new Date(result.startDate),\n                        endDate: new Date(result.endDate),\n                        content: JSON.stringify(result.item),\n                        projectId: id,\n                        total: result.pv\n                    };\n                } catch (err) {\n                    logger.error('parse statistic result error(id='+id+') :' + err);\n                    saveModel = {\n                        startDate: startDate,\n                        endDate: new Date(+startDate + 86400000-1),\n                        content: \"[]\",\n                        projectId: id,\n                        total: 0\n                    };\n                }\n                self.statisticsDao.create(saveModel, function(err, items) {\n                    if (err) {\n                        logger.error(\"Insert into b_statistics error(id=\", id + \") :  \" + err);\n                    }\n                    logger.info(\"Insert into b_statistics success(id=\", id + \") :  \");\n                    cb && cb(err);\n                });\n            });\n\n        }).on('error', function(err) {\n            logger.error('error :' + err);\n        });\n    },\n\n    //triggerStorageCache: function(ids, startDate, cb) {\n    //    http.get((this.triggerUrl + '?ids=' + ids + '&startDate=' + (startDate - 0)), function(res) {\n    //        //  res.on(\"end\" , function (){\n    //        cb();\n    //        // });\n    //    }).on('error', function(err) {\n    //        cb(err);\n    //        logger.error('triggerStorageCache error :' + err);\n    //    });\n    //},\n\n    startMonitor: function() {\n        var self = this;\n\n\n        var getFetchDate = function() {\n            var tomorrow = new Date(nowDate);\n            tomorrow.setHours(2, 0, 0, 0);\n            tomorrow.setDate(tomorrow.getDate() + 1);\n            return tomorrow;\n        };\n\n        var getStartDay = function() {\n            var startDate = new Date(nowDate);\n            startDate.setHours(0, 0, 0, 0);\n            return startDate;\n        };\n\n        var nowDate = new Date;\n        var targetDate = getFetchDate();\n\n        var startTimeout = function() {\n            var afterDate = targetDate - nowDate;\n            // after date 有误，取消循环\n            if (isNaN(afterDate) || afterDate < 1000 * 60 * 60) {\n                logger.info(\"afterDate error : targetDate\" + targetDate + \" , now:\" + nowDate);\n                return;\n            }\n            setTimeout(function() {\n                var startDate = getStartDay();\n                self.applyDao.find({\n                    status: Apply.STATUS_PASS\n                }, function(err, item) {\n                    if (err) {\n                        logger.error(\"find apply error  :  \" + err);\n                    }\n\n                    var ids = \"0\";\n                    _.each(item, function(value, key) {\n                        ids += \"_\" + value.id;\n                    });\n\n                    //self.triggerStorageCache(ids, startDate, function(err) {\n                    //    logger.info(\"trigger success and after 5400000s fetch result\");\n                        //if (!err) {\n                        //    setTimeout(function() {\n                                logger.info(\"start fetching result ... \");\n                                var count = 0;\n                                _.each(item, function(value, key) {\n                                    setTimeout(function (){\n                                        self.fetchAndSave(value.id, startDate);\n                                    }, count * 500)\n                                     count ++;\n                                });\n                            //}, 5400000); // 1个半小时候后，拉取统计\n\n                        //}\n                    //});\n\n                    nowDate = new Date();\n                    targetDate = getFetchDate();\n\n                    startTimeout();\n                });\n            }, afterDate);\n\n            logger.info(\"after \" + ((afterDate) / 1000) + \"s will fetch again \");\n        };\n\n        startTimeout();\n\n    }\n};\n\n\n\nmodule.exports = StatisticsService;\n"
  },
  {
    "path": "service/UserApplyService.js",
    "content": "/**\n * Created by coverguo on 2015/01/15.\n */\n\nvar http = require('http'),\n    log4js = require('log4js'),\n    logger = log4js.getLogger();\n\n\n\nvar userApplyService = function (){\n    this.userApplyDao = global.models.userApplyDao;\n    this.userDao = global.models.userDao;\n};\n\n\n\nuserApplyService.prototype = {\n    query : function (target , callback){\n\n\n    },\n    add: function(target, callback){\n        var self = this;\n        var userApply ={\n            applyId : target.applyId,\n            role : 0,\n            createTime : new Date()\n        };\n        this.userDao.one({loginName:target.userName}, function(err, item){\n            if(err){\n                callback(err);\n                return;\n            }\n            if(item){\n                userApply.userId = item.id;\n\n                self.userApplyDao.create(userApply , function (err , items){\n                    if(err){\n                        callback(err);\n                        return;\n                    }\n                    logger.info(\"Insert into b_user_apply success! target1: \" + items.id);\n                    callback(null);\n                    return;\n                });\n            }else {\n               var newUser = {\n                   loginName : target.userName,\n                   role : 0,\n                   createTime : new Date()\n               };\n               self.userDao.create(newUser,function(err){\n                   if(err){\n                       callback(err);\n                       return;\n                   }\n                   logger.info(\"Insert into b_user success! \");\n                   self.add(target, callback);\n               })\n            }\n\n\n        })\n\n\n    },\n    removeByApplyId : function(target, callback){\n        this.userApplyDao.find({applyId: target.applyId}).remove( function (err) {\n            if(err ){\n                callback(err);\n            }else {\n                callback(null);\n            }\n\n        })\n    },\n    remove : function(target, callback){\n        this.userApplyDao.one({id: target.id}, function (err, item) {\n            if(err){\n                callback(err);\n                return;\n            }\n            item.remove(function(err) {\n                if (err) {\n                    callback(err);\n                    return;\n                }\n                if (global.DEBUG) {\n                    logger.info(\"remove success item: \" + item);\n                }\n                callback(null);\n            });\n        })\n    },\n    auth : function(target, callback){\n        this.userApplyDao.one({id: target.id}, function (err, item) {\n            if(err){\n                callback(err);\n                return;\n            }\n            if(item.role == 1){\n                callback(\"had authed\");\n                return ;\n            }\n            item.role = 1;\n            item.save(function(err) {\n                if (err) {\n                    callback(err);\n                    return;\n                }\n                if (global.DEBUG) {\n                    logger.info(\"auth success item: \" + item);\n                }\n                callback(null);\n            });\n        })\n    }\n}\n\n\nmodule.exports =  userApplyService;\n\n"
  },
  {
    "path": "service/UserService.js",
    "content": "/**\n /**\n * Created by coverguo on 2015/1/12.\n */\n\nvar http = require('http');\n\nvar  Apply = require('../model/Apply');\n\nvar  log4js = require('log4js'),\n    logger = log4js.getLogger();\n\n\n\nvar UserService = function (){\n    this.userDao = global.models.userDao;\n    this.userApplyDao = global.models.userApplyDao;\n    this.db = global.models.db;\n};\n\n\n\nUserService.prototype = {\n\n    queryListByCondition : function (target , callback){\n\n        var string = \"select ua.id, u.loginName, u.email, u.chineseName, ua.applyId, ua.role, a.name \"+\n            \"from  b_user as u join b_user_apply as ua on(ua.userId = u.id) \"+\n            \"join b_apply as a on (a.id =ua.applyId)  where a.status=? \";\n        var condition = [Apply.STATUS_PASS ];\n\n        if(target.userId){\n            string +=   \"and applyId in(select applyId from b_user_apply where userId =? and role = 1)\";\n            condition.push(target.userId);\n        }\n\n        if(target.applyId !=-1){\n            string += \"and applyId =? \";\n            condition.push(target.applyId);\n        }\n        if(target.role !=-1){\n            string += \"and ua.role =? \";\n            condition.push(target.role);\n        }\n\n\n        this.db.driver.execQuery(string,condition, function (err, data) {\n            if(err){\n                callback(err);\n                return;\n            }\n            callback(null, data);\n        });\n\n    },\n    //查询用户创建项目的项目成员列表\n    queryListByUserProject : function(target, callback){\n\n        var string = \"select ua.id, u.loginName, u.chineseName, ua.applyId, ua.role, a.name \"+\n                     \"from  b_user as u join b_user_apply as ua on(ua.userId = u.id) \"+\n                     \"join b_apply as a on (a.id =ua.applyId) \"+\n                     \"where applyId in(select applyId from b_user_apply where userId =?\"+\n                     \" and role = 1);\";\n        //console.log(string);\n        this.db.driver.execQuery(string,[target.user.id], function (err, data) {\n            if(err){\n                callback(err);\n                return;\n            }\n            callback(null, data);\n        });\n\n    },\n\n    queryUsersByCondition : function (target ,callback){\n        this.userDao.find(target , function (err , items){\n            if(err){\n                callback(err);\n                return;\n            }\n            callback(null, items);\n        });\n    },\n\n    add: function(target, callback){\n\n        this.userDao.create(target , function (err , items){\n            if(err){\n                callback(err);\n                return;\n            }\n            logger.info(\"Insert into b_user success! target1: \",target);\n            callback(null,{ret:0, msg:\"success add\"});\n        });\n    },\n    remove : function(target, callback){\n\n    },\n    update : function(target, callback){\n        this.userDao.one({id: target.id }, function (err, user) {\n            // SQL: \"SELECT * FROM b_apply WHERE name = 'xxxx'\"\n\n            for(key in target){\n                user[key] = target[key];\n            };\n            user.save(function (err) {\n                callback(err);\n                // err.msg = \"under-age\";\n            });\n        });\n    }\n}\n\n\nmodule.exports =  UserService;\n\n\n\n"
  },
  {
    "path": "service/worker/Processor.js",
    "content": "var  mq = require(global.pjconfig.mq.module)\n    , client = mq.socket('sub')\n    , mqUrl = global.pjconfig.mq.url\n    , service = global.pjconfig.mq.subscribe;\n\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\nvar events = require('events');\n\nvar _ = require(\"underscore\");\n\nvar path = require(\"path\");\n\nvar cluster = require('cluster');\ncluster.setupMaster({\n    exec: path.join(__dirname ,  \"Worker.js\")\n});\n\nvar support_signal = false;\n\n\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\nvar Processor = function (){\n    this.worker = cluster.fork({mqUrl : mqUrl , service :service , debug :  !!global.DEBUG , mqModule : global.pjconfig.mq.module });\n    this.__pid__ = this.worker.process.pid;\n\n\n    this.eventEmitter = new events.EventEmitter();\n}\n\n\nProcessor.prototype = {\n\n    start : function (obj){\n        this.wbClient = obj.wbClient;\n        this.id = 0;\n\n        logger.info(\"processor(\"+this.__pid__+\") start monitor\");\n\n\n        var self = this;\n        var messageQueue = [{type:\"READY\"}];\n        this.wbClient.on(\"message\" , function (data){\n            if(self.worker.state == \"online\"){\n                // 新建一个worker 是有延迟的，  这个时候有message ,怎么加入队列，待其 OK 后在 send 给他\n                if(messageQueue.length){\n                    _.each(messageQueue , function (value){\n                        self.worker.send(value);\n                    });\n                    messageQueue = [];\n                }\n                self.worker.send(JSON.parse(data));\n            }else {\n                messageQueue.push(JSON.parse(data));\n            }\n\n        });\n\n        this.worker.on('message', function (data) {\n            if(data.type == \"_STOP_\"){\n                self.destroy();\n            }else {\n                try{\n                self.wbClient && self.wbClient.send(JSON.stringify(data));\n                }catch(e){\n                    logger.info(\"one client had closed\");\n                    self.destroy();\n                }\n            }\n\n        });\n\n        this.wbClient.on(\"close\" , function (data){\n            self.worker.send({type : \"STOP\"});\n            self.destroy();\n        });\n    },\n\n    isDead : function (){\n        if(!this.worker){\n            return true;\n        }\n        return this.worker.isDead();\n    },\n\n\n    destroy : function (isKill){\n        if(isKill){\n            this.worker.kill();\n            logger.info(\"processor(\"+this.__pid__+\") killed \" );\n        }else {\n            logger.info(\"processor(\"+this.__pid__+\") stop monitor \" );\n        }\n        this.worker.removeAllListeners();\n        this.wbClient = null;\n        this.eventEmitter.emit(\"destroy\");\n    },\n\n    wait : function (){\n        support_signal && this.worker.kill(\"SIGSTOP\");\n    },\n\n    notify : function (){\n        support_signal && this.worker.kill(\"SIGCONT\");\n    },\n\n    on : function (key , cb){\n        var self = this;\n        this.eventEmitter.on(key , function (){\n            cb.apply(self,arguments);\n        })\n    }\n};\n\nmodule.exports = Processor;\n"
  },
  {
    "path": "service/worker/ProcessorPool.js",
    "content": "\nvar Processor = require(\"./Processor\");\nvar _ = require(\"underscore\");\n\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\n\nvar STATUS_IDLE = \"IDLE\";\nvar STATUS_RUNNING = \"RUNNING\";\n\n// 半个小时，回收新增的线程\nvar IDLE_TIMEOUT = 1800000;\n\nvar maxIdle = 15;\n\nvar ProcessorPool = function (){\n\n    var currentId = 0;\n    var idlePool = [];\n    var runningPool = [];\n    var processorMapping = {};\n\n\n    var init = function (){\n        monitorError();\n        recovery();\n    }\n\n\n    /* private */\n    var createProcessor = function (obj){\n        var p = {id : currentId++ , processor : new Processor() , status : obj.status || STATUS_IDLE , role : obj.role , createTime : new Date -0   };\n        p.processor.__id__ = p.id;\n        processorMapping[p.id] = p;\n        bindProcessorEvent(p);\n\n        return p;\n    }\n\n    var bindProcessorEvent = function (p){\n        p.processor.on(\"destroy\" , function (){\n            ProcessorPool.destroy(this);\n        });\n    }\n\n    var monitorError = function (){\n        process.on(\"exit\" , function (){\n            _.each(runningPool , function (value){\n                value.processor.destroy(true);\n            });\n\n            _.each(idlePool , function (value){\n                value.processor.destroy(true);\n            });\n        })\n    }\n\n    var idleProcessor = function (p){\n        var processor = processorMapping[p.__id__];\n        if(processor.status == STATUS_IDLE || processor.processor.isDead() ){\n            return ;\n        }else {\n            var index = 0;\n            for(var i = 0 ; i < runningPool.length ; i ++){\n                if(runningPool[i].id == p.__id__){\n                    index = i;\n                    break;\n                }\n            }\n            processor.status = STATUS_IDLE;\n            processor.processor.wait();\n            idlePool.push(runningPool.splice(index , 1)[0]);\n\n            logger.debug(\"idleProcessor id=\"+ p.__id__ + \", idle count: \" + ProcessorPool.idleProcessors() +\", running count: \" + ProcessorPool.runningProcessors());\n        }\n    }\n\n    var recovery = function (){\n        setInterval(function (){\n            if( idlePool.length <= maxIdle){\n                return ;\n            }\n            var diff = idlePool.length - maxIdle;\n\n            logger.info(\"had \"+diff + \" should remove ... \");\n\n            for(var i = 0 ; i < diff ; i++){\n                var value = idlePool.splice(0,1)[0];\n                if(value){\n                    value.processor.destroy(true);\n                    logger.info(\"processor(\"+value.processor.__pid__+\")  remove\");\n                }\n            }\n\n            logger.info(\"current length of idlePool \" + idlePool.length);\n\n        //}, 1000 * 10 );\n        },900000); //15分钟，检测一次是否有多余的进程\n    }\n\n    ProcessorPool.createPool = function (number){\n        if(number){\n            maxIdle = number;\n        }\n        for(var i= 0 ; i <maxIdle ; i ++) {\n            var p = createProcessor({});\n            p.processor.wait();\n            idlePool.push(p);\n        }\n\n        logger.info(\"create ProcessPool , number : \" + maxIdle);\n        monitorError();\n    }\n\n    ProcessorPool.getProcessor = function (){\n        var p;\n        if(idlePool.length <=0 ){\n            p = createProcessor({status : STATUS_RUNNING  });\n        }else {\n            p = idlePool.splice(0,1)[0];\n        }\n\n        p.status = STATUS_RUNNING;\n        runningPool.push(p);\n\n        p.processor.notify();\n\n        logger.debug(\"runningProcessor id=\"+ p.processor.__id__ + \", idle count: \" + ProcessorPool.idleProcessors() +\", running count: \" + ProcessorPool.runningProcessors());\n        return p.processor;\n    }\n\n\n    /**\n     * destroy processor\n     * @param p\n     */\n    ProcessorPool.destroy = function (p){\n        idleProcessor(p);\n    }\n\n\n    /**\n     * return number of processor\n     * @returns {number}\n     */\n    ProcessorPool.totalProcessors = function (){\n        return runningPool.length + idlePool.length;\n    }\n\n    /**\n     * return number of running processor\n     * @returns {Number}\n     */\n    ProcessorPool.runningProcessors = function (){\n        return runningPool.length;\n    }\n\n    /**\n     * return number of idle processor\n     */\n    ProcessorPool.idleProcessors = function (){\n        return idlePool.length;\n    }\n\n\n    init();\n\n    return ProcessorPool;\n}\n\n\nmodule.exports = ProcessorPool();\n"
  },
  {
    "path": "service/worker/Worker.js",
    "content": "/* global process */\n\nvar mq = require(process.env.mqModule);\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\nvar mqUrl = process.env.mqUrl;\nvar service = process.env.service;\nvar isDebug = process.env.debug == \"false\" ? false : true;\n\nif (isDebug) {\n    logger.setLevel('DEBUG');\n}\n\n\nvar filter = {};\nvar isInclude = function(str, regs) {\n    var result = true;\n\n    regs.forEach(function(value, key) {\n        if (str.indexOf(value) >= 0) {\n            result = result && true;\n        } else {\n            result = result && false;\n        }\n    });\n    return result;\n};\n\nvar isExclude = function(str, regs) {\n    var result = true;\n    regs.forEach(function(value, key) {\n        if (str.indexOf(value) >= 0) {\n            result = result && true;\n        } else {\n            result = result && false;\n        }\n    });\n\n    return result;\n};\n\nvar getSubscribe = function (str){\n    if(process.env.mqModule == \"axon\") {\n            return str + \"*\"\n    }\n    return str;\n}\n\n\n\nvar monitorWorker = {\n\n    wbClient: {},\n\n    filter: {},\n\n    monitorKey: '',\n\n    mqClient: null,\n\n    _resetTimeoutFlag: function() {\n        this.wbClient._keepalive = new Date - 0;\n        this.wbClient._timeoutTimes = 0;\n    },\n\n    _keepAliveMonitor: function() {\n        var self = this;\n        if (this._monitorTimeoutId) {\n            clearInterval(this._monitorTimeoutId);\n        }\n        this._monitorTimeoutId = setInterval(function() {\n            var currentDate = new Date - 0;\n            if (!self.wbClient._keepalive) {\n                self._resetTimeoutFlag();\n            }\n            if (currentDate - self.wbClient._keepalive > 5000) {\n                self.wbClient._timeoutTimes++;\n            }\n\n            if (self.wbClient._timeoutTimes > 2) {\n                logger.info(\"one client timeout \");\n                process.send({\n                    type: \"_STOP_\"\n                });\n                self.stopMonitor();\n            }\n        }, 5000);\n    },\n\n\n    init: function() {\n        var self = this;\n        process.on(\"message\", function(data) {\n            switch (data.type) {\n                case \"KEEPALIVE\":\n                    self._resetTimeoutFlag();\n                    break;\n                case \"READY\":\n                    self._keepAliveMonitor();\n                    break;\n                case \"INIT\":\n                    self.startMonitor(data);\n                    break;\n                case \"STOP\":\n                    self.stopMonitor();\n                    break;\n                default:\n                    break;\n            }\n\n            if (isDebug) {\n                logger.debug(\"pid=\" + process.pid + \" , \" + JSON.stringify(data));\n            }\n\n        });\n    },\n\n    isMatch: function(data) {\n\n        try {\n            var msg = data.msg + \"||\" + data.uin + \"||\" + data.url + \"||\" + data.userAgent + \"||\" + data.from;\n\n            if (filter.level.indexOf(data.level) < 0) {\n                return false;\n            }\n\n            if (filter.include && filter.include.length !== 0) {\n                if (!isInclude(msg, filter.include)) {\n                    return false;\n                }\n            }\n            if (filter.exclude && filter.exclude.length !== 0) {\n                if (isExclude(msg, filter.exclude)) {\n                    return false;\n                }\n            }\n        } catch (e) {\n            logger.error(\"isMatch error : \" + e + \"data :\" + JSON.stringify(data));\n        }\n\n        return true;\n    },\n\n    startMonitor: function(data) {\n        var self = this;\n\n        this.monitorKey = service + data.id + \"|\";\n\n        this.mqClient = mq.socket('sub');\n\n        this.mqClient.connect(mqUrl);\n        this.mqClient.subscribe(getSubscribe(this.monitorKey));\n\n        filter = {\n            level: data.level,\n            include: data.include,\n            exclude: data.exclude\n        };\n\n        logger.info(\"worker(\" + process.pid + \") start accept service:\" + this.monitorKey);\n\n\n        this.mqClient.on(\"message\", function(data) {\n            var dataStr = data.toString();\n            data = dataStr.substring(dataStr.indexOf(' '));\n            try {\n                data = JSON.parse(data);\n            } catch (e) {}\n\n\n            if (self.isMatch(data)) {\n                process.send({\n                    type: \"MESSAGE\",\n                    message: data\n                });\n            }\n\n        });\n    },\n\n    stopMonitor: function() {\n        logger.info(\"worker(\" + process.pid + \") stop accept, service:\" + this.monitorKey);\n        try {\n            this.mqClient && this.mqClient.close();\n        } catch (ex) {\n            logger.error('mq client close error!');\n        }\n        this.wbClient = {};\n        clearInterval(this._monitorTimeoutId);\n    }\n};\n\nmonitorWorker.init();\n"
  },
  {
    "path": "static/badjs/bj-report.js",
    "content": "/*!\n * @module report\n * @author kael, chriscai\n * @date @DATE\n * Copyright (c) 2014 kael, chriscai\n * Licensed under the MIT license.\n */\nvar BJ_REPORT = (function(global) {\n    if (global.BJ_REPORT) return global.BJ_REPORT;\n\n    var _error = [];\n    var _error_map = {};\n    var _config = {\n        id: 0, // 上报 id\n        uin: 0, // user id\n        url: \"\", // 上报 接口\n        combo: 1, // 是否合并 !0-合并 0-不合并\n        ext: null, // 扩展参数 用于自定义上报\n        level: 4, // 错误级别 1-debug 2-info 4-error\n        ignore: [], // 忽略某个错误, 支持 Regexp 和 Function\n        random: 1, // 抽样 (0-1] 1-全量\n        delay: 1000, // 延迟上报 combo 为 true 时有效\n        submit: null, // 自定义上报方式\n        repeat: 1 // 重复上报次数(对于同一个错误超过多少次不上报)\n    };\n\n    var _isOBJByType = function(o, type) {\n        return Object.prototype.toString.call(o) === \"[object \" + (type || \"Object\") + \"]\";\n    };\n\n    var _isOBJ = function(obj) {\n        var type = typeof obj;\n        return type === \"object\" && !!obj;\n    };\n\n    var _isEmpty = function(obj) {\n        if (obj === null) return true;\n        if (_isOBJByType(obj, \"Number\")) {\n            return false;\n        }\n        return !obj;\n    };\n\n    var orgError = global.onerror;\n    // rewrite window.oerror\n    global.onerror = function(msg, url, line, col, error) {\n        var newMsg = msg;\n\n        if (error && error.stack) {\n            newMsg = _processStackMsg(error);\n        }\n\n        if (_isOBJByType(newMsg, \"Event\")) {\n            newMsg += newMsg.type ?\n                (\"--\" + newMsg.type + \"--\" + (newMsg.target ?\n                    (newMsg.target.tagName + \"::\" + newMsg.target.src) : \"\")) : \"\";\n        }\n\n        report.push({\n            msg: newMsg,\n            target: url,\n            rowNum: line,\n            colNum: col\n        });\n\n        _send();\n        orgError && orgError.apply(global, arguments);\n    };\n\n    var _processError = function(errObj) {\n        try {\n            if (errObj.stack) {\n                var url = errObj.stack.match(\"https?://[^\\n]+\");\n                url = url ? url[0] : \"\";\n                var rowCols = url.match(\":(\\\\d+):(\\\\d+)\");\n                if (!rowCols) {\n                    rowCols = [0, 0, 0];\n                }\n\n                var stack = _processStackMsg(errObj);\n                return {\n                    msg: stack,\n                    rowNum: rowCols[1],\n                    colNum: rowCols[2],\n                    target: url.replace(rowCols[0], \"\")\n                };\n            } else {\n                //ie 独有 error 对象信息，try-catch 捕获到错误信息传过来，造成没有msg\n                if (errObj.name && errObj.message && errObj.description) {\n                    return {\n                        msg: JSON.stringify(errObj)\n                    };\n                }\n                return errObj;\n            }\n        } catch (err) {\n            return errObj;\n        }\n    };\n\n    var _processStackMsg = function(error) {\n        var stack = error.stack\n            .replace(/\\n/gi, \"\")\n            .split(/\\bat\\b/)\n            .slice(0, 9)\n            .join(\"@\")\n            .replace(/\\?[^:]+/gi, \"\");\n        var msg = error.toString();\n        if (stack.indexOf(msg) < 0) {\n            stack = msg + \"@\" + stack;\n        }\n        return stack;\n    };\n\n    var _error_tostring = function(error, index) {\n        var param = [];\n        var params = [];\n        var stringify = [];\n        if (_isOBJ(error)) {\n            error.level = error.level || _config.level;\n            for (var key in error) {\n                var value = error[key];\n                if (!_isEmpty(value)) {\n                    if (_isOBJ(value)) {\n                        try {\n                            value = JSON.stringify(value);\n                        } catch (err) {\n                            value = \"[BJ_REPORT detect value stringify error] \" + err.toString();\n                        }\n                    }\n                    stringify.push(key + \":\" + value);\n                    param.push(key + \"=\" + encodeURIComponent(value));\n                    params.push(key + \"[\" + index + \"]=\" + encodeURIComponent(value));\n                }\n            }\n        }\n\n        // msg[0]=msg&target[0]=target -- combo report\n        // msg:msg,target:target -- ignore\n        // msg=msg&target=target -- report with out combo\n        return [params.join(\"&\"), stringify.join(\",\"), param.join(\"&\")];\n    };\n\n    var _imgs = [];\n    var _submit = function(url) {\n        if (_config.submit) {\n            _config.submit(url);\n        } else {\n            var _img = new Image();\n            _imgs.push(_img);\n            _img.src = url;\n        }\n    };\n\n    var _is_repert = function(error) {\n        if (!_isOBJ(error)) return true;\n        var msg = error.msg;\n        var times = _error_map[msg] = (parseInt(_error_map[msg], 10) || 0) + 1;\n        return times > _config.repeat;\n    };\n\n    var error_list = [];\n    var comboTimeout = 0;\n    var _send = function(isReoprtNow) {\n        if (!_config.report) return;\n\n        while (_error.length) {\n            var isIgnore = false;\n            var error = _error.shift();\n            // 重复上报\n            if (_is_repert(error)) continue;\n            var error_str = _error_tostring(error, error_list.length);\n            if (_isOBJByType(_config.ignore, \"Array\")) {\n                for (var i = 0, l = _config.ignore.length; i < l; i++) {\n                    var rule = _config.ignore[i];\n                    if ((_isOBJByType(rule, \"RegExp\") && rule.test(error_str[1])) ||\n                        (_isOBJByType(rule, \"Function\") && rule(error, error_str[1]))) {\n                        isIgnore = true;\n                        break;\n                    }\n                }\n            }\n            if (!isIgnore) {\n                if (_config.combo) {\n                    error_list.push(error_str[0]);\n                } else {\n                    _submit(_config.report + error_str[2] + \"&_t=\" + (+new Date));\n                }\n                _config.onReport && (_config.onReport(_config.id, error));\n            }\n        }\n\n        // 合并上报\n        var count = error_list.length;\n        if (count) {\n            var comboReport = function() {\n                clearTimeout(comboTimeout);\n                _submit(_config.report + error_list.join(\"&\") + \"&count=\" + error_list.length + \"&_t=\" + (+new Date));\n                comboTimeout = 0;\n                error_list = [];\n            };\n\n            if (isReoprtNow) {\n                comboReport(); // 立即上报\n            } else if (!comboTimeout) {\n                comboTimeout = setTimeout(comboReport, _config.delay); // 延迟上报\n            }\n        }\n    };\n\n    var report = global.BJ_REPORT = {\n        push: function(msg) { // 将错误推到缓存池\n            // 抽样\n            if (Math.random() >= _config.random) {\n                return report;\n            }\n\n            var data = _isOBJ(msg) ? _processError(msg) : {\n                msg: msg\n            };\n\n            // ext 有默认值, 且上报不包含 ext, 使用默认 ext\n            if (_config.ext && !data.ext) {\n                data.ext = _config.ext;\n            }\n            _error.push(data);\n            _send();\n            return report;\n        },\n        report: function(msg) { // error report\n            msg && report.push(msg);\n            _send(true);\n            return report;\n        },\n        info: function(msg) { // info report\n            if (!msg) {\n                return report;\n            }\n            if (_isOBJ(msg)) {\n                msg.level = 2;\n            } else {\n                msg = {\n                    msg: msg,\n                    level: 2\n                };\n            }\n            report.push(msg);\n            return report;\n        },\n        debug: function(msg) { // debug report\n            if (!msg) {\n                return report;\n            }\n            if (_isOBJ(msg)) {\n                msg.level = 1;\n            } else {\n                msg = {\n                    msg: msg,\n                    level: 1\n                };\n            }\n            report.push(msg);\n            return report;\n        },\n        init: function(config) { // 初始化\n            if (_isOBJ(config)) {\n                for (var key in config) {\n                    _config[key] = config[key];\n                }\n            }\n            // 没有设置id将不上报\n            var id = parseInt(_config.id, 10);\n            if (id) {\n                // set default report url and uin\n                if (/qq\\.com$/gi.test(location.hostname)) {\n                    if (!_config.url) {\n                        _config.url = \"//badjs2.qq.com/badjs\";\n                    }\n\n                    if (!_config.uin) {\n                        _config.uin = parseInt((document.cookie.match(/\\buin=\\D+(\\d+)/) || [])[1], 10);\n                    }\n                }\n\n                _config.report = (_config.url || \"/badjs\") +\n                    \"?id=\" + id +\n                    \"&uin=\" + _config.uin +\n                    \"&from=\" + encodeURIComponent(location.href) +\n                    \"&\";\n            }\n\n            // if had error in cache , report now\n            if (_error.length) {\n                _send();\n            }\n            return report;\n        },\n\n        __onerror__: global.onerror\n    };\n\n    typeof console !== \"undefined\" && console.error && setTimeout(function() {\n        var err = ((location.hash || \"\").match(/([#&])BJ_ERROR=([^&$]+)/) || [])[2];\n        err && console.error(\"BJ_ERROR\", decodeURIComponent(err).replace(/(:\\d+:\\d+)\\s*/g, \"$1\\n\"));\n    }, 0);\n\n    return report;\n\n}(window));\n\nif (typeof module !== \"undefined\") {\n    module.exports = BJ_REPORT;\n}"
  },
  {
    "path": "static/badjs/bj-wrap.js",
    "content": "(function(global) {\n\n    if (!global.BJ_REPORT) {\n        console.error(\"please load bg-report first\");\n        return;\n    }\n\n    var _onthrow = function(errObj) {\n        global.BJ_REPORT.report(errObj);\n    };\n\n    var tryJs = {};\n    global.BJ_REPORT.tryJs = function(throwCb) {\n        throwCb && (_onthrow = throwCb);\n        return tryJs;\n    };\n\n    // merge\n    var _merge = function(org, obj) {\n        for (var key in obj) {\n            org[key] = obj[key];\n        }\n    };\n\n    // function or not\n    var _isFunction = function(foo) {\n        return typeof foo === \"function\";\n    };\n\n    var timeoutkey;\n\n    var cat = function(foo, args) {\n        return function() {\n            try {\n                return foo.apply(this, args || arguments);\n            } catch (error) {\n\n                _onthrow(error);\n\n                //some browser throw error (chrome) , can not find error where it throw,  so print it on console;\n                if (error.stack && console && console.error) {\n                    console.error(\"[BJ-REPORT]\", error.stack);\n                }\n\n                // hang up browser and throw , but it should trigger onerror , so rewrite onerror then recover it\n                if (!timeoutkey) {\n                    var orgOnerror = global.onerror;\n                    global.onerror = function() {};\n                    timeoutkey = setTimeout(function() {\n                        global.onerror = orgOnerror;\n                        timeoutkey = null;\n                    }, 50);\n                }\n                throw error;\n            }\n        };\n    };\n\n    var catArgs = function(foo) {\n        return function() {\n            var arg, args = [];\n            for (var i = 0, l = arguments.length; i < l; i++) {\n                arg = arguments[i];\n                _isFunction(arg) && (arg = cat(arg));\n                args.push(arg);\n            }\n            return foo.apply(this, args);\n        };\n    };\n\n    var catTimeout = function(foo) {\n        return function(cb, timeout) {\n            // for setTimeout(string, delay)\n            if (typeof cb === \"string\") {\n                try {\n                    cb = new Function(cb);\n                } catch (err) {\n                    throw err;\n                }\n            }\n            var args = [].slice.call(arguments, 2);\n            // for setTimeout(function, delay, param1, ...)\n            cb = cat(cb, args.length && args);\n            return foo(cb, timeout);\n        };\n    };\n\n    /**\n     * makeArgsTry\n     * wrap a function's arguments with try & catch\n     * @param {Function} foo\n     * @param {Object} self\n     * @returns {Function}\n     */\n    var makeArgsTry = function(foo, self) {\n        return function() {\n            var arg, tmp, args = [];\n            for (var i = 0, l = arguments.length; i < l; i++) {\n                arg = arguments[i];\n                _isFunction(arg) && (tmp = cat(arg)) &&\n                    (arg.tryWrap = tmp) && (arg = tmp);\n                args.push(arg);\n            }\n            return foo.apply(self || this, args);\n        };\n    };\n\n    /**\n     * makeObjTry\n     * wrap a object's all value with try & catch\n     * @param {Function} foo\n     * @param {Object} self\n     * @returns {Function}\n     */\n    var makeObjTry = function(obj) {\n        var key, value;\n        for (key in obj) {\n            value = obj[key];\n            if (_isFunction(value)) obj[key] = cat(value);\n        }\n        return obj;\n    };\n\n    /**\n     * wrap jquery async function ,exp : event.add , event.remove , ajax\n     * @returns {Function}\n     */\n    tryJs.spyJquery = function() {\n        var _$ = global.$;\n\n        if (!_$ || !_$.event) {\n            return tryJs;\n        }\n\n        var _add, _remove;\n        if (_$.zepto) {\n            _add = _$.fn.on, _remove = _$.fn.off;\n\n            _$.fn.on = makeArgsTry(_add);\n            _$.fn.off = function() {\n                var arg, args = [];\n                for (var i = 0, l = arguments.length; i < l; i++) {\n                    arg = arguments[i];\n                    _isFunction(arg) && arg.tryWrap && (arg = arg.tryWrap);\n                    args.push(arg);\n                }\n                return _remove.apply(this, args);\n            };\n\n        } else if (window.jQuery) {\n            _add = _$.event.add, _remove = _$.event.remove;\n\n            _$.event.add = makeArgsTry(_add);\n            _$.event.remove = function() {\n                var arg, args = [];\n                for (var i = 0, l = arguments.length; i < l; i++) {\n                    arg = arguments[i];\n                    _isFunction(arg) && arg.tryWrap && (arg = arg.tryWrap);\n                    args.push(arg);\n                }\n                return _remove.apply(this, args);\n            };\n        }\n\n        var _ajax = _$.ajax;\n\n        if (_ajax) {\n            _$.ajax = function(url, setting) {\n                if (!setting) {\n                    setting = url;\n                    url = undefined;\n                }\n                makeObjTry(setting);\n                if (url) return _ajax.call(_$, url, setting);\n                return _ajax.call(_$, setting);\n            };\n        }\n\n        return tryJs;\n    };\n\n    /**\n     * wrap amd or commonjs of function  ,exp :  define , require ,\n     * @returns {Function}\n     */\n    tryJs.spyModules = function() {\n        var _require = global.require,\n            _define = global.define;\n        if (_define && _define.amd && _require) {\n            global.require = catArgs(_require);\n            _merge(global.require, _require);\n            global.define = catArgs(_define);\n            _merge(global.define, _define);\n        }\n\n        if (global.seajs && _define) {\n            global.define = function() {\n                var arg, args = [];\n                for (var i = 0, l = arguments.length; i < l; i++) {\n                    arg = arguments[i];\n                    if (_isFunction(arg)) {\n                        arg = cat(arg);\n                        //seajs should use toString parse dependencies , so rewrite it\n                        arg.toString = (function(orgArg) {\n                            return function() {\n                                return orgArg.toString();\n                            };\n                        }(arguments[i]));\n                    }\n                    args.push(arg);\n                }\n                return _define.apply(this, args);\n            };\n\n            global.seajs.use = catArgs(global.seajs.use);\n\n            _merge(global.define, _define);\n        }\n\n        return tryJs;\n    };\n\n    /**\n     * wrap async of function in window , exp : setTimeout , setInterval\n     * @returns {Function}\n     */\n    tryJs.spySystem = function() {\n        global.setTimeout = catTimeout(global.setTimeout);\n        global.setInterval = catTimeout(global.setInterval);\n        return tryJs;\n    };\n\n    /**\n     * wrap custom of function ,\n     * @param obj - obj or  function\n     * @returns {Function}\n     */\n    tryJs.spyCustom = function(obj) {\n        if (_isFunction(obj)) {\n            return cat(obj);\n        } else {\n            return makeObjTry(obj);\n        }\n    };\n\n    /**\n     * run spyJquery() and spyModules() and spySystem()\n     * @returns {Function}\n     */\n    tryJs.spyAll = function() {\n        tryJs\n            .spyJquery()\n            .spyModules()\n            .spySystem();\n        return tryJs;\n    };\n\n}(window));"
  },
  {
    "path": "static/common/delegator.js",
    "content": "/**\n * Map\n * @class\n */\nfunction Map() {\n    this.map = {};\n    this.length = 0;\n}\nMap.prototype = {\n    constructor: Map,\n    /**\n     * has\n     * @param {String} key\n     * @returns {Boolean}\n     */\n    has: function (key) {\n        return (key in this.map);\n    },\n    /**\n     * get\n     * @param {String} key\n     * @returns {Any}\n     */\n    get: function (key) {\n        return this.map[key];\n    },\n    /**\n     * set\n     * @param {String} key\n     * @param {Any} value\n     */\n    set: function (key, value) {\n        !this.has(key) && this.length++;\n        return (this.map[key] = value);\n    },\n    /**\n     * count\n     * @returns {Number}\n     */\n    count: function () {\n        return this.length;\n    },\n    /**\n     * remove\n     * @param {String} key\n     */\n    remove: function (key) {\n        if (this.has(key)) {\n            this.map[key] = null;\n            delete this.map[key];\n            this.length--;\n        }\n    }\n};\n\nvar cache = new Map(), set = cache.set, uid = 0;\ncache.set = function (node, value) {\n    if (!value) {\n        value = node;\n        set.call(cache, ++uid + '', value);\n        return uid;\n    } else {\n        typeof node === 'string' &&\n        (node = $(node)[0]);\n        $.data(node, 'event-data', value);\n        return this;\n    }\n};\n\nfunction _key(arr) {\n    if (!arr) return {};\n    arr = arr.split(' ');\n    var obj = {};\n    for (var i = 0, l = arr.length; i < l; i++) {\n        obj[arr[i]] = true;\n    }\n    return obj;\n}\n\n/**\n * Delegator\n * @class\n * @param {Selector} container\n */\nfunction Delegator(container) {\n    this.container = $(container);\n    this.listenerMap = new Map();\n}\n\n/**\n * getKey\n * @param {Any} value\n * @returns {Number}\n */\nDelegator.set = cache.set;\n/**\n * cache\n * @class\n * @static\n */\nDelegator.cache = cache;\n\nDelegator.prototype = {\n    constructor: Delegator,\n    _getListener: function (type) {\n        if (this.listenerMap.has(type)) {\n            return this.listenerMap.get(type);\n        }\n        function listener(e) {\n            var data = $.data(this),\n                routes = data['event-' + type + '-routes'],\n                eventData = data['event-data'], handle, dataKey;\n\n            // preprocessing\n            if (!routes && (routes = this.getAttribute('data-event-' + type))) {\n                (routes = routes.split(' ')) &&\n                (data['event-' + type + '-routes'] = routes);\n                !eventData &&\n                (dataKey = this.getAttribute('data-event-data')) &&\n                (eventData = cache.get(dataKey)) &&\n                (data['event-data'] = eventData) &&\n                (cache.remove(dataKey));\n                !data['event-stop-propagation'] &&\n                (data['event-stop-propagation'] = _key(this.getAttribute('data-event-stop-propagation')));\n            }\n\n            if (routes) {\n                for (var i = 0, l = routes.length; i < l; i++) {\n                    handle = listener.handleMap.get(routes[i]);\n\n                    if (handle) {\n                        handle.call(this, e, eventData);\n                    }\n                    data['event-stop-propagation'][type] &&\n                    e.stopPropagation();\n                }\n            }\n        }\n\n        listener.handleMap = new Map();\n        this.listenerMap.set(type, listener);\n        this.container.on(type, '[data-event-' + type + ']', listener);\n        return listener;\n    },\n    /**\n     * on\n     * @param {String} type\n     * @param {String} name\n     * @param {Function} handle\n     */\n    on: function (type, name, handle) {\n        var listener = this._getListener(type);\n        listener.handleMap.set(name, handle);\n        return this;\n    },\n    /**\n     * off\n     * @param {String} type\n     * @param {String} name\n     */\n    off: function (type, name) {\n        var listener = this._getListener(type),\n            handleMap = listener.handleMap;\n        handleMap.remove(name);\n        if (!handleMap.count()) {\n            this.container.off(type, '[data-event-' + type + ']', listener);\n            this.listenerMap.remove(type);\n        }\n    }\n};\n\nmodule.exports = Delegator;\n"
  },
  {
    "path": "static/common/dialog/dialog.js",
    "content": "var Delegator = require(\"delegator\");\nvar modal = require(\"./modal.ejs\");\n\n    var container;\n\n    function hide() {\n        container.removeClass('in');\n        container.find('.modal-backdrop').removeClass('in');\n        setTimeout(function () {\n            container.remove();\n            container = undefined;\n        }, 300);\n    }\n\n    function Dialog (param) {\n        if (container) {\n            container.remove();\n            container = undefined;\n        }\n        container = $(modal({it :param}))\n            .appendTo(document.body)\n            .show();\n\n        var key,\n            action,\n            delegator,\n            on = param.on || {};\n\n        delegator = (new Delegator(container))\n            .on('click', 'close', hide);\n\n        for (key in on) {\n            action = key.split('/');\n            delegator.on(action[0], action[1], on[key]);\n        }\n\n        setTimeout(function () {\n            container.addClass('in');\n            container.find('.modal-backdrop').addClass('in');\n        }, 0);\n    }\n\n    Dialog.hide = hide;\n\nmodule.exports =  Dialog;"
  },
  {
    "path": "static/common/dialog/modal.ejs",
    "content": "<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"<%=it.id || '' %>\">\n  <div class=\"modal-backdrop fade\"></div>\n  <div class=\"modal-dialog\">\n    <div class=\"modal-content\">\n\n      <div class=\"modal-header\">\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\n        <h4 class=\"modal-title\"><%=it.header%></h4>\n      </div>\n      <div class=\"modal-body\">\n        <%=it.body%>\n      </div>\n      <div class=\"modal-footer\">\n        <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\n      </div>\n\n    </div>\n  </div>\n</div>"
  },
  {
    "path": "static/common.js",
    "content": "/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId])\n/******/ \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tmodules[moduleId] = moreModules[moduleId];\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n/******/ \t\twhile(callbacks.length)\n/******/ \t\t\tcallbacks.shift().call(null, __webpack_require__);\n/******/ \t\tif(moreModules[0]) {\n/******/ \t\t\tinstalledModules[0] = 0;\n/******/ \t\t\treturn __webpack_require__(0);\n/******/ \t\t}\n/******/ \t};\n\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// object to store loaded and loading chunks\n/******/ \t// \"0\" means \"already loaded\"\n/******/ \t// Array means \"loading\", array contains callbacks\n/******/ \tvar installedChunks = {\n/******/ \t\t3:0\n/******/ \t};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n/******/ \t\t// \"0\" is the signal for \"already loaded\"\n/******/ \t\tif(installedChunks[chunkId] === 0)\n/******/ \t\t\treturn callback.call(null, __webpack_require__);\n\n/******/ \t\t// an array means \"currently loading\".\n/******/ \t\tif(installedChunks[chunkId] !== undefined) {\n/******/ \t\t\tinstalledChunks[chunkId].push(callback);\n/******/ \t\t} else {\n/******/ \t\t\t// start chunk loading\n/******/ \t\t\tinstalledChunks[chunkId] = [callback];\n/******/ \t\t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\t\tvar script = document.createElement('script');\n/******/ \t\t\tscript.type = 'text/javascript';\n/******/ \t\t\tscript.charset = 'utf-8';\n/******/ \t\t\tscript.async = true;\n\n/******/ \t\t\tscript.src = __webpack_require__.p + \"\" + chunkId + \"../\" + ({\"0\":\"entry.home\",\"1\":\"entry.apply\",\"2\":\"entry.realtime\",\"4\":\"entry.charts\",\"5\":\"entry.authUserManage\",\"6\":\"entry.userManage\",\"7\":\"entry.projectTotal\",\"8\":\"entry.statistics\",\"9\":\"entry.offlinelog\",\"10\":\"entry.log\",\"11\":\"entry.applyList\"}[chunkId]||chunkId) + \".js\";\n/******/ \t\t\thead.appendChild(script);\n/******/ \t\t}\n/******/ \t};\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(4);\n\t__webpack_require__(1);\n\t__webpack_require__(5);\n\t__webpack_require__(6);\n\t__webpack_require__(2);\n\tmodule.exports = __webpack_require__(3);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(_) {\r\n\tif(!_){\r\n\t    _={};\r\n\t}\r\n\r\n\t_.formatDate= function(date, formatString){\r\n\t    /*\r\n\t     * eg:formatString=\"YYYY-MM-DD hh:mm:ss\";\r\n\t     */\r\n\t    var o = {\r\n\t        \"M+\" : date.getMonth()+1,    //month\r\n\t        \"D+\" : date.getDate(),    //day\r\n\t        \"h+\" : date.getHours(),    //hour\r\n\t        \"m+\" : date.getMinutes(),    //minute\r\n\t        \"s+\" : date.getSeconds(),    //second\r\n\t        \"q+\" : Math.floor((date.getMonth()+3)/3),    //quarter\r\n\t        \"S\" : date.getMilliseconds()    //millisecond\r\n\t    }\r\n\r\n\t    if(/(Y+)/.test(formatString)){\r\n\t        formatString = formatString.replace(RegExp.$1, (date.getFullYear()+\"\").substr(4 - RegExp.$1.length));\r\n\t    }\r\n\r\n\t    for(var k in o){\r\n\t        if(new RegExp(\"(\"+ k +\")\").test(formatString)){\r\n\t            formatString = formatString.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : (\"00\"+ o[k]).substr((\"\"+ o[k]).length));\r\n\t        }\r\n\t    }\r\n\t    return formatString;\r\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(jQuery) {/*!\r\n\t * Bootstrap v3.3.0 (http://getbootstrap.com)\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t */\r\n\r\n\tif (typeof jQuery === 'undefined') {\r\n\t  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\r\n\t}\r\n\r\n\t+function ($) {\r\n\t  var version = $.fn.jquery.split(' ')[0].split('.')\r\n\t  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {\r\n\t    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher')\r\n\t  }\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: transition.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#transitions\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\r\n\t  // ============================================================\r\n\r\n\t  function transitionEnd() {\r\n\t    var el = document.createElement('bootstrap')\r\n\r\n\t    var transEndEventNames = {\r\n\t      WebkitTransition : 'webkitTransitionEnd',\r\n\t      MozTransition    : 'transitionend',\r\n\t      OTransition      : 'oTransitionEnd otransitionend',\r\n\t      transition       : 'transitionend'\r\n\t    }\r\n\r\n\t    for (var name in transEndEventNames) {\r\n\t      if (el.style[name] !== undefined) {\r\n\t        return { end: transEndEventNames[name] }\r\n\t      }\r\n\t    }\r\n\r\n\t    return false // explicit for ie8 (  ._.)\r\n\t  }\r\n\r\n\t  // http://blog.alexmaccaw.com/css-transitions\r\n\t  $.fn.emulateTransitionEnd = function (duration) {\r\n\t    var called = false\r\n\t    var $el = this\r\n\t    $(this).one('bsTransitionEnd', function () { called = true })\r\n\t    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\r\n\t    setTimeout(callback, duration)\r\n\t    return this\r\n\t  }\r\n\r\n\t  $(function () {\r\n\t    $.support.transition = transitionEnd()\r\n\r\n\t    if (!$.support.transition) return\r\n\r\n\t    $.event.special.bsTransitionEnd = {\r\n\t      bindType: $.support.transition.end,\r\n\t      delegateType: $.support.transition.end,\r\n\t      handle: function (e) {\r\n\t        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\r\n\t      }\r\n\t    }\r\n\t  })\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: alert.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#alerts\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // ALERT CLASS DEFINITION\r\n\t  // ======================\r\n\r\n\t  var dismiss = '[data-dismiss=\"alert\"]'\r\n\t  var Alert   = function (el) {\r\n\t    $(el).on('click', dismiss, this.close)\r\n\t  }\r\n\r\n\t  Alert.VERSION = '3.3.0'\r\n\r\n\t  Alert.TRANSITION_DURATION = 150\r\n\r\n\t  Alert.prototype.close = function (e) {\r\n\t    var $this    = $(this)\r\n\t    var selector = $this.attr('data-target')\r\n\r\n\t    if (!selector) {\r\n\t      selector = $this.attr('href')\r\n\t      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\r\n\t    }\r\n\r\n\t    var $parent = $(selector)\r\n\r\n\t    if (e) e.preventDefault()\r\n\r\n\t    if (!$parent.length) {\r\n\t      $parent = $this.closest('.alert')\r\n\t    }\r\n\r\n\t    $parent.trigger(e = $.Event('close.bs.alert'))\r\n\r\n\t    if (e.isDefaultPrevented()) return\r\n\r\n\t    $parent.removeClass('in')\r\n\r\n\t    function removeElement() {\r\n\t      // detach from parent, fire event then clean up data\r\n\t      $parent.detach().trigger('closed.bs.alert').remove()\r\n\t    }\r\n\r\n\t    $.support.transition && $parent.hasClass('fade') ?\r\n\t      $parent\r\n\t        .one('bsTransitionEnd', removeElement)\r\n\t        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\r\n\t      removeElement()\r\n\t  }\r\n\r\n\r\n\t  // ALERT PLUGIN DEFINITION\r\n\t  // =======================\r\n\r\n\t  function Plugin(option) {\r\n\t    return this.each(function () {\r\n\t      var $this = $(this)\r\n\t      var data  = $this.data('bs.alert')\r\n\r\n\t      if (!data) $this.data('bs.alert', (data = new Alert(this)))\r\n\t      if (typeof option == 'string') data[option].call($this)\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.alert\r\n\r\n\t  $.fn.alert             = Plugin\r\n\t  $.fn.alert.Constructor = Alert\r\n\r\n\r\n\t  // ALERT NO CONFLICT\r\n\t  // =================\r\n\r\n\t  $.fn.alert.noConflict = function () {\r\n\t    $.fn.alert = old\r\n\t    return this\r\n\t  }\r\n\r\n\r\n\t  // ALERT DATA-API\r\n\t  // ==============\r\n\r\n\t  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: button.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#buttons\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // BUTTON PUBLIC CLASS DEFINITION\r\n\t  // ==============================\r\n\r\n\t  var Button = function (element, options) {\r\n\t    this.$element  = $(element)\r\n\t    this.options   = $.extend({}, Button.DEFAULTS, options)\r\n\t    this.isLoading = false\r\n\t  }\r\n\r\n\t  Button.VERSION  = '3.3.0'\r\n\r\n\t  Button.DEFAULTS = {\r\n\t    loadingText: 'loading...'\r\n\t  }\r\n\r\n\t  Button.prototype.setState = function (state) {\r\n\t    var d    = 'disabled'\r\n\t    var $el  = this.$element\r\n\t    var val  = $el.is('input') ? 'val' : 'html'\r\n\t    var data = $el.data()\r\n\r\n\t    state = state + 'Text'\r\n\r\n\t    if (data.resetText == null) $el.data('resetText', $el[val]())\r\n\r\n\t    // push to event loop to allow forms to submit\r\n\t    setTimeout($.proxy(function () {\r\n\t      $el[val](data[state] == null ? this.options[state] : data[state])\r\n\r\n\t      if (state == 'loadingText') {\r\n\t        this.isLoading = true\r\n\t        $el.addClass(d).attr(d, d)\r\n\t      } else if (this.isLoading) {\r\n\t        this.isLoading = false\r\n\t        $el.removeClass(d).removeAttr(d)\r\n\t      }\r\n\t    }, this), 0)\r\n\t  }\r\n\r\n\t  Button.prototype.toggle = function () {\r\n\t    var changed = true\r\n\t    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\r\n\r\n\t    if ($parent.length) {\r\n\t      var $input = this.$element.find('input')\r\n\t      if ($input.prop('type') == 'radio') {\r\n\t        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false\r\n\t        else $parent.find('.active').removeClass('active')\r\n\t      }\r\n\t      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')\r\n\t    } else {\r\n\t      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\r\n\t    }\r\n\r\n\t    if (changed) this.$element.toggleClass('active')\r\n\t  }\r\n\r\n\r\n\t  // BUTTON PLUGIN DEFINITION\r\n\t  // ========================\r\n\r\n\t  function Plugin(option) {\r\n\t    return this.each(function () {\r\n\t      var $this   = $(this)\r\n\t      var data    = $this.data('bs.button')\r\n\t      var options = typeof option == 'object' && option\r\n\r\n\t      if (!data) $this.data('bs.button', (data = new Button(this, options)))\r\n\r\n\t      if (option == 'toggle') data.toggle()\r\n\t      else if (option) data.setState(option)\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.button\r\n\r\n\t  $.fn.button             = Plugin\r\n\t  $.fn.button.Constructor = Button\r\n\r\n\r\n\t  // BUTTON NO CONFLICT\r\n\t  // ==================\r\n\r\n\t  $.fn.button.noConflict = function () {\r\n\t    $.fn.button = old\r\n\t    return this\r\n\t  }\r\n\r\n\r\n\t  // BUTTON DATA-API\r\n\t  // ===============\r\n\r\n\t  $(document)\r\n\t    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\r\n\t      var $btn = $(e.target)\r\n\t      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\r\n\t      Plugin.call($btn, 'toggle')\r\n\t      e.preventDefault()\r\n\t    })\r\n\t    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\r\n\t      $(e.target).closest('.btn').toggleClass('focus', e.type == 'focus')\r\n\t    })\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: carousel.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#carousel\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // CAROUSEL CLASS DEFINITION\r\n\t  // =========================\r\n\r\n\t  var Carousel = function (element, options) {\r\n\t    this.$element    = $(element)\r\n\t    this.$indicators = this.$element.find('.carousel-indicators')\r\n\t    this.options     = options\r\n\t    this.paused      =\r\n\t    this.sliding     =\r\n\t    this.interval    =\r\n\t    this.$active     =\r\n\t    this.$items      = null\r\n\r\n\t    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\r\n\r\n\t    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\r\n\t      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\r\n\t      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\r\n\t  }\r\n\r\n\t  Carousel.VERSION  = '3.3.0'\r\n\r\n\t  Carousel.TRANSITION_DURATION = 600\r\n\r\n\t  Carousel.DEFAULTS = {\r\n\t    interval: 5000,\r\n\t    pause: 'hover',\r\n\t    wrap: true,\r\n\t    keyboard: true\r\n\t  }\r\n\r\n\t  Carousel.prototype.keydown = function (e) {\r\n\t    switch (e.which) {\r\n\t      case 37: this.prev(); break\r\n\t      case 39: this.next(); break\r\n\t      default: return\r\n\t    }\r\n\r\n\t    e.preventDefault()\r\n\t  }\r\n\r\n\t  Carousel.prototype.cycle = function (e) {\r\n\t    e || (this.paused = false)\r\n\r\n\t    this.interval && clearInterval(this.interval)\r\n\r\n\t    this.options.interval\r\n\t      && !this.paused\r\n\t      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\r\n\r\n\t    return this\r\n\t  }\r\n\r\n\t  Carousel.prototype.getItemIndex = function (item) {\r\n\t    this.$items = item.parent().children('.item')\r\n\t    return this.$items.index(item || this.$active)\r\n\t  }\r\n\r\n\t  Carousel.prototype.getItemForDirection = function (direction, active) {\r\n\t    var delta = direction == 'prev' ? -1 : 1\r\n\t    var activeIndex = this.getItemIndex(active)\r\n\t    var itemIndex = (activeIndex + delta) % this.$items.length\r\n\t    return this.$items.eq(itemIndex)\r\n\t  }\r\n\r\n\t  Carousel.prototype.to = function (pos) {\r\n\t    var that        = this\r\n\t    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\r\n\r\n\t    if (pos > (this.$items.length - 1) || pos < 0) return\r\n\r\n\t    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\r\n\t    if (activeIndex == pos) return this.pause().cycle()\r\n\r\n\t    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\r\n\t  }\r\n\r\n\t  Carousel.prototype.pause = function (e) {\r\n\t    e || (this.paused = true)\r\n\r\n\t    if (this.$element.find('.next, .prev').length && $.support.transition) {\r\n\t      this.$element.trigger($.support.transition.end)\r\n\t      this.cycle(true)\r\n\t    }\r\n\r\n\t    this.interval = clearInterval(this.interval)\r\n\r\n\t    return this\r\n\t  }\r\n\r\n\t  Carousel.prototype.next = function () {\r\n\t    if (this.sliding) return\r\n\t    return this.slide('next')\r\n\t  }\r\n\r\n\t  Carousel.prototype.prev = function () {\r\n\t    if (this.sliding) return\r\n\t    return this.slide('prev')\r\n\t  }\r\n\r\n\t  Carousel.prototype.slide = function (type, next) {\r\n\t    var $active   = this.$element.find('.item.active')\r\n\t    var $next     = next || this.getItemForDirection(type, $active)\r\n\t    var isCycling = this.interval\r\n\t    var direction = type == 'next' ? 'left' : 'right'\r\n\t    var fallback  = type == 'next' ? 'first' : 'last'\r\n\t    var that      = this\r\n\r\n\t    if (!$next.length) {\r\n\t      if (!this.options.wrap) return\r\n\t      $next = this.$element.find('.item')[fallback]()\r\n\t    }\r\n\r\n\t    if ($next.hasClass('active')) return (this.sliding = false)\r\n\r\n\t    var relatedTarget = $next[0]\r\n\t    var slideEvent = $.Event('slide.bs.carousel', {\r\n\t      relatedTarget: relatedTarget,\r\n\t      direction: direction\r\n\t    })\r\n\t    this.$element.trigger(slideEvent)\r\n\t    if (slideEvent.isDefaultPrevented()) return\r\n\r\n\t    this.sliding = true\r\n\r\n\t    isCycling && this.pause()\r\n\r\n\t    if (this.$indicators.length) {\r\n\t      this.$indicators.find('.active').removeClass('active')\r\n\t      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\r\n\t      $nextIndicator && $nextIndicator.addClass('active')\r\n\t    }\r\n\r\n\t    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\r\n\t    if ($.support.transition && this.$element.hasClass('slide')) {\r\n\t      $next.addClass(type)\r\n\t      $next[0].offsetWidth // force reflow\r\n\t      $active.addClass(direction)\r\n\t      $next.addClass(direction)\r\n\t      $active\r\n\t        .one('bsTransitionEnd', function () {\r\n\t          $next.removeClass([type, direction].join(' ')).addClass('active')\r\n\t          $active.removeClass(['active', direction].join(' '))\r\n\t          that.sliding = false\r\n\t          setTimeout(function () {\r\n\t            that.$element.trigger(slidEvent)\r\n\t          }, 0)\r\n\t        })\r\n\t        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\r\n\t    } else {\r\n\t      $active.removeClass('active')\r\n\t      $next.addClass('active')\r\n\t      this.sliding = false\r\n\t      this.$element.trigger(slidEvent)\r\n\t    }\r\n\r\n\t    isCycling && this.cycle()\r\n\r\n\t    return this\r\n\t  }\r\n\r\n\r\n\t  // CAROUSEL PLUGIN DEFINITION\r\n\t  // ==========================\r\n\r\n\t  function Plugin(option) {\r\n\t    return this.each(function () {\r\n\t      var $this   = $(this)\r\n\t      var data    = $this.data('bs.carousel')\r\n\t      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\r\n\t      var action  = typeof option == 'string' ? option : options.slide\r\n\r\n\t      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\r\n\t      if (typeof option == 'number') data.to(option)\r\n\t      else if (action) data[action]()\r\n\t      else if (options.interval) data.pause().cycle()\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.carousel\r\n\r\n\t  $.fn.carousel             = Plugin\r\n\t  $.fn.carousel.Constructor = Carousel\r\n\r\n\r\n\t  // CAROUSEL NO CONFLICT\r\n\t  // ====================\r\n\r\n\t  $.fn.carousel.noConflict = function () {\r\n\t    $.fn.carousel = old\r\n\t    return this\r\n\t  }\r\n\r\n\r\n\t  // CAROUSEL DATA-API\r\n\t  // =================\r\n\r\n\t  var clickHandler = function (e) {\r\n\t    var href\r\n\t    var $this   = $(this)\r\n\t    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\r\n\t    if (!$target.hasClass('carousel')) return\r\n\t    var options = $.extend({}, $target.data(), $this.data())\r\n\t    var slideIndex = $this.attr('data-slide-to')\r\n\t    if (slideIndex) options.interval = false\r\n\r\n\t    Plugin.call($target, options)\r\n\r\n\t    if (slideIndex) {\r\n\t      $target.data('bs.carousel').to(slideIndex)\r\n\t    }\r\n\r\n\t    e.preventDefault()\r\n\t  }\r\n\r\n\t  $(document)\r\n\t    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\r\n\t    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\r\n\r\n\t  $(window).on('load', function () {\r\n\t    $('[data-ride=\"carousel\"]').each(function () {\r\n\t      var $carousel = $(this)\r\n\t      Plugin.call($carousel, $carousel.data())\r\n\t    })\r\n\t  })\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: collapse.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#collapse\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // COLLAPSE PUBLIC CLASS DEFINITION\r\n\t  // ================================\r\n\r\n\t  var Collapse = function (element, options) {\r\n\t    this.$element      = $(element)\r\n\t    this.options       = $.extend({}, Collapse.DEFAULTS, options)\r\n\t    this.$trigger      = $(this.options.trigger).filter('[href=\"#' + element.id + '\"], [data-target=\"#' + element.id + '\"]')\r\n\t    this.transitioning = null\r\n\r\n\t    if (this.options.parent) {\r\n\t      this.$parent = this.getParent()\r\n\t    } else {\r\n\t      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\r\n\t    }\r\n\r\n\t    if (this.options.toggle) this.toggle()\r\n\t  }\r\n\r\n\t  Collapse.VERSION  = '3.3.0'\r\n\r\n\t  Collapse.TRANSITION_DURATION = 350\r\n\r\n\t  Collapse.DEFAULTS = {\r\n\t    toggle: true,\r\n\t    trigger: '[data-toggle=\"collapse\"]'\r\n\t  }\r\n\r\n\t  Collapse.prototype.dimension = function () {\r\n\t    var hasWidth = this.$element.hasClass('width')\r\n\t    return hasWidth ? 'width' : 'height'\r\n\t  }\r\n\r\n\t  Collapse.prototype.show = function () {\r\n\t    if (this.transitioning || this.$element.hasClass('in')) return\r\n\r\n\t    var activesData\r\n\t    var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')\r\n\r\n\t    if (actives && actives.length) {\r\n\t      activesData = actives.data('bs.collapse')\r\n\t      if (activesData && activesData.transitioning) return\r\n\t    }\r\n\r\n\t    var startEvent = $.Event('show.bs.collapse')\r\n\t    this.$element.trigger(startEvent)\r\n\t    if (startEvent.isDefaultPrevented()) return\r\n\r\n\t    if (actives && actives.length) {\r\n\t      Plugin.call(actives, 'hide')\r\n\t      activesData || actives.data('bs.collapse', null)\r\n\t    }\r\n\r\n\t    var dimension = this.dimension()\r\n\r\n\t    this.$element\r\n\t      .removeClass('collapse')\r\n\t      .addClass('collapsing')[dimension](0)\r\n\t      .attr('aria-expanded', true)\r\n\r\n\t    this.$trigger\r\n\t      .removeClass('collapsed')\r\n\t      .attr('aria-expanded', true)\r\n\r\n\t    this.transitioning = 1\r\n\r\n\t    var complete = function () {\r\n\t      this.$element\r\n\t        .removeClass('collapsing')\r\n\t        .addClass('collapse in')[dimension]('')\r\n\t      this.transitioning = 0\r\n\t      this.$element\r\n\t        .trigger('shown.bs.collapse')\r\n\t    }\r\n\r\n\t    if (!$.support.transition) return complete.call(this)\r\n\r\n\t    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\r\n\r\n\t    this.$element\r\n\t      .one('bsTransitionEnd', $.proxy(complete, this))\r\n\t      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\r\n\t  }\r\n\r\n\t  Collapse.prototype.hide = function () {\r\n\t    if (this.transitioning || !this.$element.hasClass('in')) return\r\n\r\n\t    var startEvent = $.Event('hide.bs.collapse')\r\n\t    this.$element.trigger(startEvent)\r\n\t    if (startEvent.isDefaultPrevented()) return\r\n\r\n\t    var dimension = this.dimension()\r\n\r\n\t    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\r\n\r\n\t    this.$element\r\n\t      .addClass('collapsing')\r\n\t      .removeClass('collapse in')\r\n\t      .attr('aria-expanded', false)\r\n\r\n\t    this.$trigger\r\n\t      .addClass('collapsed')\r\n\t      .attr('aria-expanded', false)\r\n\r\n\t    this.transitioning = 1\r\n\r\n\t    var complete = function () {\r\n\t      this.transitioning = 0\r\n\t      this.$element\r\n\t        .removeClass('collapsing')\r\n\t        .addClass('collapse')\r\n\t        .trigger('hidden.bs.collapse')\r\n\t    }\r\n\r\n\t    if (!$.support.transition) return complete.call(this)\r\n\r\n\t    this.$element\r\n\t      [dimension](0)\r\n\t      .one('bsTransitionEnd', $.proxy(complete, this))\r\n\t      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\r\n\t  }\r\n\r\n\t  Collapse.prototype.toggle = function () {\r\n\t    this[this.$element.hasClass('in') ? 'hide' : 'show']()\r\n\t  }\r\n\r\n\t  Collapse.prototype.getParent = function () {\r\n\t    return $(this.options.parent)\r\n\t      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\r\n\t      .each($.proxy(function (i, element) {\r\n\t        var $element = $(element)\r\n\t        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\r\n\t      }, this))\r\n\t      .end()\r\n\t  }\r\n\r\n\t  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\r\n\t    var isOpen = $element.hasClass('in')\r\n\r\n\t    $element.attr('aria-expanded', isOpen)\r\n\t    $trigger\r\n\t      .toggleClass('collapsed', !isOpen)\r\n\t      .attr('aria-expanded', isOpen)\r\n\t  }\r\n\r\n\t  function getTargetFromTrigger($trigger) {\r\n\t    var href\r\n\t    var target = $trigger.attr('data-target')\r\n\t      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\r\n\r\n\t    return $(target)\r\n\t  }\r\n\r\n\r\n\t  // COLLAPSE PLUGIN DEFINITION\r\n\t  // ==========================\r\n\r\n\t  function Plugin(option) {\r\n\t    return this.each(function () {\r\n\t      var $this   = $(this)\r\n\t      var data    = $this.data('bs.collapse')\r\n\t      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\r\n\r\n\t      if (!data && options.toggle && option == 'show') options.toggle = false\r\n\t      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\r\n\t      if (typeof option == 'string') data[option]()\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.collapse\r\n\r\n\t  $.fn.collapse             = Plugin\r\n\t  $.fn.collapse.Constructor = Collapse\r\n\r\n\r\n\t  // COLLAPSE NO CONFLICT\r\n\t  // ====================\r\n\r\n\t  $.fn.collapse.noConflict = function () {\r\n\t    $.fn.collapse = old\r\n\t    return this\r\n\t  }\r\n\r\n\r\n\t  // COLLAPSE DATA-API\r\n\t  // =================\r\n\r\n\t  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\r\n\t    var $this   = $(this)\r\n\r\n\t    if (!$this.attr('data-target')) e.preventDefault()\r\n\r\n\t    var $target = getTargetFromTrigger($this)\r\n\t    var data    = $target.data('bs.collapse')\r\n\t    var option  = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })\r\n\r\n\t    Plugin.call($target, option)\r\n\t  })\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: dropdown.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#dropdowns\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // DROPDOWN CLASS DEFINITION\r\n\t  // =========================\r\n\r\n\t  var backdrop = '.dropdown-backdrop'\r\n\t  var toggle   = '[data-toggle=\"dropdown\"]'\r\n\t  var Dropdown = function (element) {\r\n\t    $(element).on('click.bs.dropdown', this.toggle)\r\n\t  }\r\n\r\n\t  Dropdown.VERSION = '3.3.0'\r\n\r\n\t  Dropdown.prototype.toggle = function (e) {\r\n\t    var $this = $(this)\r\n\r\n\t    if ($this.is('.disabled, :disabled')) return\r\n\r\n\t    var $parent  = getParent($this)\r\n\t    var isActive = $parent.hasClass('open')\r\n\r\n\t    clearMenus()\r\n\r\n\t    if (!isActive) {\r\n\t      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\r\n\t        // if mobile we use a backdrop because click events don't delegate\r\n\t        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\r\n\t      }\r\n\r\n\t      var relatedTarget = { relatedTarget: this }\r\n\t      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\r\n\r\n\t      if (e.isDefaultPrevented()) return\r\n\r\n\t      $this\r\n\t        .trigger('focus')\r\n\t        .attr('aria-expanded', 'true')\r\n\r\n\t      $parent\r\n\t        .toggleClass('open')\r\n\t        .trigger('shown.bs.dropdown', relatedTarget)\r\n\t    }\r\n\r\n\t    return false\r\n\t  }\r\n\r\n\t  Dropdown.prototype.keydown = function (e) {\r\n\t    if (!/(38|40|27|32)/.test(e.which)) return\r\n\r\n\t    var $this = $(this)\r\n\r\n\t    e.preventDefault()\r\n\t    e.stopPropagation()\r\n\r\n\t    if ($this.is('.disabled, :disabled')) return\r\n\r\n\t    var $parent  = getParent($this)\r\n\t    var isActive = $parent.hasClass('open')\r\n\r\n\t    if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\r\n\t      if (e.which == 27) $parent.find(toggle).trigger('focus')\r\n\t      return $this.trigger('click')\r\n\t    }\r\n\r\n\t    var desc = ' li:not(.divider):visible a'\r\n\t    var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc)\r\n\r\n\t    if (!$items.length) return\r\n\r\n\t    var index = $items.index(e.target)\r\n\r\n\t    if (e.which == 38 && index > 0)                 index--                        // up\r\n\t    if (e.which == 40 && index < $items.length - 1) index++                        // down\r\n\t    if (!~index)                                      index = 0\r\n\r\n\t    $items.eq(index).trigger('focus')\r\n\t  }\r\n\r\n\t  function clearMenus(e) {\r\n\t    if (e && e.which === 3) return\r\n\t    $(backdrop).remove()\r\n\t    $(toggle).each(function () {\r\n\t      var $this         = $(this)\r\n\t      var $parent       = getParent($this)\r\n\t      var relatedTarget = { relatedTarget: this }\r\n\r\n\t      if (!$parent.hasClass('open')) return\r\n\r\n\t      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\r\n\r\n\t      if (e.isDefaultPrevented()) return\r\n\r\n\t      $this.attr('aria-expanded', 'false')\r\n\t      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)\r\n\t    })\r\n\t  }\r\n\r\n\t  function getParent($this) {\r\n\t    var selector = $this.attr('data-target')\r\n\r\n\t    if (!selector) {\r\n\t      selector = $this.attr('href')\r\n\t      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\r\n\t    }\r\n\r\n\t    var $parent = selector && $(selector)\r\n\r\n\t    return $parent && $parent.length ? $parent : $this.parent()\r\n\t  }\r\n\r\n\r\n\t  // DROPDOWN PLUGIN DEFINITION\r\n\t  // ==========================\r\n\r\n\t  function Plugin(option) {\r\n\t    return this.each(function () {\r\n\t      var $this = $(this)\r\n\t      var data  = $this.data('bs.dropdown')\r\n\r\n\t      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\r\n\t      if (typeof option == 'string') data[option].call($this)\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.dropdown\r\n\r\n\t  $.fn.dropdown             = Plugin\r\n\t  $.fn.dropdown.Constructor = Dropdown\r\n\r\n\r\n\t  // DROPDOWN NO CONFLICT\r\n\t  // ====================\r\n\r\n\t  $.fn.dropdown.noConflict = function () {\r\n\t    $.fn.dropdown = old\r\n\t    return this\r\n\t  }\r\n\r\n\r\n\t  // APPLY TO STANDARD DROPDOWN ELEMENTS\r\n\t  // ===================================\r\n\r\n\t  $(document)\r\n\t    .on('click.bs.dropdown.data-api', clearMenus)\r\n\t    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\r\n\t    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\r\n\t    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\r\n\t    .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\r\n\t    .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown)\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: modal.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#modals\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // MODAL CLASS DEFINITION\r\n\t  // ======================\r\n\r\n\t  var Modal = function (element, options) {\r\n\t    this.options        = options\r\n\t    this.$body          = $(document.body)\r\n\t    this.$element       = $(element)\r\n\t    this.$backdrop      =\r\n\t    this.isShown        = null\r\n\t    this.scrollbarWidth = 0\r\n\r\n\t    if (this.options.remote) {\r\n\t      this.$element\r\n\t        .find('.modal-content')\r\n\t        .load(this.options.remote, $.proxy(function () {\r\n\t          this.$element.trigger('loaded.bs.modal')\r\n\t        }, this))\r\n\t    }\r\n\t  }\r\n\r\n\t  Modal.VERSION  = '3.3.0'\r\n\r\n\t  Modal.TRANSITION_DURATION = 300\r\n\t  Modal.BACKDROP_TRANSITION_DURATION = 150\r\n\r\n\t  Modal.DEFAULTS = {\r\n\t    backdrop: true,\r\n\t    keyboard: true,\r\n\t    show: true\r\n\t  }\r\n\r\n\t  Modal.prototype.toggle = function (_relatedTarget) {\r\n\t    return this.isShown ? this.hide() : this.show(_relatedTarget)\r\n\t  }\r\n\r\n\t  Modal.prototype.show = function (_relatedTarget) {\r\n\t    var that = this\r\n\t    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\r\n\r\n\t    this.$element.trigger(e)\r\n\r\n\t    if (this.isShown || e.isDefaultPrevented()) return\r\n\r\n\t    this.isShown = true\r\n\r\n\t    this.checkScrollbar()\r\n\t    this.$body.addClass('modal-open')\r\n\r\n\t    this.setScrollbar()\r\n\t    this.escape()\r\n\r\n\t    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\r\n\r\n\t    this.backdrop(function () {\r\n\t      var transition = $.support.transition && that.$element.hasClass('fade')\r\n\r\n\t      if (!that.$element.parent().length) {\r\n\t        that.$element.appendTo(that.$body) // don't move modals dom position\r\n\t      }\r\n\r\n\t      that.$element\r\n\t        .show()\r\n\t        .scrollTop(0)\r\n\r\n\t      if (transition) {\r\n\t        that.$element[0].offsetWidth // force reflow\r\n\t      }\r\n\r\n\t      that.$element\r\n\t        .addClass('in')\r\n\t        .attr('aria-hidden', false)\r\n\r\n\t      that.enforceFocus()\r\n\r\n\t      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\r\n\r\n\t      transition ?\r\n\t        that.$element.find('.modal-dialog') // wait for modal to slide in\r\n\t          .one('bsTransitionEnd', function () {\r\n\t            that.$element.trigger('focus').trigger(e)\r\n\t          })\r\n\t          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\r\n\t        that.$element.trigger('focus').trigger(e)\r\n\t    })\r\n\t  }\r\n\r\n\t  Modal.prototype.hide = function (e) {\r\n\t    if (e) e.preventDefault()\r\n\r\n\t    e = $.Event('hide.bs.modal')\r\n\r\n\t    this.$element.trigger(e)\r\n\r\n\t    if (!this.isShown || e.isDefaultPrevented()) return\r\n\r\n\t    this.isShown = false\r\n\r\n\t    this.escape()\r\n\r\n\t    $(document).off('focusin.bs.modal')\r\n\r\n\t    this.$element\r\n\t      .removeClass('in')\r\n\t      .attr('aria-hidden', true)\r\n\t      .off('click.dismiss.bs.modal')\r\n\r\n\t    $.support.transition && this.$element.hasClass('fade') ?\r\n\t      this.$element\r\n\t        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\r\n\t        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\r\n\t      this.hideModal()\r\n\t  }\r\n\r\n\t  Modal.prototype.enforceFocus = function () {\r\n\t    $(document)\r\n\t      .off('focusin.bs.modal') // guard against infinite focus loop\r\n\t      .on('focusin.bs.modal', $.proxy(function (e) {\r\n\t        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\r\n\t          this.$element.trigger('focus')\r\n\t        }\r\n\t      }, this))\r\n\t  }\r\n\r\n\t  Modal.prototype.escape = function () {\r\n\t    if (this.isShown && this.options.keyboard) {\r\n\t      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\r\n\t        e.which == 27 && this.hide()\r\n\t      }, this))\r\n\t    } else if (!this.isShown) {\r\n\t      this.$element.off('keydown.dismiss.bs.modal')\r\n\t    }\r\n\t  }\r\n\r\n\t  Modal.prototype.hideModal = function () {\r\n\t    var that = this\r\n\t    this.$element.hide()\r\n\t    this.backdrop(function () {\r\n\t      that.$body.removeClass('modal-open')\r\n\t      that.resetScrollbar()\r\n\t      that.$element.trigger('hidden.bs.modal')\r\n\t    })\r\n\t  }\r\n\r\n\t  Modal.prototype.removeBackdrop = function () {\r\n\t    this.$backdrop && this.$backdrop.remove()\r\n\t    this.$backdrop = null\r\n\t  }\r\n\r\n\t  Modal.prototype.backdrop = function (callback) {\r\n\t    var that = this\r\n\t    var animate = this.$element.hasClass('fade') ? 'fade' : ''\r\n\r\n\t    if (this.isShown && this.options.backdrop) {\r\n\t      var doAnimate = $.support.transition && animate\r\n\r\n\t      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\r\n\t        .prependTo(this.$element)\r\n\t        .on('click.dismiss.bs.modal', $.proxy(function (e) {\r\n\t          if (e.target !== e.currentTarget) return\r\n\t          this.options.backdrop == 'static'\r\n\t            ? this.$element[0].focus.call(this.$element[0])\r\n\t            : this.hide.call(this)\r\n\t        }, this))\r\n\r\n\t      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\r\n\r\n\t      this.$backdrop.addClass('in')\r\n\r\n\t      if (!callback) return\r\n\r\n\t      doAnimate ?\r\n\t        this.$backdrop\r\n\t          .one('bsTransitionEnd', callback)\r\n\t          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\r\n\t        callback()\r\n\r\n\t    } else if (!this.isShown && this.$backdrop) {\r\n\t      this.$backdrop.removeClass('in')\r\n\r\n\t      var callbackRemove = function () {\r\n\t        that.removeBackdrop()\r\n\t        callback && callback()\r\n\t      }\r\n\t      $.support.transition && this.$element.hasClass('fade') ?\r\n\t        this.$backdrop\r\n\t          .one('bsTransitionEnd', callbackRemove)\r\n\t          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\r\n\t        callbackRemove()\r\n\r\n\t    } else if (callback) {\r\n\t      callback()\r\n\t    }\r\n\t  }\r\n\r\n\t  Modal.prototype.checkScrollbar = function () {\r\n\t    this.scrollbarWidth = this.measureScrollbar()\r\n\t  }\r\n\r\n\t  Modal.prototype.setScrollbar = function () {\r\n\t    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\r\n\t    if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\r\n\t  }\r\n\r\n\t  Modal.prototype.resetScrollbar = function () {\r\n\t    this.$body.css('padding-right', '')\r\n\t  }\r\n\r\n\t  Modal.prototype.measureScrollbar = function () { // thx walsh\r\n\t    if (document.body.clientWidth >= window.innerWidth) return 0\r\n\t    var scrollDiv = document.createElement('div')\r\n\t    scrollDiv.className = 'modal-scrollbar-measure'\r\n\t    this.$body.append(scrollDiv)\r\n\t    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\r\n\t    this.$body[0].removeChild(scrollDiv)\r\n\t    return scrollbarWidth\r\n\t  }\r\n\r\n\r\n\t  // MODAL PLUGIN DEFINITION\r\n\t  // =======================\r\n\r\n\t  function Plugin(option, _relatedTarget) {\r\n\t    return this.each(function () {\r\n\t      var $this   = $(this)\r\n\t      var data    = $this.data('bs.modal')\r\n\t      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\r\n\r\n\t      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\r\n\t      if (typeof option == 'string') data[option](_relatedTarget)\r\n\t      else if (options.show) data.show(_relatedTarget)\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.modal\r\n\r\n\t  $.fn.modal             = Plugin\r\n\t  $.fn.modal.Constructor = Modal\r\n\r\n\r\n\t  // MODAL NO CONFLICT\r\n\t  // =================\r\n\r\n\t  $.fn.modal.noConflict = function () {\r\n\t    $.fn.modal = old\r\n\t    return this\r\n\t  }\r\n\r\n\r\n\t  // MODAL DATA-API\r\n\t  // ==============\r\n\r\n\t  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\r\n\t    var $this   = $(this)\r\n\t    var href    = $this.attr('href')\r\n\t    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\r\n\t    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\r\n\r\n\t    if ($this.is('a')) e.preventDefault()\r\n\r\n\t    $target.one('show.bs.modal', function (showEvent) {\r\n\t      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\r\n\t      $target.one('hidden.bs.modal', function () {\r\n\t        $this.is(':visible') && $this.trigger('focus')\r\n\t      })\r\n\t    })\r\n\t    Plugin.call($target, option, this)\r\n\t  })\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: tooltip.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#tooltip\r\n\t * Inspired by the original jQuery.tipsy by Jason Frame\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // TOOLTIP PUBLIC CLASS DEFINITION\r\n\t  // ===============================\r\n\r\n\t  var Tooltip = function (element, options) {\r\n\t    this.type       =\r\n\t    this.options    =\r\n\t    this.enabled    =\r\n\t    this.timeout    =\r\n\t    this.hoverState =\r\n\t    this.$element   = null\r\n\r\n\t    this.init('tooltip', element, options)\r\n\t  }\r\n\r\n\t  Tooltip.VERSION  = '3.3.0'\r\n\r\n\t  Tooltip.TRANSITION_DURATION = 150\r\n\r\n\t  Tooltip.DEFAULTS = {\r\n\t    animation: true,\r\n\t    placement: 'top',\r\n\t    selector: false,\r\n\t    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\r\n\t    trigger: 'hover focus',\r\n\t    title: '',\r\n\t    delay: 0,\r\n\t    html: false,\r\n\t    container: false,\r\n\t    viewport: {\r\n\t      selector: 'body',\r\n\t      padding: 0\r\n\t    }\r\n\t  }\r\n\r\n\t  Tooltip.prototype.init = function (type, element, options) {\r\n\t    this.enabled   = true\r\n\t    this.type      = type\r\n\t    this.$element  = $(element)\r\n\t    this.options   = this.getOptions(options)\r\n\t    this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)\r\n\r\n\t    var triggers = this.options.trigger.split(' ')\r\n\r\n\t    for (var i = triggers.length; i--;) {\r\n\t      var trigger = triggers[i]\r\n\r\n\t      if (trigger == 'click') {\r\n\t        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\r\n\t      } else if (trigger != 'manual') {\r\n\t        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\r\n\t        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\r\n\r\n\t        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\r\n\t        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\r\n\t      }\r\n\t    }\r\n\r\n\t    this.options.selector ?\r\n\t      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\r\n\t      this.fixTitle()\r\n\t  }\r\n\r\n\t  Tooltip.prototype.getDefaults = function () {\r\n\t    return Tooltip.DEFAULTS\r\n\t  }\r\n\r\n\t  Tooltip.prototype.getOptions = function (options) {\r\n\t    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\r\n\r\n\t    if (options.delay && typeof options.delay == 'number') {\r\n\t      options.delay = {\r\n\t        show: options.delay,\r\n\t        hide: options.delay\r\n\t      }\r\n\t    }\r\n\r\n\t    return options\r\n\t  }\r\n\r\n\t  Tooltip.prototype.getDelegateOptions = function () {\r\n\t    var options  = {}\r\n\t    var defaults = this.getDefaults()\r\n\r\n\t    this._options && $.each(this._options, function (key, value) {\r\n\t      if (defaults[key] != value) options[key] = value\r\n\t    })\r\n\r\n\t    return options\r\n\t  }\r\n\r\n\t  Tooltip.prototype.enter = function (obj) {\r\n\t    var self = obj instanceof this.constructor ?\r\n\t      obj : $(obj.currentTarget).data('bs.' + this.type)\r\n\r\n\t    if (self && self.$tip && self.$tip.is(':visible')) {\r\n\t      self.hoverState = 'in'\r\n\t      return\r\n\t    }\r\n\r\n\t    if (!self) {\r\n\t      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\r\n\t      $(obj.currentTarget).data('bs.' + this.type, self)\r\n\t    }\r\n\r\n\t    clearTimeout(self.timeout)\r\n\r\n\t    self.hoverState = 'in'\r\n\r\n\t    if (!self.options.delay || !self.options.delay.show) return self.show()\r\n\r\n\t    self.timeout = setTimeout(function () {\r\n\t      if (self.hoverState == 'in') self.show()\r\n\t    }, self.options.delay.show)\r\n\t  }\r\n\r\n\t  Tooltip.prototype.leave = function (obj) {\r\n\t    var self = obj instanceof this.constructor ?\r\n\t      obj : $(obj.currentTarget).data('bs.' + this.type)\r\n\r\n\t    if (!self) {\r\n\t      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\r\n\t      $(obj.currentTarget).data('bs.' + this.type, self)\r\n\t    }\r\n\r\n\t    clearTimeout(self.timeout)\r\n\r\n\t    self.hoverState = 'out'\r\n\r\n\t    if (!self.options.delay || !self.options.delay.hide) return self.hide()\r\n\r\n\t    self.timeout = setTimeout(function () {\r\n\t      if (self.hoverState == 'out') self.hide()\r\n\t    }, self.options.delay.hide)\r\n\t  }\r\n\r\n\t  Tooltip.prototype.show = function () {\r\n\t    var e = $.Event('show.bs.' + this.type)\r\n\r\n\t    if (this.hasContent() && this.enabled) {\r\n\t      this.$element.trigger(e)\r\n\r\n\t      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\r\n\t      if (e.isDefaultPrevented() || !inDom) return\r\n\t      var that = this\r\n\r\n\t      var $tip = this.tip()\r\n\r\n\t      var tipId = this.getUID(this.type)\r\n\r\n\t      this.setContent()\r\n\t      $tip.attr('id', tipId)\r\n\t      this.$element.attr('aria-describedby', tipId)\r\n\r\n\t      if (this.options.animation) $tip.addClass('fade')\r\n\r\n\t      var placement = typeof this.options.placement == 'function' ?\r\n\t        this.options.placement.call(this, $tip[0], this.$element[0]) :\r\n\t        this.options.placement\r\n\r\n\t      var autoToken = /\\s?auto?\\s?/i\r\n\t      var autoPlace = autoToken.test(placement)\r\n\t      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\r\n\r\n\t      $tip\r\n\t        .detach()\r\n\t        .css({ top: 0, left: 0, display: 'block' })\r\n\t        .addClass(placement)\r\n\t        .data('bs.' + this.type, this)\r\n\r\n\t      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\r\n\r\n\t      var pos          = this.getPosition()\r\n\t      var actualWidth  = $tip[0].offsetWidth\r\n\t      var actualHeight = $tip[0].offsetHeight\r\n\r\n\t      if (autoPlace) {\r\n\t        var orgPlacement = placement\r\n\t        var $container   = this.options.container ? $(this.options.container) : this.$element.parent()\r\n\t        var containerDim = this.getPosition($container)\r\n\r\n\t        placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top'    :\r\n\t                    placement == 'top'    && pos.top    - actualHeight < containerDim.top    ? 'bottom' :\r\n\t                    placement == 'right'  && pos.right  + actualWidth  > containerDim.width  ? 'left'   :\r\n\t                    placement == 'left'   && pos.left   - actualWidth  < containerDim.left   ? 'right'  :\r\n\t                    placement\r\n\r\n\t        $tip\r\n\t          .removeClass(orgPlacement)\r\n\t          .addClass(placement)\r\n\t      }\r\n\r\n\t      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\r\n\r\n\t      this.applyPlacement(calculatedOffset, placement)\r\n\r\n\t      var complete = function () {\r\n\t        var prevHoverState = that.hoverState\r\n\t        that.$element.trigger('shown.bs.' + that.type)\r\n\t        that.hoverState = null\r\n\r\n\t        if (prevHoverState == 'out') that.leave(that)\r\n\t      }\r\n\r\n\t      $.support.transition && this.$tip.hasClass('fade') ?\r\n\t        $tip\r\n\t          .one('bsTransitionEnd', complete)\r\n\t          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\r\n\t        complete()\r\n\t    }\r\n\t  }\r\n\r\n\t  Tooltip.prototype.applyPlacement = function (offset, placement) {\r\n\t    var $tip   = this.tip()\r\n\t    var width  = $tip[0].offsetWidth\r\n\t    var height = $tip[0].offsetHeight\r\n\r\n\t    // manually read margins because getBoundingClientRect includes difference\r\n\t    var marginTop = parseInt($tip.css('margin-top'), 10)\r\n\t    var marginLeft = parseInt($tip.css('margin-left'), 10)\r\n\r\n\t    // we must check for NaN for ie 8/9\r\n\t    if (isNaN(marginTop))  marginTop  = 0\r\n\t    if (isNaN(marginLeft)) marginLeft = 0\r\n\r\n\t    offset.top  = offset.top  + marginTop\r\n\t    offset.left = offset.left + marginLeft\r\n\r\n\t    // $.fn.offset doesn't round pixel values\r\n\t    // so we use setOffset directly with our own function B-0\r\n\t    $.offset.setOffset($tip[0], $.extend({\r\n\t      using: function (props) {\r\n\t        $tip.css({\r\n\t          top: Math.round(props.top),\r\n\t          left: Math.round(props.left)\r\n\t        })\r\n\t      }\r\n\t    }, offset), 0)\r\n\r\n\t    $tip.addClass('in')\r\n\r\n\t    // check to see if placing tip in new offset caused the tip to resize itself\r\n\t    var actualWidth  = $tip[0].offsetWidth\r\n\t    var actualHeight = $tip[0].offsetHeight\r\n\r\n\t    if (placement == 'top' && actualHeight != height) {\r\n\t      offset.top = offset.top + height - actualHeight\r\n\t    }\r\n\r\n\t    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\r\n\r\n\t    if (delta.left) offset.left += delta.left\r\n\t    else offset.top += delta.top\r\n\r\n\t    var isVertical          = /top|bottom/.test(placement)\r\n\t    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\r\n\t    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\r\n\r\n\t    $tip.offset(offset)\r\n\t    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\r\n\t  }\r\n\r\n\t  Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {\r\n\t    this.arrow()\r\n\t      .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\r\n\t      .css(isHorizontal ? 'top' : 'left', '')\r\n\t  }\r\n\r\n\t  Tooltip.prototype.setContent = function () {\r\n\t    var $tip  = this.tip()\r\n\t    var title = this.getTitle()\r\n\r\n\t    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\r\n\t    $tip.removeClass('fade in top bottom left right')\r\n\t  }\r\n\r\n\t  Tooltip.prototype.hide = function (callback) {\r\n\t    var that = this\r\n\t    var $tip = this.tip()\r\n\t    var e    = $.Event('hide.bs.' + this.type)\r\n\r\n\t    function complete() {\r\n\t      if (that.hoverState != 'in') $tip.detach()\r\n\t      that.$element\r\n\t        .removeAttr('aria-describedby')\r\n\t        .trigger('hidden.bs.' + that.type)\r\n\t      callback && callback()\r\n\t    }\r\n\r\n\t    this.$element.trigger(e)\r\n\r\n\t    if (e.isDefaultPrevented()) return\r\n\r\n\t    $tip.removeClass('in')\r\n\r\n\t    $.support.transition && this.$tip.hasClass('fade') ?\r\n\t      $tip\r\n\t        .one('bsTransitionEnd', complete)\r\n\t        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\r\n\t      complete()\r\n\r\n\t    this.hoverState = null\r\n\r\n\t    return this\r\n\t  }\r\n\r\n\t  Tooltip.prototype.fixTitle = function () {\r\n\t    var $e = this.$element\r\n\t    if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {\r\n\t      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\r\n\t    }\r\n\t  }\r\n\r\n\t  Tooltip.prototype.hasContent = function () {\r\n\t    return this.getTitle()\r\n\t  }\r\n\r\n\t  Tooltip.prototype.getPosition = function ($element) {\r\n\t    $element   = $element || this.$element\r\n\r\n\t    var el     = $element[0]\r\n\t    var isBody = el.tagName == 'BODY'\r\n\r\n\t    var elRect    = el.getBoundingClientRect()\r\n\t    if (elRect.width == null) {\r\n\t      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\r\n\t      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\r\n\t    }\r\n\t    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()\r\n\t    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\r\n\t    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\r\n\r\n\t    return $.extend({}, elRect, scroll, outerDims, elOffset)\r\n\t  }\r\n\r\n\t  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\r\n\t    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\r\n\t           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\r\n\t           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\r\n\t        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\r\n\r\n\t  }\r\n\r\n\t  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\r\n\t    var delta = { top: 0, left: 0 }\r\n\t    if (!this.$viewport) return delta\r\n\r\n\t    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\r\n\t    var viewportDimensions = this.getPosition(this.$viewport)\r\n\r\n\t    if (/right|left/.test(placement)) {\r\n\t      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\r\n\t      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\r\n\t      if (topEdgeOffset < viewportDimensions.top) { // top overflow\r\n\t        delta.top = viewportDimensions.top - topEdgeOffset\r\n\t      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\r\n\t        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\r\n\t      }\r\n\t    } else {\r\n\t      var leftEdgeOffset  = pos.left - viewportPadding\r\n\t      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\r\n\t      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\r\n\t        delta.left = viewportDimensions.left - leftEdgeOffset\r\n\t      } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow\r\n\t        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\r\n\t      }\r\n\t    }\r\n\r\n\t    return delta\r\n\t  }\r\n\r\n\t  Tooltip.prototype.getTitle = function () {\r\n\t    var title\r\n\t    var $e = this.$element\r\n\t    var o  = this.options\r\n\r\n\t    title = $e.attr('data-original-title')\r\n\t      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\r\n\r\n\t    return title\r\n\t  }\r\n\r\n\t  Tooltip.prototype.getUID = function (prefix) {\r\n\t    do prefix += ~~(Math.random() * 1000000)\r\n\t    while (document.getElementById(prefix))\r\n\t    return prefix\r\n\t  }\r\n\r\n\t  Tooltip.prototype.tip = function () {\r\n\t    return (this.$tip = this.$tip || $(this.options.template))\r\n\t  }\r\n\r\n\t  Tooltip.prototype.arrow = function () {\r\n\t    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\r\n\t  }\r\n\r\n\t  Tooltip.prototype.enable = function () {\r\n\t    this.enabled = true\r\n\t  }\r\n\r\n\t  Tooltip.prototype.disable = function () {\r\n\t    this.enabled = false\r\n\t  }\r\n\r\n\t  Tooltip.prototype.toggleEnabled = function () {\r\n\t    this.enabled = !this.enabled\r\n\t  }\r\n\r\n\t  Tooltip.prototype.toggle = function (e) {\r\n\t    var self = this\r\n\t    if (e) {\r\n\t      self = $(e.currentTarget).data('bs.' + this.type)\r\n\t      if (!self) {\r\n\t        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\r\n\t        $(e.currentTarget).data('bs.' + this.type, self)\r\n\t      }\r\n\t    }\r\n\r\n\t    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\r\n\t  }\r\n\r\n\t  Tooltip.prototype.destroy = function () {\r\n\t    var that = this\r\n\t    clearTimeout(this.timeout)\r\n\t    this.hide(function () {\r\n\t      that.$element.off('.' + that.type).removeData('bs.' + that.type)\r\n\t    })\r\n\t  }\r\n\r\n\r\n\t  // TOOLTIP PLUGIN DEFINITION\r\n\t  // =========================\r\n\r\n\t  function Plugin(option) {\r\n\t    return this.each(function () {\r\n\t      var $this    = $(this)\r\n\t      var data     = $this.data('bs.tooltip')\r\n\t      var options  = typeof option == 'object' && option\r\n\t      var selector = options && options.selector\r\n\r\n\t      if (!data && option == 'destroy') return\r\n\t      if (selector) {\r\n\t        if (!data) $this.data('bs.tooltip', (data = {}))\r\n\t        if (!data[selector]) data[selector] = new Tooltip(this, options)\r\n\t      } else {\r\n\t        if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\r\n\t      }\r\n\t      if (typeof option == 'string') data[option]()\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.tooltip\r\n\r\n\t  $.fn.tooltip             = Plugin\r\n\t  $.fn.tooltip.Constructor = Tooltip\r\n\r\n\r\n\t  // TOOLTIP NO CONFLICT\r\n\t  // ===================\r\n\r\n\t  $.fn.tooltip.noConflict = function () {\r\n\t    $.fn.tooltip = old\r\n\t    return this\r\n\t  }\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: popover.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#popovers\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // POPOVER PUBLIC CLASS DEFINITION\r\n\t  // ===============================\r\n\r\n\t  var Popover = function (element, options) {\r\n\t    this.init('popover', element, options)\r\n\t  }\r\n\r\n\t  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\r\n\r\n\t  Popover.VERSION  = '3.3.0'\r\n\r\n\t  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\r\n\t    placement: 'right',\r\n\t    trigger: 'click',\r\n\t    content: '',\r\n\t    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\r\n\t  })\r\n\r\n\r\n\t  // NOTE: POPOVER EXTENDS tooltip.js\r\n\t  // ================================\r\n\r\n\t  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\r\n\r\n\t  Popover.prototype.constructor = Popover\r\n\r\n\t  Popover.prototype.getDefaults = function () {\r\n\t    return Popover.DEFAULTS\r\n\t  }\r\n\r\n\t  Popover.prototype.setContent = function () {\r\n\t    var $tip    = this.tip()\r\n\t    var title   = this.getTitle()\r\n\t    var content = this.getContent()\r\n\r\n\t    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\r\n\t    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\r\n\t      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\r\n\t    ](content)\r\n\r\n\t    $tip.removeClass('fade top bottom left right in')\r\n\r\n\t    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\r\n\t    // this manually by checking the contents.\r\n\t    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\r\n\t  }\r\n\r\n\t  Popover.prototype.hasContent = function () {\r\n\t    return this.getTitle() || this.getContent()\r\n\t  }\r\n\r\n\t  Popover.prototype.getContent = function () {\r\n\t    var $e = this.$element\r\n\t    var o  = this.options\r\n\r\n\t    return $e.attr('data-content')\r\n\t      || (typeof o.content == 'function' ?\r\n\t            o.content.call($e[0]) :\r\n\t            o.content)\r\n\t  }\r\n\r\n\t  Popover.prototype.arrow = function () {\r\n\t    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\r\n\t  }\r\n\r\n\t  Popover.prototype.tip = function () {\r\n\t    if (!this.$tip) this.$tip = $(this.options.template)\r\n\t    return this.$tip\r\n\t  }\r\n\r\n\r\n\t  // POPOVER PLUGIN DEFINITION\r\n\t  // =========================\r\n\r\n\t  function Plugin(option) {\r\n\t    return this.each(function () {\r\n\t      var $this    = $(this)\r\n\t      var data     = $this.data('bs.popover')\r\n\t      var options  = typeof option == 'object' && option\r\n\t      var selector = options && options.selector\r\n\r\n\t      if (!data && option == 'destroy') return\r\n\t      if (selector) {\r\n\t        if (!data) $this.data('bs.popover', (data = {}))\r\n\t        if (!data[selector]) data[selector] = new Popover(this, options)\r\n\t      } else {\r\n\t        if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\r\n\t      }\r\n\t      if (typeof option == 'string') data[option]()\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.popover\r\n\r\n\t  $.fn.popover             = Plugin\r\n\t  $.fn.popover.Constructor = Popover\r\n\r\n\r\n\t  // POPOVER NO CONFLICT\r\n\t  // ===================\r\n\r\n\t  $.fn.popover.noConflict = function () {\r\n\t    $.fn.popover = old\r\n\t    return this\r\n\t  }\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: scrollspy.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#scrollspy\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // SCROLLSPY CLASS DEFINITION\r\n\t  // ==========================\r\n\r\n\t  function ScrollSpy(element, options) {\r\n\t    var process  = $.proxy(this.process, this)\r\n\r\n\t    this.$body          = $('body')\r\n\t    this.$scrollElement = $(element).is('body') ? $(window) : $(element)\r\n\t    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\r\n\t    this.selector       = (this.options.target || '') + ' .nav li > a'\r\n\t    this.offsets        = []\r\n\t    this.targets        = []\r\n\t    this.activeTarget   = null\r\n\t    this.scrollHeight   = 0\r\n\r\n\t    this.$scrollElement.on('scroll.bs.scrollspy', process)\r\n\t    this.refresh()\r\n\t    this.process()\r\n\t  }\r\n\r\n\t  ScrollSpy.VERSION  = '3.3.0'\r\n\r\n\t  ScrollSpy.DEFAULTS = {\r\n\t    offset: 10\r\n\t  }\r\n\r\n\t  ScrollSpy.prototype.getScrollHeight = function () {\r\n\t    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\r\n\t  }\r\n\r\n\t  ScrollSpy.prototype.refresh = function () {\r\n\t    var offsetMethod = 'offset'\r\n\t    var offsetBase   = 0\r\n\r\n\t    if (!$.isWindow(this.$scrollElement[0])) {\r\n\t      offsetMethod = 'position'\r\n\t      offsetBase   = this.$scrollElement.scrollTop()\r\n\t    }\r\n\r\n\t    this.offsets = []\r\n\t    this.targets = []\r\n\t    this.scrollHeight = this.getScrollHeight()\r\n\r\n\t    var self     = this\r\n\r\n\t    this.$body\r\n\t      .find(this.selector)\r\n\t      .map(function () {\r\n\t        var $el   = $(this)\r\n\t        var href  = $el.data('target') || $el.attr('href')\r\n\t        var $href = /^#./.test(href) && $(href)\r\n\r\n\t        return ($href\r\n\t          && $href.length\r\n\t          && $href.is(':visible')\r\n\t          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\r\n\t      })\r\n\t      .sort(function (a, b) { return a[0] - b[0] })\r\n\t      .each(function () {\r\n\t        self.offsets.push(this[0])\r\n\t        self.targets.push(this[1])\r\n\t      })\r\n\t  }\r\n\r\n\t  ScrollSpy.prototype.process = function () {\r\n\t    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\r\n\t    var scrollHeight = this.getScrollHeight()\r\n\t    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\r\n\t    var offsets      = this.offsets\r\n\t    var targets      = this.targets\r\n\t    var activeTarget = this.activeTarget\r\n\t    var i\r\n\r\n\t    if (this.scrollHeight != scrollHeight) {\r\n\t      this.refresh()\r\n\t    }\r\n\r\n\t    if (scrollTop >= maxScroll) {\r\n\t      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\r\n\t    }\r\n\r\n\t    if (activeTarget && scrollTop < offsets[0]) {\r\n\t      this.activeTarget = null\r\n\t      return this.clear()\r\n\t    }\r\n\r\n\t    for (i = offsets.length; i--;) {\r\n\t      activeTarget != targets[i]\r\n\t        && scrollTop >= offsets[i]\r\n\t        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\r\n\t        && this.activate(targets[i])\r\n\t    }\r\n\t  }\r\n\r\n\t  ScrollSpy.prototype.activate = function (target) {\r\n\t    this.activeTarget = target\r\n\r\n\t    this.clear()\r\n\r\n\t    var selector = this.selector +\r\n\t        '[data-target=\"' + target + '\"],' +\r\n\t        this.selector + '[href=\"' + target + '\"]'\r\n\r\n\t    var active = $(selector)\r\n\t      .parents('li')\r\n\t      .addClass('active')\r\n\r\n\t    if (active.parent('.dropdown-menu').length) {\r\n\t      active = active\r\n\t        .closest('li.dropdown')\r\n\t        .addClass('active')\r\n\t    }\r\n\r\n\t    active.trigger('activate.bs.scrollspy')\r\n\t  }\r\n\r\n\t  ScrollSpy.prototype.clear = function () {\r\n\t    $(this.selector)\r\n\t      .parentsUntil(this.options.target, '.active')\r\n\t      .removeClass('active')\r\n\t  }\r\n\r\n\r\n\t  // SCROLLSPY PLUGIN DEFINITION\r\n\t  // ===========================\r\n\r\n\t  function Plugin(option) {\r\n\t    return this.each(function () {\r\n\t      var $this   = $(this)\r\n\t      var data    = $this.data('bs.scrollspy')\r\n\t      var options = typeof option == 'object' && option\r\n\r\n\t      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\r\n\t      if (typeof option == 'string') data[option]()\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.scrollspy\r\n\r\n\t  $.fn.scrollspy             = Plugin\r\n\t  $.fn.scrollspy.Constructor = ScrollSpy\r\n\r\n\r\n\t  // SCROLLSPY NO CONFLICT\r\n\t  // =====================\r\n\r\n\t  $.fn.scrollspy.noConflict = function () {\r\n\t    $.fn.scrollspy = old\r\n\t    return this\r\n\t  }\r\n\r\n\r\n\t  // SCROLLSPY DATA-API\r\n\t  // ==================\r\n\r\n\t  $(window).on('load.bs.scrollspy.data-api', function () {\r\n\t    $('[data-spy=\"scroll\"]').each(function () {\r\n\t      var $spy = $(this)\r\n\t      Plugin.call($spy, $spy.data())\r\n\t    })\r\n\t  })\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: tab.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#tabs\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // TAB CLASS DEFINITION\r\n\t  // ====================\r\n\r\n\t  var Tab = function (element) {\r\n\t    this.element = $(element)\r\n\t  }\r\n\r\n\t  Tab.VERSION = '3.3.0'\r\n\r\n\t  Tab.TRANSITION_DURATION = 150\r\n\r\n\t  Tab.prototype.show = function () {\r\n\t    var $this    = this.element\r\n\t    var $ul      = $this.closest('ul:not(.dropdown-menu)')\r\n\t    var selector = $this.data('target')\r\n\r\n\t    if (!selector) {\r\n\t      selector = $this.attr('href')\r\n\t      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\r\n\t    }\r\n\r\n\t    if ($this.parent('li').hasClass('active')) return\r\n\r\n\t    var $previous = $ul.find('.active:last a')\r\n\t    var hideEvent = $.Event('hide.bs.tab', {\r\n\t      relatedTarget: $this[0]\r\n\t    })\r\n\t    var showEvent = $.Event('show.bs.tab', {\r\n\t      relatedTarget: $previous[0]\r\n\t    })\r\n\r\n\t    $previous.trigger(hideEvent)\r\n\t    $this.trigger(showEvent)\r\n\r\n\t    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\r\n\r\n\t    var $target = $(selector)\r\n\r\n\t    this.activate($this.closest('li'), $ul)\r\n\t    this.activate($target, $target.parent(), function () {\r\n\t      $previous.trigger({\r\n\t        type: 'hidden.bs.tab',\r\n\t        relatedTarget: $this[0]\r\n\t      })\r\n\t      $this.trigger({\r\n\t        type: 'shown.bs.tab',\r\n\t        relatedTarget: $previous[0]\r\n\t      })\r\n\t    })\r\n\t  }\r\n\r\n\t  Tab.prototype.activate = function (element, container, callback) {\r\n\t    var $active    = container.find('> .active')\r\n\t    var transition = callback\r\n\t      && $.support.transition\r\n\t      && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)\r\n\r\n\t    function next() {\r\n\t      $active\r\n\t        .removeClass('active')\r\n\t        .find('> .dropdown-menu > .active')\r\n\t          .removeClass('active')\r\n\t        .end()\r\n\t        .find('[data-toggle=\"tab\"]')\r\n\t          .attr('aria-expanded', false)\r\n\r\n\t      element\r\n\t        .addClass('active')\r\n\t        .find('[data-toggle=\"tab\"]')\r\n\t          .attr('aria-expanded', true)\r\n\r\n\t      if (transition) {\r\n\t        element[0].offsetWidth // reflow for transition\r\n\t        element.addClass('in')\r\n\t      } else {\r\n\t        element.removeClass('fade')\r\n\t      }\r\n\r\n\t      if (element.parent('.dropdown-menu')) {\r\n\t        element\r\n\t          .closest('li.dropdown')\r\n\t            .addClass('active')\r\n\t          .end()\r\n\t          .find('[data-toggle=\"tab\"]')\r\n\t            .attr('aria-expanded', true)\r\n\t      }\r\n\r\n\t      callback && callback()\r\n\t    }\r\n\r\n\t    $active.length && transition ?\r\n\t      $active\r\n\t        .one('bsTransitionEnd', next)\r\n\t        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\r\n\t      next()\r\n\r\n\t    $active.removeClass('in')\r\n\t  }\r\n\r\n\r\n\t  // TAB PLUGIN DEFINITION\r\n\t  // =====================\r\n\r\n\t  function Plugin(option) {\r\n\t    return this.each(function () {\r\n\t      var $this = $(this)\r\n\t      var data  = $this.data('bs.tab')\r\n\r\n\t      if (!data) $this.data('bs.tab', (data = new Tab(this)))\r\n\t      if (typeof option == 'string') data[option]()\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.tab\r\n\r\n\t  $.fn.tab             = Plugin\r\n\t  $.fn.tab.Constructor = Tab\r\n\r\n\r\n\t  // TAB NO CONFLICT\r\n\t  // ===============\r\n\r\n\t  $.fn.tab.noConflict = function () {\r\n\t    $.fn.tab = old\r\n\t    return this\r\n\t  }\r\n\r\n\r\n\t  // TAB DATA-API\r\n\t  // ============\r\n\r\n\t  var clickHandler = function (e) {\r\n\t    e.preventDefault()\r\n\t    Plugin.call($(this), 'show')\r\n\t  }\r\n\r\n\t  $(document)\r\n\t    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\r\n\t    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\r\n\r\n\t}(jQuery);\r\n\r\n\t/* ========================================================================\r\n\t * Bootstrap: affix.js v3.3.0\r\n\t * http://getbootstrap.com/javascript/#affix\r\n\t * ========================================================================\r\n\t * Copyright 2011-2014 Twitter, Inc.\r\n\t * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n\t * ======================================================================== */\r\n\r\n\r\n\t+function ($) {\r\n\t  'use strict';\r\n\r\n\t  // AFFIX CLASS DEFINITION\r\n\t  // ======================\r\n\r\n\t  var Affix = function (element, options) {\r\n\t    this.options = $.extend({}, Affix.DEFAULTS, options)\r\n\r\n\t    this.$target = $(this.options.target)\r\n\t      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\r\n\t      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\r\n\r\n\t    this.$element     = $(element)\r\n\t    this.affixed      =\r\n\t    this.unpin        =\r\n\t    this.pinnedOffset = null\r\n\r\n\t    this.checkPosition()\r\n\t  }\r\n\r\n\t  Affix.VERSION  = '3.3.0'\r\n\r\n\t  Affix.RESET    = 'affix affix-top affix-bottom'\r\n\r\n\t  Affix.DEFAULTS = {\r\n\t    offset: 0,\r\n\t    target: window\r\n\t  }\r\n\r\n\t  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\r\n\t    var scrollTop    = this.$target.scrollTop()\r\n\t    var position     = this.$element.offset()\r\n\t    var targetHeight = this.$target.height()\r\n\r\n\t    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\r\n\r\n\t    if (this.affixed == 'bottom') {\r\n\t      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\r\n\t      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\r\n\t    }\r\n\r\n\t    var initializing   = this.affixed == null\r\n\t    var colliderTop    = initializing ? scrollTop : position.top\r\n\t    var colliderHeight = initializing ? targetHeight : height\r\n\r\n\t    if (offsetTop != null && colliderTop <= offsetTop) return 'top'\r\n\t    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\r\n\r\n\t    return false\r\n\t  }\r\n\r\n\t  Affix.prototype.getPinnedOffset = function () {\r\n\t    if (this.pinnedOffset) return this.pinnedOffset\r\n\t    this.$element.removeClass(Affix.RESET).addClass('affix')\r\n\t    var scrollTop = this.$target.scrollTop()\r\n\t    var position  = this.$element.offset()\r\n\t    return (this.pinnedOffset = position.top - scrollTop)\r\n\t  }\r\n\r\n\t  Affix.prototype.checkPositionWithEventLoop = function () {\r\n\t    setTimeout($.proxy(this.checkPosition, this), 1)\r\n\t  }\r\n\r\n\t  Affix.prototype.checkPosition = function () {\r\n\t    if (!this.$element.is(':visible')) return\r\n\r\n\t    var height       = this.$element.height()\r\n\t    var offset       = this.options.offset\r\n\t    var offsetTop    = offset.top\r\n\t    var offsetBottom = offset.bottom\r\n\t    var scrollHeight = $('body').height()\r\n\r\n\t    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\r\n\t    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\r\n\t    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\r\n\r\n\t    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\r\n\r\n\t    if (this.affixed != affix) {\r\n\t      if (this.unpin != null) this.$element.css('top', '')\r\n\r\n\t      var affixType = 'affix' + (affix ? '-' + affix : '')\r\n\t      var e         = $.Event(affixType + '.bs.affix')\r\n\r\n\t      this.$element.trigger(e)\r\n\r\n\t      if (e.isDefaultPrevented()) return\r\n\r\n\t      this.affixed = affix\r\n\t      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\r\n\r\n\t      this.$element\r\n\t        .removeClass(Affix.RESET)\r\n\t        .addClass(affixType)\r\n\t        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\r\n\t    }\r\n\r\n\t    if (affix == 'bottom') {\r\n\t      this.$element.offset({\r\n\t        top: scrollHeight - height - offsetBottom\r\n\t      })\r\n\t    }\r\n\t  }\r\n\r\n\r\n\t  // AFFIX PLUGIN DEFINITION\r\n\t  // =======================\r\n\r\n\t  function Plugin(option) {\r\n\t    return this.each(function () {\r\n\t      var $this   = $(this)\r\n\t      var data    = $this.data('bs.affix')\r\n\t      var options = typeof option == 'object' && option\r\n\r\n\t      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\r\n\t      if (typeof option == 'string') data[option]()\r\n\t    })\r\n\t  }\r\n\r\n\t  var old = $.fn.affix\r\n\r\n\t  $.fn.affix             = Plugin\r\n\t  $.fn.affix.Constructor = Affix\r\n\r\n\r\n\t  // AFFIX NO CONFLICT\r\n\t  // =================\r\n\r\n\t  $.fn.affix.noConflict = function () {\r\n\t    $.fn.affix = old\r\n\t    return this\r\n\t  }\r\n\r\n\r\n\t  // AFFIX DATA-API\r\n\t  // ==============\r\n\r\n\t  $(window).on('load', function () {\r\n\t    $('[data-spy=\"affix\"]').each(function () {\r\n\t      var $spy = $(this)\r\n\t      var data = $spy.data()\r\n\r\n\t      data.offset = data.offset || {}\r\n\r\n\t      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\r\n\t      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\r\n\r\n\t      Plugin.call($spy, data)\r\n\t    })\r\n\t  })\r\n\r\n\t}(jQuery);\r\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(jQuery) {!function (a, b) {\r\n\t    \"use strict\";\r\n\r\n\t        if (!jQuery)throw new Error(\"bootstrap-datetimepicker requires jQuery to be loaded first\");\r\n\t        if (!moment)throw new Error(\"bootstrap-datetimepicker requires moment.js to be loaded first\");\r\n\t        b(jQuery, moment);\r\n\t}(this, function (a, b) {\r\n\t    \"use strict\";\r\n\t    if (\"undefined\" == typeof b)throw new Error(\"momentjs is required\");\r\n\t    var c = 0, d = function (d, e) {\r\n\t        var f, g = a.fn.datetimepicker.defaults, h = {time: \"glyphicon glyphicon-time\", date: \"glyphicon glyphicon-calendar\", up: \"glyphicon glyphicon-chevron-up\", down: \"glyphicon glyphicon-chevron-down\"}, i = this, j = !1, k = function () {\r\n\t            var f, j, k = !1;\r\n\t            if (i.options = a.extend({}, g, e), i.options.icons = a.extend({}, h, i.options.icons), i.element = a(d), m(), !i.options.pickTime && !i.options.pickDate)throw new Error(\"Must choose at least one picker\");\r\n\t            if (i.id = c++, b.locale(i.options.language), i.date = b(), i.unset = !1, i.isInput = i.element.is(\"input\"), i.component = !1, i.element.hasClass(\"input-group\") && (i.component = i.element.find(0 === i.element.find(\".datepickerbutton\").size() ? '[class^=\"input-group-\"]' : \".datepickerbutton\")), i.format = i.options.format, f = b().localeData(), i.format || (i.format = i.options.pickDate ? f.longDateFormat(\"L\") : \"\", i.options.pickDate && i.options.pickTime && (i.format += \" \"), i.format += i.options.pickTime ? f.longDateFormat(\"LT\") : \"\", i.options.useSeconds && (-1 !== f.longDateFormat(\"LT\").indexOf(\" A\") ? i.format = i.format.split(\" A\")[0] + \":ss A\" : i.format += \":ss\")), i.use24hours = i.format.toLowerCase().indexOf(\"a\") < 0 && i.format.indexOf(\"h\") < 0, i.component && (k = i.component.find(\"span\")), i.options.pickTime && k && k.addClass(i.options.icons.time), i.options.pickDate && k && (k.removeClass(i.options.icons.time), k.addClass(i.options.icons.date)), i.options.widgetParent = \"string\" == typeof i.options.widgetParent && i.options.widgetParent || i.element.parents().filter(function () {\r\n\t                return\"scroll\" === a(this).css(\"overflow-y\")\r\n\t            }).get(0) || \"body\", i.widget = a(Q()).appendTo(i.options.widgetParent), i.minViewMode = i.options.minViewMode || 0, \"string\" == typeof i.minViewMode)switch (i.minViewMode) {\r\n\t                case\"months\":\r\n\t                    i.minViewMode = 1;\r\n\t                    break;\r\n\t                case\"years\":\r\n\t                    i.minViewMode = 2;\r\n\t                    break;\r\n\t                default:\r\n\t                    i.minViewMode = 0\r\n\t            }\r\n\t            if (i.viewMode = i.options.viewMode || 0, \"string\" == typeof i.viewMode)switch (i.viewMode) {\r\n\t                case\"months\":\r\n\t                    i.viewMode = 1;\r\n\t                    break;\r\n\t                case\"years\":\r\n\t                    i.viewMode = 2;\r\n\t                    break;\r\n\t                default:\r\n\t                    i.viewMode = 0\r\n\t            }\r\n\t            i.viewMode = Math.max(i.viewMode, i.minViewMode), i.options.disabledDates = O(i.options.disabledDates), i.options.enabledDates = O(i.options.enabledDates), i.startViewMode = i.viewMode, i.setMinDate(i.options.minDate), i.setMaxDate(i.options.maxDate), r(), s(), u(), v(), w(), q(), E(), l().prop(\"disabled\") || F(), \"\" !== i.options.defaultDate && \"\" === l().val() && i.setValue(i.options.defaultDate), 1 !== i.options.minuteStepping && (j = i.options.minuteStepping, i.date.minutes(Math.round(i.date.minutes() / j) * j % 60).seconds(0))\r\n\t        }, l = function () {\r\n\t            var a;\r\n\t            if (i.isInput)return i.element;\r\n\t            if (a = i.element.find(\".datepickerinput\"), 0 === a.size())a = i.element.find(\"input\"); else if (!a.is(\"input\"))throw new Error('CSS class \"datepickerinput\" cannot be applied to non input element');\r\n\t            return a\r\n\t        }, m = function () {\r\n\t            var a;\r\n\t            a = i.element.is(\"input\") ? i.element.data() : i.element.find(\"input\").data(), void 0 !== a.dateFormat && (i.options.format = a.dateFormat), void 0 !== a.datePickdate && (i.options.pickDate = a.datePickdate), void 0 !== a.datePicktime && (i.options.pickTime = a.datePicktime), void 0 !== a.dateUseminutes && (i.options.useMinutes = a.dateUseminutes), void 0 !== a.dateUseseconds && (i.options.useSeconds = a.dateUseseconds), void 0 !== a.dateUsecurrent && (i.options.useCurrent = a.dateUsecurrent), void 0 !== a.calendarWeeks && (i.options.calendarWeeks = a.calendarWeeks), void 0 !== a.dateMinutestepping && (i.options.minuteStepping = a.dateMinutestepping), void 0 !== a.dateMindate && (i.options.minDate = a.dateMindate), void 0 !== a.dateMaxdate && (i.options.maxDate = a.dateMaxdate), void 0 !== a.dateShowtoday && (i.options.showToday = a.dateShowtoday), void 0 !== a.dateCollapse && (i.options.collapse = a.dateCollapse), void 0 !== a.dateLanguage && (i.options.language = a.dateLanguage), void 0 !== a.dateDefaultdate && (i.options.defaultDate = a.dateDefaultdate), void 0 !== a.dateDisableddates && (i.options.disabledDates = a.dateDisableddates), void 0 !== a.dateEnableddates && (i.options.enabledDates = a.dateEnableddates), void 0 !== a.dateIcons && (i.options.icons = a.dateIcons), void 0 !== a.dateUsestrict && (i.options.useStrict = a.dateUsestrict), void 0 !== a.dateDirection && (i.options.direction = a.dateDirection), void 0 !== a.dateSidebyside && (i.options.sideBySide = a.dateSidebyside), void 0 !== a.dateDaysofweekdisabled && (i.options.daysOfWeekDisabled = a.dateDaysofweekdisabled)\r\n\t        }, n = function () {\r\n\t            var b, c = \"absolute\", d = i.component ? i.component.offset() : i.element.offset(), e = a(window);\r\n\t            i.width = i.component ? i.component.outerWidth() : i.element.outerWidth(), d.top = d.top + i.element.outerHeight(), \"up\" === i.options.direction ? b = \"top\" : \"bottom\" === i.options.direction ? b = \"bottom\" : \"auto\" === i.options.direction && (b = d.top + i.widget.height() > e.height() + e.scrollTop() && i.widget.height() + i.element.outerHeight() < d.top ? \"top\" : \"bottom\"), \"top\" === b ? (d.bottom = e.height() - d.top + i.element.outerHeight() + 3, i.widget.addClass(\"top\").removeClass(\"bottom\")) : (d.top += 1, i.widget.addClass(\"bottom\").removeClass(\"top\")), void 0 !== i.options.width && i.widget.width(i.options.width), \"left\" === i.options.orientation && (i.widget.addClass(\"left-oriented\"), d.left = d.left - i.widget.width() + 20), J() && (c = \"fixed\", d.top -= e.scrollTop(), d.left -= e.scrollLeft()), e.width() < d.left + i.widget.outerWidth() ? (d.right = e.width() - d.left - i.width, d.left = \"auto\", i.widget.addClass(\"pull-right\")) : (d.right = \"auto\", i.widget.removeClass(\"pull-right\")), i.widget.css(\"top\" === b ? {position: c, bottom: d.bottom, top: \"auto\", left: d.left, right: d.right} : {position: c, top: d.top, bottom: \"auto\", left: d.left, right: d.right})\r\n\t        }, o = function (a, c) {\r\n\t            (!b(i.date).isSame(b(a)) || j) && (j = !1, i.element.trigger({type: \"dp.change\", date: b(i.date), oldDate: b(a)}), \"change\" !== c && i.element.change())\r\n\t        }, p = function (a) {\r\n\t            j = !0, i.element.trigger({type: \"dp.error\", date: b(a, i.format, i.options.useStrict)})\r\n\t        }, q = function (a) {\r\n\t            b.locale(i.options.language);\r\n\t            var c = a;\r\n\t            c || (c = l().val(), c && (i.date = b(c, i.format, i.options.useStrict)), i.date || (i.date = b())), i.viewDate = b(i.date).startOf(\"month\"), t(), x()\r\n\t        }, r = function () {\r\n\t            b.locale(i.options.language);\r\n\t            var c, d = a(\"<tr>\"), e = b.weekdaysMin();\r\n\t            if (i.options.calendarWeeks === !0 && d.append('<th class=\"cw\">#</th>'), 0 === b().localeData()._week.dow)for (c = 0; 7 > c; c++)d.append('<th class=\"dow\">' + e[c] + \"</th>\"); else for (c = 1; 8 > c; c++)d.append(7 === c ? '<th class=\"dow\">' + e[0] + \"</th>\" : '<th class=\"dow\">' + e[c] + \"</th>\");\r\n\t            i.widget.find(\".datepicker-days thead\").append(d)\r\n\t        }, s = function () {\r\n\t            b.locale(i.options.language);\r\n\t            var a, c = \"\", d = b.monthsShort();\r\n\t            for (a = 0; 12 > a; a++)c += '<span class=\"month\">' + d[a] + \"</span>\";\r\n\t            i.widget.find(\".datepicker-months td\").append(c)\r\n\t        }, t = function () {\r\n\t            if (i.options.pickDate) {\r\n\t                b.locale(i.options.language);\r\n\t                var c, d, e, f, g, h, j, k, l, m = i.viewDate.year(), n = i.viewDate.month(), o = i.options.minDate.year(), p = i.options.minDate.month(), q = i.options.maxDate.year(), r = i.options.maxDate.month(), s = [], t = b.months();\r\n\t                for (i.widget.find(\".datepicker-days\").find(\".disabled\").removeClass(\"disabled\"), i.widget.find(\".datepicker-months\").find(\".disabled\").removeClass(\"disabled\"), i.widget.find(\".datepicker-years\").find(\".disabled\").removeClass(\"disabled\"), i.widget.find(\".datepicker-days th:eq(1)\").text(t[n] + \" \" + m), d = b(i.viewDate, i.format, i.options.useStrict).subtract(1, \"months\"), j = d.daysInMonth(), d.date(j).startOf(\"week\"), (m === o && p >= n || o > m) && i.widget.find(\".datepicker-days th:eq(0)\").addClass(\"disabled\"), (m === q && n >= r || m > q) && i.widget.find(\".datepicker-days th:eq(2)\").addClass(\"disabled\"), e = b(d).add(42, \"d\"); d.isBefore(e);) {\r\n\t                    if (d.weekday() === b().startOf(\"week\").weekday() && (f = a(\"<tr>\"), s.push(f), i.options.calendarWeeks === !0 && f.append('<td class=\"cw\">' + d.week() + \"</td>\")), g = \"\", d.year() < m || d.year() === m && d.month() < n ? g += \" old\" : (d.year() > m || d.year() === m && d.month() > n) && (g += \" new\"), d.isSame(b({y: i.date.year(), M: i.date.month(), d: i.date.date()})) && (g += \" active\"), (M(d, \"day\") || !N(d)) && (g += \" disabled\"), i.options.showToday === !0 && d.isSame(b(), \"day\") && (g += \" today\"), i.options.daysOfWeekDisabled)for (h = 0; h < i.options.daysOfWeekDisabled.length; h++)if (d.day() === i.options.daysOfWeekDisabled[h]) {\r\n\t                        g += \" disabled\";\r\n\t                        break\r\n\t                    }\r\n\t                    f.append('<td class=\"day' + g + '\">' + d.date() + \"</td>\"), c = d.date(), d.add(1, \"d\"), c === d.date() && d.add(1, \"d\")\r\n\t                }\r\n\t                for (i.widget.find(\".datepicker-days tbody\").empty().append(s), l = i.date.year(), t = i.widget.find(\".datepicker-months\").find(\"th:eq(1)\").text(m).end().find(\"span\").removeClass(\"active\"), l === m && t.eq(i.date.month()).addClass(\"active\"), o > m - 1 && i.widget.find(\".datepicker-months th:eq(0)\").addClass(\"disabled\"), m + 1 > q && i.widget.find(\".datepicker-months th:eq(2)\").addClass(\"disabled\"), h = 0; 12 > h; h++)m === o && p > h || o > m ? a(t[h]).addClass(\"disabled\") : (m === q && h > r || m > q) && a(t[h]).addClass(\"disabled\");\r\n\t                for (s = \"\", m = 10 * parseInt(m / 10, 10), k = i.widget.find(\".datepicker-years\").find(\"th:eq(1)\").text(m + \"-\" + (m + 9)).parents(\"table\").find(\"td\"), i.widget.find(\".datepicker-years\").find(\"th\").removeClass(\"disabled\"), o > m && i.widget.find(\".datepicker-years\").find(\"th:eq(0)\").addClass(\"disabled\"), m + 9 > q && i.widget.find(\".datepicker-years\").find(\"th:eq(2)\").addClass(\"disabled\"), m -= 1, h = -1; 11 > h; h++)s += '<span class=\"year' + (-1 === h || 10 === h ? \" old\" : \"\") + (l === m ? \" active\" : \"\") + (o > m || m > q ? \" disabled\" : \"\") + '\">' + m + \"</span>\", m += 1;\r\n\t                k.html(s)\r\n\t            }\r\n\t        }, u = function () {\r\n\t            b.locale(i.options.language);\r\n\t            var a, c, d, e = i.widget.find(\".timepicker .timepicker-hours table\"), f = \"\";\r\n\t            if (e.parent().hide(), i.use24hours)for (a = 0, c = 0; 6 > c; c += 1) {\r\n\t                for (f += \"<tr>\", d = 0; 4 > d; d += 1)f += '<td class=\"hour\">' + P(a.toString()) + \"</td>\", a++;\r\n\t                f += \"</tr>\"\r\n\t            } else for (a = 1, c = 0; 3 > c; c += 1) {\r\n\t                for (f += \"<tr>\", d = 0; 4 > d; d += 1)f += '<td class=\"hour\">' + P(a.toString()) + \"</td>\", a++;\r\n\t                f += \"</tr>\"\r\n\t            }\r\n\t            e.html(f)\r\n\t        }, v = function () {\r\n\t            var a, b, c = i.widget.find(\".timepicker .timepicker-minutes table\"), d = \"\", e = 0, f = i.options.minuteStepping;\r\n\t            for (c.parent().hide(), 1 === f && (f = 5), a = 0; a < Math.ceil(60 / f / 4); a++) {\r\n\t                for (d += \"<tr>\", b = 0; 4 > b; b += 1)60 > e ? (d += '<td class=\"minute\">' + P(e.toString()) + \"</td>\", e += f) : d += \"<td></td>\";\r\n\t                d += \"</tr>\"\r\n\t            }\r\n\t            c.html(d)\r\n\t        }, w = function () {\r\n\t            var a, b, c = i.widget.find(\".timepicker .timepicker-seconds table\"), d = \"\", e = 0;\r\n\t            for (c.parent().hide(), a = 0; 3 > a; a++) {\r\n\t                for (d += \"<tr>\", b = 0; 4 > b; b += 1)d += '<td class=\"second\">' + P(e.toString()) + \"</td>\", e += 5;\r\n\t                d += \"</tr>\"\r\n\t            }\r\n\t            c.html(d)\r\n\t        }, x = function () {\r\n\t            if (i.date) {\r\n\t                var a = i.widget.find(\".timepicker span[data-time-component]\"), b = i.date.hours(), c = i.date.format(\"A\");\r\n\t                i.use24hours || (0 === b ? b = 12 : 12 !== b && (b %= 12), i.widget.find(\".timepicker [data-action=togglePeriod]\").text(c)), a.filter(\"[data-time-component=hours]\").text(P(b)), a.filter(\"[data-time-component=minutes]\").text(P(i.date.minutes())), a.filter(\"[data-time-component=seconds]\").text(P(i.date.second()))\r\n\t            }\r\n\t        }, y = function (c) {\r\n\t            c.stopPropagation(), c.preventDefault(), i.unset = !1;\r\n\t            var d, e, f, g, h = a(c.target).closest(\"span, td, th\"), j = b(i.date);\r\n\t            if (1 === h.length && !h.is(\".disabled\"))switch (h[0].nodeName.toLowerCase()) {\r\n\t                case\"th\":\r\n\t                    switch (h[0].className) {\r\n\t                        case\"picker-switch\":\r\n\t                            E(1);\r\n\t                            break;\r\n\t                        case\"prev\":\r\n\t                        case\"next\":\r\n\t                            f = R.modes[i.viewMode].navStep, \"prev\" === h[0].className && (f = -1 * f), i.viewDate.add(f, R.modes[i.viewMode].navFnc), t()\r\n\t                    }\r\n\t                    break;\r\n\t                case\"span\":\r\n\t                    h.is(\".month\") ? (d = h.parent().find(\"span\").index(h), i.viewDate.month(d)) : (e = parseInt(h.text(), 10) || 0, i.viewDate.year(e)), i.viewMode === i.minViewMode && (i.date = b({y: i.viewDate.year(), M: i.viewDate.month(), d: i.viewDate.date(), h: i.date.hours(), m: i.date.minutes(), s: i.date.seconds()}), K(), o(j, c.type)), E(-1), t();\r\n\t                    break;\r\n\t                case\"td\":\r\n\t                    h.is(\".day\") && (g = parseInt(h.text(), 10) || 1, d = i.viewDate.month(), e = i.viewDate.year(), h.is(\".old\") ? 0 === d ? (d = 11, e -= 1) : d -= 1 : h.is(\".new\") && (11 === d ? (d = 0, e += 1) : d += 1), i.date = b({y: e, M: d, d: g, h: i.date.hours(), m: i.date.minutes(), s: i.date.seconds()}), i.viewDate = b({y: e, M: d, d: Math.min(28, g)}), t(), K(), o(j, c.type))\r\n\t            }\r\n\t        }, z = {incrementHours: function () {\r\n\t            L(\"add\", \"hours\", 1)\r\n\t        }, incrementMinutes: function () {\r\n\t            L(\"add\", \"minutes\", i.options.minuteStepping)\r\n\t        }, incrementSeconds: function () {\r\n\t            L(\"add\", \"seconds\", 1)\r\n\t        }, decrementHours: function () {\r\n\t            L(\"subtract\", \"hours\", 1)\r\n\t        }, decrementMinutes: function () {\r\n\t            L(\"subtract\", \"minutes\", i.options.minuteStepping)\r\n\t        }, decrementSeconds: function () {\r\n\t            L(\"subtract\", \"seconds\", 1)\r\n\t        }, togglePeriod: function () {\r\n\t            var a = i.date.hours();\r\n\t            a >= 12 ? a -= 12 : a += 12, i.date.hours(a)\r\n\t        }, showPicker: function () {\r\n\t            i.widget.find(\".timepicker > div:not(.timepicker-picker)\").hide(), i.widget.find(\".timepicker .timepicker-picker\").show()\r\n\t        }, showHours: function () {\r\n\t            i.widget.find(\".timepicker .timepicker-picker\").hide(), i.widget.find(\".timepicker .timepicker-hours\").show()\r\n\t        }, showMinutes: function () {\r\n\t            i.widget.find(\".timepicker .timepicker-picker\").hide(), i.widget.find(\".timepicker .timepicker-minutes\").show()\r\n\t        }, showSeconds: function () {\r\n\t            i.widget.find(\".timepicker .timepicker-picker\").hide(), i.widget.find(\".timepicker .timepicker-seconds\").show()\r\n\t        }, selectHour: function (b) {\r\n\t            var c = parseInt(a(b.target).text(), 10);\r\n\t            i.use24hours || (i.date.hours() >= 12 ? 12 !== c && (c += 12) : 12 === c && (c = 0)), i.date.hours(c), z.showPicker.call(i)\r\n\t        }, selectMinute: function (b) {\r\n\t            i.date.minutes(parseInt(a(b.target).text(), 10)), z.showPicker.call(i)\r\n\t        }, selectSecond: function (b) {\r\n\t            i.date.seconds(parseInt(a(b.target).text(), 10)), z.showPicker.call(i)\r\n\t        }}, A = function (c) {\r\n\t            var d = b(i.date), e = a(c.currentTarget).data(\"action\"), f = z[e].apply(i, arguments);\r\n\t            return B(c), i.date || (i.date = b({y: 1970})), K(), x(), o(d, c.type), f\r\n\t        }, B = function (a) {\r\n\t            a.stopPropagation(), a.preventDefault()\r\n\t        }, C = function (a) {\r\n\t            27 === a.keyCode && i.hide()\r\n\t        }, D = function (c) {\r\n\t            b.locale(i.options.language);\r\n\t            var d = a(c.target), e = b(i.date), f = b(d.val(), i.format, i.options.useStrict);\r\n\t            f.isValid() && !M(f) && N(f) ? (q(), i.setValue(f), o(e, c.type), K()) : (i.viewDate = e, i.unset = !0, o(e, c.type), p(f))\r\n\t        }, E = function (a) {\r\n\t            a && (i.viewMode = Math.max(i.minViewMode, Math.min(2, i.viewMode + a))), i.widget.find(\".datepicker > div\").hide().filter(\".datepicker-\" + R.modes[i.viewMode].clsName).show()\r\n\t        }, F = function () {\r\n\t            var b, c, d, e, f;\r\n\t            i.widget.on(\"click\", \".datepicker *\", a.proxy(y, this)), i.widget.on(\"click\", \"[data-action]\", a.proxy(A, this)), i.widget.on(\"mousedown\", a.proxy(B, this)), i.element.on(\"keydown\", a.proxy(C, this)), i.options.pickDate && i.options.pickTime && i.widget.on(\"click.togglePicker\", \".accordion-toggle\", function (g) {\r\n\t                if (g.stopPropagation(), b = a(this), c = b.closest(\"ul\"), d = c.find(\".in\"), e = c.find(\".collapse:not(.in)\"), d && d.length) {\r\n\t                    if (f = d.data(\"collapse\"), f && f.transitioning)return;\r\n\t                    d.collapse(\"hide\"), e.collapse(\"show\"), b.find(\"span\").toggleClass(i.options.icons.time + \" \" + i.options.icons.date), i.component && i.component.find(\"span\").toggleClass(i.options.icons.time + \" \" + i.options.icons.date)\r\n\t                }\r\n\t            }), i.isInput ? i.element.on({click: a.proxy(i.show, this), focus: a.proxy(i.show, this), change: a.proxy(D, this), blur: a.proxy(i.hide, this)}) : (i.element.on({change: a.proxy(D, this)}, \"input\"), i.component ? (i.component.on(\"click\", a.proxy(i.show, this)), i.component.on(\"mousedown\", a.proxy(B, this))) : i.element.on(\"click\", a.proxy(i.show, this)))\r\n\t        }, G = function () {\r\n\t            a(window).on(\"resize.datetimepicker\" + i.id, a.proxy(n, this)), i.isInput || a(document).on(\"mousedown.datetimepicker\" + i.id, a.proxy(i.hide, this))\r\n\t        }, H = function () {\r\n\t            i.widget.off(\"click\", \".datepicker *\", i.click), i.widget.off(\"click\", \"[data-action]\"), i.widget.off(\"mousedown\", i.stopEvent), i.options.pickDate && i.options.pickTime && i.widget.off(\"click.togglePicker\"), i.isInput ? i.element.off({focus: i.show, change: D, click: i.show, blur: i.hide}) : (i.element.off({change: D}, \"input\"), i.component ? (i.component.off(\"click\", i.show), i.component.off(\"mousedown\", i.stopEvent)) : i.element.off(\"click\", i.show))\r\n\t        }, I = function () {\r\n\t            a(window).off(\"resize.datetimepicker\" + i.id), i.isInput || a(document).off(\"mousedown.datetimepicker\" + i.id)\r\n\t        }, J = function () {\r\n\t            if (i.element) {\r\n\t                var b, c = i.element.parents(), d = !1;\r\n\t                for (b = 0; b < c.length; b++)if (\"fixed\" === a(c[b]).css(\"position\")) {\r\n\t                    d = !0;\r\n\t                    break\r\n\t                }\r\n\t                return d\r\n\t            }\r\n\t            return!1\r\n\t        }, K = function () {\r\n\t            b.locale(i.options.language);\r\n\t            var a = \"\";\r\n\t            i.unset || (a = b(i.date).format(i.format)), l().val(a), i.element.data(\"date\", a), i.options.pickTime || i.hide()\r\n\t        }, L = function (a, c, d) {\r\n\t            b.locale(i.options.language);\r\n\t            var e;\r\n\t            return\"add\" === a ? (e = b(i.date), 23 === e.hours() && e.add(d, c), e.add(d, c)) : e = b(i.date).subtract(d, c), M(b(e.subtract(d, c))) || M(e) ? void p(e.format(i.format)) : (\"add\" === a ? i.date.add(d, c) : i.date.subtract(d, c), void(i.unset = !1))\r\n\t        }, M = function (a, c) {\r\n\t            b.locale(i.options.language);\r\n\t            var d = b(i.options.maxDate, i.format, i.options.useStrict), e = b(i.options.minDate, i.format, i.options.useStrict);\r\n\t            return c && (d = d.endOf(c), e = e.startOf(c)), a.isAfter(d) || a.isBefore(e) ? !0 : i.options.disabledDates === !1 ? !1 : i.options.disabledDates[a.format(\"YYYY-MM-DD\")] === !0\r\n\t        }, N = function (a) {\r\n\t            return b.locale(i.options.language), i.options.enabledDates === !1 ? !0 : i.options.enabledDates[a.format(\"YYYY-MM-DD\")] === !0\r\n\t        }, O = function (a) {\r\n\t            var c, d = {}, e = 0;\r\n\t            for (c = 0; c < a.length; c++)f = b.isMoment(a[c]) || a[c]instanceof Date ? b(a[c]) : b(a[c], i.format, i.options.useStrict), f.isValid() && (d[f.format(\"YYYY-MM-DD\")] = !0, e++);\r\n\t            return e > 0 ? d : !1\r\n\t        }, P = function (a) {\r\n\t            return a = a.toString(), a.length >= 2 ? a : \"0\" + a\r\n\t        }, Q = function () {\r\n\t            var a = '<thead><tr><th class=\"prev\">&lsaquo;</th><th colspan=\"' + (i.options.calendarWeeks ? \"6\" : \"5\") + '\" class=\"picker-switch\"></th><th class=\"next\">&rsaquo;</th></tr></thead>', b = '<tbody><tr><td colspan=\"' + (i.options.calendarWeeks ? \"8\" : \"7\") + '\"></td></tr></tbody>', c = '<div class=\"datepicker-days\"><table class=\"table-condensed\">' + a + '<tbody></tbody></table></div><div class=\"datepicker-months\"><table class=\"table-condensed\">' + a + b + '</table></div><div class=\"datepicker-years\"><table class=\"table-condensed\">' + a + b + \"</table></div>\", d = \"\";\r\n\t            return i.options.pickDate && i.options.pickTime ? (d = '<div class=\"bootstrap-datetimepicker-widget' + (i.options.sideBySide ? \" timepicker-sbs\" : \"\") + (i.use24hours ? \" usetwentyfour\" : \"\") + ' dropdown-menu\" style=\"z-index:9999 !important;\">', d += i.options.sideBySide ? '<div class=\"row\"><div class=\"col-sm-6 datepicker\">' + c + '</div><div class=\"col-sm-6 timepicker\">' + S.getTemplate() + \"</div></div>\" : '<ul class=\"list-unstyled\"><li' + (i.options.collapse ? ' class=\"collapse in\"' : \"\") + '><div class=\"datepicker\">' + c + '</div></li><li class=\"picker-switch accordion-toggle\"><a class=\"btn\" style=\"width:100%\"><span class=\"' + i.options.icons.time + '\"></span></a></li><li' + (i.options.collapse ? ' class=\"collapse\"' : \"\") + '><div class=\"timepicker\">' + S.getTemplate() + \"</div></li></ul>\", d += \"</div>\") : i.options.pickTime ? '<div class=\"bootstrap-datetimepicker-widget dropdown-menu\"><div class=\"timepicker\">' + S.getTemplate() + \"</div></div>\" : '<div class=\"bootstrap-datetimepicker-widget dropdown-menu\"><div class=\"datepicker\">' + c + \"</div></div>\"\r\n\t        }, R = {modes: [\r\n\t            {clsName: \"days\", navFnc: \"month\", navStep: 1},\r\n\t            {clsName: \"months\", navFnc: \"year\", navStep: 1},\r\n\t            {clsName: \"years\", navFnc: \"year\", navStep: 10}\r\n\t        ]}, S = {hourTemplate: '<span data-action=\"showHours\"   data-time-component=\"hours\"   class=\"timepicker-hour\"></span>', minuteTemplate: '<span data-action=\"showMinutes\" data-time-component=\"minutes\" class=\"timepicker-minute\"></span>', secondTemplate: '<span data-action=\"showSeconds\"  data-time-component=\"seconds\" class=\"timepicker-second\"></span>'};\r\n\t        S.getTemplate = function () {\r\n\t            return'<div class=\"timepicker-picker\"><table class=\"table-condensed\"><tr><td><a href=\"#\" class=\"btn\" data-action=\"incrementHours\"><span class=\"' + i.options.icons.up + '\"></span></a></td><td class=\"separator\"></td><td>' + (i.options.useMinutes ? '<a href=\"#\" class=\"btn\" data-action=\"incrementMinutes\"><span class=\"' + i.options.icons.up + '\"></span></a>' : \"\") + \"</td>\" + (i.options.useSeconds ? '<td class=\"separator\"></td><td><a href=\"#\" class=\"btn\" data-action=\"incrementSeconds\"><span class=\"' + i.options.icons.up + '\"></span></a></td>' : \"\") + (i.use24hours ? \"\" : '<td class=\"separator\"></td>') + \"</tr><tr><td>\" + S.hourTemplate + '</td> <td class=\"separator\">:</td><td>' + (i.options.useMinutes ? S.minuteTemplate : '<span class=\"timepicker-minute\">00</span>') + \"</td> \" + (i.options.useSeconds ? '<td class=\"separator\">:</td><td>' + S.secondTemplate + \"</td>\" : \"\") + (i.use24hours ? \"\" : '<td class=\"separator\"></td><td><button type=\"button\" class=\"btn btn-primary\" data-action=\"togglePeriod\"></button></td>') + '</tr><tr><td><a href=\"#\" class=\"btn\" data-action=\"decrementHours\"><span class=\"' + i.options.icons.down + '\"></span></a></td><td class=\"separator\"></td><td>' + (i.options.useMinutes ? '<a href=\"#\" class=\"btn\" data-action=\"decrementMinutes\"><span class=\"' + i.options.icons.down + '\"></span></a>' : \"\") + \"</td>\" + (i.options.useSeconds ? '<td class=\"separator\"></td><td><a href=\"#\" class=\"btn\" data-action=\"decrementSeconds\"><span class=\"' + i.options.icons.down + '\"></span></a></td>' : \"\") + (i.use24hours ? \"\" : '<td class=\"separator\"></td>') + '</tr></table></div><div class=\"timepicker-hours\" data-action=\"selectHour\"><table class=\"table-condensed\"></table></div><div class=\"timepicker-minutes\" data-action=\"selectMinute\"><table class=\"table-condensed\"></table></div>' + (i.options.useSeconds ? '<div class=\"timepicker-seconds\" data-action=\"selectSecond\"><table class=\"table-condensed\"></table></div>' : \"\")\r\n\t        }, i.destroy = function () {\r\n\t            H(), I(), i.widget.remove(), i.element.removeData(\"DateTimePicker\"), i.component && i.component.removeData(\"DateTimePicker\")\r\n\t        }, i.show = function (a) {\r\n\t            if (!l().prop(\"disabled\")) {\r\n\t                if (i.options.useCurrent && \"\" === l().val()) {\r\n\t                    if (1 !== i.options.minuteStepping) {\r\n\t                        var c = b(), d = i.options.minuteStepping;\r\n\t                        c.minutes(Math.round(c.minutes() / d) * d % 60).seconds(0), i.setValue(c.format(i.format))\r\n\t                    } else i.setValue(b().format(i.format));\r\n\t                    o(\"\", a.type)\r\n\t                }\r\n\t                a && \"click\" === a.type && i.isInput && i.widget.hasClass(\"picker-open\") || (i.widget.hasClass(\"picker-open\") ? (i.widget.hide(), i.widget.removeClass(\"picker-open\")) : (i.widget.show(), i.widget.addClass(\"picker-open\")), i.height = i.component ? i.component.outerHeight() : i.element.outerHeight(), n(), i.element.trigger({type: \"dp.show\", date: b(i.date)}), G(), a && B(a))\r\n\t            }\r\n\t        }, i.disable = function () {\r\n\t            var a = l();\r\n\t            a.prop(\"disabled\") || (a.prop(\"disabled\", !0), H())\r\n\t        }, i.enable = function () {\r\n\t            var a = l();\r\n\t            a.prop(\"disabled\") && (a.prop(\"disabled\", !1), F())\r\n\t        }, i.hide = function () {\r\n\t            var a, c, d = i.widget.find(\".collapse\");\r\n\t            for (a = 0; a < d.length; a++)if (c = d.eq(a).data(\"collapse\"), c && c.transitioning)return;\r\n\t            i.widget.hide(), i.widget.removeClass(\"picker-open\"), i.viewMode = i.startViewMode, E(), i.element.trigger({type: \"dp.hide\", date: b(i.date)}), I()\r\n\t        }, i.setValue = function (a) {\r\n\t            b.locale(i.options.language), a ? i.unset = !1 : (i.unset = !0, K()), a = b.isMoment(a) ? a.locale(i.options.language) : a instanceof Date ? b(a) : b(a, i.format, i.options.useStrict), a.isValid() ? (i.date = a, K(), i.viewDate = b({y: i.date.year(), M: i.date.month()}), t(), x()) : p(a)\r\n\t        }, i.getDate = function () {\r\n\t            return i.unset ? null : b(i.date)\r\n\t        }, i.setDate = function (a) {\r\n\t            var c = b(i.date);\r\n\t            i.setValue(a ? a : null), o(c, \"function\")\r\n\t        }, i.setDisabledDates = function (a) {\r\n\t            i.options.disabledDates = O(a), i.viewDate && q()\r\n\t        }, i.setEnabledDates = function (a) {\r\n\t            i.options.enabledDates = O(a), i.viewDate && q()\r\n\t        }, i.setMaxDate = function (a) {\r\n\t            void 0 !== a && (i.options.maxDate = b.isMoment(a) || a instanceof Date ? b(a) : b(a, i.format, i.options.useStrict), i.viewDate && q())\r\n\t        }, i.setMinDate = function (a) {\r\n\t            void 0 !== a && (i.options.minDate = b.isMoment(a) || a instanceof Date ? b(a) : b(a, i.format, i.options.useStrict), i.viewDate && q())\r\n\t        }, k()\r\n\t    };\r\n\t    a.fn.datetimepicker = function (b) {\r\n\t        return this.each(function () {\r\n\t            var c = a(this), e = c.data(\"DateTimePicker\");\r\n\t            e || c.data(\"DateTimePicker\", new d(this, b))\r\n\t        })\r\n\t    }, a.fn.datetimepicker.defaults = {format: !1, pickDate: !0, pickTime: !0, useMinutes: !0, useSeconds: !1, useCurrent: !0, calendarWeeks: !1, minuteStepping: 1, minDate: b({y: 1900}), maxDate: b().add(100, \"y\"), showToday: !0, collapse: !0, language: b.locale(), defaultDate: \"\", disabledDates: !1, enabledDates: !1, icons: {}, useStrict: !1, direction: \"auto\", sideBySide: !1, daysOfWeekDisabled: [], widgetParent: !1}\r\n\t});\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//     Underscore.js 1.5.2\n\t//     http://underscorejs.org\n\t//     (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t//     Underscore may be freely distributed under the MIT license.\n\n\t(function() {\n\n\t  // Baseline setup\n\t  // --------------\n\n\t  // Establish the root object, `window` in the browser, or `exports` on the server.\n\t  var root = this;\n\n\t  // Save the previous value of the `_` variable.\n\t  var previousUnderscore = root._;\n\n\t  // Establish the object that gets returned to break out of a loop iteration.\n\t  var breaker = {};\n\n\t  // Save bytes in the minified (but not gzipped) version:\n\t  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n\t  // Create quick reference variables for speed access to core prototypes.\n\t  var\n\t    push             = ArrayProto.push,\n\t    slice            = ArrayProto.slice,\n\t    concat           = ArrayProto.concat,\n\t    toString         = ObjProto.toString,\n\t    hasOwnProperty   = ObjProto.hasOwnProperty;\n\n\t  // All **ECMAScript 5** native function implementations that we hope to use\n\t  // are declared here.\n\t  var\n\t    nativeForEach      = ArrayProto.forEach,\n\t    nativeMap          = ArrayProto.map,\n\t    nativeReduce       = ArrayProto.reduce,\n\t    nativeReduceRight  = ArrayProto.reduceRight,\n\t    nativeFilter       = ArrayProto.filter,\n\t    nativeEvery        = ArrayProto.every,\n\t    nativeSome         = ArrayProto.some,\n\t    nativeIndexOf      = ArrayProto.indexOf,\n\t    nativeLastIndexOf  = ArrayProto.lastIndexOf,\n\t    nativeIsArray      = Array.isArray,\n\t    nativeKeys         = Object.keys,\n\t    nativeBind         = FuncProto.bind;\n\n\t  // Create a safe reference to the Underscore object for use below.\n\t  var _ = function(obj) {\n\t    if (obj instanceof _) return obj;\n\t    if (!(this instanceof _)) return new _(obj);\n\t    this._wrapped = obj;\n\t  };\n\n\t  // Export the Underscore object for **Node.js**, with\n\t  // backwards-compatibility for the old `require()` API. If we're in\n\t  // the browser, add `_` as a global object via a string identifier,\n\t  // for Closure Compiler \"advanced\" mode.\n\t  if (true) {\n\t    if (typeof module !== 'undefined' && module.exports) {\n\t      exports = module.exports = _;\n\t    }\n\t    exports._ = _;\n\t  } else {\n\t    root._ = _;\n\t  }\n\n\t  // Current version.\n\t  _.VERSION = '1.5.2';\n\n\t  // Collection Functions\n\t  // --------------------\n\n\t  // The cornerstone, an `each` implementation, aka `forEach`.\n\t  // Handles objects with the built-in `forEach`, arrays, and raw objects.\n\t  // Delegates to **ECMAScript 5**'s native `forEach` if available.\n\t  var each = _.each = _.forEach = function(obj, iterator, context) {\n\t    if (obj == null) return;\n\t    if (nativeForEach && obj.forEach === nativeForEach) {\n\t      obj.forEach(iterator, context);\n\t    } else if (obj.length === +obj.length) {\n\t      for (var i = 0, length = obj.length; i < length; i++) {\n\t        if (iterator.call(context, obj[i], i, obj) === breaker) return;\n\t      }\n\t    } else {\n\t      var keys = _.keys(obj);\n\t      for (var i = 0, length = keys.length; i < length; i++) {\n\t        if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;\n\t      }\n\t    }\n\t  };\n\n\t  // Return the results of applying the iterator to each element.\n\t  // Delegates to **ECMAScript 5**'s native `map` if available.\n\t  _.map = _.collect = function(obj, iterator, context) {\n\t    var results = [];\n\t    if (obj == null) return results;\n\t    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n\t    each(obj, function(value, index, list) {\n\t      results.push(iterator.call(context, value, index, list));\n\t    });\n\t    return results;\n\t  };\n\n\t  var reduceError = 'Reduce of empty array with no initial value';\n\n\t  // **Reduce** builds up a single result from a list of values, aka `inject`,\n\t  // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\n\t  _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n\t    var initial = arguments.length > 2;\n\t    if (obj == null) obj = [];\n\t    if (nativeReduce && obj.reduce === nativeReduce) {\n\t      if (context) iterator = _.bind(iterator, context);\n\t      return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n\t    }\n\t    each(obj, function(value, index, list) {\n\t      if (!initial) {\n\t        memo = value;\n\t        initial = true;\n\t      } else {\n\t        memo = iterator.call(context, memo, value, index, list);\n\t      }\n\t    });\n\t    if (!initial) throw new TypeError(reduceError);\n\t    return memo;\n\t  };\n\n\t  // The right-associative version of reduce, also known as `foldr`.\n\t  // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n\t  _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n\t    var initial = arguments.length > 2;\n\t    if (obj == null) obj = [];\n\t    if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n\t      if (context) iterator = _.bind(iterator, context);\n\t      return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n\t    }\n\t    var length = obj.length;\n\t    if (length !== +length) {\n\t      var keys = _.keys(obj);\n\t      length = keys.length;\n\t    }\n\t    each(obj, function(value, index, list) {\n\t      index = keys ? keys[--length] : --length;\n\t      if (!initial) {\n\t        memo = obj[index];\n\t        initial = true;\n\t      } else {\n\t        memo = iterator.call(context, memo, obj[index], index, list);\n\t      }\n\t    });\n\t    if (!initial) throw new TypeError(reduceError);\n\t    return memo;\n\t  };\n\n\t  // Return the first value which passes a truth test. Aliased as `detect`.\n\t  _.find = _.detect = function(obj, iterator, context) {\n\t    var result;\n\t    any(obj, function(value, index, list) {\n\t      if (iterator.call(context, value, index, list)) {\n\t        result = value;\n\t        return true;\n\t      }\n\t    });\n\t    return result;\n\t  };\n\n\t  // Return all the elements that pass a truth test.\n\t  // Delegates to **ECMAScript 5**'s native `filter` if available.\n\t  // Aliased as `select`.\n\t  _.filter = _.select = function(obj, iterator, context) {\n\t    var results = [];\n\t    if (obj == null) return results;\n\t    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n\t    each(obj, function(value, index, list) {\n\t      if (iterator.call(context, value, index, list)) results.push(value);\n\t    });\n\t    return results;\n\t  };\n\n\t  // Return all the elements for which a truth test fails.\n\t  _.reject = function(obj, iterator, context) {\n\t    return _.filter(obj, function(value, index, list) {\n\t      return !iterator.call(context, value, index, list);\n\t    }, context);\n\t  };\n\n\t  // Determine whether all of the elements match a truth test.\n\t  // Delegates to **ECMAScript 5**'s native `every` if available.\n\t  // Aliased as `all`.\n\t  _.every = _.all = function(obj, iterator, context) {\n\t    iterator || (iterator = _.identity);\n\t    var result = true;\n\t    if (obj == null) return result;\n\t    if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n\t    each(obj, function(value, index, list) {\n\t      if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n\t    });\n\t    return !!result;\n\t  };\n\n\t  // Determine if at least one element in the object matches a truth test.\n\t  // Delegates to **ECMAScript 5**'s native `some` if available.\n\t  // Aliased as `any`.\n\t  var any = _.some = _.any = function(obj, iterator, context) {\n\t    iterator || (iterator = _.identity);\n\t    var result = false;\n\t    if (obj == null) return result;\n\t    if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n\t    each(obj, function(value, index, list) {\n\t      if (result || (result = iterator.call(context, value, index, list))) return breaker;\n\t    });\n\t    return !!result;\n\t  };\n\n\t  // Determine if the array or object contains a given value (using `===`).\n\t  // Aliased as `include`.\n\t  _.contains = _.include = function(obj, target) {\n\t    if (obj == null) return false;\n\t    if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n\t    return any(obj, function(value) {\n\t      return value === target;\n\t    });\n\t  };\n\n\t  // Invoke a method (with arguments) on every item in a collection.\n\t  _.invoke = function(obj, method) {\n\t    var args = slice.call(arguments, 2);\n\t    var isFunc = _.isFunction(method);\n\t    return _.map(obj, function(value) {\n\t      return (isFunc ? method : value[method]).apply(value, args);\n\t    });\n\t  };\n\n\t  // Convenience version of a common use case of `map`: fetching a property.\n\t  _.pluck = function(obj, key) {\n\t    return _.map(obj, function(value){ return value[key]; });\n\t  };\n\n\t  // Convenience version of a common use case of `filter`: selecting only objects\n\t  // containing specific `key:value` pairs.\n\t  _.where = function(obj, attrs, first) {\n\t    if (_.isEmpty(attrs)) return first ? void 0 : [];\n\t    return _[first ? 'find' : 'filter'](obj, function(value) {\n\t      for (var key in attrs) {\n\t        if (attrs[key] !== value[key]) return false;\n\t      }\n\t      return true;\n\t    });\n\t  };\n\n\t  // Convenience version of a common use case of `find`: getting the first object\n\t  // containing specific `key:value` pairs.\n\t  _.findWhere = function(obj, attrs) {\n\t    return _.where(obj, attrs, true);\n\t  };\n\n\t  // Return the maximum element or (element-based computation).\n\t  // Can't optimize arrays of integers longer than 65,535 elements.\n\t  // See [WebKit Bug 80797](https://bugs.webkit.org/show_bug.cgi?id=80797)\n\t  _.max = function(obj, iterator, context) {\n\t    if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n\t      return Math.max.apply(Math, obj);\n\t    }\n\t    if (!iterator && _.isEmpty(obj)) return -Infinity;\n\t    var result = {computed : -Infinity, value: -Infinity};\n\t    each(obj, function(value, index, list) {\n\t      var computed = iterator ? iterator.call(context, value, index, list) : value;\n\t      computed > result.computed && (result = {value : value, computed : computed});\n\t    });\n\t    return result.value;\n\t  };\n\n\t  // Return the minimum element (or element-based computation).\n\t  _.min = function(obj, iterator, context) {\n\t    if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n\t      return Math.min.apply(Math, obj);\n\t    }\n\t    if (!iterator && _.isEmpty(obj)) return Infinity;\n\t    var result = {computed : Infinity, value: Infinity};\n\t    each(obj, function(value, index, list) {\n\t      var computed = iterator ? iterator.call(context, value, index, list) : value;\n\t      computed < result.computed && (result = {value : value, computed : computed});\n\t    });\n\t    return result.value;\n\t  };\n\n\t  // Shuffle an array, using the modern version of the \n\t  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n\t  _.shuffle = function(obj) {\n\t    var rand;\n\t    var index = 0;\n\t    var shuffled = [];\n\t    each(obj, function(value) {\n\t      rand = _.random(index++);\n\t      shuffled[index - 1] = shuffled[rand];\n\t      shuffled[rand] = value;\n\t    });\n\t    return shuffled;\n\t  };\n\n\t  // Sample **n** random values from an array.\n\t  // If **n** is not specified, returns a single random element from the array.\n\t  // The internal `guard` argument allows it to work with `map`.\n\t  _.sample = function(obj, n, guard) {\n\t    if (arguments.length < 2 || guard) {\n\t      return obj[_.random(obj.length - 1)];\n\t    }\n\t    return _.shuffle(obj).slice(0, Math.max(0, n));\n\t  };\n\n\t  // An internal function to generate lookup iterators.\n\t  var lookupIterator = function(value) {\n\t    return _.isFunction(value) ? value : function(obj){ return obj[value]; };\n\t  };\n\n\t  // Sort the object's values by a criterion produced by an iterator.\n\t  _.sortBy = function(obj, value, context) {\n\t    var iterator = lookupIterator(value);\n\t    return _.pluck(_.map(obj, function(value, index, list) {\n\t      return {\n\t        value: value,\n\t        index: index,\n\t        criteria: iterator.call(context, value, index, list)\n\t      };\n\t    }).sort(function(left, right) {\n\t      var a = left.criteria;\n\t      var b = right.criteria;\n\t      if (a !== b) {\n\t        if (a > b || a === void 0) return 1;\n\t        if (a < b || b === void 0) return -1;\n\t      }\n\t      return left.index - right.index;\n\t    }), 'value');\n\t  };\n\n\t  // An internal function used for aggregate \"group by\" operations.\n\t  var group = function(behavior) {\n\t    return function(obj, value, context) {\n\t      var result = {};\n\t      var iterator = value == null ? _.identity : lookupIterator(value);\n\t      each(obj, function(value, index) {\n\t        var key = iterator.call(context, value, index, obj);\n\t        behavior(result, key, value);\n\t      });\n\t      return result;\n\t    };\n\t  };\n\n\t  // Groups the object's values by a criterion. Pass either a string attribute\n\t  // to group by, or a function that returns the criterion.\n\t  _.groupBy = group(function(result, key, value) {\n\t    (_.has(result, key) ? result[key] : (result[key] = [])).push(value);\n\t  });\n\n\t  // Indexes the object's values by a criterion, similar to `groupBy`, but for\n\t  // when you know that your index values will be unique.\n\t  _.indexBy = group(function(result, key, value) {\n\t    result[key] = value;\n\t  });\n\n\t  // Counts instances of an object that group by a certain criterion. Pass\n\t  // either a string attribute to count by, or a function that returns the\n\t  // criterion.\n\t  _.countBy = group(function(result, key) {\n\t    _.has(result, key) ? result[key]++ : result[key] = 1;\n\t  });\n\n\t  // Use a comparator function to figure out the smallest index at which\n\t  // an object should be inserted so as to maintain order. Uses binary search.\n\t  _.sortedIndex = function(array, obj, iterator, context) {\n\t    iterator = iterator == null ? _.identity : lookupIterator(iterator);\n\t    var value = iterator.call(context, obj);\n\t    var low = 0, high = array.length;\n\t    while (low < high) {\n\t      var mid = (low + high) >>> 1;\n\t      iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;\n\t    }\n\t    return low;\n\t  };\n\n\t  // Safely create a real, live array from anything iterable.\n\t  _.toArray = function(obj) {\n\t    if (!obj) return [];\n\t    if (_.isArray(obj)) return slice.call(obj);\n\t    if (obj.length === +obj.length) return _.map(obj, _.identity);\n\t    return _.values(obj);\n\t  };\n\n\t  // Return the number of elements in an object.\n\t  _.size = function(obj) {\n\t    if (obj == null) return 0;\n\t    return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;\n\t  };\n\n\t  // Array Functions\n\t  // ---------------\n\n\t  // Get the first element of an array. Passing **n** will return the first N\n\t  // values in the array. Aliased as `head` and `take`. The **guard** check\n\t  // allows it to work with `_.map`.\n\t  _.first = _.head = _.take = function(array, n, guard) {\n\t    if (array == null) return void 0;\n\t    return (n == null) || guard ? array[0] : slice.call(array, 0, n);\n\t  };\n\n\t  // Returns everything but the last entry of the array. Especially useful on\n\t  // the arguments object. Passing **n** will return all the values in\n\t  // the array, excluding the last N. The **guard** check allows it to work with\n\t  // `_.map`.\n\t  _.initial = function(array, n, guard) {\n\t    return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n\t  };\n\n\t  // Get the last element of an array. Passing **n** will return the last N\n\t  // values in the array. The **guard** check allows it to work with `_.map`.\n\t  _.last = function(array, n, guard) {\n\t    if (array == null) return void 0;\n\t    if ((n == null) || guard) {\n\t      return array[array.length - 1];\n\t    } else {\n\t      return slice.call(array, Math.max(array.length - n, 0));\n\t    }\n\t  };\n\n\t  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n\t  // Especially useful on the arguments object. Passing an **n** will return\n\t  // the rest N values in the array. The **guard**\n\t  // check allows it to work with `_.map`.\n\t  _.rest = _.tail = _.drop = function(array, n, guard) {\n\t    return slice.call(array, (n == null) || guard ? 1 : n);\n\t  };\n\n\t  // Trim out all falsy values from an array.\n\t  _.compact = function(array) {\n\t    return _.filter(array, _.identity);\n\t  };\n\n\t  // Internal implementation of a recursive `flatten` function.\n\t  var flatten = function(input, shallow, output) {\n\t    if (shallow && _.every(input, _.isArray)) {\n\t      return concat.apply(output, input);\n\t    }\n\t    each(input, function(value) {\n\t      if (_.isArray(value) || _.isArguments(value)) {\n\t        shallow ? push.apply(output, value) : flatten(value, shallow, output);\n\t      } else {\n\t        output.push(value);\n\t      }\n\t    });\n\t    return output;\n\t  };\n\n\t  // Flatten out an array, either recursively (by default), or just one level.\n\t  _.flatten = function(array, shallow) {\n\t    return flatten(array, shallow, []);\n\t  };\n\n\t  // Return a version of the array that does not contain the specified value(s).\n\t  _.without = function(array) {\n\t    return _.difference(array, slice.call(arguments, 1));\n\t  };\n\n\t  // Produce a duplicate-free version of the array. If the array has already\n\t  // been sorted, you have the option of using a faster algorithm.\n\t  // Aliased as `unique`.\n\t  _.uniq = _.unique = function(array, isSorted, iterator, context) {\n\t    if (_.isFunction(isSorted)) {\n\t      context = iterator;\n\t      iterator = isSorted;\n\t      isSorted = false;\n\t    }\n\t    var initial = iterator ? _.map(array, iterator, context) : array;\n\t    var results = [];\n\t    var seen = [];\n\t    each(initial, function(value, index) {\n\t      if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {\n\t        seen.push(value);\n\t        results.push(array[index]);\n\t      }\n\t    });\n\t    return results;\n\t  };\n\n\t  // Produce an array that contains the union: each distinct element from all of\n\t  // the passed-in arrays.\n\t  _.union = function() {\n\t    return _.uniq(_.flatten(arguments, true));\n\t  };\n\n\t  // Produce an array that contains every item shared between all the\n\t  // passed-in arrays.\n\t  _.intersection = function(array) {\n\t    var rest = slice.call(arguments, 1);\n\t    return _.filter(_.uniq(array), function(item) {\n\t      return _.every(rest, function(other) {\n\t        return _.indexOf(other, item) >= 0;\n\t      });\n\t    });\n\t  };\n\n\t  // Take the difference between one array and a number of other arrays.\n\t  // Only the elements present in just the first array will remain.\n\t  _.difference = function(array) {\n\t    var rest = concat.apply(ArrayProto, slice.call(arguments, 1));\n\t    return _.filter(array, function(value){ return !_.contains(rest, value); });\n\t  };\n\n\t  // Zip together multiple lists into a single array -- elements that share\n\t  // an index go together.\n\t  _.zip = function() {\n\t    var length = _.max(_.pluck(arguments, \"length\").concat(0));\n\t    var results = new Array(length);\n\t    for (var i = 0; i < length; i++) {\n\t      results[i] = _.pluck(arguments, '' + i);\n\t    }\n\t    return results;\n\t  };\n\n\t  // Converts lists into objects. Pass either a single array of `[key, value]`\n\t  // pairs, or two parallel arrays of the same length -- one of keys, and one of\n\t  // the corresponding values.\n\t  _.object = function(list, values) {\n\t    if (list == null) return {};\n\t    var result = {};\n\t    for (var i = 0, length = list.length; i < length; i++) {\n\t      if (values) {\n\t        result[list[i]] = values[i];\n\t      } else {\n\t        result[list[i][0]] = list[i][1];\n\t      }\n\t    }\n\t    return result;\n\t  };\n\n\t  // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n\t  // we need this function. Return the position of the first occurrence of an\n\t  // item in an array, or -1 if the item is not included in the array.\n\t  // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n\t  // If the array is large and already in sort order, pass `true`\n\t  // for **isSorted** to use binary search.\n\t  _.indexOf = function(array, item, isSorted) {\n\t    if (array == null) return -1;\n\t    var i = 0, length = array.length;\n\t    if (isSorted) {\n\t      if (typeof isSorted == 'number') {\n\t        i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted);\n\t      } else {\n\t        i = _.sortedIndex(array, item);\n\t        return array[i] === item ? i : -1;\n\t      }\n\t    }\n\t    if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);\n\t    for (; i < length; i++) if (array[i] === item) return i;\n\t    return -1;\n\t  };\n\n\t  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n\t  _.lastIndexOf = function(array, item, from) {\n\t    if (array == null) return -1;\n\t    var hasIndex = from != null;\n\t    if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {\n\t      return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);\n\t    }\n\t    var i = (hasIndex ? from : array.length);\n\t    while (i--) if (array[i] === item) return i;\n\t    return -1;\n\t  };\n\n\t  // Generate an integer Array containing an arithmetic progression. A port of\n\t  // the native Python `range()` function. See\n\t  // [the Python documentation](http://docs.python.org/library/functions.html#range).\n\t  _.range = function(start, stop, step) {\n\t    if (arguments.length <= 1) {\n\t      stop = start || 0;\n\t      start = 0;\n\t    }\n\t    step = arguments[2] || 1;\n\n\t    var length = Math.max(Math.ceil((stop - start) / step), 0);\n\t    var idx = 0;\n\t    var range = new Array(length);\n\n\t    while(idx < length) {\n\t      range[idx++] = start;\n\t      start += step;\n\t    }\n\n\t    return range;\n\t  };\n\n\t  // Function (ahem) Functions\n\t  // ------------------\n\n\t  // Reusable constructor function for prototype setting.\n\t  var ctor = function(){};\n\n\t  // Create a function bound to a given object (assigning `this`, and arguments,\n\t  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n\t  // available.\n\t  _.bind = function(func, context) {\n\t    var args, bound;\n\t    if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n\t    if (!_.isFunction(func)) throw new TypeError;\n\t    args = slice.call(arguments, 2);\n\t    return bound = function() {\n\t      if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));\n\t      ctor.prototype = func.prototype;\n\t      var self = new ctor;\n\t      ctor.prototype = null;\n\t      var result = func.apply(self, args.concat(slice.call(arguments)));\n\t      if (Object(result) === result) return result;\n\t      return self;\n\t    };\n\t  };\n\n\t  // Partially apply a function by creating a version that has had some of its\n\t  // arguments pre-filled, without changing its dynamic `this` context.\n\t  _.partial = function(func) {\n\t    var args = slice.call(arguments, 1);\n\t    return function() {\n\t      return func.apply(this, args.concat(slice.call(arguments)));\n\t    };\n\t  };\n\n\t  // Bind all of an object's methods to that object. Useful for ensuring that\n\t  // all callbacks defined on an object belong to it.\n\t  _.bindAll = function(obj) {\n\t    var funcs = slice.call(arguments, 1);\n\t    if (funcs.length === 0) throw new Error(\"bindAll must be passed function names\");\n\t    each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n\t    return obj;\n\t  };\n\n\t  // Memoize an expensive function by storing its results.\n\t  _.memoize = function(func, hasher) {\n\t    var memo = {};\n\t    hasher || (hasher = _.identity);\n\t    return function() {\n\t      var key = hasher.apply(this, arguments);\n\t      return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n\t    };\n\t  };\n\n\t  // Delays a function for the given number of milliseconds, and then calls\n\t  // it with the arguments supplied.\n\t  _.delay = function(func, wait) {\n\t    var args = slice.call(arguments, 2);\n\t    return setTimeout(function(){ return func.apply(null, args); }, wait);\n\t  };\n\n\t  // Defers a function, scheduling it to run after the current call stack has\n\t  // cleared.\n\t  _.defer = function(func) {\n\t    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n\t  };\n\n\t  // Returns a function, that, when invoked, will only be triggered at most once\n\t  // during a given window of time. Normally, the throttled function will run\n\t  // as much as it can, without ever going more than once per `wait` duration;\n\t  // but if you'd like to disable the execution on the leading edge, pass\n\t  // `{leading: false}`. To disable execution on the trailing edge, ditto.\n\t  _.throttle = function(func, wait, options) {\n\t    var context, args, result;\n\t    var timeout = null;\n\t    var previous = 0;\n\t    options || (options = {});\n\t    var later = function() {\n\t      previous = options.leading === false ? 0 : new Date;\n\t      timeout = null;\n\t      result = func.apply(context, args);\n\t    };\n\t    return function() {\n\t      var now = new Date;\n\t      if (!previous && options.leading === false) previous = now;\n\t      var remaining = wait - (now - previous);\n\t      context = this;\n\t      args = arguments;\n\t      if (remaining <= 0) {\n\t        clearTimeout(timeout);\n\t        timeout = null;\n\t        previous = now;\n\t        result = func.apply(context, args);\n\t      } else if (!timeout && options.trailing !== false) {\n\t        timeout = setTimeout(later, remaining);\n\t      }\n\t      return result;\n\t    };\n\t  };\n\n\t  // Returns a function, that, as long as it continues to be invoked, will not\n\t  // be triggered. The function will be called after it stops being called for\n\t  // N milliseconds. If `immediate` is passed, trigger the function on the\n\t  // leading edge, instead of the trailing.\n\t  _.debounce = function(func, wait, immediate) {\n\t    var timeout, args, context, timestamp, result;\n\t    return function() {\n\t      context = this;\n\t      args = arguments;\n\t      timestamp = new Date();\n\t      var later = function() {\n\t        var last = (new Date()) - timestamp;\n\t        if (last < wait) {\n\t          timeout = setTimeout(later, wait - last);\n\t        } else {\n\t          timeout = null;\n\t          if (!immediate) result = func.apply(context, args);\n\t        }\n\t      };\n\t      var callNow = immediate && !timeout;\n\t      if (!timeout) {\n\t        timeout = setTimeout(later, wait);\n\t      }\n\t      if (callNow) result = func.apply(context, args);\n\t      return result;\n\t    };\n\t  };\n\n\t  // Returns a function that will be executed at most one time, no matter how\n\t  // often you call it. Useful for lazy initialization.\n\t  _.once = function(func) {\n\t    var ran = false, memo;\n\t    return function() {\n\t      if (ran) return memo;\n\t      ran = true;\n\t      memo = func.apply(this, arguments);\n\t      func = null;\n\t      return memo;\n\t    };\n\t  };\n\n\t  // Returns the first function passed as an argument to the second,\n\t  // allowing you to adjust arguments, run code before and after, and\n\t  // conditionally execute the original function.\n\t  _.wrap = function(func, wrapper) {\n\t    return function() {\n\t      var args = [func];\n\t      push.apply(args, arguments);\n\t      return wrapper.apply(this, args);\n\t    };\n\t  };\n\n\t  // Returns a function that is the composition of a list of functions, each\n\t  // consuming the return value of the function that follows.\n\t  _.compose = function() {\n\t    var funcs = arguments;\n\t    return function() {\n\t      var args = arguments;\n\t      for (var i = funcs.length - 1; i >= 0; i--) {\n\t        args = [funcs[i].apply(this, args)];\n\t      }\n\t      return args[0];\n\t    };\n\t  };\n\n\t  // Returns a function that will only be executed after being called N times.\n\t  _.after = function(times, func) {\n\t    return function() {\n\t      if (--times < 1) {\n\t        return func.apply(this, arguments);\n\t      }\n\t    };\n\t  };\n\n\t  // Object Functions\n\t  // ----------------\n\n\t  // Retrieve the names of an object's properties.\n\t  // Delegates to **ECMAScript 5**'s native `Object.keys`\n\t  _.keys = nativeKeys || function(obj) {\n\t    if (obj !== Object(obj)) throw new TypeError('Invalid object');\n\t    var keys = [];\n\t    for (var key in obj) if (_.has(obj, key)) keys.push(key);\n\t    return keys;\n\t  };\n\n\t  // Retrieve the values of an object's properties.\n\t  _.values = function(obj) {\n\t    var keys = _.keys(obj);\n\t    var length = keys.length;\n\t    var values = new Array(length);\n\t    for (var i = 0; i < length; i++) {\n\t      values[i] = obj[keys[i]];\n\t    }\n\t    return values;\n\t  };\n\n\t  // Convert an object into a list of `[key, value]` pairs.\n\t  _.pairs = function(obj) {\n\t    var keys = _.keys(obj);\n\t    var length = keys.length;\n\t    var pairs = new Array(length);\n\t    for (var i = 0; i < length; i++) {\n\t      pairs[i] = [keys[i], obj[keys[i]]];\n\t    }\n\t    return pairs;\n\t  };\n\n\t  // Invert the keys and values of an object. The values must be serializable.\n\t  _.invert = function(obj) {\n\t    var result = {};\n\t    var keys = _.keys(obj);\n\t    for (var i = 0, length = keys.length; i < length; i++) {\n\t      result[obj[keys[i]]] = keys[i];\n\t    }\n\t    return result;\n\t  };\n\n\t  // Return a sorted list of the function names available on the object.\n\t  // Aliased as `methods`\n\t  _.functions = _.methods = function(obj) {\n\t    var names = [];\n\t    for (var key in obj) {\n\t      if (_.isFunction(obj[key])) names.push(key);\n\t    }\n\t    return names.sort();\n\t  };\n\n\t  // Extend a given object with all the properties in passed-in object(s).\n\t  _.extend = function(obj) {\n\t    each(slice.call(arguments, 1), function(source) {\n\t      if (source) {\n\t        for (var prop in source) {\n\t          obj[prop] = source[prop];\n\t        }\n\t      }\n\t    });\n\t    return obj;\n\t  };\n\n\t  // Return a copy of the object only containing the whitelisted properties.\n\t  _.pick = function(obj) {\n\t    var copy = {};\n\t    var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n\t    each(keys, function(key) {\n\t      if (key in obj) copy[key] = obj[key];\n\t    });\n\t    return copy;\n\t  };\n\n\t   // Return a copy of the object without the blacklisted properties.\n\t  _.omit = function(obj) {\n\t    var copy = {};\n\t    var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n\t    for (var key in obj) {\n\t      if (!_.contains(keys, key)) copy[key] = obj[key];\n\t    }\n\t    return copy;\n\t  };\n\n\t  // Fill in a given object with default properties.\n\t  _.defaults = function(obj) {\n\t    each(slice.call(arguments, 1), function(source) {\n\t      if (source) {\n\t        for (var prop in source) {\n\t          if (obj[prop] === void 0) obj[prop] = source[prop];\n\t        }\n\t      }\n\t    });\n\t    return obj;\n\t  };\n\n\t  // Create a (shallow-cloned) duplicate of an object.\n\t  _.clone = function(obj) {\n\t    if (!_.isObject(obj)) return obj;\n\t    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n\t  };\n\n\t  // Invokes interceptor with the obj, and then returns obj.\n\t  // The primary purpose of this method is to \"tap into\" a method chain, in\n\t  // order to perform operations on intermediate results within the chain.\n\t  _.tap = function(obj, interceptor) {\n\t    interceptor(obj);\n\t    return obj;\n\t  };\n\n\t  // Internal recursive comparison function for `isEqual`.\n\t  var eq = function(a, b, aStack, bStack) {\n\t    // Identical objects are equal. `0 === -0`, but they aren't identical.\n\t    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n\t    if (a === b) return a !== 0 || 1 / a == 1 / b;\n\t    // A strict comparison is necessary because `null == undefined`.\n\t    if (a == null || b == null) return a === b;\n\t    // Unwrap any wrapped objects.\n\t    if (a instanceof _) a = a._wrapped;\n\t    if (b instanceof _) b = b._wrapped;\n\t    // Compare `[[Class]]` names.\n\t    var className = toString.call(a);\n\t    if (className != toString.call(b)) return false;\n\t    switch (className) {\n\t      // Strings, numbers, dates, and booleans are compared by value.\n\t      case '[object String]':\n\t        // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n\t        // equivalent to `new String(\"5\")`.\n\t        return a == String(b);\n\t      case '[object Number]':\n\t        // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n\t        // other numeric values.\n\t        return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n\t      case '[object Date]':\n\t      case '[object Boolean]':\n\t        // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n\t        // millisecond representations. Note that invalid dates with millisecond representations\n\t        // of `NaN` are not equivalent.\n\t        return +a == +b;\n\t      // RegExps are compared by their source patterns and flags.\n\t      case '[object RegExp]':\n\t        return a.source == b.source &&\n\t               a.global == b.global &&\n\t               a.multiline == b.multiline &&\n\t               a.ignoreCase == b.ignoreCase;\n\t    }\n\t    if (typeof a != 'object' || typeof b != 'object') return false;\n\t    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n\t    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\t    var length = aStack.length;\n\t    while (length--) {\n\t      // Linear search. Performance is inversely proportional to the number of\n\t      // unique nested structures.\n\t      if (aStack[length] == a) return bStack[length] == b;\n\t    }\n\t    // Objects with different constructors are not equivalent, but `Object`s\n\t    // from different frames are.\n\t    var aCtor = a.constructor, bCtor = b.constructor;\n\t    if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&\n\t                             _.isFunction(bCtor) && (bCtor instanceof bCtor))) {\n\t      return false;\n\t    }\n\t    // Add the first object to the stack of traversed objects.\n\t    aStack.push(a);\n\t    bStack.push(b);\n\t    var size = 0, result = true;\n\t    // Recursively compare objects and arrays.\n\t    if (className == '[object Array]') {\n\t      // Compare array lengths to determine if a deep comparison is necessary.\n\t      size = a.length;\n\t      result = size == b.length;\n\t      if (result) {\n\t        // Deep compare the contents, ignoring non-numeric properties.\n\t        while (size--) {\n\t          if (!(result = eq(a[size], b[size], aStack, bStack))) break;\n\t        }\n\t      }\n\t    } else {\n\t      // Deep compare objects.\n\t      for (var key in a) {\n\t        if (_.has(a, key)) {\n\t          // Count the expected number of properties.\n\t          size++;\n\t          // Deep compare each member.\n\t          if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;\n\t        }\n\t      }\n\t      // Ensure that both objects contain the same number of properties.\n\t      if (result) {\n\t        for (key in b) {\n\t          if (_.has(b, key) && !(size--)) break;\n\t        }\n\t        result = !size;\n\t      }\n\t    }\n\t    // Remove the first object from the stack of traversed objects.\n\t    aStack.pop();\n\t    bStack.pop();\n\t    return result;\n\t  };\n\n\t  // Perform a deep comparison to check if two objects are equal.\n\t  _.isEqual = function(a, b) {\n\t    return eq(a, b, [], []);\n\t  };\n\n\t  // Is a given array, string, or object empty?\n\t  // An \"empty\" object has no enumerable own-properties.\n\t  _.isEmpty = function(obj) {\n\t    if (obj == null) return true;\n\t    if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n\t    for (var key in obj) if (_.has(obj, key)) return false;\n\t    return true;\n\t  };\n\n\t  // Is a given value a DOM element?\n\t  _.isElement = function(obj) {\n\t    return !!(obj && obj.nodeType === 1);\n\t  };\n\n\t  // Is a given value an array?\n\t  // Delegates to ECMA5's native Array.isArray\n\t  _.isArray = nativeIsArray || function(obj) {\n\t    return toString.call(obj) == '[object Array]';\n\t  };\n\n\t  // Is a given variable an object?\n\t  _.isObject = function(obj) {\n\t    return obj === Object(obj);\n\t  };\n\n\t  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.\n\t  each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {\n\t    _['is' + name] = function(obj) {\n\t      return toString.call(obj) == '[object ' + name + ']';\n\t    };\n\t  });\n\n\t  // Define a fallback version of the method in browsers (ahem, IE), where\n\t  // there isn't any inspectable \"Arguments\" type.\n\t  if (!_.isArguments(arguments)) {\n\t    _.isArguments = function(obj) {\n\t      return !!(obj && _.has(obj, 'callee'));\n\t    };\n\t  }\n\n\t  // Optimize `isFunction` if appropriate.\n\t  if (true) {\n\t    _.isFunction = function(obj) {\n\t      return typeof obj === 'function';\n\t    };\n\t  }\n\n\t  // Is a given object a finite number?\n\t  _.isFinite = function(obj) {\n\t    return isFinite(obj) && !isNaN(parseFloat(obj));\n\t  };\n\n\t  // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n\t  _.isNaN = function(obj) {\n\t    return _.isNumber(obj) && obj != +obj;\n\t  };\n\n\t  // Is a given value a boolean?\n\t  _.isBoolean = function(obj) {\n\t    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n\t  };\n\n\t  // Is a given value equal to null?\n\t  _.isNull = function(obj) {\n\t    return obj === null;\n\t  };\n\n\t  // Is a given variable undefined?\n\t  _.isUndefined = function(obj) {\n\t    return obj === void 0;\n\t  };\n\n\t  // Shortcut function for checking if an object has a given property directly\n\t  // on itself (in other words, not on a prototype).\n\t  _.has = function(obj, key) {\n\t    return hasOwnProperty.call(obj, key);\n\t  };\n\n\t  // Utility Functions\n\t  // -----------------\n\n\t  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n\t  // previous owner. Returns a reference to the Underscore object.\n\t  _.noConflict = function() {\n\t    root._ = previousUnderscore;\n\t    return this;\n\t  };\n\n\t  // Keep the identity function around for default iterators.\n\t  _.identity = function(value) {\n\t    return value;\n\t  };\n\n\t  // Run a function **n** times.\n\t  _.times = function(n, iterator, context) {\n\t    var accum = Array(Math.max(0, n));\n\t    for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);\n\t    return accum;\n\t  };\n\n\t  // Return a random integer between min and max (inclusive).\n\t  _.random = function(min, max) {\n\t    if (max == null) {\n\t      max = min;\n\t      min = 0;\n\t    }\n\t    return min + Math.floor(Math.random() * (max - min + 1));\n\t  };\n\n\t  // List of HTML entities for escaping.\n\t  var entityMap = {\n\t    escape: {\n\t      '&': '&amp;',\n\t      '<': '&lt;',\n\t      '>': '&gt;',\n\t      '\"': '&quot;',\n\t      \"'\": '&#x27;'\n\t    }\n\t  };\n\t  entityMap.unescape = _.invert(entityMap.escape);\n\n\t  // Regexes containing the keys and values listed immediately above.\n\t  var entityRegexes = {\n\t    escape:   new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),\n\t    unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')\n\t  };\n\n\t  // Functions for escaping and unescaping strings to/from HTML interpolation.\n\t  _.each(['escape', 'unescape'], function(method) {\n\t    _[method] = function(string) {\n\t      if (string == null) return '';\n\t      return ('' + string).replace(entityRegexes[method], function(match) {\n\t        return entityMap[method][match];\n\t      });\n\t    };\n\t  });\n\n\t  // If the value of the named `property` is a function then invoke it with the\n\t  // `object` as context; otherwise, return it.\n\t  _.result = function(object, property) {\n\t    if (object == null) return void 0;\n\t    var value = object[property];\n\t    return _.isFunction(value) ? value.call(object) : value;\n\t  };\n\n\t  // Add your own custom functions to the Underscore object.\n\t  _.mixin = function(obj) {\n\t    each(_.functions(obj), function(name) {\n\t      var func = _[name] = obj[name];\n\t      _.prototype[name] = function() {\n\t        var args = [this._wrapped];\n\t        push.apply(args, arguments);\n\t        return result.call(this, func.apply(_, args));\n\t      };\n\t    });\n\t  };\n\n\t  // Generate a unique integer id (unique within the entire client session).\n\t  // Useful for temporary DOM ids.\n\t  var idCounter = 0;\n\t  _.uniqueId = function(prefix) {\n\t    var id = ++idCounter + '';\n\t    return prefix ? prefix + id : id;\n\t  };\n\n\t  // By default, Underscore uses ERB-style template delimiters, change the\n\t  // following template settings to use alternative delimiters.\n\t  _.templateSettings = {\n\t    evaluate    : /<%([\\s\\S]+?)%>/g,\n\t    interpolate : /<%=([\\s\\S]+?)%>/g,\n\t    escape      : /<%-([\\s\\S]+?)%>/g\n\t  };\n\n\t  // When customizing `templateSettings`, if you don't want to define an\n\t  // interpolation, evaluation or escaping regex, we need one that is\n\t  // guaranteed not to match.\n\t  var noMatch = /(.)^/;\n\n\t  // Certain characters need to be escaped so that they can be put into a\n\t  // string literal.\n\t  var escapes = {\n\t    \"'\":      \"'\",\n\t    '\\\\':     '\\\\',\n\t    '\\r':     'r',\n\t    '\\n':     'n',\n\t    '\\t':     't',\n\t    '\\u2028': 'u2028',\n\t    '\\u2029': 'u2029'\n\t  };\n\n\t  var escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\n\n\t  // JavaScript micro-templating, similar to John Resig's implementation.\n\t  // Underscore templating handles arbitrary delimiters, preserves whitespace,\n\t  // and correctly escapes quotes within interpolated code.\n\t  _.template = function(text, data, settings) {\n\t    var render;\n\t    settings = _.defaults({}, settings, _.templateSettings);\n\n\t    // Combine delimiters into one regular expression via alternation.\n\t    var matcher = new RegExp([\n\t      (settings.escape || noMatch).source,\n\t      (settings.interpolate || noMatch).source,\n\t      (settings.evaluate || noMatch).source\n\t    ].join('|') + '|$', 'g');\n\n\t    // Compile the template source, escaping string literals appropriately.\n\t    var index = 0;\n\t    var source = \"__p+='\";\n\t    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n\t      source += text.slice(index, offset)\n\t        .replace(escaper, function(match) { return '\\\\' + escapes[match]; });\n\n\t      if (escape) {\n\t        source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n\t      }\n\t      if (interpolate) {\n\t        source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n\t      }\n\t      if (evaluate) {\n\t        source += \"';\\n\" + evaluate + \"\\n__p+='\";\n\t      }\n\t      index = offset + match.length;\n\t      return match;\n\t    });\n\t    source += \"';\\n\";\n\n\t    // If a variable is not specified, place data values in local scope.\n\t    if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n\t    source = \"var __t,__p='',__j=Array.prototype.join,\" +\n\t      \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n\t      source + \"return __p;\\n\";\n\n\t    try {\n\t      render = new Function(settings.variable || 'obj', '_', source);\n\t    } catch (e) {\n\t      e.source = source;\n\t      throw e;\n\t    }\n\n\t    if (data) return render(data, _);\n\t    var template = function(data) {\n\t      return render.call(this, data, _);\n\t    };\n\n\t    // Provide the compiled function source as a convenience for precompilation.\n\t    template.source = 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\n\n\t    return template;\n\t  };\n\n\t  // Add a \"chain\" function, which will delegate to the wrapper.\n\t  _.chain = function(obj) {\n\t    return _(obj).chain();\n\t  };\n\n\t  // OOP\n\t  // ---------------\n\t  // If Underscore is called as a function, it returns a wrapped object that\n\t  // can be used OO-style. This wrapper holds altered versions of all the\n\t  // underscore functions. Wrapped objects may be chained.\n\n\t  // Helper function to continue chaining intermediate results.\n\t  var result = function(obj) {\n\t    return this._chain ? _(obj).chain() : obj;\n\t  };\n\n\t  // Add all of the Underscore functions to the wrapper object.\n\t  _.mixin(_);\n\n\t  // Add all mutator Array functions to the wrapper.\n\t  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n\t    var method = ArrayProto[name];\n\t    _.prototype[name] = function() {\n\t      var obj = this._wrapped;\n\t      method.apply(obj, arguments);\n\t      if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];\n\t      return result.call(this, obj);\n\t    };\n\t  });\n\n\t  // Add all accessor Array functions to the wrapper.\n\t  each(['concat', 'join', 'slice'], function(name) {\n\t    var method = ArrayProto[name];\n\t    _.prototype[name] = function() {\n\t      return result.call(this, method.apply(this._wrapped, arguments));\n\t    };\n\t  });\n\n\t  _.extend(_.prototype, {\n\n\t    // Start chaining a wrapped Underscore object.\n\t    chain: function() {\n\t      this._chain = true;\n\t      return this;\n\t    },\n\n\t    // Extracts the result from a wrapped and chained object.\n\t    value: function() {\n\t      return this._wrapped;\n\t    }\n\n\t  });\n\n\t}).call(this);\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n\t * jQuery JavaScript Library v2.2.4\n\t * http://jquery.com/\n\t *\n\t * Includes Sizzle.js\n\t * http://sizzlejs.com/\n\t *\n\t * Copyright jQuery Foundation and other contributors\n\t * Released under the MIT license\n\t * http://jquery.org/license\n\t *\n\t * Date: 2016-05-20T17:23Z\n\t */\n\n\t(function( global, factory ) {\n\n\t\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t\t// is present, execute the factory and get jQuery.\n\t\t\t// For environments that do not have a `window` with a `document`\n\t\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t\t// This accentuates the need for the creation of a real `window`.\n\t\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t\t// See ticket #14549 for more info.\n\t\t\tmodule.exports = global.document ?\n\t\t\t\tfactory( global, true ) :\n\t\t\t\tfunction( w ) {\n\t\t\t\t\tif ( !w.document ) {\n\t\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t\t}\n\t\t\t\t\treturn factory( w );\n\t\t\t\t};\n\t\t} else {\n\t\t\tfactory( global );\n\t\t}\n\n\t// Pass this if window is not defined yet\n\t}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\t// Support: Firefox 18+\n\t// Can't be in strict mode, several libs including ASP.NET trace\n\t// the stack via arguments.caller.callee and Firefox dies if\n\t// you try to trace through \"use strict\" call chains. (#13335)\n\t//\"use strict\";\n\tvar arr = [];\n\n\tvar document = window.document;\n\n\tvar slice = arr.slice;\n\n\tvar concat = arr.concat;\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar support = {};\n\n\n\n\tvar\n\t\tversion = \"2.2.4\",\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function( selector, context ) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init( selector, context );\n\t\t},\n\n\t\t// Support: Android<4.1\n\t\t// Make sure we trim BOM and NBSP\n\t\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t\t// Matches dashed string for camelizing\n\t\trmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([\\da-z])/gi,\n\n\t\t// Used by jQuery.camelCase as callback to replace()\n\t\tfcamelCase = function( all, letter ) {\n\t\t\treturn letter.toUpperCase();\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// Start with an empty selector\n\t\tselector: \"\",\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function() {\n\t\t\treturn slice.call( this );\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function( num ) {\n\t\t\treturn num != null ?\n\n\t\t\t\t// Return just the one element from the set\n\t\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t\t// Return all the elements in a clean array\n\t\t\t\tslice.call( this );\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function( elems ) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\t\t\tret.context = this.context;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function( callback ) {\n\t\t\treturn jQuery.each( this, callback );\n\t\t},\n\n\t\tmap: function( callback ) {\n\t\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\t\treturn callback.call( elem, i, elem );\n\t\t\t} ) );\n\t\t},\n\n\t\tslice: function() {\n\t\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t\t},\n\n\t\tfirst: function() {\n\t\t\treturn this.eq( 0 );\n\t\t},\n\n\t\tlast: function() {\n\t\t\treturn this.eq( -1 );\n\t\t},\n\n\t\teq: function( i ) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t\t},\n\n\t\tend: function() {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function() {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[ 0 ] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif ( typeof target === \"boolean\" ) {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[ i ] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif ( i === length ) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor ( ; i < length; i++ ) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor ( name in options ) {\n\t\t\t\t\tsrc = target[ name ];\n\t\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif ( target === copy ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend( {\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function( msg ) {\n\t\t\tthrow new Error( msg );\n\t\t},\n\n\t\tnoop: function() {},\n\n\t\tisFunction: function( obj ) {\n\t\t\treturn jQuery.type( obj ) === \"function\";\n\t\t},\n\n\t\tisArray: Array.isArray,\n\n\t\tisWindow: function( obj ) {\n\t\t\treturn obj != null && obj === obj.window;\n\t\t},\n\n\t\tisNumeric: function( obj ) {\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\t\tvar realStringObj = obj && obj.toString();\n\t\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t\t},\n\n\t\tisPlainObject: function( obj ) {\n\t\t\tvar key;\n\n\t\t\t// Not plain objects:\n\t\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t\t// - DOM nodes\n\t\t\t// - window\n\t\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t\t// if last one is own, then all properties are own\n\t\t\tfor ( key in obj ) {}\n\n\t\t\treturn key === undefined || hasOwn.call( obj, key );\n\t\t},\n\n\t\tisEmptyObject: function( obj ) {\n\t\t\tvar name;\n\t\t\tfor ( name in obj ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\ttype: function( obj ) {\n\t\t\tif ( obj == null ) {\n\t\t\t\treturn obj + \"\";\n\t\t\t}\n\n\t\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\t\ttypeof obj;\n\t\t},\n\n\t\t// Evaluates a script in a global context\n\t\tglobalEval: function( code ) {\n\t\t\tvar script,\n\t\t\t\tindirect = eval;\n\n\t\t\tcode = jQuery.trim( code );\n\n\t\t\tif ( code ) {\n\n\t\t\t\t// If the code includes a valid, prologue position\n\t\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t\t// script tag into the document.\n\t\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\t\tscript.text = code;\n\t\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\t\tindirect( code );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Convert dashed to camelCase; used by the css and data modules\n\t\t// Support: IE9-11+\n\t\t// Microsoft forgot to hump their vendor prefix (#9572)\n\t\tcamelCase: function( string ) {\n\t\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t\t},\n\n\t\tnodeName: function( elem, name ) {\n\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t\t},\n\n\t\teach: function( obj, callback ) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif ( isArrayLike( obj ) ) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\t\t// Support: Android<4.1\n\t\ttrim: function( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function( arr, results ) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif ( arr != null ) {\n\t\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call( ret, arr );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function( elem, arr, i ) {\n\t\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t\t},\n\n\t\tmerge: function( first, second ) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function( elems, callback, invert ) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function( elems, callback, arg ) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif ( isArrayLike( elems ) ) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\t\tif ( value != null ) {\n\t\t\t\t\t\tret.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor ( i in elems ) {\n\t\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\t\tif ( value != null ) {\n\t\t\t\t\t\tret.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn concat.apply( [], ret );\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// Bind a function to a context, optionally partially applying any\n\t\t// arguments.\n\t\tproxy: function( fn, context ) {\n\t\t\tvar tmp, args, proxy;\n\n\t\t\tif ( typeof context === \"string\" ) {\n\t\t\t\ttmp = fn[ context ];\n\t\t\t\tcontext = fn;\n\t\t\t\tfn = tmp;\n\t\t\t}\n\n\t\t\t// Quick check to determine if target is callable, in the spec\n\t\t\t// this throws a TypeError, but we will just return undefined.\n\t\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\t// Simulated bind\n\t\t\targs = slice.call( arguments, 2 );\n\t\t\tproxy = function() {\n\t\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t\t};\n\n\t\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\t\treturn proxy;\n\t\t},\n\n\t\tnow: Date.now,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t} );\n\n\t// JSHint would error on this code due to the Symbol not being defined in ES5.\n\t// Defining this global in .jshintrc would create a danger of using the global\n\t// unguarded in another place, it seems safer to just disable JSHint for these\n\t// three lines.\n\t/* jshint ignore: start */\n\tif ( typeof Symbol === \"function\" ) {\n\t\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n\t}\n\t/* jshint ignore: end */\n\n\t// Populate the class2type map\n\tjQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\n\tfunction isArrayLike( obj ) {\n\n\t\t// Support: iOS 8.2 (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = jQuery.type( obj );\n\n\t\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n\t}\n\tvar Sizzle =\n\t/*!\n\t * Sizzle CSS Selector Engine v2.2.1\n\t * http://sizzlejs.com/\n\t *\n\t * Copyright jQuery Foundation and other contributors\n\t * Released under the MIT license\n\t * http://jquery.org/license\n\t *\n\t * Date: 2015-10-17\n\t */\n\t(function( window ) {\n\n\tvar i,\n\t\tsupport,\n\t\tExpr,\n\t\tgetText,\n\t\tisXML,\n\t\ttokenize,\n\t\tcompile,\n\t\tselect,\n\t\toutermostContext,\n\t\tsortInput,\n\t\thasDuplicate,\n\n\t\t// Local document vars\n\t\tsetDocument,\n\t\tdocument,\n\t\tdocElem,\n\t\tdocumentIsHTML,\n\t\trbuggyQSA,\n\t\trbuggyMatches,\n\t\tmatches,\n\t\tcontains,\n\n\t\t// Instance-specific data\n\t\texpando = \"sizzle\" + 1 * new Date(),\n\t\tpreferredDoc = window.document,\n\t\tdirruns = 0,\n\t\tdone = 0,\n\t\tclassCache = createCache(),\n\t\ttokenCache = createCache(),\n\t\tcompilerCache = createCache(),\n\t\tsortOrder = function( a, b ) {\n\t\t\tif ( a === b ) {\n\t\t\t\thasDuplicate = true;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\n\t\t// General-purpose constants\n\t\tMAX_NEGATIVE = 1 << 31,\n\n\t\t// Instance methods\n\t\thasOwn = ({}).hasOwnProperty,\n\t\tarr = [],\n\t\tpop = arr.pop,\n\t\tpush_native = arr.push,\n\t\tpush = arr.push,\n\t\tslice = arr.slice,\n\t\t// Use a stripped-down indexOf as it's faster than native\n\t\t// http://jsperf.com/thor-indexof-vs-for/5\n\t\tindexOf = function( list, elem ) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = list.length;\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tif ( list[i] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\n\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t\t// Regular expressions\n\n\t\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\t\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\t\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t\t// Operator (capture 2)\n\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\t\"*\\\\]\",\n\n\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t\t// 2. simple (capture 6)\n\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t\t// 3. anything else (capture 2)\n\t\t\t\".*\" +\n\t\t\t\")\\\\)|)\",\n\n\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\t\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\t\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\t\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\t\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\t\trpseudo = new RegExp( pseudos ),\n\t\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\t\tmatchExpr = {\n\t\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t\t// For use in libraries implementing .is()\n\t\t\t// We use this for POS matching in `select`\n\t\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t\t},\n\n\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\trheader = /^h\\d$/i,\n\n\t\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\trsibling = /[+~]/,\n\t\trescape = /'|\\\\/g,\n\n\t\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\t\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t\t// NaN means non-codepoint\n\t\t\t// Support: Firefox<24\n\t\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\t\treturn high !== high || escapedWhitespace ?\n\t\t\t\tescaped :\n\t\t\t\thigh < 0 ?\n\t\t\t\t\t// BMP codepoint\n\t\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t\t},\n\n\t\t// Used for iframes\n\t\t// See setDocument()\n\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t// error in IE\n\t\tunloadHandler = function() {\n\t\t\tsetDocument();\n\t\t};\n\n\t// Optimize for push.apply( _, NodeList )\n\ttry {\n\t\tpush.apply(\n\t\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\t\tpreferredDoc.childNodes\n\t\t);\n\t\t// Support: Android<4.0\n\t\t// Detect silently failing push.apply\n\t\tarr[ preferredDoc.childNodes.length ].nodeType;\n\t} catch ( e ) {\n\t\tpush = { apply: arr.length ?\n\n\t\t\t// Leverage slice if possible\n\t\t\tfunction( target, els ) {\n\t\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t\t} :\n\n\t\t\t// Support: IE<9\n\t\t\t// Otherwise append directly\n\t\t\tfunction( target, els ) {\n\t\t\t\tvar j = target.length,\n\t\t\t\t\ti = 0;\n\t\t\t\t// Can't trust NodeList.length\n\t\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\t\ttarget.length = j - 1;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction Sizzle( selector, context, results, seed ) {\n\t\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\tresults = results || [];\n\n\t\t// Return early from calls with invalid selector or context\n\t\tif ( typeof selector !== \"string\" || !selector ||\n\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\t\treturn results;\n\t\t}\n\n\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\tif ( !seed ) {\n\n\t\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\t\tsetDocument( context );\n\t\t\t}\n\t\t\tcontext = context || document;\n\n\t\t\tif ( documentIsHTML ) {\n\n\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t\t// ID selector\n\t\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t\t// Document context\n\t\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Type selector\n\t\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Class selector\n\t\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\tif ( support.qsa &&\n\t\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\t\tnewContext = context;\n\t\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t\t// Support: IE <=8\n\t\t\t\t\t// Exclude object elements\n\t\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\t\tcontext;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( newSelector ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// All others\n\t\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n\t}\n\n\t/**\n\t * Create key-value caches of limited size\n\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t *\tdeleting the oldest entry\n\t */\n\tfunction createCache() {\n\t\tvar keys = [];\n\n\t\tfunction cache( key, value ) {\n\t\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t\t// Only keep the most recent entries\n\t\t\t\tdelete cache[ keys.shift() ];\n\t\t\t}\n\t\t\treturn (cache[ key + \" \" ] = value);\n\t\t}\n\t\treturn cache;\n\t}\n\n\t/**\n\t * Mark a function for special use by Sizzle\n\t * @param {Function} fn The function to mark\n\t */\n\tfunction markFunction( fn ) {\n\t\tfn[ expando ] = true;\n\t\treturn fn;\n\t}\n\n\t/**\n\t * Support testing using an element\n\t * @param {Function} fn Passed the created div and expects a boolean result\n\t */\n\tfunction assert( fn ) {\n\t\tvar div = document.createElement(\"div\");\n\n\t\ttry {\n\t\t\treturn !!fn( div );\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t} finally {\n\t\t\t// Remove from its parent by default\n\t\t\tif ( div.parentNode ) {\n\t\t\t\tdiv.parentNode.removeChild( div );\n\t\t\t}\n\t\t\t// release memory in IE\n\t\t\tdiv = null;\n\t\t}\n\t}\n\n\t/**\n\t * Adds the same handler for all of the specified attrs\n\t * @param {String} attrs Pipe-separated list of attributes\n\t * @param {Function} handler The method that will be applied\n\t */\n\tfunction addHandle( attrs, handler ) {\n\t\tvar arr = attrs.split(\"|\"),\n\t\t\ti = arr.length;\n\n\t\twhile ( i-- ) {\n\t\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t\t}\n\t}\n\n\t/**\n\t * Checks document order of two siblings\n\t * @param {Element} a\n\t * @param {Element} b\n\t * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n\t */\n\tfunction siblingCheck( a, b ) {\n\t\tvar cur = b && a,\n\t\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t\t// Use IE sourceIndex if available on both nodes\n\t\tif ( diff ) {\n\t\t\treturn diff;\n\t\t}\n\n\t\t// Check if b follows a\n\t\tif ( cur ) {\n\t\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\t\tif ( cur === b ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn a ? 1 : -1;\n\t}\n\n\t/**\n\t * Returns a function to use in pseudos for input types\n\t * @param {String} type\n\t */\n\tfunction createInputPseudo( type ) {\n\t\treturn function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === type;\n\t\t};\n\t}\n\n\t/**\n\t * Returns a function to use in pseudos for buttons\n\t * @param {String} type\n\t */\n\tfunction createButtonPseudo( type ) {\n\t\treturn function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t\t};\n\t}\n\n\t/**\n\t * Returns a function to use in pseudos for positionals\n\t * @param {Function} fn\n\t */\n\tfunction createPositionalPseudo( fn ) {\n\t\treturn markFunction(function( argument ) {\n\t\t\targument = +argument;\n\t\t\treturn markFunction(function( seed, matches ) {\n\t\t\t\tvar j,\n\t\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Checks a node for validity as a Sizzle context\n\t * @param {Element|Object=} context\n\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t */\n\tfunction testContext( context ) {\n\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t}\n\n\t// Expose support vars for convenience\n\tsupport = Sizzle.support = {};\n\n\t/**\n\t * Detects XML nodes\n\t * @param {Element|Object} elem An element or a document\n\t * @returns {Boolean} True iff elem is a non-HTML XML node\n\t */\n\tisXML = Sizzle.isXML = function( elem ) {\n\t\t// documentElement is verified for cases where it doesn't yet exist\n\t\t// (such as loading iframes in IE - #4833)\n\t\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\t\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n\t};\n\n\t/**\n\t * Sets document-related variables once based on the current document\n\t * @param {Element|Object} [doc] An element or document object to use to set the document\n\t * @returns {Object} Returns the current document\n\t */\n\tsetDocument = Sizzle.setDocument = function( node ) {\n\t\tvar hasCompare, parent,\n\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t// Return early if doc is invalid or already selected\n\t\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\t\treturn document;\n\t\t}\n\n\t\t// Update global variables\n\t\tdocument = doc;\n\t\tdocElem = document.documentElement;\n\t\tdocumentIsHTML = !isXML( document );\n\n\t\t// Support: IE 9-11, Edge\n\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t\t// Support: IE 11\n\t\t\tif ( parent.addEventListener ) {\n\t\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t\t// Support: IE 9 - 10 only\n\t\t\t} else if ( parent.attachEvent ) {\n\t\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t\t}\n\t\t}\n\n\t\t/* Attributes\n\t\t---------------------------------------------------------------------- */\n\n\t\t// Support: IE<8\n\t\t// Verify that getAttribute really returns attributes and not properties\n\t\t// (excepting IE8 booleans)\n\t\tsupport.attributes = assert(function( div ) {\n\t\t\tdiv.className = \"i\";\n\t\t\treturn !div.getAttribute(\"className\");\n\t\t});\n\n\t\t/* getElement(s)By*\n\t\t---------------------------------------------------------------------- */\n\n\t\t// Check if getElementsByTagName(\"*\") returns only elements\n\t\tsupport.getElementsByTagName = assert(function( div ) {\n\t\t\tdiv.appendChild( document.createComment(\"\") );\n\t\t\treturn !div.getElementsByTagName(\"*\").length;\n\t\t});\n\n\t\t// Support: IE<9\n\t\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t\t// Support: IE<10\n\t\t// Check if getElementById returns elements by name\n\t\t// The broken getElementById methods don't pick up programatically-set names,\n\t\t// so use a roundabout getElementsByName test\n\t\tsupport.getById = assert(function( div ) {\n\t\t\tdocElem.appendChild( div ).id = expando;\n\t\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t\t});\n\n\t\t// ID find and filter\n\t\tif ( support.getById ) {\n\t\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t\treturn m ? [ m ] : [];\n\t\t\t\t}\n\t\t\t};\n\t\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t};\n\t\t\t};\n\t\t} else {\n\t\t\t// Support: IE6/7\n\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\tdelete Expr.find[\"ID\"];\n\n\t\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\n\t\t// Tag\n\t\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\t\tfunction( tag, context ) {\n\t\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else if ( support.qsa ) {\n\t\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t\t}\n\t\t\t} :\n\n\t\t\tfunction( tag, context ) {\n\t\t\t\tvar elem,\n\t\t\t\t\ttmp = [],\n\t\t\t\t\ti = 0,\n\t\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t\t// Filter out possible comments\n\t\t\t\tif ( tag === \"*\" ) {\n\t\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t\treturn results;\n\t\t\t};\n\n\t\t// Class\n\t\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t};\n\n\t\t/* QSA/matchesSelector\n\t\t---------------------------------------------------------------------- */\n\n\t\t// QSA and matchesSelector support\n\n\t\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\t\trbuggyMatches = [];\n\n\t\t// qSa(:focus) reports false when true (Chrome 21)\n\t\t// We allow this because of a bug in IE8/9 that throws an error\n\t\t// whenever `document.activeElement` is accessed on an iframe\n\t\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t\t// See http://bugs.jquery.com/ticket/13378\n\t\trbuggyQSA = [];\n\n\t\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function( div ) {\n\t\t\t\t// Select is set to empty string on purpose\n\t\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t\t// setting a boolean content attribute,\n\t\t\t\t// since its presence should be enough\n\t\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t\t}\n\n\t\t\t\t// Support: IE8\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t// IE8 throws error here and will not see later tests\n\t\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tassert(function( div ) {\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tvar input = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t\t// Support: IE8\n\t\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t\t}\n\n\t\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t\t// IE8 throws error here and will not see later tests\n\t\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t\t}\n\n\t\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\t\trbuggyQSA.push(\",.*:\");\n\t\t\t});\n\t\t}\n\n\t\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\t\tdocElem.webkitMatchesSelector ||\n\t\t\tdocElem.mozMatchesSelector ||\n\t\t\tdocElem.oMatchesSelector ||\n\t\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\t\tassert(function( div ) {\n\t\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t\t// on a disconnected node (IE 9)\n\t\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t\t// This should fail with an exception\n\t\t\t\t// Gecko does not error, returns false instead\n\t\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t\t});\n\t\t}\n\n\t\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\t\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t\t/* Contains\n\t\t---------------------------------------------------------------------- */\n\t\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t\t// Element contains another\n\t\t// Purposefully self-exclusive\n\t\t// As in, an element does not contain itself\n\t\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\t\tfunction( a, b ) {\n\t\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\t\tbup = b && b.parentNode;\n\t\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\t\tadown.contains ?\n\t\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t\t));\n\t\t\t} :\n\t\t\tfunction( a, b ) {\n\t\t\t\tif ( b ) {\n\t\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t/* Sorting\n\t\t---------------------------------------------------------------------- */\n\n\t\t// Document order sorting\n\t\tsortOrder = hasCompare ?\n\t\tfunction( a, b ) {\n\n\t\t\t// Flag for duplicate removal\n\t\t\tif ( a === b ) {\n\t\t\t\thasDuplicate = true;\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\tif ( compare ) {\n\t\t\t\treturn compare;\n\t\t\t}\n\n\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t1;\n\n\t\t\t// Disconnected nodes\n\t\t\tif ( compare & 1 ||\n\t\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\t// Maintain original order\n\t\t\t\treturn sortInput ?\n\t\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t\t0;\n\t\t\t}\n\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\t// Exit early if the nodes are identical\n\t\t\tif ( a === b ) {\n\t\t\t\thasDuplicate = true;\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\taup = a.parentNode,\n\t\t\t\tbup = b.parentNode,\n\t\t\t\tap = [ a ],\n\t\t\t\tbp = [ b ];\n\n\t\t\t// Parentless nodes are either documents or disconnected\n\t\t\tif ( !aup || !bup ) {\n\t\t\t\treturn a === document ? -1 :\n\t\t\t\t\tb === document ? 1 :\n\t\t\t\t\taup ? -1 :\n\t\t\t\t\tbup ? 1 :\n\t\t\t\t\tsortInput ?\n\t\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t\t0;\n\n\t\t\t// If the nodes are siblings, we can do a quick check\n\t\t\t} else if ( aup === bup ) {\n\t\t\t\treturn siblingCheck( a, b );\n\t\t\t}\n\n\t\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\t\tcur = a;\n\t\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\t\tap.unshift( cur );\n\t\t\t}\n\t\t\tcur = b;\n\t\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\t\tbp.unshift( cur );\n\t\t\t}\n\n\t\t\t// Walk down the tree looking for a discrepancy\n\t\t\twhile ( ap[i] === bp[i] ) {\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\treturn i ?\n\t\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t\t// Otherwise nodes in our document sort first\n\t\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t\t0;\n\t\t};\n\n\t\treturn document;\n\t};\n\n\tSizzle.matches = function( expr, elements ) {\n\t\treturn Sizzle( expr, null, null, elements );\n\t};\n\n\tSizzle.matchesSelector = function( elem, expr ) {\n\t\t// Set document vars if needed\n\t\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\t\tsetDocument( elem );\n\t\t}\n\n\t\t// Make sure that attribute selectors are quoted\n\t\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\t\tif ( support.matchesSelector && documentIsHTML &&\n\t\t\t!compilerCache[ expr + \" \" ] &&\n\t\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\t\ttry {\n\t\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n\t};\n\n\tSizzle.contains = function( context, elem ) {\n\t\t// Set document vars if needed\n\t\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\treturn contains( context, elem );\n\t};\n\n\tSizzle.attr = function( elem, name ) {\n\t\t// Set document vars if needed\n\t\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\t\tsetDocument( elem );\n\t\t}\n\n\t\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\t\tundefined;\n\n\t\treturn val !== undefined ?\n\t\t\tval :\n\t\t\tsupport.attributes || !documentIsHTML ?\n\t\t\t\telem.getAttribute( name ) :\n\t\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t};\n\n\tSizzle.error = function( msg ) {\n\t\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n\t};\n\n\t/**\n\t * Document sorting and removing duplicates\n\t * @param {ArrayLike} results\n\t */\n\tSizzle.uniqueSort = function( results ) {\n\t\tvar elem,\n\t\t\tduplicates = [],\n\t\t\tj = 0,\n\t\t\ti = 0;\n\n\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\thasDuplicate = !support.detectDuplicates;\n\t\tsortInput = !support.sortStable && results.slice( 0 );\n\t\tresults.sort( sortOrder );\n\n\t\tif ( hasDuplicate ) {\n\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\t\tj = duplicates.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile ( j-- ) {\n\t\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t\t}\n\t\t}\n\n\t\t// Clear input after sorting to release objects\n\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\tsortInput = null;\n\n\t\treturn results;\n\t};\n\n\t/**\n\t * Utility function for retrieving the text value of an array of DOM nodes\n\t * @param {Array|Element} elem\n\t */\n\tgetText = Sizzle.getText = function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( (node = elem[i++]) ) {\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += getText( node );\n\t\t\t}\n\t\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t\t// Use textContent for elements\n\t\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else {\n\t\t\t\t// Traverse its children\n\t\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\t\tret += getText( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t};\n\n\tExpr = Sizzle.selectors = {\n\n\t\t// Can be adjusted by the user\n\t\tcacheLength: 50,\n\n\t\tcreatePseudo: markFunction,\n\n\t\tmatch: matchExpr,\n\n\t\tattrHandle: {},\n\n\t\tfind: {},\n\n\t\trelative: {\n\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t},\n\n\t\tpreFilter: {\n\t\t\t\"ATTR\": function( match ) {\n\t\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t}\n\n\t\t\t\treturn match.slice( 0, 4 );\n\t\t\t},\n\n\t\t\t\"CHILD\": function( match ) {\n\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t8 y of y-component\n\t\t\t\t*/\n\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t\t}\n\n\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t\t} else if ( match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\treturn match;\n\t\t\t},\n\n\t\t\t\"PSEUDO\": function( match ) {\n\t\t\t\tvar excess,\n\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\tif ( match[3] ) {\n\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t\t// excess is a negative index\n\t\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t\t}\n\n\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\treturn match.slice( 0, 3 );\n\t\t\t}\n\t\t},\n\n\t\tfilter: {\n\n\t\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\tfunction() { return true; } :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t\t};\n\t\t\t},\n\n\t\t\t\"CLASS\": function( className ) {\n\t\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\t\treturn pattern ||\n\t\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t\t});\n\t\t\t},\n\n\t\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\t\tif ( result == null ) {\n\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t}\n\t\t\t\t\tif ( !operator ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\t\tfalse;\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t} :\n\n\t\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t},\n\n\t\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\tvar args,\n\t\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t// just as Sizzle does\n\t\t\t\tif ( fn[ expando ] ) {\n\t\t\t\t\treturn fn( argument );\n\t\t\t\t}\n\n\t\t\t\t// But maintain support for old signatures\n\t\t\t\tif ( fn.length > 1 ) {\n\t\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn fn;\n\t\t\t}\n\t\t},\n\n\t\tpseudos: {\n\t\t\t// Potentially complex pseudos\n\t\t\t\"not\": markFunction(function( selector ) {\n\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t// spaces as combinators\n\t\t\t\tvar input = [],\n\t\t\t\t\tresults = [],\n\t\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\t\treturn matcher[ expando ] ?\n\t\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t};\n\t\t\t}),\n\n\t\t\t\"has\": markFunction(function( selector ) {\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t\t};\n\t\t\t}),\n\n\t\t\t\"contains\": markFunction(function( text ) {\n\t\t\t\ttext = text.replace( runescape, funescape );\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t\t};\n\t\t\t}),\n\n\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t// is based solely on the element's language value\n\t\t\t// being equal to the identifier C,\n\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t\t// lang value must be a valid identifier\n\t\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t\t}\n\t\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\tvar elemLang;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t\t}),\n\n\t\t\t// Miscellaneous\n\t\t\t\"target\": function( elem ) {\n\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t\t},\n\n\t\t\t\"root\": function( elem ) {\n\t\t\t\treturn elem === docElem;\n\t\t\t},\n\n\t\t\t\"focus\": function( elem ) {\n\t\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t},\n\n\t\t\t// Boolean properties\n\t\t\t\"enabled\": function( elem ) {\n\t\t\t\treturn elem.disabled === false;\n\t\t\t},\n\n\t\t\t\"disabled\": function( elem ) {\n\t\t\t\treturn elem.disabled === true;\n\t\t\t},\n\n\t\t\t\"checked\": function( elem ) {\n\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t\t},\n\n\t\t\t\"selected\": function( elem ) {\n\t\t\t\t// Accessing this property makes selected-by-default\n\t\t\t\t// options in Safari work properly\n\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t}\n\n\t\t\t\treturn elem.selected === true;\n\t\t\t},\n\n\t\t\t// Contents\n\t\t\t\"empty\": function( elem ) {\n\t\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t\"parent\": function( elem ) {\n\t\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t\t},\n\n\t\t\t// Element/input types\n\t\t\t\"header\": function( elem ) {\n\t\t\t\treturn rheader.test( elem.nodeName );\n\t\t\t},\n\n\t\t\t\"input\": function( elem ) {\n\t\t\t\treturn rinputs.test( elem.nodeName );\n\t\t\t},\n\n\t\t\t\"button\": function( elem ) {\n\t\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t\t},\n\n\t\t\t\"text\": function( elem ) {\n\t\t\t\tvar attr;\n\t\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t\t// Support: IE<8\n\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t\t},\n\n\t\t\t// Position-in-collection\n\t\t\t\"first\": createPositionalPseudo(function() {\n\t\t\t\treturn [ 0 ];\n\t\t\t}),\n\n\t\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\t\treturn [ length - 1 ];\n\t\t\t}),\n\n\t\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t\t}),\n\n\t\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\t\tmatchIndexes.push( i );\n\t\t\t\t}\n\t\t\t\treturn matchIndexes;\n\t\t\t}),\n\n\t\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\t\tvar i = 1;\n\t\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\t\tmatchIndexes.push( i );\n\t\t\t\t}\n\t\t\t\treturn matchIndexes;\n\t\t\t}),\n\n\t\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\t\tmatchIndexes.push( i );\n\t\t\t\t}\n\t\t\t\treturn matchIndexes;\n\t\t\t}),\n\n\t\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\t\tmatchIndexes.push( i );\n\t\t\t\t}\n\t\t\t\treturn matchIndexes;\n\t\t\t})\n\t\t}\n\t};\n\n\tExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n\t// Add button/input type pseudos\n\tfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\t\tExpr.pseudos[ i ] = createInputPseudo( i );\n\t}\n\tfor ( i in { submit: true, reset: true } ) {\n\t\tExpr.pseudos[ i ] = createButtonPseudo( i );\n\t}\n\n\t// Easy API for creating new setFilters\n\tfunction setFilters() {}\n\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\tExpr.setFilters = new setFilters();\n\n\ttokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\t\tvar matched, match, tokens, type,\n\t\t\tsoFar, groups, preFilters,\n\t\t\tcached = tokenCache[ selector + \" \" ];\n\n\t\tif ( cached ) {\n\t\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t\t}\n\n\t\tsoFar = selector;\n\t\tgroups = [];\n\t\tpreFilters = Expr.preFilter;\n\n\t\twhile ( soFar ) {\n\n\t\t\t// Comma and first run\n\t\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\t\tif ( match ) {\n\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t\t}\n\t\t\t\tgroups.push( (tokens = []) );\n\t\t\t}\n\n\t\t\tmatched = false;\n\n\t\t\t// Combinators\n\t\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\n\t\t\t// Filters\n\t\t\tfor ( type in Expr.filter ) {\n\t\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\tmatches: match\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !matched ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Return the length of the invalid excess\n\t\t// if we're just parsing\n\t\t// Otherwise, throw an error or return tokens\n\t\treturn parseOnly ?\n\t\t\tsoFar.length :\n\t\t\tsoFar ?\n\t\t\t\tSizzle.error( selector ) :\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache( selector, groups ).slice( 0 );\n\t};\n\n\tfunction toSelector( tokens ) {\n\t\tvar i = 0,\n\t\t\tlen = tokens.length,\n\t\t\tselector = \"\";\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tselector += tokens[i].value;\n\t\t}\n\t\treturn selector;\n\t}\n\n\tfunction addCombinator( matcher, combinator, base ) {\n\t\tvar dir = combinator.dir,\n\t\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\t\tdoneName = done++;\n\n\t\treturn combinator.first ?\n\t\t\t// Check against closest ancestor/preceding element\n\t\t\tfunction( elem, context, xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} :\n\n\t\t\t// Check against all ancestor/preceding elements\n\t\t\tfunction( elem, context, xml ) {\n\t\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\tif ( xml ) {\n\t\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t}\n\n\tfunction elementMatcher( matchers ) {\n\t\treturn matchers.length > 1 ?\n\t\t\tfunction( elem, context, xml ) {\n\t\t\t\tvar i = matchers.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} :\n\t\t\tmatchers[0];\n\t}\n\n\tfunction multipleContexts( selector, contexts, results ) {\n\t\tvar i = 0,\n\t\t\tlen = contexts.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tSizzle( selector, contexts[i], results );\n\t\t}\n\t\treturn results;\n\t}\n\n\tfunction condense( unmatched, map, filter, context, xml ) {\n\t\tvar elem,\n\t\t\tnewUnmatched = [],\n\t\t\ti = 0,\n\t\t\tlen = unmatched.length,\n\t\t\tmapped = map != null;\n\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\t\tif ( mapped ) {\n\t\t\t\t\t\tmap.push( i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn newUnmatched;\n\t}\n\n\tfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\t\tif ( postFilter && !postFilter[ expando ] ) {\n\t\t\tpostFilter = setMatcher( postFilter );\n\t\t}\n\t\tif ( postFinder && !postFinder[ expando ] ) {\n\t\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t\t}\n\t\treturn markFunction(function( seed, results, context, xml ) {\n\t\t\tvar temp, i, elem,\n\t\t\t\tpreMap = [],\n\t\t\t\tpostMap = [],\n\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t// Get initial elements from seed or context\n\t\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\t\telems,\n\n\t\t\t\tmatcherOut = matcher ?\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults :\n\t\t\t\t\tmatcherIn;\n\n\t\t\t// Find primary matches\n\t\t\tif ( matcher ) {\n\t\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t\t}\n\n\t\t\t// Apply postFilter\n\t\t\tif ( postFilter ) {\n\t\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\ti = temp.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( seed ) {\n\t\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t} else {\n\t\t\t\tmatcherOut = condense(\n\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\t\tmatcherOut\n\t\t\t\t);\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t\t} else {\n\t\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction matcherFromTokens( tokens ) {\n\t\tvar checkContext, matcher, j,\n\t\t\tlen = tokens.length,\n\t\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\t\treturn elem === checkContext;\n\t\t\t}, implicitRelative, true ),\n\t\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t\t}, implicitRelative, true ),\n\t\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\t\tcheckContext = null;\n\t\t\t\treturn ret;\n\t\t\t} ];\n\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t\t} else {\n\t\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\tj = ++i;\n\t\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tmatchers.push( matcher );\n\t\t\t}\n\t\t}\n\n\t\treturn elementMatcher( matchers );\n\t}\n\n\tfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\t\tvar bySet = setMatchers.length > 0,\n\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\ti = \"0\",\n\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\tsetMatched = [],\n\t\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\tlen = elems.length;\n\n\t\t\t\tif ( outermost ) {\n\t\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t\t}\n\n\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t// Support: IE<9, Safari\n\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\tif ( bySet ) {\n\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t// makes the latter nonnegative.\n\t\t\t\tmatchedCount += i;\n\n\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t// no element matchers and no seed.\n\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t// numerically zero.\n\t\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add matches to results\n\t\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\tif ( outermost ) {\n\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t}\n\n\t\t\t\treturn unmatched;\n\t\t\t};\n\n\t\treturn bySet ?\n\t\t\tmarkFunction( superMatcher ) :\n\t\t\tsuperMatcher;\n\t}\n\n\tcompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\t\tvar i,\n\t\t\tsetMatchers = [],\n\t\t\telementMatchers = [],\n\t\t\tcached = compilerCache[ selector + \" \" ];\n\n\t\tif ( !cached ) {\n\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\tif ( !match ) {\n\t\t\t\tmatch = tokenize( selector );\n\t\t\t}\n\t\t\ti = match.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\t\tif ( cached[ expando ] ) {\n\t\t\t\t\tsetMatchers.push( cached );\n\t\t\t\t} else {\n\t\t\t\t\telementMatchers.push( cached );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Cache the compiled function\n\t\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t\t// Save selector and tokenization\n\t\t\tcached.selector = selector;\n\t\t}\n\t\treturn cached;\n\t};\n\n\t/**\n\t * A low-level selection function that works with Sizzle's compiled\n\t *  selector functions\n\t * @param {String|Function} selector A selector or a pre-compiled\n\t *  selector function built with Sizzle.compile\n\t * @param {Element} context\n\t * @param {Array} [results]\n\t * @param {Array} [seed] A set of elements to match against\n\t */\n\tselect = Sizzle.select = function( selector, context, results, seed ) {\n\t\tvar i, tokens, token, type, find,\n\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\t\tresults = results || [];\n\n\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t// (the latter of which guarantees us context)\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t} else if ( compiled ) {\n\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t}\n\n\t\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Compile and execute a filtering function if one is not provided\n\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t( compiled || compile( selector, match ) )(\n\t\t\tseed,\n\t\t\tcontext,\n\t\t\t!documentIsHTML,\n\t\t\tresults,\n\t\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t\t);\n\t\treturn results;\n\t};\n\n\t// One-time assignments\n\n\t// Sort stability\n\tsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n\t// Support: Chrome 14-35+\n\t// Always assume duplicates if they aren't passed to the comparison function\n\tsupport.detectDuplicates = !!hasDuplicate;\n\n\t// Initialize against the default document\n\tsetDocument();\n\n\t// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n\t// Detached nodes confoundingly follow *each other*\n\tsupport.sortDetached = assert(function( div1 ) {\n\t\t// Should return 1, but returns 4 (following)\n\t\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n\t});\n\n\t// Support: IE<8\n\t// Prevent attribute/property \"interpolation\"\n\t// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\n\tif ( !assert(function( div ) {\n\t\tdiv.innerHTML = \"<a href='#'></a>\";\n\t\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n\t}) ) {\n\t\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t\t}\n\t\t});\n\t}\n\n\t// Support: IE<9\n\t// Use defaultValue in place of getAttribute(\"value\")\n\tif ( !support.attributes || !assert(function( div ) {\n\t\tdiv.innerHTML = \"<input/>\";\n\t\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\t\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n\t}) ) {\n\t\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\t\treturn elem.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n\n\t// Support: IE<9\n\t// Use getAttributeNode to fetch booleans when getAttribute lies\n\tif ( !assert(function( div ) {\n\t\treturn div.getAttribute(\"disabled\") == null;\n\t}) ) {\n\t\taddHandle( booleans, function( elem, name, isXML ) {\n\t\t\tvar val;\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn Sizzle;\n\n\t})( window );\n\n\n\n\tjQuery.find = Sizzle;\n\tjQuery.expr = Sizzle.selectors;\n\tjQuery.expr[ \":\" ] = jQuery.expr.pseudos;\n\tjQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n\tjQuery.text = Sizzle.getText;\n\tjQuery.isXMLDoc = Sizzle.isXML;\n\tjQuery.contains = Sizzle.contains;\n\n\n\n\tvar dir = function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\n\tvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow( elements, qualifier, not ) {\n\t\tif ( jQuery.isFunction( qualifier ) ) {\n\t\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t\t/* jshint -W018 */\n\t\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( qualifier.nodeType ) {\n\t\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\t\treturn ( elem === qualifier ) !== not;\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( typeof qualifier === \"string\" ) {\n\t\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t\t}\n\n\t\t\tqualifier = jQuery.filter( qualifier, elements );\n\t\t}\n\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\tjQuery.filter = function( expr, elems, not ) {\n\t\tvar elem = elems[ 0 ];\n\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\t\treturn elem.nodeType === 1;\n\t\t\t} ) );\n\t};\n\n\tjQuery.fn.extend( {\n\t\tfind: function( selector ) {\n\t\t\tvar i,\n\t\t\t\tlen = this.length,\n\t\t\t\tret = [],\n\t\t\t\tself = this;\n\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) );\n\t\t\t}\n\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t\t}\n\n\t\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\t\treturn ret;\n\t\t},\n\t\tfilter: function( selector ) {\n\t\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t\t},\n\t\tnot: function( selector ) {\n\t\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t\t},\n\t\tis: function( selector ) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\t\tjQuery( selector ) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t} );\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t\t// Strict HTML recognition (#11290: must start with <)\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\t\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif ( !selector ) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t) );\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.context = document;\n\t\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if ( selector.nodeType ) {\n\t\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t// HANDLE: $(function)\n\t\t\t// Shortcut for document ready\n\t\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector( jQuery );\n\t\t\t}\n\n\t\t\tif ( selector.selector !== undefined ) {\n\t\t\t\tthis.selector = selector.selector;\n\t\t\t\tthis.context = selector.context;\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray( selector, this );\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery( document );\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend( {\n\t\thas: function( target ) {\n\t\t\tvar targets = jQuery( target, this ),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter( function() {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\tclosest: function( selectors, context ) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t\t0;\n\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function( elem ) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif ( !elem ) {\n\t\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif ( typeof elem === \"string\" ) {\n\t\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call( this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function( selector, context ) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function( selector ) {\n\t\t\treturn this.add( selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t\t);\n\t\t}\n\t} );\n\n\tfunction sibling( cur, dir ) {\n\t\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\t\treturn cur;\n\t}\n\n\tjQuery.each( {\n\t\tparent: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function( elem ) {\n\t\t\treturn dir( elem, \"parentNode\" );\n\t\t},\n\t\tparentsUntil: function( elem, i, until ) {\n\t\t\treturn dir( elem, \"parentNode\", until );\n\t\t},\n\t\tnext: function( elem ) {\n\t\t\treturn sibling( elem, \"nextSibling\" );\n\t\t},\n\t\tprev: function( elem ) {\n\t\t\treturn sibling( elem, \"previousSibling\" );\n\t\t},\n\t\tnextAll: function( elem ) {\n\t\t\treturn dir( elem, \"nextSibling\" );\n\t\t},\n\t\tprevAll: function( elem ) {\n\t\t\treturn dir( elem, \"previousSibling\" );\n\t\t},\n\t\tnextUntil: function( elem, i, until ) {\n\t\t\treturn dir( elem, \"nextSibling\", until );\n\t\t},\n\t\tprevUntil: function( elem, i, until ) {\n\t\t\treturn dir( elem, \"previousSibling\", until );\n\t\t},\n\t\tsiblings: function( elem ) {\n\t\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t\t},\n\t\tchildren: function( elem ) {\n\t\t\treturn siblings( elem.firstChild );\n\t\t},\n\t\tcontents: function( elem ) {\n\t\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t\t}\n\t}, function( name, fn ) {\n\t\tjQuery.fn[ name ] = function( until, selector ) {\n\t\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t\t}\n\n\t\t\tif ( this.length > 1 ) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack( matched );\n\t\t};\n\t} );\n\tvar rnotwhite = ( /\\S+/g );\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions( options ) {\n\t\tvar object = {};\n\t\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\t\tobject[ flag ] = true;\n\t\t} );\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function( options ) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions( options ) :\n\t\t\tjQuery.extend( {}, options );\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function() {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif ( !options.memory ) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif ( locked ) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif ( memory ) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function() {\n\t\t\t\t\tif ( list ) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function() {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function( fn ) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function() {\n\t\t\t\t\tif ( list ) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function() {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function() {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function() {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif ( !memory ) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function() {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function( context, args ) {\n\t\t\t\t\tif ( !locked ) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\t\tqueue.push( args );\n\t\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function() {\n\t\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function() {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tjQuery.extend( {\n\n\t\tDeferred: function( func ) {\n\t\t\tvar tuples = [\n\n\t\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function() {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function() {\n\t\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t} ).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Keep pipe for back-compat\n\t\t\tpromise.pipe = promise.then;\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\tvar list = tuple[ 2 ],\n\t\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif ( stateString ) {\n\t\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\t\tstate = stateString;\n\n\t\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t\t}\n\n\t\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t\t} );\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise( deferred );\n\n\t\t\t// Call given func if any\n\t\t\tif ( func ) {\n\t\t\t\tfunc.call( deferred, deferred );\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\t\tvar i = 0,\n\t\t\t\tresolveValues = slice.call( arguments ),\n\t\t\t\tlength = resolveValues.length,\n\n\t\t\t\t// the count of uncompleted subordinates\n\t\t\t\tremaining = length !== 1 ||\n\t\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t\t// the master Deferred.\n\t\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t\t// Update function for both resolve and progress values\n\t\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\t\treturn function( value ) {\n\t\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\t\tif ( length > 1 ) {\n\t\t\t\tprogressValues = new Array( length );\n\t\t\t\tprogressContexts = new Array( length );\n\t\t\t\tresolveContexts = new Array( length );\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t--remaining;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we're not waiting on anything, resolve the master\n\t\t\tif ( !remaining ) {\n\t\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t\t}\n\n\t\t\treturn deferred.promise();\n\t\t}\n\t} );\n\n\n\t// The deferred used on DOM ready\n\tvar readyList;\n\n\tjQuery.fn.ready = function( fn ) {\n\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend( {\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See #6781\n\t\treadyWait: 1,\n\n\t\t// Hold (or release) the ready event\n\t\tholdReady: function( hold ) {\n\t\t\tif ( hold ) {\n\t\t\t\tjQuery.readyWait++;\n\t\t\t} else {\n\t\t\t\tjQuery.ready( true );\n\t\t\t}\n\t\t},\n\n\t\t// Handle when the DOM is ready\n\t\tready: function( wait ) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t\t// Trigger any bound ready events\n\t\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\t\tjQuery( document ).off( \"ready\" );\n\t\t\t}\n\t\t}\n\t} );\n\n\t/**\n\t * The ready event handler and self cleanup method\n\t */\n\tfunction completed() {\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\t\twindow.removeEventListener( \"load\", completed );\n\t\tjQuery.ready();\n\t}\n\n\tjQuery.ready.promise = function( obj ) {\n\t\tif ( !readyList ) {\n\n\t\t\treadyList = jQuery.Deferred();\n\n\t\t\t// Catch cases where $(document).ready() is called\n\t\t\t// after the browser event has already occurred.\n\t\t\t// Support: IE9-10 only\n\t\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\t\tif ( document.readyState === \"complete\" ||\n\t\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t\t} else {\n\n\t\t\t\t// Use the handy event callback\n\t\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t\t// A fallback to window.onload, that will always work\n\t\t\t\twindow.addEventListener( \"load\", completed );\n\t\t\t}\n\t\t}\n\t\treturn readyList.promise( obj );\n\t};\n\n\t// Kick off the DOM ready check even if the user does not\n\tjQuery.ready.promise();\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif ( jQuery.type( key ) === \"object\" ) {\n\t\t\tchainable = true;\n\t\t\tfor ( i in key ) {\n\t\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t\t}\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\tchainable = true;\n\n\t\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif ( bulk ) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif ( raw ) {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\n\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n\t};\n\tvar acceptData = function( owner ) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\t/* jshint -W018 */\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tregister: function( owner, initial ) {\n\t\t\tvar value = initial || {};\n\n\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t// use plain assignment\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t\t// configurability must be true to allow the property to be\n\t\t\t// deleted with the delete operator\n\t\t\t} else {\n\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\tvalue: value,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tconfigurable: true\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn owner[ this.expando ];\n\t\t},\n\t\tcache: function( owner ) {\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( !acceptData( owner ) ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[ this.expando ];\n\n\t\t\t// If not, create one\n\t\t\tif ( !value ) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see #8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function( owner, data, value ) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache( owner );\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\tif ( typeof data === \"string\" ) {\n\t\t\t\tcache[ data ] = value;\n\n\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function( owner, key ) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache( owner ) :\n\t\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t\t},\n\t\taccess: function( owner, key, value ) {\n\t\t\tvar stored;\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif ( key === undefined ||\n\t\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\t\tstored = this.get( owner, key );\n\n\t\t\t\treturn stored !== undefined ?\n\t\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set( owner, key, value );\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function( owner, key ) {\n\t\t\tvar i, name, camel,\n\t\t\t\tcache = owner[ this.expando ];\n\n\t\t\tif ( cache === undefined ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( key === undefined ) {\n\t\t\t\tthis.register( owner );\n\n\t\t\t} else {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t\t} else {\n\t\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\t\tif ( key in cache ) {\n\t\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\t\tname = camel;\n\t\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ti = name.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[ this.expando ];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function( owner ) {\n\t\t\tvar cache = owner[ this.expando ];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction dataAttr( elem, key, data ) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\t\tdata = elem.getAttribute( name );\n\n\t\t\tif ( typeof data === \"string\" ) {\n\t\t\t\ttry {\n\t\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\t\tdata;\n\t\t\t\t} catch ( e ) {}\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set( elem, key, data );\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend( {\n\t\thasData: function( elem ) {\n\t\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t\t},\n\n\t\tdata: function( elem, name, data ) {\n\t\t\treturn dataUser.access( elem, name, data );\n\t\t},\n\n\t\tremoveData: function( elem, name ) {\n\t\t\tdataUser.remove( elem, name );\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function( elem, name, data ) {\n\t\t\treturn dataPriv.access( elem, name, data );\n\t\t},\n\n\t\t_removeData: function( elem, name ) {\n\t\t\tdataPriv.remove( elem, name );\n\t\t}\n\t} );\n\n\tjQuery.fn.extend( {\n\t\tdata: function( key, value ) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[ 0 ],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif ( key === undefined ) {\n\t\t\t\tif ( this.length ) {\n\t\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif ( typeof key === \"object\" ) {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tdataUser.set( this, key );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn access( this, function( value ) {\n\t\t\t\tvar data, camelKey;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// with the key as-is\n\t\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// with the key camelized\n\t\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\t\tthis.each( function() {\n\n\t\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t\t// This might not apply to all properties...*\n\t\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t\t// unchanged property.\n\t\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}, null, value, arguments.length > 1, null, true );\n\t\t},\n\n\t\tremoveData: function( key ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.remove( this, key );\n\t\t\t} );\n\t\t}\n\t} );\n\n\n\tjQuery.extend( {\n\t\tqueue: function( elem, type, data ) {\n\t\t\tvar queue;\n\n\t\t\tif ( elem ) {\n\t\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push( data );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function( elem, type ) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\t\tnext = function() {\n\t\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif ( fn === \"inprogress\" ) {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif ( type === \"fx\" ) {\n\t\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call( elem, next, hooks );\n\t\t\t}\n\n\t\t\tif ( !startLength && hooks ) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function( elem, type ) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t\t} )\n\t\t\t} );\n\t\t}\n\t} );\n\n\tjQuery.fn.extend( {\n\t\tqueue: function( type, data ) {\n\t\t\tvar setter = 2;\n\n\t\t\tif ( typeof type !== \"string\" ) {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif ( arguments.length < setter ) {\n\t\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t},\n\t\tdequeue: function( type ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t} );\n\t\t},\n\t\tclearQueue: function( type ) {\n\t\t\treturn this.queue( type || \"fx\", [] );\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function( type, obj ) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function() {\n\t\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif ( typeof type !== \"string\" ) {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile ( i-- ) {\n\t\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add( resolve );\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise( obj );\n\t\t}\n\t} );\n\tvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\n\tvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\n\tvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n\tvar isHidden = function( elem, el ) {\n\n\t\t\t// isHidden might be called from jQuery#filter function;\n\t\t\t// in that case, element will be second argument\n\t\t\telem = el || elem;\n\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t\t};\n\n\n\n\tfunction adjustCSS( elem, prop, valueParts, tween ) {\n\t\tvar adjusted,\n\t\t\tscale = 1,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction() { return tween.cur(); } :\n\t\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\t\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\tdo {\n\n\t\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t// Adjust and apply\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t\t} while (\n\t\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t\t);\n\t\t}\n\n\t\tif ( valueParts ) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[ 1 ] ?\n\t\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t\t+valueParts[ 2 ];\n\t\t\tif ( tween ) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\tvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\n\tvar rtagName = ( /<([\\w:-]+)/ );\n\n\tvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n\t// We have to close these tags to support XHTML (#13200)\n\tvar wrapMap = {\n\n\t\t// Support: IE9\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n\t// Support: IE9\n\twrapMap.optgroup = wrapMap.option;\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\n\tfunction getAll( context, tag ) {\n\n\t\t// Support: IE9-11+\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\t\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t\t[];\n\n\t\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\t\tjQuery.merge( [ context ], ret ) :\n\t\t\tret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval( elems, refElements ) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[ i ],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[ 0 ];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\t\tif ( ignored ) {\n\t\t\t\t\tignored.push( elem );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\t( function() {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\t\tinput = document.createElement( \"input\" );\n\n\t\t// Support: Android 4.0-4.3, Safari<=5.1\n\t\t// Check state lost if the name is set (#11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\t\tinput.setAttribute( \"type\", \"radio\" );\n\t\tinput.setAttribute( \"checked\", \"checked\" );\n\t\tinput.setAttribute( \"name\", \"t\" );\n\n\t\tdiv.appendChild( input );\n\n\t\t// Support: Safari<=5.1, Android<4.2\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t\t// Support: IE<=11+\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\t} )();\n\n\n\tvar\n\t\trkeyEvent = /^key/,\n\t\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\t\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\t// Support: IE9\n\t// See #13393 for more info\n\tfunction safeActiveElement() {\n\t\ttry {\n\t\t\treturn document.activeElement;\n\t\t} catch ( err ) { }\n\t}\n\n\tfunction on( elem, types, selector, data, fn, one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn elem.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t} );\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function( elem, types, handler, data, selector ) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get( elem );\n\n\t\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\t\tif ( !elemData ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif ( handler.handler ) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif ( !handler.guid ) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif ( !( events = elemData.events ) ) {\n\t\t\t\tevents = elemData.events = {};\n\t\t\t}\n\t\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\t\tt = types.length;\n\t\t\twhile ( t-- ) {\n\t\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\t\ttype = origType = tmp[ 1 ];\n\t\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif ( !type ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend( {\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t\t}, handleObjIn );\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif ( !special.setup ||\n\t\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( special.add ) {\n\t\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif ( selector ) {\n\t\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push( handleObj );\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[ type ] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\t\tt = types.length;\n\t\t\twhile ( t-- ) {\n\t\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\t\ttype = origType = tmp[ 1 ];\n\t\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif ( !type ) {\n\t\t\t\t\tfor ( type in events ) {\n\t\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\t\thandlers = events[ type ] || [];\n\t\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[ type ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function( event ) {\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( event );\n\n\t\t\tvar i, j, ret, matched, handleObj,\n\t\t\t\thandlerQueue = [],\n\t\t\t\targs = slice.call( arguments ),\n\t\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[ 0 ] = event;\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif ( special.postDispatch ) {\n\t\t\t\tspecial.postDispatch.call( this, event );\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function( event, handlers ) {\n\t\t\tvar i, matches, sel, handleObj,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Support (at least): Chrome, IE9\n\t\t\t// Find delegate handlers\n\t\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t\t//\n\t\t\t// Support: Firefox<=42+\n\t\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\t\tmatches = [];\n\t\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tif ( delegateCount < handlers.length ) {\n\t\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\t// Includes some event props shared by KeyEvent and MouseEvent\n\t\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\t\tfixHooks: {},\n\n\t\tkeyHooks: {\n\t\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\t\tfilter: function( event, original ) {\n\n\t\t\t\t// Add which for key events\n\t\t\t\tif ( event.which == null ) {\n\t\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t\t}\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t},\n\n\t\tmouseHooks: {\n\t\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\t\tfilter: function( event, original ) {\n\t\t\t\tvar eventDoc, doc, body,\n\t\t\t\t\tbutton = original.button;\n\n\t\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t\t}\n\n\t\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t\t// Note: button is not normalized, so don't use it\n\t\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t\t}\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t},\n\n\t\tfix: function( event ) {\n\t\t\tif ( event[ jQuery.expando ] ) {\n\t\t\t\treturn event;\n\t\t\t}\n\n\t\t\t// Create a writable copy of the event object and normalize some properties\n\t\t\tvar i, prop, copy,\n\t\t\t\ttype = event.type,\n\t\t\t\toriginalEvent = event,\n\t\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\t\tif ( !fixHook ) {\n\t\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t\t{};\n\t\t\t}\n\t\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\t\tevent = new jQuery.Event( originalEvent );\n\n\t\t\ti = copy.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tprop = copy[ i ];\n\t\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t\t}\n\n\t\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t\t// All events should have a target; Cordova deviceready doesn't\n\t\t\tif ( !event.target ) {\n\t\t\t\tevent.target = document;\n\t\t\t}\n\n\t\t\t// Support: Safari 6.0+, Chrome<28\n\t\t\t// Target should not be a text node (#504, #13143)\n\t\t\tif ( event.target.nodeType === 3 ) {\n\t\t\t\tevent.target = event.target.parentNode;\n\t\t\t}\n\n\t\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tfocus: {\n\n\t\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\t\ttrigger: function() {\n\t\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdelegateType: \"focusin\"\n\t\t\t},\n\t\t\tblur: {\n\t\t\t\ttrigger: function() {\n\t\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\t\tthis.blur();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdelegateType: \"focusout\"\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\t\ttrigger: function() {\n\t\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\t\tthis.click();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t\t_default: function( event ) {\n\t\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.removeEvent = function( elem, type, handle ) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle );\n\t\t}\n\t};\n\n\tjQuery.Event = function( src, props ) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif ( !( this instanceof jQuery.Event ) ) {\n\t\t\treturn new jQuery.Event( src, props );\n\t\t}\n\n\t\t// Event object\n\t\tif ( src && src.type ) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t\t// Support: Android<4.0\n\t\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif ( props ) {\n\t\t\tjQuery.extend( this, props );\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t\t// Mark it as fixed\n\t\tthis[ jQuery.expando ] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function() {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif ( e && !this.isSimulated ) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function() {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif ( e && !this.isSimulated ) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function() {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif ( e && !this.isSimulated ) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://code.google.com/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each( {\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function( orig, fix ) {\n\t\tjQuery.event.special[ orig ] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function( event ) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t} );\n\n\tjQuery.fn.extend( {\n\t\ton: function( types, selector, data, fn ) {\n\t\t\treturn on( this, types, selector, data, fn );\n\t\t},\n\t\tone: function( types, selector, data, fn ) {\n\t\t\treturn on( this, types, selector, data, fn, 1 );\n\t\t},\n\t\toff: function( types, selector, fn ) {\n\t\t\tvar handleObj, type;\n\t\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor ( type in types ) {\n\t\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif ( fn === false ) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each( function() {\n\t\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t\t} );\n\t\t}\n\t} );\n\n\n\tvar\n\t\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t\t// Support: IE 10-11, Edge 10240+\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\t\trscriptTypeMasked = /^true\\/(.*)/,\n\t\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n\t// Manipulating tables requires a tbody\n\tfunction manipulationTarget( elem, content ) {\n\t\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\t\telem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript( elem ) {\n\t\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript( elem ) {\n\t\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\t\tif ( match ) {\n\t\t\telem.type = match[ 1 ];\n\t\t} else {\n\t\t\telem.removeAttribute( \"type\" );\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent( src, dest ) {\n\t\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\t\tif ( dest.nodeType !== 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif ( dataPriv.hasData( src ) ) {\n\t\t\tpdataOld = dataPriv.access( src );\n\t\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif ( events ) {\n\t\t\t\tdelete pdataCur.handle;\n\t\t\t\tpdataCur.events = {};\n\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif ( dataUser.hasData( src ) ) {\n\t\t\tudataOld = dataUser.access( src );\n\t\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\t\tdataUser.set( dest, udataCur );\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput( src, dest ) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\t\tdest.checked = src.checked;\n\n\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip( collection, args, callback, ignored ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[ 0 ],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\t\treturn collection.each( function( index ) {\n\t\t\t\tvar self = collection.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tdomManip( self, args, callback, ignored );\n\t\t\t} );\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif ( first || ignored ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove( elem, selector, keepData ) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t\t}\n\n\t\t\tif ( node.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild( node );\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend( {\n\t\thtmlPrefilter: function( html ) {\n\t\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t\t},\n\n\t\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode( true ),\n\t\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll( clone );\n\t\t\t\tsrcElements = getAll( elem );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif ( dataAndEvents ) {\n\t\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll( clone, \"script\" );\n\t\t\tif ( destElements.length > 0 ) {\n\t\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function( elems ) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\tjQuery.fn.extend( {\n\n\t\t// Keep domManip exposed until 3.0 (gh-2225)\n\t\tdomManip: domManip,\n\n\t\tdetach: function( selector ) {\n\t\t\treturn remove( this, selector, true );\n\t\t},\n\n\t\tremove: function( selector ) {\n\t\t\treturn remove( this, selector );\n\t\t},\n\n\t\ttext: function( value ) {\n\t\t\treturn access( this, function( value ) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text( this ) :\n\t\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t}, null, value, arguments.length );\n\t\t},\n\n\t\tappend: function() {\n\t\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\t\ttarget.appendChild( elem );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\tprepend: function() {\n\t\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\tbefore: function() {\n\t\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\t\tif ( this.parentNode ) {\n\t\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\tafter: function() {\n\t\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\t\tif ( this.parentNode ) {\n\t\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\tempty: function() {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map( function() {\n\t\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t\t} );\n\t\t},\n\n\t\thtml: function( value ) {\n\t\t\treturn access( this, function( value ) {\n\t\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch ( e ) {}\n\t\t\t\t}\n\n\t\t\t\tif ( elem ) {\n\t\t\t\t\tthis.empty().append( value );\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length );\n\t\t},\n\n\t\treplaceWith: function() {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\t\tif ( parent ) {\n\t\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Force callback invocation\n\t\t\t}, ignored );\n\t\t}\n\t} );\n\n\tjQuery.each( {\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function( name, original ) {\n\t\tjQuery.fn[ name ] = function( selector ) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery( selector ),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor ( ; i <= last; i++ ) {\n\t\t\t\telems = i === last ? this : this.clone( true );\n\t\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t\t// Support: QtWebKit\n\t\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\t\tpush.apply( ret, elems.get() );\n\t\t\t}\n\n\t\t\treturn this.pushStack( ret );\n\t\t};\n\t} );\n\n\n\tvar iframe,\n\t\telemdisplay = {\n\n\t\t\t// Support: Firefox\n\t\t\t// We have to pre-define these values for FF (#10227)\n\t\t\tHTML: \"block\",\n\t\t\tBODY: \"block\"\n\t\t};\n\n\t/**\n\t * Retrieve the actual display of a element\n\t * @param {String} name nodeName of the element\n\t * @param {Object} doc Document object\n\t */\n\n\t// Called only from within defaultDisplay\n\tfunction actualDisplay( name, doc ) {\n\t\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t\t// We don't have any data stored on the element,\n\t\t// so use \"detach\" method as fast way to get rid of the element\n\t\telem.detach();\n\n\t\treturn display;\n\t}\n\n\t/**\n\t * Try to determine the default display value of an element\n\t * @param {String} nodeName\n\t */\n\tfunction defaultDisplay( nodeName ) {\n\t\tvar doc = document,\n\t\t\tdisplay = elemdisplay[ nodeName ];\n\n\t\tif ( !display ) {\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t\t// If the simple way fails, read from inside an iframe\n\t\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t\t// Use the already-created iframe if possible\n\t\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t\t// Support: IE\n\t\t\t\tdoc.write();\n\t\t\t\tdoc.close();\n\n\t\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\t\tiframe.detach();\n\t\t\t}\n\n\t\t\t// Store the correct default display\n\t\t\telemdisplay[ nodeName ] = display;\n\t\t}\n\n\t\treturn display;\n\t}\n\tvar rmargin = ( /^margin/ );\n\n\tvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\n\tvar getStyles = function( elem ) {\n\n\t\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t\t// IE throws on elements created in popups\n\t\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\t\tif ( !view || !view.opener ) {\n\t\t\t\tview = window;\n\t\t\t}\n\n\t\t\treturn view.getComputedStyle( elem );\n\t\t};\n\n\tvar swap = function( elem, options, callback, args ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.apply( elem, args || [] );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar documentElement = document.documentElement;\n\n\n\n\t( function() {\n\t\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement( \"div\" ),\n\t\t\tdiv = document.createElement( \"div\" );\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif ( !div.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE9-11+\n\t\t// Style of cloned element affects source element cloned (#8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\t\"padding:0;margin-top:1px;position:absolute\";\n\t\tcontainer.appendChild( div );\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\t\t\tdiv.style.cssText =\n\n\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\t\"position:relative;display:block;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"top:1%;width:50%\";\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tvar divStyle = window.getComputedStyle( div );\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.marginRight = \"50%\";\n\t\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t}\n\n\t\tjQuery.extend( support, {\n\t\t\tpixelPosition: function() {\n\n\t\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t\t// No need to check if the test was already performed, though.\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\tboxSizingReliable: function() {\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputeStyleTests();\n\t\t\t\t}\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelMarginRight: function() {\n\n\t\t\t\t// Support: Android 4.0-4.3\n\t\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputeStyleTests();\n\t\t\t\t}\n\t\t\t\treturn pixelMarginRightVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function() {\n\n\t\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputeStyleTests();\n\t\t\t\t}\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\treliableMarginRight: function() {\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\t\tvar ret,\n\t\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t\t// Support: Android 2.3\n\t\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\t\tdiv.style.width = \"1px\";\n\t\t\t\tdocumentElement.appendChild( container );\n\n\t\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\t\tdocumentElement.removeChild( container );\n\t\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} );\n\t} )();\n\n\n\tfunction curCSS( elem, name, computed ) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t\t// Support: Opera 12.1x only\n\t\t// Fall back to style even without computed\n\t\t// computed is undefined for elems on document fragments\n\t\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// Support: IE9\n\t\t// getPropertyValue is only needed for .css('filter') (#12537)\n\t\tif ( computed ) {\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function() {\n\t\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t},\n\n\t\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\t\temptyStyle = document.createElement( \"div\" ).style;\n\n\t// Return a css property mapped to a potentially vendor prefixed property\n\tfunction vendorPropName( name ) {\n\n\t\t// Shortcut for names that are not vendor prefixed\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile ( i-- ) {\n\t\t\tname = cssPrefixes[ i ] + capName;\n\t\t\tif ( name in emptyStyle ) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setPositiveNumber( elem, value, subtract ) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec( value );\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\t\tvalue;\n\t}\n\n\tfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\t\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t\t// If we already have the right measurement, avoid augmentation\n\t\t\t4 :\n\n\t\t\t// Otherwise initialize for horizontal or vertical properties\n\t\t\tname === \"width\" ? 1 : 0,\n\n\t\t\tval = 0;\n\n\t\tfor ( ; i < 4; i += 2 ) {\n\n\t\t\t// Both box models exclude margin, so add it if we want it\n\t\t\tif ( extra === \"margin\" ) {\n\t\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\tif ( isBorderBox ) {\n\n\t\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\t\tif ( extra === \"content\" ) {\n\t\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t\t}\n\n\t\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// At this point, extra isn't content, so add padding\n\t\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn val;\n\t}\n\n\tfunction getWidthOrHeight( elem, name, extra ) {\n\n\t\t// Start with offset property, which is equivalent to the border-box value\n\t\tvar valueIsBorderBox = true,\n\t\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\t\tstyles = getStyles( elem ),\n\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\t\tif ( val <= 0 || val == null ) {\n\n\t\t\t// Fall back to computed then uncomputed css if necessary\n\t\t\tval = curCSS( elem, name, styles );\n\t\t\tif ( val < 0 || val == null ) {\n\t\t\t\tval = elem.style[ name ];\n\t\t\t}\n\n\t\t\t// Computed unit is not pixels. Stop here and return.\n\t\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\t// Check for style in case a browser which returns unreliable values\n\t\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t\t// Normalize \"\", auto, and prepare for extra\n\t\t\tval = parseFloat( val ) || 0;\n\t\t}\n\n\t\t// Use the active box-sizing model to add/subtract irrelevant styles\n\t\treturn ( val +\n\t\t\taugmentWidthOrHeight(\n\t\t\t\telem,\n\t\t\t\tname,\n\t\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tfunction showHide( elements, show ) {\n\t\tvar display, elem, hidden,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\telem = elements[ index ];\n\t\t\tif ( !elem.style ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\t\tdisplay = elem.style.display;\n\t\t\tif ( show ) {\n\n\t\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t\t// being hidden by cascaded rules or not\n\t\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\n\t\t\t\t// Set elements which have been overridden with display: none\n\t\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t\t// for such an element\n\t\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thidden = isHidden( elem );\n\n\t\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\t\tdataPriv.set(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of most of the elements in a second loop\n\t\t// to avoid the constant reflow\n\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\telem = elements[ index ];\n\t\t\tif ( !elem.style ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.extend( {\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function( elem, computed ) {\n\t\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\t\"animationIterationCount\": true,\n\t\t\t\"columnCount\": true,\n\t\t\t\"fillOpacity\": true,\n\t\t\t\"flexGrow\": true,\n\t\t\t\"flexShrink\": true,\n\t\t\t\"fontWeight\": true,\n\t\t\t\"lineHeight\": true,\n\t\t\t\"opacity\": true,\n\t\t\t\"order\": true,\n\t\t\t\"orphans\": true,\n\t\t\t\"widows\": true,\n\t\t\t\"zIndex\": true,\n\t\t\t\"zoom\": true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {\n\t\t\t\"float\": \"cssFloat\"\n\t\t},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function( elem, name, value, extra ) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = jQuery.camelCase( name ),\n\t\t\t\tstyle = elem.style;\n\n\t\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif ( value !== undefined ) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t\t// Fixes bug #9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\t\tif ( value == null || value !== value ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\tif ( type === \"number\" ) {\n\t\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t\t}\n\n\t\t\t\t// Support: IE9-11+\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[ name ];\n\t\t\t}\n\t\t},\n\n\t\tcss: function( elem, name, extra, styles ) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = jQuery.camelCase( name );\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\t\tval = hooks.get( elem, true, extra );\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif ( val === undefined ) {\n\t\t\t\tval = curCSS( elem, name, styles );\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\t\tval = cssNormalTransform[ name ];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif ( extra === \"\" || extra ) {\n\t\t\t\tnum = parseFloat( val );\n\t\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t\t}\n\t\t\treturn val;\n\t\t}\n\t} );\n\n\tjQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\t\tjQuery.cssHooks[ name ] = {\n\t\t\tget: function( elem, computed, extra ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t\t} ) :\n\t\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function( elem, value, extra ) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\t\tstyles\n\t\t\t\t\t);\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\t\telem.style[ name ] = value;\n\t\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t\t}\n\t\t};\n\t} );\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t\t} )\n\t\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// Support: Android 2.3\n\tjQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each( {\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function( prefix, suffix ) {\n\t\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\t\texpand: function( value ) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif ( !rmargin.test( prefix ) ) {\n\t\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t\t}\n\t} );\n\n\tjQuery.fn.extend( {\n\t\tcss: function( name, value ) {\n\t\t\treturn access( this, function( elem, name, value ) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\t\tstyles = getStyles( elem );\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\t\tjQuery.css( elem, name );\n\t\t\t}, name, value, arguments.length > 1 );\n\t\t},\n\t\tshow: function() {\n\t\t\treturn showHide( this, true );\n\t\t},\n\t\thide: function() {\n\t\t\treturn showHide( this );\n\t\t},\n\t\ttoggle: function( state ) {\n\t\t\tif ( typeof state === \"boolean\" ) {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( isHidden( this ) ) {\n\t\t\t\t\tjQuery( this ).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery( this ).hide();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\n\n\tfunction Tween( elem, options, prop, end, easing ) {\n\t\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t\t},\n\t\tcur: function() {\n\t\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get( this ) :\n\t\t\t\tTween.propHooks._default.get( this );\n\t\t},\n\t\trun: function( percent ) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\t\tif ( this.options.duration ) {\n\t\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\t\tif ( this.options.step ) {\n\t\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t\t}\n\n\t\t\tif ( hooks && hooks.set ) {\n\t\t\t\thooks.set( this );\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set( this );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function( tween ) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function( tween ) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE9\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function( tween ) {\n\t\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function( p ) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function( p ) {\n\t\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back Compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, timerId,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout( function() {\n\t\t\tfxNow = undefined;\n\t\t} );\n\t\treturn ( fxNow = jQuery.now() );\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx( type, includeWidth ) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\t\twhich = cssExpand[ i ];\n\t\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t\t}\n\n\t\tif ( includeWidth ) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween( value, prop, animation ) {\n\t\tvar tween,\n\t\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter( elem, props, opts ) {\n\t\t/* jshint validthis: true */\n\t\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHidden( elem ),\n\t\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t\t// Handle queue: false promises\n\t\tif ( !opts.queue ) {\n\t\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\t\tif ( hooks.unqueued == null ) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function() {\n\t\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always( function() {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always( function() {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\n\t\t// Height/width overflow pass\n\t\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t\t// Make sure that nothing sneaks out\n\t\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t\t// change the overflow attribute when overflowX and\n\t\t\t// overflowY are set to the same value\n\t\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t\t// Set display property to inline-block for height/width\n\t\t\t// animations on inline elements that are having width/height animated\n\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t\t// Test default display if display is currently \"none\"\n\t\t\tcheckDisplay = display === \"none\" ?\n\t\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\n\t\tif ( opts.overflow ) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always( function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t} );\n\t\t}\n\n\t\t// show/hide pass\n\t\tfor ( prop in props ) {\n\t\t\tvalue = props[ prop ];\n\t\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\t\tdelete props[ prop ];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\t\thidden = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t\t// Any non-fx value stops us from restoring the original display value\n\t\t\t} else {\n\t\t\t\tdisplay = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t\t}\n\n\t\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\t\t\tif ( hidden ) {\n\t\t\t\tjQuery( elem ).show();\n\t\t\t} else {\n\t\t\t\tanim.done( function() {\n\t\t\t\t\tjQuery( elem ).hide();\n\t\t\t\t} );\n\t\t\t}\n\t\t\tanim.done( function() {\n\t\t\t\tvar prop;\n\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\t\tif ( hidden ) {\n\t\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\t\tstyle.display = display;\n\t\t}\n\t}\n\n\tfunction propFilter( props, specialEasing ) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor ( index in props ) {\n\t\t\tname = jQuery.camelCase( index );\n\t\t\teasing = specialEasing[ name ];\n\t\t\tvalue = props[ index ];\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\teasing = value[ 1 ];\n\t\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t\t}\n\n\t\t\tif ( index !== name ) {\n\t\t\t\tprops[ name ] = value;\n\t\t\t\tdelete props[ index ];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[ name ];\n\t\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\t\tvalue = hooks.expand( value );\n\t\t\t\tdelete props[ name ];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor ( index in value ) {\n\t\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[ name ] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation( elem, properties, options ) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t} ),\n\t\t\ttick = function() {\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t\t// Support: Android 2.3\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t\tif ( percent < 1 && length ) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tanimation = deferred.promise( {\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\t\topts: jQuery.extend( true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options ),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function( gotoEnd ) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif ( stopped ) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t} ),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter( props, animation.opts.specialEasing );\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\t\tif ( result ) {\n\t\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map( props, createTween, animation );\n\n\t\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\t\tanimation.opts.start.call( elem, animation );\n\t\t}\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend( tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t} )\n\t\t);\n\n\t\t// attach callbacks from options\n\t\treturn animation.progress( animation.opts.progress )\n\t\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t\t.fail( animation.opts.fail )\n\t\t\t.always( animation.opts.always );\n\t}\n\n\tjQuery.Animation = jQuery.extend( Animation, {\n\t\ttweeners: {\n\t\t\t\"*\": [ function( prop, value ) {\n\t\t\t\tvar tween = this.createTween( prop, value );\n\t\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\t\treturn tween;\n\t\t\t} ]\n\t\t},\n\n\t\ttweener: function( props, callback ) {\n\t\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [ \"*\" ];\n\t\t\t} else {\n\t\t\t\tprops = props.match( rnotwhite );\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tprop = props[ index ];\n\t\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [ defaultPrefilter ],\n\n\t\tprefilter: function( callback, prepend ) {\n\t\t\tif ( prepend ) {\n\t\t\t\tAnimation.prefilters.unshift( callback );\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push( callback );\n\t\t\t}\n\t\t}\n\t} );\n\n\tjQuery.speed = function( speed, easing, fn ) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tjQuery.isFunction( speed ) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t\t};\n\n\t\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif ( opt.queue == null || opt.queue === true ) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function() {\n\t\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\t\topt.old.call( this );\n\t\t\t}\n\n\t\t\tif ( opt.queue ) {\n\t\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend( {\n\t\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t\t},\n\t\tanimate: function( prop, speed, easing, callback ) {\n\t\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\t\tdoAnimation = function() {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\t\tanim.stop( true );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each( doAnimation ) :\n\t\t\t\tthis.queue( optall.queue, doAnimation );\n\t\t},\n\t\tstop: function( type, clearQueue, gotoEnd ) {\n\t\t\tvar stopQueue = function( hooks ) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop( gotoEnd );\n\t\t\t};\n\n\t\t\tif ( typeof type !== \"string\" ) {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif ( clearQueue && type !== false ) {\n\t\t\t\tthis.queue( type || \"fx\", [] );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\t\tif ( index ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor ( index in data ) {\n\t\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\t\tfinish: function( type ) {\n\t\t\tif ( type !== false ) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each( function() {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\t\thooks.stop.call( this, true );\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t} );\n\t\t}\n\t} );\n\n\tjQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\t\tvar cssFn = jQuery.fn[ name ];\n\t\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply( this, arguments ) :\n\t\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t\t};\n\t} );\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each( {\n\t\tslideDown: genFx( \"show\" ),\n\t\tslideUp: genFx( \"hide\" ),\n\t\tslideToggle: genFx( \"toggle\" ),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function( name, props ) {\n\t\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\t\treturn this.animate( props, speed, easing, callback );\n\t\t};\n\t} );\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function() {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = jQuery.now();\n\n\t\tfor ( ; i < timers.length; i++ ) {\n\t\t\ttimer = timers[ i ];\n\n\t\t\t// Checks the timer has not already been removed\n\t\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\t\ttimers.splice( i--, 1 );\n\t\t\t}\n\t\t}\n\n\t\tif ( !timers.length ) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function( timer ) {\n\t\tjQuery.timers.push( timer );\n\t\tif ( timer() ) {\n\t\t\tjQuery.fx.start();\n\t\t} else {\n\t\t\tjQuery.timers.pop();\n\t\t}\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function() {\n\t\tif ( !timerId ) {\n\t\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t\t}\n\t};\n\n\tjQuery.fx.stop = function() {\n\t\twindow.clearInterval( timerId );\n\n\t\ttimerId = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tjQuery.fn.delay = function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = window.setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\twindow.clearTimeout( timeout );\n\t\t\t};\n\t\t} );\n\t};\n\n\n\t( function() {\n\t\tvar input = document.createElement( \"input\" ),\n\t\t\tselect = document.createElement( \"select\" ),\n\t\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: iOS<=5.1, Android<=4.2+\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE<=11+\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: Android<=2.3\n\t\t// Options inside disabled selects are incorrectly marked as disabled\n\t\tselect.disabled = true;\n\t\tsupport.optDisabled = !opt.disabled;\n\n\t\t// Support: IE<=11+\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t} )();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend( {\n\t\tattr: function( name, value ) {\n\t\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t\t},\n\n\t\tremoveAttr: function( name ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tjQuery.removeAttr( this, name );\n\t\t\t} );\n\t\t}\n\t} );\n\n\tjQuery.extend( {\n\t\tattr: function( elem, name, value ) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\t\treturn jQuery.prop( elem, name, value );\n\t\t\t}\n\n\t\t\t// All attributes are lowercase\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\t\tname = name.toLowerCase();\n\t\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t\t}\n\n\t\t\tif ( value !== undefined ) {\n\t\t\t\tif ( value === null ) {\n\t\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function( elem, value ) {\n\t\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function( elem, value ) {\n\t\t\tvar name, propName,\n\t\t\t\ti = 0,\n\t\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t\telem.removeAttribute( name );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( value === false ) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, name );\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\tjQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\t\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\t\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\t\tvar ret, handle;\n\t\t\tif ( !isXML ) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[ name ];\n\t\t\t\tattrHandle[ name ] = ret;\n\t\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[ name ] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t} );\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend( {\n\t\tprop: function( name, value ) {\n\t\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t\t},\n\n\t\tremoveProp: function( name ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t\t} );\n\t\t}\n\t} );\n\n\tjQuery.extend( {\n\t\tprop: function( elem, name, value ) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\t\thooks = jQuery.propHooks[ name ];\n\t\t\t}\n\n\t\t\tif ( value !== undefined ) {\n\t\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn ( elem[ name ] = value );\n\t\t\t}\n\n\t\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[ name ];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function( elem ) {\n\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\t\treturn tabindex ?\n\t\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t\t-1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t} );\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\tif ( !support.optSelected ) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function( elem ) {\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each( [\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function() {\n\t\tjQuery.propFix[ this.toLowerCase() ] = this;\n\t} );\n\n\n\n\n\tvar rclass = /[\\t\\r\\n\\f]/g;\n\n\tfunction getClass( elem ) {\n\t\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n\t}\n\n\tjQuery.fn.extend( {\n\t\taddClass: function( value ) {\n\t\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\t\treturn this.each( function( j ) {\n\t\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( typeof value === \"string\" && value ) {\n\t\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\t\tcurValue = getClass( elem );\n\t\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\t\tif ( cur ) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function( value ) {\n\t\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\t\treturn this.each( function( j ) {\n\t\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( !arguments.length ) {\n\t\t\t\treturn this.attr( \"class\", \"\" );\n\t\t\t}\n\n\t\t\tif ( typeof value === \"string\" && value ) {\n\t\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\t\tif ( cur ) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function( value, stateVal ) {\n\t\t\tvar type = typeof value;\n\n\t\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t\t}\n\n\t\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\t\treturn this.each( function( i ) {\n\t\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\tvar className, i, self, classNames;\n\n\t\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\ti = 0;\n\t\t\t\t\tself = jQuery( this );\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\t\tclassName = getClass( this );\n\t\t\t\t\tif ( className ) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\thasClass: function( selector ) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\n\n\n\tvar rreturn = /\\r/g,\n\t\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\n\tjQuery.fn.extend( {\n\t\tval: function( value ) {\n\t\t\tvar hooks, ret, isFunction,\n\t\t\t\telem = this[ 0 ];\n\n\t\t\tif ( !arguments.length ) {\n\t\t\t\tif ( elem ) {\n\t\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\t\tif ( hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tvar val;\n\n\t\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif ( val == null ) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\n\tjQuery.extend( {\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function( elem ) {\n\n\t\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function( elem ) {\n\t\t\t\t\tvar value, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\t\tmax :\n\t\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function( elem, value ) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\toption = options[ i ];\n\t\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\t\tjQuery.valHooks[ this ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif ( !support.checkOn ) {\n\t\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t} );\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\n\tjQuery.extend( jQuery.event, {\n\n\t\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\t\teventPath = [ elem || document ],\n\t\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\t\tcur = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split( \".\" );\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[ jQuery.expando ] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join( \".\" );\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif ( !event.target ) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[ event ] :\n\t\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\t\teventPath.push( cur );\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\t\tif ( handle ) {\n\t\t\t\t\thandle.apply( cur, data );\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ ontype ];\n\t\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\t\tif ( ( !special._default ||\n\t\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function( type, elem, event ) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t}\n\n\t} );\n\n\tjQuery.fn.extend( {\n\n\t\ttrigger: function( type, data ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tjQuery.event.trigger( type, data, this );\n\t\t\t} );\n\t\t},\n\t\ttriggerHandler: function( type, data ) {\n\t\t\tvar elem = this[ 0 ];\n\t\t\tif ( elem ) {\n\t\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t\t}\n\t\t}\n\t} );\n\n\n\tjQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\t\tfunction( i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t} );\n\n\tjQuery.fn.extend( {\n\t\thover: function( fnOver, fnOut ) {\n\t\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t\t}\n\t} );\n\n\n\n\n\tsupport.focusin = \"onfocusin\" in window;\n\n\n\t// Support: Firefox\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome, Safari\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\n\tif ( !support.focusin ) {\n\t\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\t\tvar handler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t\t};\n\n\t\t\tjQuery.event.special[ fix ] = {\n\t\t\t\tsetup: function() {\n\t\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\t\tif ( !attaches ) {\n\t\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t\t},\n\t\t\t\tteardown: function() {\n\t\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\t\tif ( !attaches ) {\n\t\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t} );\n\t}\n\tvar location = window.location;\n\n\tvar nonce = jQuery.now();\n\n\tvar rquery = ( /\\?/ );\n\n\n\n\t// Support: Android 2.3\n\t// Workaround failure to string-cast null input\n\tjQuery.parseJSON = function( data ) {\n\t\treturn JSON.parse( data + \"\" );\n\t};\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function( data ) {\n\t\tvar xml;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE9\n\t\ttry {\n\t\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t\t} catch ( e ) {\n\t\t\txml = undefined;\n\t\t}\n\n\t\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar\n\t\trhash = /#.*$/,\n\t\trts = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// #7653, #8125, #8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat( \"*\" ),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement( \"a\" );\n\t\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports( structure ) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function( dataTypeExpression, func ) {\n\n\t\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = ( structure === transports );\n\n\t\tfunction inspect( dataType ) {\n\t\t\tvar selected;\n\t\t\tinspected[ dataType ] = true;\n\t\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\t\treturn false;\n\t\t\t\t} else if ( seekingTransport ) {\n\t\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes #9887\n\tfunction ajaxExtend( target, src ) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor ( key in src ) {\n\t\t\tif ( src[ key ] !== undefined ) {\n\t\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t\t}\n\t\t}\n\t\tif ( deep ) {\n\t\t\tjQuery.extend( true, target, deep );\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\t\tdataTypes.shift();\n\t\t\tif ( ct === undefined ) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif ( ct ) {\n\t\t\tfor ( type in contents ) {\n\t\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\t\tdataTypes.unshift( type );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif ( dataTypes[ 0 ] in responses ) {\n\t\t\tfinalDataType = dataTypes[ 0 ];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor ( type in responses ) {\n\t\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( !firstDataType ) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif ( finalDataType ) {\n\t\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\t\tdataTypes.unshift( finalDataType );\n\t\t\t}\n\t\t\treturn responses[ finalDataType ];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif ( dataTypes[ 1 ] ) {\n\t\t\tfor ( conv in s.converters ) {\n\t\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile ( current ) {\n\n\t\t\tif ( s.responseFields[ current ] ) {\n\t\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif ( !conv ) {\n\t\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend( {\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function( target, settings ) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\t\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t\t// Main method\n\t\tajax: function( url, options ) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif ( typeof url === \"object\" ) {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// The jqXHR state\n\t\t\t\tstate = 0,\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\t\tjqXHR.success = jqXHR.done;\n\t\t\tjqXHR.error = jqXHR.fail;\n\n\t\t\t// Remove hash character (#7531: and string promotion)\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t\t// Alias method option to type as per ticket #12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif ( s.crossDomain == null ) {\n\t\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE8-11+\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\tcacheURL = s.url;\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif ( !s.hasContent ) {\n\n\t\t\t\t// If data is available, append data to url\n\t\t\t\tif ( s.data ) {\n\t\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add anti-cache in url if needed\n\t\t\t\tif ( s.cache === false ) {\n\t\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif ( s.ifModified ) {\n\t\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t\t}\n\t\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\t\ts.accepts[ \"*\" ]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor ( i in s.headers ) {\n\t\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif ( s.beforeSend &&\n\t\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t\t}\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif ( !transport ) {\n\t\t\t\tdone( -1, \"No Transport\" );\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif ( fireGlobals ) {\n\t\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t\t}, s.timeout );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tstate = 1;\n\t\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Propagate exception as error if not done\n\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Called once\n\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// State is \"done\" now\n\t\t\t\tstate = 2;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif ( timeoutTimer ) {\n\t\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif ( responses ) {\n\t\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif ( isSuccess ) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif ( isSuccess ) {\n\t\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode( statusCode );\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif ( fireGlobals ) {\n\t\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\t\tif ( fireGlobals ) {\n\t\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function( url, data, callback ) {\n\t\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t\t},\n\n\t\tgetScript: function( url, callback ) {\n\t\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t\t}\n\t} );\n\n\tjQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\t\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t\t};\n\t} );\n\n\n\tjQuery._evalUrl = function( url ) {\n\t\treturn jQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\t\t\t\"throws\": true\n\t\t} );\n\t};\n\n\n\tjQuery.fn.extend( {\n\t\twrapAll: function( html ) {\n\t\t\tvar wrap;\n\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\treturn this.each( function( i ) {\n\t\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( this[ 0 ] ) {\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\twrap.map( function() {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t} ).append( this );\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function( html ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\treturn this.each( function( i ) {\n\t\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\tvar self = jQuery( this ),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif ( contents.length ) {\n\t\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append( html );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\twrap: function( html ) {\n\t\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t\t} );\n\t\t},\n\n\t\tunwrap: function() {\n\t\t\treturn this.parent().each( function() {\n\t\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t\t}\n\t\t\t} ).end();\n\t\t}\n\t} );\n\n\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\treturn !jQuery.expr.filters.visible( elem );\n\t};\n\tjQuery.expr.filters.visible = function( elem ) {\n\n\t\t// Support: Opera <= 12.12\n\t\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t\t// Use OR instead of AND as the element is not visible if either is true\n\t\t// See tickets #10406 and #13132\n\t\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n\t};\n\n\n\n\n\tvar r20 = /%20/g,\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams( prefix, obj, traditional, add ) {\n\t\tvar name;\n\n\t\tif ( jQuery.isArray( obj ) ) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each( obj, function( i, v ) {\n\t\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd( prefix, v );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} );\n\n\t\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t\t// Serialize object item.\n\t\t\tfor ( name in obj ) {\n\t\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd( prefix, obj );\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function( a, traditional ) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function( key, value ) {\n\n\t\t\t\t// If value is a function, invoke it and return its value\n\t\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t\t};\n\n\t\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\t\tif ( traditional === undefined ) {\n\t\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each( a, function() {\n\t\t\t\tadd( this.name, this.value );\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor ( prefix in a ) {\n\t\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join( \"&\" ).replace( r20, \"+\" );\n\t};\n\n\tjQuery.fn.extend( {\n\t\tserialize: function() {\n\t\t\treturn jQuery.param( this.serializeArray() );\n\t\t},\n\t\tserializeArray: function() {\n\t\t\treturn this.map( function() {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t\t} )\n\t\t\t.filter( function() {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t\t} )\n\t\t\t.map( function( i, elem ) {\n\t\t\t\tvar val = jQuery( this ).val();\n\n\t\t\t\treturn val == null ?\n\t\t\t\t\tnull :\n\t\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t} ).get();\n\t\t}\n\t} );\n\n\n\tjQuery.ajaxSettings.xhr = function() {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch ( e ) {}\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t\t// File protocol always yields status code 0, assume 200\n\t\t\t0: 200,\n\n\t\t\t// Support: IE9\n\t\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t\t1223: 204\n\t\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport( function( options ) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function( type ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t\t// Support: IE9\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} );\n\n\n\n\n\t// Install script dataType\n\tjQuery.ajaxSetup( {\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function( text ) {\n\t\t\t\tjQuery.globalEval( text );\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t} );\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter( \"script\", function( s ) {\n\t\tif ( s.cache === undefined ) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif ( s.crossDomain ) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t} );\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport( \"script\", function( s ) {\n\n\t\t// This transport only deals with cross domain requests\n\t\tif ( s.crossDomain ) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function( _, complete ) {\n\t\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\t\tsrc: s.url\n\t\t\t\t\t} ).on(\n\t\t\t\t\t\t\"load error\",\n\t\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t\t},\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} );\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup( {\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function() {\n\t\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\t\tthis[ callback ] = true;\n\t\t\treturn callback;\n\t\t}\n\t} );\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif ( jsonProp ) {\n\t\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t\t} else if ( s.jsonp !== false ) {\n\t\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[ \"script json\" ] = function() {\n\t\t\t\tif ( !responseContainer ) {\n\t\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t\t}\n\t\t\t\treturn responseContainer[ 0 ];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[ callbackName ];\n\t\t\twindow[ callbackName ] = function() {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always( function() {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif ( overwritten === undefined ) {\n\t\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t} );\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t} );\n\n\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function( data, context, keepScripts ) {\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\t\tcontext = context || document;\n\n\t\tvar parsed = rsingleTag.exec( data ),\n\t\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif ( parsed ) {\n\t\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t\t}\n\n\t\tparsed = buildFragment( [ data ], context, scripts );\n\n\t\tif ( scripts && scripts.length ) {\n\t\t\tjQuery( scripts ).remove();\n\t\t}\n\n\t\treturn jQuery.merge( [], parsed.childNodes );\n\t};\n\n\n\t// Keep a copy of the old load method\n\tvar _load = jQuery.fn.load;\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function( url, params, callback ) {\n\t\tif ( typeof url !== \"string\" && _load ) {\n\t\t\treturn _load.apply( this, arguments );\n\t\t}\n\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf( \" \" );\n\n\t\tif ( off > -1 ) {\n\t\t\tselector = jQuery.trim( url.slice( off ) );\n\t\t\turl = url.slice( 0, off );\n\t\t}\n\n\t\t// If it's a function\n\t\tif ( jQuery.isFunction( params ) ) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t// Otherwise, build a param string\n\t\t} else if ( params && typeof params === \"object\" ) {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif ( self.length > 0 ) {\n\t\t\tjQuery.ajax( {\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t} ).done( function( responseText ) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html( selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText );\n\n\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t// but they are ignored because response was set above.\n\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\t\tself.each( function() {\n\t\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\t// Attach a bunch of functions for handling common AJAX events\n\tjQuery.each( [\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function( i, type ) {\n\t\tjQuery.fn[ type ] = function( fn ) {\n\t\t\treturn this.on( type, fn );\n\t\t};\n\t} );\n\n\n\n\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t} ).length;\n\t};\n\n\n\n\n\t/**\n\t * Gets a window from an element\n\t */\n\tfunction getWindow( elem ) {\n\t\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n\t}\n\n\tjQuery.offset = {\n\t\tsetOffset: function( elem, options, i ) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\t\tcurElem = jQuery( elem ),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif ( position === \"static\" ) {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif ( calculatePosition ) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t\t}\n\n\t\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t\t}\n\n\t\t\tif ( options.top != null ) {\n\t\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t\t}\n\t\t\tif ( options.left != null ) {\n\t\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t\t}\n\n\t\t\tif ( \"using\" in options ) {\n\t\t\t\toptions.using.call( elem, props );\n\n\t\t\t} else {\n\t\t\t\tcurElem.css( props );\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend( {\n\t\toffset: function( options ) {\n\t\t\tif ( arguments.length ) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t\t} );\n\t\t\t}\n\n\t\t\tvar docElem, win,\n\t\t\t\telem = this[ 0 ],\n\t\t\t\tbox = { top: 0, left: 0 },\n\t\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\t\tif ( !doc ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdocElem = doc.documentElement;\n\n\t\t\t// Make sure it's not a disconnected DOM node\n\t\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\t\treturn box;\n\t\t\t}\n\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t\twin = getWindow( doc );\n\t\t\treturn {\n\t\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t\t};\n\t\t},\n\n\t\tposition: function() {\n\t\t\tif ( !this[ 0 ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset,\n\t\t\t\telem = this[ 0 ],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t\t// because it is its only offset parent\n\t\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\n\t\t\t\t// Get *real* offsetParent\n\t\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t\t// Get correct offsets\n\t\t\t\toffset = this.offset();\n\t\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t\t}\n\n\t\t\t\t// Add offsetParent borders\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function() {\n\t\t\treturn this.map( function() {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t} );\n\t\t}\n\t} );\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[ method ] = function( val ) {\n\t\t\treturn access( this, function( elem, method, val ) {\n\t\t\t\tvar win = getWindow( elem );\n\n\t\t\t\tif ( val === undefined ) {\n\t\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t\t}\n\n\t\t\t\tif ( win ) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[ method ] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length );\n\t\t};\n\t} );\n\n\t// Support: Safari<7-8+, Chrome<37-44+\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\t\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\t\tfunction( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t} );\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\t\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\t\tfunction( defaultExtra, funcName ) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t\t};\n\t\t} );\n\t} );\n\n\n\tjQuery.fn.extend( {\n\n\t\tbind: function( types, data, fn ) {\n\t\t\treturn this.on( types, null, data, fn );\n\t\t},\n\t\tunbind: function( types, fn ) {\n\t\t\treturn this.off( types, null, fn );\n\t\t},\n\n\t\tdelegate: function( selector, types, data, fn ) {\n\t\t\treturn this.on( types, selector, data, fn );\n\t\t},\n\t\tundelegate: function( selector, types, fn ) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off( selector, \"**\" ) :\n\t\t\t\tthis.off( types, selector || \"**\", fn );\n\t\t},\n\t\tsize: function() {\n\t\t\treturn this.length;\n\t\t}\n\t} );\n\n\tjQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif ( true ) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\t\t\treturn jQuery;\n\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t}\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (#13566)\n\tif ( !noGlobal ) {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\treturn jQuery;\n\t}));\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {module.exports = global[\"moment\"] = __webpack_require__(7);\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(module) {//! moment.js\n\t//! version : 2.18.1\n\t//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n\t//! license : MIT\n\t//! momentjs.com\n\n\t;(function (global, factory) {\n\t    true ? module.exports = factory() :\n\t    typeof define === 'function' && define.amd ? define(factory) :\n\t    global.moment = factory()\n\t}(this, (function () { 'use strict';\n\n\tvar hookCallback;\n\n\tfunction hooks () {\n\t    return hookCallback.apply(null, arguments);\n\t}\n\n\t// This is done to register the method called with moment()\n\t// without creating circular dependencies.\n\tfunction setHookCallback (callback) {\n\t    hookCallback = callback;\n\t}\n\n\tfunction isArray(input) {\n\t    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n\t}\n\n\tfunction isObject(input) {\n\t    // IE8 will treat undefined and null as object if it wasn't for\n\t    // input != null\n\t    return input != null && Object.prototype.toString.call(input) === '[object Object]';\n\t}\n\n\tfunction isObjectEmpty(obj) {\n\t    var k;\n\t    for (k in obj) {\n\t        // even if its not own property I'd still call it non-empty\n\t        return false;\n\t    }\n\t    return true;\n\t}\n\n\tfunction isUndefined(input) {\n\t    return input === void 0;\n\t}\n\n\tfunction isNumber(input) {\n\t    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n\t}\n\n\tfunction isDate(input) {\n\t    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n\t}\n\n\tfunction map(arr, fn) {\n\t    var res = [], i;\n\t    for (i = 0; i < arr.length; ++i) {\n\t        res.push(fn(arr[i], i));\n\t    }\n\t    return res;\n\t}\n\n\tfunction hasOwnProp(a, b) {\n\t    return Object.prototype.hasOwnProperty.call(a, b);\n\t}\n\n\tfunction extend(a, b) {\n\t    for (var i in b) {\n\t        if (hasOwnProp(b, i)) {\n\t            a[i] = b[i];\n\t        }\n\t    }\n\n\t    if (hasOwnProp(b, 'toString')) {\n\t        a.toString = b.toString;\n\t    }\n\n\t    if (hasOwnProp(b, 'valueOf')) {\n\t        a.valueOf = b.valueOf;\n\t    }\n\n\t    return a;\n\t}\n\n\tfunction createUTC (input, format, locale, strict) {\n\t    return createLocalOrUTC(input, format, locale, strict, true).utc();\n\t}\n\n\tfunction defaultParsingFlags() {\n\t    // We need to deep clone this object.\n\t    return {\n\t        empty           : false,\n\t        unusedTokens    : [],\n\t        unusedInput     : [],\n\t        overflow        : -2,\n\t        charsLeftOver   : 0,\n\t        nullInput       : false,\n\t        invalidMonth    : null,\n\t        invalidFormat   : false,\n\t        userInvalidated : false,\n\t        iso             : false,\n\t        parsedDateParts : [],\n\t        meridiem        : null,\n\t        rfc2822         : false,\n\t        weekdayMismatch : false\n\t    };\n\t}\n\n\tfunction getParsingFlags(m) {\n\t    if (m._pf == null) {\n\t        m._pf = defaultParsingFlags();\n\t    }\n\t    return m._pf;\n\t}\n\n\tvar some;\n\tif (Array.prototype.some) {\n\t    some = Array.prototype.some;\n\t} else {\n\t    some = function (fun) {\n\t        var t = Object(this);\n\t        var len = t.length >>> 0;\n\n\t        for (var i = 0; i < len; i++) {\n\t            if (i in t && fun.call(this, t[i], i, t)) {\n\t                return true;\n\t            }\n\t        }\n\n\t        return false;\n\t    };\n\t}\n\n\tvar some$1 = some;\n\n\tfunction isValid(m) {\n\t    if (m._isValid == null) {\n\t        var flags = getParsingFlags(m);\n\t        var parsedParts = some$1.call(flags.parsedDateParts, function (i) {\n\t            return i != null;\n\t        });\n\t        var isNowValid = !isNaN(m._d.getTime()) &&\n\t            flags.overflow < 0 &&\n\t            !flags.empty &&\n\t            !flags.invalidMonth &&\n\t            !flags.invalidWeekday &&\n\t            !flags.nullInput &&\n\t            !flags.invalidFormat &&\n\t            !flags.userInvalidated &&\n\t            (!flags.meridiem || (flags.meridiem && parsedParts));\n\n\t        if (m._strict) {\n\t            isNowValid = isNowValid &&\n\t                flags.charsLeftOver === 0 &&\n\t                flags.unusedTokens.length === 0 &&\n\t                flags.bigHour === undefined;\n\t        }\n\n\t        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n\t            m._isValid = isNowValid;\n\t        }\n\t        else {\n\t            return isNowValid;\n\t        }\n\t    }\n\t    return m._isValid;\n\t}\n\n\tfunction createInvalid (flags) {\n\t    var m = createUTC(NaN);\n\t    if (flags != null) {\n\t        extend(getParsingFlags(m), flags);\n\t    }\n\t    else {\n\t        getParsingFlags(m).userInvalidated = true;\n\t    }\n\n\t    return m;\n\t}\n\n\t// Plugins that add properties should also add the key here (null value),\n\t// so we can properly clone ourselves.\n\tvar momentProperties = hooks.momentProperties = [];\n\n\tfunction copyConfig(to, from) {\n\t    var i, prop, val;\n\n\t    if (!isUndefined(from._isAMomentObject)) {\n\t        to._isAMomentObject = from._isAMomentObject;\n\t    }\n\t    if (!isUndefined(from._i)) {\n\t        to._i = from._i;\n\t    }\n\t    if (!isUndefined(from._f)) {\n\t        to._f = from._f;\n\t    }\n\t    if (!isUndefined(from._l)) {\n\t        to._l = from._l;\n\t    }\n\t    if (!isUndefined(from._strict)) {\n\t        to._strict = from._strict;\n\t    }\n\t    if (!isUndefined(from._tzm)) {\n\t        to._tzm = from._tzm;\n\t    }\n\t    if (!isUndefined(from._isUTC)) {\n\t        to._isUTC = from._isUTC;\n\t    }\n\t    if (!isUndefined(from._offset)) {\n\t        to._offset = from._offset;\n\t    }\n\t    if (!isUndefined(from._pf)) {\n\t        to._pf = getParsingFlags(from);\n\t    }\n\t    if (!isUndefined(from._locale)) {\n\t        to._locale = from._locale;\n\t    }\n\n\t    if (momentProperties.length > 0) {\n\t        for (i = 0; i < momentProperties.length; i++) {\n\t            prop = momentProperties[i];\n\t            val = from[prop];\n\t            if (!isUndefined(val)) {\n\t                to[prop] = val;\n\t            }\n\t        }\n\t    }\n\n\t    return to;\n\t}\n\n\tvar updateInProgress = false;\n\n\t// Moment prototype object\n\tfunction Moment(config) {\n\t    copyConfig(this, config);\n\t    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n\t    if (!this.isValid()) {\n\t        this._d = new Date(NaN);\n\t    }\n\t    // Prevent infinite loop in case updateOffset creates new moment\n\t    // objects.\n\t    if (updateInProgress === false) {\n\t        updateInProgress = true;\n\t        hooks.updateOffset(this);\n\t        updateInProgress = false;\n\t    }\n\t}\n\n\tfunction isMoment (obj) {\n\t    return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n\t}\n\n\tfunction absFloor (number) {\n\t    if (number < 0) {\n\t        // -0 -> 0\n\t        return Math.ceil(number) || 0;\n\t    } else {\n\t        return Math.floor(number);\n\t    }\n\t}\n\n\tfunction toInt(argumentForCoercion) {\n\t    var coercedNumber = +argumentForCoercion,\n\t        value = 0;\n\n\t    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n\t        value = absFloor(coercedNumber);\n\t    }\n\n\t    return value;\n\t}\n\n\t// compare two arrays, return the number of differences\n\tfunction compareArrays(array1, array2, dontConvert) {\n\t    var len = Math.min(array1.length, array2.length),\n\t        lengthDiff = Math.abs(array1.length - array2.length),\n\t        diffs = 0,\n\t        i;\n\t    for (i = 0; i < len; i++) {\n\t        if ((dontConvert && array1[i] !== array2[i]) ||\n\t            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n\t            diffs++;\n\t        }\n\t    }\n\t    return diffs + lengthDiff;\n\t}\n\n\tfunction warn(msg) {\n\t    if (hooks.suppressDeprecationWarnings === false &&\n\t            (typeof console !==  'undefined') && console.warn) {\n\t        console.warn('Deprecation warning: ' + msg);\n\t    }\n\t}\n\n\tfunction deprecate(msg, fn) {\n\t    var firstTime = true;\n\n\t    return extend(function () {\n\t        if (hooks.deprecationHandler != null) {\n\t            hooks.deprecationHandler(null, msg);\n\t        }\n\t        if (firstTime) {\n\t            var args = [];\n\t            var arg;\n\t            for (var i = 0; i < arguments.length; i++) {\n\t                arg = '';\n\t                if (typeof arguments[i] === 'object') {\n\t                    arg += '\\n[' + i + '] ';\n\t                    for (var key in arguments[0]) {\n\t                        arg += key + ': ' + arguments[0][key] + ', ';\n\t                    }\n\t                    arg = arg.slice(0, -2); // Remove trailing comma and space\n\t                } else {\n\t                    arg = arguments[i];\n\t                }\n\t                args.push(arg);\n\t            }\n\t            warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n\t            firstTime = false;\n\t        }\n\t        return fn.apply(this, arguments);\n\t    }, fn);\n\t}\n\n\tvar deprecations = {};\n\n\tfunction deprecateSimple(name, msg) {\n\t    if (hooks.deprecationHandler != null) {\n\t        hooks.deprecationHandler(name, msg);\n\t    }\n\t    if (!deprecations[name]) {\n\t        warn(msg);\n\t        deprecations[name] = true;\n\t    }\n\t}\n\n\thooks.suppressDeprecationWarnings = false;\n\thooks.deprecationHandler = null;\n\n\tfunction isFunction(input) {\n\t    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n\t}\n\n\tfunction set (config) {\n\t    var prop, i;\n\t    for (i in config) {\n\t        prop = config[i];\n\t        if (isFunction(prop)) {\n\t            this[i] = prop;\n\t        } else {\n\t            this['_' + i] = prop;\n\t        }\n\t    }\n\t    this._config = config;\n\t    // Lenient ordinal parsing accepts just a number in addition to\n\t    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n\t    // TODO: Remove \"ordinalParse\" fallback in next major release.\n\t    this._dayOfMonthOrdinalParseLenient = new RegExp(\n\t        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n\t            '|' + (/\\d{1,2}/).source);\n\t}\n\n\tfunction mergeConfigs(parentConfig, childConfig) {\n\t    var res = extend({}, parentConfig), prop;\n\t    for (prop in childConfig) {\n\t        if (hasOwnProp(childConfig, prop)) {\n\t            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n\t                res[prop] = {};\n\t                extend(res[prop], parentConfig[prop]);\n\t                extend(res[prop], childConfig[prop]);\n\t            } else if (childConfig[prop] != null) {\n\t                res[prop] = childConfig[prop];\n\t            } else {\n\t                delete res[prop];\n\t            }\n\t        }\n\t    }\n\t    for (prop in parentConfig) {\n\t        if (hasOwnProp(parentConfig, prop) &&\n\t                !hasOwnProp(childConfig, prop) &&\n\t                isObject(parentConfig[prop])) {\n\t            // make sure changes to properties don't modify parent config\n\t            res[prop] = extend({}, res[prop]);\n\t        }\n\t    }\n\t    return res;\n\t}\n\n\tfunction Locale(config) {\n\t    if (config != null) {\n\t        this.set(config);\n\t    }\n\t}\n\n\tvar keys;\n\n\tif (Object.keys) {\n\t    keys = Object.keys;\n\t} else {\n\t    keys = function (obj) {\n\t        var i, res = [];\n\t        for (i in obj) {\n\t            if (hasOwnProp(obj, i)) {\n\t                res.push(i);\n\t            }\n\t        }\n\t        return res;\n\t    };\n\t}\n\n\tvar keys$1 = keys;\n\n\tvar defaultCalendar = {\n\t    sameDay : '[Today at] LT',\n\t    nextDay : '[Tomorrow at] LT',\n\t    nextWeek : 'dddd [at] LT',\n\t    lastDay : '[Yesterday at] LT',\n\t    lastWeek : '[Last] dddd [at] LT',\n\t    sameElse : 'L'\n\t};\n\n\tfunction calendar (key, mom, now) {\n\t    var output = this._calendar[key] || this._calendar['sameElse'];\n\t    return isFunction(output) ? output.call(mom, now) : output;\n\t}\n\n\tvar defaultLongDateFormat = {\n\t    LTS  : 'h:mm:ss A',\n\t    LT   : 'h:mm A',\n\t    L    : 'MM/DD/YYYY',\n\t    LL   : 'MMMM D, YYYY',\n\t    LLL  : 'MMMM D, YYYY h:mm A',\n\t    LLLL : 'dddd, MMMM D, YYYY h:mm A'\n\t};\n\n\tfunction longDateFormat (key) {\n\t    var format = this._longDateFormat[key],\n\t        formatUpper = this._longDateFormat[key.toUpperCase()];\n\n\t    if (format || !formatUpper) {\n\t        return format;\n\t    }\n\n\t    this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n\t        return val.slice(1);\n\t    });\n\n\t    return this._longDateFormat[key];\n\t}\n\n\tvar defaultInvalidDate = 'Invalid date';\n\n\tfunction invalidDate () {\n\t    return this._invalidDate;\n\t}\n\n\tvar defaultOrdinal = '%d';\n\tvar defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n\tfunction ordinal (number) {\n\t    return this._ordinal.replace('%d', number);\n\t}\n\n\tvar defaultRelativeTime = {\n\t    future : 'in %s',\n\t    past   : '%s ago',\n\t    s  : 'a few seconds',\n\t    ss : '%d seconds',\n\t    m  : 'a minute',\n\t    mm : '%d minutes',\n\t    h  : 'an hour',\n\t    hh : '%d hours',\n\t    d  : 'a day',\n\t    dd : '%d days',\n\t    M  : 'a month',\n\t    MM : '%d months',\n\t    y  : 'a year',\n\t    yy : '%d years'\n\t};\n\n\tfunction relativeTime (number, withoutSuffix, string, isFuture) {\n\t    var output = this._relativeTime[string];\n\t    return (isFunction(output)) ?\n\t        output(number, withoutSuffix, string, isFuture) :\n\t        output.replace(/%d/i, number);\n\t}\n\n\tfunction pastFuture (diff, output) {\n\t    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n\t    return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n\t}\n\n\tvar aliases = {};\n\n\tfunction addUnitAlias (unit, shorthand) {\n\t    var lowerCase = unit.toLowerCase();\n\t    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n\t}\n\n\tfunction normalizeUnits(units) {\n\t    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n\t}\n\n\tfunction normalizeObjectUnits(inputObject) {\n\t    var normalizedInput = {},\n\t        normalizedProp,\n\t        prop;\n\n\t    for (prop in inputObject) {\n\t        if (hasOwnProp(inputObject, prop)) {\n\t            normalizedProp = normalizeUnits(prop);\n\t            if (normalizedProp) {\n\t                normalizedInput[normalizedProp] = inputObject[prop];\n\t            }\n\t        }\n\t    }\n\n\t    return normalizedInput;\n\t}\n\n\tvar priorities = {};\n\n\tfunction addUnitPriority(unit, priority) {\n\t    priorities[unit] = priority;\n\t}\n\n\tfunction getPrioritizedUnits(unitsObj) {\n\t    var units = [];\n\t    for (var u in unitsObj) {\n\t        units.push({unit: u, priority: priorities[u]});\n\t    }\n\t    units.sort(function (a, b) {\n\t        return a.priority - b.priority;\n\t    });\n\t    return units;\n\t}\n\n\tfunction makeGetSet (unit, keepTime) {\n\t    return function (value) {\n\t        if (value != null) {\n\t            set$1(this, unit, value);\n\t            hooks.updateOffset(this, keepTime);\n\t            return this;\n\t        } else {\n\t            return get(this, unit);\n\t        }\n\t    };\n\t}\n\n\tfunction get (mom, unit) {\n\t    return mom.isValid() ?\n\t        mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n\t}\n\n\tfunction set$1 (mom, unit, value) {\n\t    if (mom.isValid()) {\n\t        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n\t    }\n\t}\n\n\t// MOMENTS\n\n\tfunction stringGet (units) {\n\t    units = normalizeUnits(units);\n\t    if (isFunction(this[units])) {\n\t        return this[units]();\n\t    }\n\t    return this;\n\t}\n\n\n\tfunction stringSet (units, value) {\n\t    if (typeof units === 'object') {\n\t        units = normalizeObjectUnits(units);\n\t        var prioritized = getPrioritizedUnits(units);\n\t        for (var i = 0; i < prioritized.length; i++) {\n\t            this[prioritized[i].unit](units[prioritized[i].unit]);\n\t        }\n\t    } else {\n\t        units = normalizeUnits(units);\n\t        if (isFunction(this[units])) {\n\t            return this[units](value);\n\t        }\n\t    }\n\t    return this;\n\t}\n\n\tfunction zeroFill(number, targetLength, forceSign) {\n\t    var absNumber = '' + Math.abs(number),\n\t        zerosToFill = targetLength - absNumber.length,\n\t        sign = number >= 0;\n\t    return (sign ? (forceSign ? '+' : '') : '-') +\n\t        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n\t}\n\n\tvar formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n\tvar localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n\tvar formatFunctions = {};\n\n\tvar formatTokenFunctions = {};\n\n\t// token:    'M'\n\t// padded:   ['MM', 2]\n\t// ordinal:  'Mo'\n\t// callback: function () { this.month() + 1 }\n\tfunction addFormatToken (token, padded, ordinal, callback) {\n\t    var func = callback;\n\t    if (typeof callback === 'string') {\n\t        func = function () {\n\t            return this[callback]();\n\t        };\n\t    }\n\t    if (token) {\n\t        formatTokenFunctions[token] = func;\n\t    }\n\t    if (padded) {\n\t        formatTokenFunctions[padded[0]] = function () {\n\t            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n\t        };\n\t    }\n\t    if (ordinal) {\n\t        formatTokenFunctions[ordinal] = function () {\n\t            return this.localeData().ordinal(func.apply(this, arguments), token);\n\t        };\n\t    }\n\t}\n\n\tfunction removeFormattingTokens(input) {\n\t    if (input.match(/\\[[\\s\\S]/)) {\n\t        return input.replace(/^\\[|\\]$/g, '');\n\t    }\n\t    return input.replace(/\\\\/g, '');\n\t}\n\n\tfunction makeFormatFunction(format) {\n\t    var array = format.match(formattingTokens), i, length;\n\n\t    for (i = 0, length = array.length; i < length; i++) {\n\t        if (formatTokenFunctions[array[i]]) {\n\t            array[i] = formatTokenFunctions[array[i]];\n\t        } else {\n\t            array[i] = removeFormattingTokens(array[i]);\n\t        }\n\t    }\n\n\t    return function (mom) {\n\t        var output = '', i;\n\t        for (i = 0; i < length; i++) {\n\t            output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n\t        }\n\t        return output;\n\t    };\n\t}\n\n\t// format date using native date object\n\tfunction formatMoment(m, format) {\n\t    if (!m.isValid()) {\n\t        return m.localeData().invalidDate();\n\t    }\n\n\t    format = expandFormat(format, m.localeData());\n\t    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n\t    return formatFunctions[format](m);\n\t}\n\n\tfunction expandFormat(format, locale) {\n\t    var i = 5;\n\n\t    function replaceLongDateFormatTokens(input) {\n\t        return locale.longDateFormat(input) || input;\n\t    }\n\n\t    localFormattingTokens.lastIndex = 0;\n\t    while (i >= 0 && localFormattingTokens.test(format)) {\n\t        format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n\t        localFormattingTokens.lastIndex = 0;\n\t        i -= 1;\n\t    }\n\n\t    return format;\n\t}\n\n\tvar match1         = /\\d/;            //       0 - 9\n\tvar match2         = /\\d\\d/;          //      00 - 99\n\tvar match3         = /\\d{3}/;         //     000 - 999\n\tvar match4         = /\\d{4}/;         //    0000 - 9999\n\tvar match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n\tvar match1to2      = /\\d\\d?/;         //       0 - 99\n\tvar match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n\tvar match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n\tvar match1to3      = /\\d{1,3}/;       //       0 - 999\n\tvar match1to4      = /\\d{1,4}/;       //       0 - 9999\n\tvar match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n\tvar matchUnsigned  = /\\d+/;           //       0 - inf\n\tvar matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n\tvar matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n\tvar matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n\tvar matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n\t// any word (or two) characters or numbers including two/three word month in arabic.\n\t// includes scottish gaelic two word and hyphenated months\n\tvar matchWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n\n\n\tvar regexes = {};\n\n\tfunction addRegexToken (token, regex, strictRegex) {\n\t    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n\t        return (isStrict && strictRegex) ? strictRegex : regex;\n\t    };\n\t}\n\n\tfunction getParseRegexForToken (token, config) {\n\t    if (!hasOwnProp(regexes, token)) {\n\t        return new RegExp(unescapeFormat(token));\n\t    }\n\n\t    return regexes[token](config._strict, config._locale);\n\t}\n\n\t// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n\tfunction unescapeFormat(s) {\n\t    return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n\t        return p1 || p2 || p3 || p4;\n\t    }));\n\t}\n\n\tfunction regexEscape(s) {\n\t    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t}\n\n\tvar tokens = {};\n\n\tfunction addParseToken (token, callback) {\n\t    var i, func = callback;\n\t    if (typeof token === 'string') {\n\t        token = [token];\n\t    }\n\t    if (isNumber(callback)) {\n\t        func = function (input, array) {\n\t            array[callback] = toInt(input);\n\t        };\n\t    }\n\t    for (i = 0; i < token.length; i++) {\n\t        tokens[token[i]] = func;\n\t    }\n\t}\n\n\tfunction addWeekParseToken (token, callback) {\n\t    addParseToken(token, function (input, array, config, token) {\n\t        config._w = config._w || {};\n\t        callback(input, config._w, config, token);\n\t    });\n\t}\n\n\tfunction addTimeToArrayFromToken(token, input, config) {\n\t    if (input != null && hasOwnProp(tokens, token)) {\n\t        tokens[token](input, config._a, config, token);\n\t    }\n\t}\n\n\tvar YEAR = 0;\n\tvar MONTH = 1;\n\tvar DATE = 2;\n\tvar HOUR = 3;\n\tvar MINUTE = 4;\n\tvar SECOND = 5;\n\tvar MILLISECOND = 6;\n\tvar WEEK = 7;\n\tvar WEEKDAY = 8;\n\n\tvar indexOf;\n\n\tif (Array.prototype.indexOf) {\n\t    indexOf = Array.prototype.indexOf;\n\t} else {\n\t    indexOf = function (o) {\n\t        // I know\n\t        var i;\n\t        for (i = 0; i < this.length; ++i) {\n\t            if (this[i] === o) {\n\t                return i;\n\t            }\n\t        }\n\t        return -1;\n\t    };\n\t}\n\n\tvar indexOf$1 = indexOf;\n\n\tfunction daysInMonth(year, month) {\n\t    return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n\t}\n\n\t// FORMATTING\n\n\taddFormatToken('M', ['MM', 2], 'Mo', function () {\n\t    return this.month() + 1;\n\t});\n\n\taddFormatToken('MMM', 0, 0, function (format) {\n\t    return this.localeData().monthsShort(this, format);\n\t});\n\n\taddFormatToken('MMMM', 0, 0, function (format) {\n\t    return this.localeData().months(this, format);\n\t});\n\n\t// ALIASES\n\n\taddUnitAlias('month', 'M');\n\n\t// PRIORITY\n\n\taddUnitPriority('month', 8);\n\n\t// PARSING\n\n\taddRegexToken('M',    match1to2);\n\taddRegexToken('MM',   match1to2, match2);\n\taddRegexToken('MMM',  function (isStrict, locale) {\n\t    return locale.monthsShortRegex(isStrict);\n\t});\n\taddRegexToken('MMMM', function (isStrict, locale) {\n\t    return locale.monthsRegex(isStrict);\n\t});\n\n\taddParseToken(['M', 'MM'], function (input, array) {\n\t    array[MONTH] = toInt(input) - 1;\n\t});\n\n\taddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n\t    var month = config._locale.monthsParse(input, token, config._strict);\n\t    // if we didn't find a month name, mark the date as invalid.\n\t    if (month != null) {\n\t        array[MONTH] = month;\n\t    } else {\n\t        getParsingFlags(config).invalidMonth = input;\n\t    }\n\t});\n\n\t// LOCALES\n\n\tvar MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n\tvar defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n\tfunction localeMonths (m, format) {\n\t    if (!m) {\n\t        return isArray(this._months) ? this._months :\n\t            this._months['standalone'];\n\t    }\n\t    return isArray(this._months) ? this._months[m.month()] :\n\t        this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n\t}\n\n\tvar defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n\tfunction localeMonthsShort (m, format) {\n\t    if (!m) {\n\t        return isArray(this._monthsShort) ? this._monthsShort :\n\t            this._monthsShort['standalone'];\n\t    }\n\t    return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n\t        this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n\t}\n\n\tfunction handleStrictParse(monthName, format, strict) {\n\t    var i, ii, mom, llc = monthName.toLocaleLowerCase();\n\t    if (!this._monthsParse) {\n\t        // this is not used\n\t        this._monthsParse = [];\n\t        this._longMonthsParse = [];\n\t        this._shortMonthsParse = [];\n\t        for (i = 0; i < 12; ++i) {\n\t            mom = createUTC([2000, i]);\n\t            this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n\t            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n\t        }\n\t    }\n\n\t    if (strict) {\n\t        if (format === 'MMM') {\n\t            ii = indexOf$1.call(this._shortMonthsParse, llc);\n\t            return ii !== -1 ? ii : null;\n\t        } else {\n\t            ii = indexOf$1.call(this._longMonthsParse, llc);\n\t            return ii !== -1 ? ii : null;\n\t        }\n\t    } else {\n\t        if (format === 'MMM') {\n\t            ii = indexOf$1.call(this._shortMonthsParse, llc);\n\t            if (ii !== -1) {\n\t                return ii;\n\t            }\n\t            ii = indexOf$1.call(this._longMonthsParse, llc);\n\t            return ii !== -1 ? ii : null;\n\t        } else {\n\t            ii = indexOf$1.call(this._longMonthsParse, llc);\n\t            if (ii !== -1) {\n\t                return ii;\n\t            }\n\t            ii = indexOf$1.call(this._shortMonthsParse, llc);\n\t            return ii !== -1 ? ii : null;\n\t        }\n\t    }\n\t}\n\n\tfunction localeMonthsParse (monthName, format, strict) {\n\t    var i, mom, regex;\n\n\t    if (this._monthsParseExact) {\n\t        return handleStrictParse.call(this, monthName, format, strict);\n\t    }\n\n\t    if (!this._monthsParse) {\n\t        this._monthsParse = [];\n\t        this._longMonthsParse = [];\n\t        this._shortMonthsParse = [];\n\t    }\n\n\t    // TODO: add sorting\n\t    // Sorting makes sure if one month (or abbr) is a prefix of another\n\t    // see sorting in computeMonthsParse\n\t    for (i = 0; i < 12; i++) {\n\t        // make the regex if we don't have it already\n\t        mom = createUTC([2000, i]);\n\t        if (strict && !this._longMonthsParse[i]) {\n\t            this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n\t            this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n\t        }\n\t        if (!strict && !this._monthsParse[i]) {\n\t            regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n\t            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n\t        }\n\t        // test the regex\n\t        if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n\t            return i;\n\t        } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n\t            return i;\n\t        } else if (!strict && this._monthsParse[i].test(monthName)) {\n\t            return i;\n\t        }\n\t    }\n\t}\n\n\t// MOMENTS\n\n\tfunction setMonth (mom, value) {\n\t    var dayOfMonth;\n\n\t    if (!mom.isValid()) {\n\t        // No op\n\t        return mom;\n\t    }\n\n\t    if (typeof value === 'string') {\n\t        if (/^\\d+$/.test(value)) {\n\t            value = toInt(value);\n\t        } else {\n\t            value = mom.localeData().monthsParse(value);\n\t            // TODO: Another silent failure?\n\t            if (!isNumber(value)) {\n\t                return mom;\n\t            }\n\t        }\n\t    }\n\n\t    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n\t    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n\t    return mom;\n\t}\n\n\tfunction getSetMonth (value) {\n\t    if (value != null) {\n\t        setMonth(this, value);\n\t        hooks.updateOffset(this, true);\n\t        return this;\n\t    } else {\n\t        return get(this, 'Month');\n\t    }\n\t}\n\n\tfunction getDaysInMonth () {\n\t    return daysInMonth(this.year(), this.month());\n\t}\n\n\tvar defaultMonthsShortRegex = matchWord;\n\tfunction monthsShortRegex (isStrict) {\n\t    if (this._monthsParseExact) {\n\t        if (!hasOwnProp(this, '_monthsRegex')) {\n\t            computeMonthsParse.call(this);\n\t        }\n\t        if (isStrict) {\n\t            return this._monthsShortStrictRegex;\n\t        } else {\n\t            return this._monthsShortRegex;\n\t        }\n\t    } else {\n\t        if (!hasOwnProp(this, '_monthsShortRegex')) {\n\t            this._monthsShortRegex = defaultMonthsShortRegex;\n\t        }\n\t        return this._monthsShortStrictRegex && isStrict ?\n\t            this._monthsShortStrictRegex : this._monthsShortRegex;\n\t    }\n\t}\n\n\tvar defaultMonthsRegex = matchWord;\n\tfunction monthsRegex (isStrict) {\n\t    if (this._monthsParseExact) {\n\t        if (!hasOwnProp(this, '_monthsRegex')) {\n\t            computeMonthsParse.call(this);\n\t        }\n\t        if (isStrict) {\n\t            return this._monthsStrictRegex;\n\t        } else {\n\t            return this._monthsRegex;\n\t        }\n\t    } else {\n\t        if (!hasOwnProp(this, '_monthsRegex')) {\n\t            this._monthsRegex = defaultMonthsRegex;\n\t        }\n\t        return this._monthsStrictRegex && isStrict ?\n\t            this._monthsStrictRegex : this._monthsRegex;\n\t    }\n\t}\n\n\tfunction computeMonthsParse () {\n\t    function cmpLenRev(a, b) {\n\t        return b.length - a.length;\n\t    }\n\n\t    var shortPieces = [], longPieces = [], mixedPieces = [],\n\t        i, mom;\n\t    for (i = 0; i < 12; i++) {\n\t        // make the regex if we don't have it already\n\t        mom = createUTC([2000, i]);\n\t        shortPieces.push(this.monthsShort(mom, ''));\n\t        longPieces.push(this.months(mom, ''));\n\t        mixedPieces.push(this.months(mom, ''));\n\t        mixedPieces.push(this.monthsShort(mom, ''));\n\t    }\n\t    // Sorting makes sure if one month (or abbr) is a prefix of another it\n\t    // will match the longer piece.\n\t    shortPieces.sort(cmpLenRev);\n\t    longPieces.sort(cmpLenRev);\n\t    mixedPieces.sort(cmpLenRev);\n\t    for (i = 0; i < 12; i++) {\n\t        shortPieces[i] = regexEscape(shortPieces[i]);\n\t        longPieces[i] = regexEscape(longPieces[i]);\n\t    }\n\t    for (i = 0; i < 24; i++) {\n\t        mixedPieces[i] = regexEscape(mixedPieces[i]);\n\t    }\n\n\t    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t    this._monthsShortRegex = this._monthsRegex;\n\t    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n\t    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n\t}\n\n\t// FORMATTING\n\n\taddFormatToken('Y', 0, 0, function () {\n\t    var y = this.year();\n\t    return y <= 9999 ? '' + y : '+' + y;\n\t});\n\n\taddFormatToken(0, ['YY', 2], 0, function () {\n\t    return this.year() % 100;\n\t});\n\n\taddFormatToken(0, ['YYYY',   4],       0, 'year');\n\taddFormatToken(0, ['YYYYY',  5],       0, 'year');\n\taddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n\t// ALIASES\n\n\taddUnitAlias('year', 'y');\n\n\t// PRIORITIES\n\n\taddUnitPriority('year', 1);\n\n\t// PARSING\n\n\taddRegexToken('Y',      matchSigned);\n\taddRegexToken('YY',     match1to2, match2);\n\taddRegexToken('YYYY',   match1to4, match4);\n\taddRegexToken('YYYYY',  match1to6, match6);\n\taddRegexToken('YYYYYY', match1to6, match6);\n\n\taddParseToken(['YYYYY', 'YYYYYY'], YEAR);\n\taddParseToken('YYYY', function (input, array) {\n\t    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n\t});\n\taddParseToken('YY', function (input, array) {\n\t    array[YEAR] = hooks.parseTwoDigitYear(input);\n\t});\n\taddParseToken('Y', function (input, array) {\n\t    array[YEAR] = parseInt(input, 10);\n\t});\n\n\t// HELPERS\n\n\tfunction daysInYear(year) {\n\t    return isLeapYear(year) ? 366 : 365;\n\t}\n\n\tfunction isLeapYear(year) {\n\t    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n\t}\n\n\t// HOOKS\n\n\thooks.parseTwoDigitYear = function (input) {\n\t    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n\t};\n\n\t// MOMENTS\n\n\tvar getSetYear = makeGetSet('FullYear', true);\n\n\tfunction getIsLeapYear () {\n\t    return isLeapYear(this.year());\n\t}\n\n\tfunction createDate (y, m, d, h, M, s, ms) {\n\t    // can't just apply() to create a date:\n\t    // https://stackoverflow.com/q/181348\n\t    var date = new Date(y, m, d, h, M, s, ms);\n\n\t    // the date constructor remaps years 0-99 to 1900-1999\n\t    if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n\t        date.setFullYear(y);\n\t    }\n\t    return date;\n\t}\n\n\tfunction createUTCDate (y) {\n\t    var date = new Date(Date.UTC.apply(null, arguments));\n\n\t    // the Date.UTC function remaps years 0-99 to 1900-1999\n\t    if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n\t        date.setUTCFullYear(y);\n\t    }\n\t    return date;\n\t}\n\n\t// start-of-first-week - start-of-year\n\tfunction firstWeekOffset(year, dow, doy) {\n\t    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n\t        fwd = 7 + dow - doy,\n\t        // first-week day local weekday -- which local weekday is fwd\n\t        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n\t    return -fwdlw + fwd - 1;\n\t}\n\n\t// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n\tfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n\t    var localWeekday = (7 + weekday - dow) % 7,\n\t        weekOffset = firstWeekOffset(year, dow, doy),\n\t        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n\t        resYear, resDayOfYear;\n\n\t    if (dayOfYear <= 0) {\n\t        resYear = year - 1;\n\t        resDayOfYear = daysInYear(resYear) + dayOfYear;\n\t    } else if (dayOfYear > daysInYear(year)) {\n\t        resYear = year + 1;\n\t        resDayOfYear = dayOfYear - daysInYear(year);\n\t    } else {\n\t        resYear = year;\n\t        resDayOfYear = dayOfYear;\n\t    }\n\n\t    return {\n\t        year: resYear,\n\t        dayOfYear: resDayOfYear\n\t    };\n\t}\n\n\tfunction weekOfYear(mom, dow, doy) {\n\t    var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n\t        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n\t        resWeek, resYear;\n\n\t    if (week < 1) {\n\t        resYear = mom.year() - 1;\n\t        resWeek = week + weeksInYear(resYear, dow, doy);\n\t    } else if (week > weeksInYear(mom.year(), dow, doy)) {\n\t        resWeek = week - weeksInYear(mom.year(), dow, doy);\n\t        resYear = mom.year() + 1;\n\t    } else {\n\t        resYear = mom.year();\n\t        resWeek = week;\n\t    }\n\n\t    return {\n\t        week: resWeek,\n\t        year: resYear\n\t    };\n\t}\n\n\tfunction weeksInYear(year, dow, doy) {\n\t    var weekOffset = firstWeekOffset(year, dow, doy),\n\t        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n\t    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n\t}\n\n\t// FORMATTING\n\n\taddFormatToken('w', ['ww', 2], 'wo', 'week');\n\taddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n\t// ALIASES\n\n\taddUnitAlias('week', 'w');\n\taddUnitAlias('isoWeek', 'W');\n\n\t// PRIORITIES\n\n\taddUnitPriority('week', 5);\n\taddUnitPriority('isoWeek', 5);\n\n\t// PARSING\n\n\taddRegexToken('w',  match1to2);\n\taddRegexToken('ww', match1to2, match2);\n\taddRegexToken('W',  match1to2);\n\taddRegexToken('WW', match1to2, match2);\n\n\taddWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n\t    week[token.substr(0, 1)] = toInt(input);\n\t});\n\n\t// HELPERS\n\n\t// LOCALES\n\n\tfunction localeWeek (mom) {\n\t    return weekOfYear(mom, this._week.dow, this._week.doy).week;\n\t}\n\n\tvar defaultLocaleWeek = {\n\t    dow : 0, // Sunday is the first day of the week.\n\t    doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t};\n\n\tfunction localeFirstDayOfWeek () {\n\t    return this._week.dow;\n\t}\n\n\tfunction localeFirstDayOfYear () {\n\t    return this._week.doy;\n\t}\n\n\t// MOMENTS\n\n\tfunction getSetWeek (input) {\n\t    var week = this.localeData().week(this);\n\t    return input == null ? week : this.add((input - week) * 7, 'd');\n\t}\n\n\tfunction getSetISOWeek (input) {\n\t    var week = weekOfYear(this, 1, 4).week;\n\t    return input == null ? week : this.add((input - week) * 7, 'd');\n\t}\n\n\t// FORMATTING\n\n\taddFormatToken('d', 0, 'do', 'day');\n\n\taddFormatToken('dd', 0, 0, function (format) {\n\t    return this.localeData().weekdaysMin(this, format);\n\t});\n\n\taddFormatToken('ddd', 0, 0, function (format) {\n\t    return this.localeData().weekdaysShort(this, format);\n\t});\n\n\taddFormatToken('dddd', 0, 0, function (format) {\n\t    return this.localeData().weekdays(this, format);\n\t});\n\n\taddFormatToken('e', 0, 0, 'weekday');\n\taddFormatToken('E', 0, 0, 'isoWeekday');\n\n\t// ALIASES\n\n\taddUnitAlias('day', 'd');\n\taddUnitAlias('weekday', 'e');\n\taddUnitAlias('isoWeekday', 'E');\n\n\t// PRIORITY\n\taddUnitPriority('day', 11);\n\taddUnitPriority('weekday', 11);\n\taddUnitPriority('isoWeekday', 11);\n\n\t// PARSING\n\n\taddRegexToken('d',    match1to2);\n\taddRegexToken('e',    match1to2);\n\taddRegexToken('E',    match1to2);\n\taddRegexToken('dd',   function (isStrict, locale) {\n\t    return locale.weekdaysMinRegex(isStrict);\n\t});\n\taddRegexToken('ddd',   function (isStrict, locale) {\n\t    return locale.weekdaysShortRegex(isStrict);\n\t});\n\taddRegexToken('dddd',   function (isStrict, locale) {\n\t    return locale.weekdaysRegex(isStrict);\n\t});\n\n\taddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n\t    var weekday = config._locale.weekdaysParse(input, token, config._strict);\n\t    // if we didn't get a weekday name, mark the date as invalid\n\t    if (weekday != null) {\n\t        week.d = weekday;\n\t    } else {\n\t        getParsingFlags(config).invalidWeekday = input;\n\t    }\n\t});\n\n\taddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n\t    week[token] = toInt(input);\n\t});\n\n\t// HELPERS\n\n\tfunction parseWeekday(input, locale) {\n\t    if (typeof input !== 'string') {\n\t        return input;\n\t    }\n\n\t    if (!isNaN(input)) {\n\t        return parseInt(input, 10);\n\t    }\n\n\t    input = locale.weekdaysParse(input);\n\t    if (typeof input === 'number') {\n\t        return input;\n\t    }\n\n\t    return null;\n\t}\n\n\tfunction parseIsoWeekday(input, locale) {\n\t    if (typeof input === 'string') {\n\t        return locale.weekdaysParse(input) % 7 || 7;\n\t    }\n\t    return isNaN(input) ? null : input;\n\t}\n\n\t// LOCALES\n\n\tvar defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n\tfunction localeWeekdays (m, format) {\n\t    if (!m) {\n\t        return isArray(this._weekdays) ? this._weekdays :\n\t            this._weekdays['standalone'];\n\t    }\n\t    return isArray(this._weekdays) ? this._weekdays[m.day()] :\n\t        this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n\t}\n\n\tvar defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n\tfunction localeWeekdaysShort (m) {\n\t    return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n\t}\n\n\tvar defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n\tfunction localeWeekdaysMin (m) {\n\t    return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n\t}\n\n\tfunction handleStrictParse$1(weekdayName, format, strict) {\n\t    var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n\t    if (!this._weekdaysParse) {\n\t        this._weekdaysParse = [];\n\t        this._shortWeekdaysParse = [];\n\t        this._minWeekdaysParse = [];\n\n\t        for (i = 0; i < 7; ++i) {\n\t            mom = createUTC([2000, 1]).day(i);\n\t            this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n\t            this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n\t            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n\t        }\n\t    }\n\n\t    if (strict) {\n\t        if (format === 'dddd') {\n\t            ii = indexOf$1.call(this._weekdaysParse, llc);\n\t            return ii !== -1 ? ii : null;\n\t        } else if (format === 'ddd') {\n\t            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n\t            return ii !== -1 ? ii : null;\n\t        } else {\n\t            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n\t            return ii !== -1 ? ii : null;\n\t        }\n\t    } else {\n\t        if (format === 'dddd') {\n\t            ii = indexOf$1.call(this._weekdaysParse, llc);\n\t            if (ii !== -1) {\n\t                return ii;\n\t            }\n\t            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n\t            if (ii !== -1) {\n\t                return ii;\n\t            }\n\t            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n\t            return ii !== -1 ? ii : null;\n\t        } else if (format === 'ddd') {\n\t            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n\t            if (ii !== -1) {\n\t                return ii;\n\t            }\n\t            ii = indexOf$1.call(this._weekdaysParse, llc);\n\t            if (ii !== -1) {\n\t                return ii;\n\t            }\n\t            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n\t            return ii !== -1 ? ii : null;\n\t        } else {\n\t            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n\t            if (ii !== -1) {\n\t                return ii;\n\t            }\n\t            ii = indexOf$1.call(this._weekdaysParse, llc);\n\t            if (ii !== -1) {\n\t                return ii;\n\t            }\n\t            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n\t            return ii !== -1 ? ii : null;\n\t        }\n\t    }\n\t}\n\n\tfunction localeWeekdaysParse (weekdayName, format, strict) {\n\t    var i, mom, regex;\n\n\t    if (this._weekdaysParseExact) {\n\t        return handleStrictParse$1.call(this, weekdayName, format, strict);\n\t    }\n\n\t    if (!this._weekdaysParse) {\n\t        this._weekdaysParse = [];\n\t        this._minWeekdaysParse = [];\n\t        this._shortWeekdaysParse = [];\n\t        this._fullWeekdaysParse = [];\n\t    }\n\n\t    for (i = 0; i < 7; i++) {\n\t        // make the regex if we don't have it already\n\n\t        mom = createUTC([2000, 1]).day(i);\n\t        if (strict && !this._fullWeekdaysParse[i]) {\n\t            this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n\t            this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n\t            this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n\t        }\n\t        if (!this._weekdaysParse[i]) {\n\t            regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n\t            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n\t        }\n\t        // test the regex\n\t        if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n\t            return i;\n\t        } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n\t            return i;\n\t        } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n\t            return i;\n\t        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n\t            return i;\n\t        }\n\t    }\n\t}\n\n\t// MOMENTS\n\n\tfunction getSetDayOfWeek (input) {\n\t    if (!this.isValid()) {\n\t        return input != null ? this : NaN;\n\t    }\n\t    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n\t    if (input != null) {\n\t        input = parseWeekday(input, this.localeData());\n\t        return this.add(input - day, 'd');\n\t    } else {\n\t        return day;\n\t    }\n\t}\n\n\tfunction getSetLocaleDayOfWeek (input) {\n\t    if (!this.isValid()) {\n\t        return input != null ? this : NaN;\n\t    }\n\t    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n\t    return input == null ? weekday : this.add(input - weekday, 'd');\n\t}\n\n\tfunction getSetISODayOfWeek (input) {\n\t    if (!this.isValid()) {\n\t        return input != null ? this : NaN;\n\t    }\n\n\t    // behaves the same as moment#day except\n\t    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n\t    // as a setter, sunday should belong to the previous week.\n\n\t    if (input != null) {\n\t        var weekday = parseIsoWeekday(input, this.localeData());\n\t        return this.day(this.day() % 7 ? weekday : weekday - 7);\n\t    } else {\n\t        return this.day() || 7;\n\t    }\n\t}\n\n\tvar defaultWeekdaysRegex = matchWord;\n\tfunction weekdaysRegex (isStrict) {\n\t    if (this._weekdaysParseExact) {\n\t        if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t            computeWeekdaysParse.call(this);\n\t        }\n\t        if (isStrict) {\n\t            return this._weekdaysStrictRegex;\n\t        } else {\n\t            return this._weekdaysRegex;\n\t        }\n\t    } else {\n\t        if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t            this._weekdaysRegex = defaultWeekdaysRegex;\n\t        }\n\t        return this._weekdaysStrictRegex && isStrict ?\n\t            this._weekdaysStrictRegex : this._weekdaysRegex;\n\t    }\n\t}\n\n\tvar defaultWeekdaysShortRegex = matchWord;\n\tfunction weekdaysShortRegex (isStrict) {\n\t    if (this._weekdaysParseExact) {\n\t        if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t            computeWeekdaysParse.call(this);\n\t        }\n\t        if (isStrict) {\n\t            return this._weekdaysShortStrictRegex;\n\t        } else {\n\t            return this._weekdaysShortRegex;\n\t        }\n\t    } else {\n\t        if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n\t            this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n\t        }\n\t        return this._weekdaysShortStrictRegex && isStrict ?\n\t            this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n\t    }\n\t}\n\n\tvar defaultWeekdaysMinRegex = matchWord;\n\tfunction weekdaysMinRegex (isStrict) {\n\t    if (this._weekdaysParseExact) {\n\t        if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t            computeWeekdaysParse.call(this);\n\t        }\n\t        if (isStrict) {\n\t            return this._weekdaysMinStrictRegex;\n\t        } else {\n\t            return this._weekdaysMinRegex;\n\t        }\n\t    } else {\n\t        if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n\t            this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n\t        }\n\t        return this._weekdaysMinStrictRegex && isStrict ?\n\t            this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n\t    }\n\t}\n\n\n\tfunction computeWeekdaysParse () {\n\t    function cmpLenRev(a, b) {\n\t        return b.length - a.length;\n\t    }\n\n\t    var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n\t        i, mom, minp, shortp, longp;\n\t    for (i = 0; i < 7; i++) {\n\t        // make the regex if we don't have it already\n\t        mom = createUTC([2000, 1]).day(i);\n\t        minp = this.weekdaysMin(mom, '');\n\t        shortp = this.weekdaysShort(mom, '');\n\t        longp = this.weekdays(mom, '');\n\t        minPieces.push(minp);\n\t        shortPieces.push(shortp);\n\t        longPieces.push(longp);\n\t        mixedPieces.push(minp);\n\t        mixedPieces.push(shortp);\n\t        mixedPieces.push(longp);\n\t    }\n\t    // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n\t    // will match the longer piece.\n\t    minPieces.sort(cmpLenRev);\n\t    shortPieces.sort(cmpLenRev);\n\t    longPieces.sort(cmpLenRev);\n\t    mixedPieces.sort(cmpLenRev);\n\t    for (i = 0; i < 7; i++) {\n\t        shortPieces[i] = regexEscape(shortPieces[i]);\n\t        longPieces[i] = regexEscape(longPieces[i]);\n\t        mixedPieces[i] = regexEscape(mixedPieces[i]);\n\t    }\n\n\t    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t    this._weekdaysShortRegex = this._weekdaysRegex;\n\t    this._weekdaysMinRegex = this._weekdaysRegex;\n\n\t    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n\t    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n\t    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n\t}\n\n\t// FORMATTING\n\n\tfunction hFormat() {\n\t    return this.hours() % 12 || 12;\n\t}\n\n\tfunction kFormat() {\n\t    return this.hours() || 24;\n\t}\n\n\taddFormatToken('H', ['HH', 2], 0, 'hour');\n\taddFormatToken('h', ['hh', 2], 0, hFormat);\n\taddFormatToken('k', ['kk', 2], 0, kFormat);\n\n\taddFormatToken('hmm', 0, 0, function () {\n\t    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n\t});\n\n\taddFormatToken('hmmss', 0, 0, function () {\n\t    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n\t        zeroFill(this.seconds(), 2);\n\t});\n\n\taddFormatToken('Hmm', 0, 0, function () {\n\t    return '' + this.hours() + zeroFill(this.minutes(), 2);\n\t});\n\n\taddFormatToken('Hmmss', 0, 0, function () {\n\t    return '' + this.hours() + zeroFill(this.minutes(), 2) +\n\t        zeroFill(this.seconds(), 2);\n\t});\n\n\tfunction meridiem (token, lowercase) {\n\t    addFormatToken(token, 0, 0, function () {\n\t        return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n\t    });\n\t}\n\n\tmeridiem('a', true);\n\tmeridiem('A', false);\n\n\t// ALIASES\n\n\taddUnitAlias('hour', 'h');\n\n\t// PRIORITY\n\taddUnitPriority('hour', 13);\n\n\t// PARSING\n\n\tfunction matchMeridiem (isStrict, locale) {\n\t    return locale._meridiemParse;\n\t}\n\n\taddRegexToken('a',  matchMeridiem);\n\taddRegexToken('A',  matchMeridiem);\n\taddRegexToken('H',  match1to2);\n\taddRegexToken('h',  match1to2);\n\taddRegexToken('k',  match1to2);\n\taddRegexToken('HH', match1to2, match2);\n\taddRegexToken('hh', match1to2, match2);\n\taddRegexToken('kk', match1to2, match2);\n\n\taddRegexToken('hmm', match3to4);\n\taddRegexToken('hmmss', match5to6);\n\taddRegexToken('Hmm', match3to4);\n\taddRegexToken('Hmmss', match5to6);\n\n\taddParseToken(['H', 'HH'], HOUR);\n\taddParseToken(['k', 'kk'], function (input, array, config) {\n\t    var kInput = toInt(input);\n\t    array[HOUR] = kInput === 24 ? 0 : kInput;\n\t});\n\taddParseToken(['a', 'A'], function (input, array, config) {\n\t    config._isPm = config._locale.isPM(input);\n\t    config._meridiem = input;\n\t});\n\taddParseToken(['h', 'hh'], function (input, array, config) {\n\t    array[HOUR] = toInt(input);\n\t    getParsingFlags(config).bigHour = true;\n\t});\n\taddParseToken('hmm', function (input, array, config) {\n\t    var pos = input.length - 2;\n\t    array[HOUR] = toInt(input.substr(0, pos));\n\t    array[MINUTE] = toInt(input.substr(pos));\n\t    getParsingFlags(config).bigHour = true;\n\t});\n\taddParseToken('hmmss', function (input, array, config) {\n\t    var pos1 = input.length - 4;\n\t    var pos2 = input.length - 2;\n\t    array[HOUR] = toInt(input.substr(0, pos1));\n\t    array[MINUTE] = toInt(input.substr(pos1, 2));\n\t    array[SECOND] = toInt(input.substr(pos2));\n\t    getParsingFlags(config).bigHour = true;\n\t});\n\taddParseToken('Hmm', function (input, array, config) {\n\t    var pos = input.length - 2;\n\t    array[HOUR] = toInt(input.substr(0, pos));\n\t    array[MINUTE] = toInt(input.substr(pos));\n\t});\n\taddParseToken('Hmmss', function (input, array, config) {\n\t    var pos1 = input.length - 4;\n\t    var pos2 = input.length - 2;\n\t    array[HOUR] = toInt(input.substr(0, pos1));\n\t    array[MINUTE] = toInt(input.substr(pos1, 2));\n\t    array[SECOND] = toInt(input.substr(pos2));\n\t});\n\n\t// LOCALES\n\n\tfunction localeIsPM (input) {\n\t    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n\t    // Using charAt should be more compatible.\n\t    return ((input + '').toLowerCase().charAt(0) === 'p');\n\t}\n\n\tvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n\tfunction localeMeridiem (hours, minutes, isLower) {\n\t    if (hours > 11) {\n\t        return isLower ? 'pm' : 'PM';\n\t    } else {\n\t        return isLower ? 'am' : 'AM';\n\t    }\n\t}\n\n\n\t// MOMENTS\n\n\t// Setting the hour should keep the time, because the user explicitly\n\t// specified which hour he wants. So trying to maintain the same hour (in\n\t// a new timezone) makes sense. Adding/subtracting hours does not follow\n\t// this rule.\n\tvar getSetHour = makeGetSet('Hours', true);\n\n\t// months\n\t// week\n\t// weekdays\n\t// meridiem\n\tvar baseConfig = {\n\t    calendar: defaultCalendar,\n\t    longDateFormat: defaultLongDateFormat,\n\t    invalidDate: defaultInvalidDate,\n\t    ordinal: defaultOrdinal,\n\t    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n\t    relativeTime: defaultRelativeTime,\n\n\t    months: defaultLocaleMonths,\n\t    monthsShort: defaultLocaleMonthsShort,\n\n\t    week: defaultLocaleWeek,\n\n\t    weekdays: defaultLocaleWeekdays,\n\t    weekdaysMin: defaultLocaleWeekdaysMin,\n\t    weekdaysShort: defaultLocaleWeekdaysShort,\n\n\t    meridiemParse: defaultLocaleMeridiemParse\n\t};\n\n\t// internal storage for locale config files\n\tvar locales = {};\n\tvar localeFamilies = {};\n\tvar globalLocale;\n\n\tfunction normalizeLocale(key) {\n\t    return key ? key.toLowerCase().replace('_', '-') : key;\n\t}\n\n\t// pick the locale from the array\n\t// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n\t// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n\tfunction chooseLocale(names) {\n\t    var i = 0, j, next, locale, split;\n\n\t    while (i < names.length) {\n\t        split = normalizeLocale(names[i]).split('-');\n\t        j = split.length;\n\t        next = normalizeLocale(names[i + 1]);\n\t        next = next ? next.split('-') : null;\n\t        while (j > 0) {\n\t            locale = loadLocale(split.slice(0, j).join('-'));\n\t            if (locale) {\n\t                return locale;\n\t            }\n\t            if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n\t                //the next array item is better than a shallower substring of this one\n\t                break;\n\t            }\n\t            j--;\n\t        }\n\t        i++;\n\t    }\n\t    return null;\n\t}\n\n\tfunction loadLocale(name) {\n\t    var oldLocale = null;\n\t    // TODO: Find a better way to register and load all the locales in Node\n\t    if (!locales[name] && (typeof module !== 'undefined') &&\n\t            module && module.exports) {\n\t        try {\n\t            oldLocale = globalLocale._abbr;\n\t            __webpack_require__(20)(\"./\" + name);\n\t            // because defineLocale currently also sets the global locale, we\n\t            // want to undo that for lazy loaded locales\n\t            getSetGlobalLocale(oldLocale);\n\t        } catch (e) { }\n\t    }\n\t    return locales[name];\n\t}\n\n\t// This function will load locale and then set the global locale.  If\n\t// no arguments are passed in, it will simply return the current global\n\t// locale key.\n\tfunction getSetGlobalLocale (key, values) {\n\t    var data;\n\t    if (key) {\n\t        if (isUndefined(values)) {\n\t            data = getLocale(key);\n\t        }\n\t        else {\n\t            data = defineLocale(key, values);\n\t        }\n\n\t        if (data) {\n\t            // moment.duration._locale = moment._locale = data;\n\t            globalLocale = data;\n\t        }\n\t    }\n\n\t    return globalLocale._abbr;\n\t}\n\n\tfunction defineLocale (name, config) {\n\t    if (config !== null) {\n\t        var parentConfig = baseConfig;\n\t        config.abbr = name;\n\t        if (locales[name] != null) {\n\t            deprecateSimple('defineLocaleOverride',\n\t                    'use moment.updateLocale(localeName, config) to change ' +\n\t                    'an existing locale. moment.defineLocale(localeName, ' +\n\t                    'config) should only be used for creating a new locale ' +\n\t                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n\t            parentConfig = locales[name]._config;\n\t        } else if (config.parentLocale != null) {\n\t            if (locales[config.parentLocale] != null) {\n\t                parentConfig = locales[config.parentLocale]._config;\n\t            } else {\n\t                if (!localeFamilies[config.parentLocale]) {\n\t                    localeFamilies[config.parentLocale] = [];\n\t                }\n\t                localeFamilies[config.parentLocale].push({\n\t                    name: name,\n\t                    config: config\n\t                });\n\t                return null;\n\t            }\n\t        }\n\t        locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n\t        if (localeFamilies[name]) {\n\t            localeFamilies[name].forEach(function (x) {\n\t                defineLocale(x.name, x.config);\n\t            });\n\t        }\n\n\t        // backwards compat for now: also set the locale\n\t        // make sure we set the locale AFTER all child locales have been\n\t        // created, so we won't end up with the child locale set.\n\t        getSetGlobalLocale(name);\n\n\n\t        return locales[name];\n\t    } else {\n\t        // useful for testing\n\t        delete locales[name];\n\t        return null;\n\t    }\n\t}\n\n\tfunction updateLocale(name, config) {\n\t    if (config != null) {\n\t        var locale, parentConfig = baseConfig;\n\t        // MERGE\n\t        if (locales[name] != null) {\n\t            parentConfig = locales[name]._config;\n\t        }\n\t        config = mergeConfigs(parentConfig, config);\n\t        locale = new Locale(config);\n\t        locale.parentLocale = locales[name];\n\t        locales[name] = locale;\n\n\t        // backwards compat for now: also set the locale\n\t        getSetGlobalLocale(name);\n\t    } else {\n\t        // pass null for config to unupdate, useful for tests\n\t        if (locales[name] != null) {\n\t            if (locales[name].parentLocale != null) {\n\t                locales[name] = locales[name].parentLocale;\n\t            } else if (locales[name] != null) {\n\t                delete locales[name];\n\t            }\n\t        }\n\t    }\n\t    return locales[name];\n\t}\n\n\t// returns locale data\n\tfunction getLocale (key) {\n\t    var locale;\n\n\t    if (key && key._locale && key._locale._abbr) {\n\t        key = key._locale._abbr;\n\t    }\n\n\t    if (!key) {\n\t        return globalLocale;\n\t    }\n\n\t    if (!isArray(key)) {\n\t        //short-circuit everything else\n\t        locale = loadLocale(key);\n\t        if (locale) {\n\t            return locale;\n\t        }\n\t        key = [key];\n\t    }\n\n\t    return chooseLocale(key);\n\t}\n\n\tfunction listLocales() {\n\t    return keys$1(locales);\n\t}\n\n\tfunction checkOverflow (m) {\n\t    var overflow;\n\t    var a = m._a;\n\n\t    if (a && getParsingFlags(m).overflow === -2) {\n\t        overflow =\n\t            a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n\t            a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n\t            a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n\t            a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n\t            a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n\t            a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n\t            -1;\n\n\t        if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n\t            overflow = DATE;\n\t        }\n\t        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n\t            overflow = WEEK;\n\t        }\n\t        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n\t            overflow = WEEKDAY;\n\t        }\n\n\t        getParsingFlags(m).overflow = overflow;\n\t    }\n\n\t    return m;\n\t}\n\n\t// iso 8601 regex\n\t// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n\tvar extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\tvar basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n\tvar tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n\tvar isoDates = [\n\t    ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n\t    ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n\t    ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n\t    ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n\t    ['YYYY-DDD', /\\d{4}-\\d{3}/],\n\t    ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n\t    ['YYYYYYMMDD', /[+-]\\d{10}/],\n\t    ['YYYYMMDD', /\\d{8}/],\n\t    // YYYYMM is NOT allowed by the standard\n\t    ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n\t    ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n\t    ['YYYYDDD', /\\d{7}/]\n\t];\n\n\t// iso time formats and regexes\n\tvar isoTimes = [\n\t    ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n\t    ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n\t    ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n\t    ['HH:mm', /\\d\\d:\\d\\d/],\n\t    ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n\t    ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n\t    ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n\t    ['HHmm', /\\d\\d\\d\\d/],\n\t    ['HH', /\\d\\d/]\n\t];\n\n\tvar aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n\t// date from iso format\n\tfunction configFromISO(config) {\n\t    var i, l,\n\t        string = config._i,\n\t        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n\t        allowTime, dateFormat, timeFormat, tzFormat;\n\n\t    if (match) {\n\t        getParsingFlags(config).iso = true;\n\n\t        for (i = 0, l = isoDates.length; i < l; i++) {\n\t            if (isoDates[i][1].exec(match[1])) {\n\t                dateFormat = isoDates[i][0];\n\t                allowTime = isoDates[i][2] !== false;\n\t                break;\n\t            }\n\t        }\n\t        if (dateFormat == null) {\n\t            config._isValid = false;\n\t            return;\n\t        }\n\t        if (match[3]) {\n\t            for (i = 0, l = isoTimes.length; i < l; i++) {\n\t                if (isoTimes[i][1].exec(match[3])) {\n\t                    // match[2] should be 'T' or space\n\t                    timeFormat = (match[2] || ' ') + isoTimes[i][0];\n\t                    break;\n\t                }\n\t            }\n\t            if (timeFormat == null) {\n\t                config._isValid = false;\n\t                return;\n\t            }\n\t        }\n\t        if (!allowTime && timeFormat != null) {\n\t            config._isValid = false;\n\t            return;\n\t        }\n\t        if (match[4]) {\n\t            if (tzRegex.exec(match[4])) {\n\t                tzFormat = 'Z';\n\t            } else {\n\t                config._isValid = false;\n\t                return;\n\t            }\n\t        }\n\t        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n\t        configFromStringAndFormat(config);\n\t    } else {\n\t        config._isValid = false;\n\t    }\n\t}\n\n\t// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n\tvar basicRfcRegex = /^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d?\\d\\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(?:\\d\\d)?\\d\\d\\s)(\\d\\d:\\d\\d)(\\:\\d\\d)?(\\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\\d{4}))$/;\n\n\t// date and time from ref 2822 format\n\tfunction configFromRFC2822(config) {\n\t    var string, match, dayFormat,\n\t        dateFormat, timeFormat, tzFormat;\n\t    var timezones = {\n\t        ' GMT': ' +0000',\n\t        ' EDT': ' -0400',\n\t        ' EST': ' -0500',\n\t        ' CDT': ' -0500',\n\t        ' CST': ' -0600',\n\t        ' MDT': ' -0600',\n\t        ' MST': ' -0700',\n\t        ' PDT': ' -0700',\n\t        ' PST': ' -0800'\n\t    };\n\t    var military = 'YXWVUTSRQPONZABCDEFGHIKLM';\n\t    var timezone, timezoneIndex;\n\n\t    string = config._i\n\t        .replace(/\\([^\\)]*\\)|[\\n\\t]/g, ' ') // Remove comments and folding whitespace\n\t        .replace(/(\\s\\s+)/g, ' ') // Replace multiple-spaces with a single space\n\t        .replace(/^\\s|\\s$/g, ''); // Remove leading and trailing spaces\n\t    match = basicRfcRegex.exec(string);\n\n\t    if (match) {\n\t        dayFormat = match[1] ? 'ddd' + ((match[1].length === 5) ? ', ' : ' ') : '';\n\t        dateFormat = 'D MMM ' + ((match[2].length > 10) ? 'YYYY ' : 'YY ');\n\t        timeFormat = 'HH:mm' + (match[4] ? ':ss' : '');\n\n\t        // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n\t        if (match[1]) { // day of week given\n\t            var momentDate = new Date(match[2]);\n\t            var momentDay = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][momentDate.getDay()];\n\n\t            if (match[1].substr(0,3) !== momentDay) {\n\t                getParsingFlags(config).weekdayMismatch = true;\n\t                config._isValid = false;\n\t                return;\n\t            }\n\t        }\n\n\t        switch (match[5].length) {\n\t            case 2: // military\n\t                if (timezoneIndex === 0) {\n\t                    timezone = ' +0000';\n\t                } else {\n\t                    timezoneIndex = military.indexOf(match[5][1].toUpperCase()) - 12;\n\t                    timezone = ((timezoneIndex < 0) ? ' -' : ' +') +\n\t                        (('' + timezoneIndex).replace(/^-?/, '0')).match(/..$/)[0] + '00';\n\t                }\n\t                break;\n\t            case 4: // Zone\n\t                timezone = timezones[match[5]];\n\t                break;\n\t            default: // UT or +/-9999\n\t                timezone = timezones[' GMT'];\n\t        }\n\t        match[5] = timezone;\n\t        config._i = match.splice(1).join('');\n\t        tzFormat = ' ZZ';\n\t        config._f = dayFormat + dateFormat + timeFormat + tzFormat;\n\t        configFromStringAndFormat(config);\n\t        getParsingFlags(config).rfc2822 = true;\n\t    } else {\n\t        config._isValid = false;\n\t    }\n\t}\n\n\t// date from iso format or fallback\n\tfunction configFromString(config) {\n\t    var matched = aspNetJsonRegex.exec(config._i);\n\n\t    if (matched !== null) {\n\t        config._d = new Date(+matched[1]);\n\t        return;\n\t    }\n\n\t    configFromISO(config);\n\t    if (config._isValid === false) {\n\t        delete config._isValid;\n\t    } else {\n\t        return;\n\t    }\n\n\t    configFromRFC2822(config);\n\t    if (config._isValid === false) {\n\t        delete config._isValid;\n\t    } else {\n\t        return;\n\t    }\n\n\t    // Final attempt, use Input Fallback\n\t    hooks.createFromInputFallback(config);\n\t}\n\n\thooks.createFromInputFallback = deprecate(\n\t    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n\t    'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n\t    'discouraged and will be removed in an upcoming major release. Please refer to ' +\n\t    'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n\t    function (config) {\n\t        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n\t    }\n\t);\n\n\t// Pick the first defined of two or three arguments.\n\tfunction defaults(a, b, c) {\n\t    if (a != null) {\n\t        return a;\n\t    }\n\t    if (b != null) {\n\t        return b;\n\t    }\n\t    return c;\n\t}\n\n\tfunction currentDateArray(config) {\n\t    // hooks is actually the exported moment object\n\t    var nowValue = new Date(hooks.now());\n\t    if (config._useUTC) {\n\t        return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n\t    }\n\t    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n\t}\n\n\t// convert an array to a date.\n\t// the array should mirror the parameters below\n\t// note: all values past the year are optional and will default to the lowest possible value.\n\t// [year, month, day , hour, minute, second, millisecond]\n\tfunction configFromArray (config) {\n\t    var i, date, input = [], currentDate, yearToUse;\n\n\t    if (config._d) {\n\t        return;\n\t    }\n\n\t    currentDate = currentDateArray(config);\n\n\t    //compute day of the year from weeks and weekdays\n\t    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n\t        dayOfYearFromWeekInfo(config);\n\t    }\n\n\t    //if the day of the year is set, figure out what it is\n\t    if (config._dayOfYear != null) {\n\t        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n\t        if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n\t            getParsingFlags(config)._overflowDayOfYear = true;\n\t        }\n\n\t        date = createUTCDate(yearToUse, 0, config._dayOfYear);\n\t        config._a[MONTH] = date.getUTCMonth();\n\t        config._a[DATE] = date.getUTCDate();\n\t    }\n\n\t    // Default to current date.\n\t    // * if no year, month, day of month are given, default to today\n\t    // * if day of month is given, default month and year\n\t    // * if month is given, default only year\n\t    // * if year is given, don't default anything\n\t    for (i = 0; i < 3 && config._a[i] == null; ++i) {\n\t        config._a[i] = input[i] = currentDate[i];\n\t    }\n\n\t    // Zero out whatever was not defaulted, including time\n\t    for (; i < 7; i++) {\n\t        config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n\t    }\n\n\t    // Check for 24:00:00.000\n\t    if (config._a[HOUR] === 24 &&\n\t            config._a[MINUTE] === 0 &&\n\t            config._a[SECOND] === 0 &&\n\t            config._a[MILLISECOND] === 0) {\n\t        config._nextDay = true;\n\t        config._a[HOUR] = 0;\n\t    }\n\n\t    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n\t    // Apply timezone offset from input. The actual utcOffset can be changed\n\t    // with parseZone.\n\t    if (config._tzm != null) {\n\t        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\t    }\n\n\t    if (config._nextDay) {\n\t        config._a[HOUR] = 24;\n\t    }\n\t}\n\n\tfunction dayOfYearFromWeekInfo(config) {\n\t    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n\t    w = config._w;\n\t    if (w.GG != null || w.W != null || w.E != null) {\n\t        dow = 1;\n\t        doy = 4;\n\n\t        // TODO: We need to take the current isoWeekYear, but that depends on\n\t        // how we interpret now (local, utc, fixed offset). So create\n\t        // a now version of current config (take local/utc/offset flags, and\n\t        // create now).\n\t        weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n\t        week = defaults(w.W, 1);\n\t        weekday = defaults(w.E, 1);\n\t        if (weekday < 1 || weekday > 7) {\n\t            weekdayOverflow = true;\n\t        }\n\t    } else {\n\t        dow = config._locale._week.dow;\n\t        doy = config._locale._week.doy;\n\n\t        var curWeek = weekOfYear(createLocal(), dow, doy);\n\n\t        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n\t        // Default to current week.\n\t        week = defaults(w.w, curWeek.week);\n\n\t        if (w.d != null) {\n\t            // weekday -- low day numbers are considered next week\n\t            weekday = w.d;\n\t            if (weekday < 0 || weekday > 6) {\n\t                weekdayOverflow = true;\n\t            }\n\t        } else if (w.e != null) {\n\t            // local weekday -- counting starts from begining of week\n\t            weekday = w.e + dow;\n\t            if (w.e < 0 || w.e > 6) {\n\t                weekdayOverflow = true;\n\t            }\n\t        } else {\n\t            // default to begining of week\n\t            weekday = dow;\n\t        }\n\t    }\n\t    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n\t        getParsingFlags(config)._overflowWeeks = true;\n\t    } else if (weekdayOverflow != null) {\n\t        getParsingFlags(config)._overflowWeekday = true;\n\t    } else {\n\t        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n\t        config._a[YEAR] = temp.year;\n\t        config._dayOfYear = temp.dayOfYear;\n\t    }\n\t}\n\n\t// constant that refers to the ISO standard\n\thooks.ISO_8601 = function () {};\n\n\t// constant that refers to the RFC 2822 form\n\thooks.RFC_2822 = function () {};\n\n\t// date from string and format string\n\tfunction configFromStringAndFormat(config) {\n\t    // TODO: Move this to another part of the creation flow to prevent circular deps\n\t    if (config._f === hooks.ISO_8601) {\n\t        configFromISO(config);\n\t        return;\n\t    }\n\t    if (config._f === hooks.RFC_2822) {\n\t        configFromRFC2822(config);\n\t        return;\n\t    }\n\t    config._a = [];\n\t    getParsingFlags(config).empty = true;\n\n\t    // This array is used to make a Date, either with `new Date` or `Date.UTC`\n\t    var string = '' + config._i,\n\t        i, parsedInput, tokens, token, skipped,\n\t        stringLength = string.length,\n\t        totalParsedInputLength = 0;\n\n\t    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n\t    for (i = 0; i < tokens.length; i++) {\n\t        token = tokens[i];\n\t        parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n\t        // console.log('token', token, 'parsedInput', parsedInput,\n\t        //         'regex', getParseRegexForToken(token, config));\n\t        if (parsedInput) {\n\t            skipped = string.substr(0, string.indexOf(parsedInput));\n\t            if (skipped.length > 0) {\n\t                getParsingFlags(config).unusedInput.push(skipped);\n\t            }\n\t            string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n\t            totalParsedInputLength += parsedInput.length;\n\t        }\n\t        // don't parse if it's not a known token\n\t        if (formatTokenFunctions[token]) {\n\t            if (parsedInput) {\n\t                getParsingFlags(config).empty = false;\n\t            }\n\t            else {\n\t                getParsingFlags(config).unusedTokens.push(token);\n\t            }\n\t            addTimeToArrayFromToken(token, parsedInput, config);\n\t        }\n\t        else if (config._strict && !parsedInput) {\n\t            getParsingFlags(config).unusedTokens.push(token);\n\t        }\n\t    }\n\n\t    // add remaining unparsed input length to the string\n\t    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n\t    if (string.length > 0) {\n\t        getParsingFlags(config).unusedInput.push(string);\n\t    }\n\n\t    // clear _12h flag if hour is <= 12\n\t    if (config._a[HOUR] <= 12 &&\n\t        getParsingFlags(config).bigHour === true &&\n\t        config._a[HOUR] > 0) {\n\t        getParsingFlags(config).bigHour = undefined;\n\t    }\n\n\t    getParsingFlags(config).parsedDateParts = config._a.slice(0);\n\t    getParsingFlags(config).meridiem = config._meridiem;\n\t    // handle meridiem\n\t    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n\t    configFromArray(config);\n\t    checkOverflow(config);\n\t}\n\n\n\tfunction meridiemFixWrap (locale, hour, meridiem) {\n\t    var isPm;\n\n\t    if (meridiem == null) {\n\t        // nothing to do\n\t        return hour;\n\t    }\n\t    if (locale.meridiemHour != null) {\n\t        return locale.meridiemHour(hour, meridiem);\n\t    } else if (locale.isPM != null) {\n\t        // Fallback\n\t        isPm = locale.isPM(meridiem);\n\t        if (isPm && hour < 12) {\n\t            hour += 12;\n\t        }\n\t        if (!isPm && hour === 12) {\n\t            hour = 0;\n\t        }\n\t        return hour;\n\t    } else {\n\t        // this is not supposed to happen\n\t        return hour;\n\t    }\n\t}\n\n\t// date from string and array of format strings\n\tfunction configFromStringAndArray(config) {\n\t    var tempConfig,\n\t        bestMoment,\n\n\t        scoreToBeat,\n\t        i,\n\t        currentScore;\n\n\t    if (config._f.length === 0) {\n\t        getParsingFlags(config).invalidFormat = true;\n\t        config._d = new Date(NaN);\n\t        return;\n\t    }\n\n\t    for (i = 0; i < config._f.length; i++) {\n\t        currentScore = 0;\n\t        tempConfig = copyConfig({}, config);\n\t        if (config._useUTC != null) {\n\t            tempConfig._useUTC = config._useUTC;\n\t        }\n\t        tempConfig._f = config._f[i];\n\t        configFromStringAndFormat(tempConfig);\n\n\t        if (!isValid(tempConfig)) {\n\t            continue;\n\t        }\n\n\t        // if there is any input that was not parsed add a penalty for that format\n\t        currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n\t        //or tokens\n\t        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n\t        getParsingFlags(tempConfig).score = currentScore;\n\n\t        if (scoreToBeat == null || currentScore < scoreToBeat) {\n\t            scoreToBeat = currentScore;\n\t            bestMoment = tempConfig;\n\t        }\n\t    }\n\n\t    extend(config, bestMoment || tempConfig);\n\t}\n\n\tfunction configFromObject(config) {\n\t    if (config._d) {\n\t        return;\n\t    }\n\n\t    var i = normalizeObjectUnits(config._i);\n\t    config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n\t        return obj && parseInt(obj, 10);\n\t    });\n\n\t    configFromArray(config);\n\t}\n\n\tfunction createFromConfig (config) {\n\t    var res = new Moment(checkOverflow(prepareConfig(config)));\n\t    if (res._nextDay) {\n\t        // Adding is smart enough around DST\n\t        res.add(1, 'd');\n\t        res._nextDay = undefined;\n\t    }\n\n\t    return res;\n\t}\n\n\tfunction prepareConfig (config) {\n\t    var input = config._i,\n\t        format = config._f;\n\n\t    config._locale = config._locale || getLocale(config._l);\n\n\t    if (input === null || (format === undefined && input === '')) {\n\t        return createInvalid({nullInput: true});\n\t    }\n\n\t    if (typeof input === 'string') {\n\t        config._i = input = config._locale.preparse(input);\n\t    }\n\n\t    if (isMoment(input)) {\n\t        return new Moment(checkOverflow(input));\n\t    } else if (isDate(input)) {\n\t        config._d = input;\n\t    } else if (isArray(format)) {\n\t        configFromStringAndArray(config);\n\t    } else if (format) {\n\t        configFromStringAndFormat(config);\n\t    }  else {\n\t        configFromInput(config);\n\t    }\n\n\t    if (!isValid(config)) {\n\t        config._d = null;\n\t    }\n\n\t    return config;\n\t}\n\n\tfunction configFromInput(config) {\n\t    var input = config._i;\n\t    if (isUndefined(input)) {\n\t        config._d = new Date(hooks.now());\n\t    } else if (isDate(input)) {\n\t        config._d = new Date(input.valueOf());\n\t    } else if (typeof input === 'string') {\n\t        configFromString(config);\n\t    } else if (isArray(input)) {\n\t        config._a = map(input.slice(0), function (obj) {\n\t            return parseInt(obj, 10);\n\t        });\n\t        configFromArray(config);\n\t    } else if (isObject(input)) {\n\t        configFromObject(config);\n\t    } else if (isNumber(input)) {\n\t        // from milliseconds\n\t        config._d = new Date(input);\n\t    } else {\n\t        hooks.createFromInputFallback(config);\n\t    }\n\t}\n\n\tfunction createLocalOrUTC (input, format, locale, strict, isUTC) {\n\t    var c = {};\n\n\t    if (locale === true || locale === false) {\n\t        strict = locale;\n\t        locale = undefined;\n\t    }\n\n\t    if ((isObject(input) && isObjectEmpty(input)) ||\n\t            (isArray(input) && input.length === 0)) {\n\t        input = undefined;\n\t    }\n\t    // object construction must be done this way.\n\t    // https://github.com/moment/moment/issues/1423\n\t    c._isAMomentObject = true;\n\t    c._useUTC = c._isUTC = isUTC;\n\t    c._l = locale;\n\t    c._i = input;\n\t    c._f = format;\n\t    c._strict = strict;\n\n\t    return createFromConfig(c);\n\t}\n\n\tfunction createLocal (input, format, locale, strict) {\n\t    return createLocalOrUTC(input, format, locale, strict, false);\n\t}\n\n\tvar prototypeMin = deprecate(\n\t    'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n\t    function () {\n\t        var other = createLocal.apply(null, arguments);\n\t        if (this.isValid() && other.isValid()) {\n\t            return other < this ? this : other;\n\t        } else {\n\t            return createInvalid();\n\t        }\n\t    }\n\t);\n\n\tvar prototypeMax = deprecate(\n\t    'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n\t    function () {\n\t        var other = createLocal.apply(null, arguments);\n\t        if (this.isValid() && other.isValid()) {\n\t            return other > this ? this : other;\n\t        } else {\n\t            return createInvalid();\n\t        }\n\t    }\n\t);\n\n\t// Pick a moment m from moments so that m[fn](other) is true for all\n\t// other. This relies on the function fn to be transitive.\n\t//\n\t// moments should either be an array of moment objects or an array, whose\n\t// first element is an array of moment objects.\n\tfunction pickBy(fn, moments) {\n\t    var res, i;\n\t    if (moments.length === 1 && isArray(moments[0])) {\n\t        moments = moments[0];\n\t    }\n\t    if (!moments.length) {\n\t        return createLocal();\n\t    }\n\t    res = moments[0];\n\t    for (i = 1; i < moments.length; ++i) {\n\t        if (!moments[i].isValid() || moments[i][fn](res)) {\n\t            res = moments[i];\n\t        }\n\t    }\n\t    return res;\n\t}\n\n\t// TODO: Use [].sort instead?\n\tfunction min () {\n\t    var args = [].slice.call(arguments, 0);\n\n\t    return pickBy('isBefore', args);\n\t}\n\n\tfunction max () {\n\t    var args = [].slice.call(arguments, 0);\n\n\t    return pickBy('isAfter', args);\n\t}\n\n\tvar now = function () {\n\t    return Date.now ? Date.now() : +(new Date());\n\t};\n\n\tvar ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n\tfunction isDurationValid(m) {\n\t    for (var key in m) {\n\t        if (!(ordering.indexOf(key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n\t            return false;\n\t        }\n\t    }\n\n\t    var unitHasDecimal = false;\n\t    for (var i = 0; i < ordering.length; ++i) {\n\t        if (m[ordering[i]]) {\n\t            if (unitHasDecimal) {\n\t                return false; // only allow non-integers for smallest unit\n\t            }\n\t            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n\t                unitHasDecimal = true;\n\t            }\n\t        }\n\t    }\n\n\t    return true;\n\t}\n\n\tfunction isValid$1() {\n\t    return this._isValid;\n\t}\n\n\tfunction createInvalid$1() {\n\t    return createDuration(NaN);\n\t}\n\n\tfunction Duration (duration) {\n\t    var normalizedInput = normalizeObjectUnits(duration),\n\t        years = normalizedInput.year || 0,\n\t        quarters = normalizedInput.quarter || 0,\n\t        months = normalizedInput.month || 0,\n\t        weeks = normalizedInput.week || 0,\n\t        days = normalizedInput.day || 0,\n\t        hours = normalizedInput.hour || 0,\n\t        minutes = normalizedInput.minute || 0,\n\t        seconds = normalizedInput.second || 0,\n\t        milliseconds = normalizedInput.millisecond || 0;\n\n\t    this._isValid = isDurationValid(normalizedInput);\n\n\t    // representation for dateAddRemove\n\t    this._milliseconds = +milliseconds +\n\t        seconds * 1e3 + // 1000\n\t        minutes * 6e4 + // 1000 * 60\n\t        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n\t    // Because of dateAddRemove treats 24 hours as different from a\n\t    // day when working around DST, we need to store them separately\n\t    this._days = +days +\n\t        weeks * 7;\n\t    // It is impossible translate months into days without knowing\n\t    // which months you are are talking about, so we have to store\n\t    // it separately.\n\t    this._months = +months +\n\t        quarters * 3 +\n\t        years * 12;\n\n\t    this._data = {};\n\n\t    this._locale = getLocale();\n\n\t    this._bubble();\n\t}\n\n\tfunction isDuration (obj) {\n\t    return obj instanceof Duration;\n\t}\n\n\tfunction absRound (number) {\n\t    if (number < 0) {\n\t        return Math.round(-1 * number) * -1;\n\t    } else {\n\t        return Math.round(number);\n\t    }\n\t}\n\n\t// FORMATTING\n\n\tfunction offset (token, separator) {\n\t    addFormatToken(token, 0, 0, function () {\n\t        var offset = this.utcOffset();\n\t        var sign = '+';\n\t        if (offset < 0) {\n\t            offset = -offset;\n\t            sign = '-';\n\t        }\n\t        return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n\t    });\n\t}\n\n\toffset('Z', ':');\n\toffset('ZZ', '');\n\n\t// PARSING\n\n\taddRegexToken('Z',  matchShortOffset);\n\taddRegexToken('ZZ', matchShortOffset);\n\taddParseToken(['Z', 'ZZ'], function (input, array, config) {\n\t    config._useUTC = true;\n\t    config._tzm = offsetFromString(matchShortOffset, input);\n\t});\n\n\t// HELPERS\n\n\t// timezone chunker\n\t// '+10:00' > ['10',  '00']\n\t// '-1530'  > ['-15', '30']\n\tvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n\tfunction offsetFromString(matcher, string) {\n\t    var matches = (string || '').match(matcher);\n\n\t    if (matches === null) {\n\t        return null;\n\t    }\n\n\t    var chunk   = matches[matches.length - 1] || [];\n\t    var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n\t    var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n\t    return minutes === 0 ?\n\t      0 :\n\t      parts[0] === '+' ? minutes : -minutes;\n\t}\n\n\t// Return a moment from input, that is local/utc/zone equivalent to model.\n\tfunction cloneWithOffset(input, model) {\n\t    var res, diff;\n\t    if (model._isUTC) {\n\t        res = model.clone();\n\t        diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n\t        // Use low-level api, because this fn is low-level api.\n\t        res._d.setTime(res._d.valueOf() + diff);\n\t        hooks.updateOffset(res, false);\n\t        return res;\n\t    } else {\n\t        return createLocal(input).local();\n\t    }\n\t}\n\n\tfunction getDateOffset (m) {\n\t    // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n\t    // https://github.com/moment/moment/pull/1871\n\t    return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n\t}\n\n\t// HOOKS\n\n\t// This function will be called whenever a moment is mutated.\n\t// It is intended to keep the offset in sync with the timezone.\n\thooks.updateOffset = function () {};\n\n\t// MOMENTS\n\n\t// keepLocalTime = true means only change the timezone, without\n\t// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n\t// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n\t// +0200, so we adjust the time as needed, to be valid.\n\t//\n\t// Keeping the time actually adds/subtracts (one hour)\n\t// from the actual represented time. That is why we call updateOffset\n\t// a second time. In case it wants us to change the offset again\n\t// _changeInProgress == true case, then we have to adjust, because\n\t// there is no such time in the given timezone.\n\tfunction getSetOffset (input, keepLocalTime, keepMinutes) {\n\t    var offset = this._offset || 0,\n\t        localAdjust;\n\t    if (!this.isValid()) {\n\t        return input != null ? this : NaN;\n\t    }\n\t    if (input != null) {\n\t        if (typeof input === 'string') {\n\t            input = offsetFromString(matchShortOffset, input);\n\t            if (input === null) {\n\t                return this;\n\t            }\n\t        } else if (Math.abs(input) < 16 && !keepMinutes) {\n\t            input = input * 60;\n\t        }\n\t        if (!this._isUTC && keepLocalTime) {\n\t            localAdjust = getDateOffset(this);\n\t        }\n\t        this._offset = input;\n\t        this._isUTC = true;\n\t        if (localAdjust != null) {\n\t            this.add(localAdjust, 'm');\n\t        }\n\t        if (offset !== input) {\n\t            if (!keepLocalTime || this._changeInProgress) {\n\t                addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n\t            } else if (!this._changeInProgress) {\n\t                this._changeInProgress = true;\n\t                hooks.updateOffset(this, true);\n\t                this._changeInProgress = null;\n\t            }\n\t        }\n\t        return this;\n\t    } else {\n\t        return this._isUTC ? offset : getDateOffset(this);\n\t    }\n\t}\n\n\tfunction getSetZone (input, keepLocalTime) {\n\t    if (input != null) {\n\t        if (typeof input !== 'string') {\n\t            input = -input;\n\t        }\n\n\t        this.utcOffset(input, keepLocalTime);\n\n\t        return this;\n\t    } else {\n\t        return -this.utcOffset();\n\t    }\n\t}\n\n\tfunction setOffsetToUTC (keepLocalTime) {\n\t    return this.utcOffset(0, keepLocalTime);\n\t}\n\n\tfunction setOffsetToLocal (keepLocalTime) {\n\t    if (this._isUTC) {\n\t        this.utcOffset(0, keepLocalTime);\n\t        this._isUTC = false;\n\n\t        if (keepLocalTime) {\n\t            this.subtract(getDateOffset(this), 'm');\n\t        }\n\t    }\n\t    return this;\n\t}\n\n\tfunction setOffsetToParsedOffset () {\n\t    if (this._tzm != null) {\n\t        this.utcOffset(this._tzm, false, true);\n\t    } else if (typeof this._i === 'string') {\n\t        var tZone = offsetFromString(matchOffset, this._i);\n\t        if (tZone != null) {\n\t            this.utcOffset(tZone);\n\t        }\n\t        else {\n\t            this.utcOffset(0, true);\n\t        }\n\t    }\n\t    return this;\n\t}\n\n\tfunction hasAlignedHourOffset (input) {\n\t    if (!this.isValid()) {\n\t        return false;\n\t    }\n\t    input = input ? createLocal(input).utcOffset() : 0;\n\n\t    return (this.utcOffset() - input) % 60 === 0;\n\t}\n\n\tfunction isDaylightSavingTime () {\n\t    return (\n\t        this.utcOffset() > this.clone().month(0).utcOffset() ||\n\t        this.utcOffset() > this.clone().month(5).utcOffset()\n\t    );\n\t}\n\n\tfunction isDaylightSavingTimeShifted () {\n\t    if (!isUndefined(this._isDSTShifted)) {\n\t        return this._isDSTShifted;\n\t    }\n\n\t    var c = {};\n\n\t    copyConfig(c, this);\n\t    c = prepareConfig(c);\n\n\t    if (c._a) {\n\t        var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n\t        this._isDSTShifted = this.isValid() &&\n\t            compareArrays(c._a, other.toArray()) > 0;\n\t    } else {\n\t        this._isDSTShifted = false;\n\t    }\n\n\t    return this._isDSTShifted;\n\t}\n\n\tfunction isLocal () {\n\t    return this.isValid() ? !this._isUTC : false;\n\t}\n\n\tfunction isUtcOffset () {\n\t    return this.isValid() ? this._isUTC : false;\n\t}\n\n\tfunction isUtc () {\n\t    return this.isValid() ? this._isUTC && this._offset === 0 : false;\n\t}\n\n\t// ASP.NET json date format regex\n\tvar aspNetRegex = /^(\\-)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n\t// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n\t// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n\t// and further modified to allow for strings containing both week and day\n\tvar isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;\n\n\tfunction createDuration (input, key) {\n\t    var duration = input,\n\t        // matching against regexp is expensive, do it on demand\n\t        match = null,\n\t        sign,\n\t        ret,\n\t        diffRes;\n\n\t    if (isDuration(input)) {\n\t        duration = {\n\t            ms : input._milliseconds,\n\t            d  : input._days,\n\t            M  : input._months\n\t        };\n\t    } else if (isNumber(input)) {\n\t        duration = {};\n\t        if (key) {\n\t            duration[key] = input;\n\t        } else {\n\t            duration.milliseconds = input;\n\t        }\n\t    } else if (!!(match = aspNetRegex.exec(input))) {\n\t        sign = (match[1] === '-') ? -1 : 1;\n\t        duration = {\n\t            y  : 0,\n\t            d  : toInt(match[DATE])                         * sign,\n\t            h  : toInt(match[HOUR])                         * sign,\n\t            m  : toInt(match[MINUTE])                       * sign,\n\t            s  : toInt(match[SECOND])                       * sign,\n\t            ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n\t        };\n\t    } else if (!!(match = isoRegex.exec(input))) {\n\t        sign = (match[1] === '-') ? -1 : 1;\n\t        duration = {\n\t            y : parseIso(match[2], sign),\n\t            M : parseIso(match[3], sign),\n\t            w : parseIso(match[4], sign),\n\t            d : parseIso(match[5], sign),\n\t            h : parseIso(match[6], sign),\n\t            m : parseIso(match[7], sign),\n\t            s : parseIso(match[8], sign)\n\t        };\n\t    } else if (duration == null) {// checks for null or undefined\n\t        duration = {};\n\t    } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n\t        diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n\t        duration = {};\n\t        duration.ms = diffRes.milliseconds;\n\t        duration.M = diffRes.months;\n\t    }\n\n\t    ret = new Duration(duration);\n\n\t    if (isDuration(input) && hasOwnProp(input, '_locale')) {\n\t        ret._locale = input._locale;\n\t    }\n\n\t    return ret;\n\t}\n\n\tcreateDuration.fn = Duration.prototype;\n\tcreateDuration.invalid = createInvalid$1;\n\n\tfunction parseIso (inp, sign) {\n\t    // We'd normally use ~~inp for this, but unfortunately it also\n\t    // converts floats to ints.\n\t    // inp may be undefined, so careful calling replace on it.\n\t    var res = inp && parseFloat(inp.replace(',', '.'));\n\t    // apply sign while we're at it\n\t    return (isNaN(res) ? 0 : res) * sign;\n\t}\n\n\tfunction positiveMomentsDifference(base, other) {\n\t    var res = {milliseconds: 0, months: 0};\n\n\t    res.months = other.month() - base.month() +\n\t        (other.year() - base.year()) * 12;\n\t    if (base.clone().add(res.months, 'M').isAfter(other)) {\n\t        --res.months;\n\t    }\n\n\t    res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n\t    return res;\n\t}\n\n\tfunction momentsDifference(base, other) {\n\t    var res;\n\t    if (!(base.isValid() && other.isValid())) {\n\t        return {milliseconds: 0, months: 0};\n\t    }\n\n\t    other = cloneWithOffset(other, base);\n\t    if (base.isBefore(other)) {\n\t        res = positiveMomentsDifference(base, other);\n\t    } else {\n\t        res = positiveMomentsDifference(other, base);\n\t        res.milliseconds = -res.milliseconds;\n\t        res.months = -res.months;\n\t    }\n\n\t    return res;\n\t}\n\n\t// TODO: remove 'name' arg after deprecation is removed\n\tfunction createAdder(direction, name) {\n\t    return function (val, period) {\n\t        var dur, tmp;\n\t        //invert the arguments, but complain about it\n\t        if (period !== null && !isNaN(+period)) {\n\t            deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n\t            'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n\t            tmp = val; val = period; period = tmp;\n\t        }\n\n\t        val = typeof val === 'string' ? +val : val;\n\t        dur = createDuration(val, period);\n\t        addSubtract(this, dur, direction);\n\t        return this;\n\t    };\n\t}\n\n\tfunction addSubtract (mom, duration, isAdding, updateOffset) {\n\t    var milliseconds = duration._milliseconds,\n\t        days = absRound(duration._days),\n\t        months = absRound(duration._months);\n\n\t    if (!mom.isValid()) {\n\t        // No op\n\t        return;\n\t    }\n\n\t    updateOffset = updateOffset == null ? true : updateOffset;\n\n\t    if (milliseconds) {\n\t        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n\t    }\n\t    if (days) {\n\t        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n\t    }\n\t    if (months) {\n\t        setMonth(mom, get(mom, 'Month') + months * isAdding);\n\t    }\n\t    if (updateOffset) {\n\t        hooks.updateOffset(mom, days || months);\n\t    }\n\t}\n\n\tvar add      = createAdder(1, 'add');\n\tvar subtract = createAdder(-1, 'subtract');\n\n\tfunction getCalendarFormat(myMoment, now) {\n\t    var diff = myMoment.diff(now, 'days', true);\n\t    return diff < -6 ? 'sameElse' :\n\t            diff < -1 ? 'lastWeek' :\n\t            diff < 0 ? 'lastDay' :\n\t            diff < 1 ? 'sameDay' :\n\t            diff < 2 ? 'nextDay' :\n\t            diff < 7 ? 'nextWeek' : 'sameElse';\n\t}\n\n\tfunction calendar$1 (time, formats) {\n\t    // We want to compare the start of today, vs this.\n\t    // Getting start-of-today depends on whether we're local/utc/offset or not.\n\t    var now = time || createLocal(),\n\t        sod = cloneWithOffset(now, this).startOf('day'),\n\t        format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n\t    var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n\t    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n\t}\n\n\tfunction clone () {\n\t    return new Moment(this);\n\t}\n\n\tfunction isAfter (input, units) {\n\t    var localInput = isMoment(input) ? input : createLocal(input);\n\t    if (!(this.isValid() && localInput.isValid())) {\n\t        return false;\n\t    }\n\t    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n\t    if (units === 'millisecond') {\n\t        return this.valueOf() > localInput.valueOf();\n\t    } else {\n\t        return localInput.valueOf() < this.clone().startOf(units).valueOf();\n\t    }\n\t}\n\n\tfunction isBefore (input, units) {\n\t    var localInput = isMoment(input) ? input : createLocal(input);\n\t    if (!(this.isValid() && localInput.isValid())) {\n\t        return false;\n\t    }\n\t    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n\t    if (units === 'millisecond') {\n\t        return this.valueOf() < localInput.valueOf();\n\t    } else {\n\t        return this.clone().endOf(units).valueOf() < localInput.valueOf();\n\t    }\n\t}\n\n\tfunction isBetween (from, to, units, inclusivity) {\n\t    inclusivity = inclusivity || '()';\n\t    return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n\t        (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n\t}\n\n\tfunction isSame (input, units) {\n\t    var localInput = isMoment(input) ? input : createLocal(input),\n\t        inputMs;\n\t    if (!(this.isValid() && localInput.isValid())) {\n\t        return false;\n\t    }\n\t    units = normalizeUnits(units || 'millisecond');\n\t    if (units === 'millisecond') {\n\t        return this.valueOf() === localInput.valueOf();\n\t    } else {\n\t        inputMs = localInput.valueOf();\n\t        return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n\t    }\n\t}\n\n\tfunction isSameOrAfter (input, units) {\n\t    return this.isSame(input, units) || this.isAfter(input,units);\n\t}\n\n\tfunction isSameOrBefore (input, units) {\n\t    return this.isSame(input, units) || this.isBefore(input,units);\n\t}\n\n\tfunction diff (input, units, asFloat) {\n\t    var that,\n\t        zoneDelta,\n\t        delta, output;\n\n\t    if (!this.isValid()) {\n\t        return NaN;\n\t    }\n\n\t    that = cloneWithOffset(input, this);\n\n\t    if (!that.isValid()) {\n\t        return NaN;\n\t    }\n\n\t    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n\t    units = normalizeUnits(units);\n\n\t    if (units === 'year' || units === 'month' || units === 'quarter') {\n\t        output = monthDiff(this, that);\n\t        if (units === 'quarter') {\n\t            output = output / 3;\n\t        } else if (units === 'year') {\n\t            output = output / 12;\n\t        }\n\t    } else {\n\t        delta = this - that;\n\t        output = units === 'second' ? delta / 1e3 : // 1000\n\t            units === 'minute' ? delta / 6e4 : // 1000 * 60\n\t            units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60\n\t            units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst\n\t            units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst\n\t            delta;\n\t    }\n\t    return asFloat ? output : absFloor(output);\n\t}\n\n\tfunction monthDiff (a, b) {\n\t    // difference in months\n\t    var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n\t        // b is in (anchor - 1 month, anchor + 1 month)\n\t        anchor = a.clone().add(wholeMonthDiff, 'months'),\n\t        anchor2, adjust;\n\n\t    if (b - anchor < 0) {\n\t        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n\t        // linear across the month\n\t        adjust = (b - anchor) / (anchor - anchor2);\n\t    } else {\n\t        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n\t        // linear across the month\n\t        adjust = (b - anchor) / (anchor2 - anchor);\n\t    }\n\n\t    //check for negative zero, return zero if negative zero\n\t    return -(wholeMonthDiff + adjust) || 0;\n\t}\n\n\thooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n\thooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n\tfunction toString () {\n\t    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n\t}\n\n\tfunction toISOString() {\n\t    if (!this.isValid()) {\n\t        return null;\n\t    }\n\t    var m = this.clone().utc();\n\t    if (m.year() < 0 || m.year() > 9999) {\n\t        return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n\t    }\n\t    if (isFunction(Date.prototype.toISOString)) {\n\t        // native implementation is ~50x faster, use it when we can\n\t        return this.toDate().toISOString();\n\t    }\n\t    return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n\t}\n\n\t/**\n\t * Return a human readable representation of a moment that can\n\t * also be evaluated to get a new moment which is the same\n\t *\n\t * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n\t */\n\tfunction inspect () {\n\t    if (!this.isValid()) {\n\t        return 'moment.invalid(/* ' + this._i + ' */)';\n\t    }\n\t    var func = 'moment';\n\t    var zone = '';\n\t    if (!this.isLocal()) {\n\t        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n\t        zone = 'Z';\n\t    }\n\t    var prefix = '[' + func + '(\"]';\n\t    var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n\t    var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n\t    var suffix = zone + '[\")]';\n\n\t    return this.format(prefix + year + datetime + suffix);\n\t}\n\n\tfunction format (inputString) {\n\t    if (!inputString) {\n\t        inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n\t    }\n\t    var output = formatMoment(this, inputString);\n\t    return this.localeData().postformat(output);\n\t}\n\n\tfunction from (time, withoutSuffix) {\n\t    if (this.isValid() &&\n\t            ((isMoment(time) && time.isValid()) ||\n\t             createLocal(time).isValid())) {\n\t        return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n\t    } else {\n\t        return this.localeData().invalidDate();\n\t    }\n\t}\n\n\tfunction fromNow (withoutSuffix) {\n\t    return this.from(createLocal(), withoutSuffix);\n\t}\n\n\tfunction to (time, withoutSuffix) {\n\t    if (this.isValid() &&\n\t            ((isMoment(time) && time.isValid()) ||\n\t             createLocal(time).isValid())) {\n\t        return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n\t    } else {\n\t        return this.localeData().invalidDate();\n\t    }\n\t}\n\n\tfunction toNow (withoutSuffix) {\n\t    return this.to(createLocal(), withoutSuffix);\n\t}\n\n\t// If passed a locale key, it will set the locale for this\n\t// instance.  Otherwise, it will return the locale configuration\n\t// variables for this instance.\n\tfunction locale (key) {\n\t    var newLocaleData;\n\n\t    if (key === undefined) {\n\t        return this._locale._abbr;\n\t    } else {\n\t        newLocaleData = getLocale(key);\n\t        if (newLocaleData != null) {\n\t            this._locale = newLocaleData;\n\t        }\n\t        return this;\n\t    }\n\t}\n\n\tvar lang = deprecate(\n\t    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n\t    function (key) {\n\t        if (key === undefined) {\n\t            return this.localeData();\n\t        } else {\n\t            return this.locale(key);\n\t        }\n\t    }\n\t);\n\n\tfunction localeData () {\n\t    return this._locale;\n\t}\n\n\tfunction startOf (units) {\n\t    units = normalizeUnits(units);\n\t    // the following switch intentionally omits break keywords\n\t    // to utilize falling through the cases.\n\t    switch (units) {\n\t        case 'year':\n\t            this.month(0);\n\t            /* falls through */\n\t        case 'quarter':\n\t        case 'month':\n\t            this.date(1);\n\t            /* falls through */\n\t        case 'week':\n\t        case 'isoWeek':\n\t        case 'day':\n\t        case 'date':\n\t            this.hours(0);\n\t            /* falls through */\n\t        case 'hour':\n\t            this.minutes(0);\n\t            /* falls through */\n\t        case 'minute':\n\t            this.seconds(0);\n\t            /* falls through */\n\t        case 'second':\n\t            this.milliseconds(0);\n\t    }\n\n\t    // weeks are a special case\n\t    if (units === 'week') {\n\t        this.weekday(0);\n\t    }\n\t    if (units === 'isoWeek') {\n\t        this.isoWeekday(1);\n\t    }\n\n\t    // quarters are also special\n\t    if (units === 'quarter') {\n\t        this.month(Math.floor(this.month() / 3) * 3);\n\t    }\n\n\t    return this;\n\t}\n\n\tfunction endOf (units) {\n\t    units = normalizeUnits(units);\n\t    if (units === undefined || units === 'millisecond') {\n\t        return this;\n\t    }\n\n\t    // 'date' is an alias for 'day', so it should be considered as such.\n\t    if (units === 'date') {\n\t        units = 'day';\n\t    }\n\n\t    return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n\t}\n\n\tfunction valueOf () {\n\t    return this._d.valueOf() - ((this._offset || 0) * 60000);\n\t}\n\n\tfunction unix () {\n\t    return Math.floor(this.valueOf() / 1000);\n\t}\n\n\tfunction toDate () {\n\t    return new Date(this.valueOf());\n\t}\n\n\tfunction toArray () {\n\t    var m = this;\n\t    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n\t}\n\n\tfunction toObject () {\n\t    var m = this;\n\t    return {\n\t        years: m.year(),\n\t        months: m.month(),\n\t        date: m.date(),\n\t        hours: m.hours(),\n\t        minutes: m.minutes(),\n\t        seconds: m.seconds(),\n\t        milliseconds: m.milliseconds()\n\t    };\n\t}\n\n\tfunction toJSON () {\n\t    // new Date(NaN).toJSON() === null\n\t    return this.isValid() ? this.toISOString() : null;\n\t}\n\n\tfunction isValid$2 () {\n\t    return isValid(this);\n\t}\n\n\tfunction parsingFlags () {\n\t    return extend({}, getParsingFlags(this));\n\t}\n\n\tfunction invalidAt () {\n\t    return getParsingFlags(this).overflow;\n\t}\n\n\tfunction creationData() {\n\t    return {\n\t        input: this._i,\n\t        format: this._f,\n\t        locale: this._locale,\n\t        isUTC: this._isUTC,\n\t        strict: this._strict\n\t    };\n\t}\n\n\t// FORMATTING\n\n\taddFormatToken(0, ['gg', 2], 0, function () {\n\t    return this.weekYear() % 100;\n\t});\n\n\taddFormatToken(0, ['GG', 2], 0, function () {\n\t    return this.isoWeekYear() % 100;\n\t});\n\n\tfunction addWeekYearFormatToken (token, getter) {\n\t    addFormatToken(0, [token, token.length], 0, getter);\n\t}\n\n\taddWeekYearFormatToken('gggg',     'weekYear');\n\taddWeekYearFormatToken('ggggg',    'weekYear');\n\taddWeekYearFormatToken('GGGG',  'isoWeekYear');\n\taddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n\t// ALIASES\n\n\taddUnitAlias('weekYear', 'gg');\n\taddUnitAlias('isoWeekYear', 'GG');\n\n\t// PRIORITY\n\n\taddUnitPriority('weekYear', 1);\n\taddUnitPriority('isoWeekYear', 1);\n\n\n\t// PARSING\n\n\taddRegexToken('G',      matchSigned);\n\taddRegexToken('g',      matchSigned);\n\taddRegexToken('GG',     match1to2, match2);\n\taddRegexToken('gg',     match1to2, match2);\n\taddRegexToken('GGGG',   match1to4, match4);\n\taddRegexToken('gggg',   match1to4, match4);\n\taddRegexToken('GGGGG',  match1to6, match6);\n\taddRegexToken('ggggg',  match1to6, match6);\n\n\taddWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n\t    week[token.substr(0, 2)] = toInt(input);\n\t});\n\n\taddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n\t    week[token] = hooks.parseTwoDigitYear(input);\n\t});\n\n\t// MOMENTS\n\n\tfunction getSetWeekYear (input) {\n\t    return getSetWeekYearHelper.call(this,\n\t            input,\n\t            this.week(),\n\t            this.weekday(),\n\t            this.localeData()._week.dow,\n\t            this.localeData()._week.doy);\n\t}\n\n\tfunction getSetISOWeekYear (input) {\n\t    return getSetWeekYearHelper.call(this,\n\t            input, this.isoWeek(), this.isoWeekday(), 1, 4);\n\t}\n\n\tfunction getISOWeeksInYear () {\n\t    return weeksInYear(this.year(), 1, 4);\n\t}\n\n\tfunction getWeeksInYear () {\n\t    var weekInfo = this.localeData()._week;\n\t    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n\t}\n\n\tfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n\t    var weeksTarget;\n\t    if (input == null) {\n\t        return weekOfYear(this, dow, doy).year;\n\t    } else {\n\t        weeksTarget = weeksInYear(input, dow, doy);\n\t        if (week > weeksTarget) {\n\t            week = weeksTarget;\n\t        }\n\t        return setWeekAll.call(this, input, week, weekday, dow, doy);\n\t    }\n\t}\n\n\tfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n\t    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n\t        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n\t    this.year(date.getUTCFullYear());\n\t    this.month(date.getUTCMonth());\n\t    this.date(date.getUTCDate());\n\t    return this;\n\t}\n\n\t// FORMATTING\n\n\taddFormatToken('Q', 0, 'Qo', 'quarter');\n\n\t// ALIASES\n\n\taddUnitAlias('quarter', 'Q');\n\n\t// PRIORITY\n\n\taddUnitPriority('quarter', 7);\n\n\t// PARSING\n\n\taddRegexToken('Q', match1);\n\taddParseToken('Q', function (input, array) {\n\t    array[MONTH] = (toInt(input) - 1) * 3;\n\t});\n\n\t// MOMENTS\n\n\tfunction getSetQuarter (input) {\n\t    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n\t}\n\n\t// FORMATTING\n\n\taddFormatToken('D', ['DD', 2], 'Do', 'date');\n\n\t// ALIASES\n\n\taddUnitAlias('date', 'D');\n\n\t// PRIOROITY\n\taddUnitPriority('date', 9);\n\n\t// PARSING\n\n\taddRegexToken('D',  match1to2);\n\taddRegexToken('DD', match1to2, match2);\n\taddRegexToken('Do', function (isStrict, locale) {\n\t    // TODO: Remove \"ordinalParse\" fallback in next major release.\n\t    return isStrict ?\n\t      (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n\t      locale._dayOfMonthOrdinalParseLenient;\n\t});\n\n\taddParseToken(['D', 'DD'], DATE);\n\taddParseToken('Do', function (input, array) {\n\t    array[DATE] = toInt(input.match(match1to2)[0], 10);\n\t});\n\n\t// MOMENTS\n\n\tvar getSetDayOfMonth = makeGetSet('Date', true);\n\n\t// FORMATTING\n\n\taddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n\t// ALIASES\n\n\taddUnitAlias('dayOfYear', 'DDD');\n\n\t// PRIORITY\n\taddUnitPriority('dayOfYear', 4);\n\n\t// PARSING\n\n\taddRegexToken('DDD',  match1to3);\n\taddRegexToken('DDDD', match3);\n\taddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n\t    config._dayOfYear = toInt(input);\n\t});\n\n\t// HELPERS\n\n\t// MOMENTS\n\n\tfunction getSetDayOfYear (input) {\n\t    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n\t    return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n\t}\n\n\t// FORMATTING\n\n\taddFormatToken('m', ['mm', 2], 0, 'minute');\n\n\t// ALIASES\n\n\taddUnitAlias('minute', 'm');\n\n\t// PRIORITY\n\n\taddUnitPriority('minute', 14);\n\n\t// PARSING\n\n\taddRegexToken('m',  match1to2);\n\taddRegexToken('mm', match1to2, match2);\n\taddParseToken(['m', 'mm'], MINUTE);\n\n\t// MOMENTS\n\n\tvar getSetMinute = makeGetSet('Minutes', false);\n\n\t// FORMATTING\n\n\taddFormatToken('s', ['ss', 2], 0, 'second');\n\n\t// ALIASES\n\n\taddUnitAlias('second', 's');\n\n\t// PRIORITY\n\n\taddUnitPriority('second', 15);\n\n\t// PARSING\n\n\taddRegexToken('s',  match1to2);\n\taddRegexToken('ss', match1to2, match2);\n\taddParseToken(['s', 'ss'], SECOND);\n\n\t// MOMENTS\n\n\tvar getSetSecond = makeGetSet('Seconds', false);\n\n\t// FORMATTING\n\n\taddFormatToken('S', 0, 0, function () {\n\t    return ~~(this.millisecond() / 100);\n\t});\n\n\taddFormatToken(0, ['SS', 2], 0, function () {\n\t    return ~~(this.millisecond() / 10);\n\t});\n\n\taddFormatToken(0, ['SSS', 3], 0, 'millisecond');\n\taddFormatToken(0, ['SSSS', 4], 0, function () {\n\t    return this.millisecond() * 10;\n\t});\n\taddFormatToken(0, ['SSSSS', 5], 0, function () {\n\t    return this.millisecond() * 100;\n\t});\n\taddFormatToken(0, ['SSSSSS', 6], 0, function () {\n\t    return this.millisecond() * 1000;\n\t});\n\taddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n\t    return this.millisecond() * 10000;\n\t});\n\taddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n\t    return this.millisecond() * 100000;\n\t});\n\taddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n\t    return this.millisecond() * 1000000;\n\t});\n\n\n\t// ALIASES\n\n\taddUnitAlias('millisecond', 'ms');\n\n\t// PRIORITY\n\n\taddUnitPriority('millisecond', 16);\n\n\t// PARSING\n\n\taddRegexToken('S',    match1to3, match1);\n\taddRegexToken('SS',   match1to3, match2);\n\taddRegexToken('SSS',  match1to3, match3);\n\n\tvar token;\n\tfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n\t    addRegexToken(token, matchUnsigned);\n\t}\n\n\tfunction parseMs(input, array) {\n\t    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n\t}\n\n\tfor (token = 'S'; token.length <= 9; token += 'S') {\n\t    addParseToken(token, parseMs);\n\t}\n\t// MOMENTS\n\n\tvar getSetMillisecond = makeGetSet('Milliseconds', false);\n\n\t// FORMATTING\n\n\taddFormatToken('z',  0, 0, 'zoneAbbr');\n\taddFormatToken('zz', 0, 0, 'zoneName');\n\n\t// MOMENTS\n\n\tfunction getZoneAbbr () {\n\t    return this._isUTC ? 'UTC' : '';\n\t}\n\n\tfunction getZoneName () {\n\t    return this._isUTC ? 'Coordinated Universal Time' : '';\n\t}\n\n\tvar proto = Moment.prototype;\n\n\tproto.add               = add;\n\tproto.calendar          = calendar$1;\n\tproto.clone             = clone;\n\tproto.diff              = diff;\n\tproto.endOf             = endOf;\n\tproto.format            = format;\n\tproto.from              = from;\n\tproto.fromNow           = fromNow;\n\tproto.to                = to;\n\tproto.toNow             = toNow;\n\tproto.get               = stringGet;\n\tproto.invalidAt         = invalidAt;\n\tproto.isAfter           = isAfter;\n\tproto.isBefore          = isBefore;\n\tproto.isBetween         = isBetween;\n\tproto.isSame            = isSame;\n\tproto.isSameOrAfter     = isSameOrAfter;\n\tproto.isSameOrBefore    = isSameOrBefore;\n\tproto.isValid           = isValid$2;\n\tproto.lang              = lang;\n\tproto.locale            = locale;\n\tproto.localeData        = localeData;\n\tproto.max               = prototypeMax;\n\tproto.min               = prototypeMin;\n\tproto.parsingFlags      = parsingFlags;\n\tproto.set               = stringSet;\n\tproto.startOf           = startOf;\n\tproto.subtract          = subtract;\n\tproto.toArray           = toArray;\n\tproto.toObject          = toObject;\n\tproto.toDate            = toDate;\n\tproto.toISOString       = toISOString;\n\tproto.inspect           = inspect;\n\tproto.toJSON            = toJSON;\n\tproto.toString          = toString;\n\tproto.unix              = unix;\n\tproto.valueOf           = valueOf;\n\tproto.creationData      = creationData;\n\n\t// Year\n\tproto.year       = getSetYear;\n\tproto.isLeapYear = getIsLeapYear;\n\n\t// Week Year\n\tproto.weekYear    = getSetWeekYear;\n\tproto.isoWeekYear = getSetISOWeekYear;\n\n\t// Quarter\n\tproto.quarter = proto.quarters = getSetQuarter;\n\n\t// Month\n\tproto.month       = getSetMonth;\n\tproto.daysInMonth = getDaysInMonth;\n\n\t// Week\n\tproto.week           = proto.weeks        = getSetWeek;\n\tproto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\n\tproto.weeksInYear    = getWeeksInYear;\n\tproto.isoWeeksInYear = getISOWeeksInYear;\n\n\t// Day\n\tproto.date       = getSetDayOfMonth;\n\tproto.day        = proto.days             = getSetDayOfWeek;\n\tproto.weekday    = getSetLocaleDayOfWeek;\n\tproto.isoWeekday = getSetISODayOfWeek;\n\tproto.dayOfYear  = getSetDayOfYear;\n\n\t// Hour\n\tproto.hour = proto.hours = getSetHour;\n\n\t// Minute\n\tproto.minute = proto.minutes = getSetMinute;\n\n\t// Second\n\tproto.second = proto.seconds = getSetSecond;\n\n\t// Millisecond\n\tproto.millisecond = proto.milliseconds = getSetMillisecond;\n\n\t// Offset\n\tproto.utcOffset            = getSetOffset;\n\tproto.utc                  = setOffsetToUTC;\n\tproto.local                = setOffsetToLocal;\n\tproto.parseZone            = setOffsetToParsedOffset;\n\tproto.hasAlignedHourOffset = hasAlignedHourOffset;\n\tproto.isDST                = isDaylightSavingTime;\n\tproto.isLocal              = isLocal;\n\tproto.isUtcOffset          = isUtcOffset;\n\tproto.isUtc                = isUtc;\n\tproto.isUTC                = isUtc;\n\n\t// Timezone\n\tproto.zoneAbbr = getZoneAbbr;\n\tproto.zoneName = getZoneName;\n\n\t// Deprecations\n\tproto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n\tproto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n\tproto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n\tproto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n\tproto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n\tfunction createUnix (input) {\n\t    return createLocal(input * 1000);\n\t}\n\n\tfunction createInZone () {\n\t    return createLocal.apply(null, arguments).parseZone();\n\t}\n\n\tfunction preParsePostFormat (string) {\n\t    return string;\n\t}\n\n\tvar proto$1 = Locale.prototype;\n\n\tproto$1.calendar        = calendar;\n\tproto$1.longDateFormat  = longDateFormat;\n\tproto$1.invalidDate     = invalidDate;\n\tproto$1.ordinal         = ordinal;\n\tproto$1.preparse        = preParsePostFormat;\n\tproto$1.postformat      = preParsePostFormat;\n\tproto$1.relativeTime    = relativeTime;\n\tproto$1.pastFuture      = pastFuture;\n\tproto$1.set             = set;\n\n\t// Month\n\tproto$1.months            =        localeMonths;\n\tproto$1.monthsShort       =        localeMonthsShort;\n\tproto$1.monthsParse       =        localeMonthsParse;\n\tproto$1.monthsRegex       = monthsRegex;\n\tproto$1.monthsShortRegex  = monthsShortRegex;\n\n\t// Week\n\tproto$1.week = localeWeek;\n\tproto$1.firstDayOfYear = localeFirstDayOfYear;\n\tproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n\t// Day of Week\n\tproto$1.weekdays       =        localeWeekdays;\n\tproto$1.weekdaysMin    =        localeWeekdaysMin;\n\tproto$1.weekdaysShort  =        localeWeekdaysShort;\n\tproto$1.weekdaysParse  =        localeWeekdaysParse;\n\n\tproto$1.weekdaysRegex       =        weekdaysRegex;\n\tproto$1.weekdaysShortRegex  =        weekdaysShortRegex;\n\tproto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n\t// Hours\n\tproto$1.isPM = localeIsPM;\n\tproto$1.meridiem = localeMeridiem;\n\n\tfunction get$1 (format, index, field, setter) {\n\t    var locale = getLocale();\n\t    var utc = createUTC().set(setter, index);\n\t    return locale[field](utc, format);\n\t}\n\n\tfunction listMonthsImpl (format, index, field) {\n\t    if (isNumber(format)) {\n\t        index = format;\n\t        format = undefined;\n\t    }\n\n\t    format = format || '';\n\n\t    if (index != null) {\n\t        return get$1(format, index, field, 'month');\n\t    }\n\n\t    var i;\n\t    var out = [];\n\t    for (i = 0; i < 12; i++) {\n\t        out[i] = get$1(format, i, field, 'month');\n\t    }\n\t    return out;\n\t}\n\n\t// ()\n\t// (5)\n\t// (fmt, 5)\n\t// (fmt)\n\t// (true)\n\t// (true, 5)\n\t// (true, fmt, 5)\n\t// (true, fmt)\n\tfunction listWeekdaysImpl (localeSorted, format, index, field) {\n\t    if (typeof localeSorted === 'boolean') {\n\t        if (isNumber(format)) {\n\t            index = format;\n\t            format = undefined;\n\t        }\n\n\t        format = format || '';\n\t    } else {\n\t        format = localeSorted;\n\t        index = format;\n\t        localeSorted = false;\n\n\t        if (isNumber(format)) {\n\t            index = format;\n\t            format = undefined;\n\t        }\n\n\t        format = format || '';\n\t    }\n\n\t    var locale = getLocale(),\n\t        shift = localeSorted ? locale._week.dow : 0;\n\n\t    if (index != null) {\n\t        return get$1(format, (index + shift) % 7, field, 'day');\n\t    }\n\n\t    var i;\n\t    var out = [];\n\t    for (i = 0; i < 7; i++) {\n\t        out[i] = get$1(format, (i + shift) % 7, field, 'day');\n\t    }\n\t    return out;\n\t}\n\n\tfunction listMonths (format, index) {\n\t    return listMonthsImpl(format, index, 'months');\n\t}\n\n\tfunction listMonthsShort (format, index) {\n\t    return listMonthsImpl(format, index, 'monthsShort');\n\t}\n\n\tfunction listWeekdays (localeSorted, format, index) {\n\t    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n\t}\n\n\tfunction listWeekdaysShort (localeSorted, format, index) {\n\t    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n\t}\n\n\tfunction listWeekdaysMin (localeSorted, format, index) {\n\t    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n\t}\n\n\tgetSetGlobalLocale('en', {\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n\t    ordinal : function (number) {\n\t        var b = number % 10,\n\t            output = (toInt(number % 100 / 10) === 1) ? 'th' :\n\t            (b === 1) ? 'st' :\n\t            (b === 2) ? 'nd' :\n\t            (b === 3) ? 'rd' : 'th';\n\t        return number + output;\n\t    }\n\t});\n\n\t// Side effect imports\n\thooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n\thooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n\tvar mathAbs = Math.abs;\n\n\tfunction abs () {\n\t    var data           = this._data;\n\n\t    this._milliseconds = mathAbs(this._milliseconds);\n\t    this._days         = mathAbs(this._days);\n\t    this._months       = mathAbs(this._months);\n\n\t    data.milliseconds  = mathAbs(data.milliseconds);\n\t    data.seconds       = mathAbs(data.seconds);\n\t    data.minutes       = mathAbs(data.minutes);\n\t    data.hours         = mathAbs(data.hours);\n\t    data.months        = mathAbs(data.months);\n\t    data.years         = mathAbs(data.years);\n\n\t    return this;\n\t}\n\n\tfunction addSubtract$1 (duration, input, value, direction) {\n\t    var other = createDuration(input, value);\n\n\t    duration._milliseconds += direction * other._milliseconds;\n\t    duration._days         += direction * other._days;\n\t    duration._months       += direction * other._months;\n\n\t    return duration._bubble();\n\t}\n\n\t// supports only 2.0-style add(1, 's') or add(duration)\n\tfunction add$1 (input, value) {\n\t    return addSubtract$1(this, input, value, 1);\n\t}\n\n\t// supports only 2.0-style subtract(1, 's') or subtract(duration)\n\tfunction subtract$1 (input, value) {\n\t    return addSubtract$1(this, input, value, -1);\n\t}\n\n\tfunction absCeil (number) {\n\t    if (number < 0) {\n\t        return Math.floor(number);\n\t    } else {\n\t        return Math.ceil(number);\n\t    }\n\t}\n\n\tfunction bubble () {\n\t    var milliseconds = this._milliseconds;\n\t    var days         = this._days;\n\t    var months       = this._months;\n\t    var data         = this._data;\n\t    var seconds, minutes, hours, years, monthsFromDays;\n\n\t    // if we have a mix of positive and negative values, bubble down first\n\t    // check: https://github.com/moment/moment/issues/2166\n\t    if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n\t            (milliseconds <= 0 && days <= 0 && months <= 0))) {\n\t        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n\t        days = 0;\n\t        months = 0;\n\t    }\n\n\t    // The following code bubbles up values, see the tests for\n\t    // examples of what that means.\n\t    data.milliseconds = milliseconds % 1000;\n\n\t    seconds           = absFloor(milliseconds / 1000);\n\t    data.seconds      = seconds % 60;\n\n\t    minutes           = absFloor(seconds / 60);\n\t    data.minutes      = minutes % 60;\n\n\t    hours             = absFloor(minutes / 60);\n\t    data.hours        = hours % 24;\n\n\t    days += absFloor(hours / 24);\n\n\t    // convert days to months\n\t    monthsFromDays = absFloor(daysToMonths(days));\n\t    months += monthsFromDays;\n\t    days -= absCeil(monthsToDays(monthsFromDays));\n\n\t    // 12 months -> 1 year\n\t    years = absFloor(months / 12);\n\t    months %= 12;\n\n\t    data.days   = days;\n\t    data.months = months;\n\t    data.years  = years;\n\n\t    return this;\n\t}\n\n\tfunction daysToMonths (days) {\n\t    // 400 years have 146097 days (taking into account leap year rules)\n\t    // 400 years have 12 months === 4800\n\t    return days * 4800 / 146097;\n\t}\n\n\tfunction monthsToDays (months) {\n\t    // the reverse of daysToMonths\n\t    return months * 146097 / 4800;\n\t}\n\n\tfunction as (units) {\n\t    if (!this.isValid()) {\n\t        return NaN;\n\t    }\n\t    var days;\n\t    var months;\n\t    var milliseconds = this._milliseconds;\n\n\t    units = normalizeUnits(units);\n\n\t    if (units === 'month' || units === 'year') {\n\t        days   = this._days   + milliseconds / 864e5;\n\t        months = this._months + daysToMonths(days);\n\t        return units === 'month' ? months : months / 12;\n\t    } else {\n\t        // handle milliseconds separately because of floating point math errors (issue #1867)\n\t        days = this._days + Math.round(monthsToDays(this._months));\n\t        switch (units) {\n\t            case 'week'   : return days / 7     + milliseconds / 6048e5;\n\t            case 'day'    : return days         + milliseconds / 864e5;\n\t            case 'hour'   : return days * 24    + milliseconds / 36e5;\n\t            case 'minute' : return days * 1440  + milliseconds / 6e4;\n\t            case 'second' : return days * 86400 + milliseconds / 1000;\n\t            // Math.floor prevents floating point math errors here\n\t            case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n\t            default: throw new Error('Unknown unit ' + units);\n\t        }\n\t    }\n\t}\n\n\t// TODO: Use this.as('ms')?\n\tfunction valueOf$1 () {\n\t    if (!this.isValid()) {\n\t        return NaN;\n\t    }\n\t    return (\n\t        this._milliseconds +\n\t        this._days * 864e5 +\n\t        (this._months % 12) * 2592e6 +\n\t        toInt(this._months / 12) * 31536e6\n\t    );\n\t}\n\n\tfunction makeAs (alias) {\n\t    return function () {\n\t        return this.as(alias);\n\t    };\n\t}\n\n\tvar asMilliseconds = makeAs('ms');\n\tvar asSeconds      = makeAs('s');\n\tvar asMinutes      = makeAs('m');\n\tvar asHours        = makeAs('h');\n\tvar asDays         = makeAs('d');\n\tvar asWeeks        = makeAs('w');\n\tvar asMonths       = makeAs('M');\n\tvar asYears        = makeAs('y');\n\n\tfunction get$2 (units) {\n\t    units = normalizeUnits(units);\n\t    return this.isValid() ? this[units + 's']() : NaN;\n\t}\n\n\tfunction makeGetter(name) {\n\t    return function () {\n\t        return this.isValid() ? this._data[name] : NaN;\n\t    };\n\t}\n\n\tvar milliseconds = makeGetter('milliseconds');\n\tvar seconds      = makeGetter('seconds');\n\tvar minutes      = makeGetter('minutes');\n\tvar hours        = makeGetter('hours');\n\tvar days         = makeGetter('days');\n\tvar months       = makeGetter('months');\n\tvar years        = makeGetter('years');\n\n\tfunction weeks () {\n\t    return absFloor(this.days() / 7);\n\t}\n\n\tvar round = Math.round;\n\tvar thresholds = {\n\t    ss: 44,         // a few seconds to seconds\n\t    s : 45,         // seconds to minute\n\t    m : 45,         // minutes to hour\n\t    h : 22,         // hours to day\n\t    d : 26,         // days to month\n\t    M : 11          // months to year\n\t};\n\n\t// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n\tfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n\t    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n\t}\n\n\tfunction relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n\t    var duration = createDuration(posNegDuration).abs();\n\t    var seconds  = round(duration.as('s'));\n\t    var minutes  = round(duration.as('m'));\n\t    var hours    = round(duration.as('h'));\n\t    var days     = round(duration.as('d'));\n\t    var months   = round(duration.as('M'));\n\t    var years    = round(duration.as('y'));\n\n\t    var a = seconds <= thresholds.ss && ['s', seconds]  ||\n\t            seconds < thresholds.s   && ['ss', seconds] ||\n\t            minutes <= 1             && ['m']           ||\n\t            minutes < thresholds.m   && ['mm', minutes] ||\n\t            hours   <= 1             && ['h']           ||\n\t            hours   < thresholds.h   && ['hh', hours]   ||\n\t            days    <= 1             && ['d']           ||\n\t            days    < thresholds.d   && ['dd', days]    ||\n\t            months  <= 1             && ['M']           ||\n\t            months  < thresholds.M   && ['MM', months]  ||\n\t            years   <= 1             && ['y']           || ['yy', years];\n\n\t    a[2] = withoutSuffix;\n\t    a[3] = +posNegDuration > 0;\n\t    a[4] = locale;\n\t    return substituteTimeAgo.apply(null, a);\n\t}\n\n\t// This function allows you to set the rounding function for relative time strings\n\tfunction getSetRelativeTimeRounding (roundingFunction) {\n\t    if (roundingFunction === undefined) {\n\t        return round;\n\t    }\n\t    if (typeof(roundingFunction) === 'function') {\n\t        round = roundingFunction;\n\t        return true;\n\t    }\n\t    return false;\n\t}\n\n\t// This function allows you to set a threshold for relative time strings\n\tfunction getSetRelativeTimeThreshold (threshold, limit) {\n\t    if (thresholds[threshold] === undefined) {\n\t        return false;\n\t    }\n\t    if (limit === undefined) {\n\t        return thresholds[threshold];\n\t    }\n\t    thresholds[threshold] = limit;\n\t    if (threshold === 's') {\n\t        thresholds.ss = limit - 1;\n\t    }\n\t    return true;\n\t}\n\n\tfunction humanize (withSuffix) {\n\t    if (!this.isValid()) {\n\t        return this.localeData().invalidDate();\n\t    }\n\n\t    var locale = this.localeData();\n\t    var output = relativeTime$1(this, !withSuffix, locale);\n\n\t    if (withSuffix) {\n\t        output = locale.pastFuture(+this, output);\n\t    }\n\n\t    return locale.postformat(output);\n\t}\n\n\tvar abs$1 = Math.abs;\n\n\tfunction toISOString$1() {\n\t    // for ISO strings we do not use the normal bubbling rules:\n\t    //  * milliseconds bubble up until they become hours\n\t    //  * days do not bubble at all\n\t    //  * months bubble up until they become years\n\t    // This is because there is no context-free conversion between hours and days\n\t    // (think of clock changes)\n\t    // and also not between days and months (28-31 days per month)\n\t    if (!this.isValid()) {\n\t        return this.localeData().invalidDate();\n\t    }\n\n\t    var seconds = abs$1(this._milliseconds) / 1000;\n\t    var days         = abs$1(this._days);\n\t    var months       = abs$1(this._months);\n\t    var minutes, hours, years;\n\n\t    // 3600 seconds -> 60 minutes -> 1 hour\n\t    minutes           = absFloor(seconds / 60);\n\t    hours             = absFloor(minutes / 60);\n\t    seconds %= 60;\n\t    minutes %= 60;\n\n\t    // 12 months -> 1 year\n\t    years  = absFloor(months / 12);\n\t    months %= 12;\n\n\n\t    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n\t    var Y = years;\n\t    var M = months;\n\t    var D = days;\n\t    var h = hours;\n\t    var m = minutes;\n\t    var s = seconds;\n\t    var total = this.asSeconds();\n\n\t    if (!total) {\n\t        // this is the same as C#'s (Noda) and python (isodate)...\n\t        // but not other JS (goog.date)\n\t        return 'P0D';\n\t    }\n\n\t    return (total < 0 ? '-' : '') +\n\t        'P' +\n\t        (Y ? Y + 'Y' : '') +\n\t        (M ? M + 'M' : '') +\n\t        (D ? D + 'D' : '') +\n\t        ((h || m || s) ? 'T' : '') +\n\t        (h ? h + 'H' : '') +\n\t        (m ? m + 'M' : '') +\n\t        (s ? s + 'S' : '');\n\t}\n\n\tvar proto$2 = Duration.prototype;\n\n\tproto$2.isValid        = isValid$1;\n\tproto$2.abs            = abs;\n\tproto$2.add            = add$1;\n\tproto$2.subtract       = subtract$1;\n\tproto$2.as             = as;\n\tproto$2.asMilliseconds = asMilliseconds;\n\tproto$2.asSeconds      = asSeconds;\n\tproto$2.asMinutes      = asMinutes;\n\tproto$2.asHours        = asHours;\n\tproto$2.asDays         = asDays;\n\tproto$2.asWeeks        = asWeeks;\n\tproto$2.asMonths       = asMonths;\n\tproto$2.asYears        = asYears;\n\tproto$2.valueOf        = valueOf$1;\n\tproto$2._bubble        = bubble;\n\tproto$2.get            = get$2;\n\tproto$2.milliseconds   = milliseconds;\n\tproto$2.seconds        = seconds;\n\tproto$2.minutes        = minutes;\n\tproto$2.hours          = hours;\n\tproto$2.days           = days;\n\tproto$2.weeks          = weeks;\n\tproto$2.months         = months;\n\tproto$2.years          = years;\n\tproto$2.humanize       = humanize;\n\tproto$2.toISOString    = toISOString$1;\n\tproto$2.toString       = toISOString$1;\n\tproto$2.toJSON         = toISOString$1;\n\tproto$2.locale         = locale;\n\tproto$2.localeData     = localeData;\n\n\t// Deprecations\n\tproto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n\tproto$2.lang = lang;\n\n\t// Side effect imports\n\n\t// FORMATTING\n\n\taddFormatToken('X', 0, 0, 'unix');\n\taddFormatToken('x', 0, 0, 'valueOf');\n\n\t// PARSING\n\n\taddRegexToken('x', matchSigned);\n\taddRegexToken('X', matchTimestamp);\n\taddParseToken('X', function (input, array, config) {\n\t    config._d = new Date(parseFloat(input, 10) * 1000);\n\t});\n\taddParseToken('x', function (input, array, config) {\n\t    config._d = new Date(toInt(input));\n\t});\n\n\t// Side effect imports\n\n\n\thooks.version = '2.18.1';\n\n\tsetHookCallback(createLocal);\n\n\thooks.fn                    = proto;\n\thooks.min                   = min;\n\thooks.max                   = max;\n\thooks.now                   = now;\n\thooks.utc                   = createUTC;\n\thooks.unix                  = createUnix;\n\thooks.months                = listMonths;\n\thooks.isDate                = isDate;\n\thooks.locale                = getSetGlobalLocale;\n\thooks.invalid               = createInvalid;\n\thooks.duration              = createDuration;\n\thooks.isMoment              = isMoment;\n\thooks.weekdays              = listWeekdays;\n\thooks.parseZone             = createInZone;\n\thooks.localeData            = getLocale;\n\thooks.isDuration            = isDuration;\n\thooks.monthsShort           = listMonthsShort;\n\thooks.weekdaysMin           = listWeekdaysMin;\n\thooks.defineLocale          = defineLocale;\n\thooks.updateLocale          = updateLocale;\n\thooks.locales               = listLocales;\n\thooks.weekdaysShort         = listWeekdaysShort;\n\thooks.normalizeUnits        = normalizeUnits;\n\thooks.relativeTimeRounding = getSetRelativeTimeRounding;\n\thooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n\thooks.calendarFormat        = getCalendarFormat;\n\thooks.prototype             = proto;\n\n\treturn hooks;\n\n\t})));\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(143)(module)))\n\n/***/ },\n/* 8 */,\n/* 9 */,\n/* 10 */,\n/* 11 */,\n/* 12 */,\n/* 13 */,\n/* 14 */,\n/* 15 */,\n/* 16 */,\n/* 17 */,\n/* 18 */,\n/* 19 */,\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./af\": 25,\n\t\t\"./af.js\": 25,\n\t\t\"./ar\": 32,\n\t\t\"./ar-dz\": 26,\n\t\t\"./ar-dz.js\": 26,\n\t\t\"./ar-kw\": 27,\n\t\t\"./ar-kw.js\": 27,\n\t\t\"./ar-ly\": 28,\n\t\t\"./ar-ly.js\": 28,\n\t\t\"./ar-ma\": 29,\n\t\t\"./ar-ma.js\": 29,\n\t\t\"./ar-sa\": 30,\n\t\t\"./ar-sa.js\": 30,\n\t\t\"./ar-tn\": 31,\n\t\t\"./ar-tn.js\": 31,\n\t\t\"./ar.js\": 32,\n\t\t\"./az\": 33,\n\t\t\"./az.js\": 33,\n\t\t\"./be\": 34,\n\t\t\"./be.js\": 34,\n\t\t\"./bg\": 35,\n\t\t\"./bg.js\": 35,\n\t\t\"./bn\": 36,\n\t\t\"./bn.js\": 36,\n\t\t\"./bo\": 37,\n\t\t\"./bo.js\": 37,\n\t\t\"./br\": 38,\n\t\t\"./br.js\": 38,\n\t\t\"./bs\": 39,\n\t\t\"./bs.js\": 39,\n\t\t\"./ca\": 40,\n\t\t\"./ca.js\": 40,\n\t\t\"./cs\": 41,\n\t\t\"./cs.js\": 41,\n\t\t\"./cv\": 42,\n\t\t\"./cv.js\": 42,\n\t\t\"./cy\": 43,\n\t\t\"./cy.js\": 43,\n\t\t\"./da\": 44,\n\t\t\"./da.js\": 44,\n\t\t\"./de\": 47,\n\t\t\"./de-at\": 45,\n\t\t\"./de-at.js\": 45,\n\t\t\"./de-ch\": 46,\n\t\t\"./de-ch.js\": 46,\n\t\t\"./de.js\": 47,\n\t\t\"./dv\": 48,\n\t\t\"./dv.js\": 48,\n\t\t\"./el\": 49,\n\t\t\"./el.js\": 49,\n\t\t\"./en-au\": 50,\n\t\t\"./en-au.js\": 50,\n\t\t\"./en-ca\": 51,\n\t\t\"./en-ca.js\": 51,\n\t\t\"./en-gb\": 52,\n\t\t\"./en-gb.js\": 52,\n\t\t\"./en-ie\": 53,\n\t\t\"./en-ie.js\": 53,\n\t\t\"./en-nz\": 54,\n\t\t\"./en-nz.js\": 54,\n\t\t\"./eo\": 55,\n\t\t\"./eo.js\": 55,\n\t\t\"./es\": 57,\n\t\t\"./es-do\": 56,\n\t\t\"./es-do.js\": 56,\n\t\t\"./es.js\": 57,\n\t\t\"./et\": 58,\n\t\t\"./et.js\": 58,\n\t\t\"./eu\": 59,\n\t\t\"./eu.js\": 59,\n\t\t\"./fa\": 60,\n\t\t\"./fa.js\": 60,\n\t\t\"./fi\": 61,\n\t\t\"./fi.js\": 61,\n\t\t\"./fo\": 62,\n\t\t\"./fo.js\": 62,\n\t\t\"./fr\": 65,\n\t\t\"./fr-ca\": 63,\n\t\t\"./fr-ca.js\": 63,\n\t\t\"./fr-ch\": 64,\n\t\t\"./fr-ch.js\": 64,\n\t\t\"./fr.js\": 65,\n\t\t\"./fy\": 66,\n\t\t\"./fy.js\": 66,\n\t\t\"./gd\": 67,\n\t\t\"./gd.js\": 67,\n\t\t\"./gl\": 68,\n\t\t\"./gl.js\": 68,\n\t\t\"./gom-latn\": 69,\n\t\t\"./gom-latn.js\": 69,\n\t\t\"./he\": 70,\n\t\t\"./he.js\": 70,\n\t\t\"./hi\": 71,\n\t\t\"./hi.js\": 71,\n\t\t\"./hr\": 72,\n\t\t\"./hr.js\": 72,\n\t\t\"./hu\": 73,\n\t\t\"./hu.js\": 73,\n\t\t\"./hy-am\": 74,\n\t\t\"./hy-am.js\": 74,\n\t\t\"./id\": 75,\n\t\t\"./id.js\": 75,\n\t\t\"./is\": 76,\n\t\t\"./is.js\": 76,\n\t\t\"./it\": 77,\n\t\t\"./it.js\": 77,\n\t\t\"./ja\": 78,\n\t\t\"./ja.js\": 78,\n\t\t\"./jv\": 79,\n\t\t\"./jv.js\": 79,\n\t\t\"./ka\": 80,\n\t\t\"./ka.js\": 80,\n\t\t\"./kk\": 81,\n\t\t\"./kk.js\": 81,\n\t\t\"./km\": 82,\n\t\t\"./km.js\": 82,\n\t\t\"./kn\": 83,\n\t\t\"./kn.js\": 83,\n\t\t\"./ko\": 84,\n\t\t\"./ko.js\": 84,\n\t\t\"./ky\": 85,\n\t\t\"./ky.js\": 85,\n\t\t\"./lb\": 86,\n\t\t\"./lb.js\": 86,\n\t\t\"./lo\": 87,\n\t\t\"./lo.js\": 87,\n\t\t\"./lt\": 88,\n\t\t\"./lt.js\": 88,\n\t\t\"./lv\": 89,\n\t\t\"./lv.js\": 89,\n\t\t\"./me\": 90,\n\t\t\"./me.js\": 90,\n\t\t\"./mi\": 91,\n\t\t\"./mi.js\": 91,\n\t\t\"./mk\": 92,\n\t\t\"./mk.js\": 92,\n\t\t\"./ml\": 93,\n\t\t\"./ml.js\": 93,\n\t\t\"./mr\": 94,\n\t\t\"./mr.js\": 94,\n\t\t\"./ms\": 96,\n\t\t\"./ms-my\": 95,\n\t\t\"./ms-my.js\": 95,\n\t\t\"./ms.js\": 96,\n\t\t\"./my\": 97,\n\t\t\"./my.js\": 97,\n\t\t\"./nb\": 98,\n\t\t\"./nb.js\": 98,\n\t\t\"./ne\": 99,\n\t\t\"./ne.js\": 99,\n\t\t\"./nl\": 101,\n\t\t\"./nl-be\": 100,\n\t\t\"./nl-be.js\": 100,\n\t\t\"./nl.js\": 101,\n\t\t\"./nn\": 102,\n\t\t\"./nn.js\": 102,\n\t\t\"./pa-in\": 103,\n\t\t\"./pa-in.js\": 103,\n\t\t\"./pl\": 104,\n\t\t\"./pl.js\": 104,\n\t\t\"./pt\": 106,\n\t\t\"./pt-br\": 105,\n\t\t\"./pt-br.js\": 105,\n\t\t\"./pt.js\": 106,\n\t\t\"./ro\": 107,\n\t\t\"./ro.js\": 107,\n\t\t\"./ru\": 108,\n\t\t\"./ru.js\": 108,\n\t\t\"./sd\": 109,\n\t\t\"./sd.js\": 109,\n\t\t\"./se\": 110,\n\t\t\"./se.js\": 110,\n\t\t\"./si\": 111,\n\t\t\"./si.js\": 111,\n\t\t\"./sk\": 112,\n\t\t\"./sk.js\": 112,\n\t\t\"./sl\": 113,\n\t\t\"./sl.js\": 113,\n\t\t\"./sq\": 114,\n\t\t\"./sq.js\": 114,\n\t\t\"./sr\": 116,\n\t\t\"./sr-cyrl\": 115,\n\t\t\"./sr-cyrl.js\": 115,\n\t\t\"./sr.js\": 116,\n\t\t\"./ss\": 117,\n\t\t\"./ss.js\": 117,\n\t\t\"./sv\": 118,\n\t\t\"./sv.js\": 118,\n\t\t\"./sw\": 119,\n\t\t\"./sw.js\": 119,\n\t\t\"./ta\": 120,\n\t\t\"./ta.js\": 120,\n\t\t\"./te\": 121,\n\t\t\"./te.js\": 121,\n\t\t\"./tet\": 122,\n\t\t\"./tet.js\": 122,\n\t\t\"./th\": 123,\n\t\t\"./th.js\": 123,\n\t\t\"./tl-ph\": 124,\n\t\t\"./tl-ph.js\": 124,\n\t\t\"./tlh\": 125,\n\t\t\"./tlh.js\": 125,\n\t\t\"./tr\": 126,\n\t\t\"./tr.js\": 126,\n\t\t\"./tzl\": 127,\n\t\t\"./tzl.js\": 127,\n\t\t\"./tzm\": 129,\n\t\t\"./tzm-latn\": 128,\n\t\t\"./tzm-latn.js\": 128,\n\t\t\"./tzm.js\": 129,\n\t\t\"./uk\": 130,\n\t\t\"./uk.js\": 130,\n\t\t\"./ur\": 131,\n\t\t\"./ur.js\": 131,\n\t\t\"./uz\": 133,\n\t\t\"./uz-latn\": 132,\n\t\t\"./uz-latn.js\": 132,\n\t\t\"./uz.js\": 133,\n\t\t\"./vi\": 134,\n\t\t\"./vi.js\": 134,\n\t\t\"./x-pseudo\": 135,\n\t\t\"./x-pseudo.js\": 135,\n\t\t\"./yo\": 136,\n\t\t\"./yo.js\": 136,\n\t\t\"./zh-cn\": 137,\n\t\t\"./zh-cn.js\": 137,\n\t\t\"./zh-hk\": 138,\n\t\t\"./zh-hk.js\": 138,\n\t\t\"./zh-tw\": 139,\n\t\t\"./zh-tw.js\": 139\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 20;\n\n\n/***/ },\n/* 21 */,\n/* 22 */,\n/* 23 */,\n/* 24 */,\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Afrikaans [af]\n\t//! author : Werner Mollentze : https://github.com/wernerm\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar af = moment.defineLocale('af', {\n\t    months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n\t    weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n\t    weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n\t    weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n\t    meridiemParse: /vm|nm/i,\n\t    isPM : function (input) {\n\t        return /^nm$/i.test(input);\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours < 12) {\n\t            return isLower ? 'vm' : 'VM';\n\t        } else {\n\t            return isLower ? 'nm' : 'NM';\n\t        }\n\t    },\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Vandag om] LT',\n\t        nextDay : '[Môre om] LT',\n\t        nextWeek : 'dddd [om] LT',\n\t        lastDay : '[Gister om] LT',\n\t        lastWeek : '[Laas] dddd [om] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'oor %s',\n\t        past : '%s gelede',\n\t        s : '\\'n paar sekondes',\n\t        m : '\\'n minuut',\n\t        mm : '%d minute',\n\t        h : '\\'n uur',\n\t        hh : '%d ure',\n\t        d : '\\'n dag',\n\t        dd : '%d dae',\n\t        M : '\\'n maand',\n\t        MM : '%d maande',\n\t        y : '\\'n jaar',\n\t        yy : '%d jaar'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n\t    ordinal : function (number) {\n\t        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n\t    },\n\t    week : {\n\t        dow : 1, // Maandag is die eerste dag van die week.\n\t        doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n\t    }\n\t});\n\n\treturn af;\n\n\t})));\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Arabic (Algeria) [ar-dz]\n\t//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar arDz = moment.defineLocale('ar-dz', {\n\t    months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t    monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t    weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n\t    weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[اليوم على الساعة] LT',\n\t        nextDay: '[غدا على الساعة] LT',\n\t        nextWeek: 'dddd [على الساعة] LT',\n\t        lastDay: '[أمس على الساعة] LT',\n\t        lastWeek: 'dddd [على الساعة] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'في %s',\n\t        past : 'منذ %s',\n\t        s : 'ثوان',\n\t        m : 'دقيقة',\n\t        mm : '%d دقائق',\n\t        h : 'ساعة',\n\t        hh : '%d ساعات',\n\t        d : 'يوم',\n\t        dd : '%d أيام',\n\t        M : 'شهر',\n\t        MM : '%d أشهر',\n\t        y : 'سنة',\n\t        yy : '%d سنوات'\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn arDz;\n\n\t})));\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Arabic (Kuwait) [ar-kw]\n\t//! author : Nusret Parlak: https://github.com/nusretparlak\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar arKw = moment.defineLocale('ar-kw', {\n\t    months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n\t    monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n\t    weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t    weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n\t    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[اليوم على الساعة] LT',\n\t        nextDay: '[غدا على الساعة] LT',\n\t        nextWeek: 'dddd [على الساعة] LT',\n\t        lastDay: '[أمس على الساعة] LT',\n\t        lastWeek: 'dddd [على الساعة] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'في %s',\n\t        past : 'منذ %s',\n\t        s : 'ثوان',\n\t        m : 'دقيقة',\n\t        mm : '%d دقائق',\n\t        h : 'ساعة',\n\t        hh : '%d ساعات',\n\t        d : 'يوم',\n\t        dd : '%d أيام',\n\t        M : 'شهر',\n\t        MM : '%d أشهر',\n\t        y : 'سنة',\n\t        yy : '%d سنوات'\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn arKw;\n\n\t})));\n\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Arabic (Lybia) [ar-ly]\n\t//! author : Ali Hmer: https://github.com/kikoanis\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '1',\n\t    '2': '2',\n\t    '3': '3',\n\t    '4': '4',\n\t    '5': '5',\n\t    '6': '6',\n\t    '7': '7',\n\t    '8': '8',\n\t    '9': '9',\n\t    '0': '0'\n\t};\n\tvar pluralForm = function (n) {\n\t    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n\t};\n\tvar plurals = {\n\t    s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n\t    m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n\t    h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n\t    d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n\t    M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n\t    y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n\t};\n\tvar pluralize = function (u) {\n\t    return function (number, withoutSuffix, string, isFuture) {\n\t        var f = pluralForm(number),\n\t            str = plurals[u][pluralForm(number)];\n\t        if (f === 2) {\n\t            str = str[withoutSuffix ? 0 : 1];\n\t        }\n\t        return str.replace(/%d/i, number);\n\t    };\n\t};\n\tvar months = [\n\t    'يناير',\n\t    'فبراير',\n\t    'مارس',\n\t    'أبريل',\n\t    'مايو',\n\t    'يونيو',\n\t    'يوليو',\n\t    'أغسطس',\n\t    'سبتمبر',\n\t    'أكتوبر',\n\t    'نوفمبر',\n\t    'ديسمبر'\n\t];\n\n\tvar arLy = moment.defineLocale('ar-ly', {\n\t    months : months,\n\t    monthsShort : months,\n\t    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t    weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n\t    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'D/\\u200FM/\\u200FYYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    meridiemParse: /ص|م/,\n\t    isPM : function (input) {\n\t        return 'م' === input;\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 12) {\n\t            return 'ص';\n\t        } else {\n\t            return 'م';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay: '[اليوم عند الساعة] LT',\n\t        nextDay: '[غدًا عند الساعة] LT',\n\t        nextWeek: 'dddd [عند الساعة] LT',\n\t        lastDay: '[أمس عند الساعة] LT',\n\t        lastWeek: 'dddd [عند الساعة] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'بعد %s',\n\t        past : 'منذ %s',\n\t        s : pluralize('s'),\n\t        m : pluralize('m'),\n\t        mm : pluralize('m'),\n\t        h : pluralize('h'),\n\t        hh : pluralize('h'),\n\t        d : pluralize('d'),\n\t        dd : pluralize('d'),\n\t        M : pluralize('M'),\n\t        MM : pluralize('M'),\n\t        y : pluralize('y'),\n\t        yy : pluralize('y')\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/\\u200f/g, '').replace(/،/g, ',');\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        }).replace(/,/g, '،');\n\t    },\n\t    week : {\n\t        dow : 6, // Saturday is the first day of the week.\n\t        doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn arLy;\n\n\t})));\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Arabic (Morocco) [ar-ma]\n\t//! author : ElFadili Yassine : https://github.com/ElFadiliY\n\t//! author : Abdel Said : https://github.com/abdelsaid\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar arMa = moment.defineLocale('ar-ma', {\n\t    months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n\t    monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n\t    weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t    weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n\t    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[اليوم على الساعة] LT',\n\t        nextDay: '[غدا على الساعة] LT',\n\t        nextWeek: 'dddd [على الساعة] LT',\n\t        lastDay: '[أمس على الساعة] LT',\n\t        lastWeek: 'dddd [على الساعة] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'في %s',\n\t        past : 'منذ %s',\n\t        s : 'ثوان',\n\t        m : 'دقيقة',\n\t        mm : '%d دقائق',\n\t        h : 'ساعة',\n\t        hh : '%d ساعات',\n\t        d : 'يوم',\n\t        dd : '%d أيام',\n\t        M : 'شهر',\n\t        MM : '%d أشهر',\n\t        y : 'سنة',\n\t        yy : '%d سنوات'\n\t    },\n\t    week : {\n\t        dow : 6, // Saturday is the first day of the week.\n\t        doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn arMa;\n\n\t})));\n\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Arabic (Saudi Arabia) [ar-sa]\n\t//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '١',\n\t    '2': '٢',\n\t    '3': '٣',\n\t    '4': '٤',\n\t    '5': '٥',\n\t    '6': '٦',\n\t    '7': '٧',\n\t    '8': '٨',\n\t    '9': '٩',\n\t    '0': '٠'\n\t};\n\tvar numberMap = {\n\t    '١': '1',\n\t    '٢': '2',\n\t    '٣': '3',\n\t    '٤': '4',\n\t    '٥': '5',\n\t    '٦': '6',\n\t    '٧': '7',\n\t    '٨': '8',\n\t    '٩': '9',\n\t    '٠': '0'\n\t};\n\n\tvar arSa = moment.defineLocale('ar-sa', {\n\t    months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t    monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t    weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n\t    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    meridiemParse: /ص|م/,\n\t    isPM : function (input) {\n\t        return 'م' === input;\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 12) {\n\t            return 'ص';\n\t        } else {\n\t            return 'م';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay: '[اليوم على الساعة] LT',\n\t        nextDay: '[غدا على الساعة] LT',\n\t        nextWeek: 'dddd [على الساعة] LT',\n\t        lastDay: '[أمس على الساعة] LT',\n\t        lastWeek: 'dddd [على الساعة] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'في %s',\n\t        past : 'منذ %s',\n\t        s : 'ثوان',\n\t        m : 'دقيقة',\n\t        mm : '%d دقائق',\n\t        h : 'ساعة',\n\t        hh : '%d ساعات',\n\t        d : 'يوم',\n\t        dd : '%d أيام',\n\t        M : 'شهر',\n\t        MM : '%d أشهر',\n\t        y : 'سنة',\n\t        yy : '%d سنوات'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n\t            return numberMap[match];\n\t        }).replace(/،/g, ',');\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        }).replace(/,/g, '،');\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn arSa;\n\n\t})));\n\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale  :  Arabic (Tunisia) [ar-tn]\n\t//! author : Nader Toukabri : https://github.com/naderio\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar arTn = moment.defineLocale('ar-tn', {\n\t    months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t    monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n\t    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat: {\n\t        LT: 'HH:mm',\n\t        LTS: 'HH:mm:ss',\n\t        L: 'DD/MM/YYYY',\n\t        LL: 'D MMMM YYYY',\n\t        LLL: 'D MMMM YYYY HH:mm',\n\t        LLLL: 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar: {\n\t        sameDay: '[اليوم على الساعة] LT',\n\t        nextDay: '[غدا على الساعة] LT',\n\t        nextWeek: 'dddd [على الساعة] LT',\n\t        lastDay: '[أمس على الساعة] LT',\n\t        lastWeek: 'dddd [على الساعة] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime: {\n\t        future: 'في %s',\n\t        past: 'منذ %s',\n\t        s: 'ثوان',\n\t        m: 'دقيقة',\n\t        mm: '%d دقائق',\n\t        h: 'ساعة',\n\t        hh: '%d ساعات',\n\t        d: 'يوم',\n\t        dd: '%d أيام',\n\t        M: 'شهر',\n\t        MM: '%d أشهر',\n\t        y: 'سنة',\n\t        yy: '%d سنوات'\n\t    },\n\t    week: {\n\t        dow: 1, // Monday is the first day of the week.\n\t        doy: 4 // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn arTn;\n\n\t})));\n\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Arabic [ar]\n\t//! author : Abdel Said: https://github.com/abdelsaid\n\t//! author : Ahmed Elkhatib\n\t//! author : forabi https://github.com/forabi\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '١',\n\t    '2': '٢',\n\t    '3': '٣',\n\t    '4': '٤',\n\t    '5': '٥',\n\t    '6': '٦',\n\t    '7': '٧',\n\t    '8': '٨',\n\t    '9': '٩',\n\t    '0': '٠'\n\t};\n\tvar numberMap = {\n\t    '١': '1',\n\t    '٢': '2',\n\t    '٣': '3',\n\t    '٤': '4',\n\t    '٥': '5',\n\t    '٦': '6',\n\t    '٧': '7',\n\t    '٨': '8',\n\t    '٩': '9',\n\t    '٠': '0'\n\t};\n\tvar pluralForm = function (n) {\n\t    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n\t};\n\tvar plurals = {\n\t    s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n\t    m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n\t    h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n\t    d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n\t    M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n\t    y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n\t};\n\tvar pluralize = function (u) {\n\t    return function (number, withoutSuffix, string, isFuture) {\n\t        var f = pluralForm(number),\n\t            str = plurals[u][pluralForm(number)];\n\t        if (f === 2) {\n\t            str = str[withoutSuffix ? 0 : 1];\n\t        }\n\t        return str.replace(/%d/i, number);\n\t    };\n\t};\n\tvar months = [\n\t    'كانون الثاني يناير',\n\t    'شباط فبراير',\n\t    'آذار مارس',\n\t    'نيسان أبريل',\n\t    'أيار مايو',\n\t    'حزيران يونيو',\n\t    'تموز يوليو',\n\t    'آب أغسطس',\n\t    'أيلول سبتمبر',\n\t    'تشرين الأول أكتوبر',\n\t    'تشرين الثاني نوفمبر',\n\t    'كانون الأول ديسمبر'\n\t];\n\n\tvar ar = moment.defineLocale('ar', {\n\t    months : months,\n\t    monthsShort : months,\n\t    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t    weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n\t    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'D/\\u200FM/\\u200FYYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    meridiemParse: /ص|م/,\n\t    isPM : function (input) {\n\t        return 'م' === input;\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 12) {\n\t            return 'ص';\n\t        } else {\n\t            return 'م';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay: '[اليوم عند الساعة] LT',\n\t        nextDay: '[غدًا عند الساعة] LT',\n\t        nextWeek: 'dddd [عند الساعة] LT',\n\t        lastDay: '[أمس عند الساعة] LT',\n\t        lastWeek: 'dddd [عند الساعة] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'بعد %s',\n\t        past : 'منذ %s',\n\t        s : pluralize('s'),\n\t        m : pluralize('m'),\n\t        mm : pluralize('m'),\n\t        h : pluralize('h'),\n\t        hh : pluralize('h'),\n\t        d : pluralize('d'),\n\t        dd : pluralize('d'),\n\t        M : pluralize('M'),\n\t        MM : pluralize('M'),\n\t        y : pluralize('y'),\n\t        yy : pluralize('y')\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/\\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n\t            return numberMap[match];\n\t        }).replace(/،/g, ',');\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        }).replace(/,/g, '،');\n\t    },\n\t    week : {\n\t        dow : 6, // Saturday is the first day of the week.\n\t        doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn ar;\n\n\t})));\n\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Azerbaijani [az]\n\t//! author : topchiyev : https://github.com/topchiyev\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar suffixes = {\n\t    1: '-inci',\n\t    5: '-inci',\n\t    8: '-inci',\n\t    70: '-inci',\n\t    80: '-inci',\n\t    2: '-nci',\n\t    7: '-nci',\n\t    20: '-nci',\n\t    50: '-nci',\n\t    3: '-üncü',\n\t    4: '-üncü',\n\t    100: '-üncü',\n\t    6: '-ncı',\n\t    9: '-uncu',\n\t    10: '-uncu',\n\t    30: '-uncu',\n\t    60: '-ıncı',\n\t    90: '-ıncı'\n\t};\n\n\tvar az = moment.defineLocale('az', {\n\t    months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n\t    monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n\t    weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n\t    weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n\t    weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[bugün saat] LT',\n\t        nextDay : '[sabah saat] LT',\n\t        nextWeek : '[gələn həftə] dddd [saat] LT',\n\t        lastDay : '[dünən] LT',\n\t        lastWeek : '[keçən həftə] dddd [saat] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s sonra',\n\t        past : '%s əvvəl',\n\t        s : 'birneçə saniyyə',\n\t        m : 'bir dəqiqə',\n\t        mm : '%d dəqiqə',\n\t        h : 'bir saat',\n\t        hh : '%d saat',\n\t        d : 'bir gün',\n\t        dd : '%d gün',\n\t        M : 'bir ay',\n\t        MM : '%d ay',\n\t        y : 'bir il',\n\t        yy : '%d il'\n\t    },\n\t    meridiemParse: /gecə|səhər|gündüz|axşam/,\n\t    isPM : function (input) {\n\t        return /^(gündüz|axşam)$/.test(input);\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'gecə';\n\t        } else if (hour < 12) {\n\t            return 'səhər';\n\t        } else if (hour < 17) {\n\t            return 'gündüz';\n\t        } else {\n\t            return 'axşam';\n\t        }\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n\t    ordinal : function (number) {\n\t        if (number === 0) {  // special case for zero\n\t            return number + '-ıncı';\n\t        }\n\t        var a = number % 10,\n\t            b = number % 100 - a,\n\t            c = number >= 100 ? 100 : null;\n\t        return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn az;\n\n\t})));\n\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Belarusian [be]\n\t//! author : Dmitry Demidov : https://github.com/demidov91\n\t//! author: Praleska: http://praleska.pro/\n\t//! Author : Menelion Elensúle : https://github.com/Oire\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction plural(word, num) {\n\t    var forms = word.split('_');\n\t    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n\t}\n\tfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n\t    var format = {\n\t        'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n\t        'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n\t        'dd': 'дзень_дні_дзён',\n\t        'MM': 'месяц_месяцы_месяцаў',\n\t        'yy': 'год_гады_гадоў'\n\t    };\n\t    if (key === 'm') {\n\t        return withoutSuffix ? 'хвіліна' : 'хвіліну';\n\t    }\n\t    else if (key === 'h') {\n\t        return withoutSuffix ? 'гадзіна' : 'гадзіну';\n\t    }\n\t    else {\n\t        return number + ' ' + plural(format[key], +number);\n\t    }\n\t}\n\n\tvar be = moment.defineLocale('be', {\n\t    months : {\n\t        format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n\t        standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n\t    },\n\t    monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n\t    weekdays : {\n\t        format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n\t        standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n\t        isFormat: /\\[ ?[Вв] ?(?:мінулую|наступную)? ?\\] ?dddd/\n\t    },\n\t    weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n\t    weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY г.',\n\t        LLL : 'D MMMM YYYY г., HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Сёння ў] LT',\n\t        nextDay: '[Заўтра ў] LT',\n\t        lastDay: '[Учора ў] LT',\n\t        nextWeek: function () {\n\t            return '[У] dddd [ў] LT';\n\t        },\n\t        lastWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                case 3:\n\t                case 5:\n\t                case 6:\n\t                    return '[У мінулую] dddd [ў] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                    return '[У мінулы] dddd [ў] LT';\n\t            }\n\t        },\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'праз %s',\n\t        past : '%s таму',\n\t        s : 'некалькі секунд',\n\t        m : relativeTimeWithPlural,\n\t        mm : relativeTimeWithPlural,\n\t        h : relativeTimeWithPlural,\n\t        hh : relativeTimeWithPlural,\n\t        d : 'дзень',\n\t        dd : relativeTimeWithPlural,\n\t        M : 'месяц',\n\t        MM : relativeTimeWithPlural,\n\t        y : 'год',\n\t        yy : relativeTimeWithPlural\n\t    },\n\t    meridiemParse: /ночы|раніцы|дня|вечара/,\n\t    isPM : function (input) {\n\t        return /^(дня|вечара)$/.test(input);\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'ночы';\n\t        } else if (hour < 12) {\n\t            return 'раніцы';\n\t        } else if (hour < 17) {\n\t            return 'дня';\n\t        } else {\n\t            return 'вечара';\n\t        }\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n\t    ordinal: function (number, period) {\n\t        switch (period) {\n\t            case 'M':\n\t            case 'd':\n\t            case 'DDD':\n\t            case 'w':\n\t            case 'W':\n\t                return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n\t            case 'D':\n\t                return number + '-га';\n\t            default:\n\t                return number;\n\t        }\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn be;\n\n\t})));\n\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Bulgarian [bg]\n\t//! author : Krasen Borisov : https://github.com/kraz\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar bg = moment.defineLocale('bg', {\n\t    months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n\t    monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n\t    weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n\t    weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n\t    weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'D.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY H:mm',\n\t        LLLL : 'dddd, D MMMM YYYY H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Днес в] LT',\n\t        nextDay : '[Утре в] LT',\n\t        nextWeek : 'dddd [в] LT',\n\t        lastDay : '[Вчера в] LT',\n\t        lastWeek : function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                case 3:\n\t                case 6:\n\t                    return '[В изминалата] dddd [в] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[В изминалия] dddd [в] LT';\n\t            }\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'след %s',\n\t        past : 'преди %s',\n\t        s : 'няколко секунди',\n\t        m : 'минута',\n\t        mm : '%d минути',\n\t        h : 'час',\n\t        hh : '%d часа',\n\t        d : 'ден',\n\t        dd : '%d дни',\n\t        M : 'месец',\n\t        MM : '%d месеца',\n\t        y : 'година',\n\t        yy : '%d години'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n\t    ordinal : function (number) {\n\t        var lastDigit = number % 10,\n\t            last2Digits = number % 100;\n\t        if (number === 0) {\n\t            return number + '-ев';\n\t        } else if (last2Digits === 0) {\n\t            return number + '-ен';\n\t        } else if (last2Digits > 10 && last2Digits < 20) {\n\t            return number + '-ти';\n\t        } else if (lastDigit === 1) {\n\t            return number + '-ви';\n\t        } else if (lastDigit === 2) {\n\t            return number + '-ри';\n\t        } else if (lastDigit === 7 || lastDigit === 8) {\n\t            return number + '-ми';\n\t        } else {\n\t            return number + '-ти';\n\t        }\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn bg;\n\n\t})));\n\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Bengali [bn]\n\t//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '১',\n\t    '2': '২',\n\t    '3': '৩',\n\t    '4': '৪',\n\t    '5': '৫',\n\t    '6': '৬',\n\t    '7': '৭',\n\t    '8': '৮',\n\t    '9': '৯',\n\t    '0': '০'\n\t};\n\tvar numberMap = {\n\t    '১': '1',\n\t    '২': '2',\n\t    '৩': '3',\n\t    '৪': '4',\n\t    '৫': '5',\n\t    '৬': '6',\n\t    '৭': '7',\n\t    '৮': '8',\n\t    '৯': '9',\n\t    '০': '0'\n\t};\n\n\tvar bn = moment.defineLocale('bn', {\n\t    months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n\t    monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n\t    weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n\t    weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n\t    weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'A h:mm সময়',\n\t        LTS : 'A h:mm:ss সময়',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY, A h:mm সময়',\n\t        LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n\t    },\n\t    calendar : {\n\t        sameDay : '[আজ] LT',\n\t        nextDay : '[আগামীকাল] LT',\n\t        nextWeek : 'dddd, LT',\n\t        lastDay : '[গতকাল] LT',\n\t        lastWeek : '[গত] dddd, LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s পরে',\n\t        past : '%s আগে',\n\t        s : 'কয়েক সেকেন্ড',\n\t        m : 'এক মিনিট',\n\t        mm : '%d মিনিট',\n\t        h : 'এক ঘন্টা',\n\t        hh : '%d ঘন্টা',\n\t        d : 'এক দিন',\n\t        dd : '%d দিন',\n\t        M : 'এক মাস',\n\t        MM : '%d মাস',\n\t        y : 'এক বছর',\n\t        yy : '%d বছর'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n\t            return numberMap[match];\n\t        });\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        });\n\t    },\n\t    meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if ((meridiem === 'রাত' && hour >= 4) ||\n\t                (meridiem === 'দুপুর' && hour < 5) ||\n\t                meridiem === 'বিকাল') {\n\t            return hour + 12;\n\t        } else {\n\t            return hour;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'রাত';\n\t        } else if (hour < 10) {\n\t            return 'সকাল';\n\t        } else if (hour < 17) {\n\t            return 'দুপুর';\n\t        } else if (hour < 20) {\n\t            return 'বিকাল';\n\t        } else {\n\t            return 'রাত';\n\t        }\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn bn;\n\n\t})));\n\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Tibetan [bo]\n\t//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '༡',\n\t    '2': '༢',\n\t    '3': '༣',\n\t    '4': '༤',\n\t    '5': '༥',\n\t    '6': '༦',\n\t    '7': '༧',\n\t    '8': '༨',\n\t    '9': '༩',\n\t    '0': '༠'\n\t};\n\tvar numberMap = {\n\t    '༡': '1',\n\t    '༢': '2',\n\t    '༣': '3',\n\t    '༤': '4',\n\t    '༥': '5',\n\t    '༦': '6',\n\t    '༧': '7',\n\t    '༨': '8',\n\t    '༩': '9',\n\t    '༠': '0'\n\t};\n\n\tvar bo = moment.defineLocale('bo', {\n\t    months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n\t    monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n\t    weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n\t    weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n\t    weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'A h:mm',\n\t        LTS : 'A h:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY, A h:mm',\n\t        LLLL : 'dddd, D MMMM YYYY, A h:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[དི་རིང] LT',\n\t        nextDay : '[སང་ཉིན] LT',\n\t        nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n\t        lastDay : '[ཁ་སང] LT',\n\t        lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s ལ་',\n\t        past : '%s སྔན་ལ',\n\t        s : 'ལམ་སང',\n\t        m : 'སྐར་མ་གཅིག',\n\t        mm : '%d སྐར་མ',\n\t        h : 'ཆུ་ཚོད་གཅིག',\n\t        hh : '%d ཆུ་ཚོད',\n\t        d : 'ཉིན་གཅིག',\n\t        dd : '%d ཉིན་',\n\t        M : 'ཟླ་བ་གཅིག',\n\t        MM : '%d ཟླ་བ',\n\t        y : 'ལོ་གཅིག',\n\t        yy : '%d ལོ'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n\t            return numberMap[match];\n\t        });\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        });\n\t    },\n\t    meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n\t                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n\t                meridiem === 'དགོང་དག') {\n\t            return hour + 12;\n\t        } else {\n\t            return hour;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'མཚན་མོ';\n\t        } else if (hour < 10) {\n\t            return 'ཞོགས་ཀས';\n\t        } else if (hour < 17) {\n\t            return 'ཉིན་གུང';\n\t        } else if (hour < 20) {\n\t            return 'དགོང་དག';\n\t        } else {\n\t            return 'མཚན་མོ';\n\t        }\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn bo;\n\n\t})));\n\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Breton [br]\n\t//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction relativeTimeWithMutation(number, withoutSuffix, key) {\n\t    var format = {\n\t        'mm': 'munutenn',\n\t        'MM': 'miz',\n\t        'dd': 'devezh'\n\t    };\n\t    return number + ' ' + mutation(format[key], number);\n\t}\n\tfunction specialMutationForYears(number) {\n\t    switch (lastNumber(number)) {\n\t        case 1:\n\t        case 3:\n\t        case 4:\n\t        case 5:\n\t        case 9:\n\t            return number + ' bloaz';\n\t        default:\n\t            return number + ' vloaz';\n\t    }\n\t}\n\tfunction lastNumber(number) {\n\t    if (number > 9) {\n\t        return lastNumber(number % 10);\n\t    }\n\t    return number;\n\t}\n\tfunction mutation(text, number) {\n\t    if (number === 2) {\n\t        return softMutation(text);\n\t    }\n\t    return text;\n\t}\n\tfunction softMutation(text) {\n\t    var mutationTable = {\n\t        'm': 'v',\n\t        'b': 'v',\n\t        'd': 'z'\n\t    };\n\t    if (mutationTable[text.charAt(0)] === undefined) {\n\t        return text;\n\t    }\n\t    return mutationTable[text.charAt(0)] + text.substring(1);\n\t}\n\n\tvar br = moment.defineLocale('br', {\n\t    months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n\t    monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n\t    weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n\t    weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n\t    weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'h[e]mm A',\n\t        LTS : 'h[e]mm:ss A',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D [a viz] MMMM YYYY',\n\t        LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n\t        LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Hiziv da] LT',\n\t        nextDay : '[Warc\\'hoazh da] LT',\n\t        nextWeek : 'dddd [da] LT',\n\t        lastDay : '[Dec\\'h da] LT',\n\t        lastWeek : 'dddd [paset da] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'a-benn %s',\n\t        past : '%s \\'zo',\n\t        s : 'un nebeud segondennoù',\n\t        m : 'ur vunutenn',\n\t        mm : relativeTimeWithMutation,\n\t        h : 'un eur',\n\t        hh : '%d eur',\n\t        d : 'un devezh',\n\t        dd : relativeTimeWithMutation,\n\t        M : 'ur miz',\n\t        MM : relativeTimeWithMutation,\n\t        y : 'ur bloaz',\n\t        yy : specialMutationForYears\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n\t    ordinal : function (number) {\n\t        var output = (number === 1) ? 'añ' : 'vet';\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn br;\n\n\t})));\n\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Bosnian [bs]\n\t//! author : Nedim Cholich : https://github.com/frontyard\n\t//! based on (hr) translation by Bojan Marković\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction translate(number, withoutSuffix, key) {\n\t    var result = number + ' ';\n\t    switch (key) {\n\t        case 'm':\n\t            return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n\t        case 'mm':\n\t            if (number === 1) {\n\t                result += 'minuta';\n\t            } else if (number === 2 || number === 3 || number === 4) {\n\t                result += 'minute';\n\t            } else {\n\t                result += 'minuta';\n\t            }\n\t            return result;\n\t        case 'h':\n\t            return withoutSuffix ? 'jedan sat' : 'jednog sata';\n\t        case 'hh':\n\t            if (number === 1) {\n\t                result += 'sat';\n\t            } else if (number === 2 || number === 3 || number === 4) {\n\t                result += 'sata';\n\t            } else {\n\t                result += 'sati';\n\t            }\n\t            return result;\n\t        case 'dd':\n\t            if (number === 1) {\n\t                result += 'dan';\n\t            } else {\n\t                result += 'dana';\n\t            }\n\t            return result;\n\t        case 'MM':\n\t            if (number === 1) {\n\t                result += 'mjesec';\n\t            } else if (number === 2 || number === 3 || number === 4) {\n\t                result += 'mjeseca';\n\t            } else {\n\t                result += 'mjeseci';\n\t            }\n\t            return result;\n\t        case 'yy':\n\t            if (number === 1) {\n\t                result += 'godina';\n\t            } else if (number === 2 || number === 3 || number === 4) {\n\t                result += 'godine';\n\t            } else {\n\t                result += 'godina';\n\t            }\n\t            return result;\n\t    }\n\t}\n\n\tvar bs = moment.defineLocale('bs', {\n\t    months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n\t    monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n\t    monthsParseExact: true,\n\t    weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n\t    weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n\t    weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY H:mm',\n\t        LLLL : 'dddd, D. MMMM YYYY H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay  : '[danas u] LT',\n\t        nextDay  : '[sutra u] LT',\n\t        nextWeek : function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[u] [nedjelju] [u] LT';\n\t                case 3:\n\t                    return '[u] [srijedu] [u] LT';\n\t                case 6:\n\t                    return '[u] [subotu] [u] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[u] dddd [u] LT';\n\t            }\n\t        },\n\t        lastDay  : '[jučer u] LT',\n\t        lastWeek : function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                case 3:\n\t                    return '[prošlu] dddd [u] LT';\n\t                case 6:\n\t                    return '[prošle] [subote] [u] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[prošli] dddd [u] LT';\n\t            }\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'za %s',\n\t        past   : 'prije %s',\n\t        s      : 'par sekundi',\n\t        m      : translate,\n\t        mm     : translate,\n\t        h      : translate,\n\t        hh     : translate,\n\t        d      : 'dan',\n\t        dd     : translate,\n\t        M      : 'mjesec',\n\t        MM     : translate,\n\t        y      : 'godinu',\n\t        yy     : translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn bs;\n\n\t})));\n\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Catalan [ca]\n\t//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar ca = moment.defineLocale('ca', {\n\t    months : {\n\t        standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n\t        format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n\t        isFormat: /D[oD]?(\\s)+MMMM/\n\t    },\n\t    monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n\t    weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n\t    weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : '[el] D MMMM [de] YYYY',\n\t        ll : 'D MMM YYYY',\n\t        LLL : '[el] D MMMM [de] YYYY [a les] H:mm',\n\t        lll : 'D MMM YYYY, H:mm',\n\t        LLLL : '[el] dddd D MMMM [de] YYYY [a les] H:mm',\n\t        llll : 'ddd D MMM YYYY, H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : function () {\n\t            return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n\t        },\n\t        nextDay : function () {\n\t            return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n\t        },\n\t        nextWeek : function () {\n\t            return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n\t        },\n\t        lastDay : function () {\n\t            return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n\t        },\n\t        lastWeek : function () {\n\t            return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'd\\'aquí %s',\n\t        past : 'fa %s',\n\t        s : 'uns segons',\n\t        m : 'un minut',\n\t        mm : '%d minuts',\n\t        h : 'una hora',\n\t        hh : '%d hores',\n\t        d : 'un dia',\n\t        dd : '%d dies',\n\t        M : 'un mes',\n\t        MM : '%d mesos',\n\t        y : 'un any',\n\t        yy : '%d anys'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n\t    ordinal : function (number, period) {\n\t        var output = (number === 1) ? 'r' :\n\t            (number === 2) ? 'n' :\n\t            (number === 3) ? 'r' :\n\t            (number === 4) ? 't' : 'è';\n\t        if (period === 'w' || period === 'W') {\n\t            output = 'a';\n\t        }\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn ca;\n\n\t})));\n\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Czech [cs]\n\t//! author : petrbela : https://github.com/petrbela\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_');\n\tvar monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n\tfunction plural(n) {\n\t    return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n\t}\n\tfunction translate(number, withoutSuffix, key, isFuture) {\n\t    var result = number + ' ';\n\t    switch (key) {\n\t        case 's':  // a few seconds / in a few seconds / a few seconds ago\n\t            return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n\t        case 'm':  // a minute / in a minute / a minute ago\n\t            return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n\t        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n\t            if (withoutSuffix || isFuture) {\n\t                return result + (plural(number) ? 'minuty' : 'minut');\n\t            } else {\n\t                return result + 'minutami';\n\t            }\n\t            break;\n\t        case 'h':  // an hour / in an hour / an hour ago\n\t            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n\t        case 'hh': // 9 hours / in 9 hours / 9 hours ago\n\t            if (withoutSuffix || isFuture) {\n\t                return result + (plural(number) ? 'hodiny' : 'hodin');\n\t            } else {\n\t                return result + 'hodinami';\n\t            }\n\t            break;\n\t        case 'd':  // a day / in a day / a day ago\n\t            return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n\t        case 'dd': // 9 days / in 9 days / 9 days ago\n\t            if (withoutSuffix || isFuture) {\n\t                return result + (plural(number) ? 'dny' : 'dní');\n\t            } else {\n\t                return result + 'dny';\n\t            }\n\t            break;\n\t        case 'M':  // a month / in a month / a month ago\n\t            return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n\t        case 'MM': // 9 months / in 9 months / 9 months ago\n\t            if (withoutSuffix || isFuture) {\n\t                return result + (plural(number) ? 'měsíce' : 'měsíců');\n\t            } else {\n\t                return result + 'měsíci';\n\t            }\n\t            break;\n\t        case 'y':  // a year / in a year / a year ago\n\t            return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n\t        case 'yy': // 9 years / in 9 years / 9 years ago\n\t            if (withoutSuffix || isFuture) {\n\t                return result + (plural(number) ? 'roky' : 'let');\n\t            } else {\n\t                return result + 'lety';\n\t            }\n\t            break;\n\t    }\n\t}\n\n\tvar cs = moment.defineLocale('cs', {\n\t    months : months,\n\t    monthsShort : monthsShort,\n\t    monthsParse : (function (months, monthsShort) {\n\t        var i, _monthsParse = [];\n\t        for (i = 0; i < 12; i++) {\n\t            // use custom parser to solve problem with July (červenec)\n\t            _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');\n\t        }\n\t        return _monthsParse;\n\t    }(months, monthsShort)),\n\t    shortMonthsParse : (function (monthsShort) {\n\t        var i, _shortMonthsParse = [];\n\t        for (i = 0; i < 12; i++) {\n\t            _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');\n\t        }\n\t        return _shortMonthsParse;\n\t    }(monthsShort)),\n\t    longMonthsParse : (function (months) {\n\t        var i, _longMonthsParse = [];\n\t        for (i = 0; i < 12; i++) {\n\t            _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');\n\t        }\n\t        return _longMonthsParse;\n\t    }(months)),\n\t    weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n\t    weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n\t    weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n\t    longDateFormat : {\n\t        LT: 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY H:mm',\n\t        LLLL : 'dddd D. MMMM YYYY H:mm',\n\t        l : 'D. M. YYYY'\n\t    },\n\t    calendar : {\n\t        sameDay: '[dnes v] LT',\n\t        nextDay: '[zítra v] LT',\n\t        nextWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[v neděli v] LT';\n\t                case 1:\n\t                case 2:\n\t                    return '[v] dddd [v] LT';\n\t                case 3:\n\t                    return '[ve středu v] LT';\n\t                case 4:\n\t                    return '[ve čtvrtek v] LT';\n\t                case 5:\n\t                    return '[v pátek v] LT';\n\t                case 6:\n\t                    return '[v sobotu v] LT';\n\t            }\n\t        },\n\t        lastDay: '[včera v] LT',\n\t        lastWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[minulou neděli v] LT';\n\t                case 1:\n\t                case 2:\n\t                    return '[minulé] dddd [v] LT';\n\t                case 3:\n\t                    return '[minulou středu v] LT';\n\t                case 4:\n\t                case 5:\n\t                    return '[minulý] dddd [v] LT';\n\t                case 6:\n\t                    return '[minulou sobotu v] LT';\n\t            }\n\t        },\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'za %s',\n\t        past : 'před %s',\n\t        s : translate,\n\t        m : translate,\n\t        mm : translate,\n\t        h : translate,\n\t        hh : translate,\n\t        d : translate,\n\t        dd : translate,\n\t        M : translate,\n\t        MM : translate,\n\t        y : translate,\n\t        yy : translate\n\t    },\n\t    dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn cs;\n\n\t})));\n\n\n/***/ },\n/* 42 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Chuvash [cv]\n\t//! author : Anatoly Mironov : https://github.com/mirontoli\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar cv = moment.defineLocale('cv', {\n\t    months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n\t    monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n\t    weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n\t    weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n\t    weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD-MM-YYYY',\n\t        LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n\t        LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n\t        LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Паян] LT [сехетре]',\n\t        nextDay: '[Ыран] LT [сехетре]',\n\t        lastDay: '[Ӗнер] LT [сехетре]',\n\t        nextWeek: '[Ҫитес] dddd LT [сехетре]',\n\t        lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : function (output) {\n\t            var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n\t            return output + affix;\n\t        },\n\t        past : '%s каялла',\n\t        s : 'пӗр-ик ҫеккунт',\n\t        m : 'пӗр минут',\n\t        mm : '%d минут',\n\t        h : 'пӗр сехет',\n\t        hh : '%d сехет',\n\t        d : 'пӗр кун',\n\t        dd : '%d кун',\n\t        M : 'пӗр уйӑх',\n\t        MM : '%d уйӑх',\n\t        y : 'пӗр ҫул',\n\t        yy : '%d ҫул'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n\t    ordinal : '%d-мӗш',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn cv;\n\n\t})));\n\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Welsh [cy]\n\t//! author : Robert Allen : https://github.com/robgallen\n\t//! author : https://github.com/ryangreaves\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar cy = moment.defineLocale('cy', {\n\t    months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n\t    monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n\t    weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n\t    weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n\t    weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n\t    weekdaysParseExact : true,\n\t    // time formats are the same as en-gb\n\t    longDateFormat: {\n\t        LT: 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L: 'DD/MM/YYYY',\n\t        LL: 'D MMMM YYYY',\n\t        LLL: 'D MMMM YYYY HH:mm',\n\t        LLLL: 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar: {\n\t        sameDay: '[Heddiw am] LT',\n\t        nextDay: '[Yfory am] LT',\n\t        nextWeek: 'dddd [am] LT',\n\t        lastDay: '[Ddoe am] LT',\n\t        lastWeek: 'dddd [diwethaf am] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime: {\n\t        future: 'mewn %s',\n\t        past: '%s yn ôl',\n\t        s: 'ychydig eiliadau',\n\t        m: 'munud',\n\t        mm: '%d munud',\n\t        h: 'awr',\n\t        hh: '%d awr',\n\t        d: 'diwrnod',\n\t        dd: '%d diwrnod',\n\t        M: 'mis',\n\t        MM: '%d mis',\n\t        y: 'blwyddyn',\n\t        yy: '%d flynedd'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n\t    // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n\t    ordinal: function (number) {\n\t        var b = number,\n\t            output = '',\n\t            lookup = [\n\t                '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n\t                'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n\t            ];\n\t        if (b > 20) {\n\t            if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n\t                output = 'fed'; // not 30ain, 70ain or 90ain\n\t            } else {\n\t                output = 'ain';\n\t            }\n\t        } else if (b > 0) {\n\t            output = lookup[b];\n\t        }\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn cy;\n\n\t})));\n\n\n/***/ },\n/* 44 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Danish [da]\n\t//! author : Ulrik Nielsen : https://github.com/mrbase\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar da = moment.defineLocale('da', {\n\t    months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n\t    monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n\t    weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n\t    weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n\t    weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY HH:mm',\n\t        LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[i dag kl.] LT',\n\t        nextDay : '[i morgen kl.] LT',\n\t        nextWeek : 'på dddd [kl.] LT',\n\t        lastDay : '[i går kl.] LT',\n\t        lastWeek : '[i] dddd[s kl.] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'om %s',\n\t        past : '%s siden',\n\t        s : 'få sekunder',\n\t        m : 'et minut',\n\t        mm : '%d minutter',\n\t        h : 'en time',\n\t        hh : '%d timer',\n\t        d : 'en dag',\n\t        dd : '%d dage',\n\t        M : 'en måned',\n\t        MM : '%d måneder',\n\t        y : 'et år',\n\t        yy : '%d år'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn da;\n\n\t})));\n\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : German (Austria) [de-at]\n\t//! author : lluchs : https://github.com/lluchs\n\t//! author: Menelion Elensúle: https://github.com/Oire\n\t//! author : Martin Groller : https://github.com/MadMG\n\t//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t    var format = {\n\t        'm': ['eine Minute', 'einer Minute'],\n\t        'h': ['eine Stunde', 'einer Stunde'],\n\t        'd': ['ein Tag', 'einem Tag'],\n\t        'dd': [number + ' Tage', number + ' Tagen'],\n\t        'M': ['ein Monat', 'einem Monat'],\n\t        'MM': [number + ' Monate', number + ' Monaten'],\n\t        'y': ['ein Jahr', 'einem Jahr'],\n\t        'yy': [number + ' Jahre', number + ' Jahren']\n\t    };\n\t    return withoutSuffix ? format[key][0] : format[key][1];\n\t}\n\n\tvar deAt = moment.defineLocale('de-at', {\n\t    months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n\t    monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n\t    weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n\t    weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT: 'HH:mm',\n\t        LTS: 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D. MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[heute um] LT [Uhr]',\n\t        sameElse: 'L',\n\t        nextDay: '[morgen um] LT [Uhr]',\n\t        nextWeek: 'dddd [um] LT [Uhr]',\n\t        lastDay: '[gestern um] LT [Uhr]',\n\t        lastWeek: '[letzten] dddd [um] LT [Uhr]'\n\t    },\n\t    relativeTime : {\n\t        future : 'in %s',\n\t        past : 'vor %s',\n\t        s : 'ein paar Sekunden',\n\t        m : processRelativeTime,\n\t        mm : '%d Minuten',\n\t        h : processRelativeTime,\n\t        hh : '%d Stunden',\n\t        d : processRelativeTime,\n\t        dd : processRelativeTime,\n\t        M : processRelativeTime,\n\t        MM : processRelativeTime,\n\t        y : processRelativeTime,\n\t        yy : processRelativeTime\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn deAt;\n\n\t})));\n\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : German (Switzerland) [de-ch]\n\t//! author : sschueller : https://github.com/sschueller\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\t// based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de#\n\n\tfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t    var format = {\n\t        'm': ['eine Minute', 'einer Minute'],\n\t        'h': ['eine Stunde', 'einer Stunde'],\n\t        'd': ['ein Tag', 'einem Tag'],\n\t        'dd': [number + ' Tage', number + ' Tagen'],\n\t        'M': ['ein Monat', 'einem Monat'],\n\t        'MM': [number + ' Monate', number + ' Monaten'],\n\t        'y': ['ein Jahr', 'einem Jahr'],\n\t        'yy': [number + ' Jahre', number + ' Jahren']\n\t    };\n\t    return withoutSuffix ? format[key][0] : format[key][1];\n\t}\n\n\tvar deCh = moment.defineLocale('de-ch', {\n\t    months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n\t    monthsShort : 'Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n\t    weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n\t    weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT: 'HH.mm',\n\t        LTS: 'HH.mm.ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY HH.mm',\n\t        LLLL : 'dddd, D. MMMM YYYY HH.mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[heute um] LT [Uhr]',\n\t        sameElse: 'L',\n\t        nextDay: '[morgen um] LT [Uhr]',\n\t        nextWeek: 'dddd [um] LT [Uhr]',\n\t        lastDay: '[gestern um] LT [Uhr]',\n\t        lastWeek: '[letzten] dddd [um] LT [Uhr]'\n\t    },\n\t    relativeTime : {\n\t        future : 'in %s',\n\t        past : 'vor %s',\n\t        s : 'ein paar Sekunden',\n\t        m : processRelativeTime,\n\t        mm : '%d Minuten',\n\t        h : processRelativeTime,\n\t        hh : '%d Stunden',\n\t        d : processRelativeTime,\n\t        dd : processRelativeTime,\n\t        M : processRelativeTime,\n\t        MM : processRelativeTime,\n\t        y : processRelativeTime,\n\t        yy : processRelativeTime\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn deCh;\n\n\t})));\n\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : German [de]\n\t//! author : lluchs : https://github.com/lluchs\n\t//! author: Menelion Elensúle: https://github.com/Oire\n\t//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t    var format = {\n\t        'm': ['eine Minute', 'einer Minute'],\n\t        'h': ['eine Stunde', 'einer Stunde'],\n\t        'd': ['ein Tag', 'einem Tag'],\n\t        'dd': [number + ' Tage', number + ' Tagen'],\n\t        'M': ['ein Monat', 'einem Monat'],\n\t        'MM': [number + ' Monate', number + ' Monaten'],\n\t        'y': ['ein Jahr', 'einem Jahr'],\n\t        'yy': [number + ' Jahre', number + ' Jahren']\n\t    };\n\t    return withoutSuffix ? format[key][0] : format[key][1];\n\t}\n\n\tvar de = moment.defineLocale('de', {\n\t    months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n\t    monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n\t    weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n\t    weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT: 'HH:mm',\n\t        LTS: 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D. MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[heute um] LT [Uhr]',\n\t        sameElse: 'L',\n\t        nextDay: '[morgen um] LT [Uhr]',\n\t        nextWeek: 'dddd [um] LT [Uhr]',\n\t        lastDay: '[gestern um] LT [Uhr]',\n\t        lastWeek: '[letzten] dddd [um] LT [Uhr]'\n\t    },\n\t    relativeTime : {\n\t        future : 'in %s',\n\t        past : 'vor %s',\n\t        s : 'ein paar Sekunden',\n\t        m : processRelativeTime,\n\t        mm : '%d Minuten',\n\t        h : processRelativeTime,\n\t        hh : '%d Stunden',\n\t        d : processRelativeTime,\n\t        dd : processRelativeTime,\n\t        M : processRelativeTime,\n\t        MM : processRelativeTime,\n\t        y : processRelativeTime,\n\t        yy : processRelativeTime\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn de;\n\n\t})));\n\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Maldivian [dv]\n\t//! author : Jawish Hameed : https://github.com/jawish\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar months = [\n\t    'ޖެނުއަރީ',\n\t    'ފެބްރުއަރީ',\n\t    'މާރިޗު',\n\t    'އޭޕްރީލު',\n\t    'މޭ',\n\t    'ޖޫން',\n\t    'ޖުލައި',\n\t    'އޯގަސްޓު',\n\t    'ސެޕްޓެމްބަރު',\n\t    'އޮކްޓޯބަރު',\n\t    'ނޮވެމްބަރު',\n\t    'ޑިސެމްބަރު'\n\t];\n\tvar weekdays = [\n\t    'އާދިއްތަ',\n\t    'ހޯމަ',\n\t    'އަންގާރަ',\n\t    'ބުދަ',\n\t    'ބުރާސްފަތި',\n\t    'ހުކުރު',\n\t    'ހޮނިހިރު'\n\t];\n\n\tvar dv = moment.defineLocale('dv', {\n\t    months : months,\n\t    monthsShort : months,\n\t    weekdays : weekdays,\n\t    weekdaysShort : weekdays,\n\t    weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n\t    longDateFormat : {\n\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'D/M/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    meridiemParse: /މކ|މފ/,\n\t    isPM : function (input) {\n\t        return 'މފ' === input;\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 12) {\n\t            return 'މކ';\n\t        } else {\n\t            return 'މފ';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[މިއަދު] LT',\n\t        nextDay : '[މާދަމާ] LT',\n\t        nextWeek : 'dddd LT',\n\t        lastDay : '[އިއްޔެ] LT',\n\t        lastWeek : '[ފާއިތުވި] dddd LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'ތެރޭގައި %s',\n\t        past : 'ކުރިން %s',\n\t        s : 'ސިކުންތުކޮޅެއް',\n\t        m : 'މިނިޓެއް',\n\t        mm : 'މިނިޓު %d',\n\t        h : 'ގަޑިއިރެއް',\n\t        hh : 'ގަޑިއިރު %d',\n\t        d : 'ދުވަހެއް',\n\t        dd : 'ދުވަސް %d',\n\t        M : 'މަހެއް',\n\t        MM : 'މަސް %d',\n\t        y : 'އަހަރެއް',\n\t        yy : 'އަހަރު %d'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/،/g, ',');\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/,/g, '،');\n\t    },\n\t    week : {\n\t        dow : 7,  // Sunday is the first day of the week.\n\t        doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn dv;\n\n\t})));\n\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Greek [el]\n\t//! author : Aggelos Karalias : https://github.com/mehiel\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\tfunction isFunction(input) {\n\t    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n\t}\n\n\n\tvar el = moment.defineLocale('el', {\n\t    monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n\t    monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n\t    months : function (momentToFormat, format) {\n\t        if (!momentToFormat) {\n\t            return this._monthsNominativeEl;\n\t        } else if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n\t            return this._monthsGenitiveEl[momentToFormat.month()];\n\t        } else {\n\t            return this._monthsNominativeEl[momentToFormat.month()];\n\t        }\n\t    },\n\t    monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n\t    weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n\t    weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n\t    weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours > 11) {\n\t            return isLower ? 'μμ' : 'ΜΜ';\n\t        } else {\n\t            return isLower ? 'πμ' : 'ΠΜ';\n\t        }\n\t    },\n\t    isPM : function (input) {\n\t        return ((input + '').toLowerCase()[0] === 'μ');\n\t    },\n\t    meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n\t    longDateFormat : {\n\t        LT : 'h:mm A',\n\t        LTS : 'h:mm:ss A',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY h:mm A',\n\t        LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t    },\n\t    calendarEl : {\n\t        sameDay : '[Σήμερα {}] LT',\n\t        nextDay : '[Αύριο {}] LT',\n\t        nextWeek : 'dddd [{}] LT',\n\t        lastDay : '[Χθες {}] LT',\n\t        lastWeek : function () {\n\t            switch (this.day()) {\n\t                case 6:\n\t                    return '[το προηγούμενο] dddd [{}] LT';\n\t                default:\n\t                    return '[την προηγούμενη] dddd [{}] LT';\n\t            }\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    calendar : function (key, mom) {\n\t        var output = this._calendarEl[key],\n\t            hours = mom && mom.hours();\n\t        if (isFunction(output)) {\n\t            output = output.apply(mom);\n\t        }\n\t        return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n\t    },\n\t    relativeTime : {\n\t        future : 'σε %s',\n\t        past : '%s πριν',\n\t        s : 'λίγα δευτερόλεπτα',\n\t        m : 'ένα λεπτό',\n\t        mm : '%d λεπτά',\n\t        h : 'μία ώρα',\n\t        hh : '%d ώρες',\n\t        d : 'μία μέρα',\n\t        dd : '%d μέρες',\n\t        M : 'ένας μήνας',\n\t        MM : '%d μήνες',\n\t        y : 'ένας χρόνος',\n\t        yy : '%d χρόνια'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}η/,\n\t    ordinal: '%dη',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4st is the first week of the year.\n\t    }\n\t});\n\n\treturn el;\n\n\t})));\n\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : English (Australia) [en-au]\n\t//! author : Jared Morse : https://github.com/jarcoal\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar enAu = moment.defineLocale('en-au', {\n\t    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'h:mm A',\n\t        LTS : 'h:mm:ss A',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY h:mm A',\n\t        LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Today at] LT',\n\t        nextDay : '[Tomorrow at] LT',\n\t        nextWeek : 'dddd [at] LT',\n\t        lastDay : '[Yesterday at] LT',\n\t        lastWeek : '[Last] dddd [at] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'in %s',\n\t        past : '%s ago',\n\t        s : 'a few seconds',\n\t        m : 'a minute',\n\t        mm : '%d minutes',\n\t        h : 'an hour',\n\t        hh : '%d hours',\n\t        d : 'a day',\n\t        dd : '%d days',\n\t        M : 'a month',\n\t        MM : '%d months',\n\t        y : 'a year',\n\t        yy : '%d years'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t    ordinal : function (number) {\n\t        var b = number % 10,\n\t            output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t            (b === 1) ? 'st' :\n\t            (b === 2) ? 'nd' :\n\t            (b === 3) ? 'rd' : 'th';\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn enAu;\n\n\t})));\n\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : English (Canada) [en-ca]\n\t//! author : Jonathan Abourbih : https://github.com/jonbca\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar enCa = moment.defineLocale('en-ca', {\n\t    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'h:mm A',\n\t        LTS : 'h:mm:ss A',\n\t        L : 'YYYY-MM-DD',\n\t        LL : 'MMMM D, YYYY',\n\t        LLL : 'MMMM D, YYYY h:mm A',\n\t        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Today at] LT',\n\t        nextDay : '[Tomorrow at] LT',\n\t        nextWeek : 'dddd [at] LT',\n\t        lastDay : '[Yesterday at] LT',\n\t        lastWeek : '[Last] dddd [at] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'in %s',\n\t        past : '%s ago',\n\t        s : 'a few seconds',\n\t        m : 'a minute',\n\t        mm : '%d minutes',\n\t        h : 'an hour',\n\t        hh : '%d hours',\n\t        d : 'a day',\n\t        dd : '%d days',\n\t        M : 'a month',\n\t        MM : '%d months',\n\t        y : 'a year',\n\t        yy : '%d years'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t    ordinal : function (number) {\n\t        var b = number % 10,\n\t            output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t            (b === 1) ? 'st' :\n\t            (b === 2) ? 'nd' :\n\t            (b === 3) ? 'rd' : 'th';\n\t        return number + output;\n\t    }\n\t});\n\n\treturn enCa;\n\n\t})));\n\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : English (United Kingdom) [en-gb]\n\t//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar enGb = moment.defineLocale('en-gb', {\n\t    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Today at] LT',\n\t        nextDay : '[Tomorrow at] LT',\n\t        nextWeek : 'dddd [at] LT',\n\t        lastDay : '[Yesterday at] LT',\n\t        lastWeek : '[Last] dddd [at] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'in %s',\n\t        past : '%s ago',\n\t        s : 'a few seconds',\n\t        m : 'a minute',\n\t        mm : '%d minutes',\n\t        h : 'an hour',\n\t        hh : '%d hours',\n\t        d : 'a day',\n\t        dd : '%d days',\n\t        M : 'a month',\n\t        MM : '%d months',\n\t        y : 'a year',\n\t        yy : '%d years'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t    ordinal : function (number) {\n\t        var b = number % 10,\n\t            output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t            (b === 1) ? 'st' :\n\t            (b === 2) ? 'nd' :\n\t            (b === 3) ? 'rd' : 'th';\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn enGb;\n\n\t})));\n\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : English (Ireland) [en-ie]\n\t//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar enIe = moment.defineLocale('en-ie', {\n\t    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD-MM-YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Today at] LT',\n\t        nextDay : '[Tomorrow at] LT',\n\t        nextWeek : 'dddd [at] LT',\n\t        lastDay : '[Yesterday at] LT',\n\t        lastWeek : '[Last] dddd [at] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'in %s',\n\t        past : '%s ago',\n\t        s : 'a few seconds',\n\t        m : 'a minute',\n\t        mm : '%d minutes',\n\t        h : 'an hour',\n\t        hh : '%d hours',\n\t        d : 'a day',\n\t        dd : '%d days',\n\t        M : 'a month',\n\t        MM : '%d months',\n\t        y : 'a year',\n\t        yy : '%d years'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t    ordinal : function (number) {\n\t        var b = number % 10,\n\t            output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t            (b === 1) ? 'st' :\n\t            (b === 2) ? 'nd' :\n\t            (b === 3) ? 'rd' : 'th';\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn enIe;\n\n\t})));\n\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : English (New Zealand) [en-nz]\n\t//! author : Luke McGregor : https://github.com/lukemcgregor\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar enNz = moment.defineLocale('en-nz', {\n\t    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'h:mm A',\n\t        LTS : 'h:mm:ss A',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY h:mm A',\n\t        LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Today at] LT',\n\t        nextDay : '[Tomorrow at] LT',\n\t        nextWeek : 'dddd [at] LT',\n\t        lastDay : '[Yesterday at] LT',\n\t        lastWeek : '[Last] dddd [at] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'in %s',\n\t        past : '%s ago',\n\t        s : 'a few seconds',\n\t        m : 'a minute',\n\t        mm : '%d minutes',\n\t        h : 'an hour',\n\t        hh : '%d hours',\n\t        d : 'a day',\n\t        dd : '%d days',\n\t        M : 'a month',\n\t        MM : '%d months',\n\t        y : 'a year',\n\t        yy : '%d years'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t    ordinal : function (number) {\n\t        var b = number % 10,\n\t            output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t            (b === 1) ? 'st' :\n\t            (b === 2) ? 'nd' :\n\t            (b === 3) ? 'rd' : 'th';\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn enNz;\n\n\t})));\n\n\n/***/ },\n/* 55 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Esperanto [eo]\n\t//! author : Colin Dean : https://github.com/colindean\n\t//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n\t//! comment : miestasmia corrected the translation by colindean\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar eo = moment.defineLocale('eo', {\n\t    months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n\t    monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n\t    weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n\t    weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n\t    weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'YYYY-MM-DD',\n\t        LL : 'D[-a de] MMMM, YYYY',\n\t        LLL : 'D[-a de] MMMM, YYYY HH:mm',\n\t        LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n\t    },\n\t    meridiemParse: /[ap]\\.t\\.m/i,\n\t    isPM: function (input) {\n\t        return input.charAt(0).toLowerCase() === 'p';\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours > 11) {\n\t            return isLower ? 'p.t.m.' : 'P.T.M.';\n\t        } else {\n\t            return isLower ? 'a.t.m.' : 'A.T.M.';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[Hodiaŭ je] LT',\n\t        nextDay : '[Morgaŭ je] LT',\n\t        nextWeek : 'dddd [je] LT',\n\t        lastDay : '[Hieraŭ je] LT',\n\t        lastWeek : '[pasinta] dddd [je] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'post %s',\n\t        past : 'antaŭ %s',\n\t        s : 'sekundoj',\n\t        m : 'minuto',\n\t        mm : '%d minutoj',\n\t        h : 'horo',\n\t        hh : '%d horoj',\n\t        d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n\t        dd : '%d tagoj',\n\t        M : 'monato',\n\t        MM : '%d monatoj',\n\t        y : 'jaro',\n\t        yy : '%d jaroj'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}a/,\n\t    ordinal : '%da',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn eo;\n\n\t})));\n\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Spanish (Dominican Republic) [es-do]\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');\n\tvar monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n\tvar esDo = moment.defineLocale('es-do', {\n\t    months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n\t    monthsShort : function (m, format) {\n\t        if (!m) {\n\t            return monthsShortDot;\n\t        } else if (/-MMM-/.test(format)) {\n\t            return monthsShort[m.month()];\n\t        } else {\n\t            return monthsShortDot[m.month()];\n\t        }\n\t    },\n\t    monthsParseExact : true,\n\t    weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n\t    weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n\t    weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'h:mm A',\n\t        LTS : 'h:mm:ss A',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D [de] MMMM [de] YYYY',\n\t        LLL : 'D [de] MMMM [de] YYYY h:mm A',\n\t        LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n\t    },\n\t    calendar : {\n\t        sameDay : function () {\n\t            return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t        },\n\t        nextDay : function () {\n\t            return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t        },\n\t        nextWeek : function () {\n\t            return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t        },\n\t        lastDay : function () {\n\t            return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t        },\n\t        lastWeek : function () {\n\t            return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'en %s',\n\t        past : 'hace %s',\n\t        s : 'unos segundos',\n\t        m : 'un minuto',\n\t        mm : '%d minutos',\n\t        h : 'una hora',\n\t        hh : '%d horas',\n\t        d : 'un día',\n\t        dd : '%d días',\n\t        M : 'un mes',\n\t        MM : '%d meses',\n\t        y : 'un año',\n\t        yy : '%d años'\n\t    },\n\t    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n\t    ordinal : '%dº',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn esDo;\n\n\t})));\n\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Spanish [es]\n\t//! author : Julio Napurí : https://github.com/julionc\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');\n\tvar monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n\tvar es = moment.defineLocale('es', {\n\t    months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n\t    monthsShort : function (m, format) {\n\t        if (!m) {\n\t            return monthsShortDot;\n\t        } else if (/-MMM-/.test(format)) {\n\t            return monthsShort[m.month()];\n\t        } else {\n\t            return monthsShortDot[m.month()];\n\t        }\n\t    },\n\t    monthsParseExact : true,\n\t    weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n\t    weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n\t    weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D [de] MMMM [de] YYYY',\n\t        LLL : 'D [de] MMMM [de] YYYY H:mm',\n\t        LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : function () {\n\t            return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t        },\n\t        nextDay : function () {\n\t            return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t        },\n\t        nextWeek : function () {\n\t            return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t        },\n\t        lastDay : function () {\n\t            return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t        },\n\t        lastWeek : function () {\n\t            return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'en %s',\n\t        past : 'hace %s',\n\t        s : 'unos segundos',\n\t        m : 'un minuto',\n\t        mm : '%d minutos',\n\t        h : 'una hora',\n\t        hh : '%d horas',\n\t        d : 'un día',\n\t        dd : '%d días',\n\t        M : 'un mes',\n\t        MM : '%d meses',\n\t        y : 'un año',\n\t        yy : '%d años'\n\t    },\n\t    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n\t    ordinal : '%dº',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn es;\n\n\t})));\n\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Estonian [et]\n\t//! author : Henry Kehlmann : https://github.com/madhenry\n\t//! improvements : Illimar Tambek : https://github.com/ragulka\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t    var format = {\n\t        's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n\t        'm' : ['ühe minuti', 'üks minut'],\n\t        'mm': [number + ' minuti', number + ' minutit'],\n\t        'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n\t        'hh': [number + ' tunni', number + ' tundi'],\n\t        'd' : ['ühe päeva', 'üks päev'],\n\t        'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n\t        'MM': [number + ' kuu', number + ' kuud'],\n\t        'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n\t        'yy': [number + ' aasta', number + ' aastat']\n\t    };\n\t    if (withoutSuffix) {\n\t        return format[key][2] ? format[key][2] : format[key][1];\n\t    }\n\t    return isFuture ? format[key][0] : format[key][1];\n\t}\n\n\tvar et = moment.defineLocale('et', {\n\t    months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n\t    monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n\t    weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n\t    weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n\t    weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n\t    longDateFormat : {\n\t        LT   : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L    : 'DD.MM.YYYY',\n\t        LL   : 'D. MMMM YYYY',\n\t        LLL  : 'D. MMMM YYYY H:mm',\n\t        LLLL : 'dddd, D. MMMM YYYY H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay  : '[Täna,] LT',\n\t        nextDay  : '[Homme,] LT',\n\t        nextWeek : '[Järgmine] dddd LT',\n\t        lastDay  : '[Eile,] LT',\n\t        lastWeek : '[Eelmine] dddd LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s pärast',\n\t        past   : '%s tagasi',\n\t        s      : processRelativeTime,\n\t        m      : processRelativeTime,\n\t        mm     : processRelativeTime,\n\t        h      : processRelativeTime,\n\t        hh     : processRelativeTime,\n\t        d      : processRelativeTime,\n\t        dd     : '%d päeva',\n\t        M      : processRelativeTime,\n\t        MM     : processRelativeTime,\n\t        y      : processRelativeTime,\n\t        yy     : processRelativeTime\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn et;\n\n\t})));\n\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Basque [eu]\n\t//! author : Eneko Illarramendi : https://github.com/eillarra\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar eu = moment.defineLocale('eu', {\n\t    months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n\t    monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n\t    weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n\t    weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'YYYY-MM-DD',\n\t        LL : 'YYYY[ko] MMMM[ren] D[a]',\n\t        LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n\t        LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n\t        l : 'YYYY-M-D',\n\t        ll : 'YYYY[ko] MMM D[a]',\n\t        lll : 'YYYY[ko] MMM D[a] HH:mm',\n\t        llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[gaur] LT[etan]',\n\t        nextDay : '[bihar] LT[etan]',\n\t        nextWeek : 'dddd LT[etan]',\n\t        lastDay : '[atzo] LT[etan]',\n\t        lastWeek : '[aurreko] dddd LT[etan]',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s barru',\n\t        past : 'duela %s',\n\t        s : 'segundo batzuk',\n\t        m : 'minutu bat',\n\t        mm : '%d minutu',\n\t        h : 'ordu bat',\n\t        hh : '%d ordu',\n\t        d : 'egun bat',\n\t        dd : '%d egun',\n\t        M : 'hilabete bat',\n\t        MM : '%d hilabete',\n\t        y : 'urte bat',\n\t        yy : '%d urte'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn eu;\n\n\t})));\n\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Persian [fa]\n\t//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '۱',\n\t    '2': '۲',\n\t    '3': '۳',\n\t    '4': '۴',\n\t    '5': '۵',\n\t    '6': '۶',\n\t    '7': '۷',\n\t    '8': '۸',\n\t    '9': '۹',\n\t    '0': '۰'\n\t};\n\tvar numberMap = {\n\t    '۱': '1',\n\t    '۲': '2',\n\t    '۳': '3',\n\t    '۴': '4',\n\t    '۵': '5',\n\t    '۶': '6',\n\t    '۷': '7',\n\t    '۸': '8',\n\t    '۹': '9',\n\t    '۰': '0'\n\t};\n\n\tvar fa = moment.defineLocale('fa', {\n\t    months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n\t    monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n\t    weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n\t    weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n\t    weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    meridiemParse: /قبل از ظهر|بعد از ظهر/,\n\t    isPM: function (input) {\n\t        return /بعد از ظهر/.test(input);\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 12) {\n\t            return 'قبل از ظهر';\n\t        } else {\n\t            return 'بعد از ظهر';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[امروز ساعت] LT',\n\t        nextDay : '[فردا ساعت] LT',\n\t        nextWeek : 'dddd [ساعت] LT',\n\t        lastDay : '[دیروز ساعت] LT',\n\t        lastWeek : 'dddd [پیش] [ساعت] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'در %s',\n\t        past : '%s پیش',\n\t        s : 'چند ثانیه',\n\t        m : 'یک دقیقه',\n\t        mm : '%d دقیقه',\n\t        h : 'یک ساعت',\n\t        hh : '%d ساعت',\n\t        d : 'یک روز',\n\t        dd : '%d روز',\n\t        M : 'یک ماه',\n\t        MM : '%d ماه',\n\t        y : 'یک سال',\n\t        yy : '%d سال'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[۰-۹]/g, function (match) {\n\t            return numberMap[match];\n\t        }).replace(/،/g, ',');\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        }).replace(/,/g, '،');\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}م/,\n\t    ordinal : '%dم',\n\t    week : {\n\t        dow : 6, // Saturday is the first day of the week.\n\t        doy : 12 // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn fa;\n\n\t})));\n\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Finnish [fi]\n\t//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' ');\n\tvar numbersFuture = [\n\t        'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n\t        numbersPast[7], numbersPast[8], numbersPast[9]\n\t    ];\n\tfunction translate(number, withoutSuffix, key, isFuture) {\n\t    var result = '';\n\t    switch (key) {\n\t        case 's':\n\t            return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n\t        case 'm':\n\t            return isFuture ? 'minuutin' : 'minuutti';\n\t        case 'mm':\n\t            result = isFuture ? 'minuutin' : 'minuuttia';\n\t            break;\n\t        case 'h':\n\t            return isFuture ? 'tunnin' : 'tunti';\n\t        case 'hh':\n\t            result = isFuture ? 'tunnin' : 'tuntia';\n\t            break;\n\t        case 'd':\n\t            return isFuture ? 'päivän' : 'päivä';\n\t        case 'dd':\n\t            result = isFuture ? 'päivän' : 'päivää';\n\t            break;\n\t        case 'M':\n\t            return isFuture ? 'kuukauden' : 'kuukausi';\n\t        case 'MM':\n\t            result = isFuture ? 'kuukauden' : 'kuukautta';\n\t            break;\n\t        case 'y':\n\t            return isFuture ? 'vuoden' : 'vuosi';\n\t        case 'yy':\n\t            result = isFuture ? 'vuoden' : 'vuotta';\n\t            break;\n\t    }\n\t    result = verbalNumber(number, isFuture) + ' ' + result;\n\t    return result;\n\t}\n\tfunction verbalNumber(number, isFuture) {\n\t    return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n\t}\n\n\tvar fi = moment.defineLocale('fi', {\n\t    months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n\t    monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n\t    weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n\t    weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n\t    weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH.mm',\n\t        LTS : 'HH.mm.ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'Do MMMM[ta] YYYY',\n\t        LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n\t        LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n\t        l : 'D.M.YYYY',\n\t        ll : 'Do MMM YYYY',\n\t        lll : 'Do MMM YYYY, [klo] HH.mm',\n\t        llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[tänään] [klo] LT',\n\t        nextDay : '[huomenna] [klo] LT',\n\t        nextWeek : 'dddd [klo] LT',\n\t        lastDay : '[eilen] [klo] LT',\n\t        lastWeek : '[viime] dddd[na] [klo] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s päästä',\n\t        past : '%s sitten',\n\t        s : translate,\n\t        m : translate,\n\t        mm : translate,\n\t        h : translate,\n\t        hh : translate,\n\t        d : translate,\n\t        dd : translate,\n\t        M : translate,\n\t        MM : translate,\n\t        y : translate,\n\t        yy : translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn fi;\n\n\t})));\n\n\n/***/ },\n/* 62 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Faroese [fo]\n\t//! author : Ragnar Johannesen : https://github.com/ragnar123\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar fo = moment.defineLocale('fo', {\n\t    months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n\t    monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n\t    weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n\t    weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n\t    weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D. MMMM, YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Í dag kl.] LT',\n\t        nextDay : '[Í morgin kl.] LT',\n\t        nextWeek : 'dddd [kl.] LT',\n\t        lastDay : '[Í gjár kl.] LT',\n\t        lastWeek : '[síðstu] dddd [kl] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'um %s',\n\t        past : '%s síðani',\n\t        s : 'fá sekund',\n\t        m : 'ein minutt',\n\t        mm : '%d minuttir',\n\t        h : 'ein tími',\n\t        hh : '%d tímar',\n\t        d : 'ein dagur',\n\t        dd : '%d dagar',\n\t        M : 'ein mánaði',\n\t        MM : '%d mánaðir',\n\t        y : 'eitt ár',\n\t        yy : '%d ár'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn fo;\n\n\t})));\n\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : French (Canada) [fr-ca]\n\t//! author : Jonathan Abourbih : https://github.com/jonbca\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar frCa = moment.defineLocale('fr-ca', {\n\t    months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n\t    monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n\t    weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n\t    weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'YYYY-MM-DD',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Aujourd’hui à] LT',\n\t        nextDay : '[Demain à] LT',\n\t        nextWeek : 'dddd [à] LT',\n\t        lastDay : '[Hier à] LT',\n\t        lastWeek : 'dddd [dernier à] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'dans %s',\n\t        past : 'il y a %s',\n\t        s : 'quelques secondes',\n\t        m : 'une minute',\n\t        mm : '%d minutes',\n\t        h : 'une heure',\n\t        hh : '%d heures',\n\t        d : 'un jour',\n\t        dd : '%d jours',\n\t        M : 'un mois',\n\t        MM : '%d mois',\n\t        y : 'un an',\n\t        yy : '%d ans'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n\t    ordinal : function (number, period) {\n\t        switch (period) {\n\t            // Words with masculine grammatical gender: mois, trimestre, jour\n\t            default:\n\t            case 'M':\n\t            case 'Q':\n\t            case 'D':\n\t            case 'DDD':\n\t            case 'd':\n\t                return number + (number === 1 ? 'er' : 'e');\n\n\t            // Words with feminine grammatical gender: semaine\n\t            case 'w':\n\t            case 'W':\n\t                return number + (number === 1 ? 're' : 'e');\n\t        }\n\t    }\n\t});\n\n\treturn frCa;\n\n\t})));\n\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : French (Switzerland) [fr-ch]\n\t//! author : Gaspard Bucher : https://github.com/gaspard\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar frCh = moment.defineLocale('fr-ch', {\n\t    months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n\t    monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n\t    weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n\t    weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Aujourd’hui à] LT',\n\t        nextDay : '[Demain à] LT',\n\t        nextWeek : 'dddd [à] LT',\n\t        lastDay : '[Hier à] LT',\n\t        lastWeek : 'dddd [dernier à] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'dans %s',\n\t        past : 'il y a %s',\n\t        s : 'quelques secondes',\n\t        m : 'une minute',\n\t        mm : '%d minutes',\n\t        h : 'une heure',\n\t        hh : '%d heures',\n\t        d : 'un jour',\n\t        dd : '%d jours',\n\t        M : 'un mois',\n\t        MM : '%d mois',\n\t        y : 'un an',\n\t        yy : '%d ans'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n\t    ordinal : function (number, period) {\n\t        switch (period) {\n\t            // Words with masculine grammatical gender: mois, trimestre, jour\n\t            default:\n\t            case 'M':\n\t            case 'Q':\n\t            case 'D':\n\t            case 'DDD':\n\t            case 'd':\n\t                return number + (number === 1 ? 'er' : 'e');\n\n\t            // Words with feminine grammatical gender: semaine\n\t            case 'w':\n\t            case 'W':\n\t                return number + (number === 1 ? 're' : 'e');\n\t        }\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn frCh;\n\n\t})));\n\n\n/***/ },\n/* 65 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : French [fr]\n\t//! author : John Fischer : https://github.com/jfroffice\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar fr = moment.defineLocale('fr', {\n\t    months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n\t    monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n\t    weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n\t    weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Aujourd’hui à] LT',\n\t        nextDay : '[Demain à] LT',\n\t        nextWeek : 'dddd [à] LT',\n\t        lastDay : '[Hier à] LT',\n\t        lastWeek : 'dddd [dernier à] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'dans %s',\n\t        past : 'il y a %s',\n\t        s : 'quelques secondes',\n\t        m : 'une minute',\n\t        mm : '%d minutes',\n\t        h : 'une heure',\n\t        hh : '%d heures',\n\t        d : 'un jour',\n\t        dd : '%d jours',\n\t        M : 'un mois',\n\t        MM : '%d mois',\n\t        y : 'un an',\n\t        yy : '%d ans'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n\t    ordinal : function (number, period) {\n\t        switch (period) {\n\t            // TODO: Return 'e' when day of month > 1. Move this case inside\n\t            // block for masculine words below.\n\t            // See https://github.com/moment/moment/issues/3375\n\t            case 'D':\n\t                return number + (number === 1 ? 'er' : '');\n\n\t            // Words with masculine grammatical gender: mois, trimestre, jour\n\t            default:\n\t            case 'M':\n\t            case 'Q':\n\t            case 'DDD':\n\t            case 'd':\n\t                return number + (number === 1 ? 'er' : 'e');\n\n\t            // Words with feminine grammatical gender: semaine\n\t            case 'w':\n\t            case 'W':\n\t                return number + (number === 1 ? 're' : 'e');\n\t        }\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn fr;\n\n\t})));\n\n\n/***/ },\n/* 66 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Frisian [fy]\n\t//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_');\n\tvar monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n\tvar fy = moment.defineLocale('fy', {\n\t    months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n\t    monthsShort : function (m, format) {\n\t        if (!m) {\n\t            return monthsShortWithDots;\n\t        } else if (/-MMM-/.test(format)) {\n\t            return monthsShortWithoutDots[m.month()];\n\t        } else {\n\t            return monthsShortWithDots[m.month()];\n\t        }\n\t    },\n\t    monthsParseExact : true,\n\t    weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n\t    weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n\t    weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD-MM-YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[hjoed om] LT',\n\t        nextDay: '[moarn om] LT',\n\t        nextWeek: 'dddd [om] LT',\n\t        lastDay: '[juster om] LT',\n\t        lastWeek: '[ôfrûne] dddd [om] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'oer %s',\n\t        past : '%s lyn',\n\t        s : 'in pear sekonden',\n\t        m : 'ien minút',\n\t        mm : '%d minuten',\n\t        h : 'ien oere',\n\t        hh : '%d oeren',\n\t        d : 'ien dei',\n\t        dd : '%d dagen',\n\t        M : 'ien moanne',\n\t        MM : '%d moannen',\n\t        y : 'ien jier',\n\t        yy : '%d jierren'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n\t    ordinal : function (number) {\n\t        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn fy;\n\n\t})));\n\n\n/***/ },\n/* 67 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Scottish Gaelic [gd]\n\t//! author : Jon Ashdown : https://github.com/jonashdown\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar months = [\n\t    'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n\t];\n\n\tvar monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\n\tvar weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\n\tvar weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\n\tvar weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n\tvar gd = moment.defineLocale('gd', {\n\t    months : months,\n\t    monthsShort : monthsShort,\n\t    monthsParseExact : true,\n\t    weekdays : weekdays,\n\t    weekdaysShort : weekdaysShort,\n\t    weekdaysMin : weekdaysMin,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[An-diugh aig] LT',\n\t        nextDay : '[A-màireach aig] LT',\n\t        nextWeek : 'dddd [aig] LT',\n\t        lastDay : '[An-dè aig] LT',\n\t        lastWeek : 'dddd [seo chaidh] [aig] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'ann an %s',\n\t        past : 'bho chionn %s',\n\t        s : 'beagan diogan',\n\t        m : 'mionaid',\n\t        mm : '%d mionaidean',\n\t        h : 'uair',\n\t        hh : '%d uairean',\n\t        d : 'latha',\n\t        dd : '%d latha',\n\t        M : 'mìos',\n\t        MM : '%d mìosan',\n\t        y : 'bliadhna',\n\t        yy : '%d bliadhna'\n\t    },\n\t    dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n\t    ordinal : function (number) {\n\t        var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn gd;\n\n\t})));\n\n\n/***/ },\n/* 68 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Galician [gl]\n\t//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar gl = moment.defineLocale('gl', {\n\t    months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n\t    monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n\t    monthsParseExact: true,\n\t    weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n\t    weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n\t    weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D [de] MMMM [de] YYYY',\n\t        LLL : 'D [de] MMMM [de] YYYY H:mm',\n\t        LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : function () {\n\t            return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n\t        },\n\t        nextDay : function () {\n\t            return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n\t        },\n\t        nextWeek : function () {\n\t            return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n\t        },\n\t        lastDay : function () {\n\t            return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n\t        },\n\t        lastWeek : function () {\n\t            return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : function (str) {\n\t            if (str.indexOf('un') === 0) {\n\t                return 'n' + str;\n\t            }\n\t            return 'en ' + str;\n\t        },\n\t        past : 'hai %s',\n\t        s : 'uns segundos',\n\t        m : 'un minuto',\n\t        mm : '%d minutos',\n\t        h : 'unha hora',\n\t        hh : '%d horas',\n\t        d : 'un día',\n\t        dd : '%d días',\n\t        M : 'un mes',\n\t        MM : '%d meses',\n\t        y : 'un ano',\n\t        yy : '%d anos'\n\t    },\n\t    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n\t    ordinal : '%dº',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn gl;\n\n\t})));\n\n\n/***/ },\n/* 69 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Konkani Latin script [gom-latn]\n\t//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t    var format = {\n\t        's': ['thodde secondanim', 'thodde second'],\n\t        'm': ['eka mintan', 'ek minute'],\n\t        'mm': [number + ' mintanim', number + ' mintam'],\n\t        'h': ['eka horan', 'ek hor'],\n\t        'hh': [number + ' horanim', number + ' hor'],\n\t        'd': ['eka disan', 'ek dis'],\n\t        'dd': [number + ' disanim', number + ' dis'],\n\t        'M': ['eka mhoinean', 'ek mhoino'],\n\t        'MM': [number + ' mhoineanim', number + ' mhoine'],\n\t        'y': ['eka vorsan', 'ek voros'],\n\t        'yy': [number + ' vorsanim', number + ' vorsam']\n\t    };\n\t    return withoutSuffix ? format[key][0] : format[key][1];\n\t}\n\n\tvar gomLatn = moment.defineLocale('gom-latn', {\n\t    months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n\t    monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n\t    weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n\t    weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'A h:mm [vazta]',\n\t        LTS : 'A h:mm:ss [vazta]',\n\t        L : 'DD-MM-YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY A h:mm [vazta]',\n\t        LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n\t        llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Aiz] LT',\n\t        nextDay: '[Faleam] LT',\n\t        nextWeek: '[Ieta to] dddd[,] LT',\n\t        lastDay: '[Kal] LT',\n\t        lastWeek: '[Fatlo] dddd[,] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s',\n\t        past : '%s adim',\n\t        s : processRelativeTime,\n\t        m : processRelativeTime,\n\t        mm : processRelativeTime,\n\t        h : processRelativeTime,\n\t        hh : processRelativeTime,\n\t        d : processRelativeTime,\n\t        dd : processRelativeTime,\n\t        M : processRelativeTime,\n\t        MM : processRelativeTime,\n\t        y : processRelativeTime,\n\t        yy : processRelativeTime\n\t    },\n\t    dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n\t    ordinal : function (number, period) {\n\t        switch (period) {\n\t            // the ordinal 'er' only applies to day of the month\n\t            case 'D':\n\t                return number + 'er';\n\t            default:\n\t            case 'M':\n\t            case 'Q':\n\t            case 'DDD':\n\t            case 'd':\n\t            case 'w':\n\t            case 'W':\n\t                return number;\n\t        }\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    },\n\t    meridiemParse: /rati|sokalli|donparam|sanje/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'rati') {\n\t            return hour < 4 ? hour : hour + 12;\n\t        } else if (meridiem === 'sokalli') {\n\t            return hour;\n\t        } else if (meridiem === 'donparam') {\n\t            return hour > 12 ? hour : hour + 12;\n\t        } else if (meridiem === 'sanje') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'rati';\n\t        } else if (hour < 12) {\n\t            return 'sokalli';\n\t        } else if (hour < 16) {\n\t            return 'donparam';\n\t        } else if (hour < 20) {\n\t            return 'sanje';\n\t        } else {\n\t            return 'rati';\n\t        }\n\t    }\n\t});\n\n\treturn gomLatn;\n\n\t})));\n\n\n/***/ },\n/* 70 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Hebrew [he]\n\t//! author : Tomer Cohen : https://github.com/tomer\n\t//! author : Moshe Simantov : https://github.com/DevelopmentIL\n\t//! author : Tal Ater : https://github.com/TalAter\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar he = moment.defineLocale('he', {\n\t    months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n\t    monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n\t    weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n\t    weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n\t    weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D [ב]MMMM YYYY',\n\t        LLL : 'D [ב]MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n\t        l : 'D/M/YYYY',\n\t        ll : 'D MMM YYYY',\n\t        lll : 'D MMM YYYY HH:mm',\n\t        llll : 'ddd, D MMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[היום ב־]LT',\n\t        nextDay : '[מחר ב־]LT',\n\t        nextWeek : 'dddd [בשעה] LT',\n\t        lastDay : '[אתמול ב־]LT',\n\t        lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'בעוד %s',\n\t        past : 'לפני %s',\n\t        s : 'מספר שניות',\n\t        m : 'דקה',\n\t        mm : '%d דקות',\n\t        h : 'שעה',\n\t        hh : function (number) {\n\t            if (number === 2) {\n\t                return 'שעתיים';\n\t            }\n\t            return number + ' שעות';\n\t        },\n\t        d : 'יום',\n\t        dd : function (number) {\n\t            if (number === 2) {\n\t                return 'יומיים';\n\t            }\n\t            return number + ' ימים';\n\t        },\n\t        M : 'חודש',\n\t        MM : function (number) {\n\t            if (number === 2) {\n\t                return 'חודשיים';\n\t            }\n\t            return number + ' חודשים';\n\t        },\n\t        y : 'שנה',\n\t        yy : function (number) {\n\t            if (number === 2) {\n\t                return 'שנתיים';\n\t            } else if (number % 10 === 0 && number !== 10) {\n\t                return number + ' שנה';\n\t            }\n\t            return number + ' שנים';\n\t        }\n\t    },\n\t    meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n\t    isPM : function (input) {\n\t        return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 5) {\n\t            return 'לפנות בוקר';\n\t        } else if (hour < 10) {\n\t            return 'בבוקר';\n\t        } else if (hour < 12) {\n\t            return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n\t        } else if (hour < 18) {\n\t            return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n\t        } else {\n\t            return 'בערב';\n\t        }\n\t    }\n\t});\n\n\treturn he;\n\n\t})));\n\n\n/***/ },\n/* 71 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Hindi [hi]\n\t//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '१',\n\t    '2': '२',\n\t    '3': '३',\n\t    '4': '४',\n\t    '5': '५',\n\t    '6': '६',\n\t    '7': '७',\n\t    '8': '८',\n\t    '9': '९',\n\t    '0': '०'\n\t};\n\tvar numberMap = {\n\t    '१': '1',\n\t    '२': '2',\n\t    '३': '3',\n\t    '४': '4',\n\t    '५': '5',\n\t    '६': '6',\n\t    '७': '7',\n\t    '८': '8',\n\t    '९': '9',\n\t    '०': '0'\n\t};\n\n\tvar hi = moment.defineLocale('hi', {\n\t    months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n\t    monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n\t    monthsParseExact: true,\n\t    weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n\t    weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n\t    weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'A h:mm बजे',\n\t        LTS : 'A h:mm:ss बजे',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY, A h:mm बजे',\n\t        LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n\t    },\n\t    calendar : {\n\t        sameDay : '[आज] LT',\n\t        nextDay : '[कल] LT',\n\t        nextWeek : 'dddd, LT',\n\t        lastDay : '[कल] LT',\n\t        lastWeek : '[पिछले] dddd, LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s में',\n\t        past : '%s पहले',\n\t        s : 'कुछ ही क्षण',\n\t        m : 'एक मिनट',\n\t        mm : '%d मिनट',\n\t        h : 'एक घंटा',\n\t        hh : '%d घंटे',\n\t        d : 'एक दिन',\n\t        dd : '%d दिन',\n\t        M : 'एक महीने',\n\t        MM : '%d महीने',\n\t        y : 'एक वर्ष',\n\t        yy : '%d वर्ष'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[१२३४५६७८९०]/g, function (match) {\n\t            return numberMap[match];\n\t        });\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        });\n\t    },\n\t    // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n\t    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n\t    meridiemParse: /रात|सुबह|दोपहर|शाम/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'रात') {\n\t            return hour < 4 ? hour : hour + 12;\n\t        } else if (meridiem === 'सुबह') {\n\t            return hour;\n\t        } else if (meridiem === 'दोपहर') {\n\t            return hour >= 10 ? hour : hour + 12;\n\t        } else if (meridiem === 'शाम') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'रात';\n\t        } else if (hour < 10) {\n\t            return 'सुबह';\n\t        } else if (hour < 17) {\n\t            return 'दोपहर';\n\t        } else if (hour < 20) {\n\t            return 'शाम';\n\t        } else {\n\t            return 'रात';\n\t        }\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn hi;\n\n\t})));\n\n\n/***/ },\n/* 72 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Croatian [hr]\n\t//! author : Bojan Marković : https://github.com/bmarkovic\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction translate(number, withoutSuffix, key) {\n\t    var result = number + ' ';\n\t    switch (key) {\n\t        case 'm':\n\t            return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n\t        case 'mm':\n\t            if (number === 1) {\n\t                result += 'minuta';\n\t            } else if (number === 2 || number === 3 || number === 4) {\n\t                result += 'minute';\n\t            } else {\n\t                result += 'minuta';\n\t            }\n\t            return result;\n\t        case 'h':\n\t            return withoutSuffix ? 'jedan sat' : 'jednog sata';\n\t        case 'hh':\n\t            if (number === 1) {\n\t                result += 'sat';\n\t            } else if (number === 2 || number === 3 || number === 4) {\n\t                result += 'sata';\n\t            } else {\n\t                result += 'sati';\n\t            }\n\t            return result;\n\t        case 'dd':\n\t            if (number === 1) {\n\t                result += 'dan';\n\t            } else {\n\t                result += 'dana';\n\t            }\n\t            return result;\n\t        case 'MM':\n\t            if (number === 1) {\n\t                result += 'mjesec';\n\t            } else if (number === 2 || number === 3 || number === 4) {\n\t                result += 'mjeseca';\n\t            } else {\n\t                result += 'mjeseci';\n\t            }\n\t            return result;\n\t        case 'yy':\n\t            if (number === 1) {\n\t                result += 'godina';\n\t            } else if (number === 2 || number === 3 || number === 4) {\n\t                result += 'godine';\n\t            } else {\n\t                result += 'godina';\n\t            }\n\t            return result;\n\t    }\n\t}\n\n\tvar hr = moment.defineLocale('hr', {\n\t    months : {\n\t        format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n\t        standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n\t    },\n\t    monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n\t    monthsParseExact: true,\n\t    weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n\t    weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n\t    weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY H:mm',\n\t        LLLL : 'dddd, D. MMMM YYYY H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay  : '[danas u] LT',\n\t        nextDay  : '[sutra u] LT',\n\t        nextWeek : function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[u] [nedjelju] [u] LT';\n\t                case 3:\n\t                    return '[u] [srijedu] [u] LT';\n\t                case 6:\n\t                    return '[u] [subotu] [u] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[u] dddd [u] LT';\n\t            }\n\t        },\n\t        lastDay  : '[jučer u] LT',\n\t        lastWeek : function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                case 3:\n\t                    return '[prošlu] dddd [u] LT';\n\t                case 6:\n\t                    return '[prošle] [subote] [u] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[prošli] dddd [u] LT';\n\t            }\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'za %s',\n\t        past   : 'prije %s',\n\t        s      : 'par sekundi',\n\t        m      : translate,\n\t        mm     : translate,\n\t        h      : translate,\n\t        hh     : translate,\n\t        d      : 'dan',\n\t        dd     : translate,\n\t        M      : 'mjesec',\n\t        MM     : translate,\n\t        y      : 'godinu',\n\t        yy     : translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn hr;\n\n\t})));\n\n\n/***/ },\n/* 73 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Hungarian [hu]\n\t//! author : Adam Brunner : https://github.com/adambrunner\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n\tfunction translate(number, withoutSuffix, key, isFuture) {\n\t    var num = number,\n\t        suffix;\n\t    switch (key) {\n\t        case 's':\n\t            return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n\t        case 'm':\n\t            return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n\t        case 'mm':\n\t            return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n\t        case 'h':\n\t            return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n\t        case 'hh':\n\t            return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n\t        case 'd':\n\t            return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n\t        case 'dd':\n\t            return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n\t        case 'M':\n\t            return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n\t        case 'MM':\n\t            return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n\t        case 'y':\n\t            return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n\t        case 'yy':\n\t            return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n\t    }\n\t    return '';\n\t}\n\tfunction week(isFuture) {\n\t    return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n\t}\n\n\tvar hu = moment.defineLocale('hu', {\n\t    months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n\t    monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n\t    weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n\t    weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n\t    weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'YYYY.MM.DD.',\n\t        LL : 'YYYY. MMMM D.',\n\t        LLL : 'YYYY. MMMM D. H:mm',\n\t        LLLL : 'YYYY. MMMM D., dddd H:mm'\n\t    },\n\t    meridiemParse: /de|du/i,\n\t    isPM: function (input) {\n\t        return input.charAt(1).toLowerCase() === 'u';\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours < 12) {\n\t            return isLower === true ? 'de' : 'DE';\n\t        } else {\n\t            return isLower === true ? 'du' : 'DU';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[ma] LT[-kor]',\n\t        nextDay : '[holnap] LT[-kor]',\n\t        nextWeek : function () {\n\t            return week.call(this, true);\n\t        },\n\t        lastDay : '[tegnap] LT[-kor]',\n\t        lastWeek : function () {\n\t            return week.call(this, false);\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s múlva',\n\t        past : '%s',\n\t        s : translate,\n\t        m : translate,\n\t        mm : translate,\n\t        h : translate,\n\t        hh : translate,\n\t        d : translate,\n\t        dd : translate,\n\t        M : translate,\n\t        MM : translate,\n\t        y : translate,\n\t        yy : translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn hu;\n\n\t})));\n\n\n/***/ },\n/* 74 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Armenian [hy-am]\n\t//! author : Armendarabyan : https://github.com/armendarabyan\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar hyAm = moment.defineLocale('hy-am', {\n\t    months : {\n\t        format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n\t        standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n\t    },\n\t    monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n\t    weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n\t    weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n\t    weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY թ.',\n\t        LLL : 'D MMMM YYYY թ., HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[այսօր] LT',\n\t        nextDay: '[վաղը] LT',\n\t        lastDay: '[երեկ] LT',\n\t        nextWeek: function () {\n\t            return 'dddd [օրը ժամը] LT';\n\t        },\n\t        lastWeek: function () {\n\t            return '[անցած] dddd [օրը ժամը] LT';\n\t        },\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s հետո',\n\t        past : '%s առաջ',\n\t        s : 'մի քանի վայրկյան',\n\t        m : 'րոպե',\n\t        mm : '%d րոպե',\n\t        h : 'ժամ',\n\t        hh : '%d ժամ',\n\t        d : 'օր',\n\t        dd : '%d օր',\n\t        M : 'ամիս',\n\t        MM : '%d ամիս',\n\t        y : 'տարի',\n\t        yy : '%d տարի'\n\t    },\n\t    meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n\t    isPM: function (input) {\n\t        return /^(ցերեկվա|երեկոյան)$/.test(input);\n\t    },\n\t    meridiem : function (hour) {\n\t        if (hour < 4) {\n\t            return 'գիշերվա';\n\t        } else if (hour < 12) {\n\t            return 'առավոտվա';\n\t        } else if (hour < 17) {\n\t            return 'ցերեկվա';\n\t        } else {\n\t            return 'երեկոյան';\n\t        }\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n\t    ordinal: function (number, period) {\n\t        switch (period) {\n\t            case 'DDD':\n\t            case 'w':\n\t            case 'W':\n\t            case 'DDDo':\n\t                if (number === 1) {\n\t                    return number + '-ին';\n\t                }\n\t                return number + '-րդ';\n\t            default:\n\t                return number;\n\t        }\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn hyAm;\n\n\t})));\n\n\n/***/ },\n/* 75 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Indonesian [id]\n\t//! author : Mohammad Satrio Utomo : https://github.com/tyok\n\t//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar id = moment.defineLocale('id', {\n\t    months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),\n\t    weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n\t    weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n\t    weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH.mm',\n\t        LTS : 'HH.mm.ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY [pukul] HH.mm',\n\t        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n\t    },\n\t    meridiemParse: /pagi|siang|sore|malam/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'pagi') {\n\t            return hour;\n\t        } else if (meridiem === 'siang') {\n\t            return hour >= 11 ? hour : hour + 12;\n\t        } else if (meridiem === 'sore' || meridiem === 'malam') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours < 11) {\n\t            return 'pagi';\n\t        } else if (hours < 15) {\n\t            return 'siang';\n\t        } else if (hours < 19) {\n\t            return 'sore';\n\t        } else {\n\t            return 'malam';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[Hari ini pukul] LT',\n\t        nextDay : '[Besok pukul] LT',\n\t        nextWeek : 'dddd [pukul] LT',\n\t        lastDay : '[Kemarin pukul] LT',\n\t        lastWeek : 'dddd [lalu pukul] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'dalam %s',\n\t        past : '%s yang lalu',\n\t        s : 'beberapa detik',\n\t        m : 'semenit',\n\t        mm : '%d menit',\n\t        h : 'sejam',\n\t        hh : '%d jam',\n\t        d : 'sehari',\n\t        dd : '%d hari',\n\t        M : 'sebulan',\n\t        MM : '%d bulan',\n\t        y : 'setahun',\n\t        yy : '%d tahun'\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn id;\n\n\t})));\n\n\n/***/ },\n/* 76 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Icelandic [is]\n\t//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction plural(n) {\n\t    if (n % 100 === 11) {\n\t        return true;\n\t    } else if (n % 10 === 1) {\n\t        return false;\n\t    }\n\t    return true;\n\t}\n\tfunction translate(number, withoutSuffix, key, isFuture) {\n\t    var result = number + ' ';\n\t    switch (key) {\n\t        case 's':\n\t            return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n\t        case 'm':\n\t            return withoutSuffix ? 'mínúta' : 'mínútu';\n\t        case 'mm':\n\t            if (plural(number)) {\n\t                return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n\t            } else if (withoutSuffix) {\n\t                return result + 'mínúta';\n\t            }\n\t            return result + 'mínútu';\n\t        case 'hh':\n\t            if (plural(number)) {\n\t                return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n\t            }\n\t            return result + 'klukkustund';\n\t        case 'd':\n\t            if (withoutSuffix) {\n\t                return 'dagur';\n\t            }\n\t            return isFuture ? 'dag' : 'degi';\n\t        case 'dd':\n\t            if (plural(number)) {\n\t                if (withoutSuffix) {\n\t                    return result + 'dagar';\n\t                }\n\t                return result + (isFuture ? 'daga' : 'dögum');\n\t            } else if (withoutSuffix) {\n\t                return result + 'dagur';\n\t            }\n\t            return result + (isFuture ? 'dag' : 'degi');\n\t        case 'M':\n\t            if (withoutSuffix) {\n\t                return 'mánuður';\n\t            }\n\t            return isFuture ? 'mánuð' : 'mánuði';\n\t        case 'MM':\n\t            if (plural(number)) {\n\t                if (withoutSuffix) {\n\t                    return result + 'mánuðir';\n\t                }\n\t                return result + (isFuture ? 'mánuði' : 'mánuðum');\n\t            } else if (withoutSuffix) {\n\t                return result + 'mánuður';\n\t            }\n\t            return result + (isFuture ? 'mánuð' : 'mánuði');\n\t        case 'y':\n\t            return withoutSuffix || isFuture ? 'ár' : 'ári';\n\t        case 'yy':\n\t            if (plural(number)) {\n\t                return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n\t            }\n\t            return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n\t    }\n\t}\n\n\tvar is = moment.defineLocale('is', {\n\t    months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n\t    monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n\t    weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n\t    weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n\t    weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY [kl.] H:mm',\n\t        LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[í dag kl.] LT',\n\t        nextDay : '[á morgun kl.] LT',\n\t        nextWeek : 'dddd [kl.] LT',\n\t        lastDay : '[í gær kl.] LT',\n\t        lastWeek : '[síðasta] dddd [kl.] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'eftir %s',\n\t        past : 'fyrir %s síðan',\n\t        s : translate,\n\t        m : translate,\n\t        mm : translate,\n\t        h : 'klukkustund',\n\t        hh : translate,\n\t        d : translate,\n\t        dd : translate,\n\t        M : translate,\n\t        MM : translate,\n\t        y : translate,\n\t        yy : translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn is;\n\n\t})));\n\n\n/***/ },\n/* 77 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Italian [it]\n\t//! author : Lorenzo : https://github.com/aliem\n\t//! author: Mattia Larentis: https://github.com/nostalgiaz\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar it = moment.defineLocale('it', {\n\t    months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n\t    monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n\t    weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n\t    weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n\t    weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Oggi alle] LT',\n\t        nextDay: '[Domani alle] LT',\n\t        nextWeek: 'dddd [alle] LT',\n\t        lastDay: '[Ieri alle] LT',\n\t        lastWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[la scorsa] dddd [alle] LT';\n\t                default:\n\t                    return '[lo scorso] dddd [alle] LT';\n\t            }\n\t        },\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : function (s) {\n\t            return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n\t        },\n\t        past : '%s fa',\n\t        s : 'alcuni secondi',\n\t        m : 'un minuto',\n\t        mm : '%d minuti',\n\t        h : 'un\\'ora',\n\t        hh : '%d ore',\n\t        d : 'un giorno',\n\t        dd : '%d giorni',\n\t        M : 'un mese',\n\t        MM : '%d mesi',\n\t        y : 'un anno',\n\t        yy : '%d anni'\n\t    },\n\t    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n\t    ordinal: '%dº',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn it;\n\n\t})));\n\n\n/***/ },\n/* 78 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Japanese [ja]\n\t//! author : LI Long : https://github.com/baryon\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar ja = moment.defineLocale('ja', {\n\t    months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t    weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n\t    weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n\t    weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'YYYY/MM/DD',\n\t        LL : 'YYYY年M月D日',\n\t        LLL : 'YYYY年M月D日 HH:mm',\n\t        LLLL : 'YYYY年M月D日 HH:mm dddd',\n\t        l : 'YYYY/MM/DD',\n\t        ll : 'YYYY年M月D日',\n\t        lll : 'YYYY年M月D日 HH:mm',\n\t        llll : 'YYYY年M月D日 HH:mm dddd'\n\t    },\n\t    meridiemParse: /午前|午後/i,\n\t    isPM : function (input) {\n\t        return input === '午後';\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 12) {\n\t            return '午前';\n\t        } else {\n\t            return '午後';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[今日] LT',\n\t        nextDay : '[明日] LT',\n\t        nextWeek : '[来週]dddd LT',\n\t        lastDay : '[昨日] LT',\n\t        lastWeek : '[前週]dddd LT',\n\t        sameElse : 'L'\n\t    },\n\t    dayOfMonthOrdinalParse : /\\d{1,2}日/,\n\t    ordinal : function (number, period) {\n\t        switch (period) {\n\t            case 'd':\n\t            case 'D':\n\t            case 'DDD':\n\t                return number + '日';\n\t            default:\n\t                return number;\n\t        }\n\t    },\n\t    relativeTime : {\n\t        future : '%s後',\n\t        past : '%s前',\n\t        s : '数秒',\n\t        m : '1分',\n\t        mm : '%d分',\n\t        h : '1時間',\n\t        hh : '%d時間',\n\t        d : '1日',\n\t        dd : '%d日',\n\t        M : '1ヶ月',\n\t        MM : '%dヶ月',\n\t        y : '1年',\n\t        yy : '%d年'\n\t    }\n\t});\n\n\treturn ja;\n\n\t})));\n\n\n/***/ },\n/* 79 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Javanese [jv]\n\t//! author : Rony Lantip : https://github.com/lantip\n\t//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar jv = moment.defineLocale('jv', {\n\t    months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n\t    weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n\t    weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n\t    weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH.mm',\n\t        LTS : 'HH.mm.ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY [pukul] HH.mm',\n\t        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n\t    },\n\t    meridiemParse: /enjing|siyang|sonten|ndalu/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'enjing') {\n\t            return hour;\n\t        } else if (meridiem === 'siyang') {\n\t            return hour >= 11 ? hour : hour + 12;\n\t        } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours < 11) {\n\t            return 'enjing';\n\t        } else if (hours < 15) {\n\t            return 'siyang';\n\t        } else if (hours < 19) {\n\t            return 'sonten';\n\t        } else {\n\t            return 'ndalu';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[Dinten puniko pukul] LT',\n\t        nextDay : '[Mbenjang pukul] LT',\n\t        nextWeek : 'dddd [pukul] LT',\n\t        lastDay : '[Kala wingi pukul] LT',\n\t        lastWeek : 'dddd [kepengker pukul] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'wonten ing %s',\n\t        past : '%s ingkang kepengker',\n\t        s : 'sawetawis detik',\n\t        m : 'setunggal menit',\n\t        mm : '%d menit',\n\t        h : 'setunggal jam',\n\t        hh : '%d jam',\n\t        d : 'sedinten',\n\t        dd : '%d dinten',\n\t        M : 'sewulan',\n\t        MM : '%d wulan',\n\t        y : 'setaun',\n\t        yy : '%d taun'\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn jv;\n\n\t})));\n\n\n/***/ },\n/* 80 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Georgian [ka]\n\t//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar ka = moment.defineLocale('ka', {\n\t    months : {\n\t        standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n\t        format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n\t    },\n\t    monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n\t    weekdays : {\n\t        standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n\t        format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n\t        isFormat: /(წინა|შემდეგ)/\n\t    },\n\t    weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n\t    weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'h:mm A',\n\t        LTS : 'h:mm:ss A',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY h:mm A',\n\t        LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t    },\n\t    calendar : {\n\t        sameDay : '[დღეს] LT[-ზე]',\n\t        nextDay : '[ხვალ] LT[-ზე]',\n\t        lastDay : '[გუშინ] LT[-ზე]',\n\t        nextWeek : '[შემდეგ] dddd LT[-ზე]',\n\t        lastWeek : '[წინა] dddd LT-ზე',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : function (s) {\n\t            return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n\t                s.replace(/ი$/, 'ში') :\n\t                s + 'ში';\n\t        },\n\t        past : function (s) {\n\t            if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n\t                return s.replace(/(ი|ე)$/, 'ის უკან');\n\t            }\n\t            if ((/წელი/).test(s)) {\n\t                return s.replace(/წელი$/, 'წლის უკან');\n\t            }\n\t        },\n\t        s : 'რამდენიმე წამი',\n\t        m : 'წუთი',\n\t        mm : '%d წუთი',\n\t        h : 'საათი',\n\t        hh : '%d საათი',\n\t        d : 'დღე',\n\t        dd : '%d დღე',\n\t        M : 'თვე',\n\t        MM : '%d თვე',\n\t        y : 'წელი',\n\t        yy : '%d წელი'\n\t    },\n\t    dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n\t    ordinal : function (number) {\n\t        if (number === 0) {\n\t            return number;\n\t        }\n\t        if (number === 1) {\n\t            return number + '-ლი';\n\t        }\n\t        if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n\t            return 'მე-' + number;\n\t        }\n\t        return number + '-ე';\n\t    },\n\t    week : {\n\t        dow : 1,\n\t        doy : 7\n\t    }\n\t});\n\n\treturn ka;\n\n\t})));\n\n\n/***/ },\n/* 81 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Kazakh [kk]\n\t//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar suffixes = {\n\t    0: '-ші',\n\t    1: '-ші',\n\t    2: '-ші',\n\t    3: '-ші',\n\t    4: '-ші',\n\t    5: '-ші',\n\t    6: '-шы',\n\t    7: '-ші',\n\t    8: '-ші',\n\t    9: '-шы',\n\t    10: '-шы',\n\t    20: '-шы',\n\t    30: '-шы',\n\t    40: '-шы',\n\t    50: '-ші',\n\t    60: '-шы',\n\t    70: '-ші',\n\t    80: '-ші',\n\t    90: '-шы',\n\t    100: '-ші'\n\t};\n\n\tvar kk = moment.defineLocale('kk', {\n\t    months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n\t    monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n\t    weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n\t    weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n\t    weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Бүгін сағат] LT',\n\t        nextDay : '[Ертең сағат] LT',\n\t        nextWeek : 'dddd [сағат] LT',\n\t        lastDay : '[Кеше сағат] LT',\n\t        lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s ішінде',\n\t        past : '%s бұрын',\n\t        s : 'бірнеше секунд',\n\t        m : 'бір минут',\n\t        mm : '%d минут',\n\t        h : 'бір сағат',\n\t        hh : '%d сағат',\n\t        d : 'бір күн',\n\t        dd : '%d күн',\n\t        M : 'бір ай',\n\t        MM : '%d ай',\n\t        y : 'бір жыл',\n\t        yy : '%d жыл'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n\t    ordinal : function (number) {\n\t        var a = number % 10,\n\t            b = number >= 100 ? 100 : null;\n\t        return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn kk;\n\n\t})));\n\n\n/***/ },\n/* 82 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Cambodian [km]\n\t//! author : Kruy Vanna : https://github.com/kruyvanna\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar km = moment.defineLocale('km', {\n\t    months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n\t    monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n\t    weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n\t    weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n\t    weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n\t    longDateFormat: {\n\t        LT: 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L: 'DD/MM/YYYY',\n\t        LL: 'D MMMM YYYY',\n\t        LLL: 'D MMMM YYYY HH:mm',\n\t        LLLL: 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar: {\n\t        sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n\t        nextDay: '[ស្អែក ម៉ោង] LT',\n\t        nextWeek: 'dddd [ម៉ោង] LT',\n\t        lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n\t        lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime: {\n\t        future: '%sទៀត',\n\t        past: '%sមុន',\n\t        s: 'ប៉ុន្មានវិនាទី',\n\t        m: 'មួយនាទី',\n\t        mm: '%d នាទី',\n\t        h: 'មួយម៉ោង',\n\t        hh: '%d ម៉ោង',\n\t        d: 'មួយថ្ងៃ',\n\t        dd: '%d ថ្ងៃ',\n\t        M: 'មួយខែ',\n\t        MM: '%d ខែ',\n\t        y: 'មួយឆ្នាំ',\n\t        yy: '%d ឆ្នាំ'\n\t    },\n\t    week: {\n\t        dow: 1, // Monday is the first day of the week.\n\t        doy: 4 // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn km;\n\n\t})));\n\n\n/***/ },\n/* 83 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Kannada [kn]\n\t//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '೧',\n\t    '2': '೨',\n\t    '3': '೩',\n\t    '4': '೪',\n\t    '5': '೫',\n\t    '6': '೬',\n\t    '7': '೭',\n\t    '8': '೮',\n\t    '9': '೯',\n\t    '0': '೦'\n\t};\n\tvar numberMap = {\n\t    '೧': '1',\n\t    '೨': '2',\n\t    '೩': '3',\n\t    '೪': '4',\n\t    '೫': '5',\n\t    '೬': '6',\n\t    '೭': '7',\n\t    '೮': '8',\n\t    '೯': '9',\n\t    '೦': '0'\n\t};\n\n\tvar kn = moment.defineLocale('kn', {\n\t    months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n\t    monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ'.split('_'),\n\t    monthsParseExact: true,\n\t    weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n\t    weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n\t    weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'A h:mm',\n\t        LTS : 'A h:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY, A h:mm',\n\t        LLLL : 'dddd, D MMMM YYYY, A h:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[ಇಂದು] LT',\n\t        nextDay : '[ನಾಳೆ] LT',\n\t        nextWeek : 'dddd, LT',\n\t        lastDay : '[ನಿನ್ನೆ] LT',\n\t        lastWeek : '[ಕೊನೆಯ] dddd, LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s ನಂತರ',\n\t        past : '%s ಹಿಂದೆ',\n\t        s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n\t        m : 'ಒಂದು ನಿಮಿಷ',\n\t        mm : '%d ನಿಮಿಷ',\n\t        h : 'ಒಂದು ಗಂಟೆ',\n\t        hh : '%d ಗಂಟೆ',\n\t        d : 'ಒಂದು ದಿನ',\n\t        dd : '%d ದಿನ',\n\t        M : 'ಒಂದು ತಿಂಗಳು',\n\t        MM : '%d ತಿಂಗಳು',\n\t        y : 'ಒಂದು ವರ್ಷ',\n\t        yy : '%d ವರ್ಷ'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n\t            return numberMap[match];\n\t        });\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        });\n\t    },\n\t    meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'ರಾತ್ರಿ') {\n\t            return hour < 4 ? hour : hour + 12;\n\t        } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n\t            return hour;\n\t        } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n\t            return hour >= 10 ? hour : hour + 12;\n\t        } else if (meridiem === 'ಸಂಜೆ') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'ರಾತ್ರಿ';\n\t        } else if (hour < 10) {\n\t            return 'ಬೆಳಿಗ್ಗೆ';\n\t        } else if (hour < 17) {\n\t            return 'ಮಧ್ಯಾಹ್ನ';\n\t        } else if (hour < 20) {\n\t            return 'ಸಂಜೆ';\n\t        } else {\n\t            return 'ರಾತ್ರಿ';\n\t        }\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n\t    ordinal : function (number) {\n\t        return number + 'ನೇ';\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn kn;\n\n\t})));\n\n\n/***/ },\n/* 84 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Korean [ko]\n\t//! author : Kyungwook, Park : https://github.com/kyungw00k\n\t//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar ko = moment.defineLocale('ko', {\n\t    months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n\t    monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n\t    weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n\t    weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n\t    weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'A h:mm',\n\t        LTS : 'A h:mm:ss',\n\t        L : 'YYYY.MM.DD',\n\t        LL : 'YYYY년 MMMM D일',\n\t        LLL : 'YYYY년 MMMM D일 A h:mm',\n\t        LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n\t        l : 'YYYY.MM.DD',\n\t        ll : 'YYYY년 MMMM D일',\n\t        lll : 'YYYY년 MMMM D일 A h:mm',\n\t        llll : 'YYYY년 MMMM D일 dddd A h:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '오늘 LT',\n\t        nextDay : '내일 LT',\n\t        nextWeek : 'dddd LT',\n\t        lastDay : '어제 LT',\n\t        lastWeek : '지난주 dddd LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s 후',\n\t        past : '%s 전',\n\t        s : '몇 초',\n\t        ss : '%d초',\n\t        m : '1분',\n\t        mm : '%d분',\n\t        h : '한 시간',\n\t        hh : '%d시간',\n\t        d : '하루',\n\t        dd : '%d일',\n\t        M : '한 달',\n\t        MM : '%d달',\n\t        y : '일 년',\n\t        yy : '%d년'\n\t    },\n\t    dayOfMonthOrdinalParse : /\\d{1,2}일/,\n\t    ordinal : '%d일',\n\t    meridiemParse : /오전|오후/,\n\t    isPM : function (token) {\n\t        return token === '오후';\n\t    },\n\t    meridiem : function (hour, minute, isUpper) {\n\t        return hour < 12 ? '오전' : '오후';\n\t    }\n\t});\n\n\treturn ko;\n\n\t})));\n\n\n/***/ },\n/* 85 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Kyrgyz [ky]\n\t//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\n\tvar suffixes = {\n\t    0: '-чү',\n\t    1: '-чи',\n\t    2: '-чи',\n\t    3: '-чү',\n\t    4: '-чү',\n\t    5: '-чи',\n\t    6: '-чы',\n\t    7: '-чи',\n\t    8: '-чи',\n\t    9: '-чу',\n\t    10: '-чу',\n\t    20: '-чы',\n\t    30: '-чу',\n\t    40: '-чы',\n\t    50: '-чү',\n\t    60: '-чы',\n\t    70: '-чи',\n\t    80: '-чи',\n\t    90: '-чу',\n\t    100: '-чү'\n\t};\n\n\tvar ky = moment.defineLocale('ky', {\n\t    months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n\t    monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n\t    weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n\t    weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n\t    weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Бүгүн саат] LT',\n\t        nextDay : '[Эртең саат] LT',\n\t        nextWeek : 'dddd [саат] LT',\n\t        lastDay : '[Кече саат] LT',\n\t        lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s ичинде',\n\t        past : '%s мурун',\n\t        s : 'бирнече секунд',\n\t        m : 'бир мүнөт',\n\t        mm : '%d мүнөт',\n\t        h : 'бир саат',\n\t        hh : '%d саат',\n\t        d : 'бир күн',\n\t        dd : '%d күн',\n\t        M : 'бир ай',\n\t        MM : '%d ай',\n\t        y : 'бир жыл',\n\t        yy : '%d жыл'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n\t    ordinal : function (number) {\n\t        var a = number % 10,\n\t            b = number >= 100 ? 100 : null;\n\t        return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn ky;\n\n\t})));\n\n\n/***/ },\n/* 86 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Luxembourgish [lb]\n\t//! author : mweimerskirch : https://github.com/mweimerskirch\n\t//! author : David Raison : https://github.com/kwisatz\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t    var format = {\n\t        'm': ['eng Minutt', 'enger Minutt'],\n\t        'h': ['eng Stonn', 'enger Stonn'],\n\t        'd': ['een Dag', 'engem Dag'],\n\t        'M': ['ee Mount', 'engem Mount'],\n\t        'y': ['ee Joer', 'engem Joer']\n\t    };\n\t    return withoutSuffix ? format[key][0] : format[key][1];\n\t}\n\tfunction processFutureTime(string) {\n\t    var number = string.substr(0, string.indexOf(' '));\n\t    if (eifelerRegelAppliesToNumber(number)) {\n\t        return 'a ' + string;\n\t    }\n\t    return 'an ' + string;\n\t}\n\tfunction processPastTime(string) {\n\t    var number = string.substr(0, string.indexOf(' '));\n\t    if (eifelerRegelAppliesToNumber(number)) {\n\t        return 'viru ' + string;\n\t    }\n\t    return 'virun ' + string;\n\t}\n\t/**\n\t * Returns true if the word before the given number loses the '-n' ending.\n\t * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n\t *\n\t * @param number {integer}\n\t * @returns {boolean}\n\t */\n\tfunction eifelerRegelAppliesToNumber(number) {\n\t    number = parseInt(number, 10);\n\t    if (isNaN(number)) {\n\t        return false;\n\t    }\n\t    if (number < 0) {\n\t        // Negative Number --> always true\n\t        return true;\n\t    } else if (number < 10) {\n\t        // Only 1 digit\n\t        if (4 <= number && number <= 7) {\n\t            return true;\n\t        }\n\t        return false;\n\t    } else if (number < 100) {\n\t        // 2 digits\n\t        var lastDigit = number % 10, firstDigit = number / 10;\n\t        if (lastDigit === 0) {\n\t            return eifelerRegelAppliesToNumber(firstDigit);\n\t        }\n\t        return eifelerRegelAppliesToNumber(lastDigit);\n\t    } else if (number < 10000) {\n\t        // 3 or 4 digits --> recursively check first digit\n\t        while (number >= 10) {\n\t            number = number / 10;\n\t        }\n\t        return eifelerRegelAppliesToNumber(number);\n\t    } else {\n\t        // Anything larger than 4 digits: recursively check first n-3 digits\n\t        number = number / 1000;\n\t        return eifelerRegelAppliesToNumber(number);\n\t    }\n\t}\n\n\tvar lb = moment.defineLocale('lb', {\n\t    months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n\t    monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n\t    weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n\t    weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat: {\n\t        LT: 'H:mm [Auer]',\n\t        LTS: 'H:mm:ss [Auer]',\n\t        L: 'DD.MM.YYYY',\n\t        LL: 'D. MMMM YYYY',\n\t        LLL: 'D. MMMM YYYY H:mm [Auer]',\n\t        LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n\t    },\n\t    calendar: {\n\t        sameDay: '[Haut um] LT',\n\t        sameElse: 'L',\n\t        nextDay: '[Muer um] LT',\n\t        nextWeek: 'dddd [um] LT',\n\t        lastDay: '[Gëschter um] LT',\n\t        lastWeek: function () {\n\t            // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n\t            switch (this.day()) {\n\t                case 2:\n\t                case 4:\n\t                    return '[Leschten] dddd [um] LT';\n\t                default:\n\t                    return '[Leschte] dddd [um] LT';\n\t            }\n\t        }\n\t    },\n\t    relativeTime : {\n\t        future : processFutureTime,\n\t        past : processPastTime,\n\t        s : 'e puer Sekonnen',\n\t        m : processRelativeTime,\n\t        mm : '%d Minutten',\n\t        h : processRelativeTime,\n\t        hh : '%d Stonnen',\n\t        d : processRelativeTime,\n\t        dd : '%d Deeg',\n\t        M : processRelativeTime,\n\t        MM : '%d Méint',\n\t        y : processRelativeTime,\n\t        yy : '%d Joer'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal: '%d.',\n\t    week: {\n\t        dow: 1, // Monday is the first day of the week.\n\t        doy: 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn lb;\n\n\t})));\n\n\n/***/ },\n/* 87 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Lao [lo]\n\t//! author : Ryan Hart : https://github.com/ryanhart2\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar lo = moment.defineLocale('lo', {\n\t    months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n\t    monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n\t    weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n\t    weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n\t    weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n\t    },\n\t    meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n\t    isPM: function (input) {\n\t        return input === 'ຕອນແລງ';\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 12) {\n\t            return 'ຕອນເຊົ້າ';\n\t        } else {\n\t            return 'ຕອນແລງ';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[ມື້ນີ້ເວລາ] LT',\n\t        nextDay : '[ມື້ອື່ນເວລາ] LT',\n\t        nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n\t        lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n\t        lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'ອີກ %s',\n\t        past : '%sຜ່ານມາ',\n\t        s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n\t        m : '1 ນາທີ',\n\t        mm : '%d ນາທີ',\n\t        h : '1 ຊົ່ວໂມງ',\n\t        hh : '%d ຊົ່ວໂມງ',\n\t        d : '1 ມື້',\n\t        dd : '%d ມື້',\n\t        M : '1 ເດືອນ',\n\t        MM : '%d ເດືອນ',\n\t        y : '1 ປີ',\n\t        yy : '%d ປີ'\n\t    },\n\t    dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n\t    ordinal : function (number) {\n\t        return 'ທີ່' + number;\n\t    }\n\t});\n\n\treturn lo;\n\n\t})));\n\n\n/***/ },\n/* 88 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Lithuanian [lt]\n\t//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar units = {\n\t    'm' : 'minutė_minutės_minutę',\n\t    'mm': 'minutės_minučių_minutes',\n\t    'h' : 'valanda_valandos_valandą',\n\t    'hh': 'valandos_valandų_valandas',\n\t    'd' : 'diena_dienos_dieną',\n\t    'dd': 'dienos_dienų_dienas',\n\t    'M' : 'mėnuo_mėnesio_mėnesį',\n\t    'MM': 'mėnesiai_mėnesių_mėnesius',\n\t    'y' : 'metai_metų_metus',\n\t    'yy': 'metai_metų_metus'\n\t};\n\tfunction translateSeconds(number, withoutSuffix, key, isFuture) {\n\t    if (withoutSuffix) {\n\t        return 'kelios sekundės';\n\t    } else {\n\t        return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n\t    }\n\t}\n\tfunction translateSingular(number, withoutSuffix, key, isFuture) {\n\t    return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n\t}\n\tfunction special(number) {\n\t    return number % 10 === 0 || (number > 10 && number < 20);\n\t}\n\tfunction forms(key) {\n\t    return units[key].split('_');\n\t}\n\tfunction translate(number, withoutSuffix, key, isFuture) {\n\t    var result = number + ' ';\n\t    if (number === 1) {\n\t        return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n\t    } else if (withoutSuffix) {\n\t        return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n\t    } else {\n\t        if (isFuture) {\n\t            return result + forms(key)[1];\n\t        } else {\n\t            return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n\t        }\n\t    }\n\t}\n\tvar lt = moment.defineLocale('lt', {\n\t    months : {\n\t        format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n\t        standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n\t        isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n\t    },\n\t    monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n\t    weekdays : {\n\t        format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n\t        standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n\t        isFormat: /dddd HH:mm/\n\t    },\n\t    weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n\t    weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'YYYY-MM-DD',\n\t        LL : 'YYYY [m.] MMMM D [d.]',\n\t        LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n\t        LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n\t        l : 'YYYY-MM-DD',\n\t        ll : 'YYYY [m.] MMMM D [d.]',\n\t        lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n\t        llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Šiandien] LT',\n\t        nextDay : '[Rytoj] LT',\n\t        nextWeek : 'dddd LT',\n\t        lastDay : '[Vakar] LT',\n\t        lastWeek : '[Praėjusį] dddd LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'po %s',\n\t        past : 'prieš %s',\n\t        s : translateSeconds,\n\t        m : translateSingular,\n\t        mm : translate,\n\t        h : translateSingular,\n\t        hh : translate,\n\t        d : translateSingular,\n\t        dd : translate,\n\t        M : translateSingular,\n\t        MM : translate,\n\t        y : translateSingular,\n\t        yy : translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n\t    ordinal : function (number) {\n\t        return number + '-oji';\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn lt;\n\n\t})));\n\n\n/***/ },\n/* 89 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Latvian [lv]\n\t//! author : Kristaps Karlsons : https://github.com/skakri\n\t//! author : Jānis Elmeris : https://github.com/JanisE\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar units = {\n\t    'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n\t    'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n\t    'h': 'stundas_stundām_stunda_stundas'.split('_'),\n\t    'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n\t    'd': 'dienas_dienām_diena_dienas'.split('_'),\n\t    'dd': 'dienas_dienām_diena_dienas'.split('_'),\n\t    'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n\t    'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n\t    'y': 'gada_gadiem_gads_gadi'.split('_'),\n\t    'yy': 'gada_gadiem_gads_gadi'.split('_')\n\t};\n\t/**\n\t * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n\t */\n\tfunction format(forms, number, withoutSuffix) {\n\t    if (withoutSuffix) {\n\t        // E.g. \"21 minūte\", \"3 minūtes\".\n\t        return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n\t    } else {\n\t        // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n\t        // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n\t        return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n\t    }\n\t}\n\tfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n\t    return number + ' ' + format(units[key], number, withoutSuffix);\n\t}\n\tfunction relativeTimeWithSingular(number, withoutSuffix, key) {\n\t    return format(units[key], number, withoutSuffix);\n\t}\n\tfunction relativeSeconds(number, withoutSuffix) {\n\t    return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n\t}\n\n\tvar lv = moment.defineLocale('lv', {\n\t    months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n\t    monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n\t    weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n\t    weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n\t    weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY.',\n\t        LL : 'YYYY. [gada] D. MMMM',\n\t        LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n\t        LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Šodien pulksten] LT',\n\t        nextDay : '[Rīt pulksten] LT',\n\t        nextWeek : 'dddd [pulksten] LT',\n\t        lastDay : '[Vakar pulksten] LT',\n\t        lastWeek : '[Pagājušā] dddd [pulksten] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'pēc %s',\n\t        past : 'pirms %s',\n\t        s : relativeSeconds,\n\t        m : relativeTimeWithSingular,\n\t        mm : relativeTimeWithPlural,\n\t        h : relativeTimeWithSingular,\n\t        hh : relativeTimeWithPlural,\n\t        d : relativeTimeWithSingular,\n\t        dd : relativeTimeWithPlural,\n\t        M : relativeTimeWithSingular,\n\t        MM : relativeTimeWithPlural,\n\t        y : relativeTimeWithSingular,\n\t        yy : relativeTimeWithPlural\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn lv;\n\n\t})));\n\n\n/***/ },\n/* 90 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Montenegrin [me]\n\t//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar translator = {\n\t    words: { //Different grammatical cases\n\t        m: ['jedan minut', 'jednog minuta'],\n\t        mm: ['minut', 'minuta', 'minuta'],\n\t        h: ['jedan sat', 'jednog sata'],\n\t        hh: ['sat', 'sata', 'sati'],\n\t        dd: ['dan', 'dana', 'dana'],\n\t        MM: ['mjesec', 'mjeseca', 'mjeseci'],\n\t        yy: ['godina', 'godine', 'godina']\n\t    },\n\t    correctGrammaticalCase: function (number, wordKey) {\n\t        return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n\t    },\n\t    translate: function (number, withoutSuffix, key) {\n\t        var wordKey = translator.words[key];\n\t        if (key.length === 1) {\n\t            return withoutSuffix ? wordKey[0] : wordKey[1];\n\t        } else {\n\t            return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n\t        }\n\t    }\n\t};\n\n\tvar me = moment.defineLocale('me', {\n\t    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n\t    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n\t    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n\t    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat: {\n\t        LT: 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L: 'DD.MM.YYYY',\n\t        LL: 'D. MMMM YYYY',\n\t        LLL: 'D. MMMM YYYY H:mm',\n\t        LLLL: 'dddd, D. MMMM YYYY H:mm'\n\t    },\n\t    calendar: {\n\t        sameDay: '[danas u] LT',\n\t        nextDay: '[sjutra u] LT',\n\n\t        nextWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[u] [nedjelju] [u] LT';\n\t                case 3:\n\t                    return '[u] [srijedu] [u] LT';\n\t                case 6:\n\t                    return '[u] [subotu] [u] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[u] dddd [u] LT';\n\t            }\n\t        },\n\t        lastDay  : '[juče u] LT',\n\t        lastWeek : function () {\n\t            var lastWeekDays = [\n\t                '[prošle] [nedjelje] [u] LT',\n\t                '[prošlog] [ponedjeljka] [u] LT',\n\t                '[prošlog] [utorka] [u] LT',\n\t                '[prošle] [srijede] [u] LT',\n\t                '[prošlog] [četvrtka] [u] LT',\n\t                '[prošlog] [petka] [u] LT',\n\t                '[prošle] [subote] [u] LT'\n\t            ];\n\t            return lastWeekDays[this.day()];\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'za %s',\n\t        past   : 'prije %s',\n\t        s      : 'nekoliko sekundi',\n\t        m      : translator.translate,\n\t        mm     : translator.translate,\n\t        h      : translator.translate,\n\t        hh     : translator.translate,\n\t        d      : 'dan',\n\t        dd     : translator.translate,\n\t        M      : 'mjesec',\n\t        MM     : translator.translate,\n\t        y      : 'godinu',\n\t        yy     : translator.translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn me;\n\n\t})));\n\n\n/***/ },\n/* 91 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Maori [mi]\n\t//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar mi = moment.defineLocale('mi', {\n\t    months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n\t    monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n\t    monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n\t    monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n\t    monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n\t    monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n\t    weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n\t    weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n\t    weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n\t    longDateFormat: {\n\t        LT: 'HH:mm',\n\t        LTS: 'HH:mm:ss',\n\t        L: 'DD/MM/YYYY',\n\t        LL: 'D MMMM YYYY',\n\t        LLL: 'D MMMM YYYY [i] HH:mm',\n\t        LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n\t    },\n\t    calendar: {\n\t        sameDay: '[i teie mahana, i] LT',\n\t        nextDay: '[apopo i] LT',\n\t        nextWeek: 'dddd [i] LT',\n\t        lastDay: '[inanahi i] LT',\n\t        lastWeek: 'dddd [whakamutunga i] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime: {\n\t        future: 'i roto i %s',\n\t        past: '%s i mua',\n\t        s: 'te hēkona ruarua',\n\t        m: 'he meneti',\n\t        mm: '%d meneti',\n\t        h: 'te haora',\n\t        hh: '%d haora',\n\t        d: 'he ra',\n\t        dd: '%d ra',\n\t        M: 'he marama',\n\t        MM: '%d marama',\n\t        y: 'he tau',\n\t        yy: '%d tau'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n\t    ordinal: '%dº',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn mi;\n\n\t})));\n\n\n/***/ },\n/* 92 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Macedonian [mk]\n\t//! author : Borislav Mickov : https://github.com/B0k0\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar mk = moment.defineLocale('mk', {\n\t    months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n\t    monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n\t    weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n\t    weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n\t    weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'D.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY H:mm',\n\t        LLLL : 'dddd, D MMMM YYYY H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Денес во] LT',\n\t        nextDay : '[Утре во] LT',\n\t        nextWeek : '[Во] dddd [во] LT',\n\t        lastDay : '[Вчера во] LT',\n\t        lastWeek : function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                case 3:\n\t                case 6:\n\t                    return '[Изминатата] dddd [во] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[Изминатиот] dddd [во] LT';\n\t            }\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'после %s',\n\t        past : 'пред %s',\n\t        s : 'неколку секунди',\n\t        m : 'минута',\n\t        mm : '%d минути',\n\t        h : 'час',\n\t        hh : '%d часа',\n\t        d : 'ден',\n\t        dd : '%d дена',\n\t        M : 'месец',\n\t        MM : '%d месеци',\n\t        y : 'година',\n\t        yy : '%d години'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n\t    ordinal : function (number) {\n\t        var lastDigit = number % 10,\n\t            last2Digits = number % 100;\n\t        if (number === 0) {\n\t            return number + '-ев';\n\t        } else if (last2Digits === 0) {\n\t            return number + '-ен';\n\t        } else if (last2Digits > 10 && last2Digits < 20) {\n\t            return number + '-ти';\n\t        } else if (lastDigit === 1) {\n\t            return number + '-ви';\n\t        } else if (lastDigit === 2) {\n\t            return number + '-ри';\n\t        } else if (lastDigit === 7 || lastDigit === 8) {\n\t            return number + '-ми';\n\t        } else {\n\t            return number + '-ти';\n\t        }\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn mk;\n\n\t})));\n\n\n/***/ },\n/* 93 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Malayalam [ml]\n\t//! author : Floyd Pink : https://github.com/floydpink\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar ml = moment.defineLocale('ml', {\n\t    months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n\t    monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n\t    weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n\t    weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'A h:mm -നു',\n\t        LTS : 'A h:mm:ss -നു',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY, A h:mm -നു',\n\t        LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n\t    },\n\t    calendar : {\n\t        sameDay : '[ഇന്ന്] LT',\n\t        nextDay : '[നാളെ] LT',\n\t        nextWeek : 'dddd, LT',\n\t        lastDay : '[ഇന്നലെ] LT',\n\t        lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s കഴിഞ്ഞ്',\n\t        past : '%s മുൻപ്',\n\t        s : 'അൽപ നിമിഷങ്ങൾ',\n\t        m : 'ഒരു മിനിറ്റ്',\n\t        mm : '%d മിനിറ്റ്',\n\t        h : 'ഒരു മണിക്കൂർ',\n\t        hh : '%d മണിക്കൂർ',\n\t        d : 'ഒരു ദിവസം',\n\t        dd : '%d ദിവസം',\n\t        M : 'ഒരു മാസം',\n\t        MM : '%d മാസം',\n\t        y : 'ഒരു വർഷം',\n\t        yy : '%d വർഷം'\n\t    },\n\t    meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if ((meridiem === 'രാത്രി' && hour >= 4) ||\n\t                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n\t                meridiem === 'വൈകുന്നേരം') {\n\t            return hour + 12;\n\t        } else {\n\t            return hour;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'രാത്രി';\n\t        } else if (hour < 12) {\n\t            return 'രാവിലെ';\n\t        } else if (hour < 17) {\n\t            return 'ഉച്ച കഴിഞ്ഞ്';\n\t        } else if (hour < 20) {\n\t            return 'വൈകുന്നേരം';\n\t        } else {\n\t            return 'രാത്രി';\n\t        }\n\t    }\n\t});\n\n\treturn ml;\n\n\t})));\n\n\n/***/ },\n/* 94 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Marathi [mr]\n\t//! author : Harshad Kale : https://github.com/kalehv\n\t//! author : Vivek Athalye : https://github.com/vnathalye\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '१',\n\t    '2': '२',\n\t    '3': '३',\n\t    '4': '४',\n\t    '5': '५',\n\t    '6': '६',\n\t    '7': '७',\n\t    '8': '८',\n\t    '9': '९',\n\t    '0': '०'\n\t};\n\tvar numberMap = {\n\t    '१': '1',\n\t    '२': '2',\n\t    '३': '3',\n\t    '४': '4',\n\t    '५': '5',\n\t    '६': '6',\n\t    '७': '7',\n\t    '८': '8',\n\t    '९': '9',\n\t    '०': '0'\n\t};\n\n\tfunction relativeTimeMr(number, withoutSuffix, string, isFuture)\n\t{\n\t    var output = '';\n\t    if (withoutSuffix) {\n\t        switch (string) {\n\t            case 's': output = 'काही सेकंद'; break;\n\t            case 'm': output = 'एक मिनिट'; break;\n\t            case 'mm': output = '%d मिनिटे'; break;\n\t            case 'h': output = 'एक तास'; break;\n\t            case 'hh': output = '%d तास'; break;\n\t            case 'd': output = 'एक दिवस'; break;\n\t            case 'dd': output = '%d दिवस'; break;\n\t            case 'M': output = 'एक महिना'; break;\n\t            case 'MM': output = '%d महिने'; break;\n\t            case 'y': output = 'एक वर्ष'; break;\n\t            case 'yy': output = '%d वर्षे'; break;\n\t        }\n\t    }\n\t    else {\n\t        switch (string) {\n\t            case 's': output = 'काही सेकंदां'; break;\n\t            case 'm': output = 'एका मिनिटा'; break;\n\t            case 'mm': output = '%d मिनिटां'; break;\n\t            case 'h': output = 'एका तासा'; break;\n\t            case 'hh': output = '%d तासां'; break;\n\t            case 'd': output = 'एका दिवसा'; break;\n\t            case 'dd': output = '%d दिवसां'; break;\n\t            case 'M': output = 'एका महिन्या'; break;\n\t            case 'MM': output = '%d महिन्यां'; break;\n\t            case 'y': output = 'एका वर्षा'; break;\n\t            case 'yy': output = '%d वर्षां'; break;\n\t        }\n\t    }\n\t    return output.replace(/%d/i, number);\n\t}\n\n\tvar mr = moment.defineLocale('mr', {\n\t    months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n\t    monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n\t    weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n\t    weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'A h:mm वाजता',\n\t        LTS : 'A h:mm:ss वाजता',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY, A h:mm वाजता',\n\t        LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n\t    },\n\t    calendar : {\n\t        sameDay : '[आज] LT',\n\t        nextDay : '[उद्या] LT',\n\t        nextWeek : 'dddd, LT',\n\t        lastDay : '[काल] LT',\n\t        lastWeek: '[मागील] dddd, LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future: '%sमध्ये',\n\t        past: '%sपूर्वी',\n\t        s: relativeTimeMr,\n\t        m: relativeTimeMr,\n\t        mm: relativeTimeMr,\n\t        h: relativeTimeMr,\n\t        hh: relativeTimeMr,\n\t        d: relativeTimeMr,\n\t        dd: relativeTimeMr,\n\t        M: relativeTimeMr,\n\t        MM: relativeTimeMr,\n\t        y: relativeTimeMr,\n\t        yy: relativeTimeMr\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[१२३४५६७८९०]/g, function (match) {\n\t            return numberMap[match];\n\t        });\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        });\n\t    },\n\t    meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'रात्री') {\n\t            return hour < 4 ? hour : hour + 12;\n\t        } else if (meridiem === 'सकाळी') {\n\t            return hour;\n\t        } else if (meridiem === 'दुपारी') {\n\t            return hour >= 10 ? hour : hour + 12;\n\t        } else if (meridiem === 'सायंकाळी') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem: function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'रात्री';\n\t        } else if (hour < 10) {\n\t            return 'सकाळी';\n\t        } else if (hour < 17) {\n\t            return 'दुपारी';\n\t        } else if (hour < 20) {\n\t            return 'सायंकाळी';\n\t        } else {\n\t            return 'रात्री';\n\t        }\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn mr;\n\n\t})));\n\n\n/***/ },\n/* 95 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Malay [ms-my]\n\t//! note : DEPRECATED, the correct one is [ms]\n\t//! author : Weldan Jamili : https://github.com/weldan\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar msMy = moment.defineLocale('ms-my', {\n\t    months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n\t    weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n\t    weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n\t    weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH.mm',\n\t        LTS : 'HH.mm.ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY [pukul] HH.mm',\n\t        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n\t    },\n\t    meridiemParse: /pagi|tengahari|petang|malam/,\n\t    meridiemHour: function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'pagi') {\n\t            return hour;\n\t        } else if (meridiem === 'tengahari') {\n\t            return hour >= 11 ? hour : hour + 12;\n\t        } else if (meridiem === 'petang' || meridiem === 'malam') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours < 11) {\n\t            return 'pagi';\n\t        } else if (hours < 15) {\n\t            return 'tengahari';\n\t        } else if (hours < 19) {\n\t            return 'petang';\n\t        } else {\n\t            return 'malam';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[Hari ini pukul] LT',\n\t        nextDay : '[Esok pukul] LT',\n\t        nextWeek : 'dddd [pukul] LT',\n\t        lastDay : '[Kelmarin pukul] LT',\n\t        lastWeek : 'dddd [lepas pukul] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'dalam %s',\n\t        past : '%s yang lepas',\n\t        s : 'beberapa saat',\n\t        m : 'seminit',\n\t        mm : '%d minit',\n\t        h : 'sejam',\n\t        hh : '%d jam',\n\t        d : 'sehari',\n\t        dd : '%d hari',\n\t        M : 'sebulan',\n\t        MM : '%d bulan',\n\t        y : 'setahun',\n\t        yy : '%d tahun'\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn msMy;\n\n\t})));\n\n\n/***/ },\n/* 96 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Malay [ms]\n\t//! author : Weldan Jamili : https://github.com/weldan\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar ms = moment.defineLocale('ms', {\n\t    months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n\t    weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n\t    weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n\t    weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH.mm',\n\t        LTS : 'HH.mm.ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY [pukul] HH.mm',\n\t        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n\t    },\n\t    meridiemParse: /pagi|tengahari|petang|malam/,\n\t    meridiemHour: function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'pagi') {\n\t            return hour;\n\t        } else if (meridiem === 'tengahari') {\n\t            return hour >= 11 ? hour : hour + 12;\n\t        } else if (meridiem === 'petang' || meridiem === 'malam') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours < 11) {\n\t            return 'pagi';\n\t        } else if (hours < 15) {\n\t            return 'tengahari';\n\t        } else if (hours < 19) {\n\t            return 'petang';\n\t        } else {\n\t            return 'malam';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[Hari ini pukul] LT',\n\t        nextDay : '[Esok pukul] LT',\n\t        nextWeek : 'dddd [pukul] LT',\n\t        lastDay : '[Kelmarin pukul] LT',\n\t        lastWeek : 'dddd [lepas pukul] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'dalam %s',\n\t        past : '%s yang lepas',\n\t        s : 'beberapa saat',\n\t        m : 'seminit',\n\t        mm : '%d minit',\n\t        h : 'sejam',\n\t        hh : '%d jam',\n\t        d : 'sehari',\n\t        dd : '%d hari',\n\t        M : 'sebulan',\n\t        MM : '%d bulan',\n\t        y : 'setahun',\n\t        yy : '%d tahun'\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn ms;\n\n\t})));\n\n\n/***/ },\n/* 97 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Burmese [my]\n\t//! author : Squar team, mysquar.com\n\t//! author : David Rossellat : https://github.com/gholadr\n\t//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '၁',\n\t    '2': '၂',\n\t    '3': '၃',\n\t    '4': '၄',\n\t    '5': '၅',\n\t    '6': '၆',\n\t    '7': '၇',\n\t    '8': '၈',\n\t    '9': '၉',\n\t    '0': '၀'\n\t};\n\tvar numberMap = {\n\t    '၁': '1',\n\t    '၂': '2',\n\t    '၃': '3',\n\t    '၄': '4',\n\t    '၅': '5',\n\t    '၆': '6',\n\t    '၇': '7',\n\t    '၈': '8',\n\t    '၉': '9',\n\t    '၀': '0'\n\t};\n\n\tvar my = moment.defineLocale('my', {\n\t    months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n\t    monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n\t    weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n\t    weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\t    weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n\t    longDateFormat: {\n\t        LT: 'HH:mm',\n\t        LTS: 'HH:mm:ss',\n\t        L: 'DD/MM/YYYY',\n\t        LL: 'D MMMM YYYY',\n\t        LLL: 'D MMMM YYYY HH:mm',\n\t        LLLL: 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar: {\n\t        sameDay: '[ယနေ.] LT [မှာ]',\n\t        nextDay: '[မနက်ဖြန်] LT [မှာ]',\n\t        nextWeek: 'dddd LT [မှာ]',\n\t        lastDay: '[မနေ.က] LT [မှာ]',\n\t        lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime: {\n\t        future: 'လာမည့် %s မှာ',\n\t        past: 'လွန်ခဲ့သော %s က',\n\t        s: 'စက္ကန်.အနည်းငယ်',\n\t        m: 'တစ်မိနစ်',\n\t        mm: '%d မိနစ်',\n\t        h: 'တစ်နာရီ',\n\t        hh: '%d နာရီ',\n\t        d: 'တစ်ရက်',\n\t        dd: '%d ရက်',\n\t        M: 'တစ်လ',\n\t        MM: '%d လ',\n\t        y: 'တစ်နှစ်',\n\t        yy: '%d နှစ်'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n\t            return numberMap[match];\n\t        });\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        });\n\t    },\n\t    week: {\n\t        dow: 1, // Monday is the first day of the week.\n\t        doy: 4 // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn my;\n\n\t})));\n\n\n/***/ },\n/* 98 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Norwegian Bokmål [nb]\n\t//! authors : Espen Hovlandsdal : https://github.com/rexxars\n\t//!           Sigurd Gartmann : https://github.com/sigurdga\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar nb = moment.defineLocale('nb', {\n\t    months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n\t    monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n\t    weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n\t    weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY [kl.] HH:mm',\n\t        LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[i dag kl.] LT',\n\t        nextDay: '[i morgen kl.] LT',\n\t        nextWeek: 'dddd [kl.] LT',\n\t        lastDay: '[i går kl.] LT',\n\t        lastWeek: '[forrige] dddd [kl.] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'om %s',\n\t        past : '%s siden',\n\t        s : 'noen sekunder',\n\t        m : 'ett minutt',\n\t        mm : '%d minutter',\n\t        h : 'en time',\n\t        hh : '%d timer',\n\t        d : 'en dag',\n\t        dd : '%d dager',\n\t        M : 'en måned',\n\t        MM : '%d måneder',\n\t        y : 'ett år',\n\t        yy : '%d år'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn nb;\n\n\t})));\n\n\n/***/ },\n/* 99 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Nepalese [ne]\n\t//! author : suvash : https://github.com/suvash\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '१',\n\t    '2': '२',\n\t    '3': '३',\n\t    '4': '४',\n\t    '5': '५',\n\t    '6': '६',\n\t    '7': '७',\n\t    '8': '८',\n\t    '9': '९',\n\t    '0': '०'\n\t};\n\tvar numberMap = {\n\t    '१': '1',\n\t    '२': '2',\n\t    '३': '3',\n\t    '४': '4',\n\t    '५': '5',\n\t    '६': '6',\n\t    '७': '7',\n\t    '८': '8',\n\t    '९': '9',\n\t    '०': '0'\n\t};\n\n\tvar ne = moment.defineLocale('ne', {\n\t    months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n\t    monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n\t    weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n\t    weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'Aको h:mm बजे',\n\t        LTS : 'Aको h:mm:ss बजे',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY, Aको h:mm बजे',\n\t        LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[१२३४५६७८९०]/g, function (match) {\n\t            return numberMap[match];\n\t        });\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        });\n\t    },\n\t    meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'राति') {\n\t            return hour < 4 ? hour : hour + 12;\n\t        } else if (meridiem === 'बिहान') {\n\t            return hour;\n\t        } else if (meridiem === 'दिउँसो') {\n\t            return hour >= 10 ? hour : hour + 12;\n\t        } else if (meridiem === 'साँझ') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 3) {\n\t            return 'राति';\n\t        } else if (hour < 12) {\n\t            return 'बिहान';\n\t        } else if (hour < 16) {\n\t            return 'दिउँसो';\n\t        } else if (hour < 20) {\n\t            return 'साँझ';\n\t        } else {\n\t            return 'राति';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[आज] LT',\n\t        nextDay : '[भोलि] LT',\n\t        nextWeek : '[आउँदो] dddd[,] LT',\n\t        lastDay : '[हिजो] LT',\n\t        lastWeek : '[गएको] dddd[,] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%sमा',\n\t        past : '%s अगाडि',\n\t        s : 'केही क्षण',\n\t        m : 'एक मिनेट',\n\t        mm : '%d मिनेट',\n\t        h : 'एक घण्टा',\n\t        hh : '%d घण्टा',\n\t        d : 'एक दिन',\n\t        dd : '%d दिन',\n\t        M : 'एक महिना',\n\t        MM : '%d महिना',\n\t        y : 'एक बर्ष',\n\t        yy : '%d बर्ष'\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn ne;\n\n\t})));\n\n\n/***/ },\n/* 100 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Dutch (Belgium) [nl-be]\n\t//! author : Joris Röling : https://github.com/jorisroling\n\t//! author : Jacob Middag : https://github.com/middagj\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');\n\tvar monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n\tvar monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n\tvar monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n\tvar nlBe = moment.defineLocale('nl-be', {\n\t    months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n\t    monthsShort : function (m, format) {\n\t        if (!m) {\n\t            return monthsShortWithDots;\n\t        } else if (/-MMM-/.test(format)) {\n\t            return monthsShortWithoutDots[m.month()];\n\t        } else {\n\t            return monthsShortWithDots[m.month()];\n\t        }\n\t    },\n\n\t    monthsRegex: monthsRegex,\n\t    monthsShortRegex: monthsRegex,\n\t    monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n\t    monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n\t    monthsParse : monthsParse,\n\t    longMonthsParse : monthsParse,\n\t    shortMonthsParse : monthsParse,\n\n\t    weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n\t    weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n\t    weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[vandaag om] LT',\n\t        nextDay: '[morgen om] LT',\n\t        nextWeek: 'dddd [om] LT',\n\t        lastDay: '[gisteren om] LT',\n\t        lastWeek: '[afgelopen] dddd [om] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'over %s',\n\t        past : '%s geleden',\n\t        s : 'een paar seconden',\n\t        m : 'één minuut',\n\t        mm : '%d minuten',\n\t        h : 'één uur',\n\t        hh : '%d uur',\n\t        d : 'één dag',\n\t        dd : '%d dagen',\n\t        M : 'één maand',\n\t        MM : '%d maanden',\n\t        y : 'één jaar',\n\t        yy : '%d jaar'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n\t    ordinal : function (number) {\n\t        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn nlBe;\n\n\t})));\n\n\n/***/ },\n/* 101 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Dutch [nl]\n\t//! author : Joris Röling : https://github.com/jorisroling\n\t//! author : Jacob Middag : https://github.com/middagj\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');\n\tvar monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n\tvar monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n\tvar monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n\tvar nl = moment.defineLocale('nl', {\n\t    months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n\t    monthsShort : function (m, format) {\n\t        if (!m) {\n\t            return monthsShortWithDots;\n\t        } else if (/-MMM-/.test(format)) {\n\t            return monthsShortWithoutDots[m.month()];\n\t        } else {\n\t            return monthsShortWithDots[m.month()];\n\t        }\n\t    },\n\n\t    monthsRegex: monthsRegex,\n\t    monthsShortRegex: monthsRegex,\n\t    monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n\t    monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n\t    monthsParse : monthsParse,\n\t    longMonthsParse : monthsParse,\n\t    shortMonthsParse : monthsParse,\n\n\t    weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n\t    weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n\t    weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD-MM-YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[vandaag om] LT',\n\t        nextDay: '[morgen om] LT',\n\t        nextWeek: 'dddd [om] LT',\n\t        lastDay: '[gisteren om] LT',\n\t        lastWeek: '[afgelopen] dddd [om] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'over %s',\n\t        past : '%s geleden',\n\t        s : 'een paar seconden',\n\t        m : 'één minuut',\n\t        mm : '%d minuten',\n\t        h : 'één uur',\n\t        hh : '%d uur',\n\t        d : 'één dag',\n\t        dd : '%d dagen',\n\t        M : 'één maand',\n\t        MM : '%d maanden',\n\t        y : 'één jaar',\n\t        yy : '%d jaar'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n\t    ordinal : function (number) {\n\t        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn nl;\n\n\t})));\n\n\n/***/ },\n/* 102 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Nynorsk [nn]\n\t//! author : https://github.com/mechuwind\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar nn = moment.defineLocale('nn', {\n\t    months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n\t    monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n\t    weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n\t    weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n\t    weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY [kl.] H:mm',\n\t        LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[I dag klokka] LT',\n\t        nextDay: '[I morgon klokka] LT',\n\t        nextWeek: 'dddd [klokka] LT',\n\t        lastDay: '[I går klokka] LT',\n\t        lastWeek: '[Føregåande] dddd [klokka] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'om %s',\n\t        past : '%s sidan',\n\t        s : 'nokre sekund',\n\t        m : 'eit minutt',\n\t        mm : '%d minutt',\n\t        h : 'ein time',\n\t        hh : '%d timar',\n\t        d : 'ein dag',\n\t        dd : '%d dagar',\n\t        M : 'ein månad',\n\t        MM : '%d månader',\n\t        y : 'eit år',\n\t        yy : '%d år'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn nn;\n\n\t})));\n\n\n/***/ },\n/* 103 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Punjabi (India) [pa-in]\n\t//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '੧',\n\t    '2': '੨',\n\t    '3': '੩',\n\t    '4': '੪',\n\t    '5': '੫',\n\t    '6': '੬',\n\t    '7': '੭',\n\t    '8': '੮',\n\t    '9': '੯',\n\t    '0': '੦'\n\t};\n\tvar numberMap = {\n\t    '੧': '1',\n\t    '੨': '2',\n\t    '੩': '3',\n\t    '੪': '4',\n\t    '੫': '5',\n\t    '੬': '6',\n\t    '੭': '7',\n\t    '੮': '8',\n\t    '੯': '9',\n\t    '੦': '0'\n\t};\n\n\tvar paIn = moment.defineLocale('pa-in', {\n\t    // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.\n\t    months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n\t    monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n\t    weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n\t    weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n\t    weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'A h:mm ਵਜੇ',\n\t        LTS : 'A h:mm:ss ਵਜੇ',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n\t        LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n\t    },\n\t    calendar : {\n\t        sameDay : '[ਅਜ] LT',\n\t        nextDay : '[ਕਲ] LT',\n\t        nextWeek : 'dddd, LT',\n\t        lastDay : '[ਕਲ] LT',\n\t        lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s ਵਿੱਚ',\n\t        past : '%s ਪਿਛਲੇ',\n\t        s : 'ਕੁਝ ਸਕਿੰਟ',\n\t        m : 'ਇਕ ਮਿੰਟ',\n\t        mm : '%d ਮਿੰਟ',\n\t        h : 'ਇੱਕ ਘੰਟਾ',\n\t        hh : '%d ਘੰਟੇ',\n\t        d : 'ਇੱਕ ਦਿਨ',\n\t        dd : '%d ਦਿਨ',\n\t        M : 'ਇੱਕ ਮਹੀਨਾ',\n\t        MM : '%d ਮਹੀਨੇ',\n\t        y : 'ਇੱਕ ਸਾਲ',\n\t        yy : '%d ਸਾਲ'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n\t            return numberMap[match];\n\t        });\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        });\n\t    },\n\t    // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n\t    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n\t    meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'ਰਾਤ') {\n\t            return hour < 4 ? hour : hour + 12;\n\t        } else if (meridiem === 'ਸਵੇਰ') {\n\t            return hour;\n\t        } else if (meridiem === 'ਦੁਪਹਿਰ') {\n\t            return hour >= 10 ? hour : hour + 12;\n\t        } else if (meridiem === 'ਸ਼ਾਮ') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'ਰਾਤ';\n\t        } else if (hour < 10) {\n\t            return 'ਸਵੇਰ';\n\t        } else if (hour < 17) {\n\t            return 'ਦੁਪਹਿਰ';\n\t        } else if (hour < 20) {\n\t            return 'ਸ਼ਾਮ';\n\t        } else {\n\t            return 'ਰਾਤ';\n\t        }\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn paIn;\n\n\t})));\n\n\n/***/ },\n/* 104 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Polish [pl]\n\t//! author : Rafal Hirsz : https://github.com/evoL\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_');\n\tvar monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n\tfunction plural(n) {\n\t    return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n\t}\n\tfunction translate(number, withoutSuffix, key) {\n\t    var result = number + ' ';\n\t    switch (key) {\n\t        case 'm':\n\t            return withoutSuffix ? 'minuta' : 'minutę';\n\t        case 'mm':\n\t            return result + (plural(number) ? 'minuty' : 'minut');\n\t        case 'h':\n\t            return withoutSuffix  ? 'godzina'  : 'godzinę';\n\t        case 'hh':\n\t            return result + (plural(number) ? 'godziny' : 'godzin');\n\t        case 'MM':\n\t            return result + (plural(number) ? 'miesiące' : 'miesięcy');\n\t        case 'yy':\n\t            return result + (plural(number) ? 'lata' : 'lat');\n\t    }\n\t}\n\n\tvar pl = moment.defineLocale('pl', {\n\t    months : function (momentToFormat, format) {\n\t        if (!momentToFormat) {\n\t            return monthsNominative;\n\t        } else if (format === '') {\n\t            // Hack: if format empty we know this is used to generate\n\t            // RegExp by moment. Give then back both valid forms of months\n\t            // in RegExp ready format.\n\t            return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n\t        } else if (/D MMMM/.test(format)) {\n\t            return monthsSubjective[momentToFormat.month()];\n\t        } else {\n\t            return monthsNominative[momentToFormat.month()];\n\t        }\n\t    },\n\t    monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n\t    weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n\t    weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n\t    weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Dziś o] LT',\n\t        nextDay: '[Jutro o] LT',\n\t        nextWeek: '[W] dddd [o] LT',\n\t        lastDay: '[Wczoraj o] LT',\n\t        lastWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[W zeszłą niedzielę o] LT';\n\t                case 3:\n\t                    return '[W zeszłą środę o] LT';\n\t                case 6:\n\t                    return '[W zeszłą sobotę o] LT';\n\t                default:\n\t                    return '[W zeszły] dddd [o] LT';\n\t            }\n\t        },\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'za %s',\n\t        past : '%s temu',\n\t        s : 'kilka sekund',\n\t        m : translate,\n\t        mm : translate,\n\t        h : translate,\n\t        hh : translate,\n\t        d : '1 dzień',\n\t        dd : '%d dni',\n\t        M : 'miesiąc',\n\t        MM : translate,\n\t        y : 'rok',\n\t        yy : translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn pl;\n\n\t})));\n\n\n/***/ },\n/* 105 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Portuguese (Brazil) [pt-br]\n\t//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar ptBr = moment.defineLocale('pt-br', {\n\t    months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n\t    monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n\t    weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n\t    weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n\t    weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D [de] MMMM [de] YYYY',\n\t        LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n\t        LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Hoje às] LT',\n\t        nextDay: '[Amanhã às] LT',\n\t        nextWeek: 'dddd [às] LT',\n\t        lastDay: '[Ontem às] LT',\n\t        lastWeek: function () {\n\t            return (this.day() === 0 || this.day() === 6) ?\n\t                '[Último] dddd [às] LT' : // Saturday + Sunday\n\t                '[Última] dddd [às] LT'; // Monday - Friday\n\t        },\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'em %s',\n\t        past : '%s atrás',\n\t        s : 'poucos segundos',\n\t        m : 'um minuto',\n\t        mm : '%d minutos',\n\t        h : 'uma hora',\n\t        hh : '%d horas',\n\t        d : 'um dia',\n\t        dd : '%d dias',\n\t        M : 'um mês',\n\t        MM : '%d meses',\n\t        y : 'um ano',\n\t        yy : '%d anos'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n\t    ordinal : '%dº'\n\t});\n\n\treturn ptBr;\n\n\t})));\n\n\n/***/ },\n/* 106 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Portuguese [pt]\n\t//! author : Jefferson : https://github.com/jalex79\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar pt = moment.defineLocale('pt', {\n\t    months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n\t    monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n\t    weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),\n\t    weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n\t    weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D [de] MMMM [de] YYYY',\n\t        LLL : 'D [de] MMMM [de] YYYY HH:mm',\n\t        LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Hoje às] LT',\n\t        nextDay: '[Amanhã às] LT',\n\t        nextWeek: 'dddd [às] LT',\n\t        lastDay: '[Ontem às] LT',\n\t        lastWeek: function () {\n\t            return (this.day() === 0 || this.day() === 6) ?\n\t                '[Último] dddd [às] LT' : // Saturday + Sunday\n\t                '[Última] dddd [às] LT'; // Monday - Friday\n\t        },\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'em %s',\n\t        past : 'há %s',\n\t        s : 'segundos',\n\t        m : 'um minuto',\n\t        mm : '%d minutos',\n\t        h : 'uma hora',\n\t        hh : '%d horas',\n\t        d : 'um dia',\n\t        dd : '%d dias',\n\t        M : 'um mês',\n\t        MM : '%d meses',\n\t        y : 'um ano',\n\t        yy : '%d anos'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n\t    ordinal : '%dº',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn pt;\n\n\t})));\n\n\n/***/ },\n/* 107 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Romanian [ro]\n\t//! author : Vlad Gurdiga : https://github.com/gurdiga\n\t//! author : Valentin Agachi : https://github.com/avaly\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n\t    var format = {\n\t            'mm': 'minute',\n\t            'hh': 'ore',\n\t            'dd': 'zile',\n\t            'MM': 'luni',\n\t            'yy': 'ani'\n\t        },\n\t        separator = ' ';\n\t    if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n\t        separator = ' de ';\n\t    }\n\t    return number + separator + format[key];\n\t}\n\n\tvar ro = moment.defineLocale('ro', {\n\t    months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n\t    monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n\t    monthsParseExact: true,\n\t    weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n\t    weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n\t    weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY H:mm',\n\t        LLLL : 'dddd, D MMMM YYYY H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[azi la] LT',\n\t        nextDay: '[mâine la] LT',\n\t        nextWeek: 'dddd [la] LT',\n\t        lastDay: '[ieri la] LT',\n\t        lastWeek: '[fosta] dddd [la] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'peste %s',\n\t        past : '%s în urmă',\n\t        s : 'câteva secunde',\n\t        m : 'un minut',\n\t        mm : relativeTimeWithPlural,\n\t        h : 'o oră',\n\t        hh : relativeTimeWithPlural,\n\t        d : 'o zi',\n\t        dd : relativeTimeWithPlural,\n\t        M : 'o lună',\n\t        MM : relativeTimeWithPlural,\n\t        y : 'un an',\n\t        yy : relativeTimeWithPlural\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn ro;\n\n\t})));\n\n\n/***/ },\n/* 108 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Russian [ru]\n\t//! author : Viktorminator : https://github.com/Viktorminator\n\t//! Author : Menelion Elensúle : https://github.com/Oire\n\t//! author : Коренберг Марк : https://github.com/socketpair\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction plural(word, num) {\n\t    var forms = word.split('_');\n\t    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n\t}\n\tfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n\t    var format = {\n\t        'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n\t        'hh': 'час_часа_часов',\n\t        'dd': 'день_дня_дней',\n\t        'MM': 'месяц_месяца_месяцев',\n\t        'yy': 'год_года_лет'\n\t    };\n\t    if (key === 'm') {\n\t        return withoutSuffix ? 'минута' : 'минуту';\n\t    }\n\t    else {\n\t        return number + ' ' + plural(format[key], +number);\n\t    }\n\t}\n\tvar monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n\t// http://new.gramota.ru/spravka/rules/139-prop : § 103\n\t// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n\t// CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n\tvar ru = moment.defineLocale('ru', {\n\t    months : {\n\t        format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n\t        standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n\t    },\n\t    monthsShort : {\n\t        // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n\t        format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n\t        standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n\t    },\n\t    weekdays : {\n\t        standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n\t        format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n\t        isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n\t    },\n\t    weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n\t    weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n\t    monthsParse : monthsParse,\n\t    longMonthsParse : monthsParse,\n\t    shortMonthsParse : monthsParse,\n\n\t    // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n\t    monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n\t    // копия предыдущего\n\t    monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n\t    // полные названия с падежами\n\t    monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n\t    // Выражение, которое соотвествует только сокращённым формам\n\t    monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY г.',\n\t        LLL : 'D MMMM YYYY г., HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Сегодня в] LT',\n\t        nextDay: '[Завтра в] LT',\n\t        lastDay: '[Вчера в] LT',\n\t        nextWeek: function (now) {\n\t            if (now.week() !== this.week()) {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[В следующее] dddd [в] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                        return '[В следующий] dddd [в] LT';\n\t                    case 3:\n\t                    case 5:\n\t                    case 6:\n\t                        return '[В следующую] dddd [в] LT';\n\t                }\n\t            } else {\n\t                if (this.day() === 2) {\n\t                    return '[Во] dddd [в] LT';\n\t                } else {\n\t                    return '[В] dddd [в] LT';\n\t                }\n\t            }\n\t        },\n\t        lastWeek: function (now) {\n\t            if (now.week() !== this.week()) {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[В прошлое] dddd [в] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                        return '[В прошлый] dddd [в] LT';\n\t                    case 3:\n\t                    case 5:\n\t                    case 6:\n\t                        return '[В прошлую] dddd [в] LT';\n\t                }\n\t            } else {\n\t                if (this.day() === 2) {\n\t                    return '[Во] dddd [в] LT';\n\t                } else {\n\t                    return '[В] dddd [в] LT';\n\t                }\n\t            }\n\t        },\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'через %s',\n\t        past : '%s назад',\n\t        s : 'несколько секунд',\n\t        m : relativeTimeWithPlural,\n\t        mm : relativeTimeWithPlural,\n\t        h : 'час',\n\t        hh : relativeTimeWithPlural,\n\t        d : 'день',\n\t        dd : relativeTimeWithPlural,\n\t        M : 'месяц',\n\t        MM : relativeTimeWithPlural,\n\t        y : 'год',\n\t        yy : relativeTimeWithPlural\n\t    },\n\t    meridiemParse: /ночи|утра|дня|вечера/i,\n\t    isPM : function (input) {\n\t        return /^(дня|вечера)$/.test(input);\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'ночи';\n\t        } else if (hour < 12) {\n\t            return 'утра';\n\t        } else if (hour < 17) {\n\t            return 'дня';\n\t        } else {\n\t            return 'вечера';\n\t        }\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n\t    ordinal: function (number, period) {\n\t        switch (period) {\n\t            case 'M':\n\t            case 'd':\n\t            case 'DDD':\n\t                return number + '-й';\n\t            case 'D':\n\t                return number + '-го';\n\t            case 'w':\n\t            case 'W':\n\t                return number + '-я';\n\t            default:\n\t                return number;\n\t        }\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn ru;\n\n\t})));\n\n\n/***/ },\n/* 109 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Sindhi [sd]\n\t//! author : Narain Sagar : https://github.com/narainsagar\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar months = [\n\t    'جنوري',\n\t    'فيبروري',\n\t    'مارچ',\n\t    'اپريل',\n\t    'مئي',\n\t    'جون',\n\t    'جولاءِ',\n\t    'آگسٽ',\n\t    'سيپٽمبر',\n\t    'آڪٽوبر',\n\t    'نومبر',\n\t    'ڊسمبر'\n\t];\n\tvar days = [\n\t    'آچر',\n\t    'سومر',\n\t    'اڱارو',\n\t    'اربع',\n\t    'خميس',\n\t    'جمع',\n\t    'ڇنڇر'\n\t];\n\n\tvar sd = moment.defineLocale('sd', {\n\t    months : months,\n\t    monthsShort : months,\n\t    weekdays : days,\n\t    weekdaysShort : days,\n\t    weekdaysMin : days,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd، D MMMM YYYY HH:mm'\n\t    },\n\t    meridiemParse: /صبح|شام/,\n\t    isPM : function (input) {\n\t        return 'شام' === input;\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 12) {\n\t            return 'صبح';\n\t        }\n\t        return 'شام';\n\t    },\n\t    calendar : {\n\t        sameDay : '[اڄ] LT',\n\t        nextDay : '[سڀاڻي] LT',\n\t        nextWeek : 'dddd [اڳين هفتي تي] LT',\n\t        lastDay : '[ڪالهه] LT',\n\t        lastWeek : '[گزريل هفتي] dddd [تي] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s پوء',\n\t        past : '%s اڳ',\n\t        s : 'چند سيڪنڊ',\n\t        m : 'هڪ منٽ',\n\t        mm : '%d منٽ',\n\t        h : 'هڪ ڪلاڪ',\n\t        hh : '%d ڪلاڪ',\n\t        d : 'هڪ ڏينهن',\n\t        dd : '%d ڏينهن',\n\t        M : 'هڪ مهينو',\n\t        MM : '%d مهينا',\n\t        y : 'هڪ سال',\n\t        yy : '%d سال'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/،/g, ',');\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/,/g, '،');\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn sd;\n\n\t})));\n\n\n/***/ },\n/* 110 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Northern Sami [se]\n\t//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\n\tvar se = moment.defineLocale('se', {\n\t    months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n\t    monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n\t    weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n\t    weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n\t    weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'MMMM D. [b.] YYYY',\n\t        LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n\t        LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[otne ti] LT',\n\t        nextDay: '[ihttin ti] LT',\n\t        nextWeek: 'dddd [ti] LT',\n\t        lastDay: '[ikte ti] LT',\n\t        lastWeek: '[ovddit] dddd [ti] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s geažes',\n\t        past : 'maŋit %s',\n\t        s : 'moadde sekunddat',\n\t        m : 'okta minuhta',\n\t        mm : '%d minuhtat',\n\t        h : 'okta diimmu',\n\t        hh : '%d diimmut',\n\t        d : 'okta beaivi',\n\t        dd : '%d beaivvit',\n\t        M : 'okta mánnu',\n\t        MM : '%d mánut',\n\t        y : 'okta jahki',\n\t        yy : '%d jagit'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn se;\n\n\t})));\n\n\n/***/ },\n/* 111 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Sinhalese [si]\n\t//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\t/*jshint -W100*/\n\tvar si = moment.defineLocale('si', {\n\t    months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n\t    monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n\t    weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n\t    weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n\t    weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'a h:mm',\n\t        LTS : 'a h:mm:ss',\n\t        L : 'YYYY/MM/DD',\n\t        LL : 'YYYY MMMM D',\n\t        LLL : 'YYYY MMMM D, a h:mm',\n\t        LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n\t    },\n\t    calendar : {\n\t        sameDay : '[අද] LT[ට]',\n\t        nextDay : '[හෙට] LT[ට]',\n\t        nextWeek : 'dddd LT[ට]',\n\t        lastDay : '[ඊයේ] LT[ට]',\n\t        lastWeek : '[පසුගිය] dddd LT[ට]',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%sකින්',\n\t        past : '%sකට පෙර',\n\t        s : 'තත්පර කිහිපය',\n\t        m : 'මිනිත්තුව',\n\t        mm : 'මිනිත්තු %d',\n\t        h : 'පැය',\n\t        hh : 'පැය %d',\n\t        d : 'දිනය',\n\t        dd : 'දින %d',\n\t        M : 'මාසය',\n\t        MM : 'මාස %d',\n\t        y : 'වසර',\n\t        yy : 'වසර %d'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n\t    ordinal : function (number) {\n\t        return number + ' වැනි';\n\t    },\n\t    meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n\t    isPM : function (input) {\n\t        return input === 'ප.ව.' || input === 'පස් වරු';\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours > 11) {\n\t            return isLower ? 'ප.ව.' : 'පස් වරු';\n\t        } else {\n\t            return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n\t        }\n\t    }\n\t});\n\n\treturn si;\n\n\t})));\n\n\n/***/ },\n/* 112 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Slovak [sk]\n\t//! author : Martin Minka : https://github.com/k2s\n\t//! based on work of petrbela : https://github.com/petrbela\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_');\n\tvar monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n\tfunction plural(n) {\n\t    return (n > 1) && (n < 5);\n\t}\n\tfunction translate(number, withoutSuffix, key, isFuture) {\n\t    var result = number + ' ';\n\t    switch (key) {\n\t        case 's':  // a few seconds / in a few seconds / a few seconds ago\n\t            return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n\t        case 'm':  // a minute / in a minute / a minute ago\n\t            return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n\t        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n\t            if (withoutSuffix || isFuture) {\n\t                return result + (plural(number) ? 'minúty' : 'minút');\n\t            } else {\n\t                return result + 'minútami';\n\t            }\n\t            break;\n\t        case 'h':  // an hour / in an hour / an hour ago\n\t            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n\t        case 'hh': // 9 hours / in 9 hours / 9 hours ago\n\t            if (withoutSuffix || isFuture) {\n\t                return result + (plural(number) ? 'hodiny' : 'hodín');\n\t            } else {\n\t                return result + 'hodinami';\n\t            }\n\t            break;\n\t        case 'd':  // a day / in a day / a day ago\n\t            return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n\t        case 'dd': // 9 days / in 9 days / 9 days ago\n\t            if (withoutSuffix || isFuture) {\n\t                return result + (plural(number) ? 'dni' : 'dní');\n\t            } else {\n\t                return result + 'dňami';\n\t            }\n\t            break;\n\t        case 'M':  // a month / in a month / a month ago\n\t            return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n\t        case 'MM': // 9 months / in 9 months / 9 months ago\n\t            if (withoutSuffix || isFuture) {\n\t                return result + (plural(number) ? 'mesiace' : 'mesiacov');\n\t            } else {\n\t                return result + 'mesiacmi';\n\t            }\n\t            break;\n\t        case 'y':  // a year / in a year / a year ago\n\t            return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n\t        case 'yy': // 9 years / in 9 years / 9 years ago\n\t            if (withoutSuffix || isFuture) {\n\t                return result + (plural(number) ? 'roky' : 'rokov');\n\t            } else {\n\t                return result + 'rokmi';\n\t            }\n\t            break;\n\t    }\n\t}\n\n\tvar sk = moment.defineLocale('sk', {\n\t    months : months,\n\t    monthsShort : monthsShort,\n\t    weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n\t    weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n\t    weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n\t    longDateFormat : {\n\t        LT: 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY H:mm',\n\t        LLLL : 'dddd D. MMMM YYYY H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[dnes o] LT',\n\t        nextDay: '[zajtra o] LT',\n\t        nextWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[v nedeľu o] LT';\n\t                case 1:\n\t                case 2:\n\t                    return '[v] dddd [o] LT';\n\t                case 3:\n\t                    return '[v stredu o] LT';\n\t                case 4:\n\t                    return '[vo štvrtok o] LT';\n\t                case 5:\n\t                    return '[v piatok o] LT';\n\t                case 6:\n\t                    return '[v sobotu o] LT';\n\t            }\n\t        },\n\t        lastDay: '[včera o] LT',\n\t        lastWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[minulú nedeľu o] LT';\n\t                case 1:\n\t                case 2:\n\t                    return '[minulý] dddd [o] LT';\n\t                case 3:\n\t                    return '[minulú stredu o] LT';\n\t                case 4:\n\t                case 5:\n\t                    return '[minulý] dddd [o] LT';\n\t                case 6:\n\t                    return '[minulú sobotu o] LT';\n\t            }\n\t        },\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'za %s',\n\t        past : 'pred %s',\n\t        s : translate,\n\t        m : translate,\n\t        mm : translate,\n\t        h : translate,\n\t        hh : translate,\n\t        d : translate,\n\t        dd : translate,\n\t        M : translate,\n\t        MM : translate,\n\t        y : translate,\n\t        yy : translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn sk;\n\n\t})));\n\n\n/***/ },\n/* 113 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Slovenian [sl]\n\t//! author : Robert Sedovšek : https://github.com/sedovsek\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t    var result = number + ' ';\n\t    switch (key) {\n\t        case 's':\n\t            return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n\t        case 'm':\n\t            return withoutSuffix ? 'ena minuta' : 'eno minuto';\n\t        case 'mm':\n\t            if (number === 1) {\n\t                result += withoutSuffix ? 'minuta' : 'minuto';\n\t            } else if (number === 2) {\n\t                result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n\t            } else if (number < 5) {\n\t                result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n\t            } else {\n\t                result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n\t            }\n\t            return result;\n\t        case 'h':\n\t            return withoutSuffix ? 'ena ura' : 'eno uro';\n\t        case 'hh':\n\t            if (number === 1) {\n\t                result += withoutSuffix ? 'ura' : 'uro';\n\t            } else if (number === 2) {\n\t                result += withoutSuffix || isFuture ? 'uri' : 'urama';\n\t            } else if (number < 5) {\n\t                result += withoutSuffix || isFuture ? 'ure' : 'urami';\n\t            } else {\n\t                result += withoutSuffix || isFuture ? 'ur' : 'urami';\n\t            }\n\t            return result;\n\t        case 'd':\n\t            return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n\t        case 'dd':\n\t            if (number === 1) {\n\t                result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n\t            } else if (number === 2) {\n\t                result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n\t            } else {\n\t                result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n\t            }\n\t            return result;\n\t        case 'M':\n\t            return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n\t        case 'MM':\n\t            if (number === 1) {\n\t                result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n\t            } else if (number === 2) {\n\t                result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n\t            } else if (number < 5) {\n\t                result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n\t            } else {\n\t                result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n\t            }\n\t            return result;\n\t        case 'y':\n\t            return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n\t        case 'yy':\n\t            if (number === 1) {\n\t                result += withoutSuffix || isFuture ? 'leto' : 'letom';\n\t            } else if (number === 2) {\n\t                result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n\t            } else if (number < 5) {\n\t                result += withoutSuffix || isFuture ? 'leta' : 'leti';\n\t            } else {\n\t                result += withoutSuffix || isFuture ? 'let' : 'leti';\n\t            }\n\t            return result;\n\t    }\n\t}\n\n\tvar sl = moment.defineLocale('sl', {\n\t    months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n\t    monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n\t    monthsParseExact: true,\n\t    weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n\t    weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n\t    weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM YYYY',\n\t        LLL : 'D. MMMM YYYY H:mm',\n\t        LLLL : 'dddd, D. MMMM YYYY H:mm'\n\t    },\n\t    calendar : {\n\t        sameDay  : '[danes ob] LT',\n\t        nextDay  : '[jutri ob] LT',\n\n\t        nextWeek : function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[v] [nedeljo] [ob] LT';\n\t                case 3:\n\t                    return '[v] [sredo] [ob] LT';\n\t                case 6:\n\t                    return '[v] [soboto] [ob] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[v] dddd [ob] LT';\n\t            }\n\t        },\n\t        lastDay  : '[včeraj ob] LT',\n\t        lastWeek : function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[prejšnjo] [nedeljo] [ob] LT';\n\t                case 3:\n\t                    return '[prejšnjo] [sredo] [ob] LT';\n\t                case 6:\n\t                    return '[prejšnjo] [soboto] [ob] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[prejšnji] dddd [ob] LT';\n\t            }\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'čez %s',\n\t        past   : 'pred %s',\n\t        s      : processRelativeTime,\n\t        m      : processRelativeTime,\n\t        mm     : processRelativeTime,\n\t        h      : processRelativeTime,\n\t        hh     : processRelativeTime,\n\t        d      : processRelativeTime,\n\t        dd     : processRelativeTime,\n\t        M      : processRelativeTime,\n\t        MM     : processRelativeTime,\n\t        y      : processRelativeTime,\n\t        yy     : processRelativeTime\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn sl;\n\n\t})));\n\n\n/***/ },\n/* 114 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Albanian [sq]\n\t//! author : Flakërim Ismani : https://github.com/flakerimi\n\t//! author : Menelion Elensúle : https://github.com/Oire\n\t//! author : Oerd Cukalla : https://github.com/oerd\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar sq = moment.defineLocale('sq', {\n\t    months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n\t    monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n\t    weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n\t    weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n\t    weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n\t    weekdaysParseExact : true,\n\t    meridiemParse: /PD|MD/,\n\t    isPM: function (input) {\n\t        return input.charAt(0) === 'M';\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        return hours < 12 ? 'PD' : 'MD';\n\t    },\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Sot në] LT',\n\t        nextDay : '[Nesër në] LT',\n\t        nextWeek : 'dddd [në] LT',\n\t        lastDay : '[Dje në] LT',\n\t        lastWeek : 'dddd [e kaluar në] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'në %s',\n\t        past : '%s më parë',\n\t        s : 'disa sekonda',\n\t        m : 'një minutë',\n\t        mm : '%d minuta',\n\t        h : 'një orë',\n\t        hh : '%d orë',\n\t        d : 'një ditë',\n\t        dd : '%d ditë',\n\t        M : 'një muaj',\n\t        MM : '%d muaj',\n\t        y : 'një vit',\n\t        yy : '%d vite'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn sq;\n\n\t})));\n\n\n/***/ },\n/* 115 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Serbian Cyrillic [sr-cyrl]\n\t//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar translator = {\n\t    words: { //Different grammatical cases\n\t        m: ['један минут', 'једне минуте'],\n\t        mm: ['минут', 'минуте', 'минута'],\n\t        h: ['један сат', 'једног сата'],\n\t        hh: ['сат', 'сата', 'сати'],\n\t        dd: ['дан', 'дана', 'дана'],\n\t        MM: ['месец', 'месеца', 'месеци'],\n\t        yy: ['година', 'године', 'година']\n\t    },\n\t    correctGrammaticalCase: function (number, wordKey) {\n\t        return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n\t    },\n\t    translate: function (number, withoutSuffix, key) {\n\t        var wordKey = translator.words[key];\n\t        if (key.length === 1) {\n\t            return withoutSuffix ? wordKey[0] : wordKey[1];\n\t        } else {\n\t            return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n\t        }\n\t    }\n\t};\n\n\tvar srCyrl = moment.defineLocale('sr-cyrl', {\n\t    months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n\t    monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n\t    monthsParseExact: true,\n\t    weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n\t    weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n\t    weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat: {\n\t        LT: 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L: 'DD.MM.YYYY',\n\t        LL: 'D. MMMM YYYY',\n\t        LLL: 'D. MMMM YYYY H:mm',\n\t        LLLL: 'dddd, D. MMMM YYYY H:mm'\n\t    },\n\t    calendar: {\n\t        sameDay: '[данас у] LT',\n\t        nextDay: '[сутра у] LT',\n\t        nextWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[у] [недељу] [у] LT';\n\t                case 3:\n\t                    return '[у] [среду] [у] LT';\n\t                case 6:\n\t                    return '[у] [суботу] [у] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[у] dddd [у] LT';\n\t            }\n\t        },\n\t        lastDay  : '[јуче у] LT',\n\t        lastWeek : function () {\n\t            var lastWeekDays = [\n\t                '[прошле] [недеље] [у] LT',\n\t                '[прошлог] [понедељка] [у] LT',\n\t                '[прошлог] [уторка] [у] LT',\n\t                '[прошле] [среде] [у] LT',\n\t                '[прошлог] [четвртка] [у] LT',\n\t                '[прошлог] [петка] [у] LT',\n\t                '[прошле] [суботе] [у] LT'\n\t            ];\n\t            return lastWeekDays[this.day()];\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'за %s',\n\t        past   : 'пре %s',\n\t        s      : 'неколико секунди',\n\t        m      : translator.translate,\n\t        mm     : translator.translate,\n\t        h      : translator.translate,\n\t        hh     : translator.translate,\n\t        d      : 'дан',\n\t        dd     : translator.translate,\n\t        M      : 'месец',\n\t        MM     : translator.translate,\n\t        y      : 'годину',\n\t        yy     : translator.translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn srCyrl;\n\n\t})));\n\n\n/***/ },\n/* 116 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Serbian [sr]\n\t//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar translator = {\n\t    words: { //Different grammatical cases\n\t        m: ['jedan minut', 'jedne minute'],\n\t        mm: ['minut', 'minute', 'minuta'],\n\t        h: ['jedan sat', 'jednog sata'],\n\t        hh: ['sat', 'sata', 'sati'],\n\t        dd: ['dan', 'dana', 'dana'],\n\t        MM: ['mesec', 'meseca', 'meseci'],\n\t        yy: ['godina', 'godine', 'godina']\n\t    },\n\t    correctGrammaticalCase: function (number, wordKey) {\n\t        return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n\t    },\n\t    translate: function (number, withoutSuffix, key) {\n\t        var wordKey = translator.words[key];\n\t        if (key.length === 1) {\n\t            return withoutSuffix ? wordKey[0] : wordKey[1];\n\t        } else {\n\t            return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n\t        }\n\t    }\n\t};\n\n\tvar sr = moment.defineLocale('sr', {\n\t    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n\t    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n\t    monthsParseExact: true,\n\t    weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n\t    weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n\t    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat: {\n\t        LT: 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L: 'DD.MM.YYYY',\n\t        LL: 'D. MMMM YYYY',\n\t        LLL: 'D. MMMM YYYY H:mm',\n\t        LLLL: 'dddd, D. MMMM YYYY H:mm'\n\t    },\n\t    calendar: {\n\t        sameDay: '[danas u] LT',\n\t        nextDay: '[sutra u] LT',\n\t        nextWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                    return '[u] [nedelju] [u] LT';\n\t                case 3:\n\t                    return '[u] [sredu] [u] LT';\n\t                case 6:\n\t                    return '[u] [subotu] [u] LT';\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                case 5:\n\t                    return '[u] dddd [u] LT';\n\t            }\n\t        },\n\t        lastDay  : '[juče u] LT',\n\t        lastWeek : function () {\n\t            var lastWeekDays = [\n\t                '[prošle] [nedelje] [u] LT',\n\t                '[prošlog] [ponedeljka] [u] LT',\n\t                '[prošlog] [utorka] [u] LT',\n\t                '[prošle] [srede] [u] LT',\n\t                '[prošlog] [četvrtka] [u] LT',\n\t                '[prošlog] [petka] [u] LT',\n\t                '[prošle] [subote] [u] LT'\n\t            ];\n\t            return lastWeekDays[this.day()];\n\t        },\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'za %s',\n\t        past   : 'pre %s',\n\t        s      : 'nekoliko sekundi',\n\t        m      : translator.translate,\n\t        mm     : translator.translate,\n\t        h      : translator.translate,\n\t        hh     : translator.translate,\n\t        d      : 'dan',\n\t        dd     : translator.translate,\n\t        M      : 'mesec',\n\t        MM     : translator.translate,\n\t        y      : 'godinu',\n\t        yy     : translator.translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn sr;\n\n\t})));\n\n\n/***/ },\n/* 117 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : siSwati [ss]\n\t//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\n\tvar ss = moment.defineLocale('ss', {\n\t    months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n\t    monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n\t    weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n\t    weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n\t    weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'h:mm A',\n\t        LTS : 'h:mm:ss A',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY h:mm A',\n\t        LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Namuhla nga] LT',\n\t        nextDay : '[Kusasa nga] LT',\n\t        nextWeek : 'dddd [nga] LT',\n\t        lastDay : '[Itolo nga] LT',\n\t        lastWeek : 'dddd [leliphelile] [nga] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'nga %s',\n\t        past : 'wenteka nga %s',\n\t        s : 'emizuzwana lomcane',\n\t        m : 'umzuzu',\n\t        mm : '%d emizuzu',\n\t        h : 'lihora',\n\t        hh : '%d emahora',\n\t        d : 'lilanga',\n\t        dd : '%d emalanga',\n\t        M : 'inyanga',\n\t        MM : '%d tinyanga',\n\t        y : 'umnyaka',\n\t        yy : '%d iminyaka'\n\t    },\n\t    meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours < 11) {\n\t            return 'ekuseni';\n\t        } else if (hours < 15) {\n\t            return 'emini';\n\t        } else if (hours < 19) {\n\t            return 'entsambama';\n\t        } else {\n\t            return 'ebusuku';\n\t        }\n\t    },\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'ekuseni') {\n\t            return hour;\n\t        } else if (meridiem === 'emini') {\n\t            return hour >= 11 ? hour : hour + 12;\n\t        } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n\t            if (hour === 0) {\n\t                return 0;\n\t            }\n\t            return hour + 12;\n\t        }\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}/,\n\t    ordinal : '%d',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn ss;\n\n\t})));\n\n\n/***/ },\n/* 118 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Swedish [sv]\n\t//! author : Jens Alm : https://github.com/ulmus\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar sv = moment.defineLocale('sv', {\n\t    months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n\t    monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n\t    weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n\t    weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n\t    weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'YYYY-MM-DD',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY [kl.] HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n\t        lll : 'D MMM YYYY HH:mm',\n\t        llll : 'ddd D MMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Idag] LT',\n\t        nextDay: '[Imorgon] LT',\n\t        lastDay: '[Igår] LT',\n\t        nextWeek: '[På] dddd LT',\n\t        lastWeek: '[I] dddd[s] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'om %s',\n\t        past : 'för %s sedan',\n\t        s : 'några sekunder',\n\t        m : 'en minut',\n\t        mm : '%d minuter',\n\t        h : 'en timme',\n\t        hh : '%d timmar',\n\t        d : 'en dag',\n\t        dd : '%d dagar',\n\t        M : 'en månad',\n\t        MM : '%d månader',\n\t        y : 'ett år',\n\t        yy : '%d år'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n\t    ordinal : function (number) {\n\t        var b = number % 10,\n\t            output = (~~(number % 100 / 10) === 1) ? 'e' :\n\t            (b === 1) ? 'a' :\n\t            (b === 2) ? 'a' :\n\t            (b === 3) ? 'e' : 'e';\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn sv;\n\n\t})));\n\n\n/***/ },\n/* 119 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Swahili [sw]\n\t//! author : Fahad Kassim : https://github.com/fadsel\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar sw = moment.defineLocale('sw', {\n\t    months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n\t    monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n\t    weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n\t    weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n\t    weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[leo saa] LT',\n\t        nextDay : '[kesho saa] LT',\n\t        nextWeek : '[wiki ijayo] dddd [saat] LT',\n\t        lastDay : '[jana] LT',\n\t        lastWeek : '[wiki iliyopita] dddd [saat] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s baadaye',\n\t        past : 'tokea %s',\n\t        s : 'hivi punde',\n\t        m : 'dakika moja',\n\t        mm : 'dakika %d',\n\t        h : 'saa limoja',\n\t        hh : 'masaa %d',\n\t        d : 'siku moja',\n\t        dd : 'masiku %d',\n\t        M : 'mwezi mmoja',\n\t        MM : 'miezi %d',\n\t        y : 'mwaka mmoja',\n\t        yy : 'miaka %d'\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn sw;\n\n\t})));\n\n\n/***/ },\n/* 120 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Tamil [ta]\n\t//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar symbolMap = {\n\t    '1': '௧',\n\t    '2': '௨',\n\t    '3': '௩',\n\t    '4': '௪',\n\t    '5': '௫',\n\t    '6': '௬',\n\t    '7': '௭',\n\t    '8': '௮',\n\t    '9': '௯',\n\t    '0': '௦'\n\t};\n\tvar numberMap = {\n\t    '௧': '1',\n\t    '௨': '2',\n\t    '௩': '3',\n\t    '௪': '4',\n\t    '௫': '5',\n\t    '௬': '6',\n\t    '௭': '7',\n\t    '௮': '8',\n\t    '௯': '9',\n\t    '௦': '0'\n\t};\n\n\tvar ta = moment.defineLocale('ta', {\n\t    months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n\t    monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n\t    weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n\t    weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n\t    weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY, HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY, HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[இன்று] LT',\n\t        nextDay : '[நாளை] LT',\n\t        nextWeek : 'dddd, LT',\n\t        lastDay : '[நேற்று] LT',\n\t        lastWeek : '[கடந்த வாரம்] dddd, LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s இல்',\n\t        past : '%s முன்',\n\t        s : 'ஒரு சில விநாடிகள்',\n\t        m : 'ஒரு நிமிடம்',\n\t        mm : '%d நிமிடங்கள்',\n\t        h : 'ஒரு மணி நேரம்',\n\t        hh : '%d மணி நேரம்',\n\t        d : 'ஒரு நாள்',\n\t        dd : '%d நாட்கள்',\n\t        M : 'ஒரு மாதம்',\n\t        MM : '%d மாதங்கள்',\n\t        y : 'ஒரு வருடம்',\n\t        yy : '%d ஆண்டுகள்'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n\t    ordinal : function (number) {\n\t        return number + 'வது';\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n\t            return numberMap[match];\n\t        });\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/\\d/g, function (match) {\n\t            return symbolMap[match];\n\t        });\n\t    },\n\t    // refer http://ta.wikipedia.org/s/1er1\n\t    meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 2) {\n\t            return ' யாமம்';\n\t        } else if (hour < 6) {\n\t            return ' வைகறை';  // வைகறை\n\t        } else if (hour < 10) {\n\t            return ' காலை'; // காலை\n\t        } else if (hour < 14) {\n\t            return ' நண்பகல்'; // நண்பகல்\n\t        } else if (hour < 18) {\n\t            return ' எற்பாடு'; // எற்பாடு\n\t        } else if (hour < 22) {\n\t            return ' மாலை'; // மாலை\n\t        } else {\n\t            return ' யாமம்';\n\t        }\n\t    },\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'யாமம்') {\n\t            return hour < 2 ? hour : hour + 12;\n\t        } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n\t            return hour;\n\t        } else if (meridiem === 'நண்பகல்') {\n\t            return hour >= 10 ? hour : hour + 12;\n\t        } else {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn ta;\n\n\t})));\n\n\n/***/ },\n/* 121 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Telugu [te]\n\t//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar te = moment.defineLocale('te', {\n\t    months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n\t    monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n\t    weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n\t    weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'A h:mm',\n\t        LTS : 'A h:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY, A h:mm',\n\t        LLLL : 'dddd, D MMMM YYYY, A h:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[నేడు] LT',\n\t        nextDay : '[రేపు] LT',\n\t        nextWeek : 'dddd, LT',\n\t        lastDay : '[నిన్న] LT',\n\t        lastWeek : '[గత] dddd, LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s లో',\n\t        past : '%s క్రితం',\n\t        s : 'కొన్ని క్షణాలు',\n\t        m : 'ఒక నిమిషం',\n\t        mm : '%d నిమిషాలు',\n\t        h : 'ఒక గంట',\n\t        hh : '%d గంటలు',\n\t        d : 'ఒక రోజు',\n\t        dd : '%d రోజులు',\n\t        M : 'ఒక నెల',\n\t        MM : '%d నెలలు',\n\t        y : 'ఒక సంవత్సరం',\n\t        yy : '%d సంవత్సరాలు'\n\t    },\n\t    dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n\t    ordinal : '%dవ',\n\t    meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === 'రాత్రి') {\n\t            return hour < 4 ? hour : hour + 12;\n\t        } else if (meridiem === 'ఉదయం') {\n\t            return hour;\n\t        } else if (meridiem === 'మధ్యాహ్నం') {\n\t            return hour >= 10 ? hour : hour + 12;\n\t        } else if (meridiem === 'సాయంత్రం') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'రాత్రి';\n\t        } else if (hour < 10) {\n\t            return 'ఉదయం';\n\t        } else if (hour < 17) {\n\t            return 'మధ్యాహ్నం';\n\t        } else if (hour < 20) {\n\t            return 'సాయంత్రం';\n\t        } else {\n\t            return 'రాత్రి';\n\t        }\n\t    },\n\t    week : {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn te;\n\n\t})));\n\n\n/***/ },\n/* 122 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Tetun Dili (East Timor) [tet]\n\t//! author : Joshua Brooks : https://github.com/joshbrooks\n\t//! author : Onorio De J. Afonso : https://github.com/marobo\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar tet = moment.defineLocale('tet', {\n\t    months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n\t    monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'),\n\t    weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'),\n\t    weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'),\n\t    weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Ohin iha] LT',\n\t        nextDay: '[Aban iha] LT',\n\t        nextWeek: 'dddd [iha] LT',\n\t        lastDay: '[Horiseik iha] LT',\n\t        lastWeek: 'dddd [semana kotuk] [iha] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'iha %s',\n\t        past : '%s liuba',\n\t        s : 'minutu balun',\n\t        m : 'minutu ida',\n\t        mm : 'minutus %d',\n\t        h : 'horas ida',\n\t        hh : 'horas %d',\n\t        d : 'loron ida',\n\t        dd : 'loron %d',\n\t        M : 'fulan ida',\n\t        MM : 'fulan %d',\n\t        y : 'tinan ida',\n\t        yy : 'tinan %d'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t    ordinal : function (number) {\n\t        var b = number % 10,\n\t            output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t            (b === 1) ? 'st' :\n\t            (b === 2) ? 'nd' :\n\t            (b === 3) ? 'rd' : 'th';\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn tet;\n\n\t})));\n\n\n/***/ },\n/* 123 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Thai [th]\n\t//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar th = moment.defineLocale('th', {\n\t    months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n\t    monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n\t    monthsParseExact: true,\n\t    weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n\t    weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n\t    weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'H:mm',\n\t        LTS : 'H:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY เวลา H:mm',\n\t        LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n\t    },\n\t    meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n\t    isPM: function (input) {\n\t        return input === 'หลังเที่ยง';\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 12) {\n\t            return 'ก่อนเที่ยง';\n\t        } else {\n\t            return 'หลังเที่ยง';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[วันนี้ เวลา] LT',\n\t        nextDay : '[พรุ่งนี้ เวลา] LT',\n\t        nextWeek : 'dddd[หน้า เวลา] LT',\n\t        lastDay : '[เมื่อวานนี้ เวลา] LT',\n\t        lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'อีก %s',\n\t        past : '%sที่แล้ว',\n\t        s : 'ไม่กี่วินาที',\n\t        m : '1 นาที',\n\t        mm : '%d นาที',\n\t        h : '1 ชั่วโมง',\n\t        hh : '%d ชั่วโมง',\n\t        d : '1 วัน',\n\t        dd : '%d วัน',\n\t        M : '1 เดือน',\n\t        MM : '%d เดือน',\n\t        y : '1 ปี',\n\t        yy : '%d ปี'\n\t    }\n\t});\n\n\treturn th;\n\n\t})));\n\n\n/***/ },\n/* 124 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Tagalog (Philippines) [tl-ph]\n\t//! author : Dan Hagman : https://github.com/hagmandan\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar tlPh = moment.defineLocale('tl-ph', {\n\t    months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n\t    monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n\t    weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n\t    weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n\t    weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'MM/D/YYYY',\n\t        LL : 'MMMM D, YYYY',\n\t        LLL : 'MMMM D, YYYY HH:mm',\n\t        LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: 'LT [ngayong araw]',\n\t        nextDay: '[Bukas ng] LT',\n\t        nextWeek: 'LT [sa susunod na] dddd',\n\t        lastDay: 'LT [kahapon]',\n\t        lastWeek: 'LT [noong nakaraang] dddd',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'sa loob ng %s',\n\t        past : '%s ang nakalipas',\n\t        s : 'ilang segundo',\n\t        m : 'isang minuto',\n\t        mm : '%d minuto',\n\t        h : 'isang oras',\n\t        hh : '%d oras',\n\t        d : 'isang araw',\n\t        dd : '%d araw',\n\t        M : 'isang buwan',\n\t        MM : '%d buwan',\n\t        y : 'isang taon',\n\t        yy : '%d taon'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}/,\n\t    ordinal : function (number) {\n\t        return number;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn tlPh;\n\n\t})));\n\n\n/***/ },\n/* 125 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Klingon [tlh]\n\t//! author : Dominika Kruk : https://github.com/amaranthrose\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n\tfunction translateFuture(output) {\n\t    var time = output;\n\t    time = (output.indexOf('jaj') !== -1) ?\n\t    time.slice(0, -3) + 'leS' :\n\t    (output.indexOf('jar') !== -1) ?\n\t    time.slice(0, -3) + 'waQ' :\n\t    (output.indexOf('DIS') !== -1) ?\n\t    time.slice(0, -3) + 'nem' :\n\t    time + ' pIq';\n\t    return time;\n\t}\n\n\tfunction translatePast(output) {\n\t    var time = output;\n\t    time = (output.indexOf('jaj') !== -1) ?\n\t    time.slice(0, -3) + 'Hu’' :\n\t    (output.indexOf('jar') !== -1) ?\n\t    time.slice(0, -3) + 'wen' :\n\t    (output.indexOf('DIS') !== -1) ?\n\t    time.slice(0, -3) + 'ben' :\n\t    time + ' ret';\n\t    return time;\n\t}\n\n\tfunction translate(number, withoutSuffix, string, isFuture) {\n\t    var numberNoun = numberAsNoun(number);\n\t    switch (string) {\n\t        case 'mm':\n\t            return numberNoun + ' tup';\n\t        case 'hh':\n\t            return numberNoun + ' rep';\n\t        case 'dd':\n\t            return numberNoun + ' jaj';\n\t        case 'MM':\n\t            return numberNoun + ' jar';\n\t        case 'yy':\n\t            return numberNoun + ' DIS';\n\t    }\n\t}\n\n\tfunction numberAsNoun(number) {\n\t    var hundred = Math.floor((number % 1000) / 100),\n\t    ten = Math.floor((number % 100) / 10),\n\t    one = number % 10,\n\t    word = '';\n\t    if (hundred > 0) {\n\t        word += numbersNouns[hundred] + 'vatlh';\n\t    }\n\t    if (ten > 0) {\n\t        word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n\t    }\n\t    if (one > 0) {\n\t        word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n\t    }\n\t    return (word === '') ? 'pagh' : word;\n\t}\n\n\tvar tlh = moment.defineLocale('tlh', {\n\t    months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n\t    monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n\t    weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n\t    weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[DaHjaj] LT',\n\t        nextDay: '[wa’leS] LT',\n\t        nextWeek: 'LLL',\n\t        lastDay: '[wa’Hu’] LT',\n\t        lastWeek: 'LLL',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : translateFuture,\n\t        past : translatePast,\n\t        s : 'puS lup',\n\t        m : 'wa’ tup',\n\t        mm : translate,\n\t        h : 'wa’ rep',\n\t        hh : translate,\n\t        d : 'wa’ jaj',\n\t        dd : translate,\n\t        M : 'wa’ jar',\n\t        MM : translate,\n\t        y : 'wa’ DIS',\n\t        yy : translate\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn tlh;\n\n\t})));\n\n\n/***/ },\n/* 126 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Turkish [tr]\n\t//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n\t//!           Burak Yiğit Kaya: https://github.com/BYK\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar suffixes = {\n\t    1: '\\'inci',\n\t    5: '\\'inci',\n\t    8: '\\'inci',\n\t    70: '\\'inci',\n\t    80: '\\'inci',\n\t    2: '\\'nci',\n\t    7: '\\'nci',\n\t    20: '\\'nci',\n\t    50: '\\'nci',\n\t    3: '\\'üncü',\n\t    4: '\\'üncü',\n\t    100: '\\'üncü',\n\t    6: '\\'ncı',\n\t    9: '\\'uncu',\n\t    10: '\\'uncu',\n\t    30: '\\'uncu',\n\t    60: '\\'ıncı',\n\t    90: '\\'ıncı'\n\t};\n\n\tvar tr = moment.defineLocale('tr', {\n\t    months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n\t    monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n\t    weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n\t    weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n\t    weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[bugün saat] LT',\n\t        nextDay : '[yarın saat] LT',\n\t        nextWeek : '[haftaya] dddd [saat] LT',\n\t        lastDay : '[dün] LT',\n\t        lastWeek : '[geçen hafta] dddd [saat] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s sonra',\n\t        past : '%s önce',\n\t        s : 'birkaç saniye',\n\t        m : 'bir dakika',\n\t        mm : '%d dakika',\n\t        h : 'bir saat',\n\t        hh : '%d saat',\n\t        d : 'bir gün',\n\t        dd : '%d gün',\n\t        M : 'bir ay',\n\t        MM : '%d ay',\n\t        y : 'bir yıl',\n\t        yy : '%d yıl'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,\n\t    ordinal : function (number) {\n\t        if (number === 0) {  // special case for zero\n\t            return number + '\\'ıncı';\n\t        }\n\t        var a = number % 10,\n\t            b = number % 100 - a,\n\t            c = number >= 100 ? 100 : null;\n\t        return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn tr;\n\n\t})));\n\n\n/***/ },\n/* 127 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Talossan [tzl]\n\t//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\t//! author : Iustì Canun\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\t// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n\t// This is currently too difficult (maybe even impossible) to add.\n\tvar tzl = moment.defineLocale('tzl', {\n\t    months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n\t    monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n\t    weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n\t    weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n\t    weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH.mm',\n\t        LTS : 'HH.mm.ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D. MMMM [dallas] YYYY',\n\t        LLL : 'D. MMMM [dallas] YYYY HH.mm',\n\t        LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n\t    },\n\t    meridiemParse: /d\\'o|d\\'a/i,\n\t    isPM : function (input) {\n\t        return 'd\\'o' === input.toLowerCase();\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours > 11) {\n\t            return isLower ? 'd\\'o' : 'D\\'O';\n\t        } else {\n\t            return isLower ? 'd\\'a' : 'D\\'A';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[oxhi à] LT',\n\t        nextDay : '[demà à] LT',\n\t        nextWeek : 'dddd [à] LT',\n\t        lastDay : '[ieiri à] LT',\n\t        lastWeek : '[sür el] dddd [lasteu à] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'osprei %s',\n\t        past : 'ja%s',\n\t        s : processRelativeTime,\n\t        m : processRelativeTime,\n\t        mm : processRelativeTime,\n\t        h : processRelativeTime,\n\t        hh : processRelativeTime,\n\t        d : processRelativeTime,\n\t        dd : processRelativeTime,\n\t        M : processRelativeTime,\n\t        MM : processRelativeTime,\n\t        y : processRelativeTime,\n\t        yy : processRelativeTime\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t    ordinal : '%d.',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\tfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t    var format = {\n\t        's': ['viensas secunds', '\\'iensas secunds'],\n\t        'm': ['\\'n míut', '\\'iens míut'],\n\t        'mm': [number + ' míuts', '' + number + ' míuts'],\n\t        'h': ['\\'n þora', '\\'iensa þora'],\n\t        'hh': [number + ' þoras', '' + number + ' þoras'],\n\t        'd': ['\\'n ziua', '\\'iensa ziua'],\n\t        'dd': [number + ' ziuas', '' + number + ' ziuas'],\n\t        'M': ['\\'n mes', '\\'iens mes'],\n\t        'MM': [number + ' mesen', '' + number + ' mesen'],\n\t        'y': ['\\'n ar', '\\'iens ar'],\n\t        'yy': [number + ' ars', '' + number + ' ars']\n\t    };\n\t    return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n\t}\n\n\treturn tzl;\n\n\t})));\n\n\n/***/ },\n/* 128 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Central Atlas Tamazight Latin [tzm-latn]\n\t//! author : Abdel Said : https://github.com/abdelsaid\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar tzmLatn = moment.defineLocale('tzm-latn', {\n\t    months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n\t    monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n\t    weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n\t    weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n\t    weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[asdkh g] LT',\n\t        nextDay: '[aska g] LT',\n\t        nextWeek: 'dddd [g] LT',\n\t        lastDay: '[assant g] LT',\n\t        lastWeek: 'dddd [g] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'dadkh s yan %s',\n\t        past : 'yan %s',\n\t        s : 'imik',\n\t        m : 'minuḍ',\n\t        mm : '%d minuḍ',\n\t        h : 'saɛa',\n\t        hh : '%d tassaɛin',\n\t        d : 'ass',\n\t        dd : '%d ossan',\n\t        M : 'ayowr',\n\t        MM : '%d iyyirn',\n\t        y : 'asgas',\n\t        yy : '%d isgasn'\n\t    },\n\t    week : {\n\t        dow : 6, // Saturday is the first day of the week.\n\t        doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn tzmLatn;\n\n\t})));\n\n\n/***/ },\n/* 129 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Central Atlas Tamazight [tzm]\n\t//! author : Abdel Said : https://github.com/abdelsaid\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar tzm = moment.defineLocale('tzm', {\n\t    months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n\t    monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n\t    weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n\t    weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n\t    weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS: 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n\t        nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n\t        nextWeek: 'dddd [ⴴ] LT',\n\t        lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n\t        lastWeek: 'dddd [ⴴ] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n\t        past : 'ⵢⴰⵏ %s',\n\t        s : 'ⵉⵎⵉⴽ',\n\t        m : 'ⵎⵉⵏⵓⴺ',\n\t        mm : '%d ⵎⵉⵏⵓⴺ',\n\t        h : 'ⵙⴰⵄⴰ',\n\t        hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n\t        d : 'ⴰⵙⵙ',\n\t        dd : '%d oⵙⵙⴰⵏ',\n\t        M : 'ⴰⵢoⵓⵔ',\n\t        MM : '%d ⵉⵢⵢⵉⵔⵏ',\n\t        y : 'ⴰⵙⴳⴰⵙ',\n\t        yy : '%d ⵉⵙⴳⴰⵙⵏ'\n\t    },\n\t    week : {\n\t        dow : 6, // Saturday is the first day of the week.\n\t        doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn tzm;\n\n\t})));\n\n\n/***/ },\n/* 130 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Ukrainian [uk]\n\t//! author : zemlanin : https://github.com/zemlanin\n\t//! Author : Menelion Elensúle : https://github.com/Oire\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tfunction plural(word, num) {\n\t    var forms = word.split('_');\n\t    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n\t}\n\tfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n\t    var format = {\n\t        'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n\t        'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n\t        'dd': 'день_дні_днів',\n\t        'MM': 'місяць_місяці_місяців',\n\t        'yy': 'рік_роки_років'\n\t    };\n\t    if (key === 'm') {\n\t        return withoutSuffix ? 'хвилина' : 'хвилину';\n\t    }\n\t    else if (key === 'h') {\n\t        return withoutSuffix ? 'година' : 'годину';\n\t    }\n\t    else {\n\t        return number + ' ' + plural(format[key], +number);\n\t    }\n\t}\n\tfunction weekdaysCaseReplace(m, format) {\n\t    var weekdays = {\n\t        'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n\t        'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n\t        'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n\t    };\n\n\t    if (!m) {\n\t        return weekdays['nominative'];\n\t    }\n\n\t    var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n\t        'accusative' :\n\t        ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n\t            'genitive' :\n\t            'nominative');\n\t    return weekdays[nounCase][m.day()];\n\t}\n\tfunction processHoursFunction(str) {\n\t    return function () {\n\t        return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n\t    };\n\t}\n\n\tvar uk = moment.defineLocale('uk', {\n\t    months : {\n\t        'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n\t        'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n\t    },\n\t    monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n\t    weekdays : weekdaysCaseReplace,\n\t    weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n\t    weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD.MM.YYYY',\n\t        LL : 'D MMMM YYYY р.',\n\t        LLL : 'D MMMM YYYY р., HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: processHoursFunction('[Сьогодні '),\n\t        nextDay: processHoursFunction('[Завтра '),\n\t        lastDay: processHoursFunction('[Вчора '),\n\t        nextWeek: processHoursFunction('[У] dddd ['),\n\t        lastWeek: function () {\n\t            switch (this.day()) {\n\t                case 0:\n\t                case 3:\n\t                case 5:\n\t                case 6:\n\t                    return processHoursFunction('[Минулої] dddd [').call(this);\n\t                case 1:\n\t                case 2:\n\t                case 4:\n\t                    return processHoursFunction('[Минулого] dddd [').call(this);\n\t            }\n\t        },\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'за %s',\n\t        past : '%s тому',\n\t        s : 'декілька секунд',\n\t        m : relativeTimeWithPlural,\n\t        mm : relativeTimeWithPlural,\n\t        h : 'годину',\n\t        hh : relativeTimeWithPlural,\n\t        d : 'день',\n\t        dd : relativeTimeWithPlural,\n\t        M : 'місяць',\n\t        MM : relativeTimeWithPlural,\n\t        y : 'рік',\n\t        yy : relativeTimeWithPlural\n\t    },\n\t    // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n\t    meridiemParse: /ночі|ранку|дня|вечора/,\n\t    isPM: function (input) {\n\t        return /^(дня|вечора)$/.test(input);\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 4) {\n\t            return 'ночі';\n\t        } else if (hour < 12) {\n\t            return 'ранку';\n\t        } else if (hour < 17) {\n\t            return 'дня';\n\t        } else {\n\t            return 'вечора';\n\t        }\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n\t    ordinal: function (number, period) {\n\t        switch (period) {\n\t            case 'M':\n\t            case 'd':\n\t            case 'DDD':\n\t            case 'w':\n\t            case 'W':\n\t                return number + '-й';\n\t            case 'D':\n\t                return number + '-го';\n\t            default:\n\t                return number;\n\t        }\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn uk;\n\n\t})));\n\n\n/***/ },\n/* 131 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Urdu [ur]\n\t//! author : Sawood Alam : https://github.com/ibnesayeed\n\t//! author : Zack : https://github.com/ZackVision\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar months = [\n\t    'جنوری',\n\t    'فروری',\n\t    'مارچ',\n\t    'اپریل',\n\t    'مئی',\n\t    'جون',\n\t    'جولائی',\n\t    'اگست',\n\t    'ستمبر',\n\t    'اکتوبر',\n\t    'نومبر',\n\t    'دسمبر'\n\t];\n\tvar days = [\n\t    'اتوار',\n\t    'پیر',\n\t    'منگل',\n\t    'بدھ',\n\t    'جمعرات',\n\t    'جمعہ',\n\t    'ہفتہ'\n\t];\n\n\tvar ur = moment.defineLocale('ur', {\n\t    months : months,\n\t    monthsShort : months,\n\t    weekdays : days,\n\t    weekdaysShort : days,\n\t    weekdaysMin : days,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd، D MMMM YYYY HH:mm'\n\t    },\n\t    meridiemParse: /صبح|شام/,\n\t    isPM : function (input) {\n\t        return 'شام' === input;\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        if (hour < 12) {\n\t            return 'صبح';\n\t        }\n\t        return 'شام';\n\t    },\n\t    calendar : {\n\t        sameDay : '[آج بوقت] LT',\n\t        nextDay : '[کل بوقت] LT',\n\t        nextWeek : 'dddd [بوقت] LT',\n\t        lastDay : '[گذشتہ روز بوقت] LT',\n\t        lastWeek : '[گذشتہ] dddd [بوقت] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s بعد',\n\t        past : '%s قبل',\n\t        s : 'چند سیکنڈ',\n\t        m : 'ایک منٹ',\n\t        mm : '%d منٹ',\n\t        h : 'ایک گھنٹہ',\n\t        hh : '%d گھنٹے',\n\t        d : 'ایک دن',\n\t        dd : '%d دن',\n\t        M : 'ایک ماہ',\n\t        MM : '%d ماہ',\n\t        y : 'ایک سال',\n\t        yy : '%d سال'\n\t    },\n\t    preparse: function (string) {\n\t        return string.replace(/،/g, ',');\n\t    },\n\t    postformat: function (string) {\n\t        return string.replace(/,/g, '،');\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn ur;\n\n\t})));\n\n\n/***/ },\n/* 132 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Uzbek Latin [uz-latn]\n\t//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar uzLatn = moment.defineLocale('uz-latn', {\n\t    months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n\t    monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n\t    weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n\t    weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n\t    weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'D MMMM YYYY, dddd HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Bugun soat] LT [da]',\n\t        nextDay : '[Ertaga] LT [da]',\n\t        nextWeek : 'dddd [kuni soat] LT [da]',\n\t        lastDay : '[Kecha soat] LT [da]',\n\t        lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'Yaqin %s ichida',\n\t        past : 'Bir necha %s oldin',\n\t        s : 'soniya',\n\t        m : 'bir daqiqa',\n\t        mm : '%d daqiqa',\n\t        h : 'bir soat',\n\t        hh : '%d soat',\n\t        d : 'bir kun',\n\t        dd : '%d kun',\n\t        M : 'bir oy',\n\t        MM : '%d oy',\n\t        y : 'bir yil',\n\t        yy : '%d yil'\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t    }\n\t});\n\n\treturn uzLatn;\n\n\t})));\n\n\n/***/ },\n/* 133 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Uzbek [uz]\n\t//! author : Sardor Muminov : https://github.com/muminoff\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar uz = moment.defineLocale('uz', {\n\t    months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n\t    monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n\t    weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n\t    weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n\t    weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'D MMMM YYYY, dddd HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Бугун соат] LT [да]',\n\t        nextDay : '[Эртага] LT [да]',\n\t        nextWeek : 'dddd [куни соат] LT [да]',\n\t        lastDay : '[Кеча соат] LT [да]',\n\t        lastWeek : '[Утган] dddd [куни соат] LT [да]',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'Якин %s ичида',\n\t        past : 'Бир неча %s олдин',\n\t        s : 'фурсат',\n\t        m : 'бир дакика',\n\t        mm : '%d дакика',\n\t        h : 'бир соат',\n\t        hh : '%d соат',\n\t        d : 'бир кун',\n\t        dd : '%d кун',\n\t        M : 'бир ой',\n\t        MM : '%d ой',\n\t        y : 'бир йил',\n\t        yy : '%d йил'\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 7  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn uz;\n\n\t})));\n\n\n/***/ },\n/* 134 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Vietnamese [vi]\n\t//! author : Bang Nguyen : https://github.com/bangnk\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar vi = moment.defineLocale('vi', {\n\t    months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n\t    monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n\t    weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n\t    weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n\t    weekdaysParseExact : true,\n\t    meridiemParse: /sa|ch/i,\n\t    isPM : function (input) {\n\t        return /^ch$/i.test(input);\n\t    },\n\t    meridiem : function (hours, minutes, isLower) {\n\t        if (hours < 12) {\n\t            return isLower ? 'sa' : 'SA';\n\t        } else {\n\t            return isLower ? 'ch' : 'CH';\n\t        }\n\t    },\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM [năm] YYYY',\n\t        LLL : 'D MMMM [năm] YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n\t        l : 'DD/M/YYYY',\n\t        ll : 'D MMM YYYY',\n\t        lll : 'D MMM YYYY HH:mm',\n\t        llll : 'ddd, D MMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay: '[Hôm nay lúc] LT',\n\t        nextDay: '[Ngày mai lúc] LT',\n\t        nextWeek: 'dddd [tuần tới lúc] LT',\n\t        lastDay: '[Hôm qua lúc] LT',\n\t        lastWeek: 'dddd [tuần rồi lúc] LT',\n\t        sameElse: 'L'\n\t    },\n\t    relativeTime : {\n\t        future : '%s tới',\n\t        past : '%s trước',\n\t        s : 'vài giây',\n\t        m : 'một phút',\n\t        mm : '%d phút',\n\t        h : 'một giờ',\n\t        hh : '%d giờ',\n\t        d : 'một ngày',\n\t        dd : '%d ngày',\n\t        M : 'một tháng',\n\t        MM : '%d tháng',\n\t        y : 'một năm',\n\t        yy : '%d năm'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}/,\n\t    ordinal : function (number) {\n\t        return number;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn vi;\n\n\t})));\n\n\n/***/ },\n/* 135 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Pseudo [x-pseudo]\n\t//! author : Andrew Hood : https://github.com/andrewhood125\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar xPseudo = moment.defineLocale('x-pseudo', {\n\t    months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n\t    monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n\t    monthsParseExact : true,\n\t    weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n\t    weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n\t    weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n\t    weekdaysParseExact : true,\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY HH:mm',\n\t        LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t    },\n\t    calendar : {\n\t        sameDay : '[T~ódá~ý át] LT',\n\t        nextDay : '[T~ómó~rró~w át] LT',\n\t        nextWeek : 'dddd [át] LT',\n\t        lastDay : '[Ý~ést~érdá~ý át] LT',\n\t        lastWeek : '[L~ást] dddd [át] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'í~ñ %s',\n\t        past : '%s á~gó',\n\t        s : 'á ~féw ~sécó~ñds',\n\t        m : 'á ~míñ~úté',\n\t        mm : '%d m~íñú~tés',\n\t        h : 'á~ñ hó~úr',\n\t        hh : '%d h~óúrs',\n\t        d : 'á ~dáý',\n\t        dd : '%d d~áýs',\n\t        M : 'á ~móñ~th',\n\t        MM : '%d m~óñt~hs',\n\t        y : 'á ~ýéár',\n\t        yy : '%d ý~éárs'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n\t    ordinal : function (number) {\n\t        var b = number % 10,\n\t            output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t            (b === 1) ? 'st' :\n\t            (b === 2) ? 'nd' :\n\t            (b === 3) ? 'rd' : 'th';\n\t        return number + output;\n\t    },\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn xPseudo;\n\n\t})));\n\n\n/***/ },\n/* 136 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Yoruba Nigeria [yo]\n\t//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar yo = moment.defineLocale('yo', {\n\t    months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n\t    monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n\t    weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n\t    weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n\t    weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'h:mm A',\n\t        LTS : 'h:mm:ss A',\n\t        L : 'DD/MM/YYYY',\n\t        LL : 'D MMMM YYYY',\n\t        LLL : 'D MMMM YYYY h:mm A',\n\t        LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t    },\n\t    calendar : {\n\t        sameDay : '[Ònì ni] LT',\n\t        nextDay : '[Ọ̀la ni] LT',\n\t        nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n\t        lastDay : '[Àna ni] LT',\n\t        lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n\t        sameElse : 'L'\n\t    },\n\t    relativeTime : {\n\t        future : 'ní %s',\n\t        past : '%s kọjá',\n\t        s : 'ìsẹjú aayá die',\n\t        m : 'ìsẹjú kan',\n\t        mm : 'ìsẹjú %d',\n\t        h : 'wákati kan',\n\t        hh : 'wákati %d',\n\t        d : 'ọjọ́ kan',\n\t        dd : 'ọjọ́ %d',\n\t        M : 'osù kan',\n\t        MM : 'osù %d',\n\t        y : 'ọdún kan',\n\t        yy : 'ọdún %d'\n\t    },\n\t    dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n\t    ordinal : 'ọjọ́ %d',\n\t    week : {\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4 // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn yo;\n\n\t})));\n\n\n/***/ },\n/* 137 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Chinese (China) [zh-cn]\n\t//! author : suupic : https://github.com/suupic\n\t//! author : Zeno Zeng : https://github.com/zenozeng\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar zhCn = moment.defineLocale('zh-cn', {\n\t    months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n\t    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t    weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n\t    weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n\t    weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'YYYY年MMMD日',\n\t        LL : 'YYYY年MMMD日',\n\t        LLL : 'YYYY年MMMD日Ah点mm分',\n\t        LLLL : 'YYYY年MMMD日ddddAh点mm分',\n\t        l : 'YYYY年MMMD日',\n\t        ll : 'YYYY年MMMD日',\n\t        lll : 'YYYY年MMMD日 HH:mm',\n\t        llll : 'YYYY年MMMD日dddd HH:mm'\n\t    },\n\t    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n\t    meridiemHour: function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === '凌晨' || meridiem === '早上' ||\n\t                meridiem === '上午') {\n\t            return hour;\n\t        } else if (meridiem === '下午' || meridiem === '晚上') {\n\t            return hour + 12;\n\t        } else {\n\t            // '中午'\n\t            return hour >= 11 ? hour : hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        var hm = hour * 100 + minute;\n\t        if (hm < 600) {\n\t            return '凌晨';\n\t        } else if (hm < 900) {\n\t            return '早上';\n\t        } else if (hm < 1130) {\n\t            return '上午';\n\t        } else if (hm < 1230) {\n\t            return '中午';\n\t        } else if (hm < 1800) {\n\t            return '下午';\n\t        } else {\n\t            return '晚上';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[今天]LT',\n\t        nextDay : '[明天]LT',\n\t        nextWeek : '[下]ddddLT',\n\t        lastDay : '[昨天]LT',\n\t        lastWeek : '[上]ddddLT',\n\t        sameElse : 'L'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n\t    ordinal : function (number, period) {\n\t        switch (period) {\n\t            case 'd':\n\t            case 'D':\n\t            case 'DDD':\n\t                return number + '日';\n\t            case 'M':\n\t                return number + '月';\n\t            case 'w':\n\t            case 'W':\n\t                return number + '周';\n\t            default:\n\t                return number;\n\t        }\n\t    },\n\t    relativeTime : {\n\t        future : '%s内',\n\t        past : '%s前',\n\t        s : '几秒',\n\t        m : '1 分钟',\n\t        mm : '%d 分钟',\n\t        h : '1 小时',\n\t        hh : '%d 小时',\n\t        d : '1 天',\n\t        dd : '%d 天',\n\t        M : '1 个月',\n\t        MM : '%d 个月',\n\t        y : '1 年',\n\t        yy : '%d 年'\n\t    },\n\t    week : {\n\t        // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n\t        dow : 1, // Monday is the first day of the week.\n\t        doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t    }\n\t});\n\n\treturn zhCn;\n\n\t})));\n\n\n/***/ },\n/* 138 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Chinese (Hong Kong) [zh-hk]\n\t//! author : Ben : https://github.com/ben-lin\n\t//! author : Chris Lam : https://github.com/hehachris\n\t//! author : Konstantin : https://github.com/skfd\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar zhHk = moment.defineLocale('zh-hk', {\n\t    months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n\t    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t    weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n\t    weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n\t    weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'YYYY年MMMD日',\n\t        LL : 'YYYY年MMMD日',\n\t        LLL : 'YYYY年MMMD日 HH:mm',\n\t        LLLL : 'YYYY年MMMD日dddd HH:mm',\n\t        l : 'YYYY年MMMD日',\n\t        ll : 'YYYY年MMMD日',\n\t        lll : 'YYYY年MMMD日 HH:mm',\n\t        llll : 'YYYY年MMMD日dddd HH:mm'\n\t    },\n\t    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n\t            return hour;\n\t        } else if (meridiem === '中午') {\n\t            return hour >= 11 ? hour : hour + 12;\n\t        } else if (meridiem === '下午' || meridiem === '晚上') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        var hm = hour * 100 + minute;\n\t        if (hm < 600) {\n\t            return '凌晨';\n\t        } else if (hm < 900) {\n\t            return '早上';\n\t        } else if (hm < 1130) {\n\t            return '上午';\n\t        } else if (hm < 1230) {\n\t            return '中午';\n\t        } else if (hm < 1800) {\n\t            return '下午';\n\t        } else {\n\t            return '晚上';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[今天]LT',\n\t        nextDay : '[明天]LT',\n\t        nextWeek : '[下]ddddLT',\n\t        lastDay : '[昨天]LT',\n\t        lastWeek : '[上]ddddLT',\n\t        sameElse : 'L'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n\t    ordinal : function (number, period) {\n\t        switch (period) {\n\t            case 'd' :\n\t            case 'D' :\n\t            case 'DDD' :\n\t                return number + '日';\n\t            case 'M' :\n\t                return number + '月';\n\t            case 'w' :\n\t            case 'W' :\n\t                return number + '週';\n\t            default :\n\t                return number;\n\t        }\n\t    },\n\t    relativeTime : {\n\t        future : '%s內',\n\t        past : '%s前',\n\t        s : '幾秒',\n\t        m : '1 分鐘',\n\t        mm : '%d 分鐘',\n\t        h : '1 小時',\n\t        hh : '%d 小時',\n\t        d : '1 天',\n\t        dd : '%d 天',\n\t        M : '1 個月',\n\t        MM : '%d 個月',\n\t        y : '1 年',\n\t        yy : '%d 年'\n\t    }\n\t});\n\n\treturn zhHk;\n\n\t})));\n\n\n/***/ },\n/* 139 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t//! locale : Chinese (Taiwan) [zh-tw]\n\t//! author : Ben : https://github.com/ben-lin\n\t//! author : Chris Lam : https://github.com/hehachris\n\n\t;(function (global, factory) {\n\t   true ? factory(__webpack_require__(7)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\n\n\tvar zhTw = moment.defineLocale('zh-tw', {\n\t    months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n\t    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t    weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n\t    weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n\t    weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n\t    longDateFormat : {\n\t        LT : 'HH:mm',\n\t        LTS : 'HH:mm:ss',\n\t        L : 'YYYY年MMMD日',\n\t        LL : 'YYYY年MMMD日',\n\t        LLL : 'YYYY年MMMD日 HH:mm',\n\t        LLLL : 'YYYY年MMMD日dddd HH:mm',\n\t        l : 'YYYY年MMMD日',\n\t        ll : 'YYYY年MMMD日',\n\t        lll : 'YYYY年MMMD日 HH:mm',\n\t        llll : 'YYYY年MMMD日dddd HH:mm'\n\t    },\n\t    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n\t    meridiemHour : function (hour, meridiem) {\n\t        if (hour === 12) {\n\t            hour = 0;\n\t        }\n\t        if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n\t            return hour;\n\t        } else if (meridiem === '中午') {\n\t            return hour >= 11 ? hour : hour + 12;\n\t        } else if (meridiem === '下午' || meridiem === '晚上') {\n\t            return hour + 12;\n\t        }\n\t    },\n\t    meridiem : function (hour, minute, isLower) {\n\t        var hm = hour * 100 + minute;\n\t        if (hm < 600) {\n\t            return '凌晨';\n\t        } else if (hm < 900) {\n\t            return '早上';\n\t        } else if (hm < 1130) {\n\t            return '上午';\n\t        } else if (hm < 1230) {\n\t            return '中午';\n\t        } else if (hm < 1800) {\n\t            return '下午';\n\t        } else {\n\t            return '晚上';\n\t        }\n\t    },\n\t    calendar : {\n\t        sameDay : '[今天]LT',\n\t        nextDay : '[明天]LT',\n\t        nextWeek : '[下]ddddLT',\n\t        lastDay : '[昨天]LT',\n\t        lastWeek : '[上]ddddLT',\n\t        sameElse : 'L'\n\t    },\n\t    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n\t    ordinal : function (number, period) {\n\t        switch (period) {\n\t            case 'd' :\n\t            case 'D' :\n\t            case 'DDD' :\n\t                return number + '日';\n\t            case 'M' :\n\t                return number + '月';\n\t            case 'w' :\n\t            case 'W' :\n\t                return number + '週';\n\t            default :\n\t                return number;\n\t        }\n\t    },\n\t    relativeTime : {\n\t        future : '%s內',\n\t        past : '%s前',\n\t        s : '幾秒',\n\t        m : '1 分鐘',\n\t        mm : '%d 分鐘',\n\t        h : '1 小時',\n\t        hh : '%d 小時',\n\t        d : '1 天',\n\t        dd : '%d 天',\n\t        M : '1 個月',\n\t        MM : '%d 個月',\n\t        y : '1 年',\n\t        yy : '%d 年'\n\t    }\n\t});\n\n\treturn zhTw;\n\n\t})));\n\n\n/***/ },\n/* 140 */,\n/* 141 */,\n/* 142 */,\n/* 143 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\n\n/***/ }\n/******/ ]);"
  },
  {
    "path": "static/entry.apply.js",
    "content": "webpackJsonp([1],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar apply = __webpack_require__(9);\n\n\tapply.init();\n\n/***/ },\n\n/***/ 9:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * @info 申请新页面页面js\n\t * @author coverguo\n\t * */\n\n\tvar REG_REFERER = /^https?:\\/\\/[^\\/]+\\//i;\n\tvar REG_DOMAIN_STAR = /^\\*(\\.[^\\/]+)?$/;\n\n\tvar Dialog = __webpack_require__(140);\n\n\n\tvar applyBox = $(\"#applyContainer\");\n\n\tfunction bindEvent() {\n\t    applyBox.on('click', '.apply-submit', function(e) {\n\t        e.preventDefault();\n\t        var mainpage = $.trim($(\".apply-url\").val());\n\t        if ($('.apply-name').val().length <= 0) {\n\t            alert(\"请填写业务名称\");\n\t            return;\n\t        }\n\t        if (!REG_DOMAIN_STAR.test(mainpage) && !REG_REFERER.test(mainpage)) {\n\t            alert(\"业务URL格式错误 , eg: http://www.qq.com/\");\n\t            return;\n\t        }\n\n\t    var blackListIP = $('.apply-blacklist-ip').val();\n\t    var blackListUA = $('.apply-blacklist-ua').val();\n\t    var blackList = {ip : blackListIP ? blackListIP.split(\",\") : [] , ua : blackListUA ? blackListUA.split(\",\"): [] }\n\n\n\n\t    var params = {};\n\t        //申请数据\n\t        $.extend(params, {\n\t            name: $('.apply-name').val(),\n\t            description: $('.apply-description').val(),\n\t            url: mainpage,\n\t            blacklist: JSON.stringify(blackList),\n\t            id: $(\"#applyId\").val()\n\t        });\n\n\t        $.post('./controller/applyAction/addApply.do', params, function(data) {\n\t            var ret = data.ret;\n\t            switch (ret) {\n\t                case 0: //成功\n\t                    //执行成功回调函数.\n\t                    alert(\"成功\");\n\t                    location.href = '/user/applyList.html';\n\t                    break;\n\t                case 1: //没有登陆态或登陆态失效\n\t                    alert(\"失败\");\n\t            }\n\t        }).fail(function() {\n\t            // 错误处理\n\t        });\n\t    });\n\t}\n\n\n\tfunction init() {\n\t    bindEvent();\n\t}\n\n\tmodule.exports = {\n\t    init: init\n\t};\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 21:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * Map\n\t * @class\n\t */\n\tfunction Map() {\n\t    this.map = {};\n\t    this.length = 0;\n\t}\n\tMap.prototype = {\n\t    constructor: Map,\n\t    /**\n\t     * has\n\t     * @param {String} key\n\t     * @returns {Boolean}\n\t     */\n\t    has: function (key) {\n\t        return (key in this.map);\n\t    },\n\t    /**\n\t     * get\n\t     * @param {String} key\n\t     * @returns {Any}\n\t     */\n\t    get: function (key) {\n\t        return this.map[key];\n\t    },\n\t    /**\n\t     * set\n\t     * @param {String} key\n\t     * @param {Any} value\n\t     */\n\t    set: function (key, value) {\n\t        !this.has(key) && this.length++;\n\t        return (this.map[key] = value);\n\t    },\n\t    /**\n\t     * count\n\t     * @returns {Number}\n\t     */\n\t    count: function () {\n\t        return this.length;\n\t    },\n\t    /**\n\t     * remove\n\t     * @param {String} key\n\t     */\n\t    remove: function (key) {\n\t        if (this.has(key)) {\n\t            this.map[key] = null;\n\t            delete this.map[key];\n\t            this.length--;\n\t        }\n\t    }\n\t};\n\n\tvar cache = new Map(), set = cache.set, uid = 0;\n\tcache.set = function (node, value) {\n\t    if (!value) {\n\t        value = node;\n\t        set.call(cache, ++uid + '', value);\n\t        return uid;\n\t    } else {\n\t        typeof node === 'string' &&\n\t        (node = $(node)[0]);\n\t        $.data(node, 'event-data', value);\n\t        return this;\n\t    }\n\t};\n\n\tfunction _key(arr) {\n\t    if (!arr) return {};\n\t    arr = arr.split(' ');\n\t    var obj = {};\n\t    for (var i = 0, l = arr.length; i < l; i++) {\n\t        obj[arr[i]] = true;\n\t    }\n\t    return obj;\n\t}\n\n\t/**\n\t * Delegator\n\t * @class\n\t * @param {Selector} container\n\t */\n\tfunction Delegator(container) {\n\t    this.container = $(container);\n\t    this.listenerMap = new Map();\n\t}\n\n\t/**\n\t * getKey\n\t * @param {Any} value\n\t * @returns {Number}\n\t */\n\tDelegator.set = cache.set;\n\t/**\n\t * cache\n\t * @class\n\t * @static\n\t */\n\tDelegator.cache = cache;\n\n\tDelegator.prototype = {\n\t    constructor: Delegator,\n\t    _getListener: function (type) {\n\t        if (this.listenerMap.has(type)) {\n\t            return this.listenerMap.get(type);\n\t        }\n\t        function listener(e) {\n\t            var data = $.data(this),\n\t                routes = data['event-' + type + '-routes'],\n\t                eventData = data['event-data'], handle, dataKey;\n\n\t            // preprocessing\n\t            if (!routes && (routes = this.getAttribute('data-event-' + type))) {\n\t                (routes = routes.split(' ')) &&\n\t                (data['event-' + type + '-routes'] = routes);\n\t                !eventData &&\n\t                (dataKey = this.getAttribute('data-event-data')) &&\n\t                (eventData = cache.get(dataKey)) &&\n\t                (data['event-data'] = eventData) &&\n\t                (cache.remove(dataKey));\n\t                !data['event-stop-propagation'] &&\n\t                (data['event-stop-propagation'] = _key(this.getAttribute('data-event-stop-propagation')));\n\t            }\n\n\t            if (routes) {\n\t                for (var i = 0, l = routes.length; i < l; i++) {\n\t                    handle = listener.handleMap.get(routes[i]);\n\n\t                    if (handle) {\n\t                        handle.call(this, e, eventData);\n\t                    }\n\t                    data['event-stop-propagation'][type] &&\n\t                    e.stopPropagation();\n\t                }\n\t            }\n\t        }\n\n\t        listener.handleMap = new Map();\n\t        this.listenerMap.set(type, listener);\n\t        this.container.on(type, '[data-event-' + type + ']', listener);\n\t        return listener;\n\t    },\n\t    /**\n\t     * on\n\t     * @param {String} type\n\t     * @param {String} name\n\t     * @param {Function} handle\n\t     */\n\t    on: function (type, name, handle) {\n\t        var listener = this._getListener(type);\n\t        listener.handleMap.set(name, handle);\n\t        return this;\n\t    },\n\t    /**\n\t     * off\n\t     * @param {String} type\n\t     * @param {String} name\n\t     */\n\t    off: function (type, name) {\n\t        var listener = this._getListener(type),\n\t            handleMap = listener.handleMap;\n\t        handleMap.remove(name);\n\t        if (!handleMap.count()) {\n\t            this.container.off(type, '[data-event-' + type + ']', listener);\n\t            this.listenerMap.remove(type);\n\t        }\n\t    }\n\t};\n\n\tmodule.exports = Delegator;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 140:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar modal = __webpack_require__(155);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(modal({it :param}))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on = param.on || {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 155:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"' +\n\t((__t = (it.id || '' )) == null ? '' : __t) +\n\t'\">\\r\\n  <div class=\"modal-backdrop fade\"></div>\\r\\n  <div class=\"modal-dialog\">\\r\\n    <div class=\"modal-content\">\\r\\n\\r\\n      <div class=\"modal-header\">\\r\\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\r\\n        <h4 class=\"modal-title\">' +\n\t((__t = (it.header)) == null ? '' : __t) +\n\t'</h4>\\r\\n      </div>\\r\\n      <div class=\"modal-body\">\\r\\n        ' +\n\t((__t = (it.body)) == null ? '' : __t) +\n\t'\\r\\n      </div>\\r\\n      <div class=\"modal-footer\">\\r\\n        <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\r\\n      </div>\\r\\n\\r\\n    </div>\\r\\n  </div>\\r\\n</div>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ }\n\n});"
  },
  {
    "path": "static/entry.applyList.js",
    "content": "webpackJsonp([11],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar applyList = __webpack_require__(8);\n\n\tapplyList.init();\n\n/***/ },\n\n/***/ 8:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * @info 申请列表js\n\t * @author coverguo\n\t * */\n\n\n\tvar Dialog = __webpack_require__(140);\n\tvar applyTable = __webpack_require__(144);\n\n\n\t    var maxDate = 60*60*1000*24 *2;\n\t    var   encodeHtml = function (str) {\n\t        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n\t    };\n\t    //选择的状态\n\t    var tempStatus,\n\t        oldClass;\n\n\n\t    function doApprove(params , cb){\n\t        $.post('/controller/approveAction/doApprove.do',params, function (data) {\n\t            var ret = data.ret;\n\t            switch(ret){\n\t                case 0://成功\n\t                    //执行成功回调函数.\n\t                    cb(data);\n\t                    break;\n\t                case 1://没有登陆态或登陆态失效\n\t                    alert(data.msg);\n\t            }\n\t        }).fail(function () {\n\t            // 错误处理\n\t        });\n\t    }\n\n\t    var deleteItem = function ($item , id){\n\t        if(!confirm(\"你确定要删除吗\")){\n\t            return ;\n\t        }\n\t        $.getJSON('/controller/applyAction/remove.do',{id : id}, function (data) {\n\t            var ret = data.ret;\n\t            if(ret == 0){\n\t                $item.parents(\".listRow\").remove();\n\t            }else {\n\t                alert(data.msg);\n\t            }\n\t        }).fail(function () {\n\t            alert(\"删除失败\");\n\t        });\n\t    }\n\t    function bindEvent() {\n\n\t        //搜索\n\t        $(\"#apply_searchBtn\").on(\"click\", function () {\n\t            var searchParam = {\n\t                searchText:$(\"#apply_searchText\").val(),\n\t                statusType:parseInt($(\"#apply_searchType\").val(),10)\n\t            };\n\t            getSearchList(searchParam, function(data){\n\t                console.log(data);\n\t                var param = {\n\t                    encodeHtml: encodeHtml\n\t                };\n\t                $('.dataTable').html(applyTable({it : data, opt : param}));\n\t                //bindEvent();\n\t            });\n\t        });\n\n\t        //审核\n\t        $(\"#applyList\").on(\"click\",\".approveBtn\", function(){\n\t            $(this).siblings(\".approveBlock\").show();\n\t            tempStatus = $(this).siblings(\".approveBlock\").find(\"#statusPanel\").data(\"value\");\n\t            oldClass = $(this).siblings(\".approveBlock\").find(\"#statusPanel\").attr(\"class\");\n\t        });\n\t        $(\".approveBlock .closeBtn\").on(\"click\", function(e){\n\t            $(this).parent().hide();\n\t            //取消则返回之前的class\n\t            $(this).siblings(\"#statusPanel\").removeClass().addClass(oldClass);\n\t            e.stopPropagation();\n\t        });\n\t        $(\"#statusPanel .statusBtn\").on(\"click\", function(e){\n\t            var type = $(this).data(\"type\");\n\t            oldClass = $(this).parent().attr(\"class\");\n\t            tempStatus = $(this).data(\"value\");\n\t            $(this).parent().removeClass().addClass(type +\"-active\");\n\t            e.stopPropagation();\n\t        });\n\t        $(\"#applyList .deleteBtn\").on(\"click\", function(e){\n\t            deleteItem($(this) , $(this).data(\"applyid\"));\n\t            e.stopPropagation();\n\t        });\n\t        $(\".approveBlock .operation\").on(\"click\", function (e) {\n\n\t            if( $(this).siblings(\"#statusPanel\").hasClass(\"delete-active\")){\n\t                deleteItem($(this) , $(this).data(\"apply_id\"));\n\t                return ;\n\t            }\n\t            //只有提交了才改变状态值\n\t            $(this).siblings(\"#statusPanel\").data().value = tempStatus;\n\t            var param = {\n\t                reply       : $(this).siblings(\".replyText\").val(),\n\t                applyId     : $(this).data(\"apply_id\"),\n\t                applyStatus : tempStatus\n\t            };\n\t            var $self = $(this);\n\t            doApprove(param, function (data) {\n\t                alert(data.msg);\n\t                $self.parent().hide();\n\t                location.reload();\n\t            });\n\t            e.stopPropagation();\n\t        });\n\n\t        $(\"#applyList .appkey_btn\").click(function (){\n\n\t        });\n\n\t    }\n\t    function getSearchList(params,cb){\n\t        $.get('./controller/applyAction/queryListBySearch.do',params, function (data) {\n\t            var ret = data.ret;\n\t            switch(ret){\n\t                case 0://成功\n\t                    //执行成功回调函数.\n\t                    cb(data.data);\n\t                    break;\n\t                case 1://没有登陆态或登陆态失效\n\t                    alert(\"失败\");\n\t            }\n\t        }).fail(function () {\n\t            // 错误处理\n\t        });\n\t    }\n\t    //获取列表页信息\n\t    function getApplyList(cb){\n\t        var params = {\n\t        };\n\t        $.get('./controller/applyAction/queryListByUser.do',params, function (data) {\n\t            var ret = data.ret;\n\t            switch(ret){\n\t                case 0://成功\n\t                    //执行成功回调函数.\n\t                    cb(data.data);\n\t                    break;\n\t                case 1://没有登陆态或登陆态失效\n\t                    alert(\"失败\");\n\t            }\n\t        }).fail(function () {\n\t            // 错误处理\n\t        });\n\t    }\n\n\t    function init() {\n\t        //$(\".datetimepicker\").datetimepicker({format: 'YYYY-MM-DD HH:mm'}).data(\"DateTimePicker\").setMaxDate(new Date());\n\t        //\n\t        //$('.fromTime').data(\"DateTimePicker\").setDate( new Date(new Date() - maxDate));\n\t        //$('.toTime').data(\"DateTimePicker\").setDate( new Date());\n\t        getApplyList(function(data){\n\t            console.log(data);\n\t            var param = {\n\t                encodeHtml: encodeHtml\n\t            };\n\t            $('.dataTable').html(applyTable({it : data, opt :param}));\n\t            bindEvent();\n\t        });\n\n\n\t    }\n\n\tmodule.exports = {\n\t        init: init\n\t}\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 21:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * Map\n\t * @class\n\t */\n\tfunction Map() {\n\t    this.map = {};\n\t    this.length = 0;\n\t}\n\tMap.prototype = {\n\t    constructor: Map,\n\t    /**\n\t     * has\n\t     * @param {String} key\n\t     * @returns {Boolean}\n\t     */\n\t    has: function (key) {\n\t        return (key in this.map);\n\t    },\n\t    /**\n\t     * get\n\t     * @param {String} key\n\t     * @returns {Any}\n\t     */\n\t    get: function (key) {\n\t        return this.map[key];\n\t    },\n\t    /**\n\t     * set\n\t     * @param {String} key\n\t     * @param {Any} value\n\t     */\n\t    set: function (key, value) {\n\t        !this.has(key) && this.length++;\n\t        return (this.map[key] = value);\n\t    },\n\t    /**\n\t     * count\n\t     * @returns {Number}\n\t     */\n\t    count: function () {\n\t        return this.length;\n\t    },\n\t    /**\n\t     * remove\n\t     * @param {String} key\n\t     */\n\t    remove: function (key) {\n\t        if (this.has(key)) {\n\t            this.map[key] = null;\n\t            delete this.map[key];\n\t            this.length--;\n\t        }\n\t    }\n\t};\n\n\tvar cache = new Map(), set = cache.set, uid = 0;\n\tcache.set = function (node, value) {\n\t    if (!value) {\n\t        value = node;\n\t        set.call(cache, ++uid + '', value);\n\t        return uid;\n\t    } else {\n\t        typeof node === 'string' &&\n\t        (node = $(node)[0]);\n\t        $.data(node, 'event-data', value);\n\t        return this;\n\t    }\n\t};\n\n\tfunction _key(arr) {\n\t    if (!arr) return {};\n\t    arr = arr.split(' ');\n\t    var obj = {};\n\t    for (var i = 0, l = arr.length; i < l; i++) {\n\t        obj[arr[i]] = true;\n\t    }\n\t    return obj;\n\t}\n\n\t/**\n\t * Delegator\n\t * @class\n\t * @param {Selector} container\n\t */\n\tfunction Delegator(container) {\n\t    this.container = $(container);\n\t    this.listenerMap = new Map();\n\t}\n\n\t/**\n\t * getKey\n\t * @param {Any} value\n\t * @returns {Number}\n\t */\n\tDelegator.set = cache.set;\n\t/**\n\t * cache\n\t * @class\n\t * @static\n\t */\n\tDelegator.cache = cache;\n\n\tDelegator.prototype = {\n\t    constructor: Delegator,\n\t    _getListener: function (type) {\n\t        if (this.listenerMap.has(type)) {\n\t            return this.listenerMap.get(type);\n\t        }\n\t        function listener(e) {\n\t            var data = $.data(this),\n\t                routes = data['event-' + type + '-routes'],\n\t                eventData = data['event-data'], handle, dataKey;\n\n\t            // preprocessing\n\t            if (!routes && (routes = this.getAttribute('data-event-' + type))) {\n\t                (routes = routes.split(' ')) &&\n\t                (data['event-' + type + '-routes'] = routes);\n\t                !eventData &&\n\t                (dataKey = this.getAttribute('data-event-data')) &&\n\t                (eventData = cache.get(dataKey)) &&\n\t                (data['event-data'] = eventData) &&\n\t                (cache.remove(dataKey));\n\t                !data['event-stop-propagation'] &&\n\t                (data['event-stop-propagation'] = _key(this.getAttribute('data-event-stop-propagation')));\n\t            }\n\n\t            if (routes) {\n\t                for (var i = 0, l = routes.length; i < l; i++) {\n\t                    handle = listener.handleMap.get(routes[i]);\n\n\t                    if (handle) {\n\t                        handle.call(this, e, eventData);\n\t                    }\n\t                    data['event-stop-propagation'][type] &&\n\t                    e.stopPropagation();\n\t                }\n\t            }\n\t        }\n\n\t        listener.handleMap = new Map();\n\t        this.listenerMap.set(type, listener);\n\t        this.container.on(type, '[data-event-' + type + ']', listener);\n\t        return listener;\n\t    },\n\t    /**\n\t     * on\n\t     * @param {String} type\n\t     * @param {String} name\n\t     * @param {Function} handle\n\t     */\n\t    on: function (type, name, handle) {\n\t        var listener = this._getListener(type);\n\t        listener.handleMap.set(name, handle);\n\t        return this;\n\t    },\n\t    /**\n\t     * off\n\t     * @param {String} type\n\t     * @param {String} name\n\t     */\n\t    off: function (type, name) {\n\t        var listener = this._getListener(type),\n\t            handleMap = listener.handleMap;\n\t        handleMap.remove(name);\n\t        if (!handleMap.count()) {\n\t            this.container.off(type, '[data-event-' + type + ']', listener);\n\t            this.listenerMap.remove(type);\n\t        }\n\t    }\n\t};\n\n\tmodule.exports = Delegator;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 140:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar modal = __webpack_require__(155);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(modal({it :param}))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on = param.on || {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 144:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(_) {module.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '', __j = Array.prototype.join;\n\tfunction print() { __p += __j.call(arguments, '') }\n\twith (obj) {\n\n\n\t    var len = it.item.length;\n\n\t    var statue = \"\";\n\n\t;\n\t__p += '\\r\\n';\n\t if(len !=0){;\n\t__p += '\\r\\n<thead>\\r\\n<tr>\\r\\n    <!--<th><input class=\"tableSelectCheckBox parentCheckBox\" type=\"checkbox\"/></th>-->\\r\\n    <th>#</th>\\r\\n    <th style=\"width:80px;\">上报id</th>\\r\\n    <th style=\"width:80px;\">appkey</th>\\r\\n    <th >名称</th>\\r\\n    <th>申请人</th>\\r\\n    <th style=\"width:120px;\">申请时间</th>\\r\\n   <!-- <th >业务描述</th>-->\\r\\n    <th >详情</th>\\r\\n    <th style=\"width:120px;\">' +\n\t((__t = ( it.role ==1 ? '操作' : '状态')) == null ? '' : __t) +\n\t'</th>\\r\\n    ';\n\tif (it.role != 1) { ;\n\t__p += '\\r\\n    <th style=\"width:120px;\">操作</th>\\r\\n    ';\n\t };\n\t__p += '\\r\\n\\r\\n\\r\\n</tr>\\r\\n</thead>\\r\\n\\r\\n<tbody id=\"applyList\">\\r\\n';\n\n\tvar one ;\n\tfor(var i = 0; i<len ; i++){\n\t    one = it.item[i];\n\t    one.status -= 0;\n\t    var STATUS_BLOCK_HEIGHT = 24;\n\t    var status = 'applying-active';\n\t    var statusText = '待审核';\n\t    var statusClass = 'applyingBtn'\n\t    var blacklistIPStr = '';\n\t    var blacklistUAStr = '';\n\n\t    try {\n\t        one.blacklist = JSON.parse(one.blacklist || {})\n\t    }catch(e){\n\t        one.blacklist = {};\n\t    }\n\t    blacklistIPStr =  one.blacklist.ip ? one.blacklist.ip.join(',') : ''\n\t    blacklistUAStr =  one.blacklist.ua ? one.blacklist.ua.join(',') : ''\n\n\t    if(one.status != 0){\n\t        status = one.status ==1 ? 'agree-active' : 'disagree-active';\n\t        statusText = one.status ==1 ? '已通过' : '已拒绝';\n\t        statusClass = one.status ==1 ? 'passBtn' : 'rejectedBtn';\n\t    }\n\n\t;\n\t__p += '\\r\\n    <tr class=\"listRow\" >\\r\\n        <!--<td><input class=\"tableSelectCheckBox\" type=\"checkbox\"/></td>-->\\r\\n        <td class=\"\">' +\n\t((__t = ((i +1))) == null ? '' : __t) +\n\t'</td>\\r\\n        <td class=\"apply_id\" style=\"text-align: center;\">' +\n\t((__t = (one.id)) == null ? '' : __t) +\n\t'</td>\\r\\n        <td class=\"apply_appkey\" style=\"text-align: center;\" >\\r\\n            <a class=\"appkey_btn\" href=\"javascript:void(0)\" >appkey</a>\\r\\n            <div class=\"appkey-panel\" style=\"text-align: left\">\\r\\n                <div> appkey : <strong>' +\n\t((__t = (one.appkey)) == null ? '' : __t) +\n\t'</strong></div>\\r\\n            </div>\\r\\n        </td>\\r\\n        <td class=\"apply_name\">\\r\\n            <span style=\"width:100px;\" class=\"textOverflow\" title=\"' +\n\t((__t = (one.name)) == null ? '' : __t) +\n\t'\">' +\n\t((__t = (one.name)) == null ? '' : __t) +\n\t'</span>\\r\\n        </td>\\r\\n        <td class=\"apply_userName\">' +\n\t((__t = (one.userName)) == null ? '' : __t) +\n\t'</td>\\r\\n        <td class=\"apply_createTime\">' +\n\t((__t = ( _.formatDate( new Date(one.createTime) , 'YYYY-MM-DD' ))) == null ? '' : __t) +\n\t'</td>\\r\\n       <!-- <td  class=\"apply_description\">\\r\\n            <span style=\"width:250px;\" class=\"textOverflow\" title=\"' +\n\t((__t = (one.description)) == null ? '' : __t) +\n\t'\"> ' +\n\t((__t = (one.description)) == null ? '' : __t) +\n\t'</span>\\r\\n        </td>-->\\r\\n        <td class=\"apply_url\" >\\r\\n            <span style=\"width:270px;\" class=\"textOverflow\" title=\"' +\n\t((__t = (one.url)) == null ? '' : __t) +\n\t'\"><b>url：</b>' +\n\t((__t = (one.url)) == null ? '' : __t) +\n\t'</span>\\r\\n            <span style=\"width:270px;\" class=\"textOverflow\" >\\r\\n                <b>ip：</b>' +\n\t((__t = ( blacklistIPStr    )) == null ? '' : __t) +\n\t'\\r\\n            </span>\\r\\n             <span style=\"width:270px;\" class=\"textOverflow\" >\\r\\n                <b>userAgent：</b>' +\n\t((__t = ( blacklistUAStr    )) == null ? '' : __t) +\n\t'\\r\\n              </span>\\r\\n            <span style=\"width:270px;\" class=\"textOverflow\" title=\"' +\n\t((__t = (one.description)) == null ? '' : __t) +\n\t'\"><b>描述：</b>' +\n\t((__t = (one.description)) == null ? '' : __t) +\n\t'</span>\\r\\n        </td>\\r\\n\\r\\n        <td class=\"apply_operation\">\\r\\n            ';\n\tif(it.role == 1){;\n\t__p += '\\r\\n            <div  class=\"modifyBtn approveBtn ' +\n\t((__t = (statusClass)) == null ? '' : __t) +\n\t'\">\\r\\n                ' +\n\t((__t = ( statusText)) == null ? '' : __t) +\n\t'\\r\\n            </div>\\r\\n            <div class=\"approveBlock\" >\\r\\n                <div class=\"closeBtn\">关闭</div>\\r\\n                <input  class=\"rowBlock replyText\" type=\"text\" name=\"description\" placeholder=\"操作描述\"/>\\r\\n                <div id=\"statusPanel\" class=\"' +\n\t((__t = ( status)) == null ? '' : __t) +\n\t'\" data-value=\"' +\n\t((__t = ( one.status)) == null ? '' : __t) +\n\t'\">\\r\\n                    <div class=\"statusBtn applying\" data-type=\"applying\" data-value=\"0\">待审核</div>\\r\\n                    <div class=\"statusBtn agree\" data-type=\"agree\" data-value=\"1\">通过</div>\\r\\n                    <div class=\"statusBtn disagree\" data-type=\"disagree\" data-value=\"2\">拒绝</div>\\r\\n                    <div class=\"statusBtn delete\" data-type=\"delete\" >删除</div>\\r\\n                </div>\\r\\n                <div class=\"operation\" data-apply_id=\"' +\n\t((__t = (one.id)) == null ? '' : __t) +\n\t'\">\\r\\n                    <button class=\"submitBtn\" >确定</button>\\r\\n                </div>\\r\\n            </div>\\r\\n            ';\n\t} else {;\n\t__p += '\\r\\n            <div  class=\" ' +\n\t((__t = (statusClass)) == null ? '' : __t) +\n\t'\">\\r\\n                ' +\n\t((__t = ( statusText)) == null ? '' : __t) +\n\t'\\r\\n            </div>\\r\\n            ';\n\t};\n\t__p += '\\r\\n        </td>\\r\\n        ';\n\tif (it.role != 1) { ;\n\t__p += '\\r\\n        <td>\\r\\n            ';\n\t  if(true) {;\n\t__p += '\\r\\n            <button class=\"editBtn\">\\r\\n                <a href=\"apply.html?applyId=' +\n\t((__t = (one.id)) == null ? '' : __t) +\n\t'\">编辑</a>\\r\\n            </button>\\r\\n            ';\n\t } ;\n\t__p += '\\r\\n            <button class=\"deleteBtn\" data-applyid=\"' +\n\t((__t = (one.id)) == null ? '' : __t) +\n\t'\">\\r\\n                <a href=\"javascript:void(0)\">删除</a>\\r\\n            </button>\\r\\n        </td>\\r\\n        ';\n\t};\n\t__p += '\\r\\n    </tr>\\r\\n';\n\t};\n\t__p += '\\r\\n</tbody>\\r\\n';\n\t};\n\t__p += '\\r\\n';\n\n\t}\n\treturn __p\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ },\n\n/***/ 155:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"' +\n\t((__t = (it.id || '' )) == null ? '' : __t) +\n\t'\">\\r\\n  <div class=\"modal-backdrop fade\"></div>\\r\\n  <div class=\"modal-dialog\">\\r\\n    <div class=\"modal-content\">\\r\\n\\r\\n      <div class=\"modal-header\">\\r\\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\r\\n        <h4 class=\"modal-title\">' +\n\t((__t = (it.header)) == null ? '' : __t) +\n\t'</h4>\\r\\n      </div>\\r\\n      <div class=\"modal-body\">\\r\\n        ' +\n\t((__t = (it.body)) == null ? '' : __t) +\n\t'\\r\\n      </div>\\r\\n      <div class=\"modal-footer\">\\r\\n        <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\r\\n      </div>\\r\\n\\r\\n    </div>\\r\\n  </div>\\r\\n</div>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ }\n\n});"
  },
  {
    "path": "static/entry.authUserManage.js",
    "content": "webpackJsonp([5],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar usermanger = __webpack_require__(10);\n\n\tusermanger.init();\n\n/***/ },\n\n/***/ 10:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * @info 用户列表js\n\t * @author coverguo\n\t * */\n\n\tvar userTable = __webpack_require__(145);\n\n\n\t    var encodeHtml = function (str) {\n\t        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n\t    };\n\t    function bindEvent() {\n\n\t        $(\".searchBtn\").on(\"click\", function (){\n\t            fetch();\n\t        });\n\n\n\t        var submiting =  false;\n\n\t        $(\"#userList\").on(\"click\",'.user-authBtn', function (){\n\t            if(submiting){\n\t                return;\n\t            }\n\t            submiting = true;\n\t            var params = {\n\t                id : $(this).data(\"uaid\"),\n\t                role : $(this).data(\"role\")\n\t            };\n\t            $ajax(\"/controller/userAction/authUser.do\", params, function(data){\n\t                fetch();\n\t                submiting = false;\n\t            });\n\n\t        });\n\t    };\n\n\t    function $ajax(url, params, cb,type){\n\t        $.ajax({\n\t            url: url,\n\t            data:params,\n\t            type: type?type:'post',\n\t            success: function(data) {\n\t                var ret = data.ret;\n\t                switch(ret){\n\t                    case 0://成功\n\t                        //执行成功回调函数.\n\t                        cb(data);\n\n\t                        break;\n\t                    default ://没有登陆态或登陆态失效\n\t                        alert(data.msg);\n\t                }\n\t            },\n\t            error: function() {\n\t            }\n\t        });\n\t    }\n\t    function fetch() {\n\t        var params ={\n\t            roleType : $('.search-userType').val()\n\t        };\n\t        $ajax(\"controller/userAction/queryUserByCondition.do\",params,function(items){\n\t            var param = {\n\t                encodeHtml: encodeHtml\n\t            };\n\t            $('#userList').html(userTable({it : items.data, opt : param}));\n\n\t        });\n\n\n\t    }\n\n\tmodule.exports = {\n\t        init: function (){\n\t            fetch();\n\t            bindEvent();\n\t        }\n\t}\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 145:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '', __j = Array.prototype.join;\n\tfunction print() { __p += __j.call(arguments, '') }\n\twith (obj) {\n\n\t for(var i =0, len = it.length;i<len; i++){\n\t    var role =\"普通用户\";\n\t    var operationType = 0;\n\t    if(it[i].role == 1){\n\t        if(it[i].loginName == \"admin\") {\n\t            role = \"超级管理员\";\n\t            operationType = 2;\n\t        }else {\n\t            role =\"管理员\";\n\t            operationType = 1;\n\t        }\n\t    }\n\t;\n\t__p += '\\r\\n<tr class=\"listRow\">\\r\\n    <td>' +\n\t((__t = ( i+1)) == null ? '' : __t) +\n\t'</td>\\r\\n    <td>' +\n\t((__t = ( it[i].loginName)) == null ? '' : __t) +\n\t'</td>\\r\\n    <td>' +\n\t((__t = ( it[i].chineseName?it[i].chineseName:\"无\")) == null ? '' : __t) +\n\t'</td>\\r\\n    <td>' +\n\t((__t = ( it[i].email)) == null ? '' : __t) +\n\t'</td>\\r\\n    <td>' +\n\t((__t = ( role)) == null ? '' : __t) +\n\t' </td>\\r\\n    <td>\\r\\n        ';\n\tif(operationType == 1 ){;\n\t__p += '\\r\\n            <button class=\"user-authBtn btn-default modifyBtn\" data-uaid=\"' +\n\t((__t = ( it[i].id)) == null ? '' : __t) +\n\t'\" data-role=\"0\">转为普通成员</button>\\r\\n        ';\n\t} else if(operationType == 0) {;\n\t__p += '\\r\\n            <button class=\"user-authBtn btn-default modifyBtn\" data-uaid=\"' +\n\t((__t = ( it[i].id)) == null ? '' : __t) +\n\t'\" data-role=\"1\" >授权管理员</button>\\r\\n        ';\n\t};\n\t__p += '\\r\\n\\r\\n\\r\\n    </td>\\r\\n</tr>\\r\\n';\n\t};\n\t__p += '\\r\\n';\n\n\t}\n\treturn __p\n\t}\n\n/***/ }\n\n});"
  },
  {
    "path": "static/entry.charts.js",
    "content": "webpackJsonp([4],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar charts = __webpack_require__(11);\n\n\tcharts.init();\n\n/***/ },\n\n/***/ 11:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($, _) {/* global _ */\n\t/**\n\t * @info 图表统计js\n\t * @author coverguo\n\t */\n\t__webpack_require__(23);\n\t__webpack_require__(141);\n\t__webpack_require__(142);\n\tvar Dialog = __webpack_require__(140);\n\n\tvar dayNumber = 0,\n\t    days = [];\n\n\tvar chart_title, chart_projects = [];\n\tvar statistics = {\n\t    init: function() {\n\t        this.bindEvent();\n\t    },\n\t    setChart: function(data) {\n\t        $('#chartsContainer').highcharts({ //图表展示容器，与div的id保持一致\n\t            chart: {\n\t                type: 'line' //指定图表的类型，默认是折线图（line）\n\t            },\n\t            title: {\n\t                text: chart_title //指定图表标题\n\t            },\n\t            xAxis: {\n\t                categories: setChartX(dayNumber)\n\t            },\n\t            yAxis: {\n\t                min: 0,\n\t                title: {\n\t                    text: '报错数量' //指定y轴的标题\n\t                }\n\t            },\n\t            series: chart_projects\n\t        });\n\t    },\n\t    bindEvent: function() {\n\t        var self = this;\n\t        $('#showCharts').bind(\"click\", function(e) {\n\t            var param = {\n\t                projectId: $(\"#select-chartBusiness\").val(),\n\t                timeScope: $(\"#select-timeScope\").val()\n\t            };\n\t            $.getJSON(\"/controller/statisticsAction/queryByChart.do\", param, function(data) {\n\t                var $options = $(\"#select-chartBusiness option\");\n\t                var $selectedOption = $(\"#select-chartBusiness\").find(\"option:selected\");\n\n\t                chart_projects = [];\n\t                dayNumber = param.timeScope == 1 ? 7 : 30;\n\t                days = setChartX(dayNumber);\n\t                var project = null;\n\t                if (param.projectId == -1) {\n\t                    var projectLength = $options.length;\n\t                    for (var i = 1; i < projectLength; i++) {\n\t                        var defaultData1 = [];\n\t                        setDefaultTotal(defaultData1, dayNumber);\n\t                        project = {\n\t                            name: $options.eq(i).text(),\n\t                            projectId: $options.eq(i).val() - 0,\n\t                            date: days,\n\t                            data: defaultData1\n\t                        };\n\t                        chart_projects.push(project);\n\t                    }\n\t                } else {\n\t                    var defaultData2 = [];\n\t                    setDefaultTotal(defaultData2, dayNumber);\n\t                    project = {\n\t                        name: $selectedOption.text(),\n\t                        projectId: $(\"#select-chartBusiness\").val() - 0,\n\t                        date: days,\n\t                        data: defaultData2\n\t                    };\n\t                    chart_projects.push(project);\n\t                }\n\n\t                //设置表格title\n\t                chart_title = $(\"#select-chartBusiness\").find(\"option:selected\").text() + $(\"#select-timeScope\").find(\"option:selected\").text() + \"统计\";\n\t                console.log(data);\n\t                sortChartData(data.data);\n\t                console.log('project', chart_projects);\n\t                self.setChart();\n\t            });\n\t        });\n\t    }\n\n\t};\n\n\tfunction setChartX(number) {\n\t    var days = [];\n\t    var nowDay = new Date() - 0;\n\n\t    for (var i = number; i > 0; i--) {\n\t        var day = nowDay - i * 1000 * 60 * 60 * 24;\n\t        days.push(_.formatDate(new Date(day), 'MM-DD'));\n\t    }\n\t    return days;\n\t}\n\n\tfunction setDefaultTotal(arr, number) {\n\t    for (var i = number; i > 0; i--) {\n\t        arr.push(0);\n\t    }\n\t}\n\n\tfunction whichDayIndex(day1) {\n\t    for (var i = 0, len = days.length; i < len; i++) {\n\t        if (day1 == days[i]) {\n\t            return i;\n\t        }\n\t    }\n\t    return false;\n\t}\n\n\tfunction sortChartData(data) {\n\n\t    for (var i = 0, len = data.length; i < len; i++) {\n\t        data[i].startDate = _.formatDate(new Date(data[i].startDate), 'MM-DD');\n\t        for (var j = 0, length = chart_projects.length; j < length; j++) {\n\t            if (data[i].projectId == chart_projects[j].projectId) {\n\t                chart_projects[j]['data'][whichDayIndex(data[i].startDate)] = data[i].total;\n\t            }\n\t        }\n\t    }\n\t}\n\n\tmodule.exports = statistics;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5), __webpack_require__(4)))\n\n/***/ },\n\n/***/ 21:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * Map\n\t * @class\n\t */\n\tfunction Map() {\n\t    this.map = {};\n\t    this.length = 0;\n\t}\n\tMap.prototype = {\n\t    constructor: Map,\n\t    /**\n\t     * has\n\t     * @param {String} key\n\t     * @returns {Boolean}\n\t     */\n\t    has: function (key) {\n\t        return (key in this.map);\n\t    },\n\t    /**\n\t     * get\n\t     * @param {String} key\n\t     * @returns {Any}\n\t     */\n\t    get: function (key) {\n\t        return this.map[key];\n\t    },\n\t    /**\n\t     * set\n\t     * @param {String} key\n\t     * @param {Any} value\n\t     */\n\t    set: function (key, value) {\n\t        !this.has(key) && this.length++;\n\t        return (this.map[key] = value);\n\t    },\n\t    /**\n\t     * count\n\t     * @returns {Number}\n\t     */\n\t    count: function () {\n\t        return this.length;\n\t    },\n\t    /**\n\t     * remove\n\t     * @param {String} key\n\t     */\n\t    remove: function (key) {\n\t        if (this.has(key)) {\n\t            this.map[key] = null;\n\t            delete this.map[key];\n\t            this.length--;\n\t        }\n\t    }\n\t};\n\n\tvar cache = new Map(), set = cache.set, uid = 0;\n\tcache.set = function (node, value) {\n\t    if (!value) {\n\t        value = node;\n\t        set.call(cache, ++uid + '', value);\n\t        return uid;\n\t    } else {\n\t        typeof node === 'string' &&\n\t        (node = $(node)[0]);\n\t        $.data(node, 'event-data', value);\n\t        return this;\n\t    }\n\t};\n\n\tfunction _key(arr) {\n\t    if (!arr) return {};\n\t    arr = arr.split(' ');\n\t    var obj = {};\n\t    for (var i = 0, l = arr.length; i < l; i++) {\n\t        obj[arr[i]] = true;\n\t    }\n\t    return obj;\n\t}\n\n\t/**\n\t * Delegator\n\t * @class\n\t * @param {Selector} container\n\t */\n\tfunction Delegator(container) {\n\t    this.container = $(container);\n\t    this.listenerMap = new Map();\n\t}\n\n\t/**\n\t * getKey\n\t * @param {Any} value\n\t * @returns {Number}\n\t */\n\tDelegator.set = cache.set;\n\t/**\n\t * cache\n\t * @class\n\t * @static\n\t */\n\tDelegator.cache = cache;\n\n\tDelegator.prototype = {\n\t    constructor: Delegator,\n\t    _getListener: function (type) {\n\t        if (this.listenerMap.has(type)) {\n\t            return this.listenerMap.get(type);\n\t        }\n\t        function listener(e) {\n\t            var data = $.data(this),\n\t                routes = data['event-' + type + '-routes'],\n\t                eventData = data['event-data'], handle, dataKey;\n\n\t            // preprocessing\n\t            if (!routes && (routes = this.getAttribute('data-event-' + type))) {\n\t                (routes = routes.split(' ')) &&\n\t                (data['event-' + type + '-routes'] = routes);\n\t                !eventData &&\n\t                (dataKey = this.getAttribute('data-event-data')) &&\n\t                (eventData = cache.get(dataKey)) &&\n\t                (data['event-data'] = eventData) &&\n\t                (cache.remove(dataKey));\n\t                !data['event-stop-propagation'] &&\n\t                (data['event-stop-propagation'] = _key(this.getAttribute('data-event-stop-propagation')));\n\t            }\n\n\t            if (routes) {\n\t                for (var i = 0, l = routes.length; i < l; i++) {\n\t                    handle = listener.handleMap.get(routes[i]);\n\n\t                    if (handle) {\n\t                        handle.call(this, e, eventData);\n\t                    }\n\t                    data['event-stop-propagation'][type] &&\n\t                    e.stopPropagation();\n\t                }\n\t            }\n\t        }\n\n\t        listener.handleMap = new Map();\n\t        this.listenerMap.set(type, listener);\n\t        this.container.on(type, '[data-event-' + type + ']', listener);\n\t        return listener;\n\t    },\n\t    /**\n\t     * on\n\t     * @param {String} type\n\t     * @param {String} name\n\t     * @param {Function} handle\n\t     */\n\t    on: function (type, name, handle) {\n\t        var listener = this._getListener(type);\n\t        listener.handleMap.set(name, handle);\n\t        return this;\n\t    },\n\t    /**\n\t     * off\n\t     * @param {String} type\n\t     * @param {String} name\n\t     */\n\t    off: function (type, name) {\n\t        var listener = this._getListener(type),\n\t            handleMap = listener.handleMap;\n\t        handleMap.remove(name);\n\t        if (!handleMap.count()) {\n\t            this.container.off(type, '[data-event-' + type + ']', listener);\n\t            this.listenerMap.remove(type);\n\t        }\n\t    }\n\t};\n\n\tmodule.exports = Delegator;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 23:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(jQuery) {/**\n\t * @preserve jQuery DateTimePicker plugin v2.4.1\n\t * @homepage http://xdsoft.net/jqplugins/datetimepicker/\n\t * (c) 2014, Chupurnov Valeriy.\n\t */\n\t/*global document,window,jQuery,setTimeout,clearTimeout*/\n\t(function ($) {\n\t\t'use strict';\n\t\tvar default_options  = {\n\t\t\ti18n: {\n\t\t\t\tar: { // Arabic\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"مايو\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"ن\", \"ث\", \"ع\", \"خ\", \"ج\", \"س\", \"ح\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tro: { // Romanian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"ianuarie\", \"februarie\", \"martie\", \"aprilie\", \"mai\", \"iunie\", \"iulie\", \"august\", \"septembrie\", \"octombrie\", \"noiembrie\", \"decembrie\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"l\", \"ma\", \"mi\", \"j\", \"v\", \"s\", \"d\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tid: { // Indonesian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\", \"Min\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tbg: { // Bulgarian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfa: { // Persian/Farsi\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tru: { // Russian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Вск\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tuk: { // Ukrainian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ндл\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Сбт\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\ten: { // English\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tel: { // Ελληνικά\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tde: { // German\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tnl: { // Dutch\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\ttr: { // Turkish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Paz\", \"Pts\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cts\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfr: { //French\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tes: { // Spanish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tth: { // Thai\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tpl: { // Polish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"styczeń\", \"luty\", \"marzec\", \"kwiecień\", \"maj\", \"czerwiec\", \"lipiec\", \"sierpień\", \"wrzesień\", \"październik\", \"listopad\", \"grudzień\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"nd\", \"pn\", \"wt\", \"śr\", \"cz\", \"pt\", \"sb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tpt: { // Portuguese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tch: { // Simplified Chinese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tse: { // Swedish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\",  \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tkr: { // Korean\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tit: { // Italian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tda: { // Dansk\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"July\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tno: { // Norwegian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tja: { // Japanese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tvi: { // Vietnamese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Tháng 1\", \"Tháng 2\", \"Tháng 3\", \"Tháng 4\", \"Tháng 5\", \"Tháng 6\", \"Tháng 7\", \"Tháng 8\", \"Tháng 9\", \"Tháng 10\", \"Tháng 11\", \"Tháng 12\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsl: { // Slovenščina\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tcs: { // Čeština\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\thu: { // Hungarian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Cs\", \"Pé\", \"Szo\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\taz: { //Azerbaijanian (Azeri)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Yanvar\", \"Fevral\", \"Mart\", \"Aprel\", \"May\", \"Iyun\", \"Iyul\", \"Avqust\", \"Sentyabr\", \"Oktyabr\", \"Noyabr\", \"Dekabr\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"B\", \"Be\", \"Ça\", \"Ç\", \"Ca\", \"C\", \"Ş\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tbs: { //Bosanski\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tca: { //Català\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dg\", \"Dl\", \"Dt\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'en-GB': { //English (British)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tet: { //\"Eesti\"\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Jaanuar\", \"Veebruar\", \"Märts\", \"Aprill\", \"Mai\", \"Juuni\", \"Juuli\", \"August\", \"September\", \"Oktoober\", \"November\", \"Detsember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\teu: { //Euskara\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Urtarrila\", \"Otsaila\", \"Martxoa\", \"Apirila\", \"Maiatza\", \"Ekaina\", \"Uztaila\", \"Abuztua\", \"Iraila\", \"Urria\", \"Azaroa\", \"Abendua\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ig.\", \"Al.\", \"Ar.\", \"Az.\", \"Og.\", \"Or.\", \"La.\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfi: { //Finnish (Suomi)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kesäkuu\", \"Heinäkuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tgl: { //Galego\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Xan\", \"Feb\", \"Maz\", \"Abr\", \"Mai\", \"Xun\", \"Xul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dec\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Xov\", \"Ven\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\thr: { //Hrvatski\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tko: { //Korean (한국어)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tlt: { //Lithuanian (lietuvių)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Sausio\", \"Vasario\", \"Kovo\", \"Balandžio\", \"Gegužės\", \"Birželio\", \"Liepos\", \"Rugpjūčio\", \"Rugsėjo\", \"Spalio\", \"Lapkričio\", \"Gruodžio\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sek\", \"Pir\", \"Ant\", \"Tre\", \"Ket\", \"Pen\", \"Šeš\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tlv: { //Latvian (Latviešu)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis \", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sv\", \"Pr\", \"Ot\", \"Tr\", \"Ct\", \"Pk\", \"St\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tmk: { //Macedonian (Македонски)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tmn: { //Mongolian (Монгол)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1-р сар\", \"2-р сар\", \"3-р сар\", \"4-р сар\", \"5-р сар\", \"6-р сар\", \"7-р сар\", \"8-р сар\", \"9-р сар\", \"10-р сар\", \"11-р сар\", \"12-р сар\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Дав\", \"Мяг\", \"Лха\", \"Пүр\", \"Бсн\", \"Бям\", \"Ням\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'pt-BR': { //Português(Brasil)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsk: { //Slovenčina\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsq: { //Albanian (Shqip)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'sr-YU': { //Serbian (Srpski)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsr: { //Serbian Cyrillic (Српски)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"јануар\", \"фебруар\", \"март\", \"април\", \"мај\", \"јун\", \"јул\", \"август\", \"септембар\", \"октобар\", \"новембар\", \"децембар\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"нед\", \"пон\", \"уто\", \"сре\", \"чет\", \"пет\", \"суб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsv: { //Svenska\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'zh-TW': { //Traditional Chinese (繁體中文)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tzh: { //Simplified Chinese (简体中文)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\the: { //Hebrew (עברית)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'א\\'', 'ב\\'', 'ג\\'', 'ד\\'', 'ה\\'', 'ו\\'', 'שבת'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\tvalue: '',\n\t\t\tlang: 'en',\n\n\t\t\tformat:\t'Y/m/d H:i',\n\t\t\tformatTime:\t'H:i',\n\t\t\tformatDate:\t'Y/m/d',\n\n\t\t\tstartDate:\tfalse, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',\n\t\t\tstep: 60,\n\t\t\tmonthChangeSpinner: true,\n\n\t\t\tcloseOnDateSelect: false,\n\t\t\tcloseOnWithoutClick: true,\n\t\t\tcloseOnInputClick: true,\n\n\t\t\ttimepicker: true,\n\t\t\tdatepicker: true,\n\t\t\tweeks: false,\n\n\t\t\tdefaultTime: false,\t// use formatTime format (ex. '10:00' for formatTime:\t'H:i')\n\t\t\tdefaultDate: false,\t// use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')\n\n\t\t\tminDate: false,\n\t\t\tmaxDate: false,\n\t\t\tminTime: false,\n\t\t\tmaxTime: false,\n\n\t\t\tallowTimes: [],\n\t\t\topened: false,\n\t\t\tinitTime: true,\n\t\t\tinline: false,\n\t\t\ttheme: '',\n\n\t\t\tonSelectDate: function () {},\n\t\t\tonSelectTime: function () {},\n\t\t\tonChangeMonth: function () {},\n\t\t\tonChangeYear: function () {},\n\t\t\tonChangeDateTime: function () {},\n\t\t\tonShow: function () {},\n\t\t\tonClose: function () {},\n\t\t\tonGenerate: function () {},\n\n\t\t\twithoutCopyright: true,\n\t\t\tinverseButton: false,\n\t\t\thours12: false,\n\t\t\tnext:\t'xdsoft_next',\n\t\t\tprev : 'xdsoft_prev',\n\t\t\tdayOfWeekStart: 0,\n\t\t\tparentID: 'body',\n\t\t\ttimeHeightInTimePicker: 25,\n\t\t\ttimepickerScrollbar: true,\n\t\t\ttodayButton: true,\n\t\t\tdefaultSelect: true,\n\n\t\t\tscrollMonth: true,\n\t\t\tscrollTime: true,\n\t\t\tscrollInput: true,\n\n\t\t\tlazyInit: false,\n\t\t\tmask: false,\n\t\t\tvalidateOnBlur: true,\n\t\t\tallowBlank: true,\n\t\t\tyearStart: 1950,\n\t\t\tyearEnd: 2050,\n\t\t\tstyle: '',\n\t\t\tid: '',\n\t\t\tfixed: false,\n\t\t\troundTime: 'round', // ceil, floor\n\t\t\tclassName: '',\n\t\t\tweekends: [],\n\t\t\tdisabledDates : [],\n\t\t\tyearOffset: 0,\n\t\t\tbeforeShowDay: null,\n\n\t\t\tenterLikeTab: true\n\t\t};\n\t\t// fix for ie8\n\t\tif (!Array.prototype.indexOf) {\n\t\t\tArray.prototype.indexOf = function (obj, start) {\n\t\t\t\tvar i, j;\n\t\t\t\tfor (i = (start || 0), j = this.length; i < j; i += 1) {\n\t\t\t\t\tif (this[i] === obj) { return i; }\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t}\n\t\tDate.prototype.countDaysInMonth = function () {\n\t\t\treturn new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();\n\t\t};\n\t\t$.fn.extend ( \"xdsoftScroller\"   ,  function (percent) {\n\t\t\treturn this.each(function () {\n\t\t\t\tvar timeboxparent = $(this),\n\t\t\t\t\tpointerEventToXY = function (e) {\n\t\t\t\t\t\tvar out = {x: 0, y: 0},\n\t\t\t\t\t\t\ttouch;\n\t\t\t\t\t\tif (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {\n\t\t\t\t\t\t\ttouch  = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];\n\t\t\t\t\t\t\tout.x = touch.clientX;\n\t\t\t\t\t\t\tout.y = touch.clientY;\n\t\t\t\t\t\t} else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {\n\t\t\t\t\t\t\tout.x = e.clientX;\n\t\t\t\t\t\t\tout.y = e.clientY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn out;\n\t\t\t\t\t},\n\t\t\t\t\tmove = 0,\n\t\t\t\t\ttimebox,\n\t\t\t\t\tparentHeight,\n\t\t\t\t\theight,\n\t\t\t\t\tscrollbar,\n\t\t\t\t\tscroller,\n\t\t\t\t\tmaximumOffset = 100,\n\t\t\t\t\tstart = false,\n\t\t\t\t\tstartY = 0,\n\t\t\t\t\tstartTop = 0,\n\t\t\t\t\th1 = 0,\n\t\t\t\t\ttouchStart = false,\n\t\t\t\t\tstartTopScroll = 0,\n\t\t\t\t\tcalcOffset = function () {};\n\t\t\t\tif (percent === 'hide') {\n\t\t\t\t\ttimeboxparent.find('.xdsoft_scrollbar').hide();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!$(this).hasClass('xdsoft_scroller_box')) {\n\t\t\t\t\ttimebox = timeboxparent.children().eq(0);\n\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\tscrollbar = $('<div class=\"xdsoft_scrollbar\"></div>');\n\t\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>');\n\t\t\t\t\tscrollbar.append(scroller);\n\n\t\t\t\t\ttimeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);\n\t\t\t\t\tcalcOffset = function calcOffset(event) {\n\t\t\t\t\t\tvar offset = pointerEventToXY(event).y - startY + startTopScroll;\n\t\t\t\t\t\tif (offset < 0) {\n\t\t\t\t\t\t\toffset = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (offset + scroller[0].offsetHeight > h1) {\n\t\t\t\t\t\t\toffset = h1 - scroller[0].offsetHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);\n\t\t\t\t\t};\n\n\t\t\t\t\tscroller\n\t\t\t\t\t\t.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {\n\t\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstartY = pointerEventToXY(event).y;\n\t\t\t\t\t\t\tstartTopScroll = parseInt(scroller.css('margin-top'), 10);\n\t\t\t\t\t\t\th1 = scrollbar[0].offsetHeight;\n\n\t\t\t\t\t\t\tif (event.type === 'mousedown') {\n\t\t\t\t\t\t\t\tif (document) {\n\t\t\t\t\t\t\t\t\t$(document.body).addClass('xdsoft_noselect');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft_scroller', function arguments_callee() {\n\t\t\t\t\t\t\t\t\t$([document.body, window]).off('mouseup.xdsoft_scroller', arguments_callee)\n\t\t\t\t\t\t\t\t\t\t.off('mousemove.xdsoft_scroller', calcOffset)\n\t\t\t\t\t\t\t\t\t\t.removeClass('xdsoft_noselect');\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t$(document.body).on('mousemove.xdsoft_scroller', calcOffset);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttouchStart = true;\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('touchmove', function (event) {\n\t\t\t\t\t\t\tif (touchStart) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tcalcOffset(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('touchend touchcancel', function (event) {\n\t\t\t\t\t\t\ttouchStart =  false;\n\t\t\t\t\t\t\tstartTopScroll = 0;\n\t\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent\n\t\t\t\t\t\t.on('scroll_element.xdsoft_scroller', function (event, percentage) {\n\t\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpercentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;\n\n\t\t\t\t\t\t\tscroller.css('margin-top', maximumOffset * percentage);\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {\n\t\t\t\t\t\t\tvar percent, sh;\n\t\t\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\t\tpercent = parentHeight / height;\n\t\t\t\t\t\t\tsh = percent * scrollbar[0].offsetHeight;\n\t\t\t\t\t\t\tif (percent > 1) {\n\t\t\t\t\t\t\t\tscroller.hide();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tscroller.show();\n\t\t\t\t\t\t\t\tscroller.css('height', parseInt(sh > 10 ? sh : 10, 10));\n\t\t\t\t\t\t\t\tmaximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;\n\t\t\t\t\t\t\t\tif (noTriggerScroll !== true) {\n\t\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('mousewheel', function (event) {\n\t\t\t\t\t\tvar top = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\n\t\t\t\t\t\ttop = top - (event.deltaY * 20);\n\t\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchstart', function (event) {\n\t\t\t\t\t\tstart = pointerEventToXY(event);\n\t\t\t\t\t\tstartTop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchmove', function (event) {\n\t\t\t\t\t\tif (start) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tvar coord = pointerEventToXY(event);\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchend touchcancel', function (event) {\n\t\t\t\t\t\tstart = false;\n\t\t\t\t\t\tstartTop = 0;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t\t});\n\t\t});\n\n\t\t$.fn.extend ( \"datetimepicker\" , function (opt) {\n\t\t\tvar KEY0 = 48,\n\t\t\t\tKEY9 = 57,\n\t\t\t\t_KEY0 = 96,\n\t\t\t\t_KEY9 = 105,\n\t\t\t\tCTRLKEY = 17,\n\t\t\t\tDEL = 46,\n\t\t\t\tENTER = 13,\n\t\t\t\tESC = 27,\n\t\t\t\tBACKSPACE = 8,\n\t\t\t\tARROWLEFT = 37,\n\t\t\t\tARROWUP = 38,\n\t\t\t\tARROWRIGHT = 39,\n\t\t\t\tARROWDOWN = 40,\n\t\t\t\tTAB = 9,\n\t\t\t\tF5 = 116,\n\t\t\t\tAKEY = 65,\n\t\t\t\tCKEY = 67,\n\t\t\t\tVKEY = 86,\n\t\t\t\tZKEY = 90,\n\t\t\t\tYKEY = 89,\n\t\t\t\tctrlDown\t=\tfalse,\n\t\t\t\toptions = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),\n\n\t\t\t\tlazyInitTimer = 0,\n\t\t\t\tcreateDateTimePicker,\n\t\t\t\tdestroyDateTimePicker,\n\t\t\t\t_xdsoft_datetime,\n\n\t\t\t\tlazyInit = function (input) {\n\t\t\t\t\tinput\n\t\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function initOnActionCallback(event) {\n\t\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclearTimeout(lazyInitTimer);\n\t\t\t\t\t\t\tlazyInitTimer = setTimeout(function () {\n\n\t\t\t\t\t\t\t\tif (!input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\t\t\tcreateDateTimePicker(input);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t\t\t.off('open.xdsoft focusin.xdsoft mousedown.xdsoft', initOnActionCallback)\n\t\t\t\t\t\t\t\t\t.trigger('open.xdsoft');\n\t\t\t\t\t\t\t}, 100);\n\t\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\tcreateDateTimePicker = function (input) {\n\t\t\t\tvar datetimepicker = $('<div ' + (options.id ? 'id=\"' + options.id + '\"' : '') + ' ' + (options.style ? 'style=\"' + options.style + '\"' : '') + ' class=\"xdsoft_datetimepicker xdsoft_' + options.theme + ' xdsoft_noselect ' + (options.weeks ? ' xdsoft_showweeks' : '') + options.className + '\"></div>'),\n\t\t\t\t\txdsoft_copyright = $('<div class=\"xdsoft_copyright\"><a target=\"_blank\" href=\"http://xdsoft.net/jqplugins/datetimepicker/\">xdsoft.net</a></div>'),\n\t\t\t\t\tdatepicker = $('<div class=\"xdsoft_datepicker active\"></div>'),\n\t\t\t\t\tmounth_picker = $('<div class=\"xdsoft_mounthpicker\"><button type=\"button\" class=\"xdsoft_prev\"></button><button type=\"button\" class=\"xdsoft_today_button\"></button>' +\n\t\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_month\"><span></span><i></i></div>' +\n\t\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_year\"><span></span><i></i></div>' +\n\t\t\t\t\t\t'<button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\t\tcalendar = $('<div class=\"xdsoft_calendar\"></div>'),\n\t\t\t\t\ttimepicker = $('<div class=\"xdsoft_timepicker active\"><button type=\"button\" class=\"xdsoft_prev\"></button><div class=\"xdsoft_time_box\"></div><button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\t\ttimeboxparent = timepicker.find('.xdsoft_time_box').eq(0),\n\t\t\t\t\ttimebox = $('<div class=\"xdsoft_time_variant\"></div>'),\n\t\t\t\t\t/*scrollbar = $('<div class=\"xdsoft_scrollbar\"></div>'),\n\t\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>'),*/\n\t\t\t\t\tmonthselect = $('<div class=\"xdsoft_select xdsoft_monthselect\"><div></div></div>'),\n\t\t\t\t\tyearselect = $('<div class=\"xdsoft_select xdsoft_yearselect\"><div></div></div>'),\n\t\t\t\t\ttriggerAfterOpen = false,\n\t\t\t\t\tXDSoft_datetime,\n\t\t\t\t\t//scroll_element,\n\t\t\t\t\txchangeTimer,\n\t\t\t\t\ttimerclick,\n\t\t\t\t\tcurrent_time_index,\n\t\t\t\t\tsetPos,\n\t\t\t\t\ttimer = 0,\n\t\t\t\t\ttimer1 = 0;\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_month span')\n\t\t\t\t\t\t.after(monthselect);\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_year span')\n\t\t\t\t\t\t.after(yearselect);\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tvar select = $(this).find('.xdsoft_select').eq(0),\n\t\t\t\t\t\t\tval = 0,\n\t\t\t\t\t\t\ttop = 0,\n\t\t\t\t\t\t\tvisible = select.is(':visible'),\n\t\t\t\t\t\t\titems,\n\t\t\t\t\t\t\ti;\n\n\t\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t\t\t.hide();\n\t\t\t\t\t\tif (_xdsoft_datetime.currentTime) {\n\t\t\t\t\t\t\tval = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselect[visible ? 'hide' : 'show']();\n\t\t\t\t\t\tfor (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {\n\t\t\t\t\t\t\tif (items.eq(i).data('value') === val) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttop += items[0].offsetHeight;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselect.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t.xdsoftScroller()\n\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t})\n\t\t\t\t\t.on('mousedown.xdsoft', '.xdsoft_option', function (event) {\n\t\t\t\t\t\tvar year = _xdsoft_datetime.currentTime.getFullYear();\n\t\t\t\t\t\tif (_xdsoft_datetime && _xdsoft_datetime.currentTime) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$(this).parent().parent().hide();\n\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tdatetimepicker.setOptions = function (_options) {\n\t\t\t\t\toptions = $.extend(true, {}, options, _options);\n\n\t\t\t\t\tif (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {\n\t\t\t\t\t\toptions.allowTimes = $.extend(true, [], _options.allowTimes);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {\n\t\t\t\t\t\toptions.weekends = $.extend(true, [], _options.weekends);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {\n\t                    options.disabledDates = $.extend(true, [], _options.disabledDates);\n\t                }\n\n\t\t\t\t\tif ((options.open || options.opened) && (!options.inline)) {\n\t\t\t\t\t\tinput.trigger('open.xdsoft');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.inline) {\n\t\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\t\tdatetimepicker.addClass('xdsoft_inline');\n\t\t\t\t\t\tinput.after(datetimepicker).hide();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.inverseButton) {\n\t\t\t\t\t\toptions.next = 'xdsoft_prev';\n\t\t\t\t\t\toptions.prev = 'xdsoft_next';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.datepicker) {\n\t\t\t\t\t\tdatepicker.addClass('active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatepicker.removeClass('active');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.timepicker) {\n\t\t\t\t\t\ttimepicker.addClass('active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimepicker.removeClass('active');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.value) {\n\t\t\t\t\t\tif (input && input.val) {\n\t\t\t\t\t\t\tinput.val(options.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(options.value);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isNaN(options.dayOfWeekStart)) {\n\t\t\t\t\t\toptions.dayOfWeekStart = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!options.timepickerScrollbar) {\n\t\t\t\t\t\ttimeboxparent.xdsoftScroller('hide');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.minDate && /^-(.*)$/.test(options.minDate)) {\n\t\t\t\t\t\toptions.minDate = _xdsoft_datetime.strToDateTime(options.minDate).dateFormat(options.formatDate);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.maxDate &&  /^\\+(.*)$/.test(options.maxDate)) {\n\t\t\t\t\t\toptions.maxDate = _xdsoft_datetime.strToDateTime(options.maxDate).dateFormat(options.formatDate);\n\t\t\t\t\t}\n\n\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t\t\t\t.css('visibility', !options.todayButton ? 'hidden' : 'visible');\n\n\t\t\t\t\tif (options.mask) {\n\t\t\t\t\t\tvar e,\n\t\t\t\t\t\t\tgetCaretPos = function (input) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tif (document.selection && document.selection.createRange) {\n\t\t\t\t\t\t\t\t\t\tvar range = document.selection.createRange();\n\t\t\t\t\t\t\t\t\t\treturn range.getBookmark().charCodeAt(2) - 2;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (input.setSelectionRange) {\n\t\t\t\t\t\t\t\t\t\treturn input.selectionStart;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetCaretPos = function (node, pos) {\n\t\t\t\t\t\t\t\tnode = (typeof node === \"string\" || node instanceof String) ? document.getElementById(node) : node;\n\t\t\t\t\t\t\t\tif (!node) {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (node.createTextRange) {\n\t\t\t\t\t\t\t\t\tvar textRange = node.createTextRange();\n\t\t\t\t\t\t\t\t\ttextRange.collapse(true);\n\t\t\t\t\t\t\t\t\ttextRange.moveEnd('character', pos);\n\t\t\t\t\t\t\t\t\ttextRange.moveStart('character', pos);\n\t\t\t\t\t\t\t\t\ttextRange.select();\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (node.setSelectionRange) {\n\t\t\t\t\t\t\t\t\tnode.setSelectionRange(pos, pos);\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisValidValue = function (mask, value) {\n\t\t\t\t\t\t\t\tvar reg = mask\n\t\t\t\t\t\t\t\t\t.replace(/([\\[\\]\\/\\{\\}\\(\\)\\-\\.\\+]{1})/g, '\\\\$1')\n\t\t\t\t\t\t\t\t\t.replace(/_/g, '{digit+}')\n\t\t\t\t\t\t\t\t\t.replace(/([0-9]{1})/g, '{digit$1}')\n\t\t\t\t\t\t\t\t\t.replace(/\\{digit([0-9]{1})\\}/g, '[0-$1_]{1}')\n\t\t\t\t\t\t\t\t\t.replace(/\\{digit[\\+]\\}/g, '[0-9_]{1}');\n\t\t\t\t\t\t\t\treturn (new RegExp(reg)).test(value);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tinput.off('keydown.xdsoft');\n\n\t\t\t\t\t\tif (options.mask === true) {\n\t\t\t\t\t\t\toptions.mask = options.format\n\t\t\t\t\t\t\t\t.replace(/Y/g, '9999')\n\t\t\t\t\t\t\t\t.replace(/F/g, '9999')\n\t\t\t\t\t\t\t\t.replace(/m/g, '19')\n\t\t\t\t\t\t\t\t.replace(/d/g, '39')\n\t\t\t\t\t\t\t\t.replace(/H/g, '29')\n\t\t\t\t\t\t\t\t.replace(/i/g, '59')\n\t\t\t\t\t\t\t\t.replace(/s/g, '59');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($.type(options.mask) === 'string') {\n\t\t\t\t\t\t\tif (!isValidValue(options.mask, input.val())) {\n\t\t\t\t\t\t\t\tinput.val(options.mask.replace(/[0-9]/g, '_'));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tinput.on('keydown.xdsoft', function (event) {\n\t\t\t\t\t\t\t\tvar val = this.value,\n\t\t\t\t\t\t\t\t\tkey = event.which,\n\t\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\t\tdigit;\n\n\t\t\t\t\t\t\t\tif (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {\n\t\t\t\t\t\t\t\t\tpos = getCaretPos(this);\n\t\t\t\t\t\t\t\t\tdigit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';\n\n\t\t\t\t\t\t\t\t\tif ((key === BACKSPACE || key === DEL) && pos) {\n\t\t\t\t\t\t\t\t\t\tpos -= 1;\n\t\t\t\t\t\t\t\t\t\tdigit = '_';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? -1 : 1;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tval = val.substr(0, pos) + digit + val.substr(pos + 1);\n\t\t\t\t\t\t\t\t\tif ($.trim(val) === '') {\n\t\t\t\t\t\t\t\t\t\tval = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (pos === options.mask.length) {\n\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? 0 : 1;\n\t\t\t\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? -1 : 1;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (isValidValue(options.mask, val)) {\n\t\t\t\t\t\t\t\t\t\tthis.value = val;\n\t\t\t\t\t\t\t\t\t\tsetCaretPos(this, pos);\n\t\t\t\t\t\t\t\t\t} else if ($.trim(val) === '') {\n\t\t\t\t\t\t\t\t\t\tthis.value = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tinput.trigger('error_input.xdsoft');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (options.validateOnBlur) {\n\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t.off('blur.xdsoft')\n\t\t\t\t\t\t\t.on('blur.xdsoft', function () {\n\t\t\t\t\t\t\t\tif (options.allowBlank && !$.trim($(this).val()).length) {\n\t\t\t\t\t\t\t\t\t$(this).val(null);\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').empty();\n\t\t\t\t\t\t\t\t} else if (!Date.parseDate($(this).val(), options.format)) {\n\t\t\t\t\t\t\t\t\t$(this).val((_xdsoft_datetime.now()).dateFormat(options.format));\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\toptions.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;\n\n\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t.trigger('xchange.xdsoft')\n\t\t\t\t\t\t.trigger('afterOpen.xdsoft');\n\t\t\t\t};\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.data('options', options)\n\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tyearselect.hide();\n\t\t\t\t\t\tmonthselect.hide();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\t//scroll_element = timepicker.find('.xdsoft_time_box');\n\t\t\t\ttimeboxparent.append(timebox);\n\t\t\t\ttimeboxparent.xdsoftScroller();\n\n\t\t\t\tdatetimepicker.on('afterOpen.xdsoft', function () {\n\t\t\t\t\ttimeboxparent.xdsoftScroller();\n\t\t\t\t});\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.append(datepicker)\n\t\t\t\t\t.append(timepicker);\n\n\t\t\t\tif (options.withoutCopyright !== true) {\n\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t.append(xdsoft_copyright);\n\t\t\t\t}\n\n\t\t\t\tdatepicker\n\t\t\t\t\t.append(mounth_picker)\n\t\t\t\t\t.append(calendar);\n\n\t\t\t\t$(options.parentID)\n\t\t\t\t\t.append(datetimepicker);\n\n\t\t\t\tXDSoft_datetime = function () {\n\t\t\t\t\tvar _this = this;\n\t\t\t\t\t_this.now = function (norecursion) {\n\t\t\t\t\t\tvar d = new Date(),\n\t\t\t\t\t\t\tdate,\n\t\t\t\t\t\t\ttime;\n\n\t\t\t\t\t\tif (!norecursion && options.defaultDate) {\n\t\t\t\t\t\t\tdate = _this.strToDate(options.defaultDate);\n\t\t\t\t\t\t\td.setFullYear(date.getFullYear());\n\t\t\t\t\t\t\td.setMonth(date.getMonth());\n\t\t\t\t\t\t\td.setDate(date.getDate());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.yearOffset) {\n\t\t\t\t\t\t\td.setFullYear(d.getFullYear() + options.yearOffset);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!norecursion && options.defaultTime) {\n\t\t\t\t\t\t\ttime = _this.strtotime(options.defaultTime);\n\t\t\t\t\t\t\td.setHours(time.getHours());\n\t\t\t\t\t\t\td.setMinutes(time.getMinutes());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.isValidDate = function (d) {\n\t\t\t\t\t\tif (Object.prototype.toString.call(d) !== \"[object Date]\") {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn !isNaN(d.getTime());\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.setCurrentTime = function (dTime) {\n\t\t\t\t\t\t_this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.empty = function () {\n\t\t\t\t\t\t_this.currentTime = null;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.getCurrentTime = function (dTime) {\n\t\t\t\t\t\treturn _this.currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.nextMonth = function () {\n\t\t\t\t\t\tvar month = _this.currentTime.getMonth() + 1,\n\t\t\t\t\t\t\tyear;\n\t\t\t\t\t\tif (month === 12) {\n\t\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);\n\t\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tyear = _this.currentTime.getFullYear();\n\n\t\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\t_this.currentTime.setMonth(month);\n\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\treturn month;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.prevMonth = function () {\n\t\t\t\t\t\tvar month = _this.currentTime.getMonth() - 1;\n\t\t\t\t\t\tif (month === -1) {\n\t\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);\n\t\t\t\t\t\t\tmonth = 11;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\t_this.currentTime.setMonth(month);\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\treturn month;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.getWeekOfYear = function (datetime) {\n\t\t\t\t\t\tvar onejan = new Date(datetime.getFullYear(), 0, 1);\n\t\t\t\t\t\treturn Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strToDateTime = function (sDateTime) {\n\t\t\t\t\t\tvar tmpDate = [], timeOffset, currentTime;\n\n\t\t\t\t\t\tif (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {\n\t\t\t\t\t\t\treturn sDateTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttmpDate = /^(\\+|\\-)(.*)$/.exec(sDateTime);\n\t\t\t\t\t\tif (tmpDate) {\n\t\t\t\t\t\t\ttmpDate[2] = Date.parseDate(tmpDate[2], options.formatDate);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tmpDate  && tmpDate[2]) {\n\t\t\t\t\t\t\ttimeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;\n\t\t\t\t\t\t\tcurrentTime = new Date((_xdsoft_datetime.now()).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentTime = sDateTime ? Date.parseDate(sDateTime, options.format) : _this.now();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strToDate = function (sDate) {\n\t\t\t\t\t\tif (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {\n\t\t\t\t\t\t\treturn sDate;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar currentTime = sDate ? Date.parseDate(sDate, options.formatDate) : _this.now(true);\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strtotime = function (sTime) {\n\t\t\t\t\t\tif (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {\n\t\t\t\t\t\t\treturn sTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar currentTime = sTime ? Date.parseDate(sTime, options.formatTime) : _this.now(true);\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.str = function () {\n\t\t\t\t\t\treturn _this.currentTime.dateFormat(options.format);\n\t\t\t\t\t};\n\t\t\t\t\t_this.currentTime = this.now();\n\t\t\t\t};\n\n\t\t\t\t_xdsoft_datetime = new XDSoft_datetime();\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(0);\n\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t\t}).on('dblclick.xdsoft', function () {\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t});\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\t\tstop = false;\n\n\t\t\t\t\t\t(function arguments_callee1(v) {\n\t\t\t\t\t\t\tvar month =  _xdsoft_datetime.currentTime.getMonth();\n\t\t\t\t\t\t\tif ($this.hasClass(options.next)) {\n\t\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t\t\t} else if ($this.hasClass(options.prev)) {\n\t\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (options.monthChangeSpinner) {\n\t\t\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee1, v || 100);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}(500));\n\n\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft', function arguments_callee2() {\n\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t\t$([document.body, window]).off('mouseup.xdsoft', arguments_callee2);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\ttimepicker\n\t\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\t\tstop = false,\n\t\t\t\t\t\t\tperiod = 110;\n\t\t\t\t\t\t(function arguments_callee4(v) {\n\t\t\t\t\t\t\tvar pheight = timeboxparent[0].clientHeight,\n\t\t\t\t\t\t\t\theight = timebox[0].offsetHeight,\n\t\t\t\t\t\t\t\ttop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t\t\t\tif ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t\t} else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]);\n\t\t\t\t\t\t\tperiod = (period > 10) ? 10 : period - 10;\n\t\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee4, v || period);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}(500));\n\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft', function arguments_callee5() {\n\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t\t$([document.body, window])\n\t\t\t\t\t\t\t\t.off('mouseup.xdsoft', arguments_callee5);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\txchangeTimer = 0;\n\t\t\t\t// base handler - generating a calendar and timepicker\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('xchange.xdsoft', function (event) {\n\t\t\t\t\t\tclearTimeout(xchangeTimer);\n\t\t\t\t\t\txchangeTimer = setTimeout(function () {\n\t\t\t\t\t\t\tvar table =\t'',\n\t\t\t\t\t\t\t\tstart = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),\n\t\t\t\t\t\t\t\ti = 0,\n\t\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\t\ttoday = _xdsoft_datetime.now(),\n\t\t\t\t\t\t\t\tmaxDate = false,\n\t\t\t\t\t\t\t\tminDate = false,\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tm,\n\t\t\t\t\t\t\t\tw,\n\t\t\t\t\t\t\t\tclasses = [],\n\t\t\t\t\t\t\t\tcustomDateSettings,\n\t\t\t\t\t\t\t\tnewRow = true,\n\t\t\t\t\t\t\t\ttime = '',\n\t\t\t\t\t\t\t\th = '',\n\t\t\t\t\t\t\t\tline_time;\n\n\t\t\t\t\t\t\twhile (start.getDay() !== options.dayOfWeekStart) {\n\t\t\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttable += '<table><thead><tr>';\n\n\t\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\t\ttable += '<th></th>';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (j = 0; j < 7; j += 1) {\n\t\t\t\t\t\t\t\ttable += '<th>' + options.i18n[options.lang].dayOfWeek[(j + options.dayOfWeekStart) % 7] + '</th>';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttable += '</tr></thead>';\n\t\t\t\t\t\t\ttable += '<tbody>';\n\n\t\t\t\t\t\t\tif (options.maxDate !== false) {\n\t\t\t\t\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\n\t\t\t\t\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (options.minDate !== false) {\n\t\t\t\t\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\n\t\t\t\t\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twhile (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {\n\t\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\t\ti += 1;\n\n\t\t\t\t\t\t\t\td = start.getDate();\n\t\t\t\t\t\t\t\ty = start.getFullYear();\n\t\t\t\t\t\t\t\tm = start.getMonth();\n\t\t\t\t\t\t\t\tw = _xdsoft_datetime.getWeekOfYear(start);\n\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_date');\n\n\t\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {\n\t\t\t\t\t\t\t\t\tcustomDateSettings = options.beforeShowDay.call(datetimepicker, start);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcustomDateSettings = null;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t} else if (options.disabledDates.indexOf(start.dateFormat(options.formatDate)) !== -1) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (customDateSettings && customDateSettings[1] !== \"\") {\n\t\t\t\t\t\t\t\t\tclasses.push(customDateSettings[1]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (_xdsoft_datetime.currentTime.getMonth() !== m) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_other_month');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ((options.defaultSelect || datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (today.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(start.dateFormat(options.formatDate)) === -1) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_weekend');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {\n\t\t\t\t\t\t\t\t\tclasses.push(options.beforeShowDay(start));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (newRow) {\n\t\t\t\t\t\t\t\t\ttable += '<tr>';\n\t\t\t\t\t\t\t\t\tnewRow = false;\n\t\t\t\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\t\t\t\ttable += '<th>' + w + '</th>';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttable += '<td data-date=\"' + d + '\" data-month=\"' + m + '\" data-year=\"' + y + '\"' + ' class=\"xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '\">' +\n\t\t\t\t\t\t\t\t\t\t\t'<div>' + d + '</div>' +\n\t\t\t\t\t\t\t\t\t\t'</td>';\n\n\t\t\t\t\t\t\t\tif (start.getDay() === options.dayOfWeekStartPrev) {\n\t\t\t\t\t\t\t\t\ttable += '</tr>';\n\t\t\t\t\t\t\t\t\tnewRow = true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart.setDate(d + 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable += '</tbody></table>';\n\n\t\t\t\t\t\t\tcalendar.html(table);\n\n\t\t\t\t\t\t\tmounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[options.lang].months[_xdsoft_datetime.currentTime.getMonth()]);\n\t\t\t\t\t\t\tmounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());\n\n\t\t\t\t\t\t\t// generate timebox\n\t\t\t\t\t\t\ttime = '';\n\t\t\t\t\t\t\th = '';\n\t\t\t\t\t\t\tm = '';\n\t\t\t\t\t\t\tline_time = function line_time(h, m) {\n\t\t\t\t\t\t\t\tvar now = _xdsoft_datetime.now();\n\t\t\t\t\t\t\t\tnow.setHours(h);\n\t\t\t\t\t\t\t\th = parseInt(now.getHours(), 10);\n\t\t\t\t\t\t\t\tnow.setMinutes(m);\n\t\t\t\t\t\t\t\tm = parseInt(now.getMinutes(), 10);\n\t\t\t\t\t\t\t\tvar optionDateTime = new Date(_xdsoft_datetime.currentTime)\n\t\t\t\t\t\t\t\toptionDateTime.setHours(h);\n\t\t\t\t\t\t\t\toptionDateTime.setMinutes(m);\n\t\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\t\tif((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && parseInt(_xdsoft_datetime.currentTime.getHours(), 10) === parseInt(h, 10) && (options.step > 59 || Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step === parseInt(m, 10))) {\n\t\t\t\t\t\t\t\t\tif (options.defaultSelect || datetimepicker.data('changed')) {\n\t\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t\t\t} else if (options.initTime) {\n\t\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_init_time');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime += '<div class=\"xdsoft_time ' + classes.join(' ') + '\" data-hour=\"' + h + '\" data-minute=\"' + m + '\">' + now.dateFormat(options.formatTime) + '</div>';\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {\n\t\t\t\t\t\t\t\tfor (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < 60; j += options.step) {\n\t\t\t\t\t\t\t\t\t\th = (i < 10 ? '0' : '') + i;\n\t\t\t\t\t\t\t\t\t\tm = (j < 10 ? '0' : '') + j;\n\t\t\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfor (i = 0; i < options.allowTimes.length; i += 1) {\n\t\t\t\t\t\t\t\t\th = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();\n\t\t\t\t\t\t\t\t\tm = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();\n\t\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttimebox.html(time);\n\n\t\t\t\t\t\t\topt = '';\n\t\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\t\t\tfor (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) {\n\t\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + i + '</div>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyearselect.children().eq(0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.html(opt);\n\n\t\t\t\t\t\t\tfor (i = 0, opt = ''; i <= 11; i += 1) {\n\t\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + options.i18n[options.lang].months[i] + '</div>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmonthselect.children().eq(0).html(opt);\n\t\t\t\t\t\t\t$(datetimepicker)\n\t\t\t\t\t\t\t\t.trigger('generate.xdsoft');\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t})\n\t\t\t\t\t.on('afterOpen.xdsoft', function () {\n\t\t\t\t\t\tif (options.timepicker) {\n\t\t\t\t\t\t\tvar classType, pheight, height, top;\n\t\t\t\t\t\t\tif (timebox.find('.xdsoft_current').length) {\n\t\t\t\t\t\t\t\tclassType = '.xdsoft_current';\n\t\t\t\t\t\t\t} else if (timebox.find('.xdsoft_init_time').length) {\n\t\t\t\t\t\t\t\tclassType = '.xdsoft_init_time';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (classType) {\n\t\t\t\t\t\t\t\tpheight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\t\t\ttop = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;\n\t\t\t\t\t\t\t\tif ((height - pheight) < top) {\n\t\t\t\t\t\t\t\t\ttop = height - pheight;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\ttimerclick = 0;\n\t\t\t\tcalendar\n\t\t\t\t\t.on('click.xdsoft', 'td', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();  // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap\n\t\t\t\t\t\ttimerclick += 1;\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentTime.setDate(1);\n\t\t\t\t\t\tcurrentTime.setFullYear($this.data('year'));\n\t\t\t\t\t\tcurrentTime.setMonth($this.data('month'));\n\t\t\t\t\t\tcurrentTime.setDate($this.data('date'));\n\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\tif ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === 0 && !options.timepicker))) && !options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onSelectDate &&\t$.isFunction(options.onSelectDate)) {\n\t\t\t\t\t\t\toptions.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\ttimerclick = 0;\n\t\t\t\t\t\t}, 200);\n\t\t\t\t\t});\n\n\t\t\t\ttimebox\n\t\t\t\t\t.on('click.xdsoft', 'div', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentTime.setHours($this.data('hour'));\n\t\t\t\t\t\tcurrentTime.setMinutes($this.data('minute'));\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\t\tdatetimepicker.data('input').val(_xdsoft_datetime.str());\n\t\t\t\t\t\tif (!options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onSelectTime && $.isFunction(options.onSelectTime)) {\n\t\t\t\t\t\t\toptions.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t});\n\n\n\t\t\t\tdatepicker\n\t\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\t\tif (!options.scrollMonth) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.deltaY < 0) {\n\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\tinput\n\t\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\t\tif (!options.scrollInput) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!options.datepicker && options.timepicker) {\n\t\t\t\t\t\t\tcurrent_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;\n\t\t\t\t\t\t\tif (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {\n\t\t\t\t\t\t\t\tcurrent_time_index += event.deltaY;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (timebox.children().eq(current_time_index).length) {\n\t\t\t\t\t\t\t\ttimebox.children().eq(current_time_index).trigger('mousedown');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.datepicker && !options.timepicker) {\n\t\t\t\t\t\t\tdatepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);\n\t\t\t\t\t\t\tif (input.val) {\n\t\t\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('changedatetime.xdsoft', function (event) {\n\t\t\t\t\t\tif (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {\n\t\t\t\t\t\t\tvar $input = datetimepicker.data('input');\n\t\t\t\t\t\t\toptions.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);\n\t\t\t\t\t\t\tdelete options.value;\n\t\t\t\t\t\t\t$input.trigger('change');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('generate.xdsoft', function () {\n\t\t\t\t\t\tif (options.onGenerate && $.isFunction(options.onGenerate)) {\n\t\t\t\t\t\t\toptions.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (triggerAfterOpen) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t\t\t\ttriggerAfterOpen = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('click.xdsoft', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t\t});\n\n\t\t\t\tcurrent_time_index = 0;\n\n\t\t\t\tsetPos = function () {\n\t\t\t\t\tvar offset = datetimepicker.data('input').offset(), top = offset.top + datetimepicker.data('input')[0].offsetHeight - 1, left = offset.left, position = \"position\";\n\t\t\t\t\tif (options.fixed) {\n\t\t\t\t\t\ttop -= $(window).scrollTop();\n\t\t\t\t\t\tleft -= $(window).scrollLeft();\n\t\t\t\t\t\tposition = \"fixed\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (top + datetimepicker[0].offsetHeight > $(window).height() + $(window).scrollTop()) {\n\t\t\t\t\t\t\ttop = offset.top - datetimepicker[0].offsetHeight + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (left + datetimepicker[0].offsetWidth > $(window).width()) {\n\t\t\t\t\t\t\tleft = $(window).width() - datetimepicker[0].offsetWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdatetimepicker.css({\n\t\t\t\t\t\tleft: left,\n\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\tposition: position\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('open.xdsoft', function (event) {\n\t\t\t\t\t\tvar onShow = true;\n\t\t\t\t\t\tif (options.onShow && $.isFunction(options.onShow)) {\n\t\t\t\t\t\t\tonShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (onShow !== false) {\n\t\t\t\t\t\t\tdatetimepicker.show();\n\t\t\t\t\t\t\tsetPos();\n\t\t\t\t\t\t\t$(window)\n\t\t\t\t\t\t\t\t.off('resize.xdsoft', setPos)\n\t\t\t\t\t\t\t\t.on('resize.xdsoft', setPos);\n\n\t\t\t\t\t\t\tif (options.closeOnWithoutClick) {\n\t\t\t\t\t\t\t\t$([document.body, window]).on('mousedown.xdsoft', function arguments_callee6() {\n\t\t\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\t\t\t$([document.body, window]).off('mousedown.xdsoft', arguments_callee6);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('close.xdsoft', function (event) {\n\t\t\t\t\t\tvar onClose = true;\n\t\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t\t\t\t.hide();\n\t\t\t\t\t\tif (options.onClose && $.isFunction(options.onClose)) {\n\t\t\t\t\t\t\tonClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (onClose !== false && !options.opened && !options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t})\n\t\t\t\t\t.on('toggle.xdsoft', function (event) {\n\t\t\t\t\t\tif (datetimepicker.is(':visible')) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.data('input', input);\n\n\t\t\t\ttimer = 0;\n\t\t\t\ttimer1 = 0;\n\n\t\t\t\tdatetimepicker.data('xdsoft_datetime', _xdsoft_datetime);\n\t\t\t\tdatetimepicker.setOptions(options);\n\n\t\t\t\tfunction getCurrentValue() {\n\n\t\t\t\t\tvar ct = false, time;\n\n\t\t\t\t\tif (options.startDate) {\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.startDate);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tct = options.value || ((input && input.val && input.val()) ? input.val() : '');\n\t\t\t\t\t\tif (ct) {\n\t\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(ct);\n\t\t\t\t\t\t} else if (options.defaultDate) {\n\t\t\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.defaultDate);\n\t\t\t\t\t\t\tif (options.defaultTime) {\n\t\t\t\t\t\t\t\ttime = _xdsoft_datetime.strtotime(options.defaultTime);\n\t\t\t\t\t\t\t\tct.setHours(time.getHours());\n\t\t\t\t\t\t\t\tct.setMinutes(time.getMinutes());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ct && _xdsoft_datetime.isValidDate(ct)) {\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tct = '';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ct || 0;\n\t\t\t\t}\n\n\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\t\tinput\n\t\t\t\t\t.data('xdsoft_datetimepicker', datetimepicker)\n\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\ttimer = setTimeout(function () {\n\t\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible')) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t})\n\t\t\t\t\t.on('keydown.xdsoft', function (event) {\n\t\t\t\t\t\tvar val = this.value, elementSelector,\n\t\t\t\t\t\t\tkey = event.which;\n\t\t\t\t\t\tif ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {\n\t\t\t\t\t\t\telementSelector = $(\"input:visible,textarea:visible\");\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\telementSelector.eq(elementSelector.index(this) + 1).focus();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ([TAB].indexOf(key) !== -1) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t};\n\t\t\tdestroyDateTimePicker = function (input) {\n\t\t\t\tvar datetimepicker = input.data('xdsoft_datetimepicker');\n\t\t\t\tif (datetimepicker) {\n\t\t\t\t\tdatetimepicker.data('xdsoft_datetime', null);\n\t\t\t\t\tdatetimepicker.remove();\n\t\t\t\t\tinput\n\t\t\t\t\t\t.data('xdsoft_datetimepicker', null)\n\t\t\t\t\t\t.off('.xdsoft');\n\t\t\t\t\t$(window).off('resize.xdsoft');\n\t\t\t\t\t$([window, document.body]).off('mousedown.xdsoft');\n\t\t\t\t\tif (input.unmousewheel) {\n\t\t\t\t\t\tinput.unmousewheel();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t$(document)\n\t\t\t\t.off('keydown.xdsoftctrl keyup.xdsoftctrl')\n\t\t\t\t.on('keydown.xdsoftctrl', function (e) {\n\t\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\t\tctrlDown = true;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keyup.xdsoftctrl', function (e) {\n\t\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\t\tctrlDown = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\treturn this.each(function () {\n\t\t\t\tvar datetimepicker = $(this).data('xdsoft_datetimepicker');\n\t\t\t\tif (datetimepicker) {\n\t\t\t\t\tif ($.type(opt) === 'string') {\n\t\t\t\t\t\tswitch (opt) {\n\t\t\t\t\t\tcase 'show':\n\t\t\t\t\t\t\t$(this).select().focus();\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'hide':\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'toggle':\n\t\t\t\t\t\t\tdatetimepicker.trigger('toggle.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'destroy':\n\t\t\t\t\t\t\tdestroyDateTimePicker($(this));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'reset':\n\t\t\t\t\t\t\tthis.value = this.defaultValue;\n\t\t\t\t\t\t\tif (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format))) {\n\t\t\t\t\t\t\t\tdatetimepicker.data('changed', false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t\t.setOptions(opt);\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif ($.type(opt) !== 'string') {\n\t\t\t\t\tif (!options.lazyInit || options.open || options.inline) {\n\t\t\t\t\t\tcreateDateTimePicker($(this));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlazyInit($(this));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t$.fn.extend ( \"datetimepicker.defaults\" , default_options);\n\t}(jQuery));\n\t(function () {\n\n\t/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)\n\t * Licensed under the MIT License (LICENSE.txt).\n\t *\n\t * Version: 3.1.12\n\t *\n\t * Requires: jQuery 1.2.2+\n\t */\n\t!function(a){true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(5)], __WEBPACK_AMD_DEFINE_FACTORY__ = (a), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):\"object\"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type=\"mousewheel\",\"detail\"in g&&(m=-1*g.detail),\"wheelDelta\"in g&&(m=g.wheelDelta),\"wheelDeltaY\"in g&&(m=g.wheelDeltaY),\"wheelDeltaX\"in g&&(l=-1*g.wheelDeltaX),\"axis\"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,\"deltaY\"in g&&(m=-1*g.deltaY,j=m),\"deltaX\"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,\"mousewheel-line-height\");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,\"mousewheel-page-height\");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?\"floor\":\"ceil\"](j/f),l=Math[l>=1?\"floor\":\"ceil\"](l/f),m=Math[m>=1?\"floor\":\"ceil\"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&\"mousewheel\"===a.type&&b%120===0}var e,f,g=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],h=\"onwheel\"in document||document.documentMode>=9?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:\"3.1.12\",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,\"mousewheel-line-height\",k.getLineHeight(this)),a.data(this,\"mousewheel-page-height\",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,\"mousewheel-line-height\"),a.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(b){var c=a(b),d=c[\"offsetParent\"in a.fn?\"offsetParent\":\"parent\"]();return d.length||(d=a(\"body\")),parseInt(d.css(\"fontSize\"),10)||parseInt(c.css(\"fontSize\"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind(\"mousewheel\",a):this.trigger(\"mousewheel\")},unmousewheel:function(a){return this.unbind(\"mousewheel\",a)}})});\n\n\t// Parse and Format Library\n\t//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/\n\t/*\n\t * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>\n\t *\n\t * This program is free software; you can redistribute it and/or modify it\n\t * under the terms of the GNU Lesser General Public License as published by the\n\t * Free Software Foundation, version 2.1.\n\t *\n\t * This program is distributed in the hope that it will be useful, but WITHOUT\n\t * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\t * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more\n\t * details.\n\t */\n\tDate.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(b){if(b==\"unixtime\"){return parseInt(this.getTime()/1000);}if(Date.formatFunctions[b]==null){Date.createNewFormat(b);}var a=Date.formatFunctions[b];return this[a]();};Date.createNewFormat=function(format){var funcName=\"format\"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var code=\"Date.prototype.\"+funcName+\" = function() {return \";var special=false;var ch=\"\";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch==\"\\\\\"){special=true;}else{if(special){special=false;code+=\"'\"+String.escape(ch)+\"' + \";}else{code+=Date.getFormatCode(ch);}}}eval(code.substring(0,code.length-3)+\";}\");};Date.getFormatCode=function(a){switch(a){case\"d\":return\"String.leftPad(this.getDate(), 2, '0') + \";case\"D\":return\"Date.dayNames[this.getDay()].substring(0, 3) + \";case\"j\":return\"this.getDate() + \";case\"l\":return\"Date.dayNames[this.getDay()] + \";case\"S\":return\"this.getSuffix() + \";case\"w\":return\"this.getDay() + \";case\"z\":return\"this.getDayOfYear() + \";case\"W\":return\"this.getWeekOfYear() + \";case\"F\":return\"Date.monthNames[this.getMonth()] + \";case\"m\":return\"String.leftPad(this.getMonth() + 1, 2, '0') + \";case\"M\":return\"Date.monthNames[this.getMonth()].substring(0, 3) + \";case\"n\":return\"(this.getMonth() + 1) + \";case\"t\":return\"this.getDaysInMonth() + \";case\"L\":return\"(this.isLeapYear() ? 1 : 0) + \";case\"Y\":return\"this.getFullYear() + \";case\"y\":return\"('' + this.getFullYear()).substring(2, 4) + \";case\"a\":return\"(this.getHours() < 12 ? 'am' : 'pm') + \";case\"A\":return\"(this.getHours() < 12 ? 'AM' : 'PM') + \";case\"g\":return\"((this.getHours() %12) ? this.getHours() % 12 : 12) + \";case\"G\":return\"this.getHours() + \";case\"h\":return\"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + \";case\"H\":return\"String.leftPad(this.getHours(), 2, '0') + \";case\"i\":return\"String.leftPad(this.getMinutes(), 2, '0') + \";case\"s\":return\"String.leftPad(this.getSeconds(), 2, '0') + \";case\"O\":return\"this.getGMTOffset() + \";case\"T\":return\"this.getTimezone() + \";case\"Z\":return\"(this.getTimezoneOffset() * -60) + \";default:return\"'\"+String.escape(a)+\"' + \";}};Date.parseDate=function(a,c){if(c==\"unixtime\"){return new Date(!isNaN(parseInt(a))?parseInt(a)*1000:0);}if(Date.parseFunctions[c]==null){Date.createParser(c);}var b=Date.parseFunctions[c];return Date[b](a);};Date.createParser=function(format){var funcName=\"parse\"+Date.parseFunctions.count++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code=\"Date.\"+funcName+\" = function(input) {\\nvar y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, z = -1;\\nvar d = new Date();\\ny = d.getFullYear();\\nm = d.getMonth();\\nd = d.getDate();\\nvar results = input.match(Date.parseRegexes[\"+regexNum+\"]);\\nif (results && results.length > 0) {\";var regex=\"\";var special=false;var ch=\"\";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch==\"\\\\\"){special=true;}else{if(special){special=false;regex+=String.escape(ch);}else{obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}}code+=\"if (y > 0 && z > 0){\\nvar doyDate = new Date(y,0);\\ndoyDate.setDate(z);\\nm = doyDate.getMonth();\\nd = doyDate.getDate();\\n}\";code+=\"if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\\n{return new Date(y, m, d, h, i, s);}\\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\\n{return new Date(y, m, d, h, i);}\\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0)\\n{return new Date(y, m, d, h);}\\nelse if (y > 0 && m >= 0 && d > 0)\\n{return new Date(y, m, d);}\\nelse if (y > 0 && m >= 0)\\n{return new Date(y, m);}\\nelse if (y > 0)\\n{return new Date(y);}\\n}return null;}\";Date.parseRegexes[regexNum]=new RegExp(\"^\"+regex+\"$\");eval(code);};Date.formatCodeToRegex=function(b,a){switch(b){case\"D\":return{g:0,c:null,s:\"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\"};case\"j\":case\"d\":return{g:1,c:\"d = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,2})\"};case\"l\":return{g:0,c:null,s:\"(?:\"+Date.dayNames.join(\"|\")+\")\"};case\"S\":return{g:0,c:null,s:\"(?:st|nd|rd|th)\"};case\"w\":return{g:0,c:null,s:\"\\\\d\"};case\"z\":return{g:1,c:\"z = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,3})\"};case\"W\":return{g:0,c:null,s:\"(?:\\\\d{2})\"};case\"F\":return{g:1,c:\"m = parseInt(Date.monthNumbers[results[\"+a+\"].substring(0, 3)], 10);\\n\",s:\"(\"+Date.monthNames.join(\"|\")+\")\"};case\"M\":return{g:1,c:\"m = parseInt(Date.monthNumbers[results[\"+a+\"]], 10);\\n\",s:\"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\"};case\"n\":case\"m\":return{g:1,c:\"m = parseInt(results[\"+a+\"], 10) - 1;\\n\",s:\"(\\\\d{1,2})\"};case\"t\":return{g:0,c:null,s:\"\\\\d{1,2}\"};case\"L\":return{g:0,c:null,s:\"(?:1|0)\"};case\"Y\":return{g:1,c:\"y = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{4})\"};case\"y\":return{g:1,c:\"var ty = parseInt(results[\"+a+\"], 10);\\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\\n\",s:\"(\\\\d{1,2})\"};case\"a\":return{g:1,c:\"if (results[\"+a+\"] == 'am') {\\nif (h == 12) { h = 0; }\\n} else { if (h < 12) { h += 12; }}\",s:\"(am|pm)\"};case\"A\":return{g:1,c:\"if (results[\"+a+\"] == 'AM') {\\nif (h == 12) { h = 0; }\\n} else { if (h < 12) { h += 12; }}\",s:\"(AM|PM)\"};case\"g\":case\"G\":case\"h\":case\"H\":return{g:1,c:\"h = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,2})\"};case\"i\":return{g:1,c:\"i = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{2})\"};case\"s\":return{g:1,c:\"s = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{2})\"};case\"O\":return{g:0,c:null,s:\"[+-]\\\\d{4}\"};case\"T\":return{g:0,c:null,s:\"[A-Z]{3}\"};case\"Z\":return{g:0,c:null,s:\"[+-]\\\\d{1,5}\"};default:return{g:0,c:null,s:String.escape(b)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,\"$1\").replace(/^.*?\\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\\)$/,\"$1$2$3\");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?\"-\":\"+\")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,\"0\")+String.leftPad(Math.abs(this.getTimezoneOffset())%60,2,\"0\");};Date.prototype.getDayOfYear=function(){var a=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var b=0;b<this.getMonth();++b){a+=Date.daysInMonth[b];}return a+this.getDate();};Date.prototype.getWeekOfYear=function(){var b=this.getDayOfYear()+(4-this.getDay());var a=new Date(this.getFullYear(),0,1);var c=(7-a.getDay()+4);return String.leftPad(Math.ceil((b-c)/7)+1,2,\"0\");};Date.prototype.isLeapYear=function(){var a=this.getFullYear();return((a&3)==0&&(a%100||(a%400==0&&a)));};Date.prototype.getFirstDayOfMonth=function(){var a=(this.getDay()-(this.getDate()-1))%7;return(a<0)?(a+7):a;};Date.prototype.getLastDayOfMonth=function(){var a=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(a<0)?(a+7):a;};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return\"st\";case 2:case 22:return\"nd\";case 3:case 23:return\"rd\";default:return\"th\";}};String.escape=function(a){return a.replace(/('|\\\\)/g,\"\\\\$1\");};String.leftPad=function(d,b,c){var a=new String(d);if(c==null){c=\" \";}while(a.length<b){a=c+a;}return a;};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];Date.dayNames=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.patterns={ISO8601LongPattern:\"Y-m-d H:i:s\",ISO8601ShortPattern:\"Y-m-d\",ShortDatePattern:\"n/j/Y\",LongDatePattern:\"l, F d, Y\",FullDateTimePattern:\"l, F d, Y g:i:s A\",MonthDayPattern:\"F d\",ShortTimePattern:\"g:i A\",LongTimePattern:\"g:i:s A\",SortableDateTimePattern:\"Y-m-d\\\\TH:i:s\",UniversalSortableDateTimePattern:\"Y-m-d H:i:sO\",YearMonthPattern:\"F, Y\"};\n\t}());\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 140:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar modal = __webpack_require__(155);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(modal({it :param}))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on = param.on || {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 141:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_jQuery) {/*\n\t Highcharts JS v4.0.1 (2014-04-24)\n\n\t (c) 2009-2014 Torstein Honsi\n\n\t License: www.highcharts.com/license\n\t*/\n\t(function(){function q(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function w(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!==\"object\"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c===\"object\"&&Object.prototype.toString.call(c)!==\"[object Array]\"&&d!==\"renderTo\"&&typeof c.nodeType!==\"number\"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a<c;a++)d=e(d,b[a]);return d}function z(a,b){return parseInt(a,b||\n\t10)}function Fa(a){return typeof a===\"string\"}function ca(a){return typeof a===\"object\"}function La(a){return Object.prototype.toString.call(a)===\"[object Array]\"}function ha(a){return typeof a===\"number\"}function za(a){return U.log(a)/U.LN10}function ia(a){return U.pow(10,a)}function ja(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function r(a){return a!==t&&a!==null}function H(a,b,c){var d,e;if(Fa(b))r(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(r(b)&&\n\tca(b))for(d in b)a.setAttribute(d,b[d]);return e}function qa(a){return La(a)?a:[a]}function m(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!==\"undefined\"&&c!==null)return c}function G(a,b){if(Aa&&!aa&&b&&b.opacity!==t)b.filter=\"alpha(opacity=\"+b.opacity*100+\")\";q(a.style,b)}function Y(a,b,c,d,e){a=y.createElement(a);b&&q(a,b);e&&G(a,{padding:0,border:Q,margin:0});c&&G(a,c);d&&d.appendChild(a);return a}function ka(a,b){var c=function(){};c.prototype=new a;q(c.prototype,b);return c}\n\tfunction Ga(a,b,c,d){var e=E.lang,a=+a||0,f=b===-1?(a.toString().split(\".\")[1]||\"\").length:isNaN(b=M(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?\"-\":\"\",c=String(z(a=M(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:\"\")+c.substr(g).replace(/(\\d{3})(?=\\d)/g,\"$1\"+d)+(f?b+M(a-c).toFixed(f).slice(2):\"\")}function Ha(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Ma(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);\n\ta.unshift(d);return c.apply(this,a)}}function Ia(a,b){for(var c=\"{\",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(\":\");g=f.shift().split(\".\");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]];if(f.length)f=f.join(\":\"),g=/\\.([0-9])/,h=E.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e!==null&&(e=Ga(e,i,h.decimalPoint,f.indexOf(\",\")>-1?h.thousandsSep:\"\"))):e=cb(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?\"}\":\"{\"}j.push(a);return j.join(\"\")}function mb(a){return U.pow(10,T(U.log(a)/\n\tU.LN10))}function nb(a,b,c,d){var e,c=m(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Bb(){this.symbol=this.color=0}function ob(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:d});for(e=0;e<c;e++)delete a[e].ss_i}function Na(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function Ba(a){for(var b=\n\ta.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Oa(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Pa(a){db||(db=Y(Ja));a&&db.appendChild(a);db.innerHTML=\"\"}function ra(a,b){var c=\"Highcharts error #\"+a+\": www.highcharts.com/errors/\"+a;if(b)throw c;else I.console&&console.log(c)}function da(a){return parseFloat(a.toPrecision(14))}function Qa(a,b){va=m(a,b.animation)}function Cb(){var a=E.global.useUTC,b=a?\"getUTC\":\"get\",c=a?\"setUTC\":\"set\";Ra=(a&&E.global.timezoneOffset||\n\t0)*6E4;eb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,m(c,1),m(g,0),m(h,0),m(i,0))).getTime()};pb=b+\"Minutes\";qb=b+\"Hours\";rb=b+\"Day\";Xa=b+\"Date\";fb=b+\"Month\";gb=b+\"FullYear\";Db=c+\"Minutes\";Eb=c+\"Hours\";sb=c+\"Date\";Fb=c+\"Month\";Gb=c+\"FullYear\"}function P(){}function Sa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||\"\";this.isNew=!0;!c&&!d&&this.addLabel()}function la(){this.init.apply(this,arguments)}function Ya(){this.init.apply(this,arguments)}function Hb(a,b,c,d,e){var f=a.chart.inverted;\n\tthis.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.alignOptions={align:b.align||(f?c?\"left\":\"right\":\"center\"),verticalAlign:b.verticalAlign||(f?\"middle\":c?\"bottom\":\"top\"),y:m(b.y,f?4:c?14:-6),x:m(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?\"right\":\"left\":\"center\")}var t,y=document,I=window,U=Math,u=U.round,T=U.floor,Ka=U.ceil,v=U.max,C=U.min,M=U.abs,Z=U.cos,ea=U.sin,ma=U.PI,Ca=ma*2/360,wa=navigator.userAgent,Ib=I.opera,Aa=/msie/i.test(wa)&&\n\t!Ib,hb=y.documentMode===8,ib=/AppleWebKit/.test(wa),Ta=/Firefox/.test(wa),Jb=/(Mobile|Android|Windows Phone)/.test(wa),xa=\"http://www.w3.org/2000/svg\",aa=!!y.createElementNS&&!!y.createElementNS(xa,\"svg\").createSVGRect,Nb=Ta&&parseInt(wa.split(\"Firefox/\")[1],10)<4,fa=!aa&&!Aa&&!!y.createElement(\"canvas\").getContext,Za,$a,Kb={},tb=0,db,E,cb,va,ub,A,sa=function(){},V=[],ab=0,Ja=\"div\",Q=\"none\",Ob=/^[0-9]+$/,Pb=\"stroke-width\",eb,Ra,pb,qb,rb,Xa,fb,gb,Db,Eb,sb,Fb,Gb,F={},R=I.Highcharts=I.Highcharts?ra(16,\n\t!0):{};cb=function(a,b,c){if(!r(b)||isNaN(b))return\"Invalid date\";var a=m(a,\"%Y-%m-%d %H:%M:%S\"),d=new Date(b-Ra),e,f=d[qb](),g=d[rb](),h=d[Xa](),i=d[fb](),j=d[gb](),k=E.lang,l=k.weekdays,d=q({a:l[g].substr(0,3),A:l[g],d:Ha(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ha(i+1),y:j.toString().substr(2,2),Y:j,H:Ha(f),I:Ha(f%12||12),l:f%12||12,M:Ha(d[pb]()),p:f<12?\"AM\":\"PM\",P:f<12?\"am\":\"pm\",S:Ha(d.getSeconds()),L:Ha(u(b%1E3),3)},R.dateFormats);for(e in d)for(;a.indexOf(\"%\"+e)!==-1;)a=a.replace(\"%\"+e,typeof d[e]===\n\t\"function\"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Bb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};A=function(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}(\"millisecond\",1,\"second\",1E3,\"minute\",6E4,\"hour\",36E5,\"day\",864E5,\"week\",6048E5,\"month\",26784E5,\"year\",31556952E3);ub={init:function(a,b,c){var b=b||\"\",d=a.shift,e=b.indexOf(\"C\")>-1,f=e?7:3,g,b=b.split(\" \"),c=[].concat(c),\n\th,i,j=function(a){for(g=a.length;g--;)a[g]===\"M\"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===\n\tb.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};(function(a){I.HighchartsAdapter=I.HighchartsAdapter||a&&{init:function(b){var c=a.fx,d=c.step,e,f=a.Tween,g=f&&f.propHooks;e=a.cssHooks.opacity;a.extend(a.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});a.each([\"cur\",\"_default\",\"width\",\"height\",\"opacity\"],function(a,b){var e=d,k;b===\"cur\"?e=c.prototype:b===\"_default\"&&f&&(e=g[b],b=\"set\");(k=e[b])&&(e[b]=function(c){var d,c=\n\ta?c:this;if(c.prop!==\"align\")return d=c.elem,d.attr?d.attr(c.prop,b===\"cur\"?t:c.now):k.apply(this,arguments)})});Ma(e,\"get\",function(a,b,c){return b.attr?b.opacity||0:a.call(this,b,c)});e=function(a){var c=a.elem,d;if(!a.started)d=b.init(c,c.d,c.toD),a.start=d[0],a.end=d[1],a.started=!0;c.attr(\"d\",b.step(a.start,a.end,a.pos,c.toD))};f?g.d={set:e}:d.d=e;this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],\n\ta[c],c,a)===!1)return c};a.fn.highcharts=function(){var a=\"Chart\",b=arguments,c,d;if(this[0]){Fa(b[0])&&(a=b[0],b=Array.prototype.slice.call(b,1));c=b[0];if(c!==t)c.chart=c.chart||{},c.chart.renderTo=this[0],new R[a](c,b[1]),d=this;c===t&&(d=V[H(this[0],\"data-highcharts-chart\")])}return d}},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b,c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);return d},offset:function(b){return a(b).offset()},\n\taddEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=y.removeEventListener?\"removeEventListener\":\"detachEvent\";y[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g=\"detached\"+c,h;!Aa&&d&&(delete d.layerX,delete d.layerY,delete d.returnValue);q(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each([\"preventDefault\",\"stopPropagation\"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b===\"preventDefault\"&&(h=!0)}}});a(b).trigger(f);\n\tb[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===t)c.pageX=a.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(!b.style)b.style={};if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==t&&b.attr&&(c.opacity+=\"px\");e.animate(c,d)},stop:function(b){a(b).stop()}}})(__webpack_provided_window_dot_jQuery);var S=I.HighchartsAdapter,N=S||{};S&&S.init.call(S,ub);var jb=N.adapterRun,Qb=N.getScript,Da=N.inArray,p=N.each,vb=N.grep,Rb=N.offset,Ua=\n\tN.map,K=N.addEvent,W=N.removeEvent,D=N.fireEvent,Sb=N.washMouseEvent,kb=N.animate,bb=N.stop,N={enabled:!0,x:0,y:15,style:{color:\"#606060\",cursor:\"default\",fontSize:\"11px\"}};E={colors:\"#7cb5ec,#434348,#90ed7d,#f7a35c,#8085e9,#f15c80,#e4d354,#8085e8,#8d4653,#91e8e1\".split(\",\"),symbols:[\"circle\",\"diamond\",\"square\",\"triangle\",\"triangle-down\"],lang:{loading:\"Loading...\",months:\"January,February,March,April,May,June,July,August,September,October,November,December\".split(\",\"),shortMonths:\"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec\".split(\",\"),\n\tweekdays:\"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday\".split(\",\"),decimalPoint:\".\",numericSymbols:\"k,M,G,T,P,E\".split(\",\"),resetZoom:\"Reset zoom\",resetZoomTitle:\"Reset zoom level 1:1\",thousandsSep:\",\"},global:{useUTC:!0,canvasToolsURL:\"http://code.highcharts.com/4.0.1/modules/canvas-tools.js\",VMLRadialGradientURL:\"http://code.highcharts.com/4.0.1/gfx/vml-radial-gradient.png\"},chart:{borderColor:\"#4572A7\",borderRadius:0,defaultSeriesType:\"line\",ignoreHiddenSeries:!0,spacing:[10,10,15,\n\t10],backgroundColor:\"#FFFFFF\",plotBorderColor:\"#C0C0C0\",resetZoomButton:{theme:{zIndex:20},position:{align:\"right\",x:-10,y:10}}},title:{text:\"Chart title\",align:\"center\",margin:15,style:{color:\"#333333\",fontSize:\"18px\"}},subtitle:{text:\"\",align:\"center\",style:{color:\"#555555\"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{lineWidth:0,radius:4,lineColor:\"#FFFFFF\",states:{hover:{enabled:!0},select:{fillColor:\"#FFFFFF\",lineColor:\"#000000\",\n\tlineWidth:2}}},point:{events:{}},dataLabels:w(N,{align:\"center\",enabled:!1,formatter:function(){return this.y===null?\"\":Ga(this.y,-1)},verticalAlign:\"bottom\",y:0}),cropThreshold:300,pointRange:0,states:{hover:{marker:{},halo:{size:10,opacity:0.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3}},labels:{style:{position:\"absolute\",color:\"#3E576F\"}},legend:{enabled:!0,align:\"center\",layout:\"horizontal\",labelFormatter:function(){return this.name},borderColor:\"#909090\",borderRadius:0,navigation:{activeColor:\"#274b6d\",\n\tinactiveColor:\"#CCC\"},shadow:!1,itemStyle:{color:\"#333333\",fontSize:\"12px\",fontWeight:\"bold\"},itemHoverStyle:{color:\"#000\"},itemHiddenStyle:{color:\"#CCC\"},itemCheckboxStyle:{position:\"absolute\",width:\"13px\",height:\"13px\"},symbolPadding:5,verticalAlign:\"bottom\",x:0,y:0,title:{style:{fontWeight:\"bold\"}}},loading:{labelStyle:{fontWeight:\"bold\",position:\"relative\",top:\"1em\"},style:{position:\"absolute\",backgroundColor:\"white\",opacity:0.5,textAlign:\"center\"}},tooltip:{enabled:!0,animation:aa,backgroundColor:\"rgba(249, 249, 249, .85)\",\n\tborderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:\"%A, %b %e, %H:%M:%S.%L\",second:\"%A, %b %e, %H:%M:%S\",minute:\"%A, %b %e, %H:%M\",hour:\"%A, %b %e, %H:%M\",day:\"%A, %b %e, %Y\",week:\"Week from %A, %b %e, %Y\",month:\"%B %Y\",year:\"%Y\"},headerFormat:'<span style=\"font-size: 10px\">{point.key}</span><br/>',pointFormat:'<span style=\"color:{series.color}\">●</span> {series.name}: <b>{point.y}</b><br/>',shadow:!0,snap:Jb?25:10,style:{color:\"#333333\",cursor:\"default\",fontSize:\"12px\",padding:\"8px\",\n\twhiteSpace:\"nowrap\"}},credits:{enabled:!0,text:\"Highcharts.com\",href:\"http://www.highcharts.com\",position:{align:\"right\",x:-10,verticalAlign:\"bottom\",y:-5},style:{cursor:\"pointer\",color:\"#909090\",fontSize:\"9px\"}}};var ba=E.plotOptions,S=ba.line;Cb();var Tb=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/,Ub=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,Vb=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/,ya=function(a){var b=[],c,\n\td;(function(a){a&&a.stops?d=Ua(a.stops,function(a){return ya(a[1])}):(c=Tb.exec(a))?b=[z(c[1]),z(c[2]),z(c[3]),parseFloat(c[4],10)]:(c=Ub.exec(a))?b=[z(c[1],16),z(c[2],16),z(c[3],16),1]:(c=Vb.exec(a))&&(b=[z(c[1]),z(c[2]),z(c[3]),1])})(a);return{get:function(c){var f;d?(f=w(a),f.stops=[].concat(f.stops),p(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c===\"rgb\"?\"rgb(\"+b[0]+\",\"+b[1]+\",\"+b[2]+\")\":c===\"a\"?b[3]:\"rgba(\"+b.join(\",\")+\")\":a;return f},brighten:function(a){if(d)p(d,\n\tfunction(b){b.brighten(a)});else if(ha(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=z(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};P.prototype={init:function(a,b){this.element=b===\"span\"?Y(b):y.createElementNS(xa,b);this.renderer=a},opacity:1,animate:function(a,b,c){b=m(b,va,!0);bb(this);if(b){b=w(b,{});if(c)b.complete=c;kb(this,a,b)}else this.attr(a),c&&c()},colorGradient:function(a,b,c){var d=this.renderer,e,f,g,h,i,j,k,l,o,n,s=[];a.linearGradient?\n\tf=\"linearGradient\":a.radialGradient&&(f=\"radialGradient\");if(f){g=a[f];h=d.gradients;j=a.stops;o=c.radialReference;La(g)&&(a[f]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:\"userSpaceOnUse\"});f===\"radialGradient\"&&o&&!r(g.gradientUnits)&&(g=w(g,{cx:o[0]-o[2]/2+g.cx*o[2],cy:o[1]-o[2]/2+g.cy*o[2],r:g.r*o[2],gradientUnits:\"userSpaceOnUse\"}));for(n in g)n!==\"id\"&&s.push(n,g[n]);for(n in j)s.push(j[n]);s=s.join(\",\");h[s]?a=h[s].attr(\"id\"):(g.id=a=\"highcharts-\"+tb++,h[s]=i=d.createElement(f).attr(g).add(d.defs),\n\ti.stops=[],p(j,function(a){a[1].indexOf(\"rgba\")===0?(e=ya(a[1]),k=e.get(\"rgb\"),l=e.get(\"a\")):(k=a[1],l=1);a=d.createElement(\"stop\").attr({offset:a[0],\"stop-color\":k,\"stop-opacity\":l}).add(i);i.stops.push(a)}));c.setAttribute(b,\"url(\"+d.url+\"#\"+a+\")\")}},attr:function(a,b){var c,d,e=this.element,f,g=this,h;typeof a===\"string\"&&b!==t&&(c=a,a={},a[c]=b);if(typeof a===\"string\")g=(this[a+\"Getter\"]||this._defaultGetter).call(this,a,e);else{for(c in a){d=a[c];h=!1;this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&\n\t(f||(this.symbolAttr(a),f=!0),h=!0);if(this.rotation&&(c===\"x\"||c===\"y\"))this.doTransform=!0;h||(this[c+\"Setter\"]||this._defaultSetter).call(this,d,c,e);this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c)&&this.updateShadows(c,d)}if(this.doTransform)this.updateTransform(),this.doTransform=!1}return g},updateShadows:function(a,b){for(var c=this.shadows,d=c.length;d--;)c[d].setAttribute(a,a===\"height\"?v(b-(c[d].cutHeight||0),0):a===\"d\"?this.d:b)},addClass:function(a){var b=this.element,\n\tc=H(b,\"class\")||\"\";c.indexOf(a)===-1&&H(b,\"class\",c+\" \"+a);return this},symbolAttr:function(a){var b=this;p(\"x,y,r,start,end,width,height,innerR,anchorX,anchorY\".split(\",\"),function(c){b[c]=m(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr(\"clip-path\",a?\"url(\"+this.renderer.url+\"#\"+a.id+\")\":Q)},crisp:function(a){var b,c={},d,e=a.strokeWidth||this.strokeWidth||this.attr&&this.attr(\"stroke-width\")||0;d=u(e)%2/2;a.x=T(a.x||this.x||\n\t0)+d;a.y=T(a.y||this.y||0)+d;a.width=T((a.width||this.width||0)-2*d);a.height=T((a.height||this.height||0)-2*d);a.strokeWidth=e;for(b in a)this[b]!==a[b]&&(this[b]=c[b]=a[b]);return c},css:function(a){var b=this.styles,c={},d=this.element,e,f,g=\"\";e=!b;if(a&&a.color)a.fill=a.color;if(b)for(f in a)a[f]!==b[f]&&(c[f]=a[f],e=!0);if(e){e=this.textWidth=a&&a.width&&d.nodeName.toLowerCase()===\"text\"&&z(a.width);b&&(a=q(b,c));this.styles=a;e&&(fa||!aa&&this.renderer.forExport)&&delete a.width;if(Aa&&!aa)G(this.element,\n\ta);else{b=function(a,b){return\"-\"+b.toLowerCase()};for(f in a)g+=f.replace(/([A-Z])/g,b)+\":\"+a[f]+\";\";H(d,\"style\",g)}e&&this.added&&this.renderer.buildText(this)}return this},on:function(a,b){var c=this,d=c.element;$a&&a===\"click\"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(wa.indexOf(\"Android\")===-1||Date.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d[\"on\"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=\n\ta;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation,g=this.element;e&&(a+=this.attr(\"width\"),b+=this.attr(\"height\"));a=[\"translate(\"+a+\",\"+b+\")\"];e?a.push(\"rotate(90) scale(-1,1)\"):f&&a.push(\"rotate(\"+f+\" \"+(g.getAttribute(\"x\")||0)+\" \"+(g.getAttribute(\"y\")||0)+\")\");\n\t(r(c)||r(d))&&a.push(\"scale(\"+m(c,1)+\" \"+m(d,1)+\")\");a.length&&g.setAttribute(\"transform\",a.join(\" \"))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=a,this.alignByTranslate=b,!c||Fa(c))this.alignTo=d=c||\"renderer\",ja(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=m(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||\n\t0);g=(c.y||0)+(a.y||0);if(d===\"right\"||d===\"center\")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?\"translateX\":\"x\"]=u(f);if(e===\"bottom\"||e===\"middle\")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?\"translateY\":\"y\"]=u(g);this[this.placed?\"animate\":\"attr\"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d,e=this.rotation;c=this.element;var f=this.styles,g=e*Ca;d=this.textStr;var h;if(d===\"\"||Ob.test(d))h=\"num.\"+d.toString().length+\n\t(f?\"|\"+f.fontSize+\"|\"+f.fontFamily:\"\");h&&(a=b.cache[h]);if(!a){if(c.namespaceURI===xa||b.forExport){try{a=c.getBBox?q({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(i){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){c=a.width;d=a.height;if(Aa&&f&&f.fontSize===\"11px\"&&d.toPrecision(3)===\"16.9\")a.height=d=14;if(e)a.width=M(d*ea(g))+M(c*Z(g)),a.height=M(d*Z(g))+M(c*ea(g))}this.bBox=a;h&&(b.cache[h]=a)}return a},show:function(a){return a&&this.element.namespaceURI===\n\txa?(this.element.removeAttribute(\"visibility\"),this):this.attr({visibility:a?\"inherit\":\"visible\"})},hide:function(){return this.attr({visibility:\"hidden\"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=this.element,f=this.zIndex,g,h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(f)c.handleZ=!0,f=z(f);if(c.handleZ){a=d.childNodes;\n\tfor(g=0;g<a.length;g++)if(b=a[g],c=H(b,\"zIndex\"),b!==e&&(z(c)>f||!r(f)&&r(c))){d.insertBefore(e,b);h=!0;break}}h||d.appendChild(e);this.added=!0;if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName===\"SPAN\"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;bb(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=\n\t0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);for(c&&p(c,function(b){a.safeRemoveChild(b)});d&&d.div.childNodes.length===0;)b=d.parentGroup,a.safeRemoveChild(d.div),delete d.div,d=b;a.alignTo&&ja(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,j,k;if(a){i=m(a.width,3);j=(a.opacity||0.15)/i;k=this.parentInverted?\"(-1,-1)\":\"(\"+m(a.offsetX,1)+\", \"+m(a.offsetY,1)+\")\";for(e=1;e<=i;e++){f=\n\tg.cloneNode(0);h=i*2+1-2*e;H(f,{isShadow:\"true\",stroke:a.color||\"black\",\"stroke-opacity\":j*e,\"stroke-width\":h,transform:\"translate\"+k,fill:Q});if(c)H(f,\"height\",v(H(f,\"height\")-h,0)),f.cutHeight=h;b?b.element.appendChild(f):g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this},xGetter:function(a){this.element.nodeName===\"circle\"&&(a={x:\"cx\",y:\"cy\"}[a]||a);return this._defaultGetter(a)},_defaultGetter:function(a){a=m(this[a],this.element?this.element.getAttribute(a):null,0);/^[0-9\\.]+$/.test(a)&&\n\t(a=parseFloat(a));return a},dSetter:function(a,b,c){a&&a.join&&(a=a.join(\" \"));/(NaN| {2}|^$)/.test(a)&&(a=\"M 0 0\");c.setAttribute(b,a);this[b]=a},dashstyleSetter:function(a){var b;if(a=a&&a.toLowerCase()){a=a.replace(\"shortdashdotdot\",\"3,1,1,1,1,1,\").replace(\"shortdashdot\",\"3,1,1,1\").replace(\"shortdot\",\"1,1,\").replace(\"shortdash\",\"3,1,\").replace(\"longdash\",\"8,3,\").replace(/dot/g,\"1,3,\").replace(\"dash\",\"4,3,\").replace(/,$/,\"\").split(\",\");for(b=a.length;b--;)a[b]=z(a[b])*this.element.getAttribute(\"stroke-width\");\n\ta=a.join(\",\");this.element.setAttribute(\"stroke-dasharray\",a)}},alignSetter:function(a){this.element.setAttribute(\"text-anchor\",{left:\"start\",center:\"middle\",right:\"end\"}[a])},opacitySetter:function(a,b,c){this[b]=a;c.setAttribute(b,a)},\"stroke-widthSetter\":function(a,b,c){a===0&&(a=1.0E-5);this.strokeWidth=a;c.setAttribute(b,a)},titleSetter:function(a){var b=this.element.getElementsByTagName(\"title\")[0];b||(b=y.createElementNS(xa,\"title\"),this.element.appendChild(b));b.textContent=a},textSetter:function(a){if(a!==\n\tthis.textStr)delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this)},fillSetter:function(a,b,c){typeof a===\"string\"?c.setAttribute(b,a):a&&this.colorGradient(a,b,c)},zIndexSetter:function(a,b,c){c.setAttribute(b,a);this[b]=a},_defaultSetter:function(a,b,c){c.setAttribute(b,a)}};P.prototype.yGetter=P.prototype.xGetter;P.prototype.translateXSetter=P.prototype.translateYSetter=P.prototype.rotationSetter=P.prototype.verticalAlignSetter=P.prototype.scaleXSetter=P.prototype.scaleYSetter=\n\tfunction(a,b){this[b]=a;this.doTransform=!0};P.prototype.strokeSetter=P.prototype.fillSetter;var ta=function(){this.init.apply(this,arguments)};ta.prototype={Element:P,init:function(a,b,c,d,e){var f=location,g,d=this.createElement(\"svg\").attr({version:\"1.1\"}).css(this.getStyle(d));g=d.element;a.appendChild(g);a.innerHTML.indexOf(\"xmlns\")===-1&&H(g,\"xmlns\",xa);this.isSVG=!0;this.box=g;this.boxWrapper=d;this.alignedObjects=[];this.url=(Ta||ib)&&y.getElementsByTagName(\"base\").length?f.href.replace(/#.*?$/,\n\t\"\").replace(/([\\('\\)])/g,\"\\\\$1\").replace(/ /g,\"%20\"):\"\";this.createElement(\"desc\").add().element.appendChild(y.createTextNode(\"Created with Highcharts 4.0.1\"));this.defs=this.createElement(\"defs\").add();this.forExport=e;this.gradients={};this.cache={};this.setSize(b,c,!1);var h;if(Ta&&a.getBoundingClientRect)this.subPixelFix=b=function(){G(a,{left:0,top:0});h=a.getBoundingClientRect();G(a,{left:Ka(h.left)-h.left+\"px\",top:Ka(h.top)-h.top+\"px\"})},b(),K(I,\"resize\",b)},getStyle:function(a){return this.style=\n\tq({fontFamily:'\"Lucida Grande\", \"Lucida Sans Unicode\", Arial, Helvetica, sans-serif',fontSize:\"12px\"},a)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Oa(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&W(I,\"resize\",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},\n\tbuildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=m(a.textStr,\"\").toString(),f=e.indexOf(\"<\")!==-1,g=b.childNodes,h,i,j=H(b,\"x\"),k=a.styles,l=a.textWidth,o=k&&k.lineHeight,n=g.length,s=function(a){return o?z(o):c.fontMetrics(/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:k&&k.fontSize||c.style.fontSize||12).h};n--;)b.removeChild(g[n]);!f&&e.indexOf(\" \")===-1?b.appendChild(y.createTextNode(e)):(h=/<.*style=\"([^\"]+)\".*>/,i=/<.*href=\"(http[^\"]+)\".*>/,l&&!a.added&&this.box.appendChild(b),\n\te=f?e.replace(/<(b|strong)>/g,'<span style=\"font-weight:bold\">').replace(/<(i|em)>/g,'<span style=\"font-style:italic\">').replace(/<a/g,\"<span\").replace(/<\\/(b|strong|i|em|a)>/g,\"</span>\").split(/<br.*?>/g):[e],e[e.length-1]===\"\"&&e.pop(),p(e,function(e,f){var g,n=0,e=e.replace(/<span/g,\"|||<span\").replace(/<\\/span>/g,\"</span>|||\");g=e.split(\"|||\");p(g,function(e){if(e!==\"\"||g.length===1){var o={},m=y.createElementNS(xa,\"tspan\"),p;h.test(e)&&(p=e.match(h)[1].replace(/(;| |^)color([ :])/,\"$1fill$2\"),\n\tH(m,\"style\",p));i.test(e)&&!d&&(H(m,\"onclick\",'location.href=\"'+e.match(i)[1]+'\"'),G(m,{cursor:\"pointer\"}));e=(e.replace(/<(.|\\n)*?>/g,\"\")||\" \").replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\");if(e!==\" \"){m.appendChild(y.createTextNode(e));if(n)o.dx=0;else if(f&&j!==null)o.x=j;H(m,o);!n&&f&&(!aa&&d&&G(m,{display:\"block\"}),H(m,\"dy\",s(m),ib&&m.offsetHeight));b.appendChild(m);n++;if(l)for(var e=e.replace(/([^\\^])-/g,\"$1- \").split(\" \"),o=e.length>1&&k.whiteSpace!==\"nowrap\",$,r,B=a._clipHeight,q=[],v=s(),t=\n\t1;o&&(e.length||q.length);)delete a.bBox,$=a.getBBox(),r=$.width,!aa&&c.forExport&&(r=c.measureSpanWidth(m.firstChild.data,a.styles)),$=r>l,!$||e.length===1?(e=q,q=[],e.length&&(t++,B&&t*v>B?(e=[\"...\"],a.attr(\"title\",a.textStr)):(m=y.createElementNS(xa,\"tspan\"),H(m,{dy:v,x:j}),p&&H(m,\"style\",p),b.appendChild(m),r>l&&(l=r)))):(m.removeChild(m.firstChild),q.unshift(e.pop())),e.length&&m.appendChild(y.createTextNode(e.join(\" \").replace(/- /g,\"-\")))}}})}))},button:function(a,b,c,d,e,f,g,h,i){var j=this.label(a,\n\tb,c,i,null,null,null,null,\"button\"),k=0,l,o,n,s,m,p,a={x1:0,y1:0,x2:0,y2:1},e=w({\"stroke-width\":1,stroke:\"#CCCCCC\",fill:{linearGradient:a,stops:[[0,\"#FEFEFE\"],[1,\"#F6F6F6\"]]},r:2,padding:5,style:{color:\"black\"}},e);n=e.style;delete e.style;f=w(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#FFF\"],[1,\"#ACF\"]]}},f);s=f.style;delete f.style;g=w(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#9BD\"],[1,\"#CDF\"]]}},g);m=g.style;delete g.style;h=w(e,{style:{color:\"#CCC\"}},h);p=h.style;delete h.style;\n\tK(j.element,Aa?\"mouseover\":\"mouseenter\",function(){k!==3&&j.attr(f).css(s)});K(j.element,Aa?\"mouseout\":\"mouseleave\",function(){k!==3&&(l=[e,f,g][k],o=[n,s,m][k],j.attr(l).css(o))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(m):a===3&&j.attr(h).css(p):j.attr(e).css(n)};return j.on(\"click\",function(){k!==3&&d.call(j)}).attr(e).css(q({cursor:\"default\"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=u(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=u(a[2])+b%2/2);return a},path:function(a){var b=\n\t{fill:Q};La(a)?b.d=a:ca(a)&&q(b,a);return this.createElement(\"path\").attr(b)},circle:function(a,b,c){a=ca(a)?a:{x:a,y:b,r:c};b=this.createElement(\"circle\");b.xSetter=function(a){this.element.setAttribute(\"cx\",a)};b.ySetter=function(a){this.element.setAttribute(\"cy\",a)};return b.attr(a)},arc:function(a,b,c,d,e,f){if(ca(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol(\"arc\",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){var e=ca(a)?a.r:\n\te,g=this.createElement(\"rect\"),a=ca(a)?a:a===t?{}:{x:a,y:b,width:v(c,0),height:v(d,0)};if(f!==t)a.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;g.rSetter=function(a){H(this.element,{rx:a,ry:a})};return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[m(c,!0)?\"animate\":\"attr\"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement(\"g\");return r(a)?b.attr({\"class\":\"highcharts-\"+a}):b},image:function(a,b,c,d,e){var f=\n\t{preserveAspectRatio:Q};arguments.length>1&&q(f,{x:b,y:c,width:d,height:e});f=this.createElement(\"image\").attr(f);f.element.setAttributeNS?f.element.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",a):f.element.setAttribute(\"hc-svg-href\",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(u(b),u(c),d,e,f),i=/^url\\((.*?)\\)$/,j,k;if(h)g=this.path(h),q(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&q(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),\n\ta.alignByTranslate||a.translate(u((d-b[0])/2),u((e-b[1])/2)))},j=a.match(i)[1],a=Kb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),Y(\"img\",{onload:function(){k(g,Kb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return[\"M\",a+c/2,b,\"C\",a+c+e,b,a+c+e,b+d,a+c/2,b+d,\"C\",a-e,b+d,a-e,b,a+c/2,b,\"Z\"]},square:function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c,b+d,a,b+d,\"Z\"]},triangle:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",\n\ta+c,b+d,a,b+d,\"Z\"]},\"triangle-down\":function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c/2,b+d,\"Z\"]},diamond:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",a+c,b+d/2,a+c/2,b+d,a,b+d/2,\"Z\"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=Z(f),j=ea(f),k=Z(g),g=ea(g),e=e.end-f<ma?0:1;return[\"M\",a+c*i,b+c*j,\"A\",c,c,0,e,1,a+c*k,b+c*g,h?\"M\":\"L\",a+d*k,b+d*g,\"A\",d,d,0,e,0,a+d*i,b+d*j,h?\"\":\"Z\"]},callout:function(a,b,c,d,e){var f=C(e&&e.r||0,c,d),g=f+6,h=e&&e.anchorX,i=e&&e.anchorY,\n\te=u(e.strokeWidth||0)%2/2;a+=e;b+=e;e=[\"M\",a+f,b,\"L\",a+c-f,b,\"C\",a+c,b,a+c,b,a+c,b+f,\"L\",a+c,b+d-f,\"C\",a+c,b+d,a+c,b+d,a+c-f,b+d,\"L\",a+f,b+d,\"C\",a,b+d,a,b+d,a,b+d-f,\"L\",a,b+f,\"C\",a,b,a,b,a+f,b];h&&h>c&&i>b+g&&i<b+d-g?e.splice(13,3,\"L\",a+c,i-6,a+c+6,i,a+c,i+6,a+c,b+d-f):h&&h<0&&i>b+g&&i<b+d-g?e.splice(33,3,\"L\",a,i+6,a-6,i,a,i-6,a,b+f):i&&i>d&&h>a+g&&h<a+c-g?e.splice(23,3,\"L\",h+6,b+d,h,b+d+6,h-6,b+d,a+f,b+d):i&&i<0&&h>a+g&&h<a+c-g&&e.splice(3,3,\"L\",h-6,b,h,b-6,h+6,b,c-f,b);return e}},clipRect:function(a,\n\tb,c,d){var e=\"highcharts-\"+tb++,f=this.createElement(\"clipPath\").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},text:function(a,b,c,d){var e=fa||!aa&&this.forExport,f={};if(d&&!this.forExport)return this.html(a,b,c);f.x=Math.round(b||0);if(c)f.y=Math.round(c);if(a||a===0)f.text=a;a=this.createElement(\"text\").attr(f);e&&a.css({position:\"absolute\"});if(!d)a.xSetter=function(a,b,c){var d=c.childNodes,e,f;for(f=1;f<d.length;f++)e=d[f],e.getAttribute(\"x\")===c.getAttribute(\"x\")&&\n\te.setAttribute(\"x\",a);c.setAttribute(b,a)};return a},fontMetrics:function(a){var a=a||this.style.fontSize,a=/px/.test(a)?z(a):/em/.test(a)?parseFloat(a)*12:12,a=a<24?a+4:u(a*1.2),b=u(a*0.8);return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a,b;a=s.element.style;J=(Va===void 0||wb===void 0||n.styles.textAlign)&&s.textStr&&s.getBBox();n.width=(Va||J.width||0)+2*x+v;n.height=(wb||J.height||0)+2*x;na=x+o.fontMetrics(a&&a.fontSize).b;if(z){if(!m)a=u(-L*x),b=h?-na:0,n.box=m=d?o.symbol(d,\n\ta,b,n.width,n.height,B):o.rect(a,b,n.width,n.height,0,B[Pb]),m.attr(\"fill\",Q).add(n);m.isImg||m.attr(q({width:u(n.width),height:u(n.height)},B));B=null}}function k(){var a=n.styles,a=a&&a.textAlign,b=v+x*(1-L),c;c=h?0:na;if(r(Va)&&J&&(a===\"center\"||a===\"right\"))b+={center:0.5,right:1}[a]*(Va-J.width);if(b!==s.x||c!==s.y)s.attr(\"x\",b),c!==t&&s.attr(\"y\",c);s.x=b;s.y=c}function l(a,b){m?m.attr(a,b):B[a]=b}var o=this,n=o.g(i),s=o.text(\"\",0,0,g).attr({zIndex:1}),m,J,L=0,x=3,v=0,Va,wb,xb,yb,y=0,B={},na,\n\tz;n.onAdd=function(){s.add(n);n.attr({text:a||\"\",x:b,y:c});m&&r(e)&&n.attr({anchorX:e,anchorY:f})};n.widthSetter=function(a){Va=a};n.heightSetter=function(a){wb=a};n.paddingSetter=function(a){r(a)&&a!==x&&(x=a,k())};n.paddingLeftSetter=function(a){r(a)&&a!==v&&(v=a,k())};n.alignSetter=function(a){L={left:0,center:0.5,right:1}[a]};n.textSetter=function(a){a!==t&&s.textSetter(a);j();k()};n[\"stroke-widthSetter\"]=function(a,b){a&&(z=!0);y=a%2/2;l(b,a)};n.strokeSetter=n.fillSetter=n.rSetter=function(a,\n\tb){b===\"fill\"&&a&&(z=!0);l(b,a)};n.anchorXSetter=function(a,b){e=a;l(b,a+y-xb)};n.anchorYSetter=function(a,b){f=a;l(b,a-yb)};n.xSetter=function(a){n.x=a;L&&(a-=L*((Va||J.width)+x));xb=u(a);n.attr(\"translateX\",xb)};n.ySetter=function(a){yb=n.y=u(a);n.attr(\"translateY\",yb)};var A=n.css;return q(n,{css:function(a){if(a){var b={},a=w(a);p(\"fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow\".split(\",\"),function(c){a[c]!==t&&(b[c]=a[c],delete a[c])});s.css(b)}return A.call(n,\n\ta)},getBBox:function(){return{width:J.width+2*x,height:J.height+2*x,x:J.x-x,y:J.y-x}},shadow:function(a){m&&m.shadow(a);return n},destroy:function(){W(n.element,\"mouseenter\");W(n.element,\"mouseleave\");s&&(s=s.destroy());m&&(m=m.destroy());P.prototype.destroy.call(n);n=o=j=k=l=null}})}};Za=ta;q(P.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&b.tagName===\"SPAN\"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=q(this.styles,a);G(this.element,a);return this},htmlGetBBox:function(){var a=\n\tthis.element,b=this.bBox;if(!b){if(a.nodeName===\"text\")a.style.position=\"absolute\";b=this.bBox={x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}return b},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||\"left\",h={left:0,center:0.5,right:1}[g],i=this.shadows;G(b,{marginLeft:c,marginTop:d});i&&p(i,function(a){G(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&\n\tp(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName===\"SPAN\"){var j=this.rotation,k,l=z(this.textWidth),o=[j,g,b.innerHTML,this.textWidth].join(\",\");if(o!==this.cTT){k=a.fontMetrics(b.style.fontSize).b;r(j)&&this.setSpanRotation(j,h,k);i=m(this.elemWidth,b.offsetWidth);if(i>l&&/[ \\-]/.test(b.textContent||b.innerText))G(b,{width:l+\"px\",display:\"block\",whiteSpace:\"normal\"}),i=l;this.getSpanCorrection(i,k,h,j,g)}G(b,{left:e+(this.xCorr||0)+\"px\",top:f+(this.yCorr||0)+\"px\"});if(ib)k=b.offsetHeight;\n\tthis.cTT=o}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=Aa?\"-ms-transform\":ib?\"-webkit-transform\":Ta?\"MozTransform\":Ib?\"-o-transform\":\"\";d[e]=d.transform=\"rotate(\"+a+\"deg)\";d[e+(Ta?\"Origin\":\"-origin\")]=d.transformOrigin=b*100+\"% \"+c+\"px\";G(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});q(ta.prototype,{html:function(a,b,c){var d=this.createElement(\"span\"),e=d.element,f=d.renderer;d.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;\n\te.innerHTML=this.textStr=a};d.xSetter=d.ySetter=d.alignSetter=d.rotationSetter=function(a,b){b===\"align\"&&(b=\"textAlign\");d[b]=a;d.htmlUpdateTransform()};d.attr({text:a,x:u(b),y:u(c)}).css({position:\"absolute\",whiteSpace:\"nowrap\",fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});d.css=d.htmlCss;if(f.isSVG)d.add=function(a){var b,c=f.box.parentNode,j=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)j.push(a),a=a.parentGroup;p(j.reverse(),function(a){var d;b=a.div=a.div||Y(Ja,{className:H(a.element,\n\t\"class\")},{position:\"absolute\",left:(a.translateX||0)+\"px\",top:(a.translateY||0)+\"px\"},b||c);d=b.style;q(a,{translateXSetter:function(b,c){d.left=b+\"px\";a[c]=b;a.doTransform=!0},translateYSetter:function(b,c){d.top=b+\"px\";a[c]=b;a.doTransform=!0},visibilitySetter:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(e);d.added=!0;d.alignOnAdd&&d.htmlUpdateTransform();return d};return d}});var X;if(!aa&&!fa){R.VMLElement=X={init:function(a,b){var c=[\"<\",b,' filled=\"f\" stroked=\"f\"'],d=[\"position: \",\"absolute\",\n\t\";\"],e=b===Ja;(b===\"shape\"||e)&&d.push(\"left:0;top:0;width:1px;height:1px;\");d.push(\"visibility: \",e?\"hidden\":\"visible\");c.push(' style=\"',d.join(\"\"),'\"/>');if(b)c=e||b===\"span\"||b===\"img\"?c.join(\"\"):a.prepVML(c),this.element=Y(c);this.renderer=a},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();return this},updateTransform:P.prototype.htmlUpdateTransform,\n\tsetSpanRotation:function(){var a=this.rotation,b=Z(a*Ca),c=ea(a*Ca);G(this.element,{filter:a?[\"progid:DXImageTransform.Microsoft.Matrix(M11=\",b,\", M12=\",-c,\", M21=\",c,\", M22=\",b,\", sizingMethod='auto expand')\"].join(\"\"):Q})},getSpanCorrection:function(a,b,c,d,e){var f=d?Z(d*Ca):1,g=d?ea(d*Ca):0,h=m(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!==\"left\"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=\n\th*c*(g<0?-1:1)),G(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(ha(a[b]))c[b]=u(a[b]*10)-5;else if(a[b]===\"Z\")c[b]=\"x\";else if(c[b]=a[b],a.isArc&&(a[b]===\"wa\"||a[b]===\"at\"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(\" \")||\"x\"},clip:function(a){var b=this,c;a?(c=a.members,ja(c,b),c.push(b),b.destroyClip=function(){ja(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:hb?\"inherit\":\"rect(auto)\"});\n\treturn b.css(a)},css:P.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Pa(a)},destroy:function(){this.destroyClip&&this.destroyClip();return P.prototype.destroy.apply(this)},on:function(a,b){this.element[\"on\"+a]=function(){var a=I.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=z(a[c-2])-10*b;return a.join(\" \")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,\n\tl,o,n,s;k&&typeof k.value!==\"string\"&&(k=\"x\");o=k;if(a){n=m(a.width,3);s=(a.opacity||0.15)/n;for(e=1;e<=3;e++){l=n*2+1-2*e;c&&(o=this.cutOffPath(k.value,l+0.5));j=['<shape isShadow=\"true\" strokeweight=\"',l,'\" filled=\"false\" path=\"',o,'\" coordsize=\"10 10\" style=\"',f.style.cssText,'\" />'];h=Y(g.prepVML(j),null,{left:z(i.left)+m(a.offsetX,1),top:z(i.top)+m(a.offsetY,1)});if(c)h.cutOff=l+1;j=['<stroke color=\"',a.color||\"black\",'\" opacity=\"',s*e,'\"/>'];Y(g.prepVML(j),null,null,h);b?b.element.appendChild(h):\n\tf.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this},updateShadows:sa,setAttr:function(a,b){hb?this.element[a]=b:this.element.setAttribute(a,b)},classSetter:function(a){this.element.className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName(\"stroke\")[0]||Y(this.renderer.prepVML([\"<stroke/>\"]),null,null,c))[b]=a||\"solid\";this[b]=a},dSetter:function(a,b,c){var d=this.shadows,a=a||[];this.d=a.join(\" \");c.path=a=this.pathToVML(a);if(d)for(c=d.length;c--;)d[c].path=d[c].cutOff?\n\tthis.cutOffPath(a,d[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var d=c.nodeName;if(d===\"SPAN\")c.style.color=a;else if(d!==\"IMG\")c.filled=a!==Q,this.setAttr(\"fillcolor\",this.renderer.color(a,c,b,this))},opacitySetter:sa,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-u(ea(a*Ca)+1)+\"px\";c.top=u(Z(a*Ca))+\"px\"},strokeSetter:function(a,b,c){this.setAttr(\"strokecolor\",this.renderer.color(a,c,b))},\"stroke-widthSetter\":function(a,b,c){c.stroked=!!a;this[b]=a;ha(a)&&(a+=\"px\");\n\tthis.setAttr(\"strokeweight\",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){a===\"inherit\"&&(a=\"visible\");this.shadows&&p(this.shadows,function(c){c.style[b]=a});c.nodeName===\"DIV\"&&(a=a===\"hidden\"?\"-999em\":0,hb||(c.style[b]=a?\"visible\":\"hidden\"),b=\"top\");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;b===\"x\"?b=\"left\":b===\"y\"&&(b=\"top\");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}};X=ka(P,X);X.prototype.ySetter=\n\tX.prototype.widthSetter=X.prototype.heightSetter=X.prototype.xSetter;var ga={Element:X,isIE8:wa.indexOf(\"MSIE 8.0\")>-1,init:function(a,b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ja).css(q(this.getStyle(d),{position:\"relative\"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!y.namespaces.hcv){y.namespaces.add(\"hcv\",\"urn:schemas-microsoft-com:vml\");try{y.createStyleSheet().cssText=\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \"}catch(f){y.styleSheets[0].cssText+=\n\t\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \"}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=ca(a);return q(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c===\"shape\"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:\"rect(\"+u(a?e:d)+\"px,\"+u(a?\n\tf:b)+\"px,\"+u(a?b:f)+\"px,\"+u(a?d:e)+\"px)\"};!a&&hb&&c===\"DIV\"&&q(d,{width:b+\"px\",height:f+\"px\"});return d},updateClipping:function(){p(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=Q;a&&a.linearGradient?i=\"gradient\":a&&a.radialGradient&&(i=\"pattern\");if(i){var k,l,o=a.linearGradient||a.radialGradient,n,s,m,J,L,x=\"\",a=a.stops,r,v=[],q=function(){h=['<fill colors=\"'+v.join(\",\")+'\" opacity=\"',m,'\" o:opacity2=\"',s,'\" type=\"',i,'\" ',x,'focus=\"100%\" method=\"any\" />'];\n\tY(e.prepVML(h),null,null,b)};n=a[0];r=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);r[0]<1&&a.push([1,r[1]]);p(a,function(a,b){g.test(a[1])?(f=ya(a[1]),k=f.get(\"rgb\"),l=f.get(\"a\")):(k=a[1],l=1);v.push(a[0]*100+\"% \"+k);b?(m=l,J=k):(s=l,L=k)});if(c===\"fill\")if(i===\"gradient\")c=o.x1||o[0]||0,a=o.y1||o[1]||0,n=o.x2||o[2]||0,o=o.y2||o[3]||0,x='angle=\"'+(90-U.atan((o-a)/(n-c))*180/ma)+'\"',q();else{var j=o.r,t=j*2,u=j*2,y=o.cx,B=o.cy,na=b.radialReference,w,j=function(){na&&(w=d.getBBox(),y+=(na[0]-w.x)/w.width-\n\t0.5,B+=(na[1]-w.y)/w.height-0.5,t*=na[2]/w.width,u*=na[2]/w.height);x='src=\"'+E.global.VMLRadialGradientURL+'\" size=\"'+t+\",\"+u+'\" origin=\"0.5,0.5\" position=\"'+y+\",\"+B+'\" color2=\"'+L+'\" ';q()};d.added?j():d.onAdd=j;j=J}else j=k}else if(g.test(a)&&b.tagName!==\"IMG\")f=ya(a),h=[\"<\",c,' opacity=\"',f.get(\"a\"),'\"/>'],Y(this.prepVML(h),null,null,b),j=f.get(\"rgb\");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type=\"solid\";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join(\"\");b?\n\t(a=a.replace(\"/>\",' xmlns=\"urn:schemas-microsoft-com:vml\" />'),a=a.indexOf('style=\"')===-1?a.replace(\"/>\",' style=\"display:inline-block;behavior:url(#default#VML);\" />'):a.replace('style=\"','style=\"display:inline-block;behavior:url(#default#VML);')):a=a.replace(\"<\",\"<hcv:\");return a},text:ta.prototype.html,path:function(a){var b={coordsize:\"10 10\"};La(a)?b.d=a:ca(a)&&q(b,a);return this.createElement(\"shape\").attr(b)},circle:function(a,b,c){var d=this.symbol(\"circle\");if(ca(a))c=a.r,b=a.y,a=a.x;d.isCircle=\n\t!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:\"highcharts-\"+a,\"class\":\"highcharts-\"+a});return this.createElement(Ja).attr(b)},image:function(a,b,c,d,e){var f=this.createElement(\"img\").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a===\"rect\"?this.symbol(a):ta.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName===\"IMG\"&&a.style;G(a,{flip:\"x\",left:z(d.width)-(e?z(e.top):\n\t1),top:z(d.height)-(e?z(e.left):1),rotation:-90});p(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=Z(f),i=ea(f),j=Z(g),k=ea(g);if(g-f===0)return[\"x\"];f=[\"wa\",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push(\"e\",\"M\",a,b);f.push(\"at\",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,\"x\",\"e\");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return[\"wa\",a,b,a+c,b+d,a+c,b+d/2,a+\n\tc,b+d/2,\"e\"]},rect:function(a,b,c,d,e){return ta.prototype.symbols[!r(e)||!e.r?\"square\":\"callout\"].call(0,a,b,c,d,e)}}};R.VMLRenderer=X=function(){this.init.apply(this,arguments)};X.prototype=w(ta.prototype,ga);Za=X}ta.prototype.measureSpanWidth=function(a,b){var c=y.createElement(\"span\"),d;d=y.createTextNode(a);c.appendChild(d);G(c,b);this.box.appendChild(c);d=c.offsetWidth;Pa(c);return d};var Lb;if(fa)R.CanVGRenderer=X=function(){xa=\"http://www.w3.org/1999/xhtml\"},X.prototype.symbols={},Lb=function(){function a(){var a=\n\tb.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Qb(d,a);b.push(c)}}}(),Za=X;Sa.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=a.names,g=this.pos,h=b.labels,i=a.tickPositions,d=d&&e&&!h.step&&!h.staggerLines&&!h.rotation&&c.plotWidth/i.length||!d&&(c.margin[3]||c.chartWidth*0.33),j=g===i[0],k=g===i[i.length-1],l,f=e?m(e[g],f[g],g):g,e=this.label,o=i.info;a.isDatetimeAxis&&o&&(l=b.dateTimeLabelFormats[o.higherRanks[g]||\n\to.unitName]);this.isFirst=j;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:j,isLast:k,dateTimeLabelFormat:l,value:a.isLog?da(ia(f)):f});g=d&&{width:v(1,u(d-2*(h.padding||10)))+\"px\"};g=q(g,h.style);if(r(e))e&&e.attr({text:b}).css(g);else{l={align:a.labelAlign};if(ha(h.rotation))l.rotation=h.rotation;if(d&&h.ellipsis)l._clipHeight=a.len/i.length;this.label=r(b)&&h.enabled?c.renderer.text(b,0,0,h.useHTML).attr(l).css(g).add(a.labelGroup):null}},getLabelSize:function(){var a=this.label,\n\tb=this.axis;return a?a.getBBox()[b.horiz?\"height\":\"width\"]:0},getLabelSides:function(){var a=this.label.getBBox(),b=this.axis,c=b.horiz,d=b.options.labels,a=c?a.width:a.height,b=c?d.x-a*{left:0,center:0.5,right:1}[b.labelAlign]:0;return[b,c?a+b:a]},handleOverflow:function(a,b){var c=!0,d=this.axis,e=this.isFirst,f=this.isLast,g=d.horiz?b.x:b.y,h=d.reversed,i=d.tickPositions,j=this.getLabelSides(),k=j[0],j=j[1],l,o,n,s=this.label.line||0;l=d.labelEdge;o=d.justifyLabels&&(e||f);l[s]===t||g+k>l[s]?l[s]=\n\tg+j:o||(c=!1);if(o){l=(o=d.justifyToPlot)?d.pos:0;o=o?l+d.len:d.chart.chartWidth;do a+=e?1:-1,n=d.ticks[i[a]];while(i[a]&&(!n||n.label.line!==s));d=n&&n.label.xy&&n.label.xy.x+n.getLabelSides()[e?0:1];e&&!h||f&&h?g+k<l&&(g=l-k,n&&g+j>d&&(c=!1)):g+j>o&&(g=o-j,n&&g+k<d&&(c=!1));b.x=g}return c},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-\n\te.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,l=i.staggerLines,o=i.chart.renderer.fontMetrics(e.style.fontSize).b,n=e.rotation,a=a+e.x-(f&&d?f*j*(k?-1:1):0),b=b+e.y-(f&&!d?f*j*(k?1:-1):0);n&&i.side===2&&(b-=o-o*Z(n*Ca));!r(e.y)&&!n&&(b+=o-c.getBBox().height/2);if(l)c.line=g/(h||1)%l,b+=c.line*(i.labelOffset/l);return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine([\"M\",\n\ta,b,\"L\",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,j=this.pos,k=e.labels,l=this.gridLine,o=h?h+\"Grid\":\"grid\",n=h?h+\"Tick\":\"tick\",s=e[o+\"LineWidth\"],p=e[o+\"LineColor\"],J=e[o+\"LineDashStyle\"],L=e[n+\"Length\"],o=e[n+\"Width\"]||0,x=e[n+\"Color\"],r=e[n+\"Position\"],n=this.mark,v=k.step,q=!0,u=d.tickmarkOffset,w=this.getPosition(g,j,u,b),y=w.x,w=w.y,B=g&&y===d.pos+d.len||!g&&w===d.pos?-1:1;this.isActive=!0;if(s){j=d.getPlotLinePath(j+\n\tu,s*B,b,!0);if(l===t){l={stroke:p,\"stroke-width\":s};if(J)l.dashstyle=J;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=s?f.path(j).attr(l).add(d.gridGroup):null}if(!b&&l&&j)l[this.isNew?\"attr\":\"animate\"]({d:j,opacity:c})}if(o&&L)r===\"inside\"&&(L=-L),d.opposite&&(L=-L),h=this.getMarkPath(y,w,L,o*B,g,f),n?n.animate({d:h,opacity:c}):this.mark=f.path(h).attr({stroke:x,\"stroke-width\":o,opacity:c}).add(d.axisGroup);if(i&&!isNaN(y))i.xy=w=this.getLabelPosition(y,w,i,g,k,u,a,v),this.isFirst&&!this.isLast&&\n\t!m(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!m(e.showLastLabel,1)?q=!1:!d.isRadial&&!k.step&&!k.rotation&&!b&&c!==0&&(q=this.handleOverflow(a,w)),v&&a%v&&(q=!1),q&&!isNaN(w.y)?(w.opacity=c,i[this.isNew?\"attr\":\"animate\"](w),this.isNew=!1):i.attr(\"y\",-9999)},destroy:function(){Oa(this,this.axis)}};R.PlotLineOrBand=function(a,b){this.axis=a;if(b)this.options=b,this.id=b.id};R.PlotLineOrBand.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,\n\tg=a.label,h=e.width,i=e.to,j=e.from,k=r(j)&&r(i),l=e.value,o=e.dashStyle,n=a.svgElem,s=[],p,J=e.color,L=e.zIndex,x=e.events,q={},t=b.chart.renderer;b.isLog&&(j=za(j),i=za(i),l=za(l));if(h){if(s=b.getPlotLinePath(l,h),q={stroke:J,\"stroke-width\":h},o)q.dashstyle=o}else if(k){j=v(j,b.min-d);i=C(i,b.max+d);s=b.getPlotBandPath(j,i,e);if(J)q.fill=J;if(e.borderWidth)q.stroke=e.borderColor,q[\"stroke-width\"]=e.borderWidth}else return;if(r(L))q.zIndex=L;if(n)if(s)n.animate({d:s},null,n.onGetPath);else{if(n.hide(),\n\tn.onGetPath=function(){n.show()},g)a.label=g=g.destroy()}else if(s&&s.length&&(a.svgElem=n=t.path(s).attr(q).add(),x))for(p in d=function(b){n.on(b,function(c){x[b].apply(a,[c])})},x)d(p);if(f&&r(f.text)&&s&&s.length&&b.width>0&&b.height>0){f=w({align:c&&k&&\"center\",x:c?!k&&4:10,verticalAlign:!c&&k&&\"middle\",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g){q={align:f.textAlign||f.align,rotation:f.rotation};if(r(L))q.zIndex=L;a.label=g=t.text(f.text,0,0,f.useHTML).attr(q).css(f.style).add()}b=[s[1],\n\ts[4],m(s[6],s[1])];s=[s[2],s[5],m(s[7],s[2])];c=Na(b);k=Na(s);g.align(f,!1,{x:c,y:k,width:Ba(b)-c,height:Ba(s)-k});g.show()}else g&&g.hide();return a},destroy:function(){ja(this.axis.plotLinesAndBands,this);delete this.axis;Oa(this)}};la.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:\"%H:%M:%S.%L\",second:\"%H:%M:%S\",minute:\"%H:%M\",hour:\"%H:%M\",day:\"%e. %b\",week:\"%e. %b\",month:\"%b '%y\",year:\"%Y\"},endOnTick:!1,gridLineColor:\"#C0C0C0\",labels:N,lineColor:\"#C0D0E0\",lineWidth:1,minPadding:0.01,\n\tmaxPadding:0.01,minorGridLineColor:\"#E0E0E0\",minorGridLineWidth:1,minorTickColor:\"#A0A0A0\",minorTickLength:2,minorTickPosition:\"outside\",startOfWeek:1,startOnTick:!1,tickColor:\"#C0D0E0\",tickLength:10,tickmarkPlacement:\"between\",tickPixelInterval:100,tickPosition:\"outside\",tickWidth:1,title:{align:\"middle\",style:{color:\"#707070\"}},type:\"linear\"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,\n\ttickWidth:0,title:{rotation:270,text:\"Values\"},stackLabels:{enabled:!1,formatter:function(){return Ga(this.total,-1)},style:N.style}},defaultLeftAxisOptions:{labels:{x:-15,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:20},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-15},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?\"xAxis\":\"yAxis\";this.opposite=\n\tb.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e===\"category\";this.names=[];this.isLog=e===\"logarithmic\";this.isDatetimeAxis=e===\"datetime\";this.isLinked=r(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement===\n\t\"between\"?0.5:0;this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.min=this.max=null;this.crosshair=m(d.crosshair,qa(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;Da(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length,0,this):a.axes.push(this),a[this.coll].push(this));\n\tthis.series=this.series||[];if(a.inverted&&c&&this.reversed===t)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)K(this,f,d[f]);if(this.isLog)this.val2lin=za,this.lin2val=ia},setOptions:function(a){this.options=w(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],w(E[this.coll],a))},defaultLabelFormatter:function(){var a=\n\tthis.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=E.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ia(h,this);else if(c)g=b;else if(d)g=cb(d,b);else if(f&&a>=1E3)for(;f--&&g===t;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Ga(b/c,-1)+e[f]);g===t&&(g=M(b)>=1E4?Ga(b,0):Ga(b,-1,t,\"\"));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.buildStacks&&a.buildStacks();p(a.series,function(c){if(c.visible||\n\t!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=C(m(a.dataMin,d[0]),Na(d)),a.dataMax=v(m(a.dataMax,d[0]),Ba(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(r(c)&&r(e))a.dataMin=C(m(a.dataMin,c),c),a.dataMax=v(m(a.dataMax,e),e);if(r(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMax<d)a.dataMax=d,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e,f){var g=\n\t1,h=0,i=d?this.oldTransA:this.transA,d=d?this.oldMin:this.min,j=this.minPixelPadding,e=(this.options.ordinal||this.isLog&&e)&&this.lin2val;if(!i)i=this.transA;if(c)g*=-1,h=this.len;this.reversed&&(g*=-1,h-=g*(this.sector||this.len));b?(a=a*g+h,a-=j,a=a/i+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),f===\"between\"&&(f=0.5),a=g*(a-d)*i+h+g*j+(ha(f)?i*f*this.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-\n\t(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,e){var f=this.chart,g=this.left,h=this.top,i,j,k=c&&f.oldChartHeight||f.chartHeight,l=c&&f.oldChartWidth||f.chartWidth,o;i=this.transB;e=m(e,this.translate(a,null,null,c));a=c=u(e+i);i=j=u(k-e-i);if(isNaN(e))o=!0;else if(this.horiz){if(i=h,j=k-this.bottom,a<g||a>g+this.width)o=!0}else if(a=g,c=l-this.right,i<h||i>h+this.height)o=!0;return o&&!d?null:f.renderer.crispLine([\"M\",a,i,\"L\",c,j],b||1)},getLinearTickPositions:function(a,\n\tb,c){var d,e=da(T(b/a)*a),f=da(Ka(c/a)*a),g=[];if(b===c&&ha(b))return[b];for(b=e;b<=f;){g.push(b);b=da(b+a);if(b===d)break;d=b}return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a<e;a++)d=d.concat(this.getLogTickPositions(c,b[a-1],b[a],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval===\"auto\")d=d.concat(this.getTimeTicks(this.normalizeTimeTickInterval(c),this.min,this.max,a.startOfWeek)),d[0]<this.min&&\n\td.shift();else for(b=this.min+(b[0]-this.min)%c;b<=this.max;b+=c)d.push(b);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===t&&!this.isLog)r(a.min)||r(a.max)?this.minRange=null:(p(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===t||h<f)f=h}),this.minRange=C(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=\n\t(k-c+b)/2;d=[b-d,m(a.min,b-d)];if(e)d[2]=this.dataMin;b=Ba(d);c=[b+k,m(a.max,b+k)];if(e)c[2]=this.dataMax;c=Na(c);c-b<k&&(d[0]=c-k,d[1]=m(a.min,c-k),b=Ba(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this,c=b.max-b.min,d=b.axisPointRange||0,e,f=0,g=0,h=b.linkedParent,i=!!b.categories,j=b.transA;if(b.isXAxis||i||d)h?(f=h.minPointOffset,g=h.pointRangePadding):p(b.series,function(a){var h=i?1:b.isXAxis?a.pointRange:b.axisPointRange||0,j=a.options.pointPlacement,n=a.closestPointRange;\n\th>c&&(h=0);d=v(d,h);f=v(f,Fa(j)?0:h/2);g=v(g,j===\"on\"?0:h);!a.noSharedTooltip&&r(n)&&(e=r(e)?C(e,n):n)}),h=b.ordinalSlope&&e?b.ordinalSlope/e:1,b.minPointOffset=f*=h,b.pointRangePadding=g*=h,b.pointRange=C(d,c),b.closestPointRange=e;if(a)b.oldTransA=j;b.translationSlope=b.transA=j=b.len/(c+g||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=j*f},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding,\n\tk=d.minPadding,l=d.tickInterval,o=d.minTickInterval,n=d.tickPixelInterval,s,$=b.categories;h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=m(c.min,c.dataMin),b.max=m(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ra(11,1)):(b.min=m(b.userMin,d.min,b.dataMin),b.max=m(b.userMax,d.max,b.dataMax));if(e)!a&&C(b.min,m(b.dataMin,b.min))<=0&&ra(10,1),b.min=da(za(b.min)),b.max=da(za(b.max));if(b.range&&r(b.max))b.userMin=b.min=v(b.min,b.max-b.range),b.userMax=b.max,b.range=\n\tnull;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!$&&!b.axisPointRange&&!b.usePercentage&&!h&&r(b.min)&&r(b.max)&&(c=b.max-b.min)){if(!r(d.min)&&!r(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!r(d.max)&&!r(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}if(ha(d.floor))b.min=v(b.min,d.floor);if(ha(d.ceiling))b.max=C(b.max,d.ceiling);b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&n===b.linkedParent.options.tickPixelInterval?b.tickInterval=\n\tb.linkedParent.tickInterval:(b.tickInterval=m(l,$?1:(b.max-b.min)*n/v(b.len,n)),!r(l)&&b.len<n&&!this.isRadial&&!this.isLog&&!$&&d.startOnTick&&d.endOnTick&&(s=!0,b.tickInterval/=4));g&&!a&&p(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange)b.tickInterval=v(b.pointRange,b.tickInterval);if(!l&&b.tickInterval<\n\to)b.tickInterval=o;if(!f&&!e&&!l)b.tickInterval=nb(b.tickInterval,null,mb(b.tickInterval),d);b.minorTickInterval=d.minorTickInterval===\"auto\"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=a=d.tickPositions?[].concat(d.tickPositions):i&&i.apply(b,[b.min,b.max]);if(!a)!b.ordinalPositions&&(b.max-b.min)/b.tickInterval>v(2*b.len,200)&&ra(19,!0),a=f?b.getTimeTicks(b.normalizeTimeTickInterval(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,\n\t!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),s&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h<f&&a.pop(),a.length===1&&(d=M(b.max)>1E13?1:0.001,b.min-=d,b.max+=d)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.coll,this.pos,this.len].join(\"-\");if(!this.isLinked&&\n\t!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1&&this.min!==t){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(da(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(r(d)&&a!==d)this.isDirty=\n\t!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!==this.oldAxisLength;p(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax){if(!this.isXAxis)for(b in a)for(c in a[b])a[b][c].total=null,a[b][c].cum=0;this.forceRedraw=!1;this.getSeriesExtremes();this.setTickPositions();this.oldUserMin=\n\tthis.userMin;this.oldUserMax=this.userMax;if(!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==this.oldMax}else if(!this.isXAxis){if(this.oldStacks)a=this.stacks=this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}this.setMaxTicks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=m(c,!0),e=q(e,{min:a,max:b});D(f,\"setExtremes\",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;f.isDirtyExtremes=!0;c&&g.redraw(d)})},zoom:function(a,b){var c=this.dataMin,d=this.dataMax,\n\te=this.options;this.allowZoomOutside||(r(c)&&a<=C(c,m(e.min,c))&&(a=t),r(d)&&b>=v(d,m(e.max,d))&&(b=t));this.displayBtn=a!==t||b!==t;this.setExtremes(a,b,!1,t,{trigger:\"zoom\"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=this.horiz,e=m(b.width,a.plotWidth-c+(b.offsetRight||0)),f=m(b.height,a.plotHeight),g=m(b.top,a.plotTop),b=m(b.left,a.plotLeft+c),c=/%$/;c.test(f)&&(f=parseInt(f,10)/100*a.plotHeight);c.test(g)&&(g=parseInt(g,10)/100*a.plotHeight+a.plotTop);\n\tthis.left=b;this.top=g;this.width=e;this.height=f;this.bottom=a.chartHeight-f-g;this.right=a.chartWidth-e-b;this.len=v(d?e:f,0);this.pos=d?b:g},getExtremes:function(){var a=this.isLog;return{min:a?da(ia(this.min)):this.min,max:a?da(ia(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ia(this.min):this.min,b=b?ia(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=\n\t(m(a,0)-this.side*90+720)%360;return a>15&&a<165?\"right\":a>195&&a<345?\"left\":\"center\"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,o=0,n=d.title,s=d.labels,$=0,J=b.axisOffset,L=b.clipOffset,x=[-1,1,1,-1][h],q,u=1,w=m(s.maxStaggerLines,5),y,z,A,B,na=h===2?c.fontMetrics(s.style.fontSize).b:0;a.hasData=j=a.hasVisibleSeries||r(a.min)&&r(a.max)&&!!e;a.showAxis=b=j||m(d.showEmpty,!0);a.staggerLines=\n\ta.horiz&&s.staggerLines;if(!a.axisGroup)a.gridGroup=c.g(\"grid\").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g(\"axis\").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g(\"axis-labels\").attr({zIndex:s.zIndex||7}).addClass(\"highcharts-\"+a.coll.toLowerCase()+\"-labels\").add();if(j||a.isLinked){a.labelAlign=m(s.align||a.autoLabelAlign(s.rotation));p(e,function(b){f[b]?f[b].addLabel():f[b]=new Sa(a,b)});if(a.horiz&&!a.staggerLines&&w&&!s.rotation){for(q=a.reversed?[].concat(e).reverse():e;u<w;){j=\n\t[];y=!1;for(s=0;s<q.length;s++)z=q[s],A=(A=f[z].label&&f[z].label.getBBox())?A.width:0,B=s%u,A&&(z=a.translate(z),j[B]!==t&&z<j[B]&&(y=!0),j[B]=z+A);if(y)u++;else break}if(u>1)a.staggerLines=u}p(e,function(b){if(h===0||h===2||{1:\"left\",3:\"right\"}[h]===a.labelAlign)$=v(f[b].getLabelSize(),$)});if(a.staggerLines)$*=a.staggerLines,a.labelOffset=$}else for(q in f)f[q].destroy(),delete f[q];if(n&&n.text&&n.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(n.text,0,0,n.useHTML).attr({zIndex:7,rotation:n.rotation||\n\t0,align:n.textAlign||{low:\"left\",middle:\"center\",high:\"right\"}[n.align]}).addClass(\"highcharts-\"+this.coll.toLowerCase()+\"-title\").css(n.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?\"height\":\"width\"],o=m(n.margin,g?5:10),l=n.offset;a.axisTitle[b?\"show\":\"hide\"]()}a.offset=x*m(d.offset,J[h]);a.axisTitleMargin=m(l,$+o+($&&x*d.labels[g?\"y\":\"x\"]-na));J[h]=v(J[h],a.axisTitleMargin+k+x*a.offset);L[i]=v(L[i],T(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite,\n\td=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine([\"M\",e?this.left:f,e?d:this.top,\"L\",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=z(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*\n\tthis.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.horiz,c=a.reversed,d=a.chart,e=d.renderer,f=a.options,g=a.isLog,h=a.isLinked,i=a.tickPositions,j,k=a.axisTitle,l=a.ticks,o=a.minorTicks,n=a.alternateBands,s=f.stackLabels,m=f.alternateGridColor,J=a.tickmarkOffset,L=f.lineWidth,x=d.hasRendered&&r(a.oldMin)&&!isNaN(a.oldMin),q=a.hasData,v=a.showAxis,u,w=f.labels.overflow,y=a.justifyLabels=b&&w!==\n\t!1,z;a.labelEdge.length=0;a.justifyToPlot=w===\"justify\";p([l,o,n],function(a){for(var b in a)a[b].isActive=!1});if(q||h)if(a.minorTickInterval&&!a.categories&&p(a.getMinorTickPositions(),function(b){o[b]||(o[b]=new Sa(a,b,\"minor\"));x&&o[b].isNew&&o[b].render(null,!0);o[b].render(null,!1,1)}),i.length&&(j=i.slice(),(b&&c||!b&&!c)&&j.reverse(),y&&(j=j.slice(1).concat([j[0]])),p(j,function(b,c){y&&(c=c===j.length-1?0:c+1);if(!h||b>=a.min&&b<=a.max)l[b]||(l[b]=new Sa(a,b)),x&&l[b].isNew&&l[b].render(c,\n\t!0,0.1),l[b].render(c,!1,1)}),J&&a.min===0&&(l[-1]||(l[-1]=new Sa(a,-1,null,!0)),l[-1].render(-1))),m&&p(i,function(b,c){if(c%2===0&&b<a.max)n[b]||(n[b]=new R.PlotLineOrBand(a)),u=b+J,z=i[c+1]!==t?i[c+1]+J:a.max,n[b].options={from:g?ia(u):u,to:g?ia(z):z,color:m},n[b].render(),n[b].isActive=!0}),!a._addedPlotLB)p((f.plotLines||[]).concat(f.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0;p([l,o,n],function(a){var b,c,e=[],f=va?va.duration||500:0,g=function(){for(c=e.length;c--;)a[e[c]]&&\n\t!a[e[c]].isActive&&(a[e[c]].destroy(),delete a[e[c]])};for(b in a)if(!a[b].isActive)a[b].render(b,!1,0),a[b].isActive=!1,e.push(b);a===n||!d.hasRendered||!f?g():f&&setTimeout(g,f)});if(L)b=a.getLinePath(L),a.axisLine?a.axisLine.animate({d:b}):a.axisLine=e.path(b).attr({stroke:f.lineColor,\"stroke-width\":L,zIndex:7}).add(a.axisGroup),a.axisLine[v?\"show\":\"hide\"]();if(k&&v)k[k.isNew?\"attr\":\"animate\"](a.getTitlePosition()),k.isNew=!1;s&&s.enabled&&a.renderStackTotals();a.isDirty=!1},redraw:function(){var a=\n\tthis.chart.pointer;a&&a.reset(!0);this.render();p(this.plotLinesAndBands,function(a){a.render()});p(this.series,function(a){a.isDirty=!0})},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||W(b);for(d in c)Oa(c[d]),c[d]=null;p([b.ticks,b.minorTicks,b.alternateBands],function(a){Oa(a)});for(a=e.length;a--;)e[a].destroy();p(\"stackTotalGroup,axisLine,axisTitle,axisGroup,cross,gridGroup,labelGroup\".split(\",\"),function(a){b[a]&&(b[a]=b[a].destroy())});this.cross&&this.cross.destroy()},\n\tdrawCrosshair:function(a,b){if(this.crosshair)if((r(b)||!m(this.crosshair.snap,!0))===!1)this.hideCrosshair();else{var c,d=this.crosshair,e=d.animation;m(d.snap,!0)?r(b)&&(c=this.chart.inverted!=this.horiz?b.plotX:this.len-b.plotY):c=this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos;c=this.isRadial?this.getPlotLinePath(this.isXAxis?b.x:m(b.stackY,b.y)):this.getPlotLinePath(null,null,null,null,c);if(c===null)this.hideCrosshair();else if(this.cross)this.cross.attr({visibility:\"visible\"})[e?\"animate\":\n\t\"attr\"]({d:c},e);else{e={\"stroke-width\":d.width||1,stroke:d.color||\"#C0C0C0\",zIndex:d.zIndex||2};if(d.dashStyle)e.dashstyle=d.dashStyle;this.cross=this.chart.renderer.path(c).attr(e).add()}}},hideCrosshair:function(){this.cross&&this.cross.hide()}};q(la.prototype,{getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a);d&&c?d.push(c[4],c[5],c[1],c[2]):d=null;return d},addPlotBand:function(a){this.addPlotBandOrLine(a,\"plotBands\")},addPlotLine:function(a){this.addPlotBandOrLine(a,\n\t\"plotLines\")},addPlotBandOrLine:function(a,b){var c=(new R.PlotLineOrBand(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]||[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();p([c.plotLines||[],d.plotLines||[],c.plotBands||[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id===a&&ja(b,b[e])})}});la.prototype.getTimeTicks=function(a,b,\n\tc,d){var e=[],f={},g=E.global.useUTC,h,i=new Date(b-Ra),j=a.unitRange,k=a.count;if(r(b)){j>=A.second&&(i.setMilliseconds(0),i.setSeconds(j>=A.minute?0:k*T(i.getSeconds()/k)));if(j>=A.minute)i[Db](j>=A.hour?0:k*T(i[pb]()/k));if(j>=A.hour)i[Eb](j>=A.day?0:k*T(i[qb]()/k));if(j>=A.day)i[sb](j>=A.month?1:k*T(i[Xa]()/k));j>=A.month&&(i[Fb](j>=A.year?0:k*T(i[fb]()/k)),h=i[gb]());j>=A.year&&(h-=h%k,i[Gb](h));if(j===A.week)i[sb](i[Xa]()-i[rb]()+m(d,1));b=1;Ra&&(i=new Date(i.getTime()+Ra));h=i[gb]();for(var d=\n\ti.getTime(),l=i[fb](),o=i[Xa](),n=g?Ra:(864E5+i.getTimezoneOffset()*6E4)%864E5;d<c;)e.push(d),j===A.year?d=eb(h+b*k,0):j===A.month?d=eb(h,l+b*k):!g&&(j===A.day||j===A.week)?d=eb(h,l,o+b*k*(j===A.day?1:7)):d+=j*k,b++;e.push(d);p(vb(e,function(a){return j<=A.hour&&a%A.day===n}),function(a){f[a]=\"day\"})}e.info=q(a,{higherRanks:f,totalRange:j*k});return e};la.prototype.normalizeTimeTickInterval=function(a,b){var c=b||[[\"millisecond\",[1,2,5,10,20,25,50,100,200,500]],[\"second\",[1,2,5,10,15,30]],[\"minute\",\n\t[1,2,5,10,15,30]],[\"hour\",[1,2,3,4,6,8,12]],[\"day\",[1,2]],[\"week\",[1,2]],[\"month\",[1,2,3,4,6]],[\"year\",null]],d=c[c.length-1],e=A[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=A[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+A[c[g+1][0]])/2)break;e===A.year&&a<5*e&&(f=[1,2,5]);c=nb(a/e,f,d[0]===\"year\"?v(mb(a/e),1):1);return{unitRange:e,count:c,unitName:d[0]}};la.prototype.getLogTickPositions=function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=u(a),g=this.getLinearTickPositions(a,\n\tb,c);else if(a>=0.08)for(var f=T(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=za(ia(f)*e[h]),j>b&&(!d||k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=ia(b),c=ia(c),a=e[d?\"minorTickInterval\":\"tickInterval\"],a=m(a===\"auto\"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=nb(a,null,mb(a)),g=Ua(this.getLinearTickPositions(a,b,c),za),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=\n\ta;return g};var Mb=R.Tooltip=function(){this.init.apply(this,arguments)};Mb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=z(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label(\"\",0,0,b.shape||\"callout\",null,null,b.useHTML,null,\"tooltip\").attr({padding:e,fill:b.backgroundColor,\"stroke-width\":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});fa||this.label.shadow(b.shadow);this.shared=b.shared},\n\tdestroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden,h=e.followPointer||e.len>1;q(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:h?t:g?(2*f.anchorX+c)/3:c,anchorY:h?t:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(M(a-f.x)>1||M(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a=\n\tthis,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},m(this.options.hideDelay,500)),b&&p(b,function(a){a.setState()}),this.chart.hoverPoints=null},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=qa(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===t&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(p(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow?\n\t(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:h]);return Ua(c,u)},getPosition:function(a,b,c){var d=this.chart,e=this.distance,f={},g,h=[\"y\",d.chartHeight,b,c.plotY+d.plotTop],i=[\"x\",d.chartWidth,a,c.plotX+d.plotLeft],j=c.ttBelow||d.inverted&&!c.negative||!d.inverted&&c.negative,k=function(a,b,c,d){var g=c<d-e,b=d+e+c<b,c=d-e-c;d+=e;if(j&&b)f[a]=d;else if(!j&&g)f[a]=c;else if(g)f[a]=c;else if(b)f[a]=\n\td;else return!1},l=function(a,b,c,d){if(d<e||d>b-e)return!1;else f[a]=d<c/2?1:d>b-c/2?b-c-2:d-c/2},o=function(a){var b=h;h=i;i=b;g=a},n=function(){k.apply(0,h)!==!1?l.apply(0,i)===!1&&!g&&(o(!0),n()):g?f.x=f.y=0:(o(!0),n())};(d.inverted||this.len>1)&&o();n();return f},defaultFormatter:function(a){var b=this.points||qa(this),c=b[0].series,d;d=[a.tooltipHeaderFormatter(b[0])];p(b,function(a){c=a.series;d.push(c.tooltipFormatter&&c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))});\n\td.push(a.options.footerFormat||\"\");return d.join(\"\")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=this.shared;clearTimeout(this.hideTimer);this.followPointer=qa(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&p(h,function(a){a.setState()}),p(a,function(a){a.setState(\"hover\");j.push(a.getLabelConfig())}),h={x:a[0].category,\n\ty:a[0].y},h.points=j,this.len=j.length,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;this.distance=m(h.tooltipOptions.distance,16);i===!1?this.hide():(this.isHidden&&(bb(d),d.attr(\"opacity\",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||\"#606060\",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g,negative:a.negative,ttBelow:a.ttBelow}),this.isHidden=!1);D(c,\"tooltipRefresh\",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,\n\tc=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(u(c.x),u(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)},tooltipHeaderFormatter:function(a){var b=a.series,c=b.tooltipOptions,d=c.dateTimeLabelFormats,e=c.xDateFormat,f=b.xAxis,g=f&&f.options.type===\"datetime\"&&ha(a.key),c=c.headerFormat,f=f&&f.closestPointRange,h;if(g&&!e){if(f)for(h in A){if(A[h]>=f||A[h]<=A.day&&a.key%A[h]>0){e=d[h];break}}else e=d.day;e=e||d.year}g&&e&&(c=c.replace(\"{point.key}\",\"{point.key:\"+\n\te+\"}\"));return Ia(c,{point:a,series:b})}};var oa;$a=y.documentElement.ontouchstart!==t;var Wa=R.Pointer=function(a,b){this.init(a,b)};Wa.prototype={init:function(a,b){var c=b.chart,d=c.events,e=fa?\"\":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.hasZoom=f||e;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(R.Tooltip&&b.tooltip.enabled)a.tooltip=new Mb(a,b.tooltip),\n\tthis.followTouchMove=b.tooltip.followTouchMove;this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||window.event,a=Sb(a);if(!a.target)a.target=a.srcElement;d=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;if(!b)this.chartPosition=b=Rb(this.chart.container);d.pageX===t?(c=v(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return q(a,{chartX:u(c),chartY:u(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};p(this.chart.axes,function(c){b[c.isXAxis?\"xAxis\":\n\t\"yAxis\"].push({axis:c,value:c.toValue(a[c.horiz?\"chartX\":\"chartY\"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e,f,g=b.hoverPoint,h=b.hoverSeries,i,j,k=b.chartWidth,l=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!h||!h.noSharedTooltip)){f=[];i=c.length;for(j=0;j<i;j++)if(c[j].visible&&c[j].options.enableMouseTracking!==!1&&!c[j].noSharedTooltip&&\n\tc[j].singularTooltips!==!0&&c[j].tooltipPoints.length&&(e=c[j].tooltipPoints[l])&&e.series)e._dist=M(l-e.clientX),k=C(k,e._dist),f.push(e);for(i=f.length;i--;)f[i]._dist>k&&f.splice(i,1);if(f.length&&f[0].clientX!==this.hoverX)d.refresh(f,a),this.hoverX=f[0].clientX}c=h&&h.tooltipOptions.followPointer;if(h&&h.tracker&&!c){if((e=h.tooltipPoints[l])&&e!==g)e.onMouseOver(a)}else d&&c&&!d.isHidden&&(h=d.getAnchor([{}],a),d.updatePosition({plotX:h[0],plotY:h[1]}));if(d&&!this._onDocumentMouseMove)this._onDocumentMouseMove=\n\tfunction(a){if(V[oa])V[oa].pointer.onDocumentMouseMove(a)},K(y,\"mousemove\",this._onDocumentMouseMove);p(b.axes,function(b){b.drawCrosshair(a,m(e,g))})},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,f=e&&e.shared?b.hoverPoints:d;(a=a&&e&&f)&&qa(f)[0].plotX===t&&(a=!1);if(a)e.refresh(f),d&&d.setState(d.state,!0);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&e.hide();if(this._onDocumentMouseMove)W(y,\"mousemove\",this._onDocumentMouseMove),this._onDocumentMouseMove=null;\n\tp(b.axes,function(a){a.hideCrosshair()});this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;p(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},\n\tdrag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,o=this.mouseDownX,n=this.mouseDownY;d<h?d=h:d>h+j&&(d=h+j);e<i?e=i:e>i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(o-d,2)+Math.pow(n-e,2));if(this.hasDragged>10){l=b.isInsidePlot(o-h,n-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill||\n\t\"rgba(69,114,167,0.25)\",zIndex:7}).add();this.selectionMarker&&f&&(d-=o,this.selectionMarker.attr({width:M(d),x:(d>0?0:d)+o}));this.selectionMarker&&g&&(d=e-n,this.selectionMarker.attr({height:M(d),y:(d>0?0:d)+n}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},a=this.selectionMarker,e=a.attr?a.attr(\"x\"):a.x,f=a.attr?a.attr(\"y\"):a.y,g=a.attr?a.attr(\"width\"):\n\ta.width,h=a.attr?a.attr(\"height\"):a.height,i;if(this.hasDragged||c)p(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?e:f),b=a.toValue(b?e+g:f+h);!isNaN(c)&&!isNaN(b)&&(d[a.coll].push({axis:a,min:C(c,b),max:v(c,b)}),i=!0)}}),i&&D(b,\"selection\",d,function(a){b.zoom(q(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)G(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=\n\t!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){V[oa]&&V[oa].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,\"highcharts-tracker\")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){var a=V[oa];if(a)a.pointer.reset(),a.pointer.chartPosition=\n\tnull},onContainerMouseMove:function(a){var b=this.chart;oa=b.index;a=this.normalize(a);b.mouseIsDown===\"mousedown\"&&this.drag(a);(this.inClass(a.target,\"highcharts-tracker\")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=H(a,\"class\"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf(\"highcharts-container\")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,c=(a=a.relatedTarget||\n\ta.toElement)&&a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,\"highcharts-tooltip\")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,a=this.normalize(a);a.cancelBubble=!0;b.cancelClick||(c&&this.inClass(a.target,\"highcharts-tracker\")?(D(c.series,\"click\",q(a,{point:c})),b.hoverPoint&&c.firePointEvent(\"click\",a)):(q(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&D(b,\"click\",a)))},setDOMEvents:function(){var a=\n\tthis,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)};K(b,\"mouseleave\",a.onContainerMouseLeave);ab===1&&K(y,\"mouseup\",a.onDocumentMouseUp);if($a)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},ab===1&&K(y,\"touchend\",a.onDocumentTouchEnd)},destroy:function(){var a;W(this.chart.container,\"mouseleave\",this.onContainerMouseLeave);\n\tab||(W(y,\"mouseup\",this.onDocumentMouseUp),W(y,\"touchend\",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};q(R.Pointer.prototype,{pinchTranslate:function(a,b,c,d,e,f){(this.zoomHor||this.pinchHor)&&this.pinchTranslateDirection(!0,a,b,c,d,e,f);(this.zoomVert||this.pinchVert)&&this.pinchTranslateDirection(!1,a,b,c,d,e,f)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,j=a?\"x\":\"y\",k=a?\"X\":\"Y\",l=\"chart\"+k,o=a?\"width\":\"height\",n=i[\"plot\"+(a?\n\t\"Left\":\"Top\")],s,m,p=h||1,q=i.inverted,x=i.bounds[a?\"h\":\"v\"],r=b.length===1,v=b[0][l],u=c[0][l],t=!r&&b[1][l],w=!r&&c[1][l],y,c=function(){!r&&M(v-t)>20&&(p=h||M(u-w)/M(v-t));m=(n-u)/p+v;s=i[\"plot\"+(a?\"Width\":\"Height\")]/p};c();b=m;b<x.min?(b=x.min,y=!0):b+s>x.max&&(b=x.max-s,y=!0);y?(u-=0.8*(u-g[j][0]),r||(w-=0.8*(w-g[j][1])),c()):g[j]=[u,w];q||(f[j]=m-n,f[o]=s);f=q?1/p:p;e[o]=s;e[j]=b;d[q?a?\"scaleY\":\"scaleX\":\"scale\"+k]=p;d[\"translate\"+k]=f*n+(u-f*v)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,\n\te=b.followTouchMove,f=a.touches,g=f.length,h=b.lastValidTouch,i=b.hasZoom,j=b.selectionMarker,k={},l=g===1&&(b.inClass(a.target,\"highcharts-tracker\")&&c.runTrackerClick||c.runChartClick),o={};(i||e)&&!l&&a.preventDefault();Ua(f,function(a){return b.normalize(a)});if(a.type===\"touchstart\")p(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],p(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?\"h\":\"v\"],d=a.minPixelPadding,\n\te=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=C(e,f),e=v(e,f);b.min=C(a.pos,g-d);b.max=v(a.pos+a.len,e+d)}});else if(d.length){if(!j)b.selectionMarker=j=q({destroy:sa},c.plotBox);b.pinchTranslate(d,f,k,j,o,h);b.hasPinched=i;b.scaleGroups(k,o);!i&&e&&g===1&&this.runPointActions(b.normalize(a))}},onContainerTouchStart:function(a){var b=this.chart;oa=b.index;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()):\n\ta.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){V[oa]&&V[oa].pointer.drop(a)}});if(I.PointerEvent||I.MSPointerEvent){var ua={},zb=!!I.PointerEvent,Wb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in ua)ua.hasOwnProperty(a)&&b.push({pageX:ua[a].pageX,pageY:ua[a].pageY,target:ua[a].target});return b},Ab=function(a,b,c,d){a=a.originalEvent||a;if((a.pointerType===\"touch\"||\n\ta.pointerType===a.MSPOINTER_TYPE_TOUCH)&&V[oa])d(a),d=V[oa].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:sa,touches:Wb()})};q(Wa.prototype,{onContainerPointerDown:function(a){Ab(a,\"onContainerTouchStart\",\"touchstart\",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Ab(a,\"onContainerTouchMove\",\"touchmove\",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!ua[a.pointerId].target)ua[a.pointerId].target=a.currentTarget})},\n\tonDocumentPointerUp:function(a){Ab(a,\"onContainerTouchEnd\",\"touchend\",function(a){delete ua[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,zb?\"pointerdown\":\"MSPointerDown\",this.onContainerPointerDown);a(this.chart.container,zb?\"pointermove\":\"MSPointerMove\",this.onContainerPointerMove);a(y,zb?\"pointerup\":\"MSPointerUp\",this.onDocumentPointerUp)}});Ma(Wa.prototype,\"init\",function(a,b,c){a.call(this,b,c);(this.hasZoom||this.followTouchMove)&&G(b.container,{\"-ms-touch-action\":Q,\"touch-action\":Q})});\n\tMa(Wa.prototype,\"setDOMEvents\",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(K)});Ma(Wa.prototype,\"destroy\",function(a){this.batchMSEvents(W);a.call(this)})}var lb=R.Legend=function(a,b){this.init(a,b)};lb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=m(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=z(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=w(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY=\n\te-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.symbolWidth=m(b.symbolWidth,16),c.pages=[],c.render(),K(c.chart,\"endResize\",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.legendColor||a.color||\"#CCC\":g,g=a.options&&a.options.marker,i={fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in i.stroke=h,g=a.convertAttribs(g),\n\tg)d=g[j],d!==t&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;p([\"legendItem\",\"legendLine\",\"legendSymbol\",\"legendGroup\"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Pa(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},\n\tpositionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,p(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,G(f,{left:b.translateX+e.checkboxOffset+f.x-20+\"px\",top:g+\"px\",display:g>c-6&&g<c+d-6?\"\":Q}))})},renderTitle:function(){var a=this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,\"legend-title\").attr({zIndex:1}).css(b.style).add(this.group);\n\ta=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},renderItem:function(a){var b=this.chart,c=b.renderer,d=this.options,e=d.layout===\"horizontal\",f=this.symbolWidth,g=d.symbolPadding,h=this.itemStyle,i=this.itemHiddenStyle,j=this.padding,k=e?m(d.itemDistance,20):0,l=!d.rtl,o=d.width,n=d.itemMarginBottom||0,s=this.itemMarginTop,p=this.initialItemX,q=a.legendItem,r=a.series&&a.series.drawLegendSymbol?a.series:a,x=r.options,x=this.createCheckboxForItem&&\n\tx&&x.showCheckbox,t=d.useHTML;if(!q)a.legendGroup=c.g(\"legend-item\").attr({zIndex:1}).add(this.scrollGroup),r.drawLegendSymbol(this,a),a.legendItem=q=c.text(d.labelFormat?Ia(d.labelFormat,a):d.labelFormatter.call(a),l?f+g:-g,this.baseline,t).css(w(a.visible?h:i)).attr({align:l?\"left\":\"right\",zIndex:2}).add(a.legendGroup),this.setItemEvents&&this.setItemEvents(a,q,t,h,i),this.colorizeItem(a,a.visible),x&&this.createCheckboxForItem(a);c=q.getBBox();f=a.checkboxOffset=d.itemWidth||a.legendItemWidth||\n\tf+g+c.width+k+(x?20:0);this.itemHeight=g=u(a.legendItemHeight||c.height);if(e&&this.itemX-p+f>(o||b.chartWidth-2*j-p-d.x))this.itemX=p,this.itemY+=s+this.lastLineHeight+n,this.lastLineHeight=0;this.maxItemWidth=v(this.maxItemWidth,f);this.lastItemY=s+this.itemY+n;this.lastLineHeight=v(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=s+g+n,this.lastLineHeight=g);this.offsetWidth=o||v((e?this.itemX-p-k:f)+j,this.offsetWidth)},getAllItems:function(){var a=\n\t[];p(this.chart.series,function(b){var c=b.options;if(m(c.showInLegend,!r(c.linkedTo)?t:!1,!0))a=a.concat(b.legendItems||(c.legendType===\"point\"?b.data:b))});return a},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,o=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g(\"legend\").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);\n\ta.renderTitle();e=a.getAllItems();ob(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;p(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||o){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?\"attr\":\"animate\"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,\n\t\"stroke-width\":l||0,fill:o||Q}).add(d).shadow(j.shadow),i.isNew=!0;i[f?\"show\":\"hide\"]()}a.legendWidth=g;a.legendHeight=h;p(e,function(b){a.positionItem(b)});f&&d.align(q({width:g,height:h},j),!0,\"spacingBox\");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign===\"top\"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,j=e.navigation,k=m(j.animation,!0),l=j.arrowSize||12,o=this.nav,n=this.pages,\n\ts,q=this.allItems;e.layout===\"horizontal\"&&(f/=2);g&&(f=C(f,g));n.length=0;if(a>f&&!e.useHTML){this.clipHeight=h=f-20-this.titleHeight-this.padding;this.currentPage=m(this.currentPage,1);this.fullHeight=a;p(q,function(a,b){var c=a._legendItemPos[1],d=u(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(s||c)!==n[e-1])n.push(s||c),e++;b===q.length-1&&c+d-n[e-1]>h&&n.push(c);c!==s&&(s=c)});if(!i)i=b.clipRect=d.clipRect(0,this.padding,9999,0),b.contentGroup.clip(i);i.attr({height:h});if(!o)this.nav=\n\to=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol(\"triangle\",0,0,l,l).on(\"click\",function(){b.scroll(-1,k)}).add(o),this.pager=d.text(\"\",15,10).css(j.style).add(o),this.down=d.symbol(\"triangle-down\",0,0,l,l).on(\"click\",function(){b.scroll(1,k)}).add(o);b.scroll(0);a=f}else if(o)i.attr({height:c.chartHeight}),o.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation,\n\th=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==t&&Qa(b,this.chart),this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:\"visible\"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?\"default\":\"pointer\"}),i.attr({text:e+\"/\"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?\"default\":\"pointer\"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}};\n\tN=R.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||12;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-5-c/2,a.symbolWidth,c,a.options.symbolRadius||0).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline-u(e.fontMetrics(a.options.itemStyle.fontSize).b*0.3),g;if(b.lineWidth){g={\"stroke-width\":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=\n\te.path([\"M\",0,a,\"L\",d,a]).attr(g).add(f)}if(c&&c.enabled!==!1)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};(/Trident\\/7\\.0/.test(wa)||Ta)&&Ma(lb.prototype,\"positionItem\",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)});Ya.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=w(E,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray(\"margin\",d);this.spacing=this.splashArray(\"spacing\",\n\td);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=V.length;V.push(f);ab++;d.reflow!==!1&&K(f,\"load\",function(){f.initReflow()});if(e)for(g in e)K(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=fa?!1:m(d.animation,!0);f.pointCount=0;f.counters=new Bb;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=F[a.type||b.type||b.defaultSeriesType])||ra(17,!0);b=new b;b.init(this,\n\ta);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&p(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,o=l.isHidden(),n=[];Qa(a,this);o&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&\n\t(g=!0,a.isDirty)){h=!0;break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;p(c,function(a){a.isDirty&&a.options.legendType===\"point\"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,p(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();p(b,function(a){a.isDirty&&(i=!0)});p(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,n.push(function(){D(a,\"afterSetExtremes\",\n\tq(a.eventArgs,a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();p(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset(!0);l.draw();D(this,\"redraw\");o&&this.cloneRenderTo(!0);p(n,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===a)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===\n\ta)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=qa(b.xAxis||{}),b=b.yAxis=qa(b.yAxis||{});p(c,function(a,b){a.index=b;a.isX=!0});p(b,function(a,b){a.index=b});c=c.concat(b);p(c,function(b){new la(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];p(this.series,function(b){a=a.concat(vb(b.points||[],function(a){return a.selected}))});return a},getSelectedSeries:function(){return vb(this.series,function(a){return a.selected})},getStacks:function(){var a=\n\tthis;p(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks=a.stacks});p(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+m(b.options.stack,\"\")})},setTitle:function(a,b,c){var g;var d=this,e=d.options,f;f=e.title=w(e.title,a);g=e.subtitle=w(e.subtitle,b),e=g;p([[\"title\",a,f],[\"subtitle\",b,e]],function(a){var b=a[0],c=d[b],e=a[1],a=a[2];c&&e&&(d[b]=c=c.destroy());a&&a.text&&!c&&(d[b]=d.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,\n\t\"class\":\"highcharts-\"+b,zIndex:a.zIndex||4}).css(a.style).add())});d.layOutTitles(c)},layOutTitles:function(a){var b=0,c=this.title,d=this.subtitle,e=this.options,f=e.title,e=e.subtitle,g=this.spacingBox.width-44;if(c&&(c.css({width:(f.width||g)+\"px\"}).align(q({y:15},f),!1,\"spacingBox\"),!f.floating&&!f.verticalAlign))b=c.getBBox().height;d&&(d.css({width:(e.width||g)+\"px\"}).align(q({y:b+f.margin},e),!1,\"spacingBox\"),!e.floating&&!e.verticalAlign&&(b=Ka(b+d.getBBox().height)));c=this.titleOffset!==\n\tb;this.titleOffset=b;if(!this.isDirtyBox&&c)this.isDirtyBox=c,this.hasRendered&&m(a,!0)&&this.isDirtyBox&&this.redraw()},getChartSize:function(){var a=this.options.chart,b=a.width,a=a.height,c=this.renderToClone||this.renderTo;if(!r(b))this.containerWidth=jb(c,\"width\");if(!r(a))this.containerHeight=jb(c,\"height\");this.chartWidth=v(0,b||this.containerWidth||600);this.chartHeight=v(0,m(a,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;\n\ta?b&&(this.renderTo.appendChild(c),Pa(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),G(b,{position:\"absolute\",top:\"-9999px\",display:\"block\"}),b.style.setProperty&&b.style.setProperty(\"display\",\"block\",\"important\"),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e=\"highcharts-\"+tb++;if(Fa(a))this.renderTo=a=y.getElementById(a);\n\ta||ra(13,!0);c=z(H(a,\"data-highcharts-chart\"));!isNaN(c)&&V[c]&&V[c].hasRendered&&V[c].destroy();H(a,\"data-highcharts-chart\",this.index);a.innerHTML=\"\";!b.skipClone&&!a.offsetWidth&&this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=Y(Ja,{className:\"highcharts-container\"+(b.className?\" \"+b.className:\"\"),id:e},q({position:\"relative\",overflow:\"hidden\",width:c+\"px\",height:d+\"px\",textAlign:\"left\",lineHeight:\"normal\",zIndex:0,\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\"},\n\tb.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new ta(a,c,d,b.style,!0):new Za(a,c,d,b.style);fa&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,f=m(e.margin,20),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!r(d[0]))this.plotTop=v(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i===\"right\"){if(!r(d[1]))this.marginRight=\n\tv(this.marginRight,c.legendWidth-g+f+a[1])}else if(i===\"left\"){if(!r(d[3]))this.plotLeft=v(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j===\"top\"){if(!r(d[0]))this.plotTop=v(this.plotTop,c.legendHeight+h+f+a[0])}else if(j===\"bottom\"&&!r(d[2]))this.marginBottom=v(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&p(this.axes,function(a){a.getOffset()});r(d[3])||\n\t(this.plotLeft+=b[3]);r(d[0])||(this.plotTop+=b[0]);r(d[2])||(this.marginBottom+=b[2]);r(d[1])||(this.marginRight+=b[1]);this.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||jb(d,\"width\"),f=c.height||jb(d,\"height\"),c=a?a.target:I,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&e&&f&&(c===I||c===y)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=setTimeout(d,100):d();b.containerWidth=\n\te;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};K(I,\"resize\",b);K(a,\"destroy\",function(){W(I,\"resize\",b)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&D(d,\"endResize\",null,function(){d.isResizing-=1})};Qa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(r(a))d.chartWidth=e=v(0,u(a)),d.hasUserSize=!!e;if(r(b))d.chartHeight=f=v(0,u(b));(va?kb:G)(d.container,{width:e+\"px\",height:f+\"px\"},va);d.setChartSize(!0);d.renderer.setSize(e,\n\tf,c);d.maxTicks=null;p(d.axes,function(a){a.isDirty=!0;a.setScale()});p(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;D(d,\"resize\");va===!1?g():setTimeout(g,va&&va.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=u(this.plotLeft);this.plotTop=j=u(this.plotTop);this.plotWidth=\n\tk=v(0,u(d-i-this.marginRight));this.plotHeight=l=v(0,u(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*T(this.plotBorderWidth/2);b=Ka(v(d,h[3])/2);c=Ka(v(d,h[0])/2);this.clipBox={x:b,y:c,width:T(this.plotSizeX-v(d,h[1])/2-b),height:T(this.plotSizeY-v(d,h[2])/2-c)};a||p(this.axes,function(a){a.setAxisSize();\n\ta.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=m(b[0],a[0]);this.marginRight=m(b[1],a[1]);this.marginBottom=m(b[2],a[2]);this.plotLeft=m(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,\n\to=a.plotBorderWidth||0,n,s=this.plotLeft,m=this.plotTop,p=this.plotWidth,q=this.plotHeight,r=this.plotBox,v=this.clipRect,u=this.clipBox;n=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp({width:c-n,height:d-n}));else{e={fill:j||Q};if(i)e.stroke=a.borderColor,e[\"stroke-width\"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass(\"highcharts-background\").add().shadow(a.shadow)}if(k)f?f.animate(r):this.plotBackground=b.rect(s,m,p,q,0).attr({fill:k}).add().shadow(a.plotShadow);\n\tif(l)h?h.animate(r):this.plotBGImage=b.image(l,s,m,p,q).add();v?v.animate({width:u.width,height:u.height}):this.clipRect=b.clipRect(u);if(o)g?g.animate(g.crisp({x:s,y:m,width:p,height:q})):this.plotBorder=b.rect(s,m,p,q,0,-o).attr({stroke:a.plotBorderColor,\"stroke-width\":o,fill:Q,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;p([\"inverted\",\"angular\",\"polar\"],function(g){c=F[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];\n\tfor(e=d&&d.length;!f&&e--;)(c=F[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;p(b,function(a){a.linkedSeries.length=0});p(b,function(b){var d=b.options.linkedTo;if(Fa(d)&&(d=d===\":previous\"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},renderSeries:function(){p(this.series,function(a){a.translate();a.setTooltipPoints&&a.setTooltipPoints();a.render()})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,e=d.labels,f=\n\td.credits,g;a.setTitle();a.legend=new lb(a,d.legend);a.getStacks();p(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;p(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&p(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g(\"series-group\").attr({zIndex:3}).add();a.renderSeries();e.items&&p(e.items,function(b){var d=q(e.style,b.style),f=z(d.left)+a.plotLeft,g=z(d.top)+a.plotTop+12;delete d.left;delete d.top;\n\tc.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on(\"click\",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;D(a,\"destroy\");V[a.index]=t;ab--;a.renderTo.removeAttribute(\"data-highcharts-chart\");W(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();\n\tp(\"title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer\".split(\",\"),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML=\"\",W(d),f&&Pa(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!aa&&I==I.top&&y.readyState!==\"complete\"||fa&&!I.canvg?(fa?Lb.push(function(){a.firstRender()},a.options.global.canvasToolsURL):y.attachEvent(\"onreadystatechange\",\n\tfunction(){y.detachEvent(\"onreadystatechange\",a.firstRender);y.readyState===\"complete\"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender()){a.getContainer();D(a,\"init\");a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();p(b.series||[],function(b){a.initSeries(b)});a.linkSeries();D(a,\"beforeRender\");if(R.Pointer)a.pointer=new Wa(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);p(a.callbacks,function(b){b.apply(a,[a])});a.cloneRenderTo(!0);\n\tD(a,\"load\")}},splashArray:function(a,b){var c=b[a],c=ca(c)?c:[c,c,c,c];return[m(b[a+\"Top\"],c[0]),m(b[a+\"Right\"],c[1]),m(b[a+\"Bottom\"],c[2]),m(b[a+\"Left\"],c[3])]}};Ya.prototype.callbacks=[];X=R.CenteredSeriesMixin={getCenter:function(){var a=this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[m(b[0],\"50%\"),m(b[1],\"50%\"),a.size||\"100%\",a.innerSize||0],g=C(e,f),h;return Ua(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*z(a)/100:\n\ta)+(d?c:0)})}};var Ea=function(){};Ea.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Ea.prototype.optionsToObject.call(this,a);q(this,a);this.options=this.options?q(this.options,a):a;if(d)this.y=this[d];if(this.x===\n\tt&&c)this.x=b===t?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.pointArrayMap||[\"y\"],e=d.length,f=0,g=0;if(typeof a===\"number\"||a===null)b[d[0]]=a;else if(La(a)){if(a.length>e){c=typeof a[0];if(c===\"string\")b.name=a[0];else if(c===\"number\")b.x=a[0];f++}for(;g<e;)b[d[g++]]=a[f++]}else if(typeof a===\"object\"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers=!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;\n\tif(b&&(this.setState(),ja(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)W(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a=\"graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup\".split(\",\"),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,\n\tpoint:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=m(c.valueDecimals,\"\"),e=c.valuePrefix||\"\",f=c.valueSuffix||\"\";p(b.pointArrayMap||[\"y\"],function(b){b=\"{point.\"+b;if(e||f)a=a.replace(b+\"}\",e+b+\"}\"+f);a=a.replace(b+\"}\",b+\":,.\"+d+\"f}\")});return Ia(a,{point:this,series:this.series})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&\n\tthis.importEvents();a===\"click\"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});D(this,a,b,c)}};var O=function(){};O.prototype={isCartesian:!0,type:\"line\",pointClass:Ea,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:\"lineColor\",\"stroke-width\":\"lineWidth\",fill:\"fillColor\",r:\"radius\"},axisTypes:[\"xAxis\",\"yAxis\"],colorCounter:0,parallelArrays:[\"x\",\"y\"],init:function(a,b){var c=this,d,e,f=a.series,g=function(a,b){return m(a.options.index,a._i)-m(b.options.index,\n\tb._i)};c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();q(c,{name:b.name,state:\"\",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if(fa)b.animation=!1;e=b.events;for(d in e)K(c,d,e[d]);if(e&&e.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor();c.getSymbol();p(c.parallelArrays,function(a){c[a+\"Data\"]=[]});c.setData(b.data,!1);if(c.isCartesian)a.hasCartesianSeries=!0;f.push(c);c._i=f.length-1;ob(f,g);this.yAxis&&\n\tob(this.yAxis.series,g);p(f,function(a,b){a.index=b;a.name=a.name||\"Series \"+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;p(a.axisTypes||[],function(e){p(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]!==t&&b[e]===d.id||b[e]===t&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});!a[e]&&a.optionalAxis!==e&&ra(18,!0)})},updateParallelArrays:function(a,b){var c=a.series,d=arguments;p(c.parallelArrays,typeof b===\"number\"?function(d){var f=d===\"y\"&&c.toYData?c.toYData(a):a[d];\n\tc[d+\"Data\"][b]=f}:function(a){Array.prototype[b].apply(c[a+\"Data\"],Array.prototype.slice.call(d,2))})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=m(b,a.pointStart,0);this.pointInterval=m(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else p(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+\n\t1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=w(e,c.series,a);this.tooltipOptions=w(E.tooltip,E.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;return c},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,\n\te;e=a.color||ba[this.type].color;if(!e&&!a.colorByPoint)r(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)r(a._symbolIndex)?a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:N.drawLineMarker,\n\tsetData:function(a,b,c,d){var e=this,f=e.points,g=f&&f.length||0,h,i=e.options,j=e.chart,k=null,l=e.xAxis,o=l&&!!l.categories,n=e.tooltipPoints,s=i.turboThreshold,q=this.xData,r=this.yData,v=(h=e.pointArrayMap)&&h.length,a=a||[];h=a.length;b=m(b,!0);if(d!==!1&&h&&g===h&&!e.cropped&&!e.hasGroupedData)p(a,function(a,b){f[b].update(a,!1)});else{e.xIncrement=null;e.pointRange=o?1:i.pointRange;e.colorCounter=0;p(this.parallelArrays,function(a){e[a+\"Data\"].length=0});if(s&&h>s){for(c=0;k===null&&c<h;)k=\n\ta[c],c++;if(ha(k)){o=m(i.pointStart,0);i=m(i.pointInterval,1);for(c=0;c<h;c++)q[c]=o,r[c]=a[c],o+=i;e.xIncrement=o}else if(La(k))if(v)for(c=0;c<h;c++)i=a[c],q[c]=i[0],r[c]=i.slice(1,v+1);else for(c=0;c<h;c++)i=a[c],q[c]=i[0],r[c]=i[1];else ra(12)}else for(c=0;c<h;c++)if(a[c]!==t&&(i={series:e},e.pointClass.prototype.applyOptions.apply(i,[a[c]]),e.updateParallelArrays(i,c),o&&i.name))l.names[i.x]=i.name;Fa(r[0])&&ra(14,!0);e.data=[];e.options.data=a;for(c=g;c--;)f[c]&&f[c].destroy&&f[c].destroy();\n\tif(n)n.length=0;if(l)l.minRange=l.userMinRange;e.isDirty=e.isDirtyData=j.isDirtyBox=!0;c=!1}b&&j.redraw(c)},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i=this.options,j=i.cropThreshold,k=0,l=this.isCartesian,o,n;if(l&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(l&&this.sorted&&(!j||d>j||this.forceCrop))if(o=h.min,n=h.max,b[d-1]<o||b[0]>n)b=[],c=[];else if(b[0]<o||b[d-1]>n)e=this.cropData(this.xData,this.yData,o,n),b=e.xData,c=e.yData,\n\te=e.start,f=!0,k=b.length;for(d=b.length-1;d>=0;d--)a=b[d]-b[d-1],!f&&b[d]>o&&b[d]<n&&k++,a>0&&(g===t||a<g)?g=a:a<0&&this.requireSorting&&ra(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c;this.activePointCount=k;if(i.pointRange===null)this.pointRange=g||1;this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=m(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>=c){f=v(0,i-h);break}for(;i<e;i++)if(a[i]>d){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,\n\tg),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],o;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(o=0;o<g;o++)i=h+o,j?l[o]=(new f).init(this,[d[o]].concat(qa(e[o]))):(b[i]?k=b[i]:a[i]!==t&&(b[i]=k=(new f).init(this,a[i],d[o])),l[o]=k);if(b&&(g!==(c=b.length)||j))for(o=0;o<c;o++)if(o===h&&!j&&(o+=g),b[o])b[o].destroyElements(),b[o].plotX=\n\tt;this.data=b;this.points=l},getExtremes:function(a){var b=this.yAxis,c=this.processedXData,d,e=[],f=0;d=this.xAxis.getExtremes();var g=d.min,h=d.max,i,j,k,l,a=a||this.stackedYData||this.processedYData;d=a.length;for(l=0;l<d;l++)if(j=c[l],k=a[l],i=k!==null&&k!==t&&(!b.isLog||k.length||k>0),j=this.getExtremesFromAll||this.cropped||(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=m(void 0,Na(e));this.dataMax=m(void 0,Ba(e))},translate:function(){this.processedXData||\n\tthis.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i===\"between\"||ha(i),k=a.threshold,a=0;a<g;a++){var l=f[a],o=l.x,n=l.y,s=l.low,p=b&&e.stacks[(this.negStacks&&n<k?\"-\":\"\")+this.stackKey];if(e.isLog&&n<=0)l.y=n=null;l.plotX=c.translate(o,0,0,0,1,i,this.type===\"flags\");if(b&&this.visible&&p&&p[o])p=p[o],n=p.points[this.index+\",\"+a],s=n[0],n=n[1],s===0&&(s=m(k,e.min)),\n\te.isLog&&s<=0&&(s=null),l.total=l.stackTotal=p.total,l.percentage=p.total&&l.y/p.total*100,l.stackY=n,p.setOffset(this.pointXOffset||0,this.barW||0);l.yBottom=r(s)?e.translate(s,0,1,0,1):null;h&&(n=this.modifyValue(n,l));l.plotY=typeof n===\"number\"&&n!==Infinity?e.translate(n,0,1,0,1):t;l.clientX=j?c.translate(o,0,0,0,1):l.plotX;l.negative=l.y<(k||0);l.category=d&&d[l.x]!==t?d[l.x]:l.x}this.getSegments()},animate:function(a){var b=this.chart,c=b.renderer,d;d=this.options.animation;var e=this.clipBox||\n\tb.clipBox,f=b.inverted,g;if(d&&!ca(d))d=ba[this.type].animation;g=[\"_sharedClip\",d.duration,d.easing,e.height].join(\",\");a?(a=b[g],d=b[g+\"m\"],a||(b[g]=a=c.clipRect(q(e,{width:0})),b[g+\"m\"]=d=c.clipRect(-99,f?-b.plotLeft:-b.plotTop,99,f?b.chartWidth:b.chartHeight)),this.group.clip(a),this.markerGroup.clip(d),this.sharedClipKey=g):((a=b[g])&&a.animate({width:b.plotSizeX},d),b[g+\"m\"]&&b[g+\"m\"].animate({width:b.plotSizeX+99},d),this.animate=null)},afterAnimate:function(){var a=this.chart,b=this.sharedClipKey,\n\tc=this.group,d=this.clipBox;if(c&&this.options.clip!==!1){if(!b||!d)c.clip(d?a.renderer.clipRect(d):a.clipRect);this.markerGroup.clip()}D(this,\"afterAnimate\");setTimeout(function(){b&&a[b]&&(d||(a[b]=a[b].destroy()),a[b+\"m\"]&&(a[b+\"m\"]=a[b+\"m\"].destroy()))},100)},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,j,k;d=this.options.marker;var l=this.pointAttr[\"\"],o,n=this.markerGroup,s=m(d.enabled,this.activePointCount<0.5*this.xAxis.len/d.radius);if(d.enabled!==!1||this._hasPointMarkers)for(f=\n\tb.length;f--;)if(g=b[f],d=T(g.plotX),e=g.plotY,k=g.graphic,i=g.marker||{},a=s&&i.enabled===t||i.enabled,o=c.isInsidePlot(u(d),e,c.inverted),a&&e!==t&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?\"select\":\"\"]||l,h=a.r,i=m(i.symbol,this.symbol),j=i.indexOf(\"url\")===0,k)k[o?\"show\":\"hide\"](!0).animate(q({x:d-h,y:e-h},k.symbolName?{width:2*h,height:2*h}:{}));else{if(o&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(n)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,\n\tb,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=m(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=ba[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color;f={stroke:g,fill:g};var h=a.points||[],i,j=[],k,l=a.pointAttrToOptions;k=a.hasPointSpecificOptions;var o=b.negativeColor,n=c.lineColor,s=c.fillColor;i=b.turboThreshold;var m;b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=\n\te.color||ya(e.color||g).brighten(e.brightness).get();j[\"\"]=a.convertAttribs(c,f);p([\"hover\",\"select\"],function(b){j[b]=a.convertAttribs(d[b],j[\"\"])});a.pointAttr=j;g=h.length;if(!i||g<i||k)for(;g--;){i=h[g];if((c=i.options&&i.options.marker||i.options)&&c.enabled===!1)c.radius=0;if(i.negative&&o)i.color=i.fillColor=o;k=b.colorByPoint||i.color;if(i.options)for(m in l)r(c[l[m]])&&(k=!0);if(k){c=c||{};k=[];d=c.states||{};f=d.hover=d.hover||{};if(!b.marker)f.color=f.color||!i.options.color&&e.color||\n\tya(i.color).brighten(f.brightness||e.brightness).get();f={color:i.color};if(!s)f.fillColor=i.color;if(!n)f.lineColor=i.color;k[\"\"]=a.convertAttribs(q(f,c),j[\"\"]);k.hover=a.convertAttribs(d.hover,j.hover,k[\"\"]);k.select=a.convertAttribs(d.select,j.select,k[\"\"])}else k=j;i.pointAttr=k}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\\/533/.test(wa),d,e,f=a.data||[],g,h,i;D(a,\"destroy\");W(a);p(a.axisTypes||[],function(b){if(i=a[b])ja(i.series,a),i.isDirty=i.forceRedraw=!0});a.legendItem&&a.chart.legend.destroyItem(a);\n\tfor(e=f.length;e--;)(g=f[e])&&g.destroy&&g.destroy();a.points=null;clearTimeout(a.animationTimeout);p(\"area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip\".split(\",\"),function(b){a[b]&&(d=c&&b===\"group\"?\"hide\":\"destroy\",a[b][d]())});if(b.hoverSeries===a)b.hoverSeries=null;ja(b.series,a);for(h in a)delete a[h]},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;p(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,\n\te,f)):(c.push(f?\"L\":\"M\"),d&&f&&(i=a[f-1],d===\"right\"?c.push(i.plotX,h):d===\"center\"?c.push((i.plotX+g)/2,i.plotY,(i.plotX+g)/2,h):c.push(g,i.plotY)),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a=this,b=[],c,d=[];p(a.segments,function(e){c=a.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[[\"graph\",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=b.linecap!==\"square\",g=this.getGraphPath(),\n\th=b.negativeColor;h&&c.push([\"graphNeg\",h]);p(c,function(c,h){var k=c[0],l=a[k];if(l)bb(l),l.animate({d:g});else if(d&&g.length)l={stroke:c[1],\"stroke-width\":d,fill:Q,zIndex:1},e?l.dashstyle=e:f&&(l[\"stroke-linecap\"]=l[\"stroke-linejoin\"]=\"round\"),a[k]=a.chart.renderer.path(g).attr(l).add(a.group).shadow(!h&&b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=\n\tb.chartHeight,k=v(e,j),l=this.yAxis;if(d&&(f||g)){d=u(l.toPixels(a.threshold||0,!0));d<0&&(k-=d);a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},\n\tinvertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};p([\"group\",\"markerGroup\"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)K(c,\"resize\",a),K(b,\"destroy\",function(){W(c,\"resize\",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?\"attr\":\"animate\"](this.getPlotBox());return f},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;\n\tif(a.inverted)b=c,c=this.xAxis;return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=(c=d.animation)&&!!a.animate&&b.renderer.isSVG&&m(c.duration,500)||0,f=a.visible?\"visible\":\"hidden\",g=d.zIndex,h=a.hasRendered,i=b.seriesGroup;c=a.plotGroup(\"group\",\"series\",f,g,i);a.markerGroup=a.plotGroup(\"markerGroup\",\"markers\",f,g,i);e&&a.animate(!0);a.getAttribs();c.inverted=a.isCartesian?b.inverted:!1;a.drawGraph&&(a.drawGraph(),\n\ta.clipNeg());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();d.clip!==!1&&!a.sharedClipKey&&!h&&c.clip(b.clipRect);e&&a.animate();if(!h)e?a.animationTimeout=setTimeout(function(){a.afterAnimate()},e):a.afterAnimate();a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,\n\theight:a.plotHeight}),c.animate({translateX:m(d&&d.left,a.plotLeft),translateY:m(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints&&this.setTooltipPoints(!0);this.render();b&&D(this,\"updatedData\")}};Hb.prototype={destroy:function(){Oa(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ia(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:\"hidden\"}):this.label=this.axis.chart.renderer.text(c,null,null,b.useHTML).css(b.style).attr({align:this.textAlign,\n\trotation:b.rotation,visibility:\"hidden\"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(c.usePercentage?100:this.total,0,0,0,1),c=c.translate(0),c=M(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e[this.options.crop===!1||d.isInsidePlot(f.x,f.y)?\"show\":\"hide\"](!0)}};la.prototype.buildStacks=function(){var a=\n\tthis.series,b=m(this.options.reversedStacks,!0),c=a.length;if(!this.isXAxis){for(this.usePercentage=!1;c--;)a[b?c:a.length-c-1].setStackedPoints();if(this.usePercentage)for(c=0;c<a.length;c++)a[c].setPercentStacks()}};la.prototype.renderStackTotals=function(){var a=this.chart,b=a.renderer,c=this.stacks,d,e,f=this.stackTotalGroup;if(!f)this.stackTotalGroup=f=b.g(\"stack-labels\").attr({visibility:\"visible\",zIndex:6}).add();f.translate(a.plotLeft,a.plotTop);for(d in c)for(e in a=c[d],a)a[e].render(f)};\n\tO.prototype.setStackedPoints=function(){if(this.options.stacking&&!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.stack,e=e.stacking,h=this.stackKey,i=\"-\"+h,j=this.negStacks,k=this.yAxis,l=k.stacks,o=k.oldStacks,n,m,p,q,r,u;for(q=0;q<d;q++){r=a[q];u=b[q];p=this.index+\",\"+q;m=(n=j&&u<f)?i:h;l[m]||(l[m]={});if(!l[m][r])o[m]&&o[m][r]?(l[m][r]=o[m][r],l[m][r].total=null):l[m][r]=new Hb(k,\n\tk.options.stackLabels,n,r,g);m=l[m][r];m.points[p]=[m.cum||0];e===\"percent\"?(n=n?h:i,j&&l[n]&&l[n][r]?(n=l[n][r],m.total=n.total=v(n.total,m.total)+M(u)||0):m.total=da(m.total+(M(u)||0))):m.total=da(m.total+(u||0));m.cum=(m.cum||0)+(u||0);m.points[p].push(m.cum);c[q]=m.cum}if(e===\"percent\")k.usePercentage=!0;this.stackedYData=c;k.oldStacks={}}};O.prototype.setPercentStacks=function(){var a=this,b=a.stackKey,c=a.yAxis.stacks,d=a.processedXData;p([b,\"-\"+b],function(b){var e;for(var f=d.length,g,h;f--;)if(g=\n\td[f],e=(h=c[b]&&c[b][g])&&h.points[a.index+\",\"+f],g=e)h=h.total?100/h.total:0,g[0]=da(g[0]*h),g[1]=da(g[1]*h),a.stackedYData[f]=g[1]})};q(Ya.prototype,{addSeries:function(a,b,c){var d,e=this;a&&(b=m(b,!0),D(e,\"addSeries\",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?\"xAxis\":\"yAxis\",f=this.options;new la(this,w(a,{index:this[e].length,isX:b}));f[e]=qa(f[e]||{});f[e].push(a);m(c,!0)&&this.redraw(d)},showLoading:function(a){var b=\n\tthis.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv=c=Y(Ja,{className:\"highcharts-loading\"},q(d.style,{zIndex:10,display:Q}),this.container),this.loadingSpan=Y(\"span\",null,d.labelStyle,c);this.loadingSpan.innerHTML=a||b.lang.loading;if(!this.loadingShown)G(c,{opacity:0,display:\"\",left:this.plotLeft+\"px\",top:this.plotTop+\"px\",width:this.plotWidth+\"px\",height:this.plotHeight+\"px\"}),kb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=\n\tthis.options,b=this.loadingDiv;b&&kb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){G(b,{display:Q})}});this.loadingShown=!1}});q(Ea.prototype,{update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=e.chart,j=e.options,b=m(b,!0);d.firePointEvent(\"update\",{options:a},function(){d.applyOptions(a);if(ca(a)){e.getAttribs();if(f)a&&a.marker&&a.marker.symbol?d.graphic=f.destroy():f.attr(d.pointAttr[d.state||\"\"]);if(a&&a.dataLabels&&d.dataLabel)d.dataLabel=d.dataLabel.destroy()}g=\n\tDa(d,h);e.updateParallelArrays(d,g);j.data[g]=d.options;e.isDirty=e.isDirtyData=!0;if(!e.fixedBox&&e.hasCartesianSeries)i.isDirtyBox=!0;j.legendType===\"point\"&&i.legend.destroyItem(d);b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.points,f=d.chart,g,h=d.data;Qa(b,f);a=m(a,!0);c.firePointEvent(\"remove\",null,function(){g=Da(c,h);h.length===e.length&&e.splice(g,1);h.splice(g,1);d.options.data.splice(g,1);d.updateParallelArrays(c,\"splice\",g,1);c.destroy();d.isDirty=!0;d.isDirtyData=\n\t!0;a&&f.redraw()})}});q(O.prototype,{addPoint:function(a,b,c,d){var e=this.options,f=this.data,g=this.graph,h=this.area,i=this.chart,j=this.xAxis&&this.xAxis.names,k=g&&g.shift||0,l=e.data,o,n=this.xData;Qa(d,i);c&&p([g,h,this.graphNeg,this.areaNeg],function(a){if(a)a.shift=k+1});if(h)h.isArea=!0;b=m(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);g=d.x;h=n.length;if(this.requireSorting&&g<n[h-1])for(o=!0;h&&n[h-1]>g;)h--;this.updateParallelArrays(d,\"splice\",h,0,0);this.updateParallelArrays(d,\n\th);if(j)j[g]=d.name;l.splice(h,0,a);o&&(this.data.splice(h,0,null),this.processData());e.legendType===\"point\"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),this.updateParallelArrays(d,\"shift\"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},remove:function(a,b){var c=this,d=c.chart,a=m(a,!0);if(!c.isRemoving)c.isRemoving=!0,D(c,\"remove\",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=\n\t!1},update:function(a,b){var c=this.chart,d=this.type,e=F[d].prototype,f,a=w(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(f in e)e.hasOwnProperty(f)&&(this[f]=t);q(this,F[a.type||d].prototype);this.init(c,a);m(b,!0)&&c.redraw(!1)}});q(la.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=w(this.userOptions,a);this.destroy(!0);this._addedPlotLB=t;this.init(c,q(a,{events:t}));c.isDirtyBox=\n\t!0;m(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);ja(b.axes,this);ja(b[c],this);b.options[c].splice(this.options.index,1);p(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;m(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});ga=ka(O);F.line=ga;ba.area=w(S,{threshold:0});var pa=ka(O,{type:\"area\",getSegments:function(){var a=\n\t[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,o,n;if(this.options.stacking&&!this.cropped){for(o=0;o<j.length;o++)g[j[o].x]=j[o];for(n in f)f[n].total!==null&&c.push(+n);c.sort(function(a,b){return a-b});p(c,function(a){if(!k||g[a]&&g[a].y!==null)g[a]?b.push(g[a]):(h=d.translate(a),l=f[a].percent?f[a].total?f[a].cum*100/f[a].total:0:f[a].cum,i=e.toPixels(l,!0),b.push({y:null,plotX:h,clientX:h,plotY:i,yBottom:i,onMouseOver:sa}))});\n\tb.length&&a.push(b)}else O.prototype.getSegments.call(this),a=this.segments;this.segments=a},getSegmentPath:function(a){var b=O.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push(\"L\",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-1;d>=0;d--)g=m(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},\n\tcloseSegment:function(a,b,c){a.push(\"L\",b[b.length-1].plotX,c,\"L\",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];O.prototype.drawGraph.apply(this);var a=this,b=this.areaPath,c=this.options,d=c.negativeColor,e=c.negativeFillColor,f=[[\"area\",this.color,c.fillColor]];(d||e)&&f.push([\"areaNeg\",d,e]);p(f,function(d){var e=d[0],f=a[e];f?f.animate({d:b}):a[e]=a.chart.renderer.path(b).attr({fill:m(d[2],ya(d[1]).setOpacity(m(c.fillOpacity,0.75)).get()),zIndex:0}).add(a.group)})},drawLegendSymbol:N.drawRectangle});\n\tF.area=pa;ba.spline=w(S);ga=ka(O,{type:\"spline\",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(f&&g){a=f.plotY;j=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*e+a)/2.5;j=(1.5*d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=v(a,e),k=2*e-i):i<a&&i<e&&(i=C(a,e),k=2*e-i);k>g&&k>e?(k=v(g,e),i=2*e-k):k<g&&k<e&&(k=C(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=[\"C\",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=\n\tf.rightContY=null):b=[\"M\",d,e];return b}});F.spline=ga;ba.areaspline=w(ba.area);pa=pa.prototype;ga=ka(ga,{type:\"areaspline\",closedStacks:!0,getSegmentPath:pa.getSegmentPath,closeSegment:pa.closeSegment,drawGraph:pa.drawGraph,drawLegendSymbol:N.drawRectangle});F.areaspline=ga;ba.column=w(S,{borderColor:\"#FFFFFF\",borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1,halo:!1},select:{color:\"#C0C0C0\",borderColor:\"#000000\",\n\tshadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},stickyTracking:!1,tooltip:{distance:6},threshold:0});ga=ka(O,{type:\"column\",pointAttrToOptions:{stroke:\"borderColor\",fill:\"color\",r:\"borderRadius\"},cropShoulder:0,trackerGroups:[\"group\",\"dataLabelsGroup\"],negStacks:!0,init:function(){O.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=\n\tc.reversed,f,g={},h,i=0;b.grouping===!1?i=1:p(a.chart.series,function(b){var c=b.options,e=b.yAxis;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos===e.pos)c.stacking?(f=b.stackKey,g[f]===t&&(g[f]=i++),h=g[f]):c.grouping!==!1&&(h=i++),b.columnIndex=h});var c=C(M(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||c.tickInterval||1),c.len),j=c*b.groupPadding,k=(c-2*j)/i,l=b.pointWidth,b=r(l)?(k-l)/2:k*b.pointPadding,l=m(l,k-2*b);return a.columnMetrics={width:l,offset:b+(j+((e?i-(a.columnIndex||\n\t0):a.columnIndex)||0)*k-c/2)*(e?-1:1)}},translate:function(){var a=this,b=a.chart,c=a.options,d=a.borderWidth=m(c.borderWidth,a.activePointCount>0.5*a.xAxis.len?0:1),e=a.yAxis,f=a.translatedThreshold=e.getThreshold(c.threshold),g=m(c.minPointLength,5),c=a.getColumnMetrics(),h=c.width,i=a.barW=Ka(v(h,1+2*d)),j=a.pointXOffset=c.offset,k=-(d%2?0.5:0),l=d%2?0.5:1;b.renderer.isVML&&b.inverted&&(l+=1);O.prototype.translate.apply(a);p(a.points,function(c){var d=m(c.yBottom,f),p=C(v(-999-d,c.plotY),e.len+\n\t999+d),q=c.plotX+j,r=i,t=C(p,d),x;x=v(p,d)-t;M(x)<g&&g&&(x=g,t=u(M(t-f)>g?d-g:f-(e.translate(c.y,0,1,0,1)<=f?g:0)));c.barX=q;c.pointWidth=h;c.tooltipPos=b.inverted?[e.len-p,a.xAxis.len-q-r/2]:[q+r/2,p];d=M(q)<0.5;r=u(q+r)+k;q=u(q)+k;r-=q;p=M(t)<0.5;x=u(t+x)+l;t=u(t)+l;x-=t;d&&(q+=1,r-=1);p&&(t-=1,x+=1);c.shapeType=\"rect\";c.shapeArgs={x:q,y:t,width:r,height:x}})},getSymbol:sa,drawLegendSymbol:N.drawRectangle,drawGraph:sa,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=c.animationLimit||\n\t250,f,g,h;p(a.points,function(i){var j=i.plotY,k=i.graphic;if(j!==t&&!isNaN(j)&&i.y!==null)f=i.shapeArgs,h=r(a.borderWidth)?{\"stroke-width\":a.borderWidth}:{},g=i.pointAttr[i.selected?\"select\":\"\"]||a.pointAttr[\"\"],k?(bb(k),k.attr(h)[b.pointCount<e?\"animate\":\"attr\"](w(f))):i.graphic=d[i.shapeType](f).attr(g).attr(h).add(a.group).shadow(c.shadow,null,c.stacking&&!c.borderRadius);else if(k)i.graphic=k.destroy()})},animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(aa)a?\n\t(e.scaleY=0.001,a=C(b.pos+b.len,v(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?\"translateX\":\"translateY\"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type===a.type)b.isDirty=!0});O.prototype.remove.apply(a,arguments)}});F.column=ga;ba.bar=w(ba.column);pa=ka(ga,{type:\"bar\",inverted:!0});F.bar=pa;ba.scatter=w(S,{lineWidth:0,tooltip:{headerFormat:'<span style=\"color:{series.color}\">●</span> <span style=\"font-size: 10px;\"> {series.name}</span><br/>',\n\tpointFormat:\"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>\"},stickyTracking:!1});pa=ka(O,{type:\"scatter\",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"markerGroup\"],takeOrdinalPosition:!1,singularTooltips:!0,drawGraph:function(){this.options.lineWidth&&O.prototype.drawGraph.call(this)}});F.scatter=pa;ba.pie=w(S,{borderColor:\"#FFFFFF\",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,\n\tlegendType:\"point\",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});S={type:\"pie\",isCartesian:!1,pointClass:ka(Ea,{init:function(){Ea.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;q(a,{visible:a.visible!==!1,name:m(a.name,\"Slice\")});b=function(b){a.slice(b.type===\"select\")};K(a,\"select\",b);K(a,\"unselect\",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart;b.visible=b.options.visible=\n\ta=a===t?!b.visible:a;c.options.data[Da(b,c.data)]=b.options;p([\"graphic\",\"dataLabel\",\"connector\",\"shadowGroup\"],function(c){if(b[c])b[c][a?\"show\":\"hide\"](!0)});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;Qa(c,d.chart);m(b,!0);this.sliced=this.options.sliced=a=r(a)?a:!this.sliced;d.options.data[Da(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);\n\tthis.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var b=this.shapeArgs,c=this.series.chart;return this.series.chart.renderer.symbols.arc(c.plotLeft+b.x,c.plotTop+b.y,b.r+a,b.r+a,{innerR:this.shapeArgs.r,start:b.start,end:b.end})}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"group\",\"dataLabelsGroup\"],axisTypes:[],pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\"},singularTooltips:!0,getColor:sa,animate:function(a){var b=this,c=b.points,d=\n\tb.startAngleRad;if(!a)p(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b,c,d){O.prototype.setData.call(this,a,!1,c,d);this.processData();this.generatePoints();m(b,!0)&&this.chart.redraw(c)},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;O.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?\n\t0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0?e.y/b*100:0,e.total=b},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ma/180*(i-90),i=(this.endAngleRad=ma/180*(m(c.endAngle,i+360)-90))-j,k=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,o,n=k.length,p;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=U.asin(C((b-a[1])/(a[2]/2+l),1));return a[0]+(c?-1:1)*Z(h)*(a[2]/\n\t2+l)};for(o=0;o<n;o++){p=k[o];f=j+b*i;if(!c||p.visible)b+=p.percentage/100;g=j+b*i;p.shapeType=\"arc\";p.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:u(f*1E3)/1E3,end:u(g*1E3)/1E3};h=(g+f)/2;h>1.5*ma?h-=2*ma:h<-ma/2&&(h+=2*ma);p.slicedTranslation={translateX:u(Z(h)*d),translateY:u(ea(h)*d)};f=Z(h)*a[2]/2;g=ea(h)*a[2]/2;p.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];p.half=h<-ma/2||h>ma/2?1:0;p.angle=h;e=C(e,l/2);p.labelPos=[a[0]+f+Z(h)*l,a[1]+g+ea(h)*l,a[0]+f+Z(h)*e,a[1]+g+ea(h)*e,a[0]+f,a[1]+g,l<0?\n\t\"center\":p.half?\"right\":\"left\",h]}},drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g(\"shadow\").add(a.group);p(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g(\"shadow\").add(a.shadowGroup);c=h.sliced?h.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(q(g,c)):h.graphic=d=b[h.shapeType](g).setRadialReference(a.center).attr(h.pointAttr[h.selected?\"select\":\n\t\"\"]).attr({\"stroke-linejoin\":\"round\"}).attr(c).add(a.group).shadow(e,f);h.visible!==void 0&&h.setVisible(h.visible)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:N.drawRectangle,getCenter:X.getCenter,getSymbol:sa};S=ka(O,S);F.pie=S;O.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,e=a.points,f,g,h,i;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),i=a.plotGroup(\"dataLabelsGroup\",\n\t\"data-labels\",\"hidden\",d.zIndex||6),!a.hasRendered&&m(d.defer,!0)&&(i.attr({opacity:0}),K(a,\"afterAnimate\",function(){a.dataLabelsGroup.show()[b.animation?\"animate\":\"attr\"]({opacity:1},{duration:200})})),g=d,p(e,function(b){var e,l=b.dataLabel,o,n,p=b.connector,u=!0;f=b.options&&b.options.dataLabels;e=m(f&&f.enabled,g.enabled);if(l&&!e)b.dataLabel=l.destroy();else if(e){d=w(g,f);e=d.rotation;o=b.getLabelConfig();h=d.format?Ia(d.format,o):d.formatter.call(o,d);d.style.color=m(d.color,d.style.color,\n\ta.color,\"black\");if(l)if(r(h))l.attr({text:h}),u=!1;else{if(b.dataLabel=l=l.destroy(),p)b.connector=p.destroy()}else if(r(h)){l={fill:d.backgroundColor,stroke:d.borderColor,\"stroke-width\":d.borderWidth,r:d.borderRadius||0,rotation:e,padding:d.padding,zIndex:1};for(n in l)l[n]===t&&delete l[n];l=b.dataLabel=a.chart.renderer[e?\"text\":\"label\"](h,0,-999,null,null,null,d.useHTML).attr(l).css(q(d.style,c&&{cursor:c})).add(i).shadow(d.shadow)}l&&a.alignDataLabel(b,l,d,null,u)}})};O.prototype.alignDataLabel=\n\tfunction(a,b,c,d,e){var f=this.chart,g=f.inverted,h=m(a.plotX,-999),i=m(a.plotY,-999),j=b.getBBox();if(a=this.visible&&(a.series.forceDL||f.isInsidePlot(h,u(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g)))d=q({x:g?f.plotWidth-i:h,y:u(g?f.plotHeight-h:i),width:0,height:0},d),q(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?\"attr\":\"animate\"](g)):(b.align(c,null,d),g=b.alignAttr,m(c.overflow,\"justify\")===\"justify\"?this.justifyDataLabel(b,\n\tc,g,j,d,e):m(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));if(!a)b.attr({y:-999}),b.placed=!1};O.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h===\"right\"?b.align=\"left\":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h===\"left\"?b.align=\"right\":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i===\"bottom\"?b.verticalAlign=\"top\":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i===\"top\"?b.verticalAlign=\"bottom\":b.y=g.plotHeight-\n\tj,k=!0;if(k)a.placed=!f,a.align(b,null,e)};if(F.pie)F.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=m(e.connectorPadding,10),g=m(e.connectorWidth,1),h=d.plotWidth,d=d.plotHeight,i,j,k=m(e.softConnector,!0),l=e.distance,o=a.center,n=o[2]/2,q=o[1],r=l>0,t,w,x,y,z=[[],[]],A,C,G,D,B,F=[0,0,0,0],N=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){O.prototype.drawDataLabels.apply(a);p(b,function(a){a.dataLabel&&a.visible&&z[a.half].push(a)});\n\tfor(D=0;!y&&b[D];)y=b[D]&&b[D].dataLabel&&(b[D].dataLabel.getBBox().height||21),D++;for(D=2;D--;){var b=[],K=[],H=z[D],I=H.length,E;a.sortByAngle(H,D-0.5);if(l>0){for(B=q-n-l;B<=q+n+l;B+=y)b.push(B);w=b.length;if(I>w){c=[].concat(H);c.sort(N);for(B=I;B--;)c[B].rank=B;for(B=I;B--;)H[B].rank>=w&&H.splice(B,1);I=H.length}for(B=0;B<I;B++){c=H[B];x=c.labelPos;c=9999;var Q,P;for(P=0;P<w;P++)Q=M(b[P]-x[1]),Q<c&&(c=Q,E=P);if(E<B&&b[B]!==null)E=B;else for(w<I-B+E&&b[B]!==null&&(E=w-I+B);b[E]===null;)E++;K.push({i:E,\n\ty:b[E]});b[E]=null}K.sort(N)}for(B=0;B<I;B++){c=H[B];x=c.labelPos;t=c.dataLabel;G=c.visible===!1?\"hidden\":\"visible\";c=x[1];if(l>0){if(w=K.pop(),E=w.i,C=w.y,c>C&&b[E+1]!==null||c<C&&b[E-1]!==null)C=c}else C=c;A=e.justify?o[0]+(D?-1:1)*(n+l):a.getX(E===0||E===b.length-1?c:C,D);t._attr={visibility:G,align:x[6]};t._pos={x:A+e.x+({left:f,right:-f}[x[6]]||0),y:C+e.y-10};t.connX=A;t.connY=C;if(this.options.size===null)w=t.width,A-w<f?F[3]=v(u(w-A+f),F[3]):A+w>h-f&&(F[1]=v(u(A+w-h+f),F[1])),C-y/2<0?F[0]=\n\tv(u(-C+y/2),F[0]):C+y/2>d&&(F[2]=v(u(C+y/2-d),F[2]))}}if(Ba(F)===0||this.verifyDataLabelOverflow(F))this.placeDataLabels(),r&&g&&p(this.points,function(b){i=b.connector;x=b.labelPos;if((t=b.dataLabel)&&t._pos)G=t._attr.visibility,A=t.connX,C=t.connY,j=k?[\"M\",A+(x[6]===\"left\"?5:-5),C,\"C\",A,C,2*x[2]-x[4],2*x[3]-x[5],x[2],x[3],\"L\",x[4],x[5]]:[\"M\",A+(x[6]===\"left\"?5:-5),C,\"L\",x[2],x[3],\"L\",x[4],x[5]],i?(i.animate({d:j}),i.attr(\"visibility\",G)):b.connector=i=a.chart.renderer.path(j).attr({\"stroke-width\":g,\n\tstroke:e.connectorColor||b.color||\"#606060\",visibility:G}).add(a.dataLabelsGroup);else if(i)b.connector=i.destroy()})}},F.pie.prototype.placeDataLabels=function(){p(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?\"animate\":\"attr\"](b),a.moved=!0):a&&a.attr({y:-999})})},F.pie.prototype.alignDataLabel=sa,F.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||80,f;d[0]!==null?e=v(b[2]-v(a[1],a[3]),c):(e=v(b[2]-\n\ta[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=v(C(e,b[2]-v(a[0],a[2])),c):(e=v(C(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);e<b[2]?(b[2]=e,this.translate(b),p(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels&&this.drawDataLabels()):f=!0;return f};if(F.column)F.column.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=a.dlBox||a.shapeArgs,i=a.below||a.plotY>m(this.translatedThreshold,f.plotSizeY),j=m(c.inside,!!this.options.stacking);if(h&&\n\t(d=w(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=m(c.align,!g||j?\"center\":i?\"right\":\"left\");c.verticalAlign=m(c.verticalAlign,g||j?\"middle\":i?\"top\":\"bottom\");O.prototype.alignDataLabel.call(this,a,b,c,d,e)};S=R.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver();\n\tfor(;d&&!e;)e=d.point,d=d.parentNode;if(e!==t&&e!==b.hoverPoint)e.onMouseOver(c)};p(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)p(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass(\"highcharts-tracker\").on(\"mouseover\",f).on(\"mouseout\",function(a){c.onTrackerMouseOut(a)}).css(e),$a))a[b].on(\"touchstart\",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:\n\ta.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},q=\"rgba(192,192,192,\"+(aa?1.0E-4:0.002)+\")\";if(e&&!c)for(m=e+1;m--;)d[m]===\"M\"&&d.splice(m+1,0,d[m+1]-i,d[m+2],\"L\"),(m&&d[m]===\"M\"||m===e)&&d.splice(m,0,\"L\",d[m-2]+i,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push(\"M\",e.plotX-i,e.plotY,\"L\",e.plotX+i,e.plotY);j?j.attr({d:d}):(a.tracker=h.path(d).attr({\"stroke-linejoin\":\"round\",\n\tvisibility:a.visible?\"visible\":\"hidden\",stroke:q,fill:c?q:Q,\"stroke-width\":b.lineWidth+(c?0:2*i),zIndex:2}).add(a.group),p([a.tracker,a.markerGroup],function(a){a.addClass(\"highcharts-tracker\").on(\"mouseover\",n).on(\"mouseout\",function(a){g.onTrackerMouseOut(a)}).css(l);if($a)a.on(\"touchstart\",n)}))}};if(F.column)ga.prototype.drawTracker=S.drawTrackerPoint;if(F.pie)F.pie.prototype.drawTracker=S.drawTrackerPoint;if(F.scatter)pa.prototype.drawTracker=S.drawTrackerPoint;q(lb.prototype,{setItemEvents:function(a,\n\tb,c,d,e){var f=this;(c?b:a.legendGroup).on(\"mouseover\",function(){a.setState(\"hover\");b.css(f.options.itemHoverStyle)}).on(\"mouseout\",function(){b.css(a.visible?d:e);a.setState()}).on(\"click\",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent(\"legendItemClick\",b,c):D(a,\"legendItemClick\",b,c)})},createCheckboxForItem:function(a){a.checkbox=Y(\"input\",{type:\"checkbox\",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,this.chart.container);\n\tK(a.checkbox,\"click\",function(b){D(a,\"checkboxClick\",{checked:b.target.checked},function(){a.select()})})}});E.legend.itemStyle.cursor=\"pointer\";q(Ya.prototype,{showResetZoom:function(){var a=this,b=E.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo===\"chart\"?null:\"plotBox\";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=\n\tthis;D(a,\"selection\",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?p(this.axes,function(a){b=a.zoom()}):p(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?\"zoomX\":\"zoomY\"]||c[h?\"pinchX\":\"pinchY\"])b=e.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom();else if(!d&&ca(e))this.resetZoomButton=e.destroy();b&&this.redraw(m(this.options.chart.animation,a&&a.animation,this.pointCount<\n\t100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&p(d,function(a){a.setState()});p(b===\"xy\"?[1,0]:[1],function(b){var d=a[b?\"chartX\":\"chartY\"],h=c[b?\"xAxis\":\"yAxis\"][0],i=c[b?\"mouseDownX\":\"mouseDownY\"],j=(h.pointRange||0)/2,k=h.getExtremes(),l=h.toValue(i-d,!0)+j,i=h.toValue(i+c[b?\"plotWidth\":\"plotHeight\"]-d,!0)-j;h.series.length&&l>C(k.dataMin,k.min)&&i<v(k.dataMax,k.max)&&(h.setExtremes(l,i,!1,!1,{trigger:\"pan\"}),e=!0);c[b?\"mouseDownX\":\"mouseDownY\"]=d});e&&c.redraw(!1);G(c.container,{cursor:\"move\"})}});\n\tq(Ea.prototype,{select:function(a,b){var c=this,d=c.series,e=d.chart,a=m(a,!c.selected);c.firePointEvent(a?\"select\":\"unselect\",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[Da(c,d.data)]=c.options;c.setState(a&&\"select\");b||p(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[Da(a,d.data)]=a.options,a.setState(\"\"),a.firePointEvent(\"unselect\")})})},onMouseOver:function(a){var b=this.series,c=b.chart,d=c.tooltip,e=c.hoverPoint;\n\tif(e&&e!==this)e.onMouseOut();this.firePointEvent(\"mouseOver\");d&&(!d.shared||b.noSharedTooltip)&&d.refresh(this,a);this.setState(\"hover\");c.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;if(!b||Da(this,b)===-1)this.firePointEvent(\"mouseOut\"),this.setState(),a.hoverPoint=null},importEvents:function(){if(!this.hasImportedEvents){var a=w(this.series.options.point,this.options).events,b;this.events=a;for(b in a)K(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a,\n\tb){var c=this.plotX,d=this.plotY,e=this.series,f=e.options.states,g=ba[e.type].marker&&e.options.marker,h=g&&!g.enabled,i=g&&g.states[a],j=i&&i.enabled===!1,k=e.stateMarkerGraphic,l=this.marker||{},m=e.chart,n=e.halo,p,a=a||\"\";p=this.pointAttr[a]||e.pointAttr[a];if(!(a===this.state&&!b||this.selected&&a!==\"select\"||f[a]&&f[a].enabled===!1||a&&(j||h&&i.enabled===!1)||a&&l.states&&l.states[a]&&l.states[a].enabled===!1)){if(this.graphic)g=g&&this.graphic.symbolName&&p.r,this.graphic.attr(w(p,g?{x:c-\n\tg,y:d-g,width:2*g,height:2*g}:{})),k&&k.hide();else{if(a&&i)if(g=i.radius,l=l.symbol||e.symbol,k&&k.currentSymbol!==l&&(k=k.destroy()),k)k[b?\"animate\":\"attr\"]({x:c-g,y:d-g});else if(l)e.stateMarkerGraphic=k=m.renderer.symbol(l,c-g,d-g,2*g,2*g).attr(p).add(e.markerGroup),k.currentSymbol=l;if(k)k[a&&m.isInsidePlot(c,d,m.inverted)?\"show\":\"hide\"]()}if((c=f[a]&&f[a].halo)&&c.size){if(!n)e.halo=n=m.renderer.path().add(e.seriesGroup);n.attr(q({fill:ya(this.color||e.color).setOpacity(c.opacity).get()},c.attributes))[b?\n\t\"animate\":\"attr\"]({d:this.haloPath(c.size)})}else n&&n.attr({d:[]});this.state=a}},haloPath:function(a){var b=this.series,c=b.chart,d=b.getPlotBox(),e=c.inverted;return c.renderer.symbols.circle(d.translateX+(e?b.yAxis.len-this.plotY:this.plotX)-a,d.translateY+(e?b.xAxis.len-this.plotX:this.plotY)-a,a*2,a*2)}});q(O.prototype,{onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&D(this,\"mouseOver\");this.setState(\"hover\");a.hoverSeries=\n\tthis},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&D(this,\"mouseOut\");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState();b.hoverSeries=null},setState:function(a){var b=this.options,c=this.graph,d=this.graphNeg,e=b.states,b=b.lineWidth,a=a||\"\";if(this.state!==a)this.state=a,e[a]&&e[a].enabled===!1||(a&&(b=e[a].lineWidth||b+1),c&&!c.dashstyle&&(a={\"stroke-width\":b},c.attr(a),d&&d.attr(a)))},\n\tsetVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===t?!h:a)?\"show\":\"hide\";p([\"group\",\"dataLabelsGroup\",\"markerGroup\",\"tracker\"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&p(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});p(c.linkedSeries,function(b){b.setVisible(a,!1)});if(g)d.isDirtyBox=!0;\n\tb!==!1&&d.redraw();D(c,f)},setTooltipPoints:function(a){var b=[],c,d,e=this.xAxis,f=e&&e.getExtremes(),g=e?e.tooltipLen||e.len:this.chart.plotSizeX,h,i,j=[];if(!(this.options.enableMouseTracking===!1||this.singularTooltips)){if(a)this.tooltipPoints=null;p(this.segments||this.points,function(a){b=b.concat(a)});e&&e.reversed&&(b=b.reverse());this.orderTooltipPoints&&this.orderTooltipPoints(b);a=b.length;for(i=0;i<a;i++)if(e=b[i],c=e.x,c>=f.min&&c<=f.max){h=b[i+1];c=d===t?0:d+1;for(d=b[i+1]?C(v(0,T((e.clientX+\n\t(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===t?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;D(this,a?\"select\":\"unselect\")},drawTracker:S.drawTrackerGraph});q(R,{Axis:la,Chart:Ya,Color:ya,Point:Ea,Tick:Sa,Renderer:Za,Series:O,SVGElement:P,SVGRenderer:ta,arrayMin:Na,arrayMax:Ba,charts:V,dateFormat:cb,format:Ia,pathAnim:ub,getOptions:function(){return E},\n\thasBidiBug:Nb,isTouchDevice:Jb,numberFormat:Ga,seriesTypes:F,setOptions:function(a){E=w(!0,E,a);Cb();return E},addEvent:K,removeEvent:W,createElement:Y,discardElement:Pa,css:G,each:p,extend:q,map:Ua,merge:w,pick:m,splat:qa,extendClass:ka,pInt:z,wrap:Ma,svg:aa,canvas:fa,vml:!aa&&!fa,product:\"Highcharts\",version:\"4.0.1\"})})();\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 142:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Sand-Signika theme for Highcharts JS\n\t * @author Torstein Honsi\n\t */\n\n\n\n\t// Add the background image to the container\n\tHighcharts.wrap(Highcharts.Chart.prototype, 'getContainer', function (proceed) {\n\t\tproceed.call(this);\n\t\tthis.container.style.background = 'url(http://www.highcharts.com/samples/graphics/sand.png)';\n\t});\n\n\n\tHighcharts.theme = {\n\t\tcolors: [\"#f45b5b\", \"#8085e9\", \"#8d4654\", \"#7798BF\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\t\tchart: {\n\t\t\tbackgroundColor: null,\n\t\t\tstyle: {\n\t\t\t\tfontFamily: \"Signika, serif\"\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: 'black',\n\t\t\t\tfontSize: '16px',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\tsubtitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: 'black'\n\t\t\t}\n\t\t},\n\t\ttooltip: {\n\t\t\tborderWidth: 0\n\t\t},\n\t\tlegend: {\n\t\t\titemStyle: {\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '13px'\n\t\t\t}\n\t\t},\n\t\txAxis: {\n\t\t\tlabels: {\n\t\t\t\tstyle: {\n\t\t\t\t\tcolor: '#6e6e70'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tyAxis: {\n\t\t\tlabels: {\n\t\t\t\tstyle: {\n\t\t\t\t\tcolor: '#6e6e70'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tplotOptions: {\n\t\t\tseries: {\n\t\t\t\tshadow: true\n\t\t\t},\n\t\t\tcandlestick: {\n\t\t\t\tlineColor: '#404048'\n\t\t\t}\n\t\t},\n\n\t\t// Highstock specific\n\t\tnavigator: {\n\t\t\txAxis: {\n\t\t\t\tgridLineColor: '#D0D0D8'\n\t\t\t}\n\t\t},\n\t\trangeSelector: {\n\t\t\tbuttonTheme: {\n\t\t\t\tfill: 'white',\n\t\t\t\tstroke: '#C0C0C8',\n\t\t\t\t'stroke-width': 1,\n\t\t\t\tstates: {\n\t\t\t\t\tselect: {\n\t\t\t\t\t\tfill: '#D0D0D8'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tscrollbar: {\n\t\t\ttrackBorderColor: '#C0C0C8'\n\t\t},\n\n\t\t// General\n\t\tbackground2: '#E0E0E8'\n\t\t\n\t};\n\n\t// Apply the theme\n\tHighcharts.setOptions(Highcharts.theme);\n\n\n/***/ },\n\n/***/ 155:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"' +\n\t((__t = (it.id || '' )) == null ? '' : __t) +\n\t'\">\\r\\n  <div class=\"modal-backdrop fade\"></div>\\r\\n  <div class=\"modal-dialog\">\\r\\n    <div class=\"modal-content\">\\r\\n\\r\\n      <div class=\"modal-header\">\\r\\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\r\\n        <h4 class=\"modal-title\">' +\n\t((__t = (it.header)) == null ? '' : __t) +\n\t'</h4>\\r\\n      </div>\\r\\n      <div class=\"modal-body\">\\r\\n        ' +\n\t((__t = (it.body)) == null ? '' : __t) +\n\t'\\r\\n      </div>\\r\\n      <div class=\"modal-footer\">\\r\\n        <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\r\\n      </div>\\r\\n\\r\\n    </div>\\r\\n  </div>\\r\\n</div>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ }\n\n});"
  },
  {
    "path": "static/entry.home.js",
    "content": "webpackJsonp([0],[\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var $nav = $('.toolar-ul');\n\n\t$nav.on(\"click\" , \"a\" , function (e){\n\t    e.preventDefault();\n\t    var href = $(this).attr(\"href\");\n\t    $(\"html,body\").animate({scrollTop:  ($(href).offset().top -120) + \"px\"});\n\t});\n\n\n\tsetTimeout(function (){\n\t    $nav.addClass(\"show\");\n\t},500)\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ }\n]);"
  },
  {
    "path": "static/entry.log.js",
    "content": "webpackJsonp([10],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar log = __webpack_require__(12);\n\tlog.init();\n\n\tvar source_trigger = __webpack_require__(14);\n\tsource_trigger.init();\n\n\tvar last_select = __webpack_require__(13);\n\tlast_select.init();\n\n/***/ },\n\n/***/ 12:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($, _) {/* global _ */\n\tvar dialog = __webpack_require__(140);\n\tvar Delegator = __webpack_require__(21);\n\n\tvar logTable = __webpack_require__(146);\n\tvar keyword = __webpack_require__(147);\n\tvar debar = __webpack_require__(148);\n\n\tvar logDetailDialog = __webpack_require__(22);\n\n\t__webpack_require__(23);\n\n\tvar logConfig = {\n\t        id: 0,\n\t        startDate: 0,\n\t        endDate: 0,\n\t        include: [],\n\t        exclude: [],\n\t        index: 0,\n\t        level: [1, 2, 4]\n\t    },\n\n\t    encodeHtml = function(str) {\n\t        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n\t    },\n\n\t    formatMsg = function (str){\n\t        return str.replace(/@/gi , '<br/><b style=\"color:#A78830\">@</b> ')\n\t    };\n\n\tvar maxDate = 60 * 60 * 1000 * 24 * 2;\n\n\tvar currentSelectId = -1,\n\t    currentIndex = 0,\n\t    noData = false,\n\t    MAX_LIMIT = 500,\n\t    loading = false;\n\n\tfunction addKeyword() {\n\t    var value = $.trim($('#keyword-ipt').val());\n\t    if (value !== '') {\n\t        if (!removeValue(value, logConfig.include)) {\n\t            $('#keyword-group').append(keyword({\n\t                it: {\n\t                    value: value\n\t                },\n\t                opt: {\n\t                    encodeHtml: encodeHtml,\n\t                    set: Delegator.set\n\t                }\n\t            }));\n\t        }\n\t        logConfig.include.push(value);\n\t        $('#keyword-ipt').val('');\n\t    }\n\t}\n\n\tfunction addDebar() {\n\t    var value = $.trim($('#debar-ipt').val());\n\t    if (value !== '') {\n\t        if (!removeValue(value, logConfig.exclude)) {\n\t            $('#debar-group').append(debar({\n\t                it: {\n\t                    value: value\n\t                },\n\t                opt: {\n\t                    encodeHtml: encodeHtml,\n\t                    set: Delegator.set\n\t                }\n\t            }));\n\t        }\n\t        logConfig.exclude.push(value);\n\t        $('#debar-ipt').val('');\n\t    }\n\t}\n\n\tfunction bindEvent() {\n\t    new Delegator(document.body)\n\t        .on('click', 'searchBusiness', function() {\n\t            // search business\n\t        }).on('click', 'addKeyword', addKeyword)\n\t        .on('keyup', 'addKeyword', function(e) {\n\t            if (e.which === 13) addKeyword();\n\t        }).on('click', 'removeKeywords', function() {\n\t            logConfig.include.length = 0;\n\t            $('#keyword-group').empty();\n\t        }).on('click', 'removeKeyword', function(e, value) {\n\t            $(this).closest('.keyword-tag').remove();\n\t            removeValue(value, logConfig.include);\n\t        }).on('click', 'addDebar', addDebar)\n\t        .on('keyup', 'addDebar', function(e) {\n\t            if (e.which === 13) addDebar();\n\t        }).on('click', 'removeDebars', function() {\n\t            logConfig.exclude.length = 0;\n\t            $('#debar-group').empty();\n\t        }).on('click', 'removeDebar', function(e, value) {\n\t            $(this).closest('.keyword-tag').remove();\n\t            removeValue(value, logConfig.exclude);\n\t        }).on('click', 'showLogs', function() {\n\t            var startTime = ($('#startTime').val() || '').replace(/-/g, '/'),\n\t                endTime = ($('#endTime').val() || '').replace(/-/g, '/');\n\t            logConfig.startDate = startTime === '' ?\n\t                new Date().getTime() - maxDate :\n\t                new Date(startTime).getTime();\n\t            logConfig.endDate = endTime === '' ?\n\t                new Date().getTime() :\n\t                new Date(endTime).getTime();\n\t            //测试时间是否符合\n\t            if (isTimeRight(logConfig.startDate, logConfig.endDate)) {\n\t                showLogs(logConfig, false);\n\t            }\n\t        })\n\t        .on('click', 'alertModal', function(e) {\n\t            var $target=$(e.currentTarget);\n\n\t            logDetailDialog({\n\t                id :$target.text(),\n\t                time :$target.siblings('.td-2').text(),\n\t                info :$target.siblings('.td-3').html(),\n\t                uin :$target.siblings('.td-4').text(),\n\t                ip :$target.siblings('.td-5').text(),\n\t                agent : $target.siblings('.td-6').attr(\"title\"),\n\t                source :   $target.siblings('.td-7').html() ,\n\t            })\n\n\t        }).on('change', 'selectBusiness', function() {\n\t            var val = $(this).val() - 0;\n\t            currentSelectId = val;\n\t            $('#log-table').html('');\n\t            currentIndex = 0;\n\t            noData = false;\n\t            logConfig.id = val;\n\t        }).on('click', 'showTd', function(e) {\n\t            var $target=$(e.currentTarget).toggleClass('active');\n\t            $('.main-table .'+$target.data('td')).toggleClass('active');\n\t            //保存用户偏好，隐藏为true\n\t            //console.log($target.data('td'));\n\t            localStorage.setItem($target.data('td'),!$target.hasClass('active'));\n\t            //console.log(localStorage);\n\t            window.classes[$target.data('td')]=$target.hasClass('active')?'active':'';\n\t        }).on('click', 'errorTypeClick', function() {\n\t            if ($(this).hasClass('msg-dis')) {\n\t                logConfig.level.push(4);\n\t                $(this).removeClass('msg-dis');\n\t            } else {\n\t                logConfig.level.splice($.inArray(4, logConfig.level), 1);\n\t                $(this).addClass('msg-dis');\n\t            }\n\t        }).on('click', 'logTypeClick', function() {\n\t            if ($(this).hasClass('msg-dis')) {\n\t                logConfig.level.push(2);\n\t                $(this).removeClass('msg-dis');\n\t            } else {\n\t                logConfig.level.splice($.inArray(2, logConfig.level), 1);\n\t                $(this).addClass('msg-dis');\n\t            }\n\t        }).on('click', 'debugTypeClick', function() {\n\t            if ($(this).hasClass('msg-dis')) {\n\t                logConfig.level.push(1);\n\t                $(this).removeClass('msg-dis');\n\t            } else {\n\t                logConfig.level.splice($.inArray(1, logConfig.level), 1);\n\t                $(this).addClass('msg-dis');\n\t            }\n\t        });\n\n\t    var throttled = _.throttle(function(e) {\n\t        var $this = $(this);\n\t        var top = $this.scrollTop();\n\t        var height = $this.height();\n\t        var scrollHeight = $this.prop('scrollHeight');\n\n\t        if (scrollHeight - height - top <= 200 && !noData) {\n\t            logConfig.id = currentSelectId;\n\t            showLogs(logConfig, true);\n\t        }\n\t    }, 100);\n\n\t    $('.main-mid').scroll(throttled);\n\t}\n\n\tfunction isTimeRight(begin, end) {\n\t    if (begin > end) {\n\t        dialog({\n\t            header: '时间范围错误',\n\t            body: '结束时间必须在开始时间之后！'\n\t        });\n\t        return false;\n\t    } else if (end - maxDate > begin) {\n\t        dialog({\n\t            header: '时间范围错误',\n\t            body: '结束时间和开始时间间隔需在三天之内！'\n\t        });\n\t        return false;\n\t    }\n\t    return true;\n\n\t}\n\n\tfunction removeValue(value, arr) {\n\t    for (var l = arr.length; l--;) {\n\t        if (arr[l] === value) {\n\t            return arr.splice(l, 1);\n\t        }\n\t    }\n\t}\n\n\tfunction showLogs(opts, isAdd) {\n\t    opts.id = $('#select-business').val() >> 0; // jshint ignore:line\n\t    if (opts.id <= 0 || loading) {\n\t        !loading && dialog({\n\t            header: '警告',\n\t            body: '请选择一个项目'\n\t        });\n\t        return;\n\t    }\n\n\t    loading = true;\n\n\t    $(\".setting-search\").text(\"正在加载...\")\n\n\n\t    if (!isAdd) {\n\t        currentIndex = 0;\n\t        noData = false;\n\t    }\n\n\t    var url = '/controller/logAction/queryLogList.do';\n\t    $.ajax({\n\t        url: url,\n\t        data: {\n\t            id: opts.id,\n\t            startDate: opts.startDate,\n\t            endDate: opts.endDate,\n\t            include: opts.include,\n\t            exclude: opts.exclude,\n\t            index: currentIndex,\n\t            _t: new Date() - 0,\n\t            level: opts.level\n\t        },\n\t        success: function(data) {\n\t            $(\".setting-search\").text(\"查询日志\")\n\t            var ret = data.ret;\n\t            if (ret === 0) {\n\t                var param = {\n\t                    encodeHtml: encodeHtml,\n\t                    set: Delegator.set,\n\t                    startIndex: currentIndex * MAX_LIMIT,\n\t                    formatMsg : formatMsg\n\t                };\n\n\t                if (isAdd) {\n\t                    $('#log-table').append(logTable({\n\t                        it: data.data,\n\t                        opt: param,\n\t                        classes: window.classes\n\t                    }));\n\t                } else {\n\t                    $('#log-table').html(logTable({\n\t                        it: data.data,\n\t                        opt: param,\n\t                        classes: window.classes\n\t                    }));\n\t                }\n\n\t                currentIndex++;\n\t                if (data.data.length === 0) {\n\t                    noData = true;\n\t                }\n\t            }else {\n\t                dialog({\n\t                    header: '查询失败',\n\t                    body: JSON.stringify(data.msg)\n\t                });\n\t            }\n\t            loading = false;\n\t        },\n\t        error: function() {\n\t            $(\".setting-search\").text(\"查询日志\")\n\t            loading = false;\n\t        }\n\t    });\n\t}\n\n\tfunction init() {\n\t    bindEvent();\n\t    //读取用户偏好\n\t    var items=$(\"#content .right-side .setting-show .item\");\n\t    window.classes={};\n\t    //console.log(localStorage);\n\t    for(var i=0;i<items.length;i++){\n\t        var item=$(items[i]);\n\t        if(localStorage.getItem(item.data(\"td\"))==='true'){\n\t            item.removeClass('active');\n\t            $('.main-table .'+item.data('td')).removeClass('active');\n\t            window.classes[item.data('td')]='';\n\t        }else{\n\t            window.classes[item.data('td')]='active';\n\t        }\n\t    }\n\t    $('#content .mid-side .main-table thead tr').show();\n\t    $('#content .right-side .setting-show').show();\n\n\t    $(\".datetimepicker\").datetimepicker({\n\t        format: 'YYYY-MM-DD HH:mm'\n\t    }).data(\"DateTimePicker\").setMaxDate(new Date());\n\n\t    $('#startTime').data(\"DateTimePicker\").setDate(new Date(new Date() - maxDate));\n\t    $('#endTime').data(\"DateTimePicker\").setDate(new Date());\n\t}\n\n\texports.init = init;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5), __webpack_require__(4)))\n\n/***/ },\n\n/***/ 13:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {exports.init = function(){\n\t\tvar last_select = -1;\n\t\t\n\t\ttry {\n\n\t\t    last_select = localStorage.last_select >> 0; // jshint ignore:line\n\t\t\t\n\t\t\tvar $sb = $('#select-business');\n\t\t\t\n\t\t\tlast_select > 0 && $sb.find('[value=' + last_select + ']').length && $sb.val(last_select);\n\n\t\t\t$sb.on('change', function(){\n\t\t\t\tlocalStorage.last_select = $sb.val();\n\t\t\t});\n\n\t\t} catch (ex) {}\n\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 14:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {exports.init = function() {\n\t\tvar not_show_source_page = false;\n\t\tvar hideform_class_name = 'main-table-hidefrom';\n\n\t\ttry {\n\t\t\tnot_show_source_page = !!localStorage.not_show_source_page;\n\t\t\t$('.main-table')[not_show_source_page ? 'addClass' : 'removeClass'](hideform_class_name);\n\t\t} catch (ex) {}\n\n\t\tvar update_source = function(show_source_page) {\n\t\t\tif (show_source_page) {\n\t\t\t\t$('.main-table').removeClass(hideform_class_name);\n\t\t\t\t$('#log-table .source_page_link').each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t$this.text($this.data('viewlink'));\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t$('.main-table').addClass(hideform_class_name);\n\t\t\t\t$('#log-table .source_page_link').each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t$this.text($this.data('viewtext'));\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar $ssp = $('#show_source_page');\n\t\t$ssp.prop('checked', !not_show_source_page).on('change', function() {\n\t\t\ttry {\n\t\t\t\tvar show_source_page = $ssp.prop('checked');\n\t\t\t\tlocalStorage.not_show_source_page = show_source_page ? '' : '1';\n\t\t\t\tupdate_source(show_source_page);\n\t\t\t} catch (ex) {}\n\t\t});\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 21:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * Map\n\t * @class\n\t */\n\tfunction Map() {\n\t    this.map = {};\n\t    this.length = 0;\n\t}\n\tMap.prototype = {\n\t    constructor: Map,\n\t    /**\n\t     * has\n\t     * @param {String} key\n\t     * @returns {Boolean}\n\t     */\n\t    has: function (key) {\n\t        return (key in this.map);\n\t    },\n\t    /**\n\t     * get\n\t     * @param {String} key\n\t     * @returns {Any}\n\t     */\n\t    get: function (key) {\n\t        return this.map[key];\n\t    },\n\t    /**\n\t     * set\n\t     * @param {String} key\n\t     * @param {Any} value\n\t     */\n\t    set: function (key, value) {\n\t        !this.has(key) && this.length++;\n\t        return (this.map[key] = value);\n\t    },\n\t    /**\n\t     * count\n\t     * @returns {Number}\n\t     */\n\t    count: function () {\n\t        return this.length;\n\t    },\n\t    /**\n\t     * remove\n\t     * @param {String} key\n\t     */\n\t    remove: function (key) {\n\t        if (this.has(key)) {\n\t            this.map[key] = null;\n\t            delete this.map[key];\n\t            this.length--;\n\t        }\n\t    }\n\t};\n\n\tvar cache = new Map(), set = cache.set, uid = 0;\n\tcache.set = function (node, value) {\n\t    if (!value) {\n\t        value = node;\n\t        set.call(cache, ++uid + '', value);\n\t        return uid;\n\t    } else {\n\t        typeof node === 'string' &&\n\t        (node = $(node)[0]);\n\t        $.data(node, 'event-data', value);\n\t        return this;\n\t    }\n\t};\n\n\tfunction _key(arr) {\n\t    if (!arr) return {};\n\t    arr = arr.split(' ');\n\t    var obj = {};\n\t    for (var i = 0, l = arr.length; i < l; i++) {\n\t        obj[arr[i]] = true;\n\t    }\n\t    return obj;\n\t}\n\n\t/**\n\t * Delegator\n\t * @class\n\t * @param {Selector} container\n\t */\n\tfunction Delegator(container) {\n\t    this.container = $(container);\n\t    this.listenerMap = new Map();\n\t}\n\n\t/**\n\t * getKey\n\t * @param {Any} value\n\t * @returns {Number}\n\t */\n\tDelegator.set = cache.set;\n\t/**\n\t * cache\n\t * @class\n\t * @static\n\t */\n\tDelegator.cache = cache;\n\n\tDelegator.prototype = {\n\t    constructor: Delegator,\n\t    _getListener: function (type) {\n\t        if (this.listenerMap.has(type)) {\n\t            return this.listenerMap.get(type);\n\t        }\n\t        function listener(e) {\n\t            var data = $.data(this),\n\t                routes = data['event-' + type + '-routes'],\n\t                eventData = data['event-data'], handle, dataKey;\n\n\t            // preprocessing\n\t            if (!routes && (routes = this.getAttribute('data-event-' + type))) {\n\t                (routes = routes.split(' ')) &&\n\t                (data['event-' + type + '-routes'] = routes);\n\t                !eventData &&\n\t                (dataKey = this.getAttribute('data-event-data')) &&\n\t                (eventData = cache.get(dataKey)) &&\n\t                (data['event-data'] = eventData) &&\n\t                (cache.remove(dataKey));\n\t                !data['event-stop-propagation'] &&\n\t                (data['event-stop-propagation'] = _key(this.getAttribute('data-event-stop-propagation')));\n\t            }\n\n\t            if (routes) {\n\t                for (var i = 0, l = routes.length; i < l; i++) {\n\t                    handle = listener.handleMap.get(routes[i]);\n\n\t                    if (handle) {\n\t                        handle.call(this, e, eventData);\n\t                    }\n\t                    data['event-stop-propagation'][type] &&\n\t                    e.stopPropagation();\n\t                }\n\t            }\n\t        }\n\n\t        listener.handleMap = new Map();\n\t        this.listenerMap.set(type, listener);\n\t        this.container.on(type, '[data-event-' + type + ']', listener);\n\t        return listener;\n\t    },\n\t    /**\n\t     * on\n\t     * @param {String} type\n\t     * @param {String} name\n\t     * @param {Function} handle\n\t     */\n\t    on: function (type, name, handle) {\n\t        var listener = this._getListener(type);\n\t        listener.handleMap.set(name, handle);\n\t        return this;\n\t    },\n\t    /**\n\t     * off\n\t     * @param {String} type\n\t     * @param {String} name\n\t     */\n\t    off: function (type, name) {\n\t        var listener = this._getListener(type),\n\t            handleMap = listener.handleMap;\n\t        handleMap.remove(name);\n\t        if (!handleMap.count()) {\n\t            this.container.off(type, '[data-event-' + type + ']', listener);\n\t            this.listenerMap.remove(type);\n\t        }\n\t    }\n\t};\n\n\tmodule.exports = Delegator;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 22:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar dialogTpl = __webpack_require__(152);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(dialogTpl(param))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on =  {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 23:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(jQuery) {/**\n\t * @preserve jQuery DateTimePicker plugin v2.4.1\n\t * @homepage http://xdsoft.net/jqplugins/datetimepicker/\n\t * (c) 2014, Chupurnov Valeriy.\n\t */\n\t/*global document,window,jQuery,setTimeout,clearTimeout*/\n\t(function ($) {\n\t\t'use strict';\n\t\tvar default_options  = {\n\t\t\ti18n: {\n\t\t\t\tar: { // Arabic\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"مايو\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"ن\", \"ث\", \"ع\", \"خ\", \"ج\", \"س\", \"ح\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tro: { // Romanian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"ianuarie\", \"februarie\", \"martie\", \"aprilie\", \"mai\", \"iunie\", \"iulie\", \"august\", \"septembrie\", \"octombrie\", \"noiembrie\", \"decembrie\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"l\", \"ma\", \"mi\", \"j\", \"v\", \"s\", \"d\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tid: { // Indonesian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\", \"Min\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tbg: { // Bulgarian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfa: { // Persian/Farsi\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tru: { // Russian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Вск\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tuk: { // Ukrainian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ндл\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Сбт\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\ten: { // English\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tel: { // Ελληνικά\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tde: { // German\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tnl: { // Dutch\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\ttr: { // Turkish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Paz\", \"Pts\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cts\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfr: { //French\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tes: { // Spanish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tth: { // Thai\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tpl: { // Polish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"styczeń\", \"luty\", \"marzec\", \"kwiecień\", \"maj\", \"czerwiec\", \"lipiec\", \"sierpień\", \"wrzesień\", \"październik\", \"listopad\", \"grudzień\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"nd\", \"pn\", \"wt\", \"śr\", \"cz\", \"pt\", \"sb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tpt: { // Portuguese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tch: { // Simplified Chinese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tse: { // Swedish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\",  \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tkr: { // Korean\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tit: { // Italian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tda: { // Dansk\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"July\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tno: { // Norwegian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tja: { // Japanese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tvi: { // Vietnamese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Tháng 1\", \"Tháng 2\", \"Tháng 3\", \"Tháng 4\", \"Tháng 5\", \"Tháng 6\", \"Tháng 7\", \"Tháng 8\", \"Tháng 9\", \"Tháng 10\", \"Tháng 11\", \"Tháng 12\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsl: { // Slovenščina\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tcs: { // Čeština\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\thu: { // Hungarian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Cs\", \"Pé\", \"Szo\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\taz: { //Azerbaijanian (Azeri)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Yanvar\", \"Fevral\", \"Mart\", \"Aprel\", \"May\", \"Iyun\", \"Iyul\", \"Avqust\", \"Sentyabr\", \"Oktyabr\", \"Noyabr\", \"Dekabr\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"B\", \"Be\", \"Ça\", \"Ç\", \"Ca\", \"C\", \"Ş\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tbs: { //Bosanski\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tca: { //Català\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dg\", \"Dl\", \"Dt\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'en-GB': { //English (British)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tet: { //\"Eesti\"\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Jaanuar\", \"Veebruar\", \"Märts\", \"Aprill\", \"Mai\", \"Juuni\", \"Juuli\", \"August\", \"September\", \"Oktoober\", \"November\", \"Detsember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\teu: { //Euskara\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Urtarrila\", \"Otsaila\", \"Martxoa\", \"Apirila\", \"Maiatza\", \"Ekaina\", \"Uztaila\", \"Abuztua\", \"Iraila\", \"Urria\", \"Azaroa\", \"Abendua\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ig.\", \"Al.\", \"Ar.\", \"Az.\", \"Og.\", \"Or.\", \"La.\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfi: { //Finnish (Suomi)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kesäkuu\", \"Heinäkuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tgl: { //Galego\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Xan\", \"Feb\", \"Maz\", \"Abr\", \"Mai\", \"Xun\", \"Xul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dec\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Xov\", \"Ven\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\thr: { //Hrvatski\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tko: { //Korean (한국어)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tlt: { //Lithuanian (lietuvių)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Sausio\", \"Vasario\", \"Kovo\", \"Balandžio\", \"Gegužės\", \"Birželio\", \"Liepos\", \"Rugpjūčio\", \"Rugsėjo\", \"Spalio\", \"Lapkričio\", \"Gruodžio\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sek\", \"Pir\", \"Ant\", \"Tre\", \"Ket\", \"Pen\", \"Šeš\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tlv: { //Latvian (Latviešu)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis \", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sv\", \"Pr\", \"Ot\", \"Tr\", \"Ct\", \"Pk\", \"St\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tmk: { //Macedonian (Македонски)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tmn: { //Mongolian (Монгол)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1-р сар\", \"2-р сар\", \"3-р сар\", \"4-р сар\", \"5-р сар\", \"6-р сар\", \"7-р сар\", \"8-р сар\", \"9-р сар\", \"10-р сар\", \"11-р сар\", \"12-р сар\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Дав\", \"Мяг\", \"Лха\", \"Пүр\", \"Бсн\", \"Бям\", \"Ням\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'pt-BR': { //Português(Brasil)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsk: { //Slovenčina\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsq: { //Albanian (Shqip)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'sr-YU': { //Serbian (Srpski)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsr: { //Serbian Cyrillic (Српски)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"јануар\", \"фебруар\", \"март\", \"април\", \"мај\", \"јун\", \"јул\", \"август\", \"септембар\", \"октобар\", \"новембар\", \"децембар\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"нед\", \"пон\", \"уто\", \"сре\", \"чет\", \"пет\", \"суб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsv: { //Svenska\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'zh-TW': { //Traditional Chinese (繁體中文)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tzh: { //Simplified Chinese (简体中文)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\the: { //Hebrew (עברית)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'א\\'', 'ב\\'', 'ג\\'', 'ד\\'', 'ה\\'', 'ו\\'', 'שבת'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\tvalue: '',\n\t\t\tlang: 'en',\n\n\t\t\tformat:\t'Y/m/d H:i',\n\t\t\tformatTime:\t'H:i',\n\t\t\tformatDate:\t'Y/m/d',\n\n\t\t\tstartDate:\tfalse, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',\n\t\t\tstep: 60,\n\t\t\tmonthChangeSpinner: true,\n\n\t\t\tcloseOnDateSelect: false,\n\t\t\tcloseOnWithoutClick: true,\n\t\t\tcloseOnInputClick: true,\n\n\t\t\ttimepicker: true,\n\t\t\tdatepicker: true,\n\t\t\tweeks: false,\n\n\t\t\tdefaultTime: false,\t// use formatTime format (ex. '10:00' for formatTime:\t'H:i')\n\t\t\tdefaultDate: false,\t// use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')\n\n\t\t\tminDate: false,\n\t\t\tmaxDate: false,\n\t\t\tminTime: false,\n\t\t\tmaxTime: false,\n\n\t\t\tallowTimes: [],\n\t\t\topened: false,\n\t\t\tinitTime: true,\n\t\t\tinline: false,\n\t\t\ttheme: '',\n\n\t\t\tonSelectDate: function () {},\n\t\t\tonSelectTime: function () {},\n\t\t\tonChangeMonth: function () {},\n\t\t\tonChangeYear: function () {},\n\t\t\tonChangeDateTime: function () {},\n\t\t\tonShow: function () {},\n\t\t\tonClose: function () {},\n\t\t\tonGenerate: function () {},\n\n\t\t\twithoutCopyright: true,\n\t\t\tinverseButton: false,\n\t\t\thours12: false,\n\t\t\tnext:\t'xdsoft_next',\n\t\t\tprev : 'xdsoft_prev',\n\t\t\tdayOfWeekStart: 0,\n\t\t\tparentID: 'body',\n\t\t\ttimeHeightInTimePicker: 25,\n\t\t\ttimepickerScrollbar: true,\n\t\t\ttodayButton: true,\n\t\t\tdefaultSelect: true,\n\n\t\t\tscrollMonth: true,\n\t\t\tscrollTime: true,\n\t\t\tscrollInput: true,\n\n\t\t\tlazyInit: false,\n\t\t\tmask: false,\n\t\t\tvalidateOnBlur: true,\n\t\t\tallowBlank: true,\n\t\t\tyearStart: 1950,\n\t\t\tyearEnd: 2050,\n\t\t\tstyle: '',\n\t\t\tid: '',\n\t\t\tfixed: false,\n\t\t\troundTime: 'round', // ceil, floor\n\t\t\tclassName: '',\n\t\t\tweekends: [],\n\t\t\tdisabledDates : [],\n\t\t\tyearOffset: 0,\n\t\t\tbeforeShowDay: null,\n\n\t\t\tenterLikeTab: true\n\t\t};\n\t\t// fix for ie8\n\t\tif (!Array.prototype.indexOf) {\n\t\t\tArray.prototype.indexOf = function (obj, start) {\n\t\t\t\tvar i, j;\n\t\t\t\tfor (i = (start || 0), j = this.length; i < j; i += 1) {\n\t\t\t\t\tif (this[i] === obj) { return i; }\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t}\n\t\tDate.prototype.countDaysInMonth = function () {\n\t\t\treturn new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();\n\t\t};\n\t\t$.fn.extend ( \"xdsoftScroller\"   ,  function (percent) {\n\t\t\treturn this.each(function () {\n\t\t\t\tvar timeboxparent = $(this),\n\t\t\t\t\tpointerEventToXY = function (e) {\n\t\t\t\t\t\tvar out = {x: 0, y: 0},\n\t\t\t\t\t\t\ttouch;\n\t\t\t\t\t\tif (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {\n\t\t\t\t\t\t\ttouch  = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];\n\t\t\t\t\t\t\tout.x = touch.clientX;\n\t\t\t\t\t\t\tout.y = touch.clientY;\n\t\t\t\t\t\t} else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {\n\t\t\t\t\t\t\tout.x = e.clientX;\n\t\t\t\t\t\t\tout.y = e.clientY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn out;\n\t\t\t\t\t},\n\t\t\t\t\tmove = 0,\n\t\t\t\t\ttimebox,\n\t\t\t\t\tparentHeight,\n\t\t\t\t\theight,\n\t\t\t\t\tscrollbar,\n\t\t\t\t\tscroller,\n\t\t\t\t\tmaximumOffset = 100,\n\t\t\t\t\tstart = false,\n\t\t\t\t\tstartY = 0,\n\t\t\t\t\tstartTop = 0,\n\t\t\t\t\th1 = 0,\n\t\t\t\t\ttouchStart = false,\n\t\t\t\t\tstartTopScroll = 0,\n\t\t\t\t\tcalcOffset = function () {};\n\t\t\t\tif (percent === 'hide') {\n\t\t\t\t\ttimeboxparent.find('.xdsoft_scrollbar').hide();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!$(this).hasClass('xdsoft_scroller_box')) {\n\t\t\t\t\ttimebox = timeboxparent.children().eq(0);\n\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\tscrollbar = $('<div class=\"xdsoft_scrollbar\"></div>');\n\t\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>');\n\t\t\t\t\tscrollbar.append(scroller);\n\n\t\t\t\t\ttimeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);\n\t\t\t\t\tcalcOffset = function calcOffset(event) {\n\t\t\t\t\t\tvar offset = pointerEventToXY(event).y - startY + startTopScroll;\n\t\t\t\t\t\tif (offset < 0) {\n\t\t\t\t\t\t\toffset = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (offset + scroller[0].offsetHeight > h1) {\n\t\t\t\t\t\t\toffset = h1 - scroller[0].offsetHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);\n\t\t\t\t\t};\n\n\t\t\t\t\tscroller\n\t\t\t\t\t\t.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {\n\t\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstartY = pointerEventToXY(event).y;\n\t\t\t\t\t\t\tstartTopScroll = parseInt(scroller.css('margin-top'), 10);\n\t\t\t\t\t\t\th1 = scrollbar[0].offsetHeight;\n\n\t\t\t\t\t\t\tif (event.type === 'mousedown') {\n\t\t\t\t\t\t\t\tif (document) {\n\t\t\t\t\t\t\t\t\t$(document.body).addClass('xdsoft_noselect');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft_scroller', function arguments_callee() {\n\t\t\t\t\t\t\t\t\t$([document.body, window]).off('mouseup.xdsoft_scroller', arguments_callee)\n\t\t\t\t\t\t\t\t\t\t.off('mousemove.xdsoft_scroller', calcOffset)\n\t\t\t\t\t\t\t\t\t\t.removeClass('xdsoft_noselect');\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t$(document.body).on('mousemove.xdsoft_scroller', calcOffset);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttouchStart = true;\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('touchmove', function (event) {\n\t\t\t\t\t\t\tif (touchStart) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tcalcOffset(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('touchend touchcancel', function (event) {\n\t\t\t\t\t\t\ttouchStart =  false;\n\t\t\t\t\t\t\tstartTopScroll = 0;\n\t\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent\n\t\t\t\t\t\t.on('scroll_element.xdsoft_scroller', function (event, percentage) {\n\t\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpercentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;\n\n\t\t\t\t\t\t\tscroller.css('margin-top', maximumOffset * percentage);\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {\n\t\t\t\t\t\t\tvar percent, sh;\n\t\t\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\t\tpercent = parentHeight / height;\n\t\t\t\t\t\t\tsh = percent * scrollbar[0].offsetHeight;\n\t\t\t\t\t\t\tif (percent > 1) {\n\t\t\t\t\t\t\t\tscroller.hide();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tscroller.show();\n\t\t\t\t\t\t\t\tscroller.css('height', parseInt(sh > 10 ? sh : 10, 10));\n\t\t\t\t\t\t\t\tmaximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;\n\t\t\t\t\t\t\t\tif (noTriggerScroll !== true) {\n\t\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('mousewheel', function (event) {\n\t\t\t\t\t\tvar top = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\n\t\t\t\t\t\ttop = top - (event.deltaY * 20);\n\t\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchstart', function (event) {\n\t\t\t\t\t\tstart = pointerEventToXY(event);\n\t\t\t\t\t\tstartTop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchmove', function (event) {\n\t\t\t\t\t\tif (start) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tvar coord = pointerEventToXY(event);\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchend touchcancel', function (event) {\n\t\t\t\t\t\tstart = false;\n\t\t\t\t\t\tstartTop = 0;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t\t});\n\t\t});\n\n\t\t$.fn.extend ( \"datetimepicker\" , function (opt) {\n\t\t\tvar KEY0 = 48,\n\t\t\t\tKEY9 = 57,\n\t\t\t\t_KEY0 = 96,\n\t\t\t\t_KEY9 = 105,\n\t\t\t\tCTRLKEY = 17,\n\t\t\t\tDEL = 46,\n\t\t\t\tENTER = 13,\n\t\t\t\tESC = 27,\n\t\t\t\tBACKSPACE = 8,\n\t\t\t\tARROWLEFT = 37,\n\t\t\t\tARROWUP = 38,\n\t\t\t\tARROWRIGHT = 39,\n\t\t\t\tARROWDOWN = 40,\n\t\t\t\tTAB = 9,\n\t\t\t\tF5 = 116,\n\t\t\t\tAKEY = 65,\n\t\t\t\tCKEY = 67,\n\t\t\t\tVKEY = 86,\n\t\t\t\tZKEY = 90,\n\t\t\t\tYKEY = 89,\n\t\t\t\tctrlDown\t=\tfalse,\n\t\t\t\toptions = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),\n\n\t\t\t\tlazyInitTimer = 0,\n\t\t\t\tcreateDateTimePicker,\n\t\t\t\tdestroyDateTimePicker,\n\t\t\t\t_xdsoft_datetime,\n\n\t\t\t\tlazyInit = function (input) {\n\t\t\t\t\tinput\n\t\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function initOnActionCallback(event) {\n\t\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclearTimeout(lazyInitTimer);\n\t\t\t\t\t\t\tlazyInitTimer = setTimeout(function () {\n\n\t\t\t\t\t\t\t\tif (!input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\t\t\tcreateDateTimePicker(input);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t\t\t.off('open.xdsoft focusin.xdsoft mousedown.xdsoft', initOnActionCallback)\n\t\t\t\t\t\t\t\t\t.trigger('open.xdsoft');\n\t\t\t\t\t\t\t}, 100);\n\t\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\tcreateDateTimePicker = function (input) {\n\t\t\t\tvar datetimepicker = $('<div ' + (options.id ? 'id=\"' + options.id + '\"' : '') + ' ' + (options.style ? 'style=\"' + options.style + '\"' : '') + ' class=\"xdsoft_datetimepicker xdsoft_' + options.theme + ' xdsoft_noselect ' + (options.weeks ? ' xdsoft_showweeks' : '') + options.className + '\"></div>'),\n\t\t\t\t\txdsoft_copyright = $('<div class=\"xdsoft_copyright\"><a target=\"_blank\" href=\"http://xdsoft.net/jqplugins/datetimepicker/\">xdsoft.net</a></div>'),\n\t\t\t\t\tdatepicker = $('<div class=\"xdsoft_datepicker active\"></div>'),\n\t\t\t\t\tmounth_picker = $('<div class=\"xdsoft_mounthpicker\"><button type=\"button\" class=\"xdsoft_prev\"></button><button type=\"button\" class=\"xdsoft_today_button\"></button>' +\n\t\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_month\"><span></span><i></i></div>' +\n\t\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_year\"><span></span><i></i></div>' +\n\t\t\t\t\t\t'<button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\t\tcalendar = $('<div class=\"xdsoft_calendar\"></div>'),\n\t\t\t\t\ttimepicker = $('<div class=\"xdsoft_timepicker active\"><button type=\"button\" class=\"xdsoft_prev\"></button><div class=\"xdsoft_time_box\"></div><button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\t\ttimeboxparent = timepicker.find('.xdsoft_time_box').eq(0),\n\t\t\t\t\ttimebox = $('<div class=\"xdsoft_time_variant\"></div>'),\n\t\t\t\t\t/*scrollbar = $('<div class=\"xdsoft_scrollbar\"></div>'),\n\t\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>'),*/\n\t\t\t\t\tmonthselect = $('<div class=\"xdsoft_select xdsoft_monthselect\"><div></div></div>'),\n\t\t\t\t\tyearselect = $('<div class=\"xdsoft_select xdsoft_yearselect\"><div></div></div>'),\n\t\t\t\t\ttriggerAfterOpen = false,\n\t\t\t\t\tXDSoft_datetime,\n\t\t\t\t\t//scroll_element,\n\t\t\t\t\txchangeTimer,\n\t\t\t\t\ttimerclick,\n\t\t\t\t\tcurrent_time_index,\n\t\t\t\t\tsetPos,\n\t\t\t\t\ttimer = 0,\n\t\t\t\t\ttimer1 = 0;\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_month span')\n\t\t\t\t\t\t.after(monthselect);\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_year span')\n\t\t\t\t\t\t.after(yearselect);\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tvar select = $(this).find('.xdsoft_select').eq(0),\n\t\t\t\t\t\t\tval = 0,\n\t\t\t\t\t\t\ttop = 0,\n\t\t\t\t\t\t\tvisible = select.is(':visible'),\n\t\t\t\t\t\t\titems,\n\t\t\t\t\t\t\ti;\n\n\t\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t\t\t.hide();\n\t\t\t\t\t\tif (_xdsoft_datetime.currentTime) {\n\t\t\t\t\t\t\tval = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselect[visible ? 'hide' : 'show']();\n\t\t\t\t\t\tfor (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {\n\t\t\t\t\t\t\tif (items.eq(i).data('value') === val) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttop += items[0].offsetHeight;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselect.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t.xdsoftScroller()\n\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t})\n\t\t\t\t\t.on('mousedown.xdsoft', '.xdsoft_option', function (event) {\n\t\t\t\t\t\tvar year = _xdsoft_datetime.currentTime.getFullYear();\n\t\t\t\t\t\tif (_xdsoft_datetime && _xdsoft_datetime.currentTime) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$(this).parent().parent().hide();\n\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tdatetimepicker.setOptions = function (_options) {\n\t\t\t\t\toptions = $.extend(true, {}, options, _options);\n\n\t\t\t\t\tif (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {\n\t\t\t\t\t\toptions.allowTimes = $.extend(true, [], _options.allowTimes);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {\n\t\t\t\t\t\toptions.weekends = $.extend(true, [], _options.weekends);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {\n\t                    options.disabledDates = $.extend(true, [], _options.disabledDates);\n\t                }\n\n\t\t\t\t\tif ((options.open || options.opened) && (!options.inline)) {\n\t\t\t\t\t\tinput.trigger('open.xdsoft');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.inline) {\n\t\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\t\tdatetimepicker.addClass('xdsoft_inline');\n\t\t\t\t\t\tinput.after(datetimepicker).hide();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.inverseButton) {\n\t\t\t\t\t\toptions.next = 'xdsoft_prev';\n\t\t\t\t\t\toptions.prev = 'xdsoft_next';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.datepicker) {\n\t\t\t\t\t\tdatepicker.addClass('active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatepicker.removeClass('active');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.timepicker) {\n\t\t\t\t\t\ttimepicker.addClass('active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimepicker.removeClass('active');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.value) {\n\t\t\t\t\t\tif (input && input.val) {\n\t\t\t\t\t\t\tinput.val(options.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(options.value);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isNaN(options.dayOfWeekStart)) {\n\t\t\t\t\t\toptions.dayOfWeekStart = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!options.timepickerScrollbar) {\n\t\t\t\t\t\ttimeboxparent.xdsoftScroller('hide');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.minDate && /^-(.*)$/.test(options.minDate)) {\n\t\t\t\t\t\toptions.minDate = _xdsoft_datetime.strToDateTime(options.minDate).dateFormat(options.formatDate);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.maxDate &&  /^\\+(.*)$/.test(options.maxDate)) {\n\t\t\t\t\t\toptions.maxDate = _xdsoft_datetime.strToDateTime(options.maxDate).dateFormat(options.formatDate);\n\t\t\t\t\t}\n\n\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t\t\t\t.css('visibility', !options.todayButton ? 'hidden' : 'visible');\n\n\t\t\t\t\tif (options.mask) {\n\t\t\t\t\t\tvar e,\n\t\t\t\t\t\t\tgetCaretPos = function (input) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tif (document.selection && document.selection.createRange) {\n\t\t\t\t\t\t\t\t\t\tvar range = document.selection.createRange();\n\t\t\t\t\t\t\t\t\t\treturn range.getBookmark().charCodeAt(2) - 2;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (input.setSelectionRange) {\n\t\t\t\t\t\t\t\t\t\treturn input.selectionStart;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetCaretPos = function (node, pos) {\n\t\t\t\t\t\t\t\tnode = (typeof node === \"string\" || node instanceof String) ? document.getElementById(node) : node;\n\t\t\t\t\t\t\t\tif (!node) {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (node.createTextRange) {\n\t\t\t\t\t\t\t\t\tvar textRange = node.createTextRange();\n\t\t\t\t\t\t\t\t\ttextRange.collapse(true);\n\t\t\t\t\t\t\t\t\ttextRange.moveEnd('character', pos);\n\t\t\t\t\t\t\t\t\ttextRange.moveStart('character', pos);\n\t\t\t\t\t\t\t\t\ttextRange.select();\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (node.setSelectionRange) {\n\t\t\t\t\t\t\t\t\tnode.setSelectionRange(pos, pos);\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisValidValue = function (mask, value) {\n\t\t\t\t\t\t\t\tvar reg = mask\n\t\t\t\t\t\t\t\t\t.replace(/([\\[\\]\\/\\{\\}\\(\\)\\-\\.\\+]{1})/g, '\\\\$1')\n\t\t\t\t\t\t\t\t\t.replace(/_/g, '{digit+}')\n\t\t\t\t\t\t\t\t\t.replace(/([0-9]{1})/g, '{digit$1}')\n\t\t\t\t\t\t\t\t\t.replace(/\\{digit([0-9]{1})\\}/g, '[0-$1_]{1}')\n\t\t\t\t\t\t\t\t\t.replace(/\\{digit[\\+]\\}/g, '[0-9_]{1}');\n\t\t\t\t\t\t\t\treturn (new RegExp(reg)).test(value);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tinput.off('keydown.xdsoft');\n\n\t\t\t\t\t\tif (options.mask === true) {\n\t\t\t\t\t\t\toptions.mask = options.format\n\t\t\t\t\t\t\t\t.replace(/Y/g, '9999')\n\t\t\t\t\t\t\t\t.replace(/F/g, '9999')\n\t\t\t\t\t\t\t\t.replace(/m/g, '19')\n\t\t\t\t\t\t\t\t.replace(/d/g, '39')\n\t\t\t\t\t\t\t\t.replace(/H/g, '29')\n\t\t\t\t\t\t\t\t.replace(/i/g, '59')\n\t\t\t\t\t\t\t\t.replace(/s/g, '59');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($.type(options.mask) === 'string') {\n\t\t\t\t\t\t\tif (!isValidValue(options.mask, input.val())) {\n\t\t\t\t\t\t\t\tinput.val(options.mask.replace(/[0-9]/g, '_'));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tinput.on('keydown.xdsoft', function (event) {\n\t\t\t\t\t\t\t\tvar val = this.value,\n\t\t\t\t\t\t\t\t\tkey = event.which,\n\t\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\t\tdigit;\n\n\t\t\t\t\t\t\t\tif (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {\n\t\t\t\t\t\t\t\t\tpos = getCaretPos(this);\n\t\t\t\t\t\t\t\t\tdigit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';\n\n\t\t\t\t\t\t\t\t\tif ((key === BACKSPACE || key === DEL) && pos) {\n\t\t\t\t\t\t\t\t\t\tpos -= 1;\n\t\t\t\t\t\t\t\t\t\tdigit = '_';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? -1 : 1;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tval = val.substr(0, pos) + digit + val.substr(pos + 1);\n\t\t\t\t\t\t\t\t\tif ($.trim(val) === '') {\n\t\t\t\t\t\t\t\t\t\tval = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (pos === options.mask.length) {\n\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? 0 : 1;\n\t\t\t\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? -1 : 1;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (isValidValue(options.mask, val)) {\n\t\t\t\t\t\t\t\t\t\tthis.value = val;\n\t\t\t\t\t\t\t\t\t\tsetCaretPos(this, pos);\n\t\t\t\t\t\t\t\t\t} else if ($.trim(val) === '') {\n\t\t\t\t\t\t\t\t\t\tthis.value = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tinput.trigger('error_input.xdsoft');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (options.validateOnBlur) {\n\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t.off('blur.xdsoft')\n\t\t\t\t\t\t\t.on('blur.xdsoft', function () {\n\t\t\t\t\t\t\t\tif (options.allowBlank && !$.trim($(this).val()).length) {\n\t\t\t\t\t\t\t\t\t$(this).val(null);\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').empty();\n\t\t\t\t\t\t\t\t} else if (!Date.parseDate($(this).val(), options.format)) {\n\t\t\t\t\t\t\t\t\t$(this).val((_xdsoft_datetime.now()).dateFormat(options.format));\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\toptions.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;\n\n\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t.trigger('xchange.xdsoft')\n\t\t\t\t\t\t.trigger('afterOpen.xdsoft');\n\t\t\t\t};\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.data('options', options)\n\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tyearselect.hide();\n\t\t\t\t\t\tmonthselect.hide();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\t//scroll_element = timepicker.find('.xdsoft_time_box');\n\t\t\t\ttimeboxparent.append(timebox);\n\t\t\t\ttimeboxparent.xdsoftScroller();\n\n\t\t\t\tdatetimepicker.on('afterOpen.xdsoft', function () {\n\t\t\t\t\ttimeboxparent.xdsoftScroller();\n\t\t\t\t});\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.append(datepicker)\n\t\t\t\t\t.append(timepicker);\n\n\t\t\t\tif (options.withoutCopyright !== true) {\n\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t.append(xdsoft_copyright);\n\t\t\t\t}\n\n\t\t\t\tdatepicker\n\t\t\t\t\t.append(mounth_picker)\n\t\t\t\t\t.append(calendar);\n\n\t\t\t\t$(options.parentID)\n\t\t\t\t\t.append(datetimepicker);\n\n\t\t\t\tXDSoft_datetime = function () {\n\t\t\t\t\tvar _this = this;\n\t\t\t\t\t_this.now = function (norecursion) {\n\t\t\t\t\t\tvar d = new Date(),\n\t\t\t\t\t\t\tdate,\n\t\t\t\t\t\t\ttime;\n\n\t\t\t\t\t\tif (!norecursion && options.defaultDate) {\n\t\t\t\t\t\t\tdate = _this.strToDate(options.defaultDate);\n\t\t\t\t\t\t\td.setFullYear(date.getFullYear());\n\t\t\t\t\t\t\td.setMonth(date.getMonth());\n\t\t\t\t\t\t\td.setDate(date.getDate());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.yearOffset) {\n\t\t\t\t\t\t\td.setFullYear(d.getFullYear() + options.yearOffset);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!norecursion && options.defaultTime) {\n\t\t\t\t\t\t\ttime = _this.strtotime(options.defaultTime);\n\t\t\t\t\t\t\td.setHours(time.getHours());\n\t\t\t\t\t\t\td.setMinutes(time.getMinutes());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.isValidDate = function (d) {\n\t\t\t\t\t\tif (Object.prototype.toString.call(d) !== \"[object Date]\") {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn !isNaN(d.getTime());\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.setCurrentTime = function (dTime) {\n\t\t\t\t\t\t_this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.empty = function () {\n\t\t\t\t\t\t_this.currentTime = null;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.getCurrentTime = function (dTime) {\n\t\t\t\t\t\treturn _this.currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.nextMonth = function () {\n\t\t\t\t\t\tvar month = _this.currentTime.getMonth() + 1,\n\t\t\t\t\t\t\tyear;\n\t\t\t\t\t\tif (month === 12) {\n\t\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);\n\t\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tyear = _this.currentTime.getFullYear();\n\n\t\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\t_this.currentTime.setMonth(month);\n\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\treturn month;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.prevMonth = function () {\n\t\t\t\t\t\tvar month = _this.currentTime.getMonth() - 1;\n\t\t\t\t\t\tif (month === -1) {\n\t\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);\n\t\t\t\t\t\t\tmonth = 11;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\t_this.currentTime.setMonth(month);\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\treturn month;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.getWeekOfYear = function (datetime) {\n\t\t\t\t\t\tvar onejan = new Date(datetime.getFullYear(), 0, 1);\n\t\t\t\t\t\treturn Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strToDateTime = function (sDateTime) {\n\t\t\t\t\t\tvar tmpDate = [], timeOffset, currentTime;\n\n\t\t\t\t\t\tif (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {\n\t\t\t\t\t\t\treturn sDateTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttmpDate = /^(\\+|\\-)(.*)$/.exec(sDateTime);\n\t\t\t\t\t\tif (tmpDate) {\n\t\t\t\t\t\t\ttmpDate[2] = Date.parseDate(tmpDate[2], options.formatDate);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tmpDate  && tmpDate[2]) {\n\t\t\t\t\t\t\ttimeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;\n\t\t\t\t\t\t\tcurrentTime = new Date((_xdsoft_datetime.now()).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentTime = sDateTime ? Date.parseDate(sDateTime, options.format) : _this.now();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strToDate = function (sDate) {\n\t\t\t\t\t\tif (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {\n\t\t\t\t\t\t\treturn sDate;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar currentTime = sDate ? Date.parseDate(sDate, options.formatDate) : _this.now(true);\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strtotime = function (sTime) {\n\t\t\t\t\t\tif (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {\n\t\t\t\t\t\t\treturn sTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar currentTime = sTime ? Date.parseDate(sTime, options.formatTime) : _this.now(true);\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.str = function () {\n\t\t\t\t\t\treturn _this.currentTime.dateFormat(options.format);\n\t\t\t\t\t};\n\t\t\t\t\t_this.currentTime = this.now();\n\t\t\t\t};\n\n\t\t\t\t_xdsoft_datetime = new XDSoft_datetime();\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(0);\n\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t\t}).on('dblclick.xdsoft', function () {\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t});\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\t\tstop = false;\n\n\t\t\t\t\t\t(function arguments_callee1(v) {\n\t\t\t\t\t\t\tvar month =  _xdsoft_datetime.currentTime.getMonth();\n\t\t\t\t\t\t\tif ($this.hasClass(options.next)) {\n\t\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t\t\t} else if ($this.hasClass(options.prev)) {\n\t\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (options.monthChangeSpinner) {\n\t\t\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee1, v || 100);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}(500));\n\n\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft', function arguments_callee2() {\n\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t\t$([document.body, window]).off('mouseup.xdsoft', arguments_callee2);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\ttimepicker\n\t\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\t\tstop = false,\n\t\t\t\t\t\t\tperiod = 110;\n\t\t\t\t\t\t(function arguments_callee4(v) {\n\t\t\t\t\t\t\tvar pheight = timeboxparent[0].clientHeight,\n\t\t\t\t\t\t\t\theight = timebox[0].offsetHeight,\n\t\t\t\t\t\t\t\ttop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t\t\t\tif ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t\t} else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]);\n\t\t\t\t\t\t\tperiod = (period > 10) ? 10 : period - 10;\n\t\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee4, v || period);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}(500));\n\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft', function arguments_callee5() {\n\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t\t$([document.body, window])\n\t\t\t\t\t\t\t\t.off('mouseup.xdsoft', arguments_callee5);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\txchangeTimer = 0;\n\t\t\t\t// base handler - generating a calendar and timepicker\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('xchange.xdsoft', function (event) {\n\t\t\t\t\t\tclearTimeout(xchangeTimer);\n\t\t\t\t\t\txchangeTimer = setTimeout(function () {\n\t\t\t\t\t\t\tvar table =\t'',\n\t\t\t\t\t\t\t\tstart = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),\n\t\t\t\t\t\t\t\ti = 0,\n\t\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\t\ttoday = _xdsoft_datetime.now(),\n\t\t\t\t\t\t\t\tmaxDate = false,\n\t\t\t\t\t\t\t\tminDate = false,\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tm,\n\t\t\t\t\t\t\t\tw,\n\t\t\t\t\t\t\t\tclasses = [],\n\t\t\t\t\t\t\t\tcustomDateSettings,\n\t\t\t\t\t\t\t\tnewRow = true,\n\t\t\t\t\t\t\t\ttime = '',\n\t\t\t\t\t\t\t\th = '',\n\t\t\t\t\t\t\t\tline_time;\n\n\t\t\t\t\t\t\twhile (start.getDay() !== options.dayOfWeekStart) {\n\t\t\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttable += '<table><thead><tr>';\n\n\t\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\t\ttable += '<th></th>';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (j = 0; j < 7; j += 1) {\n\t\t\t\t\t\t\t\ttable += '<th>' + options.i18n[options.lang].dayOfWeek[(j + options.dayOfWeekStart) % 7] + '</th>';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttable += '</tr></thead>';\n\t\t\t\t\t\t\ttable += '<tbody>';\n\n\t\t\t\t\t\t\tif (options.maxDate !== false) {\n\t\t\t\t\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\n\t\t\t\t\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (options.minDate !== false) {\n\t\t\t\t\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\n\t\t\t\t\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twhile (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {\n\t\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\t\ti += 1;\n\n\t\t\t\t\t\t\t\td = start.getDate();\n\t\t\t\t\t\t\t\ty = start.getFullYear();\n\t\t\t\t\t\t\t\tm = start.getMonth();\n\t\t\t\t\t\t\t\tw = _xdsoft_datetime.getWeekOfYear(start);\n\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_date');\n\n\t\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {\n\t\t\t\t\t\t\t\t\tcustomDateSettings = options.beforeShowDay.call(datetimepicker, start);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcustomDateSettings = null;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t} else if (options.disabledDates.indexOf(start.dateFormat(options.formatDate)) !== -1) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (customDateSettings && customDateSettings[1] !== \"\") {\n\t\t\t\t\t\t\t\t\tclasses.push(customDateSettings[1]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (_xdsoft_datetime.currentTime.getMonth() !== m) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_other_month');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ((options.defaultSelect || datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (today.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(start.dateFormat(options.formatDate)) === -1) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_weekend');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {\n\t\t\t\t\t\t\t\t\tclasses.push(options.beforeShowDay(start));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (newRow) {\n\t\t\t\t\t\t\t\t\ttable += '<tr>';\n\t\t\t\t\t\t\t\t\tnewRow = false;\n\t\t\t\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\t\t\t\ttable += '<th>' + w + '</th>';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttable += '<td data-date=\"' + d + '\" data-month=\"' + m + '\" data-year=\"' + y + '\"' + ' class=\"xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '\">' +\n\t\t\t\t\t\t\t\t\t\t\t'<div>' + d + '</div>' +\n\t\t\t\t\t\t\t\t\t\t'</td>';\n\n\t\t\t\t\t\t\t\tif (start.getDay() === options.dayOfWeekStartPrev) {\n\t\t\t\t\t\t\t\t\ttable += '</tr>';\n\t\t\t\t\t\t\t\t\tnewRow = true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart.setDate(d + 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable += '</tbody></table>';\n\n\t\t\t\t\t\t\tcalendar.html(table);\n\n\t\t\t\t\t\t\tmounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[options.lang].months[_xdsoft_datetime.currentTime.getMonth()]);\n\t\t\t\t\t\t\tmounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());\n\n\t\t\t\t\t\t\t// generate timebox\n\t\t\t\t\t\t\ttime = '';\n\t\t\t\t\t\t\th = '';\n\t\t\t\t\t\t\tm = '';\n\t\t\t\t\t\t\tline_time = function line_time(h, m) {\n\t\t\t\t\t\t\t\tvar now = _xdsoft_datetime.now();\n\t\t\t\t\t\t\t\tnow.setHours(h);\n\t\t\t\t\t\t\t\th = parseInt(now.getHours(), 10);\n\t\t\t\t\t\t\t\tnow.setMinutes(m);\n\t\t\t\t\t\t\t\tm = parseInt(now.getMinutes(), 10);\n\t\t\t\t\t\t\t\tvar optionDateTime = new Date(_xdsoft_datetime.currentTime)\n\t\t\t\t\t\t\t\toptionDateTime.setHours(h);\n\t\t\t\t\t\t\t\toptionDateTime.setMinutes(m);\n\t\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\t\tif((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && parseInt(_xdsoft_datetime.currentTime.getHours(), 10) === parseInt(h, 10) && (options.step > 59 || Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step === parseInt(m, 10))) {\n\t\t\t\t\t\t\t\t\tif (options.defaultSelect || datetimepicker.data('changed')) {\n\t\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t\t\t} else if (options.initTime) {\n\t\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_init_time');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime += '<div class=\"xdsoft_time ' + classes.join(' ') + '\" data-hour=\"' + h + '\" data-minute=\"' + m + '\">' + now.dateFormat(options.formatTime) + '</div>';\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {\n\t\t\t\t\t\t\t\tfor (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < 60; j += options.step) {\n\t\t\t\t\t\t\t\t\t\th = (i < 10 ? '0' : '') + i;\n\t\t\t\t\t\t\t\t\t\tm = (j < 10 ? '0' : '') + j;\n\t\t\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfor (i = 0; i < options.allowTimes.length; i += 1) {\n\t\t\t\t\t\t\t\t\th = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();\n\t\t\t\t\t\t\t\t\tm = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();\n\t\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttimebox.html(time);\n\n\t\t\t\t\t\t\topt = '';\n\t\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\t\t\tfor (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) {\n\t\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + i + '</div>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyearselect.children().eq(0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.html(opt);\n\n\t\t\t\t\t\t\tfor (i = 0, opt = ''; i <= 11; i += 1) {\n\t\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + options.i18n[options.lang].months[i] + '</div>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmonthselect.children().eq(0).html(opt);\n\t\t\t\t\t\t\t$(datetimepicker)\n\t\t\t\t\t\t\t\t.trigger('generate.xdsoft');\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t})\n\t\t\t\t\t.on('afterOpen.xdsoft', function () {\n\t\t\t\t\t\tif (options.timepicker) {\n\t\t\t\t\t\t\tvar classType, pheight, height, top;\n\t\t\t\t\t\t\tif (timebox.find('.xdsoft_current').length) {\n\t\t\t\t\t\t\t\tclassType = '.xdsoft_current';\n\t\t\t\t\t\t\t} else if (timebox.find('.xdsoft_init_time').length) {\n\t\t\t\t\t\t\t\tclassType = '.xdsoft_init_time';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (classType) {\n\t\t\t\t\t\t\t\tpheight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\t\t\ttop = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;\n\t\t\t\t\t\t\t\tif ((height - pheight) < top) {\n\t\t\t\t\t\t\t\t\ttop = height - pheight;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\ttimerclick = 0;\n\t\t\t\tcalendar\n\t\t\t\t\t.on('click.xdsoft', 'td', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();  // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap\n\t\t\t\t\t\ttimerclick += 1;\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentTime.setDate(1);\n\t\t\t\t\t\tcurrentTime.setFullYear($this.data('year'));\n\t\t\t\t\t\tcurrentTime.setMonth($this.data('month'));\n\t\t\t\t\t\tcurrentTime.setDate($this.data('date'));\n\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\tif ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === 0 && !options.timepicker))) && !options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onSelectDate &&\t$.isFunction(options.onSelectDate)) {\n\t\t\t\t\t\t\toptions.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\ttimerclick = 0;\n\t\t\t\t\t\t}, 200);\n\t\t\t\t\t});\n\n\t\t\t\ttimebox\n\t\t\t\t\t.on('click.xdsoft', 'div', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentTime.setHours($this.data('hour'));\n\t\t\t\t\t\tcurrentTime.setMinutes($this.data('minute'));\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\t\tdatetimepicker.data('input').val(_xdsoft_datetime.str());\n\t\t\t\t\t\tif (!options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onSelectTime && $.isFunction(options.onSelectTime)) {\n\t\t\t\t\t\t\toptions.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t});\n\n\n\t\t\t\tdatepicker\n\t\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\t\tif (!options.scrollMonth) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.deltaY < 0) {\n\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\tinput\n\t\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\t\tif (!options.scrollInput) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!options.datepicker && options.timepicker) {\n\t\t\t\t\t\t\tcurrent_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;\n\t\t\t\t\t\t\tif (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {\n\t\t\t\t\t\t\t\tcurrent_time_index += event.deltaY;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (timebox.children().eq(current_time_index).length) {\n\t\t\t\t\t\t\t\ttimebox.children().eq(current_time_index).trigger('mousedown');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.datepicker && !options.timepicker) {\n\t\t\t\t\t\t\tdatepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);\n\t\t\t\t\t\t\tif (input.val) {\n\t\t\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('changedatetime.xdsoft', function (event) {\n\t\t\t\t\t\tif (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {\n\t\t\t\t\t\t\tvar $input = datetimepicker.data('input');\n\t\t\t\t\t\t\toptions.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);\n\t\t\t\t\t\t\tdelete options.value;\n\t\t\t\t\t\t\t$input.trigger('change');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('generate.xdsoft', function () {\n\t\t\t\t\t\tif (options.onGenerate && $.isFunction(options.onGenerate)) {\n\t\t\t\t\t\t\toptions.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (triggerAfterOpen) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t\t\t\ttriggerAfterOpen = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('click.xdsoft', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t\t});\n\n\t\t\t\tcurrent_time_index = 0;\n\n\t\t\t\tsetPos = function () {\n\t\t\t\t\tvar offset = datetimepicker.data('input').offset(), top = offset.top + datetimepicker.data('input')[0].offsetHeight - 1, left = offset.left, position = \"position\";\n\t\t\t\t\tif (options.fixed) {\n\t\t\t\t\t\ttop -= $(window).scrollTop();\n\t\t\t\t\t\tleft -= $(window).scrollLeft();\n\t\t\t\t\t\tposition = \"fixed\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (top + datetimepicker[0].offsetHeight > $(window).height() + $(window).scrollTop()) {\n\t\t\t\t\t\t\ttop = offset.top - datetimepicker[0].offsetHeight + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (left + datetimepicker[0].offsetWidth > $(window).width()) {\n\t\t\t\t\t\t\tleft = $(window).width() - datetimepicker[0].offsetWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdatetimepicker.css({\n\t\t\t\t\t\tleft: left,\n\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\tposition: position\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('open.xdsoft', function (event) {\n\t\t\t\t\t\tvar onShow = true;\n\t\t\t\t\t\tif (options.onShow && $.isFunction(options.onShow)) {\n\t\t\t\t\t\t\tonShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (onShow !== false) {\n\t\t\t\t\t\t\tdatetimepicker.show();\n\t\t\t\t\t\t\tsetPos();\n\t\t\t\t\t\t\t$(window)\n\t\t\t\t\t\t\t\t.off('resize.xdsoft', setPos)\n\t\t\t\t\t\t\t\t.on('resize.xdsoft', setPos);\n\n\t\t\t\t\t\t\tif (options.closeOnWithoutClick) {\n\t\t\t\t\t\t\t\t$([document.body, window]).on('mousedown.xdsoft', function arguments_callee6() {\n\t\t\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\t\t\t$([document.body, window]).off('mousedown.xdsoft', arguments_callee6);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('close.xdsoft', function (event) {\n\t\t\t\t\t\tvar onClose = true;\n\t\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t\t\t\t.hide();\n\t\t\t\t\t\tif (options.onClose && $.isFunction(options.onClose)) {\n\t\t\t\t\t\t\tonClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (onClose !== false && !options.opened && !options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t})\n\t\t\t\t\t.on('toggle.xdsoft', function (event) {\n\t\t\t\t\t\tif (datetimepicker.is(':visible')) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.data('input', input);\n\n\t\t\t\ttimer = 0;\n\t\t\t\ttimer1 = 0;\n\n\t\t\t\tdatetimepicker.data('xdsoft_datetime', _xdsoft_datetime);\n\t\t\t\tdatetimepicker.setOptions(options);\n\n\t\t\t\tfunction getCurrentValue() {\n\n\t\t\t\t\tvar ct = false, time;\n\n\t\t\t\t\tif (options.startDate) {\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.startDate);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tct = options.value || ((input && input.val && input.val()) ? input.val() : '');\n\t\t\t\t\t\tif (ct) {\n\t\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(ct);\n\t\t\t\t\t\t} else if (options.defaultDate) {\n\t\t\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.defaultDate);\n\t\t\t\t\t\t\tif (options.defaultTime) {\n\t\t\t\t\t\t\t\ttime = _xdsoft_datetime.strtotime(options.defaultTime);\n\t\t\t\t\t\t\t\tct.setHours(time.getHours());\n\t\t\t\t\t\t\t\tct.setMinutes(time.getMinutes());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ct && _xdsoft_datetime.isValidDate(ct)) {\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tct = '';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ct || 0;\n\t\t\t\t}\n\n\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\t\tinput\n\t\t\t\t\t.data('xdsoft_datetimepicker', datetimepicker)\n\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\ttimer = setTimeout(function () {\n\t\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible')) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t})\n\t\t\t\t\t.on('keydown.xdsoft', function (event) {\n\t\t\t\t\t\tvar val = this.value, elementSelector,\n\t\t\t\t\t\t\tkey = event.which;\n\t\t\t\t\t\tif ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {\n\t\t\t\t\t\t\telementSelector = $(\"input:visible,textarea:visible\");\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\telementSelector.eq(elementSelector.index(this) + 1).focus();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ([TAB].indexOf(key) !== -1) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t};\n\t\t\tdestroyDateTimePicker = function (input) {\n\t\t\t\tvar datetimepicker = input.data('xdsoft_datetimepicker');\n\t\t\t\tif (datetimepicker) {\n\t\t\t\t\tdatetimepicker.data('xdsoft_datetime', null);\n\t\t\t\t\tdatetimepicker.remove();\n\t\t\t\t\tinput\n\t\t\t\t\t\t.data('xdsoft_datetimepicker', null)\n\t\t\t\t\t\t.off('.xdsoft');\n\t\t\t\t\t$(window).off('resize.xdsoft');\n\t\t\t\t\t$([window, document.body]).off('mousedown.xdsoft');\n\t\t\t\t\tif (input.unmousewheel) {\n\t\t\t\t\t\tinput.unmousewheel();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t$(document)\n\t\t\t\t.off('keydown.xdsoftctrl keyup.xdsoftctrl')\n\t\t\t\t.on('keydown.xdsoftctrl', function (e) {\n\t\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\t\tctrlDown = true;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keyup.xdsoftctrl', function (e) {\n\t\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\t\tctrlDown = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\treturn this.each(function () {\n\t\t\t\tvar datetimepicker = $(this).data('xdsoft_datetimepicker');\n\t\t\t\tif (datetimepicker) {\n\t\t\t\t\tif ($.type(opt) === 'string') {\n\t\t\t\t\t\tswitch (opt) {\n\t\t\t\t\t\tcase 'show':\n\t\t\t\t\t\t\t$(this).select().focus();\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'hide':\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'toggle':\n\t\t\t\t\t\t\tdatetimepicker.trigger('toggle.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'destroy':\n\t\t\t\t\t\t\tdestroyDateTimePicker($(this));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'reset':\n\t\t\t\t\t\t\tthis.value = this.defaultValue;\n\t\t\t\t\t\t\tif (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format))) {\n\t\t\t\t\t\t\t\tdatetimepicker.data('changed', false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t\t.setOptions(opt);\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif ($.type(opt) !== 'string') {\n\t\t\t\t\tif (!options.lazyInit || options.open || options.inline) {\n\t\t\t\t\t\tcreateDateTimePicker($(this));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlazyInit($(this));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t$.fn.extend ( \"datetimepicker.defaults\" , default_options);\n\t}(jQuery));\n\t(function () {\n\n\t/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)\n\t * Licensed under the MIT License (LICENSE.txt).\n\t *\n\t * Version: 3.1.12\n\t *\n\t * Requires: jQuery 1.2.2+\n\t */\n\t!function(a){true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(5)], __WEBPACK_AMD_DEFINE_FACTORY__ = (a), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):\"object\"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type=\"mousewheel\",\"detail\"in g&&(m=-1*g.detail),\"wheelDelta\"in g&&(m=g.wheelDelta),\"wheelDeltaY\"in g&&(m=g.wheelDeltaY),\"wheelDeltaX\"in g&&(l=-1*g.wheelDeltaX),\"axis\"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,\"deltaY\"in g&&(m=-1*g.deltaY,j=m),\"deltaX\"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,\"mousewheel-line-height\");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,\"mousewheel-page-height\");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?\"floor\":\"ceil\"](j/f),l=Math[l>=1?\"floor\":\"ceil\"](l/f),m=Math[m>=1?\"floor\":\"ceil\"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&\"mousewheel\"===a.type&&b%120===0}var e,f,g=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],h=\"onwheel\"in document||document.documentMode>=9?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:\"3.1.12\",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,\"mousewheel-line-height\",k.getLineHeight(this)),a.data(this,\"mousewheel-page-height\",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,\"mousewheel-line-height\"),a.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(b){var c=a(b),d=c[\"offsetParent\"in a.fn?\"offsetParent\":\"parent\"]();return d.length||(d=a(\"body\")),parseInt(d.css(\"fontSize\"),10)||parseInt(c.css(\"fontSize\"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind(\"mousewheel\",a):this.trigger(\"mousewheel\")},unmousewheel:function(a){return this.unbind(\"mousewheel\",a)}})});\n\n\t// Parse and Format Library\n\t//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/\n\t/*\n\t * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>\n\t *\n\t * This program is free software; you can redistribute it and/or modify it\n\t * under the terms of the GNU Lesser General Public License as published by the\n\t * Free Software Foundation, version 2.1.\n\t *\n\t * This program is distributed in the hope that it will be useful, but WITHOUT\n\t * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\t * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more\n\t * details.\n\t */\n\tDate.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(b){if(b==\"unixtime\"){return parseInt(this.getTime()/1000);}if(Date.formatFunctions[b]==null){Date.createNewFormat(b);}var a=Date.formatFunctions[b];return this[a]();};Date.createNewFormat=function(format){var funcName=\"format\"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var code=\"Date.prototype.\"+funcName+\" = function() {return \";var special=false;var ch=\"\";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch==\"\\\\\"){special=true;}else{if(special){special=false;code+=\"'\"+String.escape(ch)+\"' + \";}else{code+=Date.getFormatCode(ch);}}}eval(code.substring(0,code.length-3)+\";}\");};Date.getFormatCode=function(a){switch(a){case\"d\":return\"String.leftPad(this.getDate(), 2, '0') + \";case\"D\":return\"Date.dayNames[this.getDay()].substring(0, 3) + \";case\"j\":return\"this.getDate() + \";case\"l\":return\"Date.dayNames[this.getDay()] + \";case\"S\":return\"this.getSuffix() + \";case\"w\":return\"this.getDay() + \";case\"z\":return\"this.getDayOfYear() + \";case\"W\":return\"this.getWeekOfYear() + \";case\"F\":return\"Date.monthNames[this.getMonth()] + \";case\"m\":return\"String.leftPad(this.getMonth() + 1, 2, '0') + \";case\"M\":return\"Date.monthNames[this.getMonth()].substring(0, 3) + \";case\"n\":return\"(this.getMonth() + 1) + \";case\"t\":return\"this.getDaysInMonth() + \";case\"L\":return\"(this.isLeapYear() ? 1 : 0) + \";case\"Y\":return\"this.getFullYear() + \";case\"y\":return\"('' + this.getFullYear()).substring(2, 4) + \";case\"a\":return\"(this.getHours() < 12 ? 'am' : 'pm') + \";case\"A\":return\"(this.getHours() < 12 ? 'AM' : 'PM') + \";case\"g\":return\"((this.getHours() %12) ? this.getHours() % 12 : 12) + \";case\"G\":return\"this.getHours() + \";case\"h\":return\"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + \";case\"H\":return\"String.leftPad(this.getHours(), 2, '0') + \";case\"i\":return\"String.leftPad(this.getMinutes(), 2, '0') + \";case\"s\":return\"String.leftPad(this.getSeconds(), 2, '0') + \";case\"O\":return\"this.getGMTOffset() + \";case\"T\":return\"this.getTimezone() + \";case\"Z\":return\"(this.getTimezoneOffset() * -60) + \";default:return\"'\"+String.escape(a)+\"' + \";}};Date.parseDate=function(a,c){if(c==\"unixtime\"){return new Date(!isNaN(parseInt(a))?parseInt(a)*1000:0);}if(Date.parseFunctions[c]==null){Date.createParser(c);}var b=Date.parseFunctions[c];return Date[b](a);};Date.createParser=function(format){var funcName=\"parse\"+Date.parseFunctions.count++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code=\"Date.\"+funcName+\" = function(input) {\\nvar y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, z = -1;\\nvar d = new Date();\\ny = d.getFullYear();\\nm = d.getMonth();\\nd = d.getDate();\\nvar results = input.match(Date.parseRegexes[\"+regexNum+\"]);\\nif (results && results.length > 0) {\";var regex=\"\";var special=false;var ch=\"\";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch==\"\\\\\"){special=true;}else{if(special){special=false;regex+=String.escape(ch);}else{obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}}code+=\"if (y > 0 && z > 0){\\nvar doyDate = new Date(y,0);\\ndoyDate.setDate(z);\\nm = doyDate.getMonth();\\nd = doyDate.getDate();\\n}\";code+=\"if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\\n{return new Date(y, m, d, h, i, s);}\\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\\n{return new Date(y, m, d, h, i);}\\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0)\\n{return new Date(y, m, d, h);}\\nelse if (y > 0 && m >= 0 && d > 0)\\n{return new Date(y, m, d);}\\nelse if (y > 0 && m >= 0)\\n{return new Date(y, m);}\\nelse if (y > 0)\\n{return new Date(y);}\\n}return null;}\";Date.parseRegexes[regexNum]=new RegExp(\"^\"+regex+\"$\");eval(code);};Date.formatCodeToRegex=function(b,a){switch(b){case\"D\":return{g:0,c:null,s:\"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\"};case\"j\":case\"d\":return{g:1,c:\"d = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,2})\"};case\"l\":return{g:0,c:null,s:\"(?:\"+Date.dayNames.join(\"|\")+\")\"};case\"S\":return{g:0,c:null,s:\"(?:st|nd|rd|th)\"};case\"w\":return{g:0,c:null,s:\"\\\\d\"};case\"z\":return{g:1,c:\"z = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,3})\"};case\"W\":return{g:0,c:null,s:\"(?:\\\\d{2})\"};case\"F\":return{g:1,c:\"m = parseInt(Date.monthNumbers[results[\"+a+\"].substring(0, 3)], 10);\\n\",s:\"(\"+Date.monthNames.join(\"|\")+\")\"};case\"M\":return{g:1,c:\"m = parseInt(Date.monthNumbers[results[\"+a+\"]], 10);\\n\",s:\"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\"};case\"n\":case\"m\":return{g:1,c:\"m = parseInt(results[\"+a+\"], 10) - 1;\\n\",s:\"(\\\\d{1,2})\"};case\"t\":return{g:0,c:null,s:\"\\\\d{1,2}\"};case\"L\":return{g:0,c:null,s:\"(?:1|0)\"};case\"Y\":return{g:1,c:\"y = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{4})\"};case\"y\":return{g:1,c:\"var ty = parseInt(results[\"+a+\"], 10);\\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\\n\",s:\"(\\\\d{1,2})\"};case\"a\":return{g:1,c:\"if (results[\"+a+\"] == 'am') {\\nif (h == 12) { h = 0; }\\n} else { if (h < 12) { h += 12; }}\",s:\"(am|pm)\"};case\"A\":return{g:1,c:\"if (results[\"+a+\"] == 'AM') {\\nif (h == 12) { h = 0; }\\n} else { if (h < 12) { h += 12; }}\",s:\"(AM|PM)\"};case\"g\":case\"G\":case\"h\":case\"H\":return{g:1,c:\"h = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,2})\"};case\"i\":return{g:1,c:\"i = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{2})\"};case\"s\":return{g:1,c:\"s = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{2})\"};case\"O\":return{g:0,c:null,s:\"[+-]\\\\d{4}\"};case\"T\":return{g:0,c:null,s:\"[A-Z]{3}\"};case\"Z\":return{g:0,c:null,s:\"[+-]\\\\d{1,5}\"};default:return{g:0,c:null,s:String.escape(b)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,\"$1\").replace(/^.*?\\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\\)$/,\"$1$2$3\");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?\"-\":\"+\")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,\"0\")+String.leftPad(Math.abs(this.getTimezoneOffset())%60,2,\"0\");};Date.prototype.getDayOfYear=function(){var a=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var b=0;b<this.getMonth();++b){a+=Date.daysInMonth[b];}return a+this.getDate();};Date.prototype.getWeekOfYear=function(){var b=this.getDayOfYear()+(4-this.getDay());var a=new Date(this.getFullYear(),0,1);var c=(7-a.getDay()+4);return String.leftPad(Math.ceil((b-c)/7)+1,2,\"0\");};Date.prototype.isLeapYear=function(){var a=this.getFullYear();return((a&3)==0&&(a%100||(a%400==0&&a)));};Date.prototype.getFirstDayOfMonth=function(){var a=(this.getDay()-(this.getDate()-1))%7;return(a<0)?(a+7):a;};Date.prototype.getLastDayOfMonth=function(){var a=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(a<0)?(a+7):a;};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return\"st\";case 2:case 22:return\"nd\";case 3:case 23:return\"rd\";default:return\"th\";}};String.escape=function(a){return a.replace(/('|\\\\)/g,\"\\\\$1\");};String.leftPad=function(d,b,c){var a=new String(d);if(c==null){c=\" \";}while(a.length<b){a=c+a;}return a;};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];Date.dayNames=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.patterns={ISO8601LongPattern:\"Y-m-d H:i:s\",ISO8601ShortPattern:\"Y-m-d\",ShortDatePattern:\"n/j/Y\",LongDatePattern:\"l, F d, Y\",FullDateTimePattern:\"l, F d, Y g:i:s A\",MonthDayPattern:\"F d\",ShortTimePattern:\"g:i A\",LongTimePattern:\"g:i:s A\",SortableDateTimePattern:\"Y-m-d\\\\TH:i:s\",UniversalSortableDateTimePattern:\"Y-m-d H:i:sO\",YearMonthPattern:\"F, Y\"};\n\t}());\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 140:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar modal = __webpack_require__(155);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(modal({it :param}))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on = param.on || {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 146:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(_) {module.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '', __j = Array.prototype.join;\n\tfunction print() { __p += __j.call(arguments, '') }\n\twith (obj) {\n\n\n\tvar urls;\n\tvar not_show_source_page = true;\n\ttry {\n\t    not_show_source_page = !!localStorage.not_show_source_page;\n\t} catch (ex) {}\n\n\t// 手Q\n\tvar RE_MQQ = /(ipad|iphone|ipod).*? (ipad)?qq\\/([\\d.]+)|\\bv1_and_sqi?_([\\d.]+)(.*? qq\\/([\\d.]+))?/;\n\n\tfunction getBrowserType(ua) {\n\t    if (!ua) {\n\t        return '';\n\t    }\n\t    ua = ua.toLowerCase();\n\n\t    var osIcon = '', browserIcon = '';\n\n\t    // os\n\t    if (ua.indexOf('android') > -1)\n\t        osIcon = 'ico-android';\n\t    else if (ua.indexOf('iphone') > -1 || ua.indexOf('ipad') > -1)\n\t        osIcon = 'ico-ios';\n\t    else if (ua.indexOf('windows') > -1)\n\t        osIcon = 'ico-windows';\n\n\n\t    // 手Q\n\t    if (RE_MQQ.test(ua)) {\n\t        browserIcon = 'ico-qq';\n\t    } else if (ua.indexOf('qqbrowser') > -1) {\n\t        browserIcon = 'ico-qb';\n\t    } else if (ua.indexOf('metasr') > -1) {\n\t        browserIcon = 'ico-sougou';\n\t    } else if (ua.indexOf('maxthon') > -1) {\n\t        browserIcon = 'ico-maxthon';\n\t    } else if (ua.indexOf('360se') > -1) {\n\t        browserIcon = 'ico-360';\n\t    } else if (ua.indexOf('qq/') > -1) {\n\t        browserIcon = 'ico-qq';\n\t    } else if (ua.indexOf('micromessenger') > -1) {\n\t        browserIcon = 'ico-wx';\n\t    } else if (ua.indexOf('edge') > -1) {\n\t        browserIcon = 'ico-edge';\n\t    } else if (ua.indexOf('chrome') > -1) {\n\t        browserIcon = 'ico-chrome';\n\t    } else if (ua.indexOf('msie') > -1 || ua.indexOf('trident') > -1) {\n\t        browserIcon = 'ico-ie';\n\t    } else if (ua.indexOf('firefox') > -1) {\n\t        browserIcon = 'ico-ff';\n\t    } else if (ua.indexOf('safari') > -1) {\n\t        browserIcon = 'ico-safari';\n\t    }\n\n\t    return [osIcon, browserIcon];\n\t}\n\n\tfunction sourcePage(data, type, opt) {\n\t    var from = data.from || ''\n\t    if (/view/.test(type)) {\n\t        var view = ['页面查看', opt.encodeHtml(from)];\n\t        return 'viewtext' === type ? view[0] :\n\t            'viewlink' === type ? view[1] :\n\t            not_show_source_page ? view[0] : view[1];\n\t    } else {\n\t        var href = opt.encodeHtml(from);\n\t        var msg = [data._target, data.rowNum, data.colNum].join(':') + ' ' + data.msg;\n\t        if (href.indexOf('#') === -1) {\n\t            href += '#BJ_ERROR=' + encodeURIComponent(msg);\n\t        } else {\n\t            href += '&BJ_ERROR=' + encodeURIComponent(msg);\n\t        }\n\t        return href;\n\t    }\n\t}\n\n\tfor (var i = 0 , l = it.length, type = ''; i < l; i++) {\n\t    switch(it[i].level.toString()) {\n\t        case '8':\n\t            type = 'warning';\n\t            break;\n\t        case '4':\n\t            type = 'err';\n\t            break;\n\t        case '2':\n\t            type = 'info';\n\t            break;\n\t        case '1':\n\t            type = 'debug';\n\t            break;\n\t        case '20':\n\t            type = 'offline';\n\t            break;\n\t    }\n\n\t    if (_.isArray(it[i].target)) {\n\t        it[i].target = it[i].target[0];\n\t    }\n\n\t    var isHtml = /^.+?\\.html\\??/.test(it[i].target);\n\t    var _target = it[i]._target = (it[i].target || it[i].url || '').replace(/\\)/g, '');\n\t;\n\t__p += '\\r\\n<tr id=\"tr-' +\n\t((__t = (i + 1 + opt.startIndex)) == null ? '' : __t) +\n\t'\">\\r\\n    <td  class=\"td-1 active info-type-' +\n\t((__t = (type)) == null ? '' : __t) +\n\t'\" data-event-click=\"alertModal\" title=\"点击查看#' +\n\t((__t = (i + 1 + opt.startIndex)) == null ? '' : __t) +\n\t'详情\">\\r\\n        ' +\n\t((__t = (i + 1 + opt.startIndex)) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  class=\"td-2 ' +\n\t((__t = (classes['td-2'] )) == null ? '' : __t) +\n\t'\">\\r\\n        ' +\n\t((__t = ( _.formatDate(new Date(it[i].date) , 'YYYY-MM-DD hh:mm:ss') )) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  style=\"\" class=\"td-3 ' +\n\t((__t = (classes['td-3'] )) == null ? '' : __t) +\n\t'\">\\r\\n        ' +\n\t((__t = ( opt.formatMsg(opt.encodeHtml(it[i].msg)) )) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  class=\"td-4 ' +\n\t((__t = (classes['td-4'] )) == null ? '' : __t) +\n\t'\" title=\"' +\n\t((__t = (  opt.encodeHtml(it[i].uin == 'NaN' ? '-' : it[i].uin ))) == null ? '' : __t) +\n\t'\" style=\"text-overflow: ellipsis;overflow: hidden;\" >\\r\\n        ' +\n\t((__t = (  opt.encodeHtml(it[i].uin == 'NaN' ? '-' : it[i].uin ))) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  class=\"td-5 ' +\n\t((__t = (classes['td-5'] )) == null ? '' : __t) +\n\t'\">\\r\\n        ' +\n\t((__t = (it[i].ip )) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td class=\"td-6 ' +\n\t((__t = ( classes['td-6'] )) == null ? '' : __t) +\n\t'\" title=\"' +\n\t((__t = ( it[i].userAgent )) == null ? '' : __t) +\n\t'\">\\r\\n            ';\n\n\t            var browserTypes = getBrowserType(it[i].userAgent);\n\t            for(var x = 0; x < browserTypes.length; x++) {\n\t             ;\n\t__p += '\\r\\n             <span class=\"ico-browser ' +\n\t((__t = ( browserTypes[x] )) == null ? '' : __t) +\n\t'\"></span>\\r\\n             ';\n\t};\n\t__p += '\\r\\n     </td>\\r\\n    <td class=\"td-7 ' +\n\t((__t = (classes['td-7'] )) == null ? '' : __t) +\n\t'\">\\r\\n        <a\\r\\n            style=\"word-break:break-all;display:block\"\\r\\n            href=\"' +\n\t((__t = ( opt.encodeHtml(_target))) == null ? '' : __t) +\n\t'\"\\r\\n            target=\"_blank\"\\r\\n            data-event-click=\"showSource\"\\r\\n            data-event-data=\"' +\n\t((__t = (opt.set(it[i]))) == null ? '' : __t) +\n\t'\"\\r\\n        >\\r\\n            ' +\n\t((__t = (opt.encodeHtml(_target))) == null ? '' : __t) +\n\t'\\r\\n            <span\\r\\n                class=\"err-where\"\\r\\n                style=\"height:24px;line-height:24px;border-radius:3px\"\\r\\n            >\\r\\n                ' +\n\t((__t = (opt.encodeHtml(it[i].rowNum || 0))) == null ? '' : __t) +\n\t'行\\r\\n                ' +\n\t((__t = (opt.encodeHtml(it[i].colNum || 0))) == null ? '' : __t) +\n\t'列\\r\\n            </span>\\r\\n        </a>\\r\\n        <a\\r\\n            class=\"source_page_link\"\\r\\n            style=\"font-size:12px\"\\r\\n            target=\"_blank\"\\r\\n            href=\"' +\n\t((__t = (sourcePage(it[i], 'href', opt))) == null ? '' : __t) +\n\t'\"\\r\\n            data-viewtext=\"' +\n\t((__t = (sourcePage(it[i], 'viewtext', opt))) == null ? '' : __t) +\n\t'\"\\r\\n            data-viewlink=\"' +\n\t((__t = (sourcePage(it[i], 'viewlink', opt))) == null ? '' : __t) +\n\t'\"\\r\\n        >' +\n\t((__t = (sourcePage(it[i], 'view', opt))) == null ? '' : __t) +\n\t'</a>\\r\\n    </td>\\r\\n</tr>\\r\\n';\n\t } ;\n\t__p += '\\r\\n\\r\\n';\n\t if(it.length === 0 ){;\n\t__p += '\\r\\n<td colspan=\"7\" style=\"\\r\\n    text-align: center;\\r\\n    background: rgb(221, 221, 221);\\r\\n\">无更多数据</td>\\r\\n';\n\t};\n\t__p += '\\r\\n';\n\n\t}\n\treturn __p\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ },\n\n/***/ 147:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<a class=\"keyword-tag\">' +\n\t((__t = (it.value)) == null ? '' : __t) +\n\t'<span class=\"keyword-del\" data-event-click=\"removeKeyword\" data-event-data=\"' +\n\t((__t = (opt.set(it.value))) == null ? '' : __t) +\n\t'\">x</span></a>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 148:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<a class=\"keyword-tag\">' +\n\t((__t = (it.value)) == null ? '' : __t) +\n\t'<span class=\"keyword-del\" data-event-click=\"removeDebar\" data-event-data=\"' +\n\t((__t = (opt.set(it.value))) == null ? '' : __t) +\n\t'\">x</span></a>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 152:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '\\n\\n<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"logDetailModal\">\\n    <div class=\"modal-backdrop fade\"></div>\\n    <div class=\"modal-dialog\">\\n        <div class=\"modal-content\">\\n\\n            <div class=\"modal-header\">\\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\n                <h4 class=\"modal-title\">日志详情</h4>\\n            </div>\\n            <div class=\"modal-body\">\\n                <p>\\n                    <b>Time：</b><span class=\"time\">' +\n\t((__t = (time)) == null ? '' : __t) +\n\t'</span>\\n                </p>\\n                <p>\\n                    <b>Info：</b><div class=\"info\">' +\n\t((__t = (info)) == null ? '' : __t) +\n\t'</div>\\n                </p>\\n                <p>\\n                    <b>uin：</b><span class=\"uin\">' +\n\t((__t = (uin)) == null ? '' : __t) +\n\t'</span>\\n                </p>\\n                <p>\\n                    <b>ip：</b><span class=\"ip\">' +\n\t((__t = (ip)) == null ? '' : __t) +\n\t'</span>\\n                </p>\\n                <p>\\n                    <b>agent：</b><div class=\"userAgent\">' +\n\t((__t = (agent)) == null ? '' : __t) +\n\t'</div>\\n                </p>\\n                <p>\\n                    <b>Source：</b><div class=\"source\">' +\n\t((__t = (source)) == null ? '' : __t) +\n\t'</div>\\n                </p>\\n            </div>\\n            <div class=\"modal-footer\">\\n                <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\n            </div>\\n\\n        </div>\\n    </div>\\n</div>\\n';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 155:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"' +\n\t((__t = (it.id || '' )) == null ? '' : __t) +\n\t'\">\\r\\n  <div class=\"modal-backdrop fade\"></div>\\r\\n  <div class=\"modal-dialog\">\\r\\n    <div class=\"modal-content\">\\r\\n\\r\\n      <div class=\"modal-header\">\\r\\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\r\\n        <h4 class=\"modal-title\">' +\n\t((__t = (it.header)) == null ? '' : __t) +\n\t'</h4>\\r\\n      </div>\\r\\n      <div class=\"modal-body\">\\r\\n        ' +\n\t((__t = (it.body)) == null ? '' : __t) +\n\t'\\r\\n      </div>\\r\\n      <div class=\"modal-footer\">\\r\\n        <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\r\\n      </div>\\r\\n\\r\\n    </div>\\r\\n  </div>\\r\\n</div>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ }\n\n});"
  },
  {
    "path": "static/entry.offlinelog.js",
    "content": "webpackJsonp([9],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar log = __webpack_require__(15);\n\tlog.init();\n\n\tvar source_trigger = __webpack_require__(14);\n\tsource_trigger.init();\n\n\t//var last_select = require(\"../common/last.select\");\n\t//last_select.init();\n\n\n/***/ },\n\n/***/ 14:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {exports.init = function() {\n\t\tvar not_show_source_page = false;\n\t\tvar hideform_class_name = 'main-table-hidefrom';\n\n\t\ttry {\n\t\t\tnot_show_source_page = !!localStorage.not_show_source_page;\n\t\t\t$('.main-table')[not_show_source_page ? 'addClass' : 'removeClass'](hideform_class_name);\n\t\t} catch (ex) {}\n\n\t\tvar update_source = function(show_source_page) {\n\t\t\tif (show_source_page) {\n\t\t\t\t$('.main-table').removeClass(hideform_class_name);\n\t\t\t\t$('#log-table .source_page_link').each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t$this.text($this.data('viewlink'));\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t$('.main-table').addClass(hideform_class_name);\n\t\t\t\t$('#log-table .source_page_link').each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t$this.text($this.data('viewtext'));\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar $ssp = $('#show_source_page');\n\t\t$ssp.prop('checked', !not_show_source_page).on('change', function() {\n\t\t\ttry {\n\t\t\t\tvar show_source_page = $ssp.prop('checked');\n\t\t\t\tlocalStorage.not_show_source_page = show_source_page ? '' : '1';\n\t\t\t\tupdate_source(show_source_page);\n\t\t\t} catch (ex) {}\n\t\t});\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 15:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($, _) {var dialog = __webpack_require__(140);\n\tvar Delegator = __webpack_require__(21);\n\n\tvar logTable = __webpack_require__(146);\n\tvar keyword = __webpack_require__(147);\n\tvar debar = __webpack_require__(148);\n\tvar offlineDialog = __webpack_require__(24);\n\tvar logDetailDialog = __webpack_require__(22);\n\n\tvar offlineLogCache = {};\n\n\n\tvar logConfig = {\n\t        id: 0,\n\t        startDate: 0,\n\t        endDate: 0,\n\t        include: [],\n\t        exclude: [],\n\t        index: 0,\n\t        level: [1, 2, 4 , 20]\n\t    },\n\n\t    encodeHtml = function(str) {\n\t        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n\t    },\n\n\t    formatMsg = function (str){\n\t        return str.replace(/@/gi , '<br/><b style=\"color:#A78830;\">@</b> ')\n\t    };\n\n\n\tvar currentSelectId = -1,\n\t    currentIndex = 0,\n\t    noData = false,\n\t    MAX_LIMIT = 500,\n\t    loading = false,\n\t    monitorTimeId;\n\n\tfunction addKeyword() {\n\t    var value = $.trim($('#keyword-ipt').val());\n\t    if (value !== '') {\n\t        if (!removeValue(value, logConfig.include)) {\n\t            $('#keyword-group').append(keyword({\n\t                it: {\n\t                    value: value\n\t                },\n\t                opt: {\n\t                    encodeHtml: encodeHtml,\n\t                    set: Delegator.set\n\t                }\n\t            }));\n\t        }\n\t        logConfig.include.push(value);\n\t        $('#keyword-ipt').val('');\n\t    }\n\t}\n\n\tfunction addDebar() {\n\t    var value = $.trim($('#debar-ipt').val());\n\t    if (value !== '') {\n\t        if (!removeValue(value, logConfig.exclude)) {\n\t            $('#debar-group').append(debar({\n\t                it: {\n\t                    value: value\n\t                },\n\t                opt: {\n\t                    encodeHtml: encodeHtml,\n\t                    set: Delegator.set\n\t                }\n\t            }));\n\t        }\n\t        logConfig.exclude.push(value);\n\t        $('#debar-ipt').val('');\n\t    }\n\t}\n\n\n\n\tfunction bindEvent() {\n\t    new Delegator(document.body)\n\t        .on('click', 'searchBusiness', function() {\n\t            // search business\n\t        }).on('click', 'addKeyword', addKeyword)\n\t        .on('keyup', 'addKeyword', function(e) {\n\t            if (e.which === 13) addKeyword();\n\t        }).on('click', 'removeKeywords', function() {\n\t            logConfig.include.length = 0;\n\t            $('#keyword-group').empty();\n\t        }).on('click', 'removeKeyword', function(e, value) {\n\t            $(this).closest('.keyword-tag').remove();\n\t            removeValue(value, logConfig.include);\n\t        }).on('click', 'addDebar', addDebar)\n\t        .on('keyup', 'addDebar', function(e) {\n\t            if (e.which === 13) addDebar();\n\t        }).on('click', 'removeDebars', function() {\n\t            logConfig.exclude.length = 0;\n\t            $('#debar-group').empty();\n\t        }).on('click', 'removeDebar', function(e, value) {\n\t            $(this).closest('.keyword-tag').remove();\n\t            removeValue(value, logConfig.exclude);\n\t        }).on('click', 'configOfflineMonitor', function(e, value) {\n\n\t            if ( logConfig.id <= 0 ) {\n\t                !loading && dialog({\n\t                    header: '警告',\n\t                    body: '请选择一个项目'\n\t                });\n\t                return;\n\t            }\n\n\t            offlineDialog(logConfig)\n\n\n\t        }).on('click', 'showLogs', function() {\n\t            var fileId = logConfig.fileId = $('#select-offline-logs').val(); // jshint ignore:line\n\n\t            if(loading){\n\t                return ;\n\t            }\n\n\t            if (logConfig.fileId <= 0 || logConfig.id <= 0 ) {\n\t                !loading && dialog({\n\t                    header: '警告',\n\t                    body: '请选择一个离线日志'\n\t                });\n\t                return;\n\t            }\n\n\n\t            loading = true;\n\t            $(\".setting-search\").text(\"正在加载...\")\n\n\t            if(offlineLogCache[fileId]){\n\t                showLogs(offlineLogCache[fileId] , logConfig)\n\t                $(\".setting-search\").text(\"查询日志\");\n\t                loading = false;\n\t                return ;\n\t            }\n\n\t            var url = '/controller/logAction/showOfflineLog.do';\n\t            $.ajax({\n\t                url: url,\n\t                data: {\n\t                    id: logConfig.id,\n\t                    fileId: fileId,\n\t                },\n\t                success : function (data){\n\t                    loading = false;\n\n\t                    $(\".setting-search\").text(\"查询日志\")\n\t                    var offlineLogs = JSON.parse(data.data);\n\t                    var newLogs = []\n\t                    offlineLogs.logs.forEach(function (item){\n\t                        var  date = new Date(item.time);\n\t                        item.userAgent = offlineLogs.userAgent;\n\t                        item.date = _.formatDate(date , 'YYYY-MM-DD hh:mm:ss');\n\t                        var all = \"\";\n\t                        for(var key in item ) {\n\t                            if(key == 'time'){\n\t                                continue\n\t                            }\n\t                            all += ';'+key+'=' + item[key];\n\t                        }\n\t                        item.date = date;\n\t                        item.all = all;\n\t                        newLogs.push(item)\n\t                    })\n\n\t                    offlineLogCache[fileId] = newLogs\n\n\t                    showLogs(offlineLogCache[fileId] , logConfig)\n\t                },\n\t                error : function (){\n\n\t                }\n\t            })\n\n\n\n\n\t        })\n\t        .on('click', 'alertModal', function(e, data) {\n\t            var $target=$(e.currentTarget);\n\n\t            logDetailDialog({\n\t                id :$target.text(),\n\t                time :$target.siblings('.td-2').text(),\n\t                info :$target.siblings('.td-3').html(),\n\t                uin :$target.siblings('.td-4').text(),\n\t                ip :$target.siblings('.td-5').text(),\n\t                agent : $target.siblings('.td-6').attr(\"title\"),\n\t                source :   $target.siblings('.td-7').html() ,\n\t            })\n\t        }).on('change', 'selectBusiness', function() {\n\t            var val = $(this).val() - 0;\n\t            currentSelectId = val;\n\t            $('#log-table').html('');\n\t            currentIndex = 0;\n\t            noData = false;\n\t            logConfig.id = val;\n\t            fetchOfflineFile(val)\n\t        }).on('click', 'showTd', function(e) {\n\t            var $target=$(e.currentTarget).toggleClass('active');\n\t            $('.main-table .'+$target.data('td')).toggleClass('active');\n\t            //保存用户偏好，隐藏为true\n\t            //console.log($target.data('td'));\n\t            localStorage.setItem($target.data('td'),!$target.hasClass('active'));\n\t            //console.log(localStorage);\n\t            window.classes[$target.data('td')]=$target.hasClass('active')?'active':'';\n\t        }).on('click', 'errorTypeClick', function() {\n\t            if ($(this).hasClass('msg-dis')) {\n\t                logConfig.level.push(4);\n\t                $(this).removeClass('msg-dis');\n\t            } else {\n\t                logConfig.level.splice($.inArray(4, logConfig.level), 1);\n\t                $(this).addClass('msg-dis');\n\t            }\n\t            console.log('log', logConfig.level);\n\n\t        }).on('click', 'logTypeClick', function() {\n\t            if ($(this).hasClass('msg-dis')) {\n\t                logConfig.level.push(2);\n\t                $(this).removeClass('msg-dis');\n\t            } else {\n\t                logConfig.level.splice($.inArray(2, logConfig.level), 1);\n\t                $(this).addClass('msg-dis');\n\t            }\n\n\n\t        }).on('click', 'debugTypeClick', function() {\n\t            if ($(this).hasClass('msg-dis')) {\n\t                logConfig.level.push(1);\n\t                $(this).removeClass('msg-dis');\n\t            } else {\n\t                logConfig.level.splice($.inArray(1, logConfig.level), 1);\n\t                $(this).addClass('msg-dis');\n\t            }\n\t        }).on('click', 'offlineTypeClick', function() {\n\t            if ($(this).hasClass('msg-dis')) {\n\t                logConfig.level.push(20);\n\t                $(this).removeClass('msg-dis');\n\t            } else {\n\t                logConfig.level.splice($.inArray(20, logConfig.level), 1);\n\t                $(this).addClass('msg-dis');\n\t            }\n\t        });\n\n\n\t}\n\n\tfunction removeValue(value, arr) {\n\t    for (var l = arr.length; l--;) {\n\t        if (arr[l] === value) {\n\t            return arr.splice(l, 1);\n\t        }\n\t    }\n\t}\n\n\n\n\tfunction fetchOfflineFile (id){\n\t    if(id == -1 || !id){\n\t        $(\"#select-offline-logs\").attr(\"disabled\").html('<option value=\"-1\">-- 选择离线日志 --</option>')\n\t        return;\n\t    }\n\t    var url = '/controller/logAction/showOfflineFiles.do';\n\t    $.ajax({\n\t        url: url,\n\t        data: {\n\t            id: id,\n\t        },\n\t        success : function (data){\n\t            if(data.data.length <= 0){\n\t                $(\"#select-offline-logs\").attr(\"disabled\" , \"disabled\").html('<option value=\"-1\">-- 无离线日志 --</option>')\n\t            }else {\n\t                $(\"#select-offline-logs\").removeAttr(\"disabled\").html(\"\")\n\t                $.each(data.data, function (key , item){\n\t                    var arr = item.id.split(\"_\");\n\t                    var itemName = arr[0];\n\t                    if(arr[2]  ){\n\t                        var dateStr = _.formatDate(new Date(arr[2]-0) , 'YYYY-MM-DD');\n\t                        itemName += \" (\" + dateStr +\")\";\n\t                    }\n\n\n\t                    $(\"#select-offline-logs\").append('<option value=\"'+item.id +'\">'+itemName+'</option>')\n\t                })\n\t            }\n\t        },\n\t        error : function (){\n\n\t        }\n\t    })\n\t}\n\n\tfunction showLogs(data , opt) {\n\n\n\n\t    var includeJSON = [];\n\t    opt.include.forEach(function(value, key) {\n\t        includeJSON.push(value);\n\t    });\n\n\n\t    var excludeJSON = [];\n\t    opt.exclude.forEach(function(value, key) {\n\t        excludeJSON.push(value);\n\t    });\n\n\n\t    var newData = [];\n\t    data.forEach(function (value){\n\t        var matched = false;\n\n\t        if($.inArray( value.level , opt.level ) == -1){\n\t            return ;\n\t        }\n\t        if(includeJSON.length || excludeJSON.length){\n\t            for(var i = 0 ; i < includeJSON.length ; i++){\n\t                if(value.all.indexOf(includeJSON[i]) > -1){\n\t                    matched = true;\n\t                }\n\t            }\n\n\t            for(var i = 0 ; i < excludeJSON.length ; i++){\n\t                if(value.all.indexOf(excludeJSON[i]) > -1){\n\t                   matched = false;\n\t                }else {\n\t                    matched = true;\n\t                }\n\t            }\n\t        }else  {\n\t            matched = true;\n\t        }\n\n\t        if(matched){\n\t            newData.push(value)\n\t        }\n\n\n\t    });\n\n\t    var param = {\n\t        encodeHtml: encodeHtml,\n\t        set: Delegator.set,\n\t        startIndex: 1,\n\t        formatMsg : formatMsg\n\t    };\n\n\t    $('#log-table').html(logTable({\n\t        it: newData,\n\t        opt: param,\n\t        classes: {\n\t            'td-1':'active',\n\t            'td-2':'active',\n\t            'td-3':'active',\n\t            'td-6':'active',\n\t            'td-7':'active',\n\t        }\n\t    }));\n\t}\n\n\tfunction init() {\n\t    bindEvent();\n\t    //读取用户偏好\n\n\t    $('.main-table .td-4').removeClass('active');\n\t    $('.main-table .td-5').removeClass('active');\n\n\n\t    $('#content .mid-side .main-table thead tr').show();\n\t    $('#content .right-side .setting-show').show();\n\t}\n\n\texports.init = init;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5), __webpack_require__(4)))\n\n/***/ },\n\n/***/ 21:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * Map\n\t * @class\n\t */\n\tfunction Map() {\n\t    this.map = {};\n\t    this.length = 0;\n\t}\n\tMap.prototype = {\n\t    constructor: Map,\n\t    /**\n\t     * has\n\t     * @param {String} key\n\t     * @returns {Boolean}\n\t     */\n\t    has: function (key) {\n\t        return (key in this.map);\n\t    },\n\t    /**\n\t     * get\n\t     * @param {String} key\n\t     * @returns {Any}\n\t     */\n\t    get: function (key) {\n\t        return this.map[key];\n\t    },\n\t    /**\n\t     * set\n\t     * @param {String} key\n\t     * @param {Any} value\n\t     */\n\t    set: function (key, value) {\n\t        !this.has(key) && this.length++;\n\t        return (this.map[key] = value);\n\t    },\n\t    /**\n\t     * count\n\t     * @returns {Number}\n\t     */\n\t    count: function () {\n\t        return this.length;\n\t    },\n\t    /**\n\t     * remove\n\t     * @param {String} key\n\t     */\n\t    remove: function (key) {\n\t        if (this.has(key)) {\n\t            this.map[key] = null;\n\t            delete this.map[key];\n\t            this.length--;\n\t        }\n\t    }\n\t};\n\n\tvar cache = new Map(), set = cache.set, uid = 0;\n\tcache.set = function (node, value) {\n\t    if (!value) {\n\t        value = node;\n\t        set.call(cache, ++uid + '', value);\n\t        return uid;\n\t    } else {\n\t        typeof node === 'string' &&\n\t        (node = $(node)[0]);\n\t        $.data(node, 'event-data', value);\n\t        return this;\n\t    }\n\t};\n\n\tfunction _key(arr) {\n\t    if (!arr) return {};\n\t    arr = arr.split(' ');\n\t    var obj = {};\n\t    for (var i = 0, l = arr.length; i < l; i++) {\n\t        obj[arr[i]] = true;\n\t    }\n\t    return obj;\n\t}\n\n\t/**\n\t * Delegator\n\t * @class\n\t * @param {Selector} container\n\t */\n\tfunction Delegator(container) {\n\t    this.container = $(container);\n\t    this.listenerMap = new Map();\n\t}\n\n\t/**\n\t * getKey\n\t * @param {Any} value\n\t * @returns {Number}\n\t */\n\tDelegator.set = cache.set;\n\t/**\n\t * cache\n\t * @class\n\t * @static\n\t */\n\tDelegator.cache = cache;\n\n\tDelegator.prototype = {\n\t    constructor: Delegator,\n\t    _getListener: function (type) {\n\t        if (this.listenerMap.has(type)) {\n\t            return this.listenerMap.get(type);\n\t        }\n\t        function listener(e) {\n\t            var data = $.data(this),\n\t                routes = data['event-' + type + '-routes'],\n\t                eventData = data['event-data'], handle, dataKey;\n\n\t            // preprocessing\n\t            if (!routes && (routes = this.getAttribute('data-event-' + type))) {\n\t                (routes = routes.split(' ')) &&\n\t                (data['event-' + type + '-routes'] = routes);\n\t                !eventData &&\n\t                (dataKey = this.getAttribute('data-event-data')) &&\n\t                (eventData = cache.get(dataKey)) &&\n\t                (data['event-data'] = eventData) &&\n\t                (cache.remove(dataKey));\n\t                !data['event-stop-propagation'] &&\n\t                (data['event-stop-propagation'] = _key(this.getAttribute('data-event-stop-propagation')));\n\t            }\n\n\t            if (routes) {\n\t                for (var i = 0, l = routes.length; i < l; i++) {\n\t                    handle = listener.handleMap.get(routes[i]);\n\n\t                    if (handle) {\n\t                        handle.call(this, e, eventData);\n\t                    }\n\t                    data['event-stop-propagation'][type] &&\n\t                    e.stopPropagation();\n\t                }\n\t            }\n\t        }\n\n\t        listener.handleMap = new Map();\n\t        this.listenerMap.set(type, listener);\n\t        this.container.on(type, '[data-event-' + type + ']', listener);\n\t        return listener;\n\t    },\n\t    /**\n\t     * on\n\t     * @param {String} type\n\t     * @param {String} name\n\t     * @param {Function} handle\n\t     */\n\t    on: function (type, name, handle) {\n\t        var listener = this._getListener(type);\n\t        listener.handleMap.set(name, handle);\n\t        return this;\n\t    },\n\t    /**\n\t     * off\n\t     * @param {String} type\n\t     * @param {String} name\n\t     */\n\t    off: function (type, name) {\n\t        var listener = this._getListener(type),\n\t            handleMap = listener.handleMap;\n\t        handleMap.remove(name);\n\t        if (!handleMap.count()) {\n\t            this.container.off(type, '[data-event-' + type + ']', listener);\n\t            this.listenerMap.remove(type);\n\t        }\n\t    }\n\t};\n\n\tmodule.exports = Delegator;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 22:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar dialogTpl = __webpack_require__(152);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(dialogTpl(param))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on =  {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 24:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($, _) {var Delegator = __webpack_require__(21);\n\tvar offline_monitor_row = __webpack_require__(153);\n\tvar dialogTpl = __webpack_require__(154);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\t    function showOfflineLogConfig(logConfig){\n\t        $.ajax({\n\t            url: \"/controller/logAction/getOfflineLogConfig.do\",\n\t            data: {\n\t                id: logConfig.id,\n\t            },\n\t            success : function (data){\n\t                $(\"#offlineConfigModal table\").html(\"\")\n\t                _.each(data.data , function (value ,key){\n\t                    $(\"#offlineConfigModal table\").append(offline_monitor_row({uin : key}))\n\t                })\n\t            },\n\t            error : function (){\n\n\t            }\n\t        })\n\t    }\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(dialogTpl())\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on =  {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide)\n\t            .on('click', 'addUin', function (){\n\t                var val = $(\"#addUin\").val();\n\n\t                if(val.length <=0){\n\t                    return ;\n\t                }\n\t                $.ajax({\n\t                    url: \"/controller/logAction/addOfflineLogConfig.do\",\n\t                    data: {\n\t                        uin: val,\n\t                        id : param.id\n\t                    },\n\t                    success : function (data){\n\t                        if(!data.data.hadAdd && data.ret == 0){\n\t                            $(\"#offlineConfigModal table\").append(offline_monitor_row({uin : val}))\n\t                        }\n\n\t                        $(\"#addUin\").val(\"\")\n\t                    },\n\t                    error : function (){\n\n\t                    }\n\t                })\n\t            })\n\t            .on('click', 'deleteUin', function (e){\n\t                var val = $(e.currentTarget).attr(\"uin\");\n\n\t                if(val.length <=0){\n\t                    return ;\n\t                }\n\t                $.ajax({\n\t                    url: \"/controller/logAction/deleteOfflineLogConfig.do\",\n\t                    data: {\n\t                        uin: val,\n\t                        id : param.id\n\t                    },\n\t                    success : function (){\n\t                        $(e.currentTarget).parents(\"tr\").remove();\n\t                    },\n\t                    error : function (){\n\n\t                    }\n\t                })\n\t            });\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\n\t            showOfflineLogConfig(param);\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5), __webpack_require__(4)))\n\n/***/ },\n\n/***/ 140:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar modal = __webpack_require__(155);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(modal({it :param}))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on = param.on || {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 146:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(_) {module.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '', __j = Array.prototype.join;\n\tfunction print() { __p += __j.call(arguments, '') }\n\twith (obj) {\n\n\n\tvar urls;\n\tvar not_show_source_page = true;\n\ttry {\n\t    not_show_source_page = !!localStorage.not_show_source_page;\n\t} catch (ex) {}\n\n\t// 手Q\n\tvar RE_MQQ = /(ipad|iphone|ipod).*? (ipad)?qq\\/([\\d.]+)|\\bv1_and_sqi?_([\\d.]+)(.*? qq\\/([\\d.]+))?/;\n\n\tfunction getBrowserType(ua) {\n\t    if (!ua) {\n\t        return '';\n\t    }\n\t    ua = ua.toLowerCase();\n\n\t    var osIcon = '', browserIcon = '';\n\n\t    // os\n\t    if (ua.indexOf('android') > -1)\n\t        osIcon = 'ico-android';\n\t    else if (ua.indexOf('iphone') > -1 || ua.indexOf('ipad') > -1)\n\t        osIcon = 'ico-ios';\n\t    else if (ua.indexOf('windows') > -1)\n\t        osIcon = 'ico-windows';\n\n\n\t    // 手Q\n\t    if (RE_MQQ.test(ua)) {\n\t        browserIcon = 'ico-qq';\n\t    } else if (ua.indexOf('qqbrowser') > -1) {\n\t        browserIcon = 'ico-qb';\n\t    } else if (ua.indexOf('metasr') > -1) {\n\t        browserIcon = 'ico-sougou';\n\t    } else if (ua.indexOf('maxthon') > -1) {\n\t        browserIcon = 'ico-maxthon';\n\t    } else if (ua.indexOf('360se') > -1) {\n\t        browserIcon = 'ico-360';\n\t    } else if (ua.indexOf('qq/') > -1) {\n\t        browserIcon = 'ico-qq';\n\t    } else if (ua.indexOf('micromessenger') > -1) {\n\t        browserIcon = 'ico-wx';\n\t    } else if (ua.indexOf('edge') > -1) {\n\t        browserIcon = 'ico-edge';\n\t    } else if (ua.indexOf('chrome') > -1) {\n\t        browserIcon = 'ico-chrome';\n\t    } else if (ua.indexOf('msie') > -1 || ua.indexOf('trident') > -1) {\n\t        browserIcon = 'ico-ie';\n\t    } else if (ua.indexOf('firefox') > -1) {\n\t        browserIcon = 'ico-ff';\n\t    } else if (ua.indexOf('safari') > -1) {\n\t        browserIcon = 'ico-safari';\n\t    }\n\n\t    return [osIcon, browserIcon];\n\t}\n\n\tfunction sourcePage(data, type, opt) {\n\t    var from = data.from || ''\n\t    if (/view/.test(type)) {\n\t        var view = ['页面查看', opt.encodeHtml(from)];\n\t        return 'viewtext' === type ? view[0] :\n\t            'viewlink' === type ? view[1] :\n\t            not_show_source_page ? view[0] : view[1];\n\t    } else {\n\t        var href = opt.encodeHtml(from);\n\t        var msg = [data._target, data.rowNum, data.colNum].join(':') + ' ' + data.msg;\n\t        if (href.indexOf('#') === -1) {\n\t            href += '#BJ_ERROR=' + encodeURIComponent(msg);\n\t        } else {\n\t            href += '&BJ_ERROR=' + encodeURIComponent(msg);\n\t        }\n\t        return href;\n\t    }\n\t}\n\n\tfor (var i = 0 , l = it.length, type = ''; i < l; i++) {\n\t    switch(it[i].level.toString()) {\n\t        case '8':\n\t            type = 'warning';\n\t            break;\n\t        case '4':\n\t            type = 'err';\n\t            break;\n\t        case '2':\n\t            type = 'info';\n\t            break;\n\t        case '1':\n\t            type = 'debug';\n\t            break;\n\t        case '20':\n\t            type = 'offline';\n\t            break;\n\t    }\n\n\t    if (_.isArray(it[i].target)) {\n\t        it[i].target = it[i].target[0];\n\t    }\n\n\t    var isHtml = /^.+?\\.html\\??/.test(it[i].target);\n\t    var _target = it[i]._target = (it[i].target || it[i].url || '').replace(/\\)/g, '');\n\t;\n\t__p += '\\r\\n<tr id=\"tr-' +\n\t((__t = (i + 1 + opt.startIndex)) == null ? '' : __t) +\n\t'\">\\r\\n    <td  class=\"td-1 active info-type-' +\n\t((__t = (type)) == null ? '' : __t) +\n\t'\" data-event-click=\"alertModal\" title=\"点击查看#' +\n\t((__t = (i + 1 + opt.startIndex)) == null ? '' : __t) +\n\t'详情\">\\r\\n        ' +\n\t((__t = (i + 1 + opt.startIndex)) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  class=\"td-2 ' +\n\t((__t = (classes['td-2'] )) == null ? '' : __t) +\n\t'\">\\r\\n        ' +\n\t((__t = ( _.formatDate(new Date(it[i].date) , 'YYYY-MM-DD hh:mm:ss') )) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  style=\"\" class=\"td-3 ' +\n\t((__t = (classes['td-3'] )) == null ? '' : __t) +\n\t'\">\\r\\n        ' +\n\t((__t = ( opt.formatMsg(opt.encodeHtml(it[i].msg)) )) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  class=\"td-4 ' +\n\t((__t = (classes['td-4'] )) == null ? '' : __t) +\n\t'\" title=\"' +\n\t((__t = (  opt.encodeHtml(it[i].uin == 'NaN' ? '-' : it[i].uin ))) == null ? '' : __t) +\n\t'\" style=\"text-overflow: ellipsis;overflow: hidden;\" >\\r\\n        ' +\n\t((__t = (  opt.encodeHtml(it[i].uin == 'NaN' ? '-' : it[i].uin ))) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  class=\"td-5 ' +\n\t((__t = (classes['td-5'] )) == null ? '' : __t) +\n\t'\">\\r\\n        ' +\n\t((__t = (it[i].ip )) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td class=\"td-6 ' +\n\t((__t = ( classes['td-6'] )) == null ? '' : __t) +\n\t'\" title=\"' +\n\t((__t = ( it[i].userAgent )) == null ? '' : __t) +\n\t'\">\\r\\n            ';\n\n\t            var browserTypes = getBrowserType(it[i].userAgent);\n\t            for(var x = 0; x < browserTypes.length; x++) {\n\t             ;\n\t__p += '\\r\\n             <span class=\"ico-browser ' +\n\t((__t = ( browserTypes[x] )) == null ? '' : __t) +\n\t'\"></span>\\r\\n             ';\n\t};\n\t__p += '\\r\\n     </td>\\r\\n    <td class=\"td-7 ' +\n\t((__t = (classes['td-7'] )) == null ? '' : __t) +\n\t'\">\\r\\n        <a\\r\\n            style=\"word-break:break-all;display:block\"\\r\\n            href=\"' +\n\t((__t = ( opt.encodeHtml(_target))) == null ? '' : __t) +\n\t'\"\\r\\n            target=\"_blank\"\\r\\n            data-event-click=\"showSource\"\\r\\n            data-event-data=\"' +\n\t((__t = (opt.set(it[i]))) == null ? '' : __t) +\n\t'\"\\r\\n        >\\r\\n            ' +\n\t((__t = (opt.encodeHtml(_target))) == null ? '' : __t) +\n\t'\\r\\n            <span\\r\\n                class=\"err-where\"\\r\\n                style=\"height:24px;line-height:24px;border-radius:3px\"\\r\\n            >\\r\\n                ' +\n\t((__t = (opt.encodeHtml(it[i].rowNum || 0))) == null ? '' : __t) +\n\t'行\\r\\n                ' +\n\t((__t = (opt.encodeHtml(it[i].colNum || 0))) == null ? '' : __t) +\n\t'列\\r\\n            </span>\\r\\n        </a>\\r\\n        <a\\r\\n            class=\"source_page_link\"\\r\\n            style=\"font-size:12px\"\\r\\n            target=\"_blank\"\\r\\n            href=\"' +\n\t((__t = (sourcePage(it[i], 'href', opt))) == null ? '' : __t) +\n\t'\"\\r\\n            data-viewtext=\"' +\n\t((__t = (sourcePage(it[i], 'viewtext', opt))) == null ? '' : __t) +\n\t'\"\\r\\n            data-viewlink=\"' +\n\t((__t = (sourcePage(it[i], 'viewlink', opt))) == null ? '' : __t) +\n\t'\"\\r\\n        >' +\n\t((__t = (sourcePage(it[i], 'view', opt))) == null ? '' : __t) +\n\t'</a>\\r\\n    </td>\\r\\n</tr>\\r\\n';\n\t } ;\n\t__p += '\\r\\n\\r\\n';\n\t if(it.length === 0 ){;\n\t__p += '\\r\\n<td colspan=\"7\" style=\"\\r\\n    text-align: center;\\r\\n    background: rgb(221, 221, 221);\\r\\n\">无更多数据</td>\\r\\n';\n\t};\n\t__p += '\\r\\n';\n\n\t}\n\treturn __p\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ },\n\n/***/ 147:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<a class=\"keyword-tag\">' +\n\t((__t = (it.value)) == null ? '' : __t) +\n\t'<span class=\"keyword-del\" data-event-click=\"removeKeyword\" data-event-data=\"' +\n\t((__t = (opt.set(it.value))) == null ? '' : __t) +\n\t'\">x</span></a>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 148:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<a class=\"keyword-tag\">' +\n\t((__t = (it.value)) == null ? '' : __t) +\n\t'<span class=\"keyword-del\" data-event-click=\"removeDebar\" data-event-data=\"' +\n\t((__t = (opt.set(it.value))) == null ? '' : __t) +\n\t'\">x</span></a>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 152:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '\\n\\n<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"logDetailModal\">\\n    <div class=\"modal-backdrop fade\"></div>\\n    <div class=\"modal-dialog\">\\n        <div class=\"modal-content\">\\n\\n            <div class=\"modal-header\">\\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\n                <h4 class=\"modal-title\">日志详情</h4>\\n            </div>\\n            <div class=\"modal-body\">\\n                <p>\\n                    <b>Time：</b><span class=\"time\">' +\n\t((__t = (time)) == null ? '' : __t) +\n\t'</span>\\n                </p>\\n                <p>\\n                    <b>Info：</b><div class=\"info\">' +\n\t((__t = (info)) == null ? '' : __t) +\n\t'</div>\\n                </p>\\n                <p>\\n                    <b>uin：</b><span class=\"uin\">' +\n\t((__t = (uin)) == null ? '' : __t) +\n\t'</span>\\n                </p>\\n                <p>\\n                    <b>ip：</b><span class=\"ip\">' +\n\t((__t = (ip)) == null ? '' : __t) +\n\t'</span>\\n                </p>\\n                <p>\\n                    <b>agent：</b><div class=\"userAgent\">' +\n\t((__t = (agent)) == null ? '' : __t) +\n\t'</div>\\n                </p>\\n                <p>\\n                    <b>Source：</b><div class=\"source\">' +\n\t((__t = (source)) == null ? '' : __t) +\n\t'</div>\\n                </p>\\n            </div>\\n            <div class=\"modal-footer\">\\n                <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\n            </div>\\n\\n        </div>\\n    </div>\\n</div>\\n';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 153:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<tr>\\n    <td style=\"width:70%\">' +\n\t((__t = (uin)) == null ? '' : __t) +\n\t'</td>\\n    <td>监听中</td>\\n    <td><a uin=\"' +\n\t((__t = (uin)) == null ? '' : __t) +\n\t'\" data-event-click=\"deleteUin\" href=\"javascript:;\">删除</a></td>\\n</tr>\\n';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 154:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"offlineConfigModal\">\\n    <div class=\"modal-backdrop fade\"></div>\\n    <div class=\"modal-dialog\">\\n        <div class=\"modal-content\">\\n\\n            <div class=\"modal-header\">\\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\n                <h4 class=\"modal-title\">设置离线日志自动拉取</h4>\\n            </div>\\n            <div class=\"modal-body\">\\n                <div class=\"form-group\" style=\"text-align: center;\">\\n                    <input style=\"display: inline-block;width: 300px;\" type=\"text\" class=\"form-control\" id=\"addUin\" placeholder=\"添加监听的UIN\">\\n                    <button type=\"submit\" class=\"btn btn-default\" data-event-click=\"addUin\">添加</button>\\n                </div>\\n                <div class=\"uin-list\">\\n                    <table class=\"table table-striped\">\\n                    </table>\\n                </div>\\n            </div>\\n            <div class=\"modal-footer\">\\n                <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\n            </div>\\n\\n        </div>\\n    </div>\\n</div>\\n';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 155:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"' +\n\t((__t = (it.id || '' )) == null ? '' : __t) +\n\t'\">\\r\\n  <div class=\"modal-backdrop fade\"></div>\\r\\n  <div class=\"modal-dialog\">\\r\\n    <div class=\"modal-content\">\\r\\n\\r\\n      <div class=\"modal-header\">\\r\\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\r\\n        <h4 class=\"modal-title\">' +\n\t((__t = (it.header)) == null ? '' : __t) +\n\t'</h4>\\r\\n      </div>\\r\\n      <div class=\"modal-body\">\\r\\n        ' +\n\t((__t = (it.body)) == null ? '' : __t) +\n\t'\\r\\n      </div>\\r\\n      <div class=\"modal-footer\">\\r\\n        <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\r\\n      </div>\\r\\n\\r\\n    </div>\\r\\n  </div>\\r\\n</div>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ }\n\n});"
  },
  {
    "path": "static/entry.projectTotal.js",
    "content": "webpackJsonp([7],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar projectTotal = __webpack_require__(16);\n\n\tprojectTotal.init();\n\n/***/ },\n\n/***/ 16:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($, _) {/* global _ */\n\t/**\n\t * @info 图表统计js\n\t * @author coverguo\n\t *\n\t */\n\t__webpack_require__(23);\n\t__webpack_require__(141);\n\t__webpack_require__(142);\n\tvar Dialog = __webpack_require__(140);\n\tvar statisticsTpl = __webpack_require__(149);\n\n\tvar dayNumber = 0,\n\t    days = [];\n\n\tvar chart_title, chart_projects = [];\n\tvar statistics = {\n\t    init: function() {\n\n\t        this.bindEvent();\n\n\t    },\n\t    setChart: function(data) {\n\t        $('#chartsContainer').highcharts({ //图表展示容器，与div的id保持一致\n\t            chart: {\n\t                type: 'line' //指定图表的类型，默认是折线图（line）\n\t            },\n\t            title: {\n\t                text: \"\" //指定图表标题\n\t            },\n\t            xAxis: {\n\t                categories: setChartX(dayNumber)\n\t            },\n\t            yAxis: {\n\t                min: 0,\n\t                title: {\n\t                    text: '报错数量' //指定y轴的标题\n\t                }\n\t            },\n\t            series: chart_projects\n\t        });\n\t    },\n\t    renderTable: function() {\n\t        $('#chart-table').html(statisticsTpl({\n\t            item: chart_projects\n\t        }));\n\t    },\n\t    bindEvent: function() {\n\t        var self = this;\n\t        $('#showCharts').bind(\"click\", function(e) {\n\t            var param = {\n\t                projectId: $(\"#select-chartBusiness\").val(),\n\t                timeScope: $(\"#select-timeScope\").val()\n\t            };\n\t            $.getJSON(\"/controller/statisticsAction/queryByChartForAdmin.do\", param, function(data) {\n\t                var $options = $(\"#select-chartBusiness option\");\n\t                var $selectedOption = $(\"#select-chartBusiness\").find(\"option:selected\");\n\n\t                chart_projects = [];\n\t                dayNumber = param.timeScope == 1 ? 7 : 30;\n\t                days = setChartX(dayNumber);\n\t                var project = null;\n\t                if (param.projectId == -1) {\n\t                    var projectLength = $options.length;\n\t                    for (var i = 1; i < projectLength; i++) {\n\t                        var defaultData1 = [];\n\t                        setDefaultTotal(defaultData1, dayNumber);\n\t                        project = {\n\t                            name: $options.eq(i).text(),\n\t                            projectId: $options.eq(i).val() - 0,\n\t                            date: days,\n\t                            data: defaultData1\n\t                        };\n\t                        chart_projects.push(project);\n\t                    }\n\t                } else {\n\t                    var defaultData2 = [];\n\t                    setDefaultTotal(defaultData2, dayNumber);\n\t                    project = {\n\t                        name: $selectedOption.text(),\n\t                        projectId: $(\"#select-chartBusiness\").val() - 0,\n\t                        date: days,\n\t                        data: defaultData2\n\t                    };\n\t                    chart_projects.push(project);\n\t                }\n\n\t                //设置表格title\n\t                chart_title = $(\"#select-chartBusiness\").find(\"option:selected\").text() +\n\t                    $(\"#select-timeScope\").find(\"option:selected\").text() + \"统计\";\n\t                console.log(data);\n\t                sortChartData(data.data);\n\t                console.log('project', chart_projects);\n\t                self.renderTable();\n\t            });\n\t        });\n\t    }\n\n\t};\n\n\tfunction setChartX(number) {\n\t    var days = [];\n\t    var nowDay = new Date() - 0;\n\n\t    for (var i = number; i > 0; i--) {\n\t        var day = nowDay - i * 1000 * 60 * 60 * 24;\n\t        days.push(_.formatDate(new Date(day), 'MM-DD'));\n\t    }\n\t    return days;\n\t}\n\n\tfunction setDefaultTotal(arr, number) {\n\t    for (var i = number; i > 0; i--) {\n\t        arr.push(0);\n\t    }\n\t}\n\n\tfunction whichDayIndex(day1) {\n\t    for (var i = 0, len = days.length; i < len; i++) {\n\t        if (day1 == days[i]) {\n\t            return i;\n\t        }\n\t    }\n\t    return false;\n\t}\n\n\tfunction sortChartData(data) {\n\t    for (var i = 0, len = data.length; i < len; i++) {\n\t        data[i].startDate = _.formatDate(new Date(data[i].startDate), 'MM-DD');\n\t        for (var j = 0, length = chart_projects.length; j < length; j++) {\n\t            if (data[i].projectId == chart_projects[j].projectId) {\n\t                chart_projects[j]['data'][whichDayIndex(data[i].startDate)] = data[i].total;\n\t            }\n\t        }\n\t    }\n\t}\n\n\tmodule.exports = statistics;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5), __webpack_require__(4)))\n\n/***/ },\n\n/***/ 21:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * Map\n\t * @class\n\t */\n\tfunction Map() {\n\t    this.map = {};\n\t    this.length = 0;\n\t}\n\tMap.prototype = {\n\t    constructor: Map,\n\t    /**\n\t     * has\n\t     * @param {String} key\n\t     * @returns {Boolean}\n\t     */\n\t    has: function (key) {\n\t        return (key in this.map);\n\t    },\n\t    /**\n\t     * get\n\t     * @param {String} key\n\t     * @returns {Any}\n\t     */\n\t    get: function (key) {\n\t        return this.map[key];\n\t    },\n\t    /**\n\t     * set\n\t     * @param {String} key\n\t     * @param {Any} value\n\t     */\n\t    set: function (key, value) {\n\t        !this.has(key) && this.length++;\n\t        return (this.map[key] = value);\n\t    },\n\t    /**\n\t     * count\n\t     * @returns {Number}\n\t     */\n\t    count: function () {\n\t        return this.length;\n\t    },\n\t    /**\n\t     * remove\n\t     * @param {String} key\n\t     */\n\t    remove: function (key) {\n\t        if (this.has(key)) {\n\t            this.map[key] = null;\n\t            delete this.map[key];\n\t            this.length--;\n\t        }\n\t    }\n\t};\n\n\tvar cache = new Map(), set = cache.set, uid = 0;\n\tcache.set = function (node, value) {\n\t    if (!value) {\n\t        value = node;\n\t        set.call(cache, ++uid + '', value);\n\t        return uid;\n\t    } else {\n\t        typeof node === 'string' &&\n\t        (node = $(node)[0]);\n\t        $.data(node, 'event-data', value);\n\t        return this;\n\t    }\n\t};\n\n\tfunction _key(arr) {\n\t    if (!arr) return {};\n\t    arr = arr.split(' ');\n\t    var obj = {};\n\t    for (var i = 0, l = arr.length; i < l; i++) {\n\t        obj[arr[i]] = true;\n\t    }\n\t    return obj;\n\t}\n\n\t/**\n\t * Delegator\n\t * @class\n\t * @param {Selector} container\n\t */\n\tfunction Delegator(container) {\n\t    this.container = $(container);\n\t    this.listenerMap = new Map();\n\t}\n\n\t/**\n\t * getKey\n\t * @param {Any} value\n\t * @returns {Number}\n\t */\n\tDelegator.set = cache.set;\n\t/**\n\t * cache\n\t * @class\n\t * @static\n\t */\n\tDelegator.cache = cache;\n\n\tDelegator.prototype = {\n\t    constructor: Delegator,\n\t    _getListener: function (type) {\n\t        if (this.listenerMap.has(type)) {\n\t            return this.listenerMap.get(type);\n\t        }\n\t        function listener(e) {\n\t            var data = $.data(this),\n\t                routes = data['event-' + type + '-routes'],\n\t                eventData = data['event-data'], handle, dataKey;\n\n\t            // preprocessing\n\t            if (!routes && (routes = this.getAttribute('data-event-' + type))) {\n\t                (routes = routes.split(' ')) &&\n\t                (data['event-' + type + '-routes'] = routes);\n\t                !eventData &&\n\t                (dataKey = this.getAttribute('data-event-data')) &&\n\t                (eventData = cache.get(dataKey)) &&\n\t                (data['event-data'] = eventData) &&\n\t                (cache.remove(dataKey));\n\t                !data['event-stop-propagation'] &&\n\t                (data['event-stop-propagation'] = _key(this.getAttribute('data-event-stop-propagation')));\n\t            }\n\n\t            if (routes) {\n\t                for (var i = 0, l = routes.length; i < l; i++) {\n\t                    handle = listener.handleMap.get(routes[i]);\n\n\t                    if (handle) {\n\t                        handle.call(this, e, eventData);\n\t                    }\n\t                    data['event-stop-propagation'][type] &&\n\t                    e.stopPropagation();\n\t                }\n\t            }\n\t        }\n\n\t        listener.handleMap = new Map();\n\t        this.listenerMap.set(type, listener);\n\t        this.container.on(type, '[data-event-' + type + ']', listener);\n\t        return listener;\n\t    },\n\t    /**\n\t     * on\n\t     * @param {String} type\n\t     * @param {String} name\n\t     * @param {Function} handle\n\t     */\n\t    on: function (type, name, handle) {\n\t        var listener = this._getListener(type);\n\t        listener.handleMap.set(name, handle);\n\t        return this;\n\t    },\n\t    /**\n\t     * off\n\t     * @param {String} type\n\t     * @param {String} name\n\t     */\n\t    off: function (type, name) {\n\t        var listener = this._getListener(type),\n\t            handleMap = listener.handleMap;\n\t        handleMap.remove(name);\n\t        if (!handleMap.count()) {\n\t            this.container.off(type, '[data-event-' + type + ']', listener);\n\t            this.listenerMap.remove(type);\n\t        }\n\t    }\n\t};\n\n\tmodule.exports = Delegator;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 23:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(jQuery) {/**\n\t * @preserve jQuery DateTimePicker plugin v2.4.1\n\t * @homepage http://xdsoft.net/jqplugins/datetimepicker/\n\t * (c) 2014, Chupurnov Valeriy.\n\t */\n\t/*global document,window,jQuery,setTimeout,clearTimeout*/\n\t(function ($) {\n\t\t'use strict';\n\t\tvar default_options  = {\n\t\t\ti18n: {\n\t\t\t\tar: { // Arabic\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"مايو\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"ن\", \"ث\", \"ع\", \"خ\", \"ج\", \"س\", \"ح\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tro: { // Romanian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"ianuarie\", \"februarie\", \"martie\", \"aprilie\", \"mai\", \"iunie\", \"iulie\", \"august\", \"septembrie\", \"octombrie\", \"noiembrie\", \"decembrie\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"l\", \"ma\", \"mi\", \"j\", \"v\", \"s\", \"d\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tid: { // Indonesian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\", \"Min\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tbg: { // Bulgarian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfa: { // Persian/Farsi\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tru: { // Russian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Вск\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tuk: { // Ukrainian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ндл\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Сбт\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\ten: { // English\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tel: { // Ελληνικά\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tde: { // German\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tnl: { // Dutch\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\ttr: { // Turkish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Paz\", \"Pts\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cts\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfr: { //French\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tes: { // Spanish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tth: { // Thai\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tpl: { // Polish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"styczeń\", \"luty\", \"marzec\", \"kwiecień\", \"maj\", \"czerwiec\", \"lipiec\", \"sierpień\", \"wrzesień\", \"październik\", \"listopad\", \"grudzień\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"nd\", \"pn\", \"wt\", \"śr\", \"cz\", \"pt\", \"sb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tpt: { // Portuguese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tch: { // Simplified Chinese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tse: { // Swedish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\",  \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tkr: { // Korean\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tit: { // Italian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tda: { // Dansk\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"July\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tno: { // Norwegian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tja: { // Japanese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tvi: { // Vietnamese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Tháng 1\", \"Tháng 2\", \"Tháng 3\", \"Tháng 4\", \"Tháng 5\", \"Tháng 6\", \"Tháng 7\", \"Tháng 8\", \"Tháng 9\", \"Tháng 10\", \"Tháng 11\", \"Tháng 12\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsl: { // Slovenščina\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tcs: { // Čeština\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\thu: { // Hungarian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Cs\", \"Pé\", \"Szo\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\taz: { //Azerbaijanian (Azeri)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Yanvar\", \"Fevral\", \"Mart\", \"Aprel\", \"May\", \"Iyun\", \"Iyul\", \"Avqust\", \"Sentyabr\", \"Oktyabr\", \"Noyabr\", \"Dekabr\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"B\", \"Be\", \"Ça\", \"Ç\", \"Ca\", \"C\", \"Ş\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tbs: { //Bosanski\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tca: { //Català\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dg\", \"Dl\", \"Dt\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'en-GB': { //English (British)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tet: { //\"Eesti\"\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Jaanuar\", \"Veebruar\", \"Märts\", \"Aprill\", \"Mai\", \"Juuni\", \"Juuli\", \"August\", \"September\", \"Oktoober\", \"November\", \"Detsember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\teu: { //Euskara\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Urtarrila\", \"Otsaila\", \"Martxoa\", \"Apirila\", \"Maiatza\", \"Ekaina\", \"Uztaila\", \"Abuztua\", \"Iraila\", \"Urria\", \"Azaroa\", \"Abendua\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ig.\", \"Al.\", \"Ar.\", \"Az.\", \"Og.\", \"Or.\", \"La.\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfi: { //Finnish (Suomi)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kesäkuu\", \"Heinäkuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tgl: { //Galego\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Xan\", \"Feb\", \"Maz\", \"Abr\", \"Mai\", \"Xun\", \"Xul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dec\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Xov\", \"Ven\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\thr: { //Hrvatski\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tko: { //Korean (한국어)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tlt: { //Lithuanian (lietuvių)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Sausio\", \"Vasario\", \"Kovo\", \"Balandžio\", \"Gegužės\", \"Birželio\", \"Liepos\", \"Rugpjūčio\", \"Rugsėjo\", \"Spalio\", \"Lapkričio\", \"Gruodžio\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sek\", \"Pir\", \"Ant\", \"Tre\", \"Ket\", \"Pen\", \"Šeš\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tlv: { //Latvian (Latviešu)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis \", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sv\", \"Pr\", \"Ot\", \"Tr\", \"Ct\", \"Pk\", \"St\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tmk: { //Macedonian (Македонски)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tmn: { //Mongolian (Монгол)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1-р сар\", \"2-р сар\", \"3-р сар\", \"4-р сар\", \"5-р сар\", \"6-р сар\", \"7-р сар\", \"8-р сар\", \"9-р сар\", \"10-р сар\", \"11-р сар\", \"12-р сар\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Дав\", \"Мяг\", \"Лха\", \"Пүр\", \"Бсн\", \"Бям\", \"Ням\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'pt-BR': { //Português(Brasil)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsk: { //Slovenčina\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsq: { //Albanian (Shqip)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'sr-YU': { //Serbian (Srpski)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsr: { //Serbian Cyrillic (Српски)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"јануар\", \"фебруар\", \"март\", \"април\", \"мај\", \"јун\", \"јул\", \"август\", \"септембар\", \"октобар\", \"новембар\", \"децембар\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"нед\", \"пон\", \"уто\", \"сре\", \"чет\", \"пет\", \"суб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsv: { //Svenska\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'zh-TW': { //Traditional Chinese (繁體中文)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tzh: { //Simplified Chinese (简体中文)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\the: { //Hebrew (עברית)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'א\\'', 'ב\\'', 'ג\\'', 'ד\\'', 'ה\\'', 'ו\\'', 'שבת'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\tvalue: '',\n\t\t\tlang: 'en',\n\n\t\t\tformat:\t'Y/m/d H:i',\n\t\t\tformatTime:\t'H:i',\n\t\t\tformatDate:\t'Y/m/d',\n\n\t\t\tstartDate:\tfalse, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',\n\t\t\tstep: 60,\n\t\t\tmonthChangeSpinner: true,\n\n\t\t\tcloseOnDateSelect: false,\n\t\t\tcloseOnWithoutClick: true,\n\t\t\tcloseOnInputClick: true,\n\n\t\t\ttimepicker: true,\n\t\t\tdatepicker: true,\n\t\t\tweeks: false,\n\n\t\t\tdefaultTime: false,\t// use formatTime format (ex. '10:00' for formatTime:\t'H:i')\n\t\t\tdefaultDate: false,\t// use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')\n\n\t\t\tminDate: false,\n\t\t\tmaxDate: false,\n\t\t\tminTime: false,\n\t\t\tmaxTime: false,\n\n\t\t\tallowTimes: [],\n\t\t\topened: false,\n\t\t\tinitTime: true,\n\t\t\tinline: false,\n\t\t\ttheme: '',\n\n\t\t\tonSelectDate: function () {},\n\t\t\tonSelectTime: function () {},\n\t\t\tonChangeMonth: function () {},\n\t\t\tonChangeYear: function () {},\n\t\t\tonChangeDateTime: function () {},\n\t\t\tonShow: function () {},\n\t\t\tonClose: function () {},\n\t\t\tonGenerate: function () {},\n\n\t\t\twithoutCopyright: true,\n\t\t\tinverseButton: false,\n\t\t\thours12: false,\n\t\t\tnext:\t'xdsoft_next',\n\t\t\tprev : 'xdsoft_prev',\n\t\t\tdayOfWeekStart: 0,\n\t\t\tparentID: 'body',\n\t\t\ttimeHeightInTimePicker: 25,\n\t\t\ttimepickerScrollbar: true,\n\t\t\ttodayButton: true,\n\t\t\tdefaultSelect: true,\n\n\t\t\tscrollMonth: true,\n\t\t\tscrollTime: true,\n\t\t\tscrollInput: true,\n\n\t\t\tlazyInit: false,\n\t\t\tmask: false,\n\t\t\tvalidateOnBlur: true,\n\t\t\tallowBlank: true,\n\t\t\tyearStart: 1950,\n\t\t\tyearEnd: 2050,\n\t\t\tstyle: '',\n\t\t\tid: '',\n\t\t\tfixed: false,\n\t\t\troundTime: 'round', // ceil, floor\n\t\t\tclassName: '',\n\t\t\tweekends: [],\n\t\t\tdisabledDates : [],\n\t\t\tyearOffset: 0,\n\t\t\tbeforeShowDay: null,\n\n\t\t\tenterLikeTab: true\n\t\t};\n\t\t// fix for ie8\n\t\tif (!Array.prototype.indexOf) {\n\t\t\tArray.prototype.indexOf = function (obj, start) {\n\t\t\t\tvar i, j;\n\t\t\t\tfor (i = (start || 0), j = this.length; i < j; i += 1) {\n\t\t\t\t\tif (this[i] === obj) { return i; }\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t}\n\t\tDate.prototype.countDaysInMonth = function () {\n\t\t\treturn new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();\n\t\t};\n\t\t$.fn.extend ( \"xdsoftScroller\"   ,  function (percent) {\n\t\t\treturn this.each(function () {\n\t\t\t\tvar timeboxparent = $(this),\n\t\t\t\t\tpointerEventToXY = function (e) {\n\t\t\t\t\t\tvar out = {x: 0, y: 0},\n\t\t\t\t\t\t\ttouch;\n\t\t\t\t\t\tif (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {\n\t\t\t\t\t\t\ttouch  = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];\n\t\t\t\t\t\t\tout.x = touch.clientX;\n\t\t\t\t\t\t\tout.y = touch.clientY;\n\t\t\t\t\t\t} else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {\n\t\t\t\t\t\t\tout.x = e.clientX;\n\t\t\t\t\t\t\tout.y = e.clientY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn out;\n\t\t\t\t\t},\n\t\t\t\t\tmove = 0,\n\t\t\t\t\ttimebox,\n\t\t\t\t\tparentHeight,\n\t\t\t\t\theight,\n\t\t\t\t\tscrollbar,\n\t\t\t\t\tscroller,\n\t\t\t\t\tmaximumOffset = 100,\n\t\t\t\t\tstart = false,\n\t\t\t\t\tstartY = 0,\n\t\t\t\t\tstartTop = 0,\n\t\t\t\t\th1 = 0,\n\t\t\t\t\ttouchStart = false,\n\t\t\t\t\tstartTopScroll = 0,\n\t\t\t\t\tcalcOffset = function () {};\n\t\t\t\tif (percent === 'hide') {\n\t\t\t\t\ttimeboxparent.find('.xdsoft_scrollbar').hide();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!$(this).hasClass('xdsoft_scroller_box')) {\n\t\t\t\t\ttimebox = timeboxparent.children().eq(0);\n\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\tscrollbar = $('<div class=\"xdsoft_scrollbar\"></div>');\n\t\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>');\n\t\t\t\t\tscrollbar.append(scroller);\n\n\t\t\t\t\ttimeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);\n\t\t\t\t\tcalcOffset = function calcOffset(event) {\n\t\t\t\t\t\tvar offset = pointerEventToXY(event).y - startY + startTopScroll;\n\t\t\t\t\t\tif (offset < 0) {\n\t\t\t\t\t\t\toffset = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (offset + scroller[0].offsetHeight > h1) {\n\t\t\t\t\t\t\toffset = h1 - scroller[0].offsetHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);\n\t\t\t\t\t};\n\n\t\t\t\t\tscroller\n\t\t\t\t\t\t.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {\n\t\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstartY = pointerEventToXY(event).y;\n\t\t\t\t\t\t\tstartTopScroll = parseInt(scroller.css('margin-top'), 10);\n\t\t\t\t\t\t\th1 = scrollbar[0].offsetHeight;\n\n\t\t\t\t\t\t\tif (event.type === 'mousedown') {\n\t\t\t\t\t\t\t\tif (document) {\n\t\t\t\t\t\t\t\t\t$(document.body).addClass('xdsoft_noselect');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft_scroller', function arguments_callee() {\n\t\t\t\t\t\t\t\t\t$([document.body, window]).off('mouseup.xdsoft_scroller', arguments_callee)\n\t\t\t\t\t\t\t\t\t\t.off('mousemove.xdsoft_scroller', calcOffset)\n\t\t\t\t\t\t\t\t\t\t.removeClass('xdsoft_noselect');\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t$(document.body).on('mousemove.xdsoft_scroller', calcOffset);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttouchStart = true;\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('touchmove', function (event) {\n\t\t\t\t\t\t\tif (touchStart) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tcalcOffset(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('touchend touchcancel', function (event) {\n\t\t\t\t\t\t\ttouchStart =  false;\n\t\t\t\t\t\t\tstartTopScroll = 0;\n\t\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent\n\t\t\t\t\t\t.on('scroll_element.xdsoft_scroller', function (event, percentage) {\n\t\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpercentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;\n\n\t\t\t\t\t\t\tscroller.css('margin-top', maximumOffset * percentage);\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {\n\t\t\t\t\t\t\tvar percent, sh;\n\t\t\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\t\tpercent = parentHeight / height;\n\t\t\t\t\t\t\tsh = percent * scrollbar[0].offsetHeight;\n\t\t\t\t\t\t\tif (percent > 1) {\n\t\t\t\t\t\t\t\tscroller.hide();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tscroller.show();\n\t\t\t\t\t\t\t\tscroller.css('height', parseInt(sh > 10 ? sh : 10, 10));\n\t\t\t\t\t\t\t\tmaximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;\n\t\t\t\t\t\t\t\tif (noTriggerScroll !== true) {\n\t\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('mousewheel', function (event) {\n\t\t\t\t\t\tvar top = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\n\t\t\t\t\t\ttop = top - (event.deltaY * 20);\n\t\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchstart', function (event) {\n\t\t\t\t\t\tstart = pointerEventToXY(event);\n\t\t\t\t\t\tstartTop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchmove', function (event) {\n\t\t\t\t\t\tif (start) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tvar coord = pointerEventToXY(event);\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchend touchcancel', function (event) {\n\t\t\t\t\t\tstart = false;\n\t\t\t\t\t\tstartTop = 0;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t\t});\n\t\t});\n\n\t\t$.fn.extend ( \"datetimepicker\" , function (opt) {\n\t\t\tvar KEY0 = 48,\n\t\t\t\tKEY9 = 57,\n\t\t\t\t_KEY0 = 96,\n\t\t\t\t_KEY9 = 105,\n\t\t\t\tCTRLKEY = 17,\n\t\t\t\tDEL = 46,\n\t\t\t\tENTER = 13,\n\t\t\t\tESC = 27,\n\t\t\t\tBACKSPACE = 8,\n\t\t\t\tARROWLEFT = 37,\n\t\t\t\tARROWUP = 38,\n\t\t\t\tARROWRIGHT = 39,\n\t\t\t\tARROWDOWN = 40,\n\t\t\t\tTAB = 9,\n\t\t\t\tF5 = 116,\n\t\t\t\tAKEY = 65,\n\t\t\t\tCKEY = 67,\n\t\t\t\tVKEY = 86,\n\t\t\t\tZKEY = 90,\n\t\t\t\tYKEY = 89,\n\t\t\t\tctrlDown\t=\tfalse,\n\t\t\t\toptions = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),\n\n\t\t\t\tlazyInitTimer = 0,\n\t\t\t\tcreateDateTimePicker,\n\t\t\t\tdestroyDateTimePicker,\n\t\t\t\t_xdsoft_datetime,\n\n\t\t\t\tlazyInit = function (input) {\n\t\t\t\t\tinput\n\t\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function initOnActionCallback(event) {\n\t\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclearTimeout(lazyInitTimer);\n\t\t\t\t\t\t\tlazyInitTimer = setTimeout(function () {\n\n\t\t\t\t\t\t\t\tif (!input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\t\t\tcreateDateTimePicker(input);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t\t\t.off('open.xdsoft focusin.xdsoft mousedown.xdsoft', initOnActionCallback)\n\t\t\t\t\t\t\t\t\t.trigger('open.xdsoft');\n\t\t\t\t\t\t\t}, 100);\n\t\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\tcreateDateTimePicker = function (input) {\n\t\t\t\tvar datetimepicker = $('<div ' + (options.id ? 'id=\"' + options.id + '\"' : '') + ' ' + (options.style ? 'style=\"' + options.style + '\"' : '') + ' class=\"xdsoft_datetimepicker xdsoft_' + options.theme + ' xdsoft_noselect ' + (options.weeks ? ' xdsoft_showweeks' : '') + options.className + '\"></div>'),\n\t\t\t\t\txdsoft_copyright = $('<div class=\"xdsoft_copyright\"><a target=\"_blank\" href=\"http://xdsoft.net/jqplugins/datetimepicker/\">xdsoft.net</a></div>'),\n\t\t\t\t\tdatepicker = $('<div class=\"xdsoft_datepicker active\"></div>'),\n\t\t\t\t\tmounth_picker = $('<div class=\"xdsoft_mounthpicker\"><button type=\"button\" class=\"xdsoft_prev\"></button><button type=\"button\" class=\"xdsoft_today_button\"></button>' +\n\t\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_month\"><span></span><i></i></div>' +\n\t\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_year\"><span></span><i></i></div>' +\n\t\t\t\t\t\t'<button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\t\tcalendar = $('<div class=\"xdsoft_calendar\"></div>'),\n\t\t\t\t\ttimepicker = $('<div class=\"xdsoft_timepicker active\"><button type=\"button\" class=\"xdsoft_prev\"></button><div class=\"xdsoft_time_box\"></div><button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\t\ttimeboxparent = timepicker.find('.xdsoft_time_box').eq(0),\n\t\t\t\t\ttimebox = $('<div class=\"xdsoft_time_variant\"></div>'),\n\t\t\t\t\t/*scrollbar = $('<div class=\"xdsoft_scrollbar\"></div>'),\n\t\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>'),*/\n\t\t\t\t\tmonthselect = $('<div class=\"xdsoft_select xdsoft_monthselect\"><div></div></div>'),\n\t\t\t\t\tyearselect = $('<div class=\"xdsoft_select xdsoft_yearselect\"><div></div></div>'),\n\t\t\t\t\ttriggerAfterOpen = false,\n\t\t\t\t\tXDSoft_datetime,\n\t\t\t\t\t//scroll_element,\n\t\t\t\t\txchangeTimer,\n\t\t\t\t\ttimerclick,\n\t\t\t\t\tcurrent_time_index,\n\t\t\t\t\tsetPos,\n\t\t\t\t\ttimer = 0,\n\t\t\t\t\ttimer1 = 0;\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_month span')\n\t\t\t\t\t\t.after(monthselect);\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_year span')\n\t\t\t\t\t\t.after(yearselect);\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tvar select = $(this).find('.xdsoft_select').eq(0),\n\t\t\t\t\t\t\tval = 0,\n\t\t\t\t\t\t\ttop = 0,\n\t\t\t\t\t\t\tvisible = select.is(':visible'),\n\t\t\t\t\t\t\titems,\n\t\t\t\t\t\t\ti;\n\n\t\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t\t\t.hide();\n\t\t\t\t\t\tif (_xdsoft_datetime.currentTime) {\n\t\t\t\t\t\t\tval = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselect[visible ? 'hide' : 'show']();\n\t\t\t\t\t\tfor (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {\n\t\t\t\t\t\t\tif (items.eq(i).data('value') === val) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttop += items[0].offsetHeight;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselect.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t.xdsoftScroller()\n\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t})\n\t\t\t\t\t.on('mousedown.xdsoft', '.xdsoft_option', function (event) {\n\t\t\t\t\t\tvar year = _xdsoft_datetime.currentTime.getFullYear();\n\t\t\t\t\t\tif (_xdsoft_datetime && _xdsoft_datetime.currentTime) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$(this).parent().parent().hide();\n\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tdatetimepicker.setOptions = function (_options) {\n\t\t\t\t\toptions = $.extend(true, {}, options, _options);\n\n\t\t\t\t\tif (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {\n\t\t\t\t\t\toptions.allowTimes = $.extend(true, [], _options.allowTimes);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {\n\t\t\t\t\t\toptions.weekends = $.extend(true, [], _options.weekends);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {\n\t                    options.disabledDates = $.extend(true, [], _options.disabledDates);\n\t                }\n\n\t\t\t\t\tif ((options.open || options.opened) && (!options.inline)) {\n\t\t\t\t\t\tinput.trigger('open.xdsoft');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.inline) {\n\t\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\t\tdatetimepicker.addClass('xdsoft_inline');\n\t\t\t\t\t\tinput.after(datetimepicker).hide();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.inverseButton) {\n\t\t\t\t\t\toptions.next = 'xdsoft_prev';\n\t\t\t\t\t\toptions.prev = 'xdsoft_next';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.datepicker) {\n\t\t\t\t\t\tdatepicker.addClass('active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatepicker.removeClass('active');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.timepicker) {\n\t\t\t\t\t\ttimepicker.addClass('active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimepicker.removeClass('active');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.value) {\n\t\t\t\t\t\tif (input && input.val) {\n\t\t\t\t\t\t\tinput.val(options.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(options.value);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isNaN(options.dayOfWeekStart)) {\n\t\t\t\t\t\toptions.dayOfWeekStart = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!options.timepickerScrollbar) {\n\t\t\t\t\t\ttimeboxparent.xdsoftScroller('hide');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.minDate && /^-(.*)$/.test(options.minDate)) {\n\t\t\t\t\t\toptions.minDate = _xdsoft_datetime.strToDateTime(options.minDate).dateFormat(options.formatDate);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.maxDate &&  /^\\+(.*)$/.test(options.maxDate)) {\n\t\t\t\t\t\toptions.maxDate = _xdsoft_datetime.strToDateTime(options.maxDate).dateFormat(options.formatDate);\n\t\t\t\t\t}\n\n\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t\t\t\t.css('visibility', !options.todayButton ? 'hidden' : 'visible');\n\n\t\t\t\t\tif (options.mask) {\n\t\t\t\t\t\tvar e,\n\t\t\t\t\t\t\tgetCaretPos = function (input) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tif (document.selection && document.selection.createRange) {\n\t\t\t\t\t\t\t\t\t\tvar range = document.selection.createRange();\n\t\t\t\t\t\t\t\t\t\treturn range.getBookmark().charCodeAt(2) - 2;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (input.setSelectionRange) {\n\t\t\t\t\t\t\t\t\t\treturn input.selectionStart;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetCaretPos = function (node, pos) {\n\t\t\t\t\t\t\t\tnode = (typeof node === \"string\" || node instanceof String) ? document.getElementById(node) : node;\n\t\t\t\t\t\t\t\tif (!node) {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (node.createTextRange) {\n\t\t\t\t\t\t\t\t\tvar textRange = node.createTextRange();\n\t\t\t\t\t\t\t\t\ttextRange.collapse(true);\n\t\t\t\t\t\t\t\t\ttextRange.moveEnd('character', pos);\n\t\t\t\t\t\t\t\t\ttextRange.moveStart('character', pos);\n\t\t\t\t\t\t\t\t\ttextRange.select();\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (node.setSelectionRange) {\n\t\t\t\t\t\t\t\t\tnode.setSelectionRange(pos, pos);\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisValidValue = function (mask, value) {\n\t\t\t\t\t\t\t\tvar reg = mask\n\t\t\t\t\t\t\t\t\t.replace(/([\\[\\]\\/\\{\\}\\(\\)\\-\\.\\+]{1})/g, '\\\\$1')\n\t\t\t\t\t\t\t\t\t.replace(/_/g, '{digit+}')\n\t\t\t\t\t\t\t\t\t.replace(/([0-9]{1})/g, '{digit$1}')\n\t\t\t\t\t\t\t\t\t.replace(/\\{digit([0-9]{1})\\}/g, '[0-$1_]{1}')\n\t\t\t\t\t\t\t\t\t.replace(/\\{digit[\\+]\\}/g, '[0-9_]{1}');\n\t\t\t\t\t\t\t\treturn (new RegExp(reg)).test(value);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tinput.off('keydown.xdsoft');\n\n\t\t\t\t\t\tif (options.mask === true) {\n\t\t\t\t\t\t\toptions.mask = options.format\n\t\t\t\t\t\t\t\t.replace(/Y/g, '9999')\n\t\t\t\t\t\t\t\t.replace(/F/g, '9999')\n\t\t\t\t\t\t\t\t.replace(/m/g, '19')\n\t\t\t\t\t\t\t\t.replace(/d/g, '39')\n\t\t\t\t\t\t\t\t.replace(/H/g, '29')\n\t\t\t\t\t\t\t\t.replace(/i/g, '59')\n\t\t\t\t\t\t\t\t.replace(/s/g, '59');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($.type(options.mask) === 'string') {\n\t\t\t\t\t\t\tif (!isValidValue(options.mask, input.val())) {\n\t\t\t\t\t\t\t\tinput.val(options.mask.replace(/[0-9]/g, '_'));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tinput.on('keydown.xdsoft', function (event) {\n\t\t\t\t\t\t\t\tvar val = this.value,\n\t\t\t\t\t\t\t\t\tkey = event.which,\n\t\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\t\tdigit;\n\n\t\t\t\t\t\t\t\tif (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {\n\t\t\t\t\t\t\t\t\tpos = getCaretPos(this);\n\t\t\t\t\t\t\t\t\tdigit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';\n\n\t\t\t\t\t\t\t\t\tif ((key === BACKSPACE || key === DEL) && pos) {\n\t\t\t\t\t\t\t\t\t\tpos -= 1;\n\t\t\t\t\t\t\t\t\t\tdigit = '_';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? -1 : 1;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tval = val.substr(0, pos) + digit + val.substr(pos + 1);\n\t\t\t\t\t\t\t\t\tif ($.trim(val) === '') {\n\t\t\t\t\t\t\t\t\t\tval = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (pos === options.mask.length) {\n\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? 0 : 1;\n\t\t\t\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? -1 : 1;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (isValidValue(options.mask, val)) {\n\t\t\t\t\t\t\t\t\t\tthis.value = val;\n\t\t\t\t\t\t\t\t\t\tsetCaretPos(this, pos);\n\t\t\t\t\t\t\t\t\t} else if ($.trim(val) === '') {\n\t\t\t\t\t\t\t\t\t\tthis.value = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tinput.trigger('error_input.xdsoft');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (options.validateOnBlur) {\n\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t.off('blur.xdsoft')\n\t\t\t\t\t\t\t.on('blur.xdsoft', function () {\n\t\t\t\t\t\t\t\tif (options.allowBlank && !$.trim($(this).val()).length) {\n\t\t\t\t\t\t\t\t\t$(this).val(null);\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').empty();\n\t\t\t\t\t\t\t\t} else if (!Date.parseDate($(this).val(), options.format)) {\n\t\t\t\t\t\t\t\t\t$(this).val((_xdsoft_datetime.now()).dateFormat(options.format));\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\toptions.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;\n\n\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t.trigger('xchange.xdsoft')\n\t\t\t\t\t\t.trigger('afterOpen.xdsoft');\n\t\t\t\t};\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.data('options', options)\n\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tyearselect.hide();\n\t\t\t\t\t\tmonthselect.hide();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\t//scroll_element = timepicker.find('.xdsoft_time_box');\n\t\t\t\ttimeboxparent.append(timebox);\n\t\t\t\ttimeboxparent.xdsoftScroller();\n\n\t\t\t\tdatetimepicker.on('afterOpen.xdsoft', function () {\n\t\t\t\t\ttimeboxparent.xdsoftScroller();\n\t\t\t\t});\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.append(datepicker)\n\t\t\t\t\t.append(timepicker);\n\n\t\t\t\tif (options.withoutCopyright !== true) {\n\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t.append(xdsoft_copyright);\n\t\t\t\t}\n\n\t\t\t\tdatepicker\n\t\t\t\t\t.append(mounth_picker)\n\t\t\t\t\t.append(calendar);\n\n\t\t\t\t$(options.parentID)\n\t\t\t\t\t.append(datetimepicker);\n\n\t\t\t\tXDSoft_datetime = function () {\n\t\t\t\t\tvar _this = this;\n\t\t\t\t\t_this.now = function (norecursion) {\n\t\t\t\t\t\tvar d = new Date(),\n\t\t\t\t\t\t\tdate,\n\t\t\t\t\t\t\ttime;\n\n\t\t\t\t\t\tif (!norecursion && options.defaultDate) {\n\t\t\t\t\t\t\tdate = _this.strToDate(options.defaultDate);\n\t\t\t\t\t\t\td.setFullYear(date.getFullYear());\n\t\t\t\t\t\t\td.setMonth(date.getMonth());\n\t\t\t\t\t\t\td.setDate(date.getDate());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.yearOffset) {\n\t\t\t\t\t\t\td.setFullYear(d.getFullYear() + options.yearOffset);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!norecursion && options.defaultTime) {\n\t\t\t\t\t\t\ttime = _this.strtotime(options.defaultTime);\n\t\t\t\t\t\t\td.setHours(time.getHours());\n\t\t\t\t\t\t\td.setMinutes(time.getMinutes());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.isValidDate = function (d) {\n\t\t\t\t\t\tif (Object.prototype.toString.call(d) !== \"[object Date]\") {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn !isNaN(d.getTime());\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.setCurrentTime = function (dTime) {\n\t\t\t\t\t\t_this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.empty = function () {\n\t\t\t\t\t\t_this.currentTime = null;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.getCurrentTime = function (dTime) {\n\t\t\t\t\t\treturn _this.currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.nextMonth = function () {\n\t\t\t\t\t\tvar month = _this.currentTime.getMonth() + 1,\n\t\t\t\t\t\t\tyear;\n\t\t\t\t\t\tif (month === 12) {\n\t\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);\n\t\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tyear = _this.currentTime.getFullYear();\n\n\t\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\t_this.currentTime.setMonth(month);\n\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\treturn month;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.prevMonth = function () {\n\t\t\t\t\t\tvar month = _this.currentTime.getMonth() - 1;\n\t\t\t\t\t\tif (month === -1) {\n\t\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);\n\t\t\t\t\t\t\tmonth = 11;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\t_this.currentTime.setMonth(month);\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\treturn month;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.getWeekOfYear = function (datetime) {\n\t\t\t\t\t\tvar onejan = new Date(datetime.getFullYear(), 0, 1);\n\t\t\t\t\t\treturn Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strToDateTime = function (sDateTime) {\n\t\t\t\t\t\tvar tmpDate = [], timeOffset, currentTime;\n\n\t\t\t\t\t\tif (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {\n\t\t\t\t\t\t\treturn sDateTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttmpDate = /^(\\+|\\-)(.*)$/.exec(sDateTime);\n\t\t\t\t\t\tif (tmpDate) {\n\t\t\t\t\t\t\ttmpDate[2] = Date.parseDate(tmpDate[2], options.formatDate);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tmpDate  && tmpDate[2]) {\n\t\t\t\t\t\t\ttimeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;\n\t\t\t\t\t\t\tcurrentTime = new Date((_xdsoft_datetime.now()).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentTime = sDateTime ? Date.parseDate(sDateTime, options.format) : _this.now();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strToDate = function (sDate) {\n\t\t\t\t\t\tif (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {\n\t\t\t\t\t\t\treturn sDate;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar currentTime = sDate ? Date.parseDate(sDate, options.formatDate) : _this.now(true);\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strtotime = function (sTime) {\n\t\t\t\t\t\tif (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {\n\t\t\t\t\t\t\treturn sTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar currentTime = sTime ? Date.parseDate(sTime, options.formatTime) : _this.now(true);\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.str = function () {\n\t\t\t\t\t\treturn _this.currentTime.dateFormat(options.format);\n\t\t\t\t\t};\n\t\t\t\t\t_this.currentTime = this.now();\n\t\t\t\t};\n\n\t\t\t\t_xdsoft_datetime = new XDSoft_datetime();\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(0);\n\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t\t}).on('dblclick.xdsoft', function () {\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t});\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\t\tstop = false;\n\n\t\t\t\t\t\t(function arguments_callee1(v) {\n\t\t\t\t\t\t\tvar month =  _xdsoft_datetime.currentTime.getMonth();\n\t\t\t\t\t\t\tif ($this.hasClass(options.next)) {\n\t\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t\t\t} else if ($this.hasClass(options.prev)) {\n\t\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (options.monthChangeSpinner) {\n\t\t\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee1, v || 100);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}(500));\n\n\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft', function arguments_callee2() {\n\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t\t$([document.body, window]).off('mouseup.xdsoft', arguments_callee2);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\ttimepicker\n\t\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\t\tstop = false,\n\t\t\t\t\t\t\tperiod = 110;\n\t\t\t\t\t\t(function arguments_callee4(v) {\n\t\t\t\t\t\t\tvar pheight = timeboxparent[0].clientHeight,\n\t\t\t\t\t\t\t\theight = timebox[0].offsetHeight,\n\t\t\t\t\t\t\t\ttop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t\t\t\tif ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t\t} else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]);\n\t\t\t\t\t\t\tperiod = (period > 10) ? 10 : period - 10;\n\t\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee4, v || period);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}(500));\n\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft', function arguments_callee5() {\n\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t\t$([document.body, window])\n\t\t\t\t\t\t\t\t.off('mouseup.xdsoft', arguments_callee5);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\txchangeTimer = 0;\n\t\t\t\t// base handler - generating a calendar and timepicker\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('xchange.xdsoft', function (event) {\n\t\t\t\t\t\tclearTimeout(xchangeTimer);\n\t\t\t\t\t\txchangeTimer = setTimeout(function () {\n\t\t\t\t\t\t\tvar table =\t'',\n\t\t\t\t\t\t\t\tstart = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),\n\t\t\t\t\t\t\t\ti = 0,\n\t\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\t\ttoday = _xdsoft_datetime.now(),\n\t\t\t\t\t\t\t\tmaxDate = false,\n\t\t\t\t\t\t\t\tminDate = false,\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tm,\n\t\t\t\t\t\t\t\tw,\n\t\t\t\t\t\t\t\tclasses = [],\n\t\t\t\t\t\t\t\tcustomDateSettings,\n\t\t\t\t\t\t\t\tnewRow = true,\n\t\t\t\t\t\t\t\ttime = '',\n\t\t\t\t\t\t\t\th = '',\n\t\t\t\t\t\t\t\tline_time;\n\n\t\t\t\t\t\t\twhile (start.getDay() !== options.dayOfWeekStart) {\n\t\t\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttable += '<table><thead><tr>';\n\n\t\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\t\ttable += '<th></th>';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (j = 0; j < 7; j += 1) {\n\t\t\t\t\t\t\t\ttable += '<th>' + options.i18n[options.lang].dayOfWeek[(j + options.dayOfWeekStart) % 7] + '</th>';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttable += '</tr></thead>';\n\t\t\t\t\t\t\ttable += '<tbody>';\n\n\t\t\t\t\t\t\tif (options.maxDate !== false) {\n\t\t\t\t\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\n\t\t\t\t\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (options.minDate !== false) {\n\t\t\t\t\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\n\t\t\t\t\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twhile (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {\n\t\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\t\ti += 1;\n\n\t\t\t\t\t\t\t\td = start.getDate();\n\t\t\t\t\t\t\t\ty = start.getFullYear();\n\t\t\t\t\t\t\t\tm = start.getMonth();\n\t\t\t\t\t\t\t\tw = _xdsoft_datetime.getWeekOfYear(start);\n\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_date');\n\n\t\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {\n\t\t\t\t\t\t\t\t\tcustomDateSettings = options.beforeShowDay.call(datetimepicker, start);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcustomDateSettings = null;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t} else if (options.disabledDates.indexOf(start.dateFormat(options.formatDate)) !== -1) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (customDateSettings && customDateSettings[1] !== \"\") {\n\t\t\t\t\t\t\t\t\tclasses.push(customDateSettings[1]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (_xdsoft_datetime.currentTime.getMonth() !== m) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_other_month');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ((options.defaultSelect || datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (today.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(start.dateFormat(options.formatDate)) === -1) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_weekend');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {\n\t\t\t\t\t\t\t\t\tclasses.push(options.beforeShowDay(start));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (newRow) {\n\t\t\t\t\t\t\t\t\ttable += '<tr>';\n\t\t\t\t\t\t\t\t\tnewRow = false;\n\t\t\t\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\t\t\t\ttable += '<th>' + w + '</th>';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttable += '<td data-date=\"' + d + '\" data-month=\"' + m + '\" data-year=\"' + y + '\"' + ' class=\"xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '\">' +\n\t\t\t\t\t\t\t\t\t\t\t'<div>' + d + '</div>' +\n\t\t\t\t\t\t\t\t\t\t'</td>';\n\n\t\t\t\t\t\t\t\tif (start.getDay() === options.dayOfWeekStartPrev) {\n\t\t\t\t\t\t\t\t\ttable += '</tr>';\n\t\t\t\t\t\t\t\t\tnewRow = true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart.setDate(d + 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable += '</tbody></table>';\n\n\t\t\t\t\t\t\tcalendar.html(table);\n\n\t\t\t\t\t\t\tmounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[options.lang].months[_xdsoft_datetime.currentTime.getMonth()]);\n\t\t\t\t\t\t\tmounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());\n\n\t\t\t\t\t\t\t// generate timebox\n\t\t\t\t\t\t\ttime = '';\n\t\t\t\t\t\t\th = '';\n\t\t\t\t\t\t\tm = '';\n\t\t\t\t\t\t\tline_time = function line_time(h, m) {\n\t\t\t\t\t\t\t\tvar now = _xdsoft_datetime.now();\n\t\t\t\t\t\t\t\tnow.setHours(h);\n\t\t\t\t\t\t\t\th = parseInt(now.getHours(), 10);\n\t\t\t\t\t\t\t\tnow.setMinutes(m);\n\t\t\t\t\t\t\t\tm = parseInt(now.getMinutes(), 10);\n\t\t\t\t\t\t\t\tvar optionDateTime = new Date(_xdsoft_datetime.currentTime)\n\t\t\t\t\t\t\t\toptionDateTime.setHours(h);\n\t\t\t\t\t\t\t\toptionDateTime.setMinutes(m);\n\t\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\t\tif((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && parseInt(_xdsoft_datetime.currentTime.getHours(), 10) === parseInt(h, 10) && (options.step > 59 || Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step === parseInt(m, 10))) {\n\t\t\t\t\t\t\t\t\tif (options.defaultSelect || datetimepicker.data('changed')) {\n\t\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t\t\t} else if (options.initTime) {\n\t\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_init_time');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime += '<div class=\"xdsoft_time ' + classes.join(' ') + '\" data-hour=\"' + h + '\" data-minute=\"' + m + '\">' + now.dateFormat(options.formatTime) + '</div>';\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {\n\t\t\t\t\t\t\t\tfor (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < 60; j += options.step) {\n\t\t\t\t\t\t\t\t\t\th = (i < 10 ? '0' : '') + i;\n\t\t\t\t\t\t\t\t\t\tm = (j < 10 ? '0' : '') + j;\n\t\t\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfor (i = 0; i < options.allowTimes.length; i += 1) {\n\t\t\t\t\t\t\t\t\th = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();\n\t\t\t\t\t\t\t\t\tm = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();\n\t\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttimebox.html(time);\n\n\t\t\t\t\t\t\topt = '';\n\t\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\t\t\tfor (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) {\n\t\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + i + '</div>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyearselect.children().eq(0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.html(opt);\n\n\t\t\t\t\t\t\tfor (i = 0, opt = ''; i <= 11; i += 1) {\n\t\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + options.i18n[options.lang].months[i] + '</div>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmonthselect.children().eq(0).html(opt);\n\t\t\t\t\t\t\t$(datetimepicker)\n\t\t\t\t\t\t\t\t.trigger('generate.xdsoft');\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t})\n\t\t\t\t\t.on('afterOpen.xdsoft', function () {\n\t\t\t\t\t\tif (options.timepicker) {\n\t\t\t\t\t\t\tvar classType, pheight, height, top;\n\t\t\t\t\t\t\tif (timebox.find('.xdsoft_current').length) {\n\t\t\t\t\t\t\t\tclassType = '.xdsoft_current';\n\t\t\t\t\t\t\t} else if (timebox.find('.xdsoft_init_time').length) {\n\t\t\t\t\t\t\t\tclassType = '.xdsoft_init_time';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (classType) {\n\t\t\t\t\t\t\t\tpheight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\t\t\ttop = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;\n\t\t\t\t\t\t\t\tif ((height - pheight) < top) {\n\t\t\t\t\t\t\t\t\ttop = height - pheight;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\ttimerclick = 0;\n\t\t\t\tcalendar\n\t\t\t\t\t.on('click.xdsoft', 'td', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();  // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap\n\t\t\t\t\t\ttimerclick += 1;\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentTime.setDate(1);\n\t\t\t\t\t\tcurrentTime.setFullYear($this.data('year'));\n\t\t\t\t\t\tcurrentTime.setMonth($this.data('month'));\n\t\t\t\t\t\tcurrentTime.setDate($this.data('date'));\n\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\tif ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === 0 && !options.timepicker))) && !options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onSelectDate &&\t$.isFunction(options.onSelectDate)) {\n\t\t\t\t\t\t\toptions.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\ttimerclick = 0;\n\t\t\t\t\t\t}, 200);\n\t\t\t\t\t});\n\n\t\t\t\ttimebox\n\t\t\t\t\t.on('click.xdsoft', 'div', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentTime.setHours($this.data('hour'));\n\t\t\t\t\t\tcurrentTime.setMinutes($this.data('minute'));\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\t\tdatetimepicker.data('input').val(_xdsoft_datetime.str());\n\t\t\t\t\t\tif (!options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onSelectTime && $.isFunction(options.onSelectTime)) {\n\t\t\t\t\t\t\toptions.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t});\n\n\n\t\t\t\tdatepicker\n\t\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\t\tif (!options.scrollMonth) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.deltaY < 0) {\n\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\tinput\n\t\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\t\tif (!options.scrollInput) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!options.datepicker && options.timepicker) {\n\t\t\t\t\t\t\tcurrent_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;\n\t\t\t\t\t\t\tif (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {\n\t\t\t\t\t\t\t\tcurrent_time_index += event.deltaY;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (timebox.children().eq(current_time_index).length) {\n\t\t\t\t\t\t\t\ttimebox.children().eq(current_time_index).trigger('mousedown');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.datepicker && !options.timepicker) {\n\t\t\t\t\t\t\tdatepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);\n\t\t\t\t\t\t\tif (input.val) {\n\t\t\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('changedatetime.xdsoft', function (event) {\n\t\t\t\t\t\tif (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {\n\t\t\t\t\t\t\tvar $input = datetimepicker.data('input');\n\t\t\t\t\t\t\toptions.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);\n\t\t\t\t\t\t\tdelete options.value;\n\t\t\t\t\t\t\t$input.trigger('change');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('generate.xdsoft', function () {\n\t\t\t\t\t\tif (options.onGenerate && $.isFunction(options.onGenerate)) {\n\t\t\t\t\t\t\toptions.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (triggerAfterOpen) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t\t\t\ttriggerAfterOpen = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('click.xdsoft', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t\t});\n\n\t\t\t\tcurrent_time_index = 0;\n\n\t\t\t\tsetPos = function () {\n\t\t\t\t\tvar offset = datetimepicker.data('input').offset(), top = offset.top + datetimepicker.data('input')[0].offsetHeight - 1, left = offset.left, position = \"position\";\n\t\t\t\t\tif (options.fixed) {\n\t\t\t\t\t\ttop -= $(window).scrollTop();\n\t\t\t\t\t\tleft -= $(window).scrollLeft();\n\t\t\t\t\t\tposition = \"fixed\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (top + datetimepicker[0].offsetHeight > $(window).height() + $(window).scrollTop()) {\n\t\t\t\t\t\t\ttop = offset.top - datetimepicker[0].offsetHeight + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (left + datetimepicker[0].offsetWidth > $(window).width()) {\n\t\t\t\t\t\t\tleft = $(window).width() - datetimepicker[0].offsetWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdatetimepicker.css({\n\t\t\t\t\t\tleft: left,\n\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\tposition: position\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('open.xdsoft', function (event) {\n\t\t\t\t\t\tvar onShow = true;\n\t\t\t\t\t\tif (options.onShow && $.isFunction(options.onShow)) {\n\t\t\t\t\t\t\tonShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (onShow !== false) {\n\t\t\t\t\t\t\tdatetimepicker.show();\n\t\t\t\t\t\t\tsetPos();\n\t\t\t\t\t\t\t$(window)\n\t\t\t\t\t\t\t\t.off('resize.xdsoft', setPos)\n\t\t\t\t\t\t\t\t.on('resize.xdsoft', setPos);\n\n\t\t\t\t\t\t\tif (options.closeOnWithoutClick) {\n\t\t\t\t\t\t\t\t$([document.body, window]).on('mousedown.xdsoft', function arguments_callee6() {\n\t\t\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\t\t\t$([document.body, window]).off('mousedown.xdsoft', arguments_callee6);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('close.xdsoft', function (event) {\n\t\t\t\t\t\tvar onClose = true;\n\t\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t\t\t\t.hide();\n\t\t\t\t\t\tif (options.onClose && $.isFunction(options.onClose)) {\n\t\t\t\t\t\t\tonClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (onClose !== false && !options.opened && !options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t})\n\t\t\t\t\t.on('toggle.xdsoft', function (event) {\n\t\t\t\t\t\tif (datetimepicker.is(':visible')) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.data('input', input);\n\n\t\t\t\ttimer = 0;\n\t\t\t\ttimer1 = 0;\n\n\t\t\t\tdatetimepicker.data('xdsoft_datetime', _xdsoft_datetime);\n\t\t\t\tdatetimepicker.setOptions(options);\n\n\t\t\t\tfunction getCurrentValue() {\n\n\t\t\t\t\tvar ct = false, time;\n\n\t\t\t\t\tif (options.startDate) {\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.startDate);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tct = options.value || ((input && input.val && input.val()) ? input.val() : '');\n\t\t\t\t\t\tif (ct) {\n\t\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(ct);\n\t\t\t\t\t\t} else if (options.defaultDate) {\n\t\t\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.defaultDate);\n\t\t\t\t\t\t\tif (options.defaultTime) {\n\t\t\t\t\t\t\t\ttime = _xdsoft_datetime.strtotime(options.defaultTime);\n\t\t\t\t\t\t\t\tct.setHours(time.getHours());\n\t\t\t\t\t\t\t\tct.setMinutes(time.getMinutes());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ct && _xdsoft_datetime.isValidDate(ct)) {\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tct = '';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ct || 0;\n\t\t\t\t}\n\n\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\t\tinput\n\t\t\t\t\t.data('xdsoft_datetimepicker', datetimepicker)\n\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\ttimer = setTimeout(function () {\n\t\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible')) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t})\n\t\t\t\t\t.on('keydown.xdsoft', function (event) {\n\t\t\t\t\t\tvar val = this.value, elementSelector,\n\t\t\t\t\t\t\tkey = event.which;\n\t\t\t\t\t\tif ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {\n\t\t\t\t\t\t\telementSelector = $(\"input:visible,textarea:visible\");\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\telementSelector.eq(elementSelector.index(this) + 1).focus();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ([TAB].indexOf(key) !== -1) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t};\n\t\t\tdestroyDateTimePicker = function (input) {\n\t\t\t\tvar datetimepicker = input.data('xdsoft_datetimepicker');\n\t\t\t\tif (datetimepicker) {\n\t\t\t\t\tdatetimepicker.data('xdsoft_datetime', null);\n\t\t\t\t\tdatetimepicker.remove();\n\t\t\t\t\tinput\n\t\t\t\t\t\t.data('xdsoft_datetimepicker', null)\n\t\t\t\t\t\t.off('.xdsoft');\n\t\t\t\t\t$(window).off('resize.xdsoft');\n\t\t\t\t\t$([window, document.body]).off('mousedown.xdsoft');\n\t\t\t\t\tif (input.unmousewheel) {\n\t\t\t\t\t\tinput.unmousewheel();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t$(document)\n\t\t\t\t.off('keydown.xdsoftctrl keyup.xdsoftctrl')\n\t\t\t\t.on('keydown.xdsoftctrl', function (e) {\n\t\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\t\tctrlDown = true;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keyup.xdsoftctrl', function (e) {\n\t\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\t\tctrlDown = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\treturn this.each(function () {\n\t\t\t\tvar datetimepicker = $(this).data('xdsoft_datetimepicker');\n\t\t\t\tif (datetimepicker) {\n\t\t\t\t\tif ($.type(opt) === 'string') {\n\t\t\t\t\t\tswitch (opt) {\n\t\t\t\t\t\tcase 'show':\n\t\t\t\t\t\t\t$(this).select().focus();\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'hide':\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'toggle':\n\t\t\t\t\t\t\tdatetimepicker.trigger('toggle.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'destroy':\n\t\t\t\t\t\t\tdestroyDateTimePicker($(this));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'reset':\n\t\t\t\t\t\t\tthis.value = this.defaultValue;\n\t\t\t\t\t\t\tif (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format))) {\n\t\t\t\t\t\t\t\tdatetimepicker.data('changed', false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t\t.setOptions(opt);\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif ($.type(opt) !== 'string') {\n\t\t\t\t\tif (!options.lazyInit || options.open || options.inline) {\n\t\t\t\t\t\tcreateDateTimePicker($(this));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlazyInit($(this));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t$.fn.extend ( \"datetimepicker.defaults\" , default_options);\n\t}(jQuery));\n\t(function () {\n\n\t/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)\n\t * Licensed under the MIT License (LICENSE.txt).\n\t *\n\t * Version: 3.1.12\n\t *\n\t * Requires: jQuery 1.2.2+\n\t */\n\t!function(a){true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(5)], __WEBPACK_AMD_DEFINE_FACTORY__ = (a), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):\"object\"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type=\"mousewheel\",\"detail\"in g&&(m=-1*g.detail),\"wheelDelta\"in g&&(m=g.wheelDelta),\"wheelDeltaY\"in g&&(m=g.wheelDeltaY),\"wheelDeltaX\"in g&&(l=-1*g.wheelDeltaX),\"axis\"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,\"deltaY\"in g&&(m=-1*g.deltaY,j=m),\"deltaX\"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,\"mousewheel-line-height\");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,\"mousewheel-page-height\");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?\"floor\":\"ceil\"](j/f),l=Math[l>=1?\"floor\":\"ceil\"](l/f),m=Math[m>=1?\"floor\":\"ceil\"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&\"mousewheel\"===a.type&&b%120===0}var e,f,g=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],h=\"onwheel\"in document||document.documentMode>=9?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:\"3.1.12\",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,\"mousewheel-line-height\",k.getLineHeight(this)),a.data(this,\"mousewheel-page-height\",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,\"mousewheel-line-height\"),a.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(b){var c=a(b),d=c[\"offsetParent\"in a.fn?\"offsetParent\":\"parent\"]();return d.length||(d=a(\"body\")),parseInt(d.css(\"fontSize\"),10)||parseInt(c.css(\"fontSize\"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind(\"mousewheel\",a):this.trigger(\"mousewheel\")},unmousewheel:function(a){return this.unbind(\"mousewheel\",a)}})});\n\n\t// Parse and Format Library\n\t//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/\n\t/*\n\t * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>\n\t *\n\t * This program is free software; you can redistribute it and/or modify it\n\t * under the terms of the GNU Lesser General Public License as published by the\n\t * Free Software Foundation, version 2.1.\n\t *\n\t * This program is distributed in the hope that it will be useful, but WITHOUT\n\t * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\t * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more\n\t * details.\n\t */\n\tDate.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(b){if(b==\"unixtime\"){return parseInt(this.getTime()/1000);}if(Date.formatFunctions[b]==null){Date.createNewFormat(b);}var a=Date.formatFunctions[b];return this[a]();};Date.createNewFormat=function(format){var funcName=\"format\"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var code=\"Date.prototype.\"+funcName+\" = function() {return \";var special=false;var ch=\"\";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch==\"\\\\\"){special=true;}else{if(special){special=false;code+=\"'\"+String.escape(ch)+\"' + \";}else{code+=Date.getFormatCode(ch);}}}eval(code.substring(0,code.length-3)+\";}\");};Date.getFormatCode=function(a){switch(a){case\"d\":return\"String.leftPad(this.getDate(), 2, '0') + \";case\"D\":return\"Date.dayNames[this.getDay()].substring(0, 3) + \";case\"j\":return\"this.getDate() + \";case\"l\":return\"Date.dayNames[this.getDay()] + \";case\"S\":return\"this.getSuffix() + \";case\"w\":return\"this.getDay() + \";case\"z\":return\"this.getDayOfYear() + \";case\"W\":return\"this.getWeekOfYear() + \";case\"F\":return\"Date.monthNames[this.getMonth()] + \";case\"m\":return\"String.leftPad(this.getMonth() + 1, 2, '0') + \";case\"M\":return\"Date.monthNames[this.getMonth()].substring(0, 3) + \";case\"n\":return\"(this.getMonth() + 1) + \";case\"t\":return\"this.getDaysInMonth() + \";case\"L\":return\"(this.isLeapYear() ? 1 : 0) + \";case\"Y\":return\"this.getFullYear() + \";case\"y\":return\"('' + this.getFullYear()).substring(2, 4) + \";case\"a\":return\"(this.getHours() < 12 ? 'am' : 'pm') + \";case\"A\":return\"(this.getHours() < 12 ? 'AM' : 'PM') + \";case\"g\":return\"((this.getHours() %12) ? this.getHours() % 12 : 12) + \";case\"G\":return\"this.getHours() + \";case\"h\":return\"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + \";case\"H\":return\"String.leftPad(this.getHours(), 2, '0') + \";case\"i\":return\"String.leftPad(this.getMinutes(), 2, '0') + \";case\"s\":return\"String.leftPad(this.getSeconds(), 2, '0') + \";case\"O\":return\"this.getGMTOffset() + \";case\"T\":return\"this.getTimezone() + \";case\"Z\":return\"(this.getTimezoneOffset() * -60) + \";default:return\"'\"+String.escape(a)+\"' + \";}};Date.parseDate=function(a,c){if(c==\"unixtime\"){return new Date(!isNaN(parseInt(a))?parseInt(a)*1000:0);}if(Date.parseFunctions[c]==null){Date.createParser(c);}var b=Date.parseFunctions[c];return Date[b](a);};Date.createParser=function(format){var funcName=\"parse\"+Date.parseFunctions.count++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code=\"Date.\"+funcName+\" = function(input) {\\nvar y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, z = -1;\\nvar d = new Date();\\ny = d.getFullYear();\\nm = d.getMonth();\\nd = d.getDate();\\nvar results = input.match(Date.parseRegexes[\"+regexNum+\"]);\\nif (results && results.length > 0) {\";var regex=\"\";var special=false;var ch=\"\";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch==\"\\\\\"){special=true;}else{if(special){special=false;regex+=String.escape(ch);}else{obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}}code+=\"if (y > 0 && z > 0){\\nvar doyDate = new Date(y,0);\\ndoyDate.setDate(z);\\nm = doyDate.getMonth();\\nd = doyDate.getDate();\\n}\";code+=\"if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\\n{return new Date(y, m, d, h, i, s);}\\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\\n{return new Date(y, m, d, h, i);}\\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0)\\n{return new Date(y, m, d, h);}\\nelse if (y > 0 && m >= 0 && d > 0)\\n{return new Date(y, m, d);}\\nelse if (y > 0 && m >= 0)\\n{return new Date(y, m);}\\nelse if (y > 0)\\n{return new Date(y);}\\n}return null;}\";Date.parseRegexes[regexNum]=new RegExp(\"^\"+regex+\"$\");eval(code);};Date.formatCodeToRegex=function(b,a){switch(b){case\"D\":return{g:0,c:null,s:\"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\"};case\"j\":case\"d\":return{g:1,c:\"d = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,2})\"};case\"l\":return{g:0,c:null,s:\"(?:\"+Date.dayNames.join(\"|\")+\")\"};case\"S\":return{g:0,c:null,s:\"(?:st|nd|rd|th)\"};case\"w\":return{g:0,c:null,s:\"\\\\d\"};case\"z\":return{g:1,c:\"z = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,3})\"};case\"W\":return{g:0,c:null,s:\"(?:\\\\d{2})\"};case\"F\":return{g:1,c:\"m = parseInt(Date.monthNumbers[results[\"+a+\"].substring(0, 3)], 10);\\n\",s:\"(\"+Date.monthNames.join(\"|\")+\")\"};case\"M\":return{g:1,c:\"m = parseInt(Date.monthNumbers[results[\"+a+\"]], 10);\\n\",s:\"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\"};case\"n\":case\"m\":return{g:1,c:\"m = parseInt(results[\"+a+\"], 10) - 1;\\n\",s:\"(\\\\d{1,2})\"};case\"t\":return{g:0,c:null,s:\"\\\\d{1,2}\"};case\"L\":return{g:0,c:null,s:\"(?:1|0)\"};case\"Y\":return{g:1,c:\"y = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{4})\"};case\"y\":return{g:1,c:\"var ty = parseInt(results[\"+a+\"], 10);\\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\\n\",s:\"(\\\\d{1,2})\"};case\"a\":return{g:1,c:\"if (results[\"+a+\"] == 'am') {\\nif (h == 12) { h = 0; }\\n} else { if (h < 12) { h += 12; }}\",s:\"(am|pm)\"};case\"A\":return{g:1,c:\"if (results[\"+a+\"] == 'AM') {\\nif (h == 12) { h = 0; }\\n} else { if (h < 12) { h += 12; }}\",s:\"(AM|PM)\"};case\"g\":case\"G\":case\"h\":case\"H\":return{g:1,c:\"h = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,2})\"};case\"i\":return{g:1,c:\"i = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{2})\"};case\"s\":return{g:1,c:\"s = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{2})\"};case\"O\":return{g:0,c:null,s:\"[+-]\\\\d{4}\"};case\"T\":return{g:0,c:null,s:\"[A-Z]{3}\"};case\"Z\":return{g:0,c:null,s:\"[+-]\\\\d{1,5}\"};default:return{g:0,c:null,s:String.escape(b)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,\"$1\").replace(/^.*?\\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\\)$/,\"$1$2$3\");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?\"-\":\"+\")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,\"0\")+String.leftPad(Math.abs(this.getTimezoneOffset())%60,2,\"0\");};Date.prototype.getDayOfYear=function(){var a=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var b=0;b<this.getMonth();++b){a+=Date.daysInMonth[b];}return a+this.getDate();};Date.prototype.getWeekOfYear=function(){var b=this.getDayOfYear()+(4-this.getDay());var a=new Date(this.getFullYear(),0,1);var c=(7-a.getDay()+4);return String.leftPad(Math.ceil((b-c)/7)+1,2,\"0\");};Date.prototype.isLeapYear=function(){var a=this.getFullYear();return((a&3)==0&&(a%100||(a%400==0&&a)));};Date.prototype.getFirstDayOfMonth=function(){var a=(this.getDay()-(this.getDate()-1))%7;return(a<0)?(a+7):a;};Date.prototype.getLastDayOfMonth=function(){var a=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(a<0)?(a+7):a;};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return\"st\";case 2:case 22:return\"nd\";case 3:case 23:return\"rd\";default:return\"th\";}};String.escape=function(a){return a.replace(/('|\\\\)/g,\"\\\\$1\");};String.leftPad=function(d,b,c){var a=new String(d);if(c==null){c=\" \";}while(a.length<b){a=c+a;}return a;};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];Date.dayNames=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.patterns={ISO8601LongPattern:\"Y-m-d H:i:s\",ISO8601ShortPattern:\"Y-m-d\",ShortDatePattern:\"n/j/Y\",LongDatePattern:\"l, F d, Y\",FullDateTimePattern:\"l, F d, Y g:i:s A\",MonthDayPattern:\"F d\",ShortTimePattern:\"g:i A\",LongTimePattern:\"g:i:s A\",SortableDateTimePattern:\"Y-m-d\\\\TH:i:s\",UniversalSortableDateTimePattern:\"Y-m-d H:i:sO\",YearMonthPattern:\"F, Y\"};\n\t}());\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 140:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar modal = __webpack_require__(155);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(modal({it :param}))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on = param.on || {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 141:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_jQuery) {/*\n\t Highcharts JS v4.0.1 (2014-04-24)\n\n\t (c) 2009-2014 Torstein Honsi\n\n\t License: www.highcharts.com/license\n\t*/\n\t(function(){function q(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function w(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!==\"object\"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c===\"object\"&&Object.prototype.toString.call(c)!==\"[object Array]\"&&d!==\"renderTo\"&&typeof c.nodeType!==\"number\"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a<c;a++)d=e(d,b[a]);return d}function z(a,b){return parseInt(a,b||\n\t10)}function Fa(a){return typeof a===\"string\"}function ca(a){return typeof a===\"object\"}function La(a){return Object.prototype.toString.call(a)===\"[object Array]\"}function ha(a){return typeof a===\"number\"}function za(a){return U.log(a)/U.LN10}function ia(a){return U.pow(10,a)}function ja(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function r(a){return a!==t&&a!==null}function H(a,b,c){var d,e;if(Fa(b))r(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(r(b)&&\n\tca(b))for(d in b)a.setAttribute(d,b[d]);return e}function qa(a){return La(a)?a:[a]}function m(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!==\"undefined\"&&c!==null)return c}function G(a,b){if(Aa&&!aa&&b&&b.opacity!==t)b.filter=\"alpha(opacity=\"+b.opacity*100+\")\";q(a.style,b)}function Y(a,b,c,d,e){a=y.createElement(a);b&&q(a,b);e&&G(a,{padding:0,border:Q,margin:0});c&&G(a,c);d&&d.appendChild(a);return a}function ka(a,b){var c=function(){};c.prototype=new a;q(c.prototype,b);return c}\n\tfunction Ga(a,b,c,d){var e=E.lang,a=+a||0,f=b===-1?(a.toString().split(\".\")[1]||\"\").length:isNaN(b=M(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?\"-\":\"\",c=String(z(a=M(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:\"\")+c.substr(g).replace(/(\\d{3})(?=\\d)/g,\"$1\"+d)+(f?b+M(a-c).toFixed(f).slice(2):\"\")}function Ha(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Ma(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);\n\ta.unshift(d);return c.apply(this,a)}}function Ia(a,b){for(var c=\"{\",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(\":\");g=f.shift().split(\".\");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]];if(f.length)f=f.join(\":\"),g=/\\.([0-9])/,h=E.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e!==null&&(e=Ga(e,i,h.decimalPoint,f.indexOf(\",\")>-1?h.thousandsSep:\"\"))):e=cb(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?\"}\":\"{\"}j.push(a);return j.join(\"\")}function mb(a){return U.pow(10,T(U.log(a)/\n\tU.LN10))}function nb(a,b,c,d){var e,c=m(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Bb(){this.symbol=this.color=0}function ob(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:d});for(e=0;e<c;e++)delete a[e].ss_i}function Na(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function Ba(a){for(var b=\n\ta.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Oa(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Pa(a){db||(db=Y(Ja));a&&db.appendChild(a);db.innerHTML=\"\"}function ra(a,b){var c=\"Highcharts error #\"+a+\": www.highcharts.com/errors/\"+a;if(b)throw c;else I.console&&console.log(c)}function da(a){return parseFloat(a.toPrecision(14))}function Qa(a,b){va=m(a,b.animation)}function Cb(){var a=E.global.useUTC,b=a?\"getUTC\":\"get\",c=a?\"setUTC\":\"set\";Ra=(a&&E.global.timezoneOffset||\n\t0)*6E4;eb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,m(c,1),m(g,0),m(h,0),m(i,0))).getTime()};pb=b+\"Minutes\";qb=b+\"Hours\";rb=b+\"Day\";Xa=b+\"Date\";fb=b+\"Month\";gb=b+\"FullYear\";Db=c+\"Minutes\";Eb=c+\"Hours\";sb=c+\"Date\";Fb=c+\"Month\";Gb=c+\"FullYear\"}function P(){}function Sa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||\"\";this.isNew=!0;!c&&!d&&this.addLabel()}function la(){this.init.apply(this,arguments)}function Ya(){this.init.apply(this,arguments)}function Hb(a,b,c,d,e){var f=a.chart.inverted;\n\tthis.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.alignOptions={align:b.align||(f?c?\"left\":\"right\":\"center\"),verticalAlign:b.verticalAlign||(f?\"middle\":c?\"bottom\":\"top\"),y:m(b.y,f?4:c?14:-6),x:m(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?\"right\":\"left\":\"center\")}var t,y=document,I=window,U=Math,u=U.round,T=U.floor,Ka=U.ceil,v=U.max,C=U.min,M=U.abs,Z=U.cos,ea=U.sin,ma=U.PI,Ca=ma*2/360,wa=navigator.userAgent,Ib=I.opera,Aa=/msie/i.test(wa)&&\n\t!Ib,hb=y.documentMode===8,ib=/AppleWebKit/.test(wa),Ta=/Firefox/.test(wa),Jb=/(Mobile|Android|Windows Phone)/.test(wa),xa=\"http://www.w3.org/2000/svg\",aa=!!y.createElementNS&&!!y.createElementNS(xa,\"svg\").createSVGRect,Nb=Ta&&parseInt(wa.split(\"Firefox/\")[1],10)<4,fa=!aa&&!Aa&&!!y.createElement(\"canvas\").getContext,Za,$a,Kb={},tb=0,db,E,cb,va,ub,A,sa=function(){},V=[],ab=0,Ja=\"div\",Q=\"none\",Ob=/^[0-9]+$/,Pb=\"stroke-width\",eb,Ra,pb,qb,rb,Xa,fb,gb,Db,Eb,sb,Fb,Gb,F={},R=I.Highcharts=I.Highcharts?ra(16,\n\t!0):{};cb=function(a,b,c){if(!r(b)||isNaN(b))return\"Invalid date\";var a=m(a,\"%Y-%m-%d %H:%M:%S\"),d=new Date(b-Ra),e,f=d[qb](),g=d[rb](),h=d[Xa](),i=d[fb](),j=d[gb](),k=E.lang,l=k.weekdays,d=q({a:l[g].substr(0,3),A:l[g],d:Ha(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ha(i+1),y:j.toString().substr(2,2),Y:j,H:Ha(f),I:Ha(f%12||12),l:f%12||12,M:Ha(d[pb]()),p:f<12?\"AM\":\"PM\",P:f<12?\"am\":\"pm\",S:Ha(d.getSeconds()),L:Ha(u(b%1E3),3)},R.dateFormats);for(e in d)for(;a.indexOf(\"%\"+e)!==-1;)a=a.replace(\"%\"+e,typeof d[e]===\n\t\"function\"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Bb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};A=function(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}(\"millisecond\",1,\"second\",1E3,\"minute\",6E4,\"hour\",36E5,\"day\",864E5,\"week\",6048E5,\"month\",26784E5,\"year\",31556952E3);ub={init:function(a,b,c){var b=b||\"\",d=a.shift,e=b.indexOf(\"C\")>-1,f=e?7:3,g,b=b.split(\" \"),c=[].concat(c),\n\th,i,j=function(a){for(g=a.length;g--;)a[g]===\"M\"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===\n\tb.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};(function(a){I.HighchartsAdapter=I.HighchartsAdapter||a&&{init:function(b){var c=a.fx,d=c.step,e,f=a.Tween,g=f&&f.propHooks;e=a.cssHooks.opacity;a.extend(a.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});a.each([\"cur\",\"_default\",\"width\",\"height\",\"opacity\"],function(a,b){var e=d,k;b===\"cur\"?e=c.prototype:b===\"_default\"&&f&&(e=g[b],b=\"set\");(k=e[b])&&(e[b]=function(c){var d,c=\n\ta?c:this;if(c.prop!==\"align\")return d=c.elem,d.attr?d.attr(c.prop,b===\"cur\"?t:c.now):k.apply(this,arguments)})});Ma(e,\"get\",function(a,b,c){return b.attr?b.opacity||0:a.call(this,b,c)});e=function(a){var c=a.elem,d;if(!a.started)d=b.init(c,c.d,c.toD),a.start=d[0],a.end=d[1],a.started=!0;c.attr(\"d\",b.step(a.start,a.end,a.pos,c.toD))};f?g.d={set:e}:d.d=e;this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],\n\ta[c],c,a)===!1)return c};a.fn.highcharts=function(){var a=\"Chart\",b=arguments,c,d;if(this[0]){Fa(b[0])&&(a=b[0],b=Array.prototype.slice.call(b,1));c=b[0];if(c!==t)c.chart=c.chart||{},c.chart.renderTo=this[0],new R[a](c,b[1]),d=this;c===t&&(d=V[H(this[0],\"data-highcharts-chart\")])}return d}},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b,c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);return d},offset:function(b){return a(b).offset()},\n\taddEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=y.removeEventListener?\"removeEventListener\":\"detachEvent\";y[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g=\"detached\"+c,h;!Aa&&d&&(delete d.layerX,delete d.layerY,delete d.returnValue);q(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each([\"preventDefault\",\"stopPropagation\"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b===\"preventDefault\"&&(h=!0)}}});a(b).trigger(f);\n\tb[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===t)c.pageX=a.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(!b.style)b.style={};if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==t&&b.attr&&(c.opacity+=\"px\");e.animate(c,d)},stop:function(b){a(b).stop()}}})(__webpack_provided_window_dot_jQuery);var S=I.HighchartsAdapter,N=S||{};S&&S.init.call(S,ub);var jb=N.adapterRun,Qb=N.getScript,Da=N.inArray,p=N.each,vb=N.grep,Rb=N.offset,Ua=\n\tN.map,K=N.addEvent,W=N.removeEvent,D=N.fireEvent,Sb=N.washMouseEvent,kb=N.animate,bb=N.stop,N={enabled:!0,x:0,y:15,style:{color:\"#606060\",cursor:\"default\",fontSize:\"11px\"}};E={colors:\"#7cb5ec,#434348,#90ed7d,#f7a35c,#8085e9,#f15c80,#e4d354,#8085e8,#8d4653,#91e8e1\".split(\",\"),symbols:[\"circle\",\"diamond\",\"square\",\"triangle\",\"triangle-down\"],lang:{loading:\"Loading...\",months:\"January,February,March,April,May,June,July,August,September,October,November,December\".split(\",\"),shortMonths:\"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec\".split(\",\"),\n\tweekdays:\"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday\".split(\",\"),decimalPoint:\".\",numericSymbols:\"k,M,G,T,P,E\".split(\",\"),resetZoom:\"Reset zoom\",resetZoomTitle:\"Reset zoom level 1:1\",thousandsSep:\",\"},global:{useUTC:!0,canvasToolsURL:\"http://code.highcharts.com/4.0.1/modules/canvas-tools.js\",VMLRadialGradientURL:\"http://code.highcharts.com/4.0.1/gfx/vml-radial-gradient.png\"},chart:{borderColor:\"#4572A7\",borderRadius:0,defaultSeriesType:\"line\",ignoreHiddenSeries:!0,spacing:[10,10,15,\n\t10],backgroundColor:\"#FFFFFF\",plotBorderColor:\"#C0C0C0\",resetZoomButton:{theme:{zIndex:20},position:{align:\"right\",x:-10,y:10}}},title:{text:\"Chart title\",align:\"center\",margin:15,style:{color:\"#333333\",fontSize:\"18px\"}},subtitle:{text:\"\",align:\"center\",style:{color:\"#555555\"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{lineWidth:0,radius:4,lineColor:\"#FFFFFF\",states:{hover:{enabled:!0},select:{fillColor:\"#FFFFFF\",lineColor:\"#000000\",\n\tlineWidth:2}}},point:{events:{}},dataLabels:w(N,{align:\"center\",enabled:!1,formatter:function(){return this.y===null?\"\":Ga(this.y,-1)},verticalAlign:\"bottom\",y:0}),cropThreshold:300,pointRange:0,states:{hover:{marker:{},halo:{size:10,opacity:0.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3}},labels:{style:{position:\"absolute\",color:\"#3E576F\"}},legend:{enabled:!0,align:\"center\",layout:\"horizontal\",labelFormatter:function(){return this.name},borderColor:\"#909090\",borderRadius:0,navigation:{activeColor:\"#274b6d\",\n\tinactiveColor:\"#CCC\"},shadow:!1,itemStyle:{color:\"#333333\",fontSize:\"12px\",fontWeight:\"bold\"},itemHoverStyle:{color:\"#000\"},itemHiddenStyle:{color:\"#CCC\"},itemCheckboxStyle:{position:\"absolute\",width:\"13px\",height:\"13px\"},symbolPadding:5,verticalAlign:\"bottom\",x:0,y:0,title:{style:{fontWeight:\"bold\"}}},loading:{labelStyle:{fontWeight:\"bold\",position:\"relative\",top:\"1em\"},style:{position:\"absolute\",backgroundColor:\"white\",opacity:0.5,textAlign:\"center\"}},tooltip:{enabled:!0,animation:aa,backgroundColor:\"rgba(249, 249, 249, .85)\",\n\tborderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:\"%A, %b %e, %H:%M:%S.%L\",second:\"%A, %b %e, %H:%M:%S\",minute:\"%A, %b %e, %H:%M\",hour:\"%A, %b %e, %H:%M\",day:\"%A, %b %e, %Y\",week:\"Week from %A, %b %e, %Y\",month:\"%B %Y\",year:\"%Y\"},headerFormat:'<span style=\"font-size: 10px\">{point.key}</span><br/>',pointFormat:'<span style=\"color:{series.color}\">●</span> {series.name}: <b>{point.y}</b><br/>',shadow:!0,snap:Jb?25:10,style:{color:\"#333333\",cursor:\"default\",fontSize:\"12px\",padding:\"8px\",\n\twhiteSpace:\"nowrap\"}},credits:{enabled:!0,text:\"Highcharts.com\",href:\"http://www.highcharts.com\",position:{align:\"right\",x:-10,verticalAlign:\"bottom\",y:-5},style:{cursor:\"pointer\",color:\"#909090\",fontSize:\"9px\"}}};var ba=E.plotOptions,S=ba.line;Cb();var Tb=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/,Ub=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,Vb=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/,ya=function(a){var b=[],c,\n\td;(function(a){a&&a.stops?d=Ua(a.stops,function(a){return ya(a[1])}):(c=Tb.exec(a))?b=[z(c[1]),z(c[2]),z(c[3]),parseFloat(c[4],10)]:(c=Ub.exec(a))?b=[z(c[1],16),z(c[2],16),z(c[3],16),1]:(c=Vb.exec(a))&&(b=[z(c[1]),z(c[2]),z(c[3]),1])})(a);return{get:function(c){var f;d?(f=w(a),f.stops=[].concat(f.stops),p(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c===\"rgb\"?\"rgb(\"+b[0]+\",\"+b[1]+\",\"+b[2]+\")\":c===\"a\"?b[3]:\"rgba(\"+b.join(\",\")+\")\":a;return f},brighten:function(a){if(d)p(d,\n\tfunction(b){b.brighten(a)});else if(ha(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=z(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};P.prototype={init:function(a,b){this.element=b===\"span\"?Y(b):y.createElementNS(xa,b);this.renderer=a},opacity:1,animate:function(a,b,c){b=m(b,va,!0);bb(this);if(b){b=w(b,{});if(c)b.complete=c;kb(this,a,b)}else this.attr(a),c&&c()},colorGradient:function(a,b,c){var d=this.renderer,e,f,g,h,i,j,k,l,o,n,s=[];a.linearGradient?\n\tf=\"linearGradient\":a.radialGradient&&(f=\"radialGradient\");if(f){g=a[f];h=d.gradients;j=a.stops;o=c.radialReference;La(g)&&(a[f]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:\"userSpaceOnUse\"});f===\"radialGradient\"&&o&&!r(g.gradientUnits)&&(g=w(g,{cx:o[0]-o[2]/2+g.cx*o[2],cy:o[1]-o[2]/2+g.cy*o[2],r:g.r*o[2],gradientUnits:\"userSpaceOnUse\"}));for(n in g)n!==\"id\"&&s.push(n,g[n]);for(n in j)s.push(j[n]);s=s.join(\",\");h[s]?a=h[s].attr(\"id\"):(g.id=a=\"highcharts-\"+tb++,h[s]=i=d.createElement(f).attr(g).add(d.defs),\n\ti.stops=[],p(j,function(a){a[1].indexOf(\"rgba\")===0?(e=ya(a[1]),k=e.get(\"rgb\"),l=e.get(\"a\")):(k=a[1],l=1);a=d.createElement(\"stop\").attr({offset:a[0],\"stop-color\":k,\"stop-opacity\":l}).add(i);i.stops.push(a)}));c.setAttribute(b,\"url(\"+d.url+\"#\"+a+\")\")}},attr:function(a,b){var c,d,e=this.element,f,g=this,h;typeof a===\"string\"&&b!==t&&(c=a,a={},a[c]=b);if(typeof a===\"string\")g=(this[a+\"Getter\"]||this._defaultGetter).call(this,a,e);else{for(c in a){d=a[c];h=!1;this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&\n\t(f||(this.symbolAttr(a),f=!0),h=!0);if(this.rotation&&(c===\"x\"||c===\"y\"))this.doTransform=!0;h||(this[c+\"Setter\"]||this._defaultSetter).call(this,d,c,e);this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c)&&this.updateShadows(c,d)}if(this.doTransform)this.updateTransform(),this.doTransform=!1}return g},updateShadows:function(a,b){for(var c=this.shadows,d=c.length;d--;)c[d].setAttribute(a,a===\"height\"?v(b-(c[d].cutHeight||0),0):a===\"d\"?this.d:b)},addClass:function(a){var b=this.element,\n\tc=H(b,\"class\")||\"\";c.indexOf(a)===-1&&H(b,\"class\",c+\" \"+a);return this},symbolAttr:function(a){var b=this;p(\"x,y,r,start,end,width,height,innerR,anchorX,anchorY\".split(\",\"),function(c){b[c]=m(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr(\"clip-path\",a?\"url(\"+this.renderer.url+\"#\"+a.id+\")\":Q)},crisp:function(a){var b,c={},d,e=a.strokeWidth||this.strokeWidth||this.attr&&this.attr(\"stroke-width\")||0;d=u(e)%2/2;a.x=T(a.x||this.x||\n\t0)+d;a.y=T(a.y||this.y||0)+d;a.width=T((a.width||this.width||0)-2*d);a.height=T((a.height||this.height||0)-2*d);a.strokeWidth=e;for(b in a)this[b]!==a[b]&&(this[b]=c[b]=a[b]);return c},css:function(a){var b=this.styles,c={},d=this.element,e,f,g=\"\";e=!b;if(a&&a.color)a.fill=a.color;if(b)for(f in a)a[f]!==b[f]&&(c[f]=a[f],e=!0);if(e){e=this.textWidth=a&&a.width&&d.nodeName.toLowerCase()===\"text\"&&z(a.width);b&&(a=q(b,c));this.styles=a;e&&(fa||!aa&&this.renderer.forExport)&&delete a.width;if(Aa&&!aa)G(this.element,\n\ta);else{b=function(a,b){return\"-\"+b.toLowerCase()};for(f in a)g+=f.replace(/([A-Z])/g,b)+\":\"+a[f]+\";\";H(d,\"style\",g)}e&&this.added&&this.renderer.buildText(this)}return this},on:function(a,b){var c=this,d=c.element;$a&&a===\"click\"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(wa.indexOf(\"Android\")===-1||Date.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d[\"on\"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=\n\ta;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation,g=this.element;e&&(a+=this.attr(\"width\"),b+=this.attr(\"height\"));a=[\"translate(\"+a+\",\"+b+\")\"];e?a.push(\"rotate(90) scale(-1,1)\"):f&&a.push(\"rotate(\"+f+\" \"+(g.getAttribute(\"x\")||0)+\" \"+(g.getAttribute(\"y\")||0)+\")\");\n\t(r(c)||r(d))&&a.push(\"scale(\"+m(c,1)+\" \"+m(d,1)+\")\");a.length&&g.setAttribute(\"transform\",a.join(\" \"))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=a,this.alignByTranslate=b,!c||Fa(c))this.alignTo=d=c||\"renderer\",ja(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=m(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||\n\t0);g=(c.y||0)+(a.y||0);if(d===\"right\"||d===\"center\")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?\"translateX\":\"x\"]=u(f);if(e===\"bottom\"||e===\"middle\")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?\"translateY\":\"y\"]=u(g);this[this.placed?\"animate\":\"attr\"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d,e=this.rotation;c=this.element;var f=this.styles,g=e*Ca;d=this.textStr;var h;if(d===\"\"||Ob.test(d))h=\"num.\"+d.toString().length+\n\t(f?\"|\"+f.fontSize+\"|\"+f.fontFamily:\"\");h&&(a=b.cache[h]);if(!a){if(c.namespaceURI===xa||b.forExport){try{a=c.getBBox?q({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(i){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){c=a.width;d=a.height;if(Aa&&f&&f.fontSize===\"11px\"&&d.toPrecision(3)===\"16.9\")a.height=d=14;if(e)a.width=M(d*ea(g))+M(c*Z(g)),a.height=M(d*Z(g))+M(c*ea(g))}this.bBox=a;h&&(b.cache[h]=a)}return a},show:function(a){return a&&this.element.namespaceURI===\n\txa?(this.element.removeAttribute(\"visibility\"),this):this.attr({visibility:a?\"inherit\":\"visible\"})},hide:function(){return this.attr({visibility:\"hidden\"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=this.element,f=this.zIndex,g,h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(f)c.handleZ=!0,f=z(f);if(c.handleZ){a=d.childNodes;\n\tfor(g=0;g<a.length;g++)if(b=a[g],c=H(b,\"zIndex\"),b!==e&&(z(c)>f||!r(f)&&r(c))){d.insertBefore(e,b);h=!0;break}}h||d.appendChild(e);this.added=!0;if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName===\"SPAN\"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;bb(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=\n\t0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);for(c&&p(c,function(b){a.safeRemoveChild(b)});d&&d.div.childNodes.length===0;)b=d.parentGroup,a.safeRemoveChild(d.div),delete d.div,d=b;a.alignTo&&ja(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,j,k;if(a){i=m(a.width,3);j=(a.opacity||0.15)/i;k=this.parentInverted?\"(-1,-1)\":\"(\"+m(a.offsetX,1)+\", \"+m(a.offsetY,1)+\")\";for(e=1;e<=i;e++){f=\n\tg.cloneNode(0);h=i*2+1-2*e;H(f,{isShadow:\"true\",stroke:a.color||\"black\",\"stroke-opacity\":j*e,\"stroke-width\":h,transform:\"translate\"+k,fill:Q});if(c)H(f,\"height\",v(H(f,\"height\")-h,0)),f.cutHeight=h;b?b.element.appendChild(f):g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this},xGetter:function(a){this.element.nodeName===\"circle\"&&(a={x:\"cx\",y:\"cy\"}[a]||a);return this._defaultGetter(a)},_defaultGetter:function(a){a=m(this[a],this.element?this.element.getAttribute(a):null,0);/^[0-9\\.]+$/.test(a)&&\n\t(a=parseFloat(a));return a},dSetter:function(a,b,c){a&&a.join&&(a=a.join(\" \"));/(NaN| {2}|^$)/.test(a)&&(a=\"M 0 0\");c.setAttribute(b,a);this[b]=a},dashstyleSetter:function(a){var b;if(a=a&&a.toLowerCase()){a=a.replace(\"shortdashdotdot\",\"3,1,1,1,1,1,\").replace(\"shortdashdot\",\"3,1,1,1\").replace(\"shortdot\",\"1,1,\").replace(\"shortdash\",\"3,1,\").replace(\"longdash\",\"8,3,\").replace(/dot/g,\"1,3,\").replace(\"dash\",\"4,3,\").replace(/,$/,\"\").split(\",\");for(b=a.length;b--;)a[b]=z(a[b])*this.element.getAttribute(\"stroke-width\");\n\ta=a.join(\",\");this.element.setAttribute(\"stroke-dasharray\",a)}},alignSetter:function(a){this.element.setAttribute(\"text-anchor\",{left:\"start\",center:\"middle\",right:\"end\"}[a])},opacitySetter:function(a,b,c){this[b]=a;c.setAttribute(b,a)},\"stroke-widthSetter\":function(a,b,c){a===0&&(a=1.0E-5);this.strokeWidth=a;c.setAttribute(b,a)},titleSetter:function(a){var b=this.element.getElementsByTagName(\"title\")[0];b||(b=y.createElementNS(xa,\"title\"),this.element.appendChild(b));b.textContent=a},textSetter:function(a){if(a!==\n\tthis.textStr)delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this)},fillSetter:function(a,b,c){typeof a===\"string\"?c.setAttribute(b,a):a&&this.colorGradient(a,b,c)},zIndexSetter:function(a,b,c){c.setAttribute(b,a);this[b]=a},_defaultSetter:function(a,b,c){c.setAttribute(b,a)}};P.prototype.yGetter=P.prototype.xGetter;P.prototype.translateXSetter=P.prototype.translateYSetter=P.prototype.rotationSetter=P.prototype.verticalAlignSetter=P.prototype.scaleXSetter=P.prototype.scaleYSetter=\n\tfunction(a,b){this[b]=a;this.doTransform=!0};P.prototype.strokeSetter=P.prototype.fillSetter;var ta=function(){this.init.apply(this,arguments)};ta.prototype={Element:P,init:function(a,b,c,d,e){var f=location,g,d=this.createElement(\"svg\").attr({version:\"1.1\"}).css(this.getStyle(d));g=d.element;a.appendChild(g);a.innerHTML.indexOf(\"xmlns\")===-1&&H(g,\"xmlns\",xa);this.isSVG=!0;this.box=g;this.boxWrapper=d;this.alignedObjects=[];this.url=(Ta||ib)&&y.getElementsByTagName(\"base\").length?f.href.replace(/#.*?$/,\n\t\"\").replace(/([\\('\\)])/g,\"\\\\$1\").replace(/ /g,\"%20\"):\"\";this.createElement(\"desc\").add().element.appendChild(y.createTextNode(\"Created with Highcharts 4.0.1\"));this.defs=this.createElement(\"defs\").add();this.forExport=e;this.gradients={};this.cache={};this.setSize(b,c,!1);var h;if(Ta&&a.getBoundingClientRect)this.subPixelFix=b=function(){G(a,{left:0,top:0});h=a.getBoundingClientRect();G(a,{left:Ka(h.left)-h.left+\"px\",top:Ka(h.top)-h.top+\"px\"})},b(),K(I,\"resize\",b)},getStyle:function(a){return this.style=\n\tq({fontFamily:'\"Lucida Grande\", \"Lucida Sans Unicode\", Arial, Helvetica, sans-serif',fontSize:\"12px\"},a)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Oa(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&W(I,\"resize\",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},\n\tbuildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=m(a.textStr,\"\").toString(),f=e.indexOf(\"<\")!==-1,g=b.childNodes,h,i,j=H(b,\"x\"),k=a.styles,l=a.textWidth,o=k&&k.lineHeight,n=g.length,s=function(a){return o?z(o):c.fontMetrics(/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:k&&k.fontSize||c.style.fontSize||12).h};n--;)b.removeChild(g[n]);!f&&e.indexOf(\" \")===-1?b.appendChild(y.createTextNode(e)):(h=/<.*style=\"([^\"]+)\".*>/,i=/<.*href=\"(http[^\"]+)\".*>/,l&&!a.added&&this.box.appendChild(b),\n\te=f?e.replace(/<(b|strong)>/g,'<span style=\"font-weight:bold\">').replace(/<(i|em)>/g,'<span style=\"font-style:italic\">').replace(/<a/g,\"<span\").replace(/<\\/(b|strong|i|em|a)>/g,\"</span>\").split(/<br.*?>/g):[e],e[e.length-1]===\"\"&&e.pop(),p(e,function(e,f){var g,n=0,e=e.replace(/<span/g,\"|||<span\").replace(/<\\/span>/g,\"</span>|||\");g=e.split(\"|||\");p(g,function(e){if(e!==\"\"||g.length===1){var o={},m=y.createElementNS(xa,\"tspan\"),p;h.test(e)&&(p=e.match(h)[1].replace(/(;| |^)color([ :])/,\"$1fill$2\"),\n\tH(m,\"style\",p));i.test(e)&&!d&&(H(m,\"onclick\",'location.href=\"'+e.match(i)[1]+'\"'),G(m,{cursor:\"pointer\"}));e=(e.replace(/<(.|\\n)*?>/g,\"\")||\" \").replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\");if(e!==\" \"){m.appendChild(y.createTextNode(e));if(n)o.dx=0;else if(f&&j!==null)o.x=j;H(m,o);!n&&f&&(!aa&&d&&G(m,{display:\"block\"}),H(m,\"dy\",s(m),ib&&m.offsetHeight));b.appendChild(m);n++;if(l)for(var e=e.replace(/([^\\^])-/g,\"$1- \").split(\" \"),o=e.length>1&&k.whiteSpace!==\"nowrap\",$,r,B=a._clipHeight,q=[],v=s(),t=\n\t1;o&&(e.length||q.length);)delete a.bBox,$=a.getBBox(),r=$.width,!aa&&c.forExport&&(r=c.measureSpanWidth(m.firstChild.data,a.styles)),$=r>l,!$||e.length===1?(e=q,q=[],e.length&&(t++,B&&t*v>B?(e=[\"...\"],a.attr(\"title\",a.textStr)):(m=y.createElementNS(xa,\"tspan\"),H(m,{dy:v,x:j}),p&&H(m,\"style\",p),b.appendChild(m),r>l&&(l=r)))):(m.removeChild(m.firstChild),q.unshift(e.pop())),e.length&&m.appendChild(y.createTextNode(e.join(\" \").replace(/- /g,\"-\")))}}})}))},button:function(a,b,c,d,e,f,g,h,i){var j=this.label(a,\n\tb,c,i,null,null,null,null,\"button\"),k=0,l,o,n,s,m,p,a={x1:0,y1:0,x2:0,y2:1},e=w({\"stroke-width\":1,stroke:\"#CCCCCC\",fill:{linearGradient:a,stops:[[0,\"#FEFEFE\"],[1,\"#F6F6F6\"]]},r:2,padding:5,style:{color:\"black\"}},e);n=e.style;delete e.style;f=w(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#FFF\"],[1,\"#ACF\"]]}},f);s=f.style;delete f.style;g=w(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#9BD\"],[1,\"#CDF\"]]}},g);m=g.style;delete g.style;h=w(e,{style:{color:\"#CCC\"}},h);p=h.style;delete h.style;\n\tK(j.element,Aa?\"mouseover\":\"mouseenter\",function(){k!==3&&j.attr(f).css(s)});K(j.element,Aa?\"mouseout\":\"mouseleave\",function(){k!==3&&(l=[e,f,g][k],o=[n,s,m][k],j.attr(l).css(o))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(m):a===3&&j.attr(h).css(p):j.attr(e).css(n)};return j.on(\"click\",function(){k!==3&&d.call(j)}).attr(e).css(q({cursor:\"default\"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=u(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=u(a[2])+b%2/2);return a},path:function(a){var b=\n\t{fill:Q};La(a)?b.d=a:ca(a)&&q(b,a);return this.createElement(\"path\").attr(b)},circle:function(a,b,c){a=ca(a)?a:{x:a,y:b,r:c};b=this.createElement(\"circle\");b.xSetter=function(a){this.element.setAttribute(\"cx\",a)};b.ySetter=function(a){this.element.setAttribute(\"cy\",a)};return b.attr(a)},arc:function(a,b,c,d,e,f){if(ca(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol(\"arc\",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){var e=ca(a)?a.r:\n\te,g=this.createElement(\"rect\"),a=ca(a)?a:a===t?{}:{x:a,y:b,width:v(c,0),height:v(d,0)};if(f!==t)a.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;g.rSetter=function(a){H(this.element,{rx:a,ry:a})};return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[m(c,!0)?\"animate\":\"attr\"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement(\"g\");return r(a)?b.attr({\"class\":\"highcharts-\"+a}):b},image:function(a,b,c,d,e){var f=\n\t{preserveAspectRatio:Q};arguments.length>1&&q(f,{x:b,y:c,width:d,height:e});f=this.createElement(\"image\").attr(f);f.element.setAttributeNS?f.element.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",a):f.element.setAttribute(\"hc-svg-href\",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(u(b),u(c),d,e,f),i=/^url\\((.*?)\\)$/,j,k;if(h)g=this.path(h),q(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&q(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),\n\ta.alignByTranslate||a.translate(u((d-b[0])/2),u((e-b[1])/2)))},j=a.match(i)[1],a=Kb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),Y(\"img\",{onload:function(){k(g,Kb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return[\"M\",a+c/2,b,\"C\",a+c+e,b,a+c+e,b+d,a+c/2,b+d,\"C\",a-e,b+d,a-e,b,a+c/2,b,\"Z\"]},square:function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c,b+d,a,b+d,\"Z\"]},triangle:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",\n\ta+c,b+d,a,b+d,\"Z\"]},\"triangle-down\":function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c/2,b+d,\"Z\"]},diamond:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",a+c,b+d/2,a+c/2,b+d,a,b+d/2,\"Z\"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=Z(f),j=ea(f),k=Z(g),g=ea(g),e=e.end-f<ma?0:1;return[\"M\",a+c*i,b+c*j,\"A\",c,c,0,e,1,a+c*k,b+c*g,h?\"M\":\"L\",a+d*k,b+d*g,\"A\",d,d,0,e,0,a+d*i,b+d*j,h?\"\":\"Z\"]},callout:function(a,b,c,d,e){var f=C(e&&e.r||0,c,d),g=f+6,h=e&&e.anchorX,i=e&&e.anchorY,\n\te=u(e.strokeWidth||0)%2/2;a+=e;b+=e;e=[\"M\",a+f,b,\"L\",a+c-f,b,\"C\",a+c,b,a+c,b,a+c,b+f,\"L\",a+c,b+d-f,\"C\",a+c,b+d,a+c,b+d,a+c-f,b+d,\"L\",a+f,b+d,\"C\",a,b+d,a,b+d,a,b+d-f,\"L\",a,b+f,\"C\",a,b,a,b,a+f,b];h&&h>c&&i>b+g&&i<b+d-g?e.splice(13,3,\"L\",a+c,i-6,a+c+6,i,a+c,i+6,a+c,b+d-f):h&&h<0&&i>b+g&&i<b+d-g?e.splice(33,3,\"L\",a,i+6,a-6,i,a,i-6,a,b+f):i&&i>d&&h>a+g&&h<a+c-g?e.splice(23,3,\"L\",h+6,b+d,h,b+d+6,h-6,b+d,a+f,b+d):i&&i<0&&h>a+g&&h<a+c-g&&e.splice(3,3,\"L\",h-6,b,h,b-6,h+6,b,c-f,b);return e}},clipRect:function(a,\n\tb,c,d){var e=\"highcharts-\"+tb++,f=this.createElement(\"clipPath\").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},text:function(a,b,c,d){var e=fa||!aa&&this.forExport,f={};if(d&&!this.forExport)return this.html(a,b,c);f.x=Math.round(b||0);if(c)f.y=Math.round(c);if(a||a===0)f.text=a;a=this.createElement(\"text\").attr(f);e&&a.css({position:\"absolute\"});if(!d)a.xSetter=function(a,b,c){var d=c.childNodes,e,f;for(f=1;f<d.length;f++)e=d[f],e.getAttribute(\"x\")===c.getAttribute(\"x\")&&\n\te.setAttribute(\"x\",a);c.setAttribute(b,a)};return a},fontMetrics:function(a){var a=a||this.style.fontSize,a=/px/.test(a)?z(a):/em/.test(a)?parseFloat(a)*12:12,a=a<24?a+4:u(a*1.2),b=u(a*0.8);return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a,b;a=s.element.style;J=(Va===void 0||wb===void 0||n.styles.textAlign)&&s.textStr&&s.getBBox();n.width=(Va||J.width||0)+2*x+v;n.height=(wb||J.height||0)+2*x;na=x+o.fontMetrics(a&&a.fontSize).b;if(z){if(!m)a=u(-L*x),b=h?-na:0,n.box=m=d?o.symbol(d,\n\ta,b,n.width,n.height,B):o.rect(a,b,n.width,n.height,0,B[Pb]),m.attr(\"fill\",Q).add(n);m.isImg||m.attr(q({width:u(n.width),height:u(n.height)},B));B=null}}function k(){var a=n.styles,a=a&&a.textAlign,b=v+x*(1-L),c;c=h?0:na;if(r(Va)&&J&&(a===\"center\"||a===\"right\"))b+={center:0.5,right:1}[a]*(Va-J.width);if(b!==s.x||c!==s.y)s.attr(\"x\",b),c!==t&&s.attr(\"y\",c);s.x=b;s.y=c}function l(a,b){m?m.attr(a,b):B[a]=b}var o=this,n=o.g(i),s=o.text(\"\",0,0,g).attr({zIndex:1}),m,J,L=0,x=3,v=0,Va,wb,xb,yb,y=0,B={},na,\n\tz;n.onAdd=function(){s.add(n);n.attr({text:a||\"\",x:b,y:c});m&&r(e)&&n.attr({anchorX:e,anchorY:f})};n.widthSetter=function(a){Va=a};n.heightSetter=function(a){wb=a};n.paddingSetter=function(a){r(a)&&a!==x&&(x=a,k())};n.paddingLeftSetter=function(a){r(a)&&a!==v&&(v=a,k())};n.alignSetter=function(a){L={left:0,center:0.5,right:1}[a]};n.textSetter=function(a){a!==t&&s.textSetter(a);j();k()};n[\"stroke-widthSetter\"]=function(a,b){a&&(z=!0);y=a%2/2;l(b,a)};n.strokeSetter=n.fillSetter=n.rSetter=function(a,\n\tb){b===\"fill\"&&a&&(z=!0);l(b,a)};n.anchorXSetter=function(a,b){e=a;l(b,a+y-xb)};n.anchorYSetter=function(a,b){f=a;l(b,a-yb)};n.xSetter=function(a){n.x=a;L&&(a-=L*((Va||J.width)+x));xb=u(a);n.attr(\"translateX\",xb)};n.ySetter=function(a){yb=n.y=u(a);n.attr(\"translateY\",yb)};var A=n.css;return q(n,{css:function(a){if(a){var b={},a=w(a);p(\"fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow\".split(\",\"),function(c){a[c]!==t&&(b[c]=a[c],delete a[c])});s.css(b)}return A.call(n,\n\ta)},getBBox:function(){return{width:J.width+2*x,height:J.height+2*x,x:J.x-x,y:J.y-x}},shadow:function(a){m&&m.shadow(a);return n},destroy:function(){W(n.element,\"mouseenter\");W(n.element,\"mouseleave\");s&&(s=s.destroy());m&&(m=m.destroy());P.prototype.destroy.call(n);n=o=j=k=l=null}})}};Za=ta;q(P.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&b.tagName===\"SPAN\"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=q(this.styles,a);G(this.element,a);return this},htmlGetBBox:function(){var a=\n\tthis.element,b=this.bBox;if(!b){if(a.nodeName===\"text\")a.style.position=\"absolute\";b=this.bBox={x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}return b},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||\"left\",h={left:0,center:0.5,right:1}[g],i=this.shadows;G(b,{marginLeft:c,marginTop:d});i&&p(i,function(a){G(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&\n\tp(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName===\"SPAN\"){var j=this.rotation,k,l=z(this.textWidth),o=[j,g,b.innerHTML,this.textWidth].join(\",\");if(o!==this.cTT){k=a.fontMetrics(b.style.fontSize).b;r(j)&&this.setSpanRotation(j,h,k);i=m(this.elemWidth,b.offsetWidth);if(i>l&&/[ \\-]/.test(b.textContent||b.innerText))G(b,{width:l+\"px\",display:\"block\",whiteSpace:\"normal\"}),i=l;this.getSpanCorrection(i,k,h,j,g)}G(b,{left:e+(this.xCorr||0)+\"px\",top:f+(this.yCorr||0)+\"px\"});if(ib)k=b.offsetHeight;\n\tthis.cTT=o}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=Aa?\"-ms-transform\":ib?\"-webkit-transform\":Ta?\"MozTransform\":Ib?\"-o-transform\":\"\";d[e]=d.transform=\"rotate(\"+a+\"deg)\";d[e+(Ta?\"Origin\":\"-origin\")]=d.transformOrigin=b*100+\"% \"+c+\"px\";G(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});q(ta.prototype,{html:function(a,b,c){var d=this.createElement(\"span\"),e=d.element,f=d.renderer;d.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;\n\te.innerHTML=this.textStr=a};d.xSetter=d.ySetter=d.alignSetter=d.rotationSetter=function(a,b){b===\"align\"&&(b=\"textAlign\");d[b]=a;d.htmlUpdateTransform()};d.attr({text:a,x:u(b),y:u(c)}).css({position:\"absolute\",whiteSpace:\"nowrap\",fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});d.css=d.htmlCss;if(f.isSVG)d.add=function(a){var b,c=f.box.parentNode,j=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)j.push(a),a=a.parentGroup;p(j.reverse(),function(a){var d;b=a.div=a.div||Y(Ja,{className:H(a.element,\n\t\"class\")},{position:\"absolute\",left:(a.translateX||0)+\"px\",top:(a.translateY||0)+\"px\"},b||c);d=b.style;q(a,{translateXSetter:function(b,c){d.left=b+\"px\";a[c]=b;a.doTransform=!0},translateYSetter:function(b,c){d.top=b+\"px\";a[c]=b;a.doTransform=!0},visibilitySetter:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(e);d.added=!0;d.alignOnAdd&&d.htmlUpdateTransform();return d};return d}});var X;if(!aa&&!fa){R.VMLElement=X={init:function(a,b){var c=[\"<\",b,' filled=\"f\" stroked=\"f\"'],d=[\"position: \",\"absolute\",\n\t\";\"],e=b===Ja;(b===\"shape\"||e)&&d.push(\"left:0;top:0;width:1px;height:1px;\");d.push(\"visibility: \",e?\"hidden\":\"visible\");c.push(' style=\"',d.join(\"\"),'\"/>');if(b)c=e||b===\"span\"||b===\"img\"?c.join(\"\"):a.prepVML(c),this.element=Y(c);this.renderer=a},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();return this},updateTransform:P.prototype.htmlUpdateTransform,\n\tsetSpanRotation:function(){var a=this.rotation,b=Z(a*Ca),c=ea(a*Ca);G(this.element,{filter:a?[\"progid:DXImageTransform.Microsoft.Matrix(M11=\",b,\", M12=\",-c,\", M21=\",c,\", M22=\",b,\", sizingMethod='auto expand')\"].join(\"\"):Q})},getSpanCorrection:function(a,b,c,d,e){var f=d?Z(d*Ca):1,g=d?ea(d*Ca):0,h=m(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!==\"left\"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=\n\th*c*(g<0?-1:1)),G(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(ha(a[b]))c[b]=u(a[b]*10)-5;else if(a[b]===\"Z\")c[b]=\"x\";else if(c[b]=a[b],a.isArc&&(a[b]===\"wa\"||a[b]===\"at\"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(\" \")||\"x\"},clip:function(a){var b=this,c;a?(c=a.members,ja(c,b),c.push(b),b.destroyClip=function(){ja(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:hb?\"inherit\":\"rect(auto)\"});\n\treturn b.css(a)},css:P.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Pa(a)},destroy:function(){this.destroyClip&&this.destroyClip();return P.prototype.destroy.apply(this)},on:function(a,b){this.element[\"on\"+a]=function(){var a=I.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=z(a[c-2])-10*b;return a.join(\" \")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,\n\tl,o,n,s;k&&typeof k.value!==\"string\"&&(k=\"x\");o=k;if(a){n=m(a.width,3);s=(a.opacity||0.15)/n;for(e=1;e<=3;e++){l=n*2+1-2*e;c&&(o=this.cutOffPath(k.value,l+0.5));j=['<shape isShadow=\"true\" strokeweight=\"',l,'\" filled=\"false\" path=\"',o,'\" coordsize=\"10 10\" style=\"',f.style.cssText,'\" />'];h=Y(g.prepVML(j),null,{left:z(i.left)+m(a.offsetX,1),top:z(i.top)+m(a.offsetY,1)});if(c)h.cutOff=l+1;j=['<stroke color=\"',a.color||\"black\",'\" opacity=\"',s*e,'\"/>'];Y(g.prepVML(j),null,null,h);b?b.element.appendChild(h):\n\tf.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this},updateShadows:sa,setAttr:function(a,b){hb?this.element[a]=b:this.element.setAttribute(a,b)},classSetter:function(a){this.element.className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName(\"stroke\")[0]||Y(this.renderer.prepVML([\"<stroke/>\"]),null,null,c))[b]=a||\"solid\";this[b]=a},dSetter:function(a,b,c){var d=this.shadows,a=a||[];this.d=a.join(\" \");c.path=a=this.pathToVML(a);if(d)for(c=d.length;c--;)d[c].path=d[c].cutOff?\n\tthis.cutOffPath(a,d[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var d=c.nodeName;if(d===\"SPAN\")c.style.color=a;else if(d!==\"IMG\")c.filled=a!==Q,this.setAttr(\"fillcolor\",this.renderer.color(a,c,b,this))},opacitySetter:sa,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-u(ea(a*Ca)+1)+\"px\";c.top=u(Z(a*Ca))+\"px\"},strokeSetter:function(a,b,c){this.setAttr(\"strokecolor\",this.renderer.color(a,c,b))},\"stroke-widthSetter\":function(a,b,c){c.stroked=!!a;this[b]=a;ha(a)&&(a+=\"px\");\n\tthis.setAttr(\"strokeweight\",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){a===\"inherit\"&&(a=\"visible\");this.shadows&&p(this.shadows,function(c){c.style[b]=a});c.nodeName===\"DIV\"&&(a=a===\"hidden\"?\"-999em\":0,hb||(c.style[b]=a?\"visible\":\"hidden\"),b=\"top\");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;b===\"x\"?b=\"left\":b===\"y\"&&(b=\"top\");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}};X=ka(P,X);X.prototype.ySetter=\n\tX.prototype.widthSetter=X.prototype.heightSetter=X.prototype.xSetter;var ga={Element:X,isIE8:wa.indexOf(\"MSIE 8.0\")>-1,init:function(a,b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ja).css(q(this.getStyle(d),{position:\"relative\"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!y.namespaces.hcv){y.namespaces.add(\"hcv\",\"urn:schemas-microsoft-com:vml\");try{y.createStyleSheet().cssText=\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \"}catch(f){y.styleSheets[0].cssText+=\n\t\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \"}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=ca(a);return q(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c===\"shape\"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:\"rect(\"+u(a?e:d)+\"px,\"+u(a?\n\tf:b)+\"px,\"+u(a?b:f)+\"px,\"+u(a?d:e)+\"px)\"};!a&&hb&&c===\"DIV\"&&q(d,{width:b+\"px\",height:f+\"px\"});return d},updateClipping:function(){p(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=Q;a&&a.linearGradient?i=\"gradient\":a&&a.radialGradient&&(i=\"pattern\");if(i){var k,l,o=a.linearGradient||a.radialGradient,n,s,m,J,L,x=\"\",a=a.stops,r,v=[],q=function(){h=['<fill colors=\"'+v.join(\",\")+'\" opacity=\"',m,'\" o:opacity2=\"',s,'\" type=\"',i,'\" ',x,'focus=\"100%\" method=\"any\" />'];\n\tY(e.prepVML(h),null,null,b)};n=a[0];r=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);r[0]<1&&a.push([1,r[1]]);p(a,function(a,b){g.test(a[1])?(f=ya(a[1]),k=f.get(\"rgb\"),l=f.get(\"a\")):(k=a[1],l=1);v.push(a[0]*100+\"% \"+k);b?(m=l,J=k):(s=l,L=k)});if(c===\"fill\")if(i===\"gradient\")c=o.x1||o[0]||0,a=o.y1||o[1]||0,n=o.x2||o[2]||0,o=o.y2||o[3]||0,x='angle=\"'+(90-U.atan((o-a)/(n-c))*180/ma)+'\"',q();else{var j=o.r,t=j*2,u=j*2,y=o.cx,B=o.cy,na=b.radialReference,w,j=function(){na&&(w=d.getBBox(),y+=(na[0]-w.x)/w.width-\n\t0.5,B+=(na[1]-w.y)/w.height-0.5,t*=na[2]/w.width,u*=na[2]/w.height);x='src=\"'+E.global.VMLRadialGradientURL+'\" size=\"'+t+\",\"+u+'\" origin=\"0.5,0.5\" position=\"'+y+\",\"+B+'\" color2=\"'+L+'\" ';q()};d.added?j():d.onAdd=j;j=J}else j=k}else if(g.test(a)&&b.tagName!==\"IMG\")f=ya(a),h=[\"<\",c,' opacity=\"',f.get(\"a\"),'\"/>'],Y(this.prepVML(h),null,null,b),j=f.get(\"rgb\");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type=\"solid\";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join(\"\");b?\n\t(a=a.replace(\"/>\",' xmlns=\"urn:schemas-microsoft-com:vml\" />'),a=a.indexOf('style=\"')===-1?a.replace(\"/>\",' style=\"display:inline-block;behavior:url(#default#VML);\" />'):a.replace('style=\"','style=\"display:inline-block;behavior:url(#default#VML);')):a=a.replace(\"<\",\"<hcv:\");return a},text:ta.prototype.html,path:function(a){var b={coordsize:\"10 10\"};La(a)?b.d=a:ca(a)&&q(b,a);return this.createElement(\"shape\").attr(b)},circle:function(a,b,c){var d=this.symbol(\"circle\");if(ca(a))c=a.r,b=a.y,a=a.x;d.isCircle=\n\t!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:\"highcharts-\"+a,\"class\":\"highcharts-\"+a});return this.createElement(Ja).attr(b)},image:function(a,b,c,d,e){var f=this.createElement(\"img\").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a===\"rect\"?this.symbol(a):ta.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName===\"IMG\"&&a.style;G(a,{flip:\"x\",left:z(d.width)-(e?z(e.top):\n\t1),top:z(d.height)-(e?z(e.left):1),rotation:-90});p(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=Z(f),i=ea(f),j=Z(g),k=ea(g);if(g-f===0)return[\"x\"];f=[\"wa\",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push(\"e\",\"M\",a,b);f.push(\"at\",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,\"x\",\"e\");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return[\"wa\",a,b,a+c,b+d,a+c,b+d/2,a+\n\tc,b+d/2,\"e\"]},rect:function(a,b,c,d,e){return ta.prototype.symbols[!r(e)||!e.r?\"square\":\"callout\"].call(0,a,b,c,d,e)}}};R.VMLRenderer=X=function(){this.init.apply(this,arguments)};X.prototype=w(ta.prototype,ga);Za=X}ta.prototype.measureSpanWidth=function(a,b){var c=y.createElement(\"span\"),d;d=y.createTextNode(a);c.appendChild(d);G(c,b);this.box.appendChild(c);d=c.offsetWidth;Pa(c);return d};var Lb;if(fa)R.CanVGRenderer=X=function(){xa=\"http://www.w3.org/1999/xhtml\"},X.prototype.symbols={},Lb=function(){function a(){var a=\n\tb.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Qb(d,a);b.push(c)}}}(),Za=X;Sa.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=a.names,g=this.pos,h=b.labels,i=a.tickPositions,d=d&&e&&!h.step&&!h.staggerLines&&!h.rotation&&c.plotWidth/i.length||!d&&(c.margin[3]||c.chartWidth*0.33),j=g===i[0],k=g===i[i.length-1],l,f=e?m(e[g],f[g],g):g,e=this.label,o=i.info;a.isDatetimeAxis&&o&&(l=b.dateTimeLabelFormats[o.higherRanks[g]||\n\to.unitName]);this.isFirst=j;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:j,isLast:k,dateTimeLabelFormat:l,value:a.isLog?da(ia(f)):f});g=d&&{width:v(1,u(d-2*(h.padding||10)))+\"px\"};g=q(g,h.style);if(r(e))e&&e.attr({text:b}).css(g);else{l={align:a.labelAlign};if(ha(h.rotation))l.rotation=h.rotation;if(d&&h.ellipsis)l._clipHeight=a.len/i.length;this.label=r(b)&&h.enabled?c.renderer.text(b,0,0,h.useHTML).attr(l).css(g).add(a.labelGroup):null}},getLabelSize:function(){var a=this.label,\n\tb=this.axis;return a?a.getBBox()[b.horiz?\"height\":\"width\"]:0},getLabelSides:function(){var a=this.label.getBBox(),b=this.axis,c=b.horiz,d=b.options.labels,a=c?a.width:a.height,b=c?d.x-a*{left:0,center:0.5,right:1}[b.labelAlign]:0;return[b,c?a+b:a]},handleOverflow:function(a,b){var c=!0,d=this.axis,e=this.isFirst,f=this.isLast,g=d.horiz?b.x:b.y,h=d.reversed,i=d.tickPositions,j=this.getLabelSides(),k=j[0],j=j[1],l,o,n,s=this.label.line||0;l=d.labelEdge;o=d.justifyLabels&&(e||f);l[s]===t||g+k>l[s]?l[s]=\n\tg+j:o||(c=!1);if(o){l=(o=d.justifyToPlot)?d.pos:0;o=o?l+d.len:d.chart.chartWidth;do a+=e?1:-1,n=d.ticks[i[a]];while(i[a]&&(!n||n.label.line!==s));d=n&&n.label.xy&&n.label.xy.x+n.getLabelSides()[e?0:1];e&&!h||f&&h?g+k<l&&(g=l-k,n&&g+j>d&&(c=!1)):g+j>o&&(g=o-j,n&&g+k<d&&(c=!1));b.x=g}return c},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-\n\te.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,l=i.staggerLines,o=i.chart.renderer.fontMetrics(e.style.fontSize).b,n=e.rotation,a=a+e.x-(f&&d?f*j*(k?-1:1):0),b=b+e.y-(f&&!d?f*j*(k?1:-1):0);n&&i.side===2&&(b-=o-o*Z(n*Ca));!r(e.y)&&!n&&(b+=o-c.getBBox().height/2);if(l)c.line=g/(h||1)%l,b+=c.line*(i.labelOffset/l);return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine([\"M\",\n\ta,b,\"L\",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,j=this.pos,k=e.labels,l=this.gridLine,o=h?h+\"Grid\":\"grid\",n=h?h+\"Tick\":\"tick\",s=e[o+\"LineWidth\"],p=e[o+\"LineColor\"],J=e[o+\"LineDashStyle\"],L=e[n+\"Length\"],o=e[n+\"Width\"]||0,x=e[n+\"Color\"],r=e[n+\"Position\"],n=this.mark,v=k.step,q=!0,u=d.tickmarkOffset,w=this.getPosition(g,j,u,b),y=w.x,w=w.y,B=g&&y===d.pos+d.len||!g&&w===d.pos?-1:1;this.isActive=!0;if(s){j=d.getPlotLinePath(j+\n\tu,s*B,b,!0);if(l===t){l={stroke:p,\"stroke-width\":s};if(J)l.dashstyle=J;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=s?f.path(j).attr(l).add(d.gridGroup):null}if(!b&&l&&j)l[this.isNew?\"attr\":\"animate\"]({d:j,opacity:c})}if(o&&L)r===\"inside\"&&(L=-L),d.opposite&&(L=-L),h=this.getMarkPath(y,w,L,o*B,g,f),n?n.animate({d:h,opacity:c}):this.mark=f.path(h).attr({stroke:x,\"stroke-width\":o,opacity:c}).add(d.axisGroup);if(i&&!isNaN(y))i.xy=w=this.getLabelPosition(y,w,i,g,k,u,a,v),this.isFirst&&!this.isLast&&\n\t!m(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!m(e.showLastLabel,1)?q=!1:!d.isRadial&&!k.step&&!k.rotation&&!b&&c!==0&&(q=this.handleOverflow(a,w)),v&&a%v&&(q=!1),q&&!isNaN(w.y)?(w.opacity=c,i[this.isNew?\"attr\":\"animate\"](w),this.isNew=!1):i.attr(\"y\",-9999)},destroy:function(){Oa(this,this.axis)}};R.PlotLineOrBand=function(a,b){this.axis=a;if(b)this.options=b,this.id=b.id};R.PlotLineOrBand.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,\n\tg=a.label,h=e.width,i=e.to,j=e.from,k=r(j)&&r(i),l=e.value,o=e.dashStyle,n=a.svgElem,s=[],p,J=e.color,L=e.zIndex,x=e.events,q={},t=b.chart.renderer;b.isLog&&(j=za(j),i=za(i),l=za(l));if(h){if(s=b.getPlotLinePath(l,h),q={stroke:J,\"stroke-width\":h},o)q.dashstyle=o}else if(k){j=v(j,b.min-d);i=C(i,b.max+d);s=b.getPlotBandPath(j,i,e);if(J)q.fill=J;if(e.borderWidth)q.stroke=e.borderColor,q[\"stroke-width\"]=e.borderWidth}else return;if(r(L))q.zIndex=L;if(n)if(s)n.animate({d:s},null,n.onGetPath);else{if(n.hide(),\n\tn.onGetPath=function(){n.show()},g)a.label=g=g.destroy()}else if(s&&s.length&&(a.svgElem=n=t.path(s).attr(q).add(),x))for(p in d=function(b){n.on(b,function(c){x[b].apply(a,[c])})},x)d(p);if(f&&r(f.text)&&s&&s.length&&b.width>0&&b.height>0){f=w({align:c&&k&&\"center\",x:c?!k&&4:10,verticalAlign:!c&&k&&\"middle\",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g){q={align:f.textAlign||f.align,rotation:f.rotation};if(r(L))q.zIndex=L;a.label=g=t.text(f.text,0,0,f.useHTML).attr(q).css(f.style).add()}b=[s[1],\n\ts[4],m(s[6],s[1])];s=[s[2],s[5],m(s[7],s[2])];c=Na(b);k=Na(s);g.align(f,!1,{x:c,y:k,width:Ba(b)-c,height:Ba(s)-k});g.show()}else g&&g.hide();return a},destroy:function(){ja(this.axis.plotLinesAndBands,this);delete this.axis;Oa(this)}};la.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:\"%H:%M:%S.%L\",second:\"%H:%M:%S\",minute:\"%H:%M\",hour:\"%H:%M\",day:\"%e. %b\",week:\"%e. %b\",month:\"%b '%y\",year:\"%Y\"},endOnTick:!1,gridLineColor:\"#C0C0C0\",labels:N,lineColor:\"#C0D0E0\",lineWidth:1,minPadding:0.01,\n\tmaxPadding:0.01,minorGridLineColor:\"#E0E0E0\",minorGridLineWidth:1,minorTickColor:\"#A0A0A0\",minorTickLength:2,minorTickPosition:\"outside\",startOfWeek:1,startOnTick:!1,tickColor:\"#C0D0E0\",tickLength:10,tickmarkPlacement:\"between\",tickPixelInterval:100,tickPosition:\"outside\",tickWidth:1,title:{align:\"middle\",style:{color:\"#707070\"}},type:\"linear\"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,\n\ttickWidth:0,title:{rotation:270,text:\"Values\"},stackLabels:{enabled:!1,formatter:function(){return Ga(this.total,-1)},style:N.style}},defaultLeftAxisOptions:{labels:{x:-15,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:20},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-15},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?\"xAxis\":\"yAxis\";this.opposite=\n\tb.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e===\"category\";this.names=[];this.isLog=e===\"logarithmic\";this.isDatetimeAxis=e===\"datetime\";this.isLinked=r(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement===\n\t\"between\"?0.5:0;this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.min=this.max=null;this.crosshair=m(d.crosshair,qa(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;Da(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length,0,this):a.axes.push(this),a[this.coll].push(this));\n\tthis.series=this.series||[];if(a.inverted&&c&&this.reversed===t)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)K(this,f,d[f]);if(this.isLog)this.val2lin=za,this.lin2val=ia},setOptions:function(a){this.options=w(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],w(E[this.coll],a))},defaultLabelFormatter:function(){var a=\n\tthis.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=E.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ia(h,this);else if(c)g=b;else if(d)g=cb(d,b);else if(f&&a>=1E3)for(;f--&&g===t;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Ga(b/c,-1)+e[f]);g===t&&(g=M(b)>=1E4?Ga(b,0):Ga(b,-1,t,\"\"));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.buildStacks&&a.buildStacks();p(a.series,function(c){if(c.visible||\n\t!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=C(m(a.dataMin,d[0]),Na(d)),a.dataMax=v(m(a.dataMax,d[0]),Ba(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(r(c)&&r(e))a.dataMin=C(m(a.dataMin,c),c),a.dataMax=v(m(a.dataMax,e),e);if(r(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMax<d)a.dataMax=d,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e,f){var g=\n\t1,h=0,i=d?this.oldTransA:this.transA,d=d?this.oldMin:this.min,j=this.minPixelPadding,e=(this.options.ordinal||this.isLog&&e)&&this.lin2val;if(!i)i=this.transA;if(c)g*=-1,h=this.len;this.reversed&&(g*=-1,h-=g*(this.sector||this.len));b?(a=a*g+h,a-=j,a=a/i+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),f===\"between\"&&(f=0.5),a=g*(a-d)*i+h+g*j+(ha(f)?i*f*this.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-\n\t(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,e){var f=this.chart,g=this.left,h=this.top,i,j,k=c&&f.oldChartHeight||f.chartHeight,l=c&&f.oldChartWidth||f.chartWidth,o;i=this.transB;e=m(e,this.translate(a,null,null,c));a=c=u(e+i);i=j=u(k-e-i);if(isNaN(e))o=!0;else if(this.horiz){if(i=h,j=k-this.bottom,a<g||a>g+this.width)o=!0}else if(a=g,c=l-this.right,i<h||i>h+this.height)o=!0;return o&&!d?null:f.renderer.crispLine([\"M\",a,i,\"L\",c,j],b||1)},getLinearTickPositions:function(a,\n\tb,c){var d,e=da(T(b/a)*a),f=da(Ka(c/a)*a),g=[];if(b===c&&ha(b))return[b];for(b=e;b<=f;){g.push(b);b=da(b+a);if(b===d)break;d=b}return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a<e;a++)d=d.concat(this.getLogTickPositions(c,b[a-1],b[a],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval===\"auto\")d=d.concat(this.getTimeTicks(this.normalizeTimeTickInterval(c),this.min,this.max,a.startOfWeek)),d[0]<this.min&&\n\td.shift();else for(b=this.min+(b[0]-this.min)%c;b<=this.max;b+=c)d.push(b);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===t&&!this.isLog)r(a.min)||r(a.max)?this.minRange=null:(p(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===t||h<f)f=h}),this.minRange=C(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=\n\t(k-c+b)/2;d=[b-d,m(a.min,b-d)];if(e)d[2]=this.dataMin;b=Ba(d);c=[b+k,m(a.max,b+k)];if(e)c[2]=this.dataMax;c=Na(c);c-b<k&&(d[0]=c-k,d[1]=m(a.min,c-k),b=Ba(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this,c=b.max-b.min,d=b.axisPointRange||0,e,f=0,g=0,h=b.linkedParent,i=!!b.categories,j=b.transA;if(b.isXAxis||i||d)h?(f=h.minPointOffset,g=h.pointRangePadding):p(b.series,function(a){var h=i?1:b.isXAxis?a.pointRange:b.axisPointRange||0,j=a.options.pointPlacement,n=a.closestPointRange;\n\th>c&&(h=0);d=v(d,h);f=v(f,Fa(j)?0:h/2);g=v(g,j===\"on\"?0:h);!a.noSharedTooltip&&r(n)&&(e=r(e)?C(e,n):n)}),h=b.ordinalSlope&&e?b.ordinalSlope/e:1,b.minPointOffset=f*=h,b.pointRangePadding=g*=h,b.pointRange=C(d,c),b.closestPointRange=e;if(a)b.oldTransA=j;b.translationSlope=b.transA=j=b.len/(c+g||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=j*f},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding,\n\tk=d.minPadding,l=d.tickInterval,o=d.minTickInterval,n=d.tickPixelInterval,s,$=b.categories;h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=m(c.min,c.dataMin),b.max=m(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ra(11,1)):(b.min=m(b.userMin,d.min,b.dataMin),b.max=m(b.userMax,d.max,b.dataMax));if(e)!a&&C(b.min,m(b.dataMin,b.min))<=0&&ra(10,1),b.min=da(za(b.min)),b.max=da(za(b.max));if(b.range&&r(b.max))b.userMin=b.min=v(b.min,b.max-b.range),b.userMax=b.max,b.range=\n\tnull;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!$&&!b.axisPointRange&&!b.usePercentage&&!h&&r(b.min)&&r(b.max)&&(c=b.max-b.min)){if(!r(d.min)&&!r(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!r(d.max)&&!r(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}if(ha(d.floor))b.min=v(b.min,d.floor);if(ha(d.ceiling))b.max=C(b.max,d.ceiling);b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&n===b.linkedParent.options.tickPixelInterval?b.tickInterval=\n\tb.linkedParent.tickInterval:(b.tickInterval=m(l,$?1:(b.max-b.min)*n/v(b.len,n)),!r(l)&&b.len<n&&!this.isRadial&&!this.isLog&&!$&&d.startOnTick&&d.endOnTick&&(s=!0,b.tickInterval/=4));g&&!a&&p(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange)b.tickInterval=v(b.pointRange,b.tickInterval);if(!l&&b.tickInterval<\n\to)b.tickInterval=o;if(!f&&!e&&!l)b.tickInterval=nb(b.tickInterval,null,mb(b.tickInterval),d);b.minorTickInterval=d.minorTickInterval===\"auto\"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=a=d.tickPositions?[].concat(d.tickPositions):i&&i.apply(b,[b.min,b.max]);if(!a)!b.ordinalPositions&&(b.max-b.min)/b.tickInterval>v(2*b.len,200)&&ra(19,!0),a=f?b.getTimeTicks(b.normalizeTimeTickInterval(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,\n\t!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),s&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h<f&&a.pop(),a.length===1&&(d=M(b.max)>1E13?1:0.001,b.min-=d,b.max+=d)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.coll,this.pos,this.len].join(\"-\");if(!this.isLinked&&\n\t!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1&&this.min!==t){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(da(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(r(d)&&a!==d)this.isDirty=\n\t!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!==this.oldAxisLength;p(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax){if(!this.isXAxis)for(b in a)for(c in a[b])a[b][c].total=null,a[b][c].cum=0;this.forceRedraw=!1;this.getSeriesExtremes();this.setTickPositions();this.oldUserMin=\n\tthis.userMin;this.oldUserMax=this.userMax;if(!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==this.oldMax}else if(!this.isXAxis){if(this.oldStacks)a=this.stacks=this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}this.setMaxTicks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=m(c,!0),e=q(e,{min:a,max:b});D(f,\"setExtremes\",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;f.isDirtyExtremes=!0;c&&g.redraw(d)})},zoom:function(a,b){var c=this.dataMin,d=this.dataMax,\n\te=this.options;this.allowZoomOutside||(r(c)&&a<=C(c,m(e.min,c))&&(a=t),r(d)&&b>=v(d,m(e.max,d))&&(b=t));this.displayBtn=a!==t||b!==t;this.setExtremes(a,b,!1,t,{trigger:\"zoom\"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=this.horiz,e=m(b.width,a.plotWidth-c+(b.offsetRight||0)),f=m(b.height,a.plotHeight),g=m(b.top,a.plotTop),b=m(b.left,a.plotLeft+c),c=/%$/;c.test(f)&&(f=parseInt(f,10)/100*a.plotHeight);c.test(g)&&(g=parseInt(g,10)/100*a.plotHeight+a.plotTop);\n\tthis.left=b;this.top=g;this.width=e;this.height=f;this.bottom=a.chartHeight-f-g;this.right=a.chartWidth-e-b;this.len=v(d?e:f,0);this.pos=d?b:g},getExtremes:function(){var a=this.isLog;return{min:a?da(ia(this.min)):this.min,max:a?da(ia(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ia(this.min):this.min,b=b?ia(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=\n\t(m(a,0)-this.side*90+720)%360;return a>15&&a<165?\"right\":a>195&&a<345?\"left\":\"center\"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,o=0,n=d.title,s=d.labels,$=0,J=b.axisOffset,L=b.clipOffset,x=[-1,1,1,-1][h],q,u=1,w=m(s.maxStaggerLines,5),y,z,A,B,na=h===2?c.fontMetrics(s.style.fontSize).b:0;a.hasData=j=a.hasVisibleSeries||r(a.min)&&r(a.max)&&!!e;a.showAxis=b=j||m(d.showEmpty,!0);a.staggerLines=\n\ta.horiz&&s.staggerLines;if(!a.axisGroup)a.gridGroup=c.g(\"grid\").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g(\"axis\").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g(\"axis-labels\").attr({zIndex:s.zIndex||7}).addClass(\"highcharts-\"+a.coll.toLowerCase()+\"-labels\").add();if(j||a.isLinked){a.labelAlign=m(s.align||a.autoLabelAlign(s.rotation));p(e,function(b){f[b]?f[b].addLabel():f[b]=new Sa(a,b)});if(a.horiz&&!a.staggerLines&&w&&!s.rotation){for(q=a.reversed?[].concat(e).reverse():e;u<w;){j=\n\t[];y=!1;for(s=0;s<q.length;s++)z=q[s],A=(A=f[z].label&&f[z].label.getBBox())?A.width:0,B=s%u,A&&(z=a.translate(z),j[B]!==t&&z<j[B]&&(y=!0),j[B]=z+A);if(y)u++;else break}if(u>1)a.staggerLines=u}p(e,function(b){if(h===0||h===2||{1:\"left\",3:\"right\"}[h]===a.labelAlign)$=v(f[b].getLabelSize(),$)});if(a.staggerLines)$*=a.staggerLines,a.labelOffset=$}else for(q in f)f[q].destroy(),delete f[q];if(n&&n.text&&n.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(n.text,0,0,n.useHTML).attr({zIndex:7,rotation:n.rotation||\n\t0,align:n.textAlign||{low:\"left\",middle:\"center\",high:\"right\"}[n.align]}).addClass(\"highcharts-\"+this.coll.toLowerCase()+\"-title\").css(n.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?\"height\":\"width\"],o=m(n.margin,g?5:10),l=n.offset;a.axisTitle[b?\"show\":\"hide\"]()}a.offset=x*m(d.offset,J[h]);a.axisTitleMargin=m(l,$+o+($&&x*d.labels[g?\"y\":\"x\"]-na));J[h]=v(J[h],a.axisTitleMargin+k+x*a.offset);L[i]=v(L[i],T(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite,\n\td=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine([\"M\",e?this.left:f,e?d:this.top,\"L\",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=z(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*\n\tthis.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.horiz,c=a.reversed,d=a.chart,e=d.renderer,f=a.options,g=a.isLog,h=a.isLinked,i=a.tickPositions,j,k=a.axisTitle,l=a.ticks,o=a.minorTicks,n=a.alternateBands,s=f.stackLabels,m=f.alternateGridColor,J=a.tickmarkOffset,L=f.lineWidth,x=d.hasRendered&&r(a.oldMin)&&!isNaN(a.oldMin),q=a.hasData,v=a.showAxis,u,w=f.labels.overflow,y=a.justifyLabels=b&&w!==\n\t!1,z;a.labelEdge.length=0;a.justifyToPlot=w===\"justify\";p([l,o,n],function(a){for(var b in a)a[b].isActive=!1});if(q||h)if(a.minorTickInterval&&!a.categories&&p(a.getMinorTickPositions(),function(b){o[b]||(o[b]=new Sa(a,b,\"minor\"));x&&o[b].isNew&&o[b].render(null,!0);o[b].render(null,!1,1)}),i.length&&(j=i.slice(),(b&&c||!b&&!c)&&j.reverse(),y&&(j=j.slice(1).concat([j[0]])),p(j,function(b,c){y&&(c=c===j.length-1?0:c+1);if(!h||b>=a.min&&b<=a.max)l[b]||(l[b]=new Sa(a,b)),x&&l[b].isNew&&l[b].render(c,\n\t!0,0.1),l[b].render(c,!1,1)}),J&&a.min===0&&(l[-1]||(l[-1]=new Sa(a,-1,null,!0)),l[-1].render(-1))),m&&p(i,function(b,c){if(c%2===0&&b<a.max)n[b]||(n[b]=new R.PlotLineOrBand(a)),u=b+J,z=i[c+1]!==t?i[c+1]+J:a.max,n[b].options={from:g?ia(u):u,to:g?ia(z):z,color:m},n[b].render(),n[b].isActive=!0}),!a._addedPlotLB)p((f.plotLines||[]).concat(f.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0;p([l,o,n],function(a){var b,c,e=[],f=va?va.duration||500:0,g=function(){for(c=e.length;c--;)a[e[c]]&&\n\t!a[e[c]].isActive&&(a[e[c]].destroy(),delete a[e[c]])};for(b in a)if(!a[b].isActive)a[b].render(b,!1,0),a[b].isActive=!1,e.push(b);a===n||!d.hasRendered||!f?g():f&&setTimeout(g,f)});if(L)b=a.getLinePath(L),a.axisLine?a.axisLine.animate({d:b}):a.axisLine=e.path(b).attr({stroke:f.lineColor,\"stroke-width\":L,zIndex:7}).add(a.axisGroup),a.axisLine[v?\"show\":\"hide\"]();if(k&&v)k[k.isNew?\"attr\":\"animate\"](a.getTitlePosition()),k.isNew=!1;s&&s.enabled&&a.renderStackTotals();a.isDirty=!1},redraw:function(){var a=\n\tthis.chart.pointer;a&&a.reset(!0);this.render();p(this.plotLinesAndBands,function(a){a.render()});p(this.series,function(a){a.isDirty=!0})},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||W(b);for(d in c)Oa(c[d]),c[d]=null;p([b.ticks,b.minorTicks,b.alternateBands],function(a){Oa(a)});for(a=e.length;a--;)e[a].destroy();p(\"stackTotalGroup,axisLine,axisTitle,axisGroup,cross,gridGroup,labelGroup\".split(\",\"),function(a){b[a]&&(b[a]=b[a].destroy())});this.cross&&this.cross.destroy()},\n\tdrawCrosshair:function(a,b){if(this.crosshair)if((r(b)||!m(this.crosshair.snap,!0))===!1)this.hideCrosshair();else{var c,d=this.crosshair,e=d.animation;m(d.snap,!0)?r(b)&&(c=this.chart.inverted!=this.horiz?b.plotX:this.len-b.plotY):c=this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos;c=this.isRadial?this.getPlotLinePath(this.isXAxis?b.x:m(b.stackY,b.y)):this.getPlotLinePath(null,null,null,null,c);if(c===null)this.hideCrosshair();else if(this.cross)this.cross.attr({visibility:\"visible\"})[e?\"animate\":\n\t\"attr\"]({d:c},e);else{e={\"stroke-width\":d.width||1,stroke:d.color||\"#C0C0C0\",zIndex:d.zIndex||2};if(d.dashStyle)e.dashstyle=d.dashStyle;this.cross=this.chart.renderer.path(c).attr(e).add()}}},hideCrosshair:function(){this.cross&&this.cross.hide()}};q(la.prototype,{getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a);d&&c?d.push(c[4],c[5],c[1],c[2]):d=null;return d},addPlotBand:function(a){this.addPlotBandOrLine(a,\"plotBands\")},addPlotLine:function(a){this.addPlotBandOrLine(a,\n\t\"plotLines\")},addPlotBandOrLine:function(a,b){var c=(new R.PlotLineOrBand(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]||[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();p([c.plotLines||[],d.plotLines||[],c.plotBands||[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id===a&&ja(b,b[e])})}});la.prototype.getTimeTicks=function(a,b,\n\tc,d){var e=[],f={},g=E.global.useUTC,h,i=new Date(b-Ra),j=a.unitRange,k=a.count;if(r(b)){j>=A.second&&(i.setMilliseconds(0),i.setSeconds(j>=A.minute?0:k*T(i.getSeconds()/k)));if(j>=A.minute)i[Db](j>=A.hour?0:k*T(i[pb]()/k));if(j>=A.hour)i[Eb](j>=A.day?0:k*T(i[qb]()/k));if(j>=A.day)i[sb](j>=A.month?1:k*T(i[Xa]()/k));j>=A.month&&(i[Fb](j>=A.year?0:k*T(i[fb]()/k)),h=i[gb]());j>=A.year&&(h-=h%k,i[Gb](h));if(j===A.week)i[sb](i[Xa]()-i[rb]()+m(d,1));b=1;Ra&&(i=new Date(i.getTime()+Ra));h=i[gb]();for(var d=\n\ti.getTime(),l=i[fb](),o=i[Xa](),n=g?Ra:(864E5+i.getTimezoneOffset()*6E4)%864E5;d<c;)e.push(d),j===A.year?d=eb(h+b*k,0):j===A.month?d=eb(h,l+b*k):!g&&(j===A.day||j===A.week)?d=eb(h,l,o+b*k*(j===A.day?1:7)):d+=j*k,b++;e.push(d);p(vb(e,function(a){return j<=A.hour&&a%A.day===n}),function(a){f[a]=\"day\"})}e.info=q(a,{higherRanks:f,totalRange:j*k});return e};la.prototype.normalizeTimeTickInterval=function(a,b){var c=b||[[\"millisecond\",[1,2,5,10,20,25,50,100,200,500]],[\"second\",[1,2,5,10,15,30]],[\"minute\",\n\t[1,2,5,10,15,30]],[\"hour\",[1,2,3,4,6,8,12]],[\"day\",[1,2]],[\"week\",[1,2]],[\"month\",[1,2,3,4,6]],[\"year\",null]],d=c[c.length-1],e=A[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=A[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+A[c[g+1][0]])/2)break;e===A.year&&a<5*e&&(f=[1,2,5]);c=nb(a/e,f,d[0]===\"year\"?v(mb(a/e),1):1);return{unitRange:e,count:c,unitName:d[0]}};la.prototype.getLogTickPositions=function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=u(a),g=this.getLinearTickPositions(a,\n\tb,c);else if(a>=0.08)for(var f=T(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=za(ia(f)*e[h]),j>b&&(!d||k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=ia(b),c=ia(c),a=e[d?\"minorTickInterval\":\"tickInterval\"],a=m(a===\"auto\"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=nb(a,null,mb(a)),g=Ua(this.getLinearTickPositions(a,b,c),za),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=\n\ta;return g};var Mb=R.Tooltip=function(){this.init.apply(this,arguments)};Mb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=z(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label(\"\",0,0,b.shape||\"callout\",null,null,b.useHTML,null,\"tooltip\").attr({padding:e,fill:b.backgroundColor,\"stroke-width\":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});fa||this.label.shadow(b.shadow);this.shared=b.shared},\n\tdestroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden,h=e.followPointer||e.len>1;q(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:h?t:g?(2*f.anchorX+c)/3:c,anchorY:h?t:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(M(a-f.x)>1||M(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a=\n\tthis,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},m(this.options.hideDelay,500)),b&&p(b,function(a){a.setState()}),this.chart.hoverPoints=null},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=qa(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===t&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(p(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow?\n\t(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:h]);return Ua(c,u)},getPosition:function(a,b,c){var d=this.chart,e=this.distance,f={},g,h=[\"y\",d.chartHeight,b,c.plotY+d.plotTop],i=[\"x\",d.chartWidth,a,c.plotX+d.plotLeft],j=c.ttBelow||d.inverted&&!c.negative||!d.inverted&&c.negative,k=function(a,b,c,d){var g=c<d-e,b=d+e+c<b,c=d-e-c;d+=e;if(j&&b)f[a]=d;else if(!j&&g)f[a]=c;else if(g)f[a]=c;else if(b)f[a]=\n\td;else return!1},l=function(a,b,c,d){if(d<e||d>b-e)return!1;else f[a]=d<c/2?1:d>b-c/2?b-c-2:d-c/2},o=function(a){var b=h;h=i;i=b;g=a},n=function(){k.apply(0,h)!==!1?l.apply(0,i)===!1&&!g&&(o(!0),n()):g?f.x=f.y=0:(o(!0),n())};(d.inverted||this.len>1)&&o();n();return f},defaultFormatter:function(a){var b=this.points||qa(this),c=b[0].series,d;d=[a.tooltipHeaderFormatter(b[0])];p(b,function(a){c=a.series;d.push(c.tooltipFormatter&&c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))});\n\td.push(a.options.footerFormat||\"\");return d.join(\"\")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=this.shared;clearTimeout(this.hideTimer);this.followPointer=qa(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&p(h,function(a){a.setState()}),p(a,function(a){a.setState(\"hover\");j.push(a.getLabelConfig())}),h={x:a[0].category,\n\ty:a[0].y},h.points=j,this.len=j.length,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;this.distance=m(h.tooltipOptions.distance,16);i===!1?this.hide():(this.isHidden&&(bb(d),d.attr(\"opacity\",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||\"#606060\",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g,negative:a.negative,ttBelow:a.ttBelow}),this.isHidden=!1);D(c,\"tooltipRefresh\",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,\n\tc=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(u(c.x),u(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)},tooltipHeaderFormatter:function(a){var b=a.series,c=b.tooltipOptions,d=c.dateTimeLabelFormats,e=c.xDateFormat,f=b.xAxis,g=f&&f.options.type===\"datetime\"&&ha(a.key),c=c.headerFormat,f=f&&f.closestPointRange,h;if(g&&!e){if(f)for(h in A){if(A[h]>=f||A[h]<=A.day&&a.key%A[h]>0){e=d[h];break}}else e=d.day;e=e||d.year}g&&e&&(c=c.replace(\"{point.key}\",\"{point.key:\"+\n\te+\"}\"));return Ia(c,{point:a,series:b})}};var oa;$a=y.documentElement.ontouchstart!==t;var Wa=R.Pointer=function(a,b){this.init(a,b)};Wa.prototype={init:function(a,b){var c=b.chart,d=c.events,e=fa?\"\":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.hasZoom=f||e;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(R.Tooltip&&b.tooltip.enabled)a.tooltip=new Mb(a,b.tooltip),\n\tthis.followTouchMove=b.tooltip.followTouchMove;this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||window.event,a=Sb(a);if(!a.target)a.target=a.srcElement;d=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;if(!b)this.chartPosition=b=Rb(this.chart.container);d.pageX===t?(c=v(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return q(a,{chartX:u(c),chartY:u(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};p(this.chart.axes,function(c){b[c.isXAxis?\"xAxis\":\n\t\"yAxis\"].push({axis:c,value:c.toValue(a[c.horiz?\"chartX\":\"chartY\"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e,f,g=b.hoverPoint,h=b.hoverSeries,i,j,k=b.chartWidth,l=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!h||!h.noSharedTooltip)){f=[];i=c.length;for(j=0;j<i;j++)if(c[j].visible&&c[j].options.enableMouseTracking!==!1&&!c[j].noSharedTooltip&&\n\tc[j].singularTooltips!==!0&&c[j].tooltipPoints.length&&(e=c[j].tooltipPoints[l])&&e.series)e._dist=M(l-e.clientX),k=C(k,e._dist),f.push(e);for(i=f.length;i--;)f[i]._dist>k&&f.splice(i,1);if(f.length&&f[0].clientX!==this.hoverX)d.refresh(f,a),this.hoverX=f[0].clientX}c=h&&h.tooltipOptions.followPointer;if(h&&h.tracker&&!c){if((e=h.tooltipPoints[l])&&e!==g)e.onMouseOver(a)}else d&&c&&!d.isHidden&&(h=d.getAnchor([{}],a),d.updatePosition({plotX:h[0],plotY:h[1]}));if(d&&!this._onDocumentMouseMove)this._onDocumentMouseMove=\n\tfunction(a){if(V[oa])V[oa].pointer.onDocumentMouseMove(a)},K(y,\"mousemove\",this._onDocumentMouseMove);p(b.axes,function(b){b.drawCrosshair(a,m(e,g))})},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,f=e&&e.shared?b.hoverPoints:d;(a=a&&e&&f)&&qa(f)[0].plotX===t&&(a=!1);if(a)e.refresh(f),d&&d.setState(d.state,!0);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&e.hide();if(this._onDocumentMouseMove)W(y,\"mousemove\",this._onDocumentMouseMove),this._onDocumentMouseMove=null;\n\tp(b.axes,function(a){a.hideCrosshair()});this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;p(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},\n\tdrag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,o=this.mouseDownX,n=this.mouseDownY;d<h?d=h:d>h+j&&(d=h+j);e<i?e=i:e>i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(o-d,2)+Math.pow(n-e,2));if(this.hasDragged>10){l=b.isInsidePlot(o-h,n-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill||\n\t\"rgba(69,114,167,0.25)\",zIndex:7}).add();this.selectionMarker&&f&&(d-=o,this.selectionMarker.attr({width:M(d),x:(d>0?0:d)+o}));this.selectionMarker&&g&&(d=e-n,this.selectionMarker.attr({height:M(d),y:(d>0?0:d)+n}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},a=this.selectionMarker,e=a.attr?a.attr(\"x\"):a.x,f=a.attr?a.attr(\"y\"):a.y,g=a.attr?a.attr(\"width\"):\n\ta.width,h=a.attr?a.attr(\"height\"):a.height,i;if(this.hasDragged||c)p(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?e:f),b=a.toValue(b?e+g:f+h);!isNaN(c)&&!isNaN(b)&&(d[a.coll].push({axis:a,min:C(c,b),max:v(c,b)}),i=!0)}}),i&&D(b,\"selection\",d,function(a){b.zoom(q(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)G(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=\n\t!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){V[oa]&&V[oa].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,\"highcharts-tracker\")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){var a=V[oa];if(a)a.pointer.reset(),a.pointer.chartPosition=\n\tnull},onContainerMouseMove:function(a){var b=this.chart;oa=b.index;a=this.normalize(a);b.mouseIsDown===\"mousedown\"&&this.drag(a);(this.inClass(a.target,\"highcharts-tracker\")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=H(a,\"class\"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf(\"highcharts-container\")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,c=(a=a.relatedTarget||\n\ta.toElement)&&a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,\"highcharts-tooltip\")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,a=this.normalize(a);a.cancelBubble=!0;b.cancelClick||(c&&this.inClass(a.target,\"highcharts-tracker\")?(D(c.series,\"click\",q(a,{point:c})),b.hoverPoint&&c.firePointEvent(\"click\",a)):(q(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&D(b,\"click\",a)))},setDOMEvents:function(){var a=\n\tthis,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)};K(b,\"mouseleave\",a.onContainerMouseLeave);ab===1&&K(y,\"mouseup\",a.onDocumentMouseUp);if($a)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},ab===1&&K(y,\"touchend\",a.onDocumentTouchEnd)},destroy:function(){var a;W(this.chart.container,\"mouseleave\",this.onContainerMouseLeave);\n\tab||(W(y,\"mouseup\",this.onDocumentMouseUp),W(y,\"touchend\",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};q(R.Pointer.prototype,{pinchTranslate:function(a,b,c,d,e,f){(this.zoomHor||this.pinchHor)&&this.pinchTranslateDirection(!0,a,b,c,d,e,f);(this.zoomVert||this.pinchVert)&&this.pinchTranslateDirection(!1,a,b,c,d,e,f)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,j=a?\"x\":\"y\",k=a?\"X\":\"Y\",l=\"chart\"+k,o=a?\"width\":\"height\",n=i[\"plot\"+(a?\n\t\"Left\":\"Top\")],s,m,p=h||1,q=i.inverted,x=i.bounds[a?\"h\":\"v\"],r=b.length===1,v=b[0][l],u=c[0][l],t=!r&&b[1][l],w=!r&&c[1][l],y,c=function(){!r&&M(v-t)>20&&(p=h||M(u-w)/M(v-t));m=(n-u)/p+v;s=i[\"plot\"+(a?\"Width\":\"Height\")]/p};c();b=m;b<x.min?(b=x.min,y=!0):b+s>x.max&&(b=x.max-s,y=!0);y?(u-=0.8*(u-g[j][0]),r||(w-=0.8*(w-g[j][1])),c()):g[j]=[u,w];q||(f[j]=m-n,f[o]=s);f=q?1/p:p;e[o]=s;e[j]=b;d[q?a?\"scaleY\":\"scaleX\":\"scale\"+k]=p;d[\"translate\"+k]=f*n+(u-f*v)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,\n\te=b.followTouchMove,f=a.touches,g=f.length,h=b.lastValidTouch,i=b.hasZoom,j=b.selectionMarker,k={},l=g===1&&(b.inClass(a.target,\"highcharts-tracker\")&&c.runTrackerClick||c.runChartClick),o={};(i||e)&&!l&&a.preventDefault();Ua(f,function(a){return b.normalize(a)});if(a.type===\"touchstart\")p(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],p(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?\"h\":\"v\"],d=a.minPixelPadding,\n\te=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=C(e,f),e=v(e,f);b.min=C(a.pos,g-d);b.max=v(a.pos+a.len,e+d)}});else if(d.length){if(!j)b.selectionMarker=j=q({destroy:sa},c.plotBox);b.pinchTranslate(d,f,k,j,o,h);b.hasPinched=i;b.scaleGroups(k,o);!i&&e&&g===1&&this.runPointActions(b.normalize(a))}},onContainerTouchStart:function(a){var b=this.chart;oa=b.index;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()):\n\ta.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){V[oa]&&V[oa].pointer.drop(a)}});if(I.PointerEvent||I.MSPointerEvent){var ua={},zb=!!I.PointerEvent,Wb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in ua)ua.hasOwnProperty(a)&&b.push({pageX:ua[a].pageX,pageY:ua[a].pageY,target:ua[a].target});return b},Ab=function(a,b,c,d){a=a.originalEvent||a;if((a.pointerType===\"touch\"||\n\ta.pointerType===a.MSPOINTER_TYPE_TOUCH)&&V[oa])d(a),d=V[oa].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:sa,touches:Wb()})};q(Wa.prototype,{onContainerPointerDown:function(a){Ab(a,\"onContainerTouchStart\",\"touchstart\",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Ab(a,\"onContainerTouchMove\",\"touchmove\",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!ua[a.pointerId].target)ua[a.pointerId].target=a.currentTarget})},\n\tonDocumentPointerUp:function(a){Ab(a,\"onContainerTouchEnd\",\"touchend\",function(a){delete ua[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,zb?\"pointerdown\":\"MSPointerDown\",this.onContainerPointerDown);a(this.chart.container,zb?\"pointermove\":\"MSPointerMove\",this.onContainerPointerMove);a(y,zb?\"pointerup\":\"MSPointerUp\",this.onDocumentPointerUp)}});Ma(Wa.prototype,\"init\",function(a,b,c){a.call(this,b,c);(this.hasZoom||this.followTouchMove)&&G(b.container,{\"-ms-touch-action\":Q,\"touch-action\":Q})});\n\tMa(Wa.prototype,\"setDOMEvents\",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(K)});Ma(Wa.prototype,\"destroy\",function(a){this.batchMSEvents(W);a.call(this)})}var lb=R.Legend=function(a,b){this.init(a,b)};lb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=m(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=z(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=w(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY=\n\te-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.symbolWidth=m(b.symbolWidth,16),c.pages=[],c.render(),K(c.chart,\"endResize\",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.legendColor||a.color||\"#CCC\":g,g=a.options&&a.options.marker,i={fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in i.stroke=h,g=a.convertAttribs(g),\n\tg)d=g[j],d!==t&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;p([\"legendItem\",\"legendLine\",\"legendSymbol\",\"legendGroup\"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Pa(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},\n\tpositionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,p(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,G(f,{left:b.translateX+e.checkboxOffset+f.x-20+\"px\",top:g+\"px\",display:g>c-6&&g<c+d-6?\"\":Q}))})},renderTitle:function(){var a=this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,\"legend-title\").attr({zIndex:1}).css(b.style).add(this.group);\n\ta=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},renderItem:function(a){var b=this.chart,c=b.renderer,d=this.options,e=d.layout===\"horizontal\",f=this.symbolWidth,g=d.symbolPadding,h=this.itemStyle,i=this.itemHiddenStyle,j=this.padding,k=e?m(d.itemDistance,20):0,l=!d.rtl,o=d.width,n=d.itemMarginBottom||0,s=this.itemMarginTop,p=this.initialItemX,q=a.legendItem,r=a.series&&a.series.drawLegendSymbol?a.series:a,x=r.options,x=this.createCheckboxForItem&&\n\tx&&x.showCheckbox,t=d.useHTML;if(!q)a.legendGroup=c.g(\"legend-item\").attr({zIndex:1}).add(this.scrollGroup),r.drawLegendSymbol(this,a),a.legendItem=q=c.text(d.labelFormat?Ia(d.labelFormat,a):d.labelFormatter.call(a),l?f+g:-g,this.baseline,t).css(w(a.visible?h:i)).attr({align:l?\"left\":\"right\",zIndex:2}).add(a.legendGroup),this.setItemEvents&&this.setItemEvents(a,q,t,h,i),this.colorizeItem(a,a.visible),x&&this.createCheckboxForItem(a);c=q.getBBox();f=a.checkboxOffset=d.itemWidth||a.legendItemWidth||\n\tf+g+c.width+k+(x?20:0);this.itemHeight=g=u(a.legendItemHeight||c.height);if(e&&this.itemX-p+f>(o||b.chartWidth-2*j-p-d.x))this.itemX=p,this.itemY+=s+this.lastLineHeight+n,this.lastLineHeight=0;this.maxItemWidth=v(this.maxItemWidth,f);this.lastItemY=s+this.itemY+n;this.lastLineHeight=v(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=s+g+n,this.lastLineHeight=g);this.offsetWidth=o||v((e?this.itemX-p-k:f)+j,this.offsetWidth)},getAllItems:function(){var a=\n\t[];p(this.chart.series,function(b){var c=b.options;if(m(c.showInLegend,!r(c.linkedTo)?t:!1,!0))a=a.concat(b.legendItems||(c.legendType===\"point\"?b.data:b))});return a},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,o=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g(\"legend\").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);\n\ta.renderTitle();e=a.getAllItems();ob(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;p(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||o){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?\"attr\":\"animate\"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,\n\t\"stroke-width\":l||0,fill:o||Q}).add(d).shadow(j.shadow),i.isNew=!0;i[f?\"show\":\"hide\"]()}a.legendWidth=g;a.legendHeight=h;p(e,function(b){a.positionItem(b)});f&&d.align(q({width:g,height:h},j),!0,\"spacingBox\");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign===\"top\"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,j=e.navigation,k=m(j.animation,!0),l=j.arrowSize||12,o=this.nav,n=this.pages,\n\ts,q=this.allItems;e.layout===\"horizontal\"&&(f/=2);g&&(f=C(f,g));n.length=0;if(a>f&&!e.useHTML){this.clipHeight=h=f-20-this.titleHeight-this.padding;this.currentPage=m(this.currentPage,1);this.fullHeight=a;p(q,function(a,b){var c=a._legendItemPos[1],d=u(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(s||c)!==n[e-1])n.push(s||c),e++;b===q.length-1&&c+d-n[e-1]>h&&n.push(c);c!==s&&(s=c)});if(!i)i=b.clipRect=d.clipRect(0,this.padding,9999,0),b.contentGroup.clip(i);i.attr({height:h});if(!o)this.nav=\n\to=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol(\"triangle\",0,0,l,l).on(\"click\",function(){b.scroll(-1,k)}).add(o),this.pager=d.text(\"\",15,10).css(j.style).add(o),this.down=d.symbol(\"triangle-down\",0,0,l,l).on(\"click\",function(){b.scroll(1,k)}).add(o);b.scroll(0);a=f}else if(o)i.attr({height:c.chartHeight}),o.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation,\n\th=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==t&&Qa(b,this.chart),this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:\"visible\"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?\"default\":\"pointer\"}),i.attr({text:e+\"/\"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?\"default\":\"pointer\"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}};\n\tN=R.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||12;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-5-c/2,a.symbolWidth,c,a.options.symbolRadius||0).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline-u(e.fontMetrics(a.options.itemStyle.fontSize).b*0.3),g;if(b.lineWidth){g={\"stroke-width\":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=\n\te.path([\"M\",0,a,\"L\",d,a]).attr(g).add(f)}if(c&&c.enabled!==!1)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};(/Trident\\/7\\.0/.test(wa)||Ta)&&Ma(lb.prototype,\"positionItem\",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)});Ya.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=w(E,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray(\"margin\",d);this.spacing=this.splashArray(\"spacing\",\n\td);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=V.length;V.push(f);ab++;d.reflow!==!1&&K(f,\"load\",function(){f.initReflow()});if(e)for(g in e)K(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=fa?!1:m(d.animation,!0);f.pointCount=0;f.counters=new Bb;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=F[a.type||b.type||b.defaultSeriesType])||ra(17,!0);b=new b;b.init(this,\n\ta);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&p(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,o=l.isHidden(),n=[];Qa(a,this);o&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&\n\t(g=!0,a.isDirty)){h=!0;break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;p(c,function(a){a.isDirty&&a.options.legendType===\"point\"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,p(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();p(b,function(a){a.isDirty&&(i=!0)});p(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,n.push(function(){D(a,\"afterSetExtremes\",\n\tq(a.eventArgs,a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();p(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset(!0);l.draw();D(this,\"redraw\");o&&this.cloneRenderTo(!0);p(n,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===a)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===\n\ta)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=qa(b.xAxis||{}),b=b.yAxis=qa(b.yAxis||{});p(c,function(a,b){a.index=b;a.isX=!0});p(b,function(a,b){a.index=b});c=c.concat(b);p(c,function(b){new la(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];p(this.series,function(b){a=a.concat(vb(b.points||[],function(a){return a.selected}))});return a},getSelectedSeries:function(){return vb(this.series,function(a){return a.selected})},getStacks:function(){var a=\n\tthis;p(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks=a.stacks});p(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+m(b.options.stack,\"\")})},setTitle:function(a,b,c){var g;var d=this,e=d.options,f;f=e.title=w(e.title,a);g=e.subtitle=w(e.subtitle,b),e=g;p([[\"title\",a,f],[\"subtitle\",b,e]],function(a){var b=a[0],c=d[b],e=a[1],a=a[2];c&&e&&(d[b]=c=c.destroy());a&&a.text&&!c&&(d[b]=d.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,\n\t\"class\":\"highcharts-\"+b,zIndex:a.zIndex||4}).css(a.style).add())});d.layOutTitles(c)},layOutTitles:function(a){var b=0,c=this.title,d=this.subtitle,e=this.options,f=e.title,e=e.subtitle,g=this.spacingBox.width-44;if(c&&(c.css({width:(f.width||g)+\"px\"}).align(q({y:15},f),!1,\"spacingBox\"),!f.floating&&!f.verticalAlign))b=c.getBBox().height;d&&(d.css({width:(e.width||g)+\"px\"}).align(q({y:b+f.margin},e),!1,\"spacingBox\"),!e.floating&&!e.verticalAlign&&(b=Ka(b+d.getBBox().height)));c=this.titleOffset!==\n\tb;this.titleOffset=b;if(!this.isDirtyBox&&c)this.isDirtyBox=c,this.hasRendered&&m(a,!0)&&this.isDirtyBox&&this.redraw()},getChartSize:function(){var a=this.options.chart,b=a.width,a=a.height,c=this.renderToClone||this.renderTo;if(!r(b))this.containerWidth=jb(c,\"width\");if(!r(a))this.containerHeight=jb(c,\"height\");this.chartWidth=v(0,b||this.containerWidth||600);this.chartHeight=v(0,m(a,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;\n\ta?b&&(this.renderTo.appendChild(c),Pa(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),G(b,{position:\"absolute\",top:\"-9999px\",display:\"block\"}),b.style.setProperty&&b.style.setProperty(\"display\",\"block\",\"important\"),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e=\"highcharts-\"+tb++;if(Fa(a))this.renderTo=a=y.getElementById(a);\n\ta||ra(13,!0);c=z(H(a,\"data-highcharts-chart\"));!isNaN(c)&&V[c]&&V[c].hasRendered&&V[c].destroy();H(a,\"data-highcharts-chart\",this.index);a.innerHTML=\"\";!b.skipClone&&!a.offsetWidth&&this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=Y(Ja,{className:\"highcharts-container\"+(b.className?\" \"+b.className:\"\"),id:e},q({position:\"relative\",overflow:\"hidden\",width:c+\"px\",height:d+\"px\",textAlign:\"left\",lineHeight:\"normal\",zIndex:0,\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\"},\n\tb.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new ta(a,c,d,b.style,!0):new Za(a,c,d,b.style);fa&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,f=m(e.margin,20),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!r(d[0]))this.plotTop=v(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i===\"right\"){if(!r(d[1]))this.marginRight=\n\tv(this.marginRight,c.legendWidth-g+f+a[1])}else if(i===\"left\"){if(!r(d[3]))this.plotLeft=v(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j===\"top\"){if(!r(d[0]))this.plotTop=v(this.plotTop,c.legendHeight+h+f+a[0])}else if(j===\"bottom\"&&!r(d[2]))this.marginBottom=v(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&p(this.axes,function(a){a.getOffset()});r(d[3])||\n\t(this.plotLeft+=b[3]);r(d[0])||(this.plotTop+=b[0]);r(d[2])||(this.marginBottom+=b[2]);r(d[1])||(this.marginRight+=b[1]);this.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||jb(d,\"width\"),f=c.height||jb(d,\"height\"),c=a?a.target:I,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&e&&f&&(c===I||c===y)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=setTimeout(d,100):d();b.containerWidth=\n\te;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};K(I,\"resize\",b);K(a,\"destroy\",function(){W(I,\"resize\",b)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&D(d,\"endResize\",null,function(){d.isResizing-=1})};Qa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(r(a))d.chartWidth=e=v(0,u(a)),d.hasUserSize=!!e;if(r(b))d.chartHeight=f=v(0,u(b));(va?kb:G)(d.container,{width:e+\"px\",height:f+\"px\"},va);d.setChartSize(!0);d.renderer.setSize(e,\n\tf,c);d.maxTicks=null;p(d.axes,function(a){a.isDirty=!0;a.setScale()});p(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;D(d,\"resize\");va===!1?g():setTimeout(g,va&&va.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=u(this.plotLeft);this.plotTop=j=u(this.plotTop);this.plotWidth=\n\tk=v(0,u(d-i-this.marginRight));this.plotHeight=l=v(0,u(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*T(this.plotBorderWidth/2);b=Ka(v(d,h[3])/2);c=Ka(v(d,h[0])/2);this.clipBox={x:b,y:c,width:T(this.plotSizeX-v(d,h[1])/2-b),height:T(this.plotSizeY-v(d,h[2])/2-c)};a||p(this.axes,function(a){a.setAxisSize();\n\ta.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=m(b[0],a[0]);this.marginRight=m(b[1],a[1]);this.marginBottom=m(b[2],a[2]);this.plotLeft=m(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,\n\to=a.plotBorderWidth||0,n,s=this.plotLeft,m=this.plotTop,p=this.plotWidth,q=this.plotHeight,r=this.plotBox,v=this.clipRect,u=this.clipBox;n=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp({width:c-n,height:d-n}));else{e={fill:j||Q};if(i)e.stroke=a.borderColor,e[\"stroke-width\"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass(\"highcharts-background\").add().shadow(a.shadow)}if(k)f?f.animate(r):this.plotBackground=b.rect(s,m,p,q,0).attr({fill:k}).add().shadow(a.plotShadow);\n\tif(l)h?h.animate(r):this.plotBGImage=b.image(l,s,m,p,q).add();v?v.animate({width:u.width,height:u.height}):this.clipRect=b.clipRect(u);if(o)g?g.animate(g.crisp({x:s,y:m,width:p,height:q})):this.plotBorder=b.rect(s,m,p,q,0,-o).attr({stroke:a.plotBorderColor,\"stroke-width\":o,fill:Q,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;p([\"inverted\",\"angular\",\"polar\"],function(g){c=F[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];\n\tfor(e=d&&d.length;!f&&e--;)(c=F[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;p(b,function(a){a.linkedSeries.length=0});p(b,function(b){var d=b.options.linkedTo;if(Fa(d)&&(d=d===\":previous\"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},renderSeries:function(){p(this.series,function(a){a.translate();a.setTooltipPoints&&a.setTooltipPoints();a.render()})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,e=d.labels,f=\n\td.credits,g;a.setTitle();a.legend=new lb(a,d.legend);a.getStacks();p(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;p(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&p(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g(\"series-group\").attr({zIndex:3}).add();a.renderSeries();e.items&&p(e.items,function(b){var d=q(e.style,b.style),f=z(d.left)+a.plotLeft,g=z(d.top)+a.plotTop+12;delete d.left;delete d.top;\n\tc.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on(\"click\",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;D(a,\"destroy\");V[a.index]=t;ab--;a.renderTo.removeAttribute(\"data-highcharts-chart\");W(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();\n\tp(\"title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer\".split(\",\"),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML=\"\",W(d),f&&Pa(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!aa&&I==I.top&&y.readyState!==\"complete\"||fa&&!I.canvg?(fa?Lb.push(function(){a.firstRender()},a.options.global.canvasToolsURL):y.attachEvent(\"onreadystatechange\",\n\tfunction(){y.detachEvent(\"onreadystatechange\",a.firstRender);y.readyState===\"complete\"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender()){a.getContainer();D(a,\"init\");a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();p(b.series||[],function(b){a.initSeries(b)});a.linkSeries();D(a,\"beforeRender\");if(R.Pointer)a.pointer=new Wa(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);p(a.callbacks,function(b){b.apply(a,[a])});a.cloneRenderTo(!0);\n\tD(a,\"load\")}},splashArray:function(a,b){var c=b[a],c=ca(c)?c:[c,c,c,c];return[m(b[a+\"Top\"],c[0]),m(b[a+\"Right\"],c[1]),m(b[a+\"Bottom\"],c[2]),m(b[a+\"Left\"],c[3])]}};Ya.prototype.callbacks=[];X=R.CenteredSeriesMixin={getCenter:function(){var a=this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[m(b[0],\"50%\"),m(b[1],\"50%\"),a.size||\"100%\",a.innerSize||0],g=C(e,f),h;return Ua(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*z(a)/100:\n\ta)+(d?c:0)})}};var Ea=function(){};Ea.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Ea.prototype.optionsToObject.call(this,a);q(this,a);this.options=this.options?q(this.options,a):a;if(d)this.y=this[d];if(this.x===\n\tt&&c)this.x=b===t?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.pointArrayMap||[\"y\"],e=d.length,f=0,g=0;if(typeof a===\"number\"||a===null)b[d[0]]=a;else if(La(a)){if(a.length>e){c=typeof a[0];if(c===\"string\")b.name=a[0];else if(c===\"number\")b.x=a[0];f++}for(;g<e;)b[d[g++]]=a[f++]}else if(typeof a===\"object\"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers=!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;\n\tif(b&&(this.setState(),ja(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)W(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a=\"graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup\".split(\",\"),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,\n\tpoint:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=m(c.valueDecimals,\"\"),e=c.valuePrefix||\"\",f=c.valueSuffix||\"\";p(b.pointArrayMap||[\"y\"],function(b){b=\"{point.\"+b;if(e||f)a=a.replace(b+\"}\",e+b+\"}\"+f);a=a.replace(b+\"}\",b+\":,.\"+d+\"f}\")});return Ia(a,{point:this,series:this.series})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&\n\tthis.importEvents();a===\"click\"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});D(this,a,b,c)}};var O=function(){};O.prototype={isCartesian:!0,type:\"line\",pointClass:Ea,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:\"lineColor\",\"stroke-width\":\"lineWidth\",fill:\"fillColor\",r:\"radius\"},axisTypes:[\"xAxis\",\"yAxis\"],colorCounter:0,parallelArrays:[\"x\",\"y\"],init:function(a,b){var c=this,d,e,f=a.series,g=function(a,b){return m(a.options.index,a._i)-m(b.options.index,\n\tb._i)};c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();q(c,{name:b.name,state:\"\",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if(fa)b.animation=!1;e=b.events;for(d in e)K(c,d,e[d]);if(e&&e.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor();c.getSymbol();p(c.parallelArrays,function(a){c[a+\"Data\"]=[]});c.setData(b.data,!1);if(c.isCartesian)a.hasCartesianSeries=!0;f.push(c);c._i=f.length-1;ob(f,g);this.yAxis&&\n\tob(this.yAxis.series,g);p(f,function(a,b){a.index=b;a.name=a.name||\"Series \"+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;p(a.axisTypes||[],function(e){p(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]!==t&&b[e]===d.id||b[e]===t&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});!a[e]&&a.optionalAxis!==e&&ra(18,!0)})},updateParallelArrays:function(a,b){var c=a.series,d=arguments;p(c.parallelArrays,typeof b===\"number\"?function(d){var f=d===\"y\"&&c.toYData?c.toYData(a):a[d];\n\tc[d+\"Data\"][b]=f}:function(a){Array.prototype[b].apply(c[a+\"Data\"],Array.prototype.slice.call(d,2))})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=m(b,a.pointStart,0);this.pointInterval=m(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else p(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+\n\t1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=w(e,c.series,a);this.tooltipOptions=w(E.tooltip,E.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;return c},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,\n\te;e=a.color||ba[this.type].color;if(!e&&!a.colorByPoint)r(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)r(a._symbolIndex)?a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:N.drawLineMarker,\n\tsetData:function(a,b,c,d){var e=this,f=e.points,g=f&&f.length||0,h,i=e.options,j=e.chart,k=null,l=e.xAxis,o=l&&!!l.categories,n=e.tooltipPoints,s=i.turboThreshold,q=this.xData,r=this.yData,v=(h=e.pointArrayMap)&&h.length,a=a||[];h=a.length;b=m(b,!0);if(d!==!1&&h&&g===h&&!e.cropped&&!e.hasGroupedData)p(a,function(a,b){f[b].update(a,!1)});else{e.xIncrement=null;e.pointRange=o?1:i.pointRange;e.colorCounter=0;p(this.parallelArrays,function(a){e[a+\"Data\"].length=0});if(s&&h>s){for(c=0;k===null&&c<h;)k=\n\ta[c],c++;if(ha(k)){o=m(i.pointStart,0);i=m(i.pointInterval,1);for(c=0;c<h;c++)q[c]=o,r[c]=a[c],o+=i;e.xIncrement=o}else if(La(k))if(v)for(c=0;c<h;c++)i=a[c],q[c]=i[0],r[c]=i.slice(1,v+1);else for(c=0;c<h;c++)i=a[c],q[c]=i[0],r[c]=i[1];else ra(12)}else for(c=0;c<h;c++)if(a[c]!==t&&(i={series:e},e.pointClass.prototype.applyOptions.apply(i,[a[c]]),e.updateParallelArrays(i,c),o&&i.name))l.names[i.x]=i.name;Fa(r[0])&&ra(14,!0);e.data=[];e.options.data=a;for(c=g;c--;)f[c]&&f[c].destroy&&f[c].destroy();\n\tif(n)n.length=0;if(l)l.minRange=l.userMinRange;e.isDirty=e.isDirtyData=j.isDirtyBox=!0;c=!1}b&&j.redraw(c)},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i=this.options,j=i.cropThreshold,k=0,l=this.isCartesian,o,n;if(l&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(l&&this.sorted&&(!j||d>j||this.forceCrop))if(o=h.min,n=h.max,b[d-1]<o||b[0]>n)b=[],c=[];else if(b[0]<o||b[d-1]>n)e=this.cropData(this.xData,this.yData,o,n),b=e.xData,c=e.yData,\n\te=e.start,f=!0,k=b.length;for(d=b.length-1;d>=0;d--)a=b[d]-b[d-1],!f&&b[d]>o&&b[d]<n&&k++,a>0&&(g===t||a<g)?g=a:a<0&&this.requireSorting&&ra(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c;this.activePointCount=k;if(i.pointRange===null)this.pointRange=g||1;this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=m(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>=c){f=v(0,i-h);break}for(;i<e;i++)if(a[i]>d){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,\n\tg),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],o;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(o=0;o<g;o++)i=h+o,j?l[o]=(new f).init(this,[d[o]].concat(qa(e[o]))):(b[i]?k=b[i]:a[i]!==t&&(b[i]=k=(new f).init(this,a[i],d[o])),l[o]=k);if(b&&(g!==(c=b.length)||j))for(o=0;o<c;o++)if(o===h&&!j&&(o+=g),b[o])b[o].destroyElements(),b[o].plotX=\n\tt;this.data=b;this.points=l},getExtremes:function(a){var b=this.yAxis,c=this.processedXData,d,e=[],f=0;d=this.xAxis.getExtremes();var g=d.min,h=d.max,i,j,k,l,a=a||this.stackedYData||this.processedYData;d=a.length;for(l=0;l<d;l++)if(j=c[l],k=a[l],i=k!==null&&k!==t&&(!b.isLog||k.length||k>0),j=this.getExtremesFromAll||this.cropped||(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=m(void 0,Na(e));this.dataMax=m(void 0,Ba(e))},translate:function(){this.processedXData||\n\tthis.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i===\"between\"||ha(i),k=a.threshold,a=0;a<g;a++){var l=f[a],o=l.x,n=l.y,s=l.low,p=b&&e.stacks[(this.negStacks&&n<k?\"-\":\"\")+this.stackKey];if(e.isLog&&n<=0)l.y=n=null;l.plotX=c.translate(o,0,0,0,1,i,this.type===\"flags\");if(b&&this.visible&&p&&p[o])p=p[o],n=p.points[this.index+\",\"+a],s=n[0],n=n[1],s===0&&(s=m(k,e.min)),\n\te.isLog&&s<=0&&(s=null),l.total=l.stackTotal=p.total,l.percentage=p.total&&l.y/p.total*100,l.stackY=n,p.setOffset(this.pointXOffset||0,this.barW||0);l.yBottom=r(s)?e.translate(s,0,1,0,1):null;h&&(n=this.modifyValue(n,l));l.plotY=typeof n===\"number\"&&n!==Infinity?e.translate(n,0,1,0,1):t;l.clientX=j?c.translate(o,0,0,0,1):l.plotX;l.negative=l.y<(k||0);l.category=d&&d[l.x]!==t?d[l.x]:l.x}this.getSegments()},animate:function(a){var b=this.chart,c=b.renderer,d;d=this.options.animation;var e=this.clipBox||\n\tb.clipBox,f=b.inverted,g;if(d&&!ca(d))d=ba[this.type].animation;g=[\"_sharedClip\",d.duration,d.easing,e.height].join(\",\");a?(a=b[g],d=b[g+\"m\"],a||(b[g]=a=c.clipRect(q(e,{width:0})),b[g+\"m\"]=d=c.clipRect(-99,f?-b.plotLeft:-b.plotTop,99,f?b.chartWidth:b.chartHeight)),this.group.clip(a),this.markerGroup.clip(d),this.sharedClipKey=g):((a=b[g])&&a.animate({width:b.plotSizeX},d),b[g+\"m\"]&&b[g+\"m\"].animate({width:b.plotSizeX+99},d),this.animate=null)},afterAnimate:function(){var a=this.chart,b=this.sharedClipKey,\n\tc=this.group,d=this.clipBox;if(c&&this.options.clip!==!1){if(!b||!d)c.clip(d?a.renderer.clipRect(d):a.clipRect);this.markerGroup.clip()}D(this,\"afterAnimate\");setTimeout(function(){b&&a[b]&&(d||(a[b]=a[b].destroy()),a[b+\"m\"]&&(a[b+\"m\"]=a[b+\"m\"].destroy()))},100)},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,j,k;d=this.options.marker;var l=this.pointAttr[\"\"],o,n=this.markerGroup,s=m(d.enabled,this.activePointCount<0.5*this.xAxis.len/d.radius);if(d.enabled!==!1||this._hasPointMarkers)for(f=\n\tb.length;f--;)if(g=b[f],d=T(g.plotX),e=g.plotY,k=g.graphic,i=g.marker||{},a=s&&i.enabled===t||i.enabled,o=c.isInsidePlot(u(d),e,c.inverted),a&&e!==t&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?\"select\":\"\"]||l,h=a.r,i=m(i.symbol,this.symbol),j=i.indexOf(\"url\")===0,k)k[o?\"show\":\"hide\"](!0).animate(q({x:d-h,y:e-h},k.symbolName?{width:2*h,height:2*h}:{}));else{if(o&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(n)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,\n\tb,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=m(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=ba[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color;f={stroke:g,fill:g};var h=a.points||[],i,j=[],k,l=a.pointAttrToOptions;k=a.hasPointSpecificOptions;var o=b.negativeColor,n=c.lineColor,s=c.fillColor;i=b.turboThreshold;var m;b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=\n\te.color||ya(e.color||g).brighten(e.brightness).get();j[\"\"]=a.convertAttribs(c,f);p([\"hover\",\"select\"],function(b){j[b]=a.convertAttribs(d[b],j[\"\"])});a.pointAttr=j;g=h.length;if(!i||g<i||k)for(;g--;){i=h[g];if((c=i.options&&i.options.marker||i.options)&&c.enabled===!1)c.radius=0;if(i.negative&&o)i.color=i.fillColor=o;k=b.colorByPoint||i.color;if(i.options)for(m in l)r(c[l[m]])&&(k=!0);if(k){c=c||{};k=[];d=c.states||{};f=d.hover=d.hover||{};if(!b.marker)f.color=f.color||!i.options.color&&e.color||\n\tya(i.color).brighten(f.brightness||e.brightness).get();f={color:i.color};if(!s)f.fillColor=i.color;if(!n)f.lineColor=i.color;k[\"\"]=a.convertAttribs(q(f,c),j[\"\"]);k.hover=a.convertAttribs(d.hover,j.hover,k[\"\"]);k.select=a.convertAttribs(d.select,j.select,k[\"\"])}else k=j;i.pointAttr=k}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\\/533/.test(wa),d,e,f=a.data||[],g,h,i;D(a,\"destroy\");W(a);p(a.axisTypes||[],function(b){if(i=a[b])ja(i.series,a),i.isDirty=i.forceRedraw=!0});a.legendItem&&a.chart.legend.destroyItem(a);\n\tfor(e=f.length;e--;)(g=f[e])&&g.destroy&&g.destroy();a.points=null;clearTimeout(a.animationTimeout);p(\"area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip\".split(\",\"),function(b){a[b]&&(d=c&&b===\"group\"?\"hide\":\"destroy\",a[b][d]())});if(b.hoverSeries===a)b.hoverSeries=null;ja(b.series,a);for(h in a)delete a[h]},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;p(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,\n\te,f)):(c.push(f?\"L\":\"M\"),d&&f&&(i=a[f-1],d===\"right\"?c.push(i.plotX,h):d===\"center\"?c.push((i.plotX+g)/2,i.plotY,(i.plotX+g)/2,h):c.push(g,i.plotY)),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a=this,b=[],c,d=[];p(a.segments,function(e){c=a.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[[\"graph\",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=b.linecap!==\"square\",g=this.getGraphPath(),\n\th=b.negativeColor;h&&c.push([\"graphNeg\",h]);p(c,function(c,h){var k=c[0],l=a[k];if(l)bb(l),l.animate({d:g});else if(d&&g.length)l={stroke:c[1],\"stroke-width\":d,fill:Q,zIndex:1},e?l.dashstyle=e:f&&(l[\"stroke-linecap\"]=l[\"stroke-linejoin\"]=\"round\"),a[k]=a.chart.renderer.path(g).attr(l).add(a.group).shadow(!h&&b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=\n\tb.chartHeight,k=v(e,j),l=this.yAxis;if(d&&(f||g)){d=u(l.toPixels(a.threshold||0,!0));d<0&&(k-=d);a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},\n\tinvertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};p([\"group\",\"markerGroup\"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)K(c,\"resize\",a),K(b,\"destroy\",function(){W(c,\"resize\",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?\"attr\":\"animate\"](this.getPlotBox());return f},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;\n\tif(a.inverted)b=c,c=this.xAxis;return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=(c=d.animation)&&!!a.animate&&b.renderer.isSVG&&m(c.duration,500)||0,f=a.visible?\"visible\":\"hidden\",g=d.zIndex,h=a.hasRendered,i=b.seriesGroup;c=a.plotGroup(\"group\",\"series\",f,g,i);a.markerGroup=a.plotGroup(\"markerGroup\",\"markers\",f,g,i);e&&a.animate(!0);a.getAttribs();c.inverted=a.isCartesian?b.inverted:!1;a.drawGraph&&(a.drawGraph(),\n\ta.clipNeg());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();d.clip!==!1&&!a.sharedClipKey&&!h&&c.clip(b.clipRect);e&&a.animate();if(!h)e?a.animationTimeout=setTimeout(function(){a.afterAnimate()},e):a.afterAnimate();a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,\n\theight:a.plotHeight}),c.animate({translateX:m(d&&d.left,a.plotLeft),translateY:m(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints&&this.setTooltipPoints(!0);this.render();b&&D(this,\"updatedData\")}};Hb.prototype={destroy:function(){Oa(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ia(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:\"hidden\"}):this.label=this.axis.chart.renderer.text(c,null,null,b.useHTML).css(b.style).attr({align:this.textAlign,\n\trotation:b.rotation,visibility:\"hidden\"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(c.usePercentage?100:this.total,0,0,0,1),c=c.translate(0),c=M(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e[this.options.crop===!1||d.isInsidePlot(f.x,f.y)?\"show\":\"hide\"](!0)}};la.prototype.buildStacks=function(){var a=\n\tthis.series,b=m(this.options.reversedStacks,!0),c=a.length;if(!this.isXAxis){for(this.usePercentage=!1;c--;)a[b?c:a.length-c-1].setStackedPoints();if(this.usePercentage)for(c=0;c<a.length;c++)a[c].setPercentStacks()}};la.prototype.renderStackTotals=function(){var a=this.chart,b=a.renderer,c=this.stacks,d,e,f=this.stackTotalGroup;if(!f)this.stackTotalGroup=f=b.g(\"stack-labels\").attr({visibility:\"visible\",zIndex:6}).add();f.translate(a.plotLeft,a.plotTop);for(d in c)for(e in a=c[d],a)a[e].render(f)};\n\tO.prototype.setStackedPoints=function(){if(this.options.stacking&&!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.stack,e=e.stacking,h=this.stackKey,i=\"-\"+h,j=this.negStacks,k=this.yAxis,l=k.stacks,o=k.oldStacks,n,m,p,q,r,u;for(q=0;q<d;q++){r=a[q];u=b[q];p=this.index+\",\"+q;m=(n=j&&u<f)?i:h;l[m]||(l[m]={});if(!l[m][r])o[m]&&o[m][r]?(l[m][r]=o[m][r],l[m][r].total=null):l[m][r]=new Hb(k,\n\tk.options.stackLabels,n,r,g);m=l[m][r];m.points[p]=[m.cum||0];e===\"percent\"?(n=n?h:i,j&&l[n]&&l[n][r]?(n=l[n][r],m.total=n.total=v(n.total,m.total)+M(u)||0):m.total=da(m.total+(M(u)||0))):m.total=da(m.total+(u||0));m.cum=(m.cum||0)+(u||0);m.points[p].push(m.cum);c[q]=m.cum}if(e===\"percent\")k.usePercentage=!0;this.stackedYData=c;k.oldStacks={}}};O.prototype.setPercentStacks=function(){var a=this,b=a.stackKey,c=a.yAxis.stacks,d=a.processedXData;p([b,\"-\"+b],function(b){var e;for(var f=d.length,g,h;f--;)if(g=\n\td[f],e=(h=c[b]&&c[b][g])&&h.points[a.index+\",\"+f],g=e)h=h.total?100/h.total:0,g[0]=da(g[0]*h),g[1]=da(g[1]*h),a.stackedYData[f]=g[1]})};q(Ya.prototype,{addSeries:function(a,b,c){var d,e=this;a&&(b=m(b,!0),D(e,\"addSeries\",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?\"xAxis\":\"yAxis\",f=this.options;new la(this,w(a,{index:this[e].length,isX:b}));f[e]=qa(f[e]||{});f[e].push(a);m(c,!0)&&this.redraw(d)},showLoading:function(a){var b=\n\tthis.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv=c=Y(Ja,{className:\"highcharts-loading\"},q(d.style,{zIndex:10,display:Q}),this.container),this.loadingSpan=Y(\"span\",null,d.labelStyle,c);this.loadingSpan.innerHTML=a||b.lang.loading;if(!this.loadingShown)G(c,{opacity:0,display:\"\",left:this.plotLeft+\"px\",top:this.plotTop+\"px\",width:this.plotWidth+\"px\",height:this.plotHeight+\"px\"}),kb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=\n\tthis.options,b=this.loadingDiv;b&&kb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){G(b,{display:Q})}});this.loadingShown=!1}});q(Ea.prototype,{update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=e.chart,j=e.options,b=m(b,!0);d.firePointEvent(\"update\",{options:a},function(){d.applyOptions(a);if(ca(a)){e.getAttribs();if(f)a&&a.marker&&a.marker.symbol?d.graphic=f.destroy():f.attr(d.pointAttr[d.state||\"\"]);if(a&&a.dataLabels&&d.dataLabel)d.dataLabel=d.dataLabel.destroy()}g=\n\tDa(d,h);e.updateParallelArrays(d,g);j.data[g]=d.options;e.isDirty=e.isDirtyData=!0;if(!e.fixedBox&&e.hasCartesianSeries)i.isDirtyBox=!0;j.legendType===\"point\"&&i.legend.destroyItem(d);b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.points,f=d.chart,g,h=d.data;Qa(b,f);a=m(a,!0);c.firePointEvent(\"remove\",null,function(){g=Da(c,h);h.length===e.length&&e.splice(g,1);h.splice(g,1);d.options.data.splice(g,1);d.updateParallelArrays(c,\"splice\",g,1);c.destroy();d.isDirty=!0;d.isDirtyData=\n\t!0;a&&f.redraw()})}});q(O.prototype,{addPoint:function(a,b,c,d){var e=this.options,f=this.data,g=this.graph,h=this.area,i=this.chart,j=this.xAxis&&this.xAxis.names,k=g&&g.shift||0,l=e.data,o,n=this.xData;Qa(d,i);c&&p([g,h,this.graphNeg,this.areaNeg],function(a){if(a)a.shift=k+1});if(h)h.isArea=!0;b=m(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);g=d.x;h=n.length;if(this.requireSorting&&g<n[h-1])for(o=!0;h&&n[h-1]>g;)h--;this.updateParallelArrays(d,\"splice\",h,0,0);this.updateParallelArrays(d,\n\th);if(j)j[g]=d.name;l.splice(h,0,a);o&&(this.data.splice(h,0,null),this.processData());e.legendType===\"point\"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),this.updateParallelArrays(d,\"shift\"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},remove:function(a,b){var c=this,d=c.chart,a=m(a,!0);if(!c.isRemoving)c.isRemoving=!0,D(c,\"remove\",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=\n\t!1},update:function(a,b){var c=this.chart,d=this.type,e=F[d].prototype,f,a=w(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(f in e)e.hasOwnProperty(f)&&(this[f]=t);q(this,F[a.type||d].prototype);this.init(c,a);m(b,!0)&&c.redraw(!1)}});q(la.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=w(this.userOptions,a);this.destroy(!0);this._addedPlotLB=t;this.init(c,q(a,{events:t}));c.isDirtyBox=\n\t!0;m(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);ja(b.axes,this);ja(b[c],this);b.options[c].splice(this.options.index,1);p(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;m(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});ga=ka(O);F.line=ga;ba.area=w(S,{threshold:0});var pa=ka(O,{type:\"area\",getSegments:function(){var a=\n\t[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,o,n;if(this.options.stacking&&!this.cropped){for(o=0;o<j.length;o++)g[j[o].x]=j[o];for(n in f)f[n].total!==null&&c.push(+n);c.sort(function(a,b){return a-b});p(c,function(a){if(!k||g[a]&&g[a].y!==null)g[a]?b.push(g[a]):(h=d.translate(a),l=f[a].percent?f[a].total?f[a].cum*100/f[a].total:0:f[a].cum,i=e.toPixels(l,!0),b.push({y:null,plotX:h,clientX:h,plotY:i,yBottom:i,onMouseOver:sa}))});\n\tb.length&&a.push(b)}else O.prototype.getSegments.call(this),a=this.segments;this.segments=a},getSegmentPath:function(a){var b=O.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push(\"L\",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-1;d>=0;d--)g=m(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},\n\tcloseSegment:function(a,b,c){a.push(\"L\",b[b.length-1].plotX,c,\"L\",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];O.prototype.drawGraph.apply(this);var a=this,b=this.areaPath,c=this.options,d=c.negativeColor,e=c.negativeFillColor,f=[[\"area\",this.color,c.fillColor]];(d||e)&&f.push([\"areaNeg\",d,e]);p(f,function(d){var e=d[0],f=a[e];f?f.animate({d:b}):a[e]=a.chart.renderer.path(b).attr({fill:m(d[2],ya(d[1]).setOpacity(m(c.fillOpacity,0.75)).get()),zIndex:0}).add(a.group)})},drawLegendSymbol:N.drawRectangle});\n\tF.area=pa;ba.spline=w(S);ga=ka(O,{type:\"spline\",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(f&&g){a=f.plotY;j=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*e+a)/2.5;j=(1.5*d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=v(a,e),k=2*e-i):i<a&&i<e&&(i=C(a,e),k=2*e-i);k>g&&k>e?(k=v(g,e),i=2*e-k):k<g&&k<e&&(k=C(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=[\"C\",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=\n\tf.rightContY=null):b=[\"M\",d,e];return b}});F.spline=ga;ba.areaspline=w(ba.area);pa=pa.prototype;ga=ka(ga,{type:\"areaspline\",closedStacks:!0,getSegmentPath:pa.getSegmentPath,closeSegment:pa.closeSegment,drawGraph:pa.drawGraph,drawLegendSymbol:N.drawRectangle});F.areaspline=ga;ba.column=w(S,{borderColor:\"#FFFFFF\",borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1,halo:!1},select:{color:\"#C0C0C0\",borderColor:\"#000000\",\n\tshadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},stickyTracking:!1,tooltip:{distance:6},threshold:0});ga=ka(O,{type:\"column\",pointAttrToOptions:{stroke:\"borderColor\",fill:\"color\",r:\"borderRadius\"},cropShoulder:0,trackerGroups:[\"group\",\"dataLabelsGroup\"],negStacks:!0,init:function(){O.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=\n\tc.reversed,f,g={},h,i=0;b.grouping===!1?i=1:p(a.chart.series,function(b){var c=b.options,e=b.yAxis;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos===e.pos)c.stacking?(f=b.stackKey,g[f]===t&&(g[f]=i++),h=g[f]):c.grouping!==!1&&(h=i++),b.columnIndex=h});var c=C(M(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||c.tickInterval||1),c.len),j=c*b.groupPadding,k=(c-2*j)/i,l=b.pointWidth,b=r(l)?(k-l)/2:k*b.pointPadding,l=m(l,k-2*b);return a.columnMetrics={width:l,offset:b+(j+((e?i-(a.columnIndex||\n\t0):a.columnIndex)||0)*k-c/2)*(e?-1:1)}},translate:function(){var a=this,b=a.chart,c=a.options,d=a.borderWidth=m(c.borderWidth,a.activePointCount>0.5*a.xAxis.len?0:1),e=a.yAxis,f=a.translatedThreshold=e.getThreshold(c.threshold),g=m(c.minPointLength,5),c=a.getColumnMetrics(),h=c.width,i=a.barW=Ka(v(h,1+2*d)),j=a.pointXOffset=c.offset,k=-(d%2?0.5:0),l=d%2?0.5:1;b.renderer.isVML&&b.inverted&&(l+=1);O.prototype.translate.apply(a);p(a.points,function(c){var d=m(c.yBottom,f),p=C(v(-999-d,c.plotY),e.len+\n\t999+d),q=c.plotX+j,r=i,t=C(p,d),x;x=v(p,d)-t;M(x)<g&&g&&(x=g,t=u(M(t-f)>g?d-g:f-(e.translate(c.y,0,1,0,1)<=f?g:0)));c.barX=q;c.pointWidth=h;c.tooltipPos=b.inverted?[e.len-p,a.xAxis.len-q-r/2]:[q+r/2,p];d=M(q)<0.5;r=u(q+r)+k;q=u(q)+k;r-=q;p=M(t)<0.5;x=u(t+x)+l;t=u(t)+l;x-=t;d&&(q+=1,r-=1);p&&(t-=1,x+=1);c.shapeType=\"rect\";c.shapeArgs={x:q,y:t,width:r,height:x}})},getSymbol:sa,drawLegendSymbol:N.drawRectangle,drawGraph:sa,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=c.animationLimit||\n\t250,f,g,h;p(a.points,function(i){var j=i.plotY,k=i.graphic;if(j!==t&&!isNaN(j)&&i.y!==null)f=i.shapeArgs,h=r(a.borderWidth)?{\"stroke-width\":a.borderWidth}:{},g=i.pointAttr[i.selected?\"select\":\"\"]||a.pointAttr[\"\"],k?(bb(k),k.attr(h)[b.pointCount<e?\"animate\":\"attr\"](w(f))):i.graphic=d[i.shapeType](f).attr(g).attr(h).add(a.group).shadow(c.shadow,null,c.stacking&&!c.borderRadius);else if(k)i.graphic=k.destroy()})},animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(aa)a?\n\t(e.scaleY=0.001,a=C(b.pos+b.len,v(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?\"translateX\":\"translateY\"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type===a.type)b.isDirty=!0});O.prototype.remove.apply(a,arguments)}});F.column=ga;ba.bar=w(ba.column);pa=ka(ga,{type:\"bar\",inverted:!0});F.bar=pa;ba.scatter=w(S,{lineWidth:0,tooltip:{headerFormat:'<span style=\"color:{series.color}\">●</span> <span style=\"font-size: 10px;\"> {series.name}</span><br/>',\n\tpointFormat:\"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>\"},stickyTracking:!1});pa=ka(O,{type:\"scatter\",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"markerGroup\"],takeOrdinalPosition:!1,singularTooltips:!0,drawGraph:function(){this.options.lineWidth&&O.prototype.drawGraph.call(this)}});F.scatter=pa;ba.pie=w(S,{borderColor:\"#FFFFFF\",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,\n\tlegendType:\"point\",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});S={type:\"pie\",isCartesian:!1,pointClass:ka(Ea,{init:function(){Ea.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;q(a,{visible:a.visible!==!1,name:m(a.name,\"Slice\")});b=function(b){a.slice(b.type===\"select\")};K(a,\"select\",b);K(a,\"unselect\",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart;b.visible=b.options.visible=\n\ta=a===t?!b.visible:a;c.options.data[Da(b,c.data)]=b.options;p([\"graphic\",\"dataLabel\",\"connector\",\"shadowGroup\"],function(c){if(b[c])b[c][a?\"show\":\"hide\"](!0)});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;Qa(c,d.chart);m(b,!0);this.sliced=this.options.sliced=a=r(a)?a:!this.sliced;d.options.data[Da(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);\n\tthis.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var b=this.shapeArgs,c=this.series.chart;return this.series.chart.renderer.symbols.arc(c.plotLeft+b.x,c.plotTop+b.y,b.r+a,b.r+a,{innerR:this.shapeArgs.r,start:b.start,end:b.end})}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"group\",\"dataLabelsGroup\"],axisTypes:[],pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\"},singularTooltips:!0,getColor:sa,animate:function(a){var b=this,c=b.points,d=\n\tb.startAngleRad;if(!a)p(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b,c,d){O.prototype.setData.call(this,a,!1,c,d);this.processData();this.generatePoints();m(b,!0)&&this.chart.redraw(c)},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;O.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?\n\t0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0?e.y/b*100:0,e.total=b},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ma/180*(i-90),i=(this.endAngleRad=ma/180*(m(c.endAngle,i+360)-90))-j,k=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,o,n=k.length,p;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=U.asin(C((b-a[1])/(a[2]/2+l),1));return a[0]+(c?-1:1)*Z(h)*(a[2]/\n\t2+l)};for(o=0;o<n;o++){p=k[o];f=j+b*i;if(!c||p.visible)b+=p.percentage/100;g=j+b*i;p.shapeType=\"arc\";p.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:u(f*1E3)/1E3,end:u(g*1E3)/1E3};h=(g+f)/2;h>1.5*ma?h-=2*ma:h<-ma/2&&(h+=2*ma);p.slicedTranslation={translateX:u(Z(h)*d),translateY:u(ea(h)*d)};f=Z(h)*a[2]/2;g=ea(h)*a[2]/2;p.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];p.half=h<-ma/2||h>ma/2?1:0;p.angle=h;e=C(e,l/2);p.labelPos=[a[0]+f+Z(h)*l,a[1]+g+ea(h)*l,a[0]+f+Z(h)*e,a[1]+g+ea(h)*e,a[0]+f,a[1]+g,l<0?\n\t\"center\":p.half?\"right\":\"left\",h]}},drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g(\"shadow\").add(a.group);p(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g(\"shadow\").add(a.shadowGroup);c=h.sliced?h.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(q(g,c)):h.graphic=d=b[h.shapeType](g).setRadialReference(a.center).attr(h.pointAttr[h.selected?\"select\":\n\t\"\"]).attr({\"stroke-linejoin\":\"round\"}).attr(c).add(a.group).shadow(e,f);h.visible!==void 0&&h.setVisible(h.visible)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:N.drawRectangle,getCenter:X.getCenter,getSymbol:sa};S=ka(O,S);F.pie=S;O.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,e=a.points,f,g,h,i;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),i=a.plotGroup(\"dataLabelsGroup\",\n\t\"data-labels\",\"hidden\",d.zIndex||6),!a.hasRendered&&m(d.defer,!0)&&(i.attr({opacity:0}),K(a,\"afterAnimate\",function(){a.dataLabelsGroup.show()[b.animation?\"animate\":\"attr\"]({opacity:1},{duration:200})})),g=d,p(e,function(b){var e,l=b.dataLabel,o,n,p=b.connector,u=!0;f=b.options&&b.options.dataLabels;e=m(f&&f.enabled,g.enabled);if(l&&!e)b.dataLabel=l.destroy();else if(e){d=w(g,f);e=d.rotation;o=b.getLabelConfig();h=d.format?Ia(d.format,o):d.formatter.call(o,d);d.style.color=m(d.color,d.style.color,\n\ta.color,\"black\");if(l)if(r(h))l.attr({text:h}),u=!1;else{if(b.dataLabel=l=l.destroy(),p)b.connector=p.destroy()}else if(r(h)){l={fill:d.backgroundColor,stroke:d.borderColor,\"stroke-width\":d.borderWidth,r:d.borderRadius||0,rotation:e,padding:d.padding,zIndex:1};for(n in l)l[n]===t&&delete l[n];l=b.dataLabel=a.chart.renderer[e?\"text\":\"label\"](h,0,-999,null,null,null,d.useHTML).attr(l).css(q(d.style,c&&{cursor:c})).add(i).shadow(d.shadow)}l&&a.alignDataLabel(b,l,d,null,u)}})};O.prototype.alignDataLabel=\n\tfunction(a,b,c,d,e){var f=this.chart,g=f.inverted,h=m(a.plotX,-999),i=m(a.plotY,-999),j=b.getBBox();if(a=this.visible&&(a.series.forceDL||f.isInsidePlot(h,u(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g)))d=q({x:g?f.plotWidth-i:h,y:u(g?f.plotHeight-h:i),width:0,height:0},d),q(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?\"attr\":\"animate\"](g)):(b.align(c,null,d),g=b.alignAttr,m(c.overflow,\"justify\")===\"justify\"?this.justifyDataLabel(b,\n\tc,g,j,d,e):m(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));if(!a)b.attr({y:-999}),b.placed=!1};O.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h===\"right\"?b.align=\"left\":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h===\"left\"?b.align=\"right\":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i===\"bottom\"?b.verticalAlign=\"top\":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i===\"top\"?b.verticalAlign=\"bottom\":b.y=g.plotHeight-\n\tj,k=!0;if(k)a.placed=!f,a.align(b,null,e)};if(F.pie)F.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=m(e.connectorPadding,10),g=m(e.connectorWidth,1),h=d.plotWidth,d=d.plotHeight,i,j,k=m(e.softConnector,!0),l=e.distance,o=a.center,n=o[2]/2,q=o[1],r=l>0,t,w,x,y,z=[[],[]],A,C,G,D,B,F=[0,0,0,0],N=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){O.prototype.drawDataLabels.apply(a);p(b,function(a){a.dataLabel&&a.visible&&z[a.half].push(a)});\n\tfor(D=0;!y&&b[D];)y=b[D]&&b[D].dataLabel&&(b[D].dataLabel.getBBox().height||21),D++;for(D=2;D--;){var b=[],K=[],H=z[D],I=H.length,E;a.sortByAngle(H,D-0.5);if(l>0){for(B=q-n-l;B<=q+n+l;B+=y)b.push(B);w=b.length;if(I>w){c=[].concat(H);c.sort(N);for(B=I;B--;)c[B].rank=B;for(B=I;B--;)H[B].rank>=w&&H.splice(B,1);I=H.length}for(B=0;B<I;B++){c=H[B];x=c.labelPos;c=9999;var Q,P;for(P=0;P<w;P++)Q=M(b[P]-x[1]),Q<c&&(c=Q,E=P);if(E<B&&b[B]!==null)E=B;else for(w<I-B+E&&b[B]!==null&&(E=w-I+B);b[E]===null;)E++;K.push({i:E,\n\ty:b[E]});b[E]=null}K.sort(N)}for(B=0;B<I;B++){c=H[B];x=c.labelPos;t=c.dataLabel;G=c.visible===!1?\"hidden\":\"visible\";c=x[1];if(l>0){if(w=K.pop(),E=w.i,C=w.y,c>C&&b[E+1]!==null||c<C&&b[E-1]!==null)C=c}else C=c;A=e.justify?o[0]+(D?-1:1)*(n+l):a.getX(E===0||E===b.length-1?c:C,D);t._attr={visibility:G,align:x[6]};t._pos={x:A+e.x+({left:f,right:-f}[x[6]]||0),y:C+e.y-10};t.connX=A;t.connY=C;if(this.options.size===null)w=t.width,A-w<f?F[3]=v(u(w-A+f),F[3]):A+w>h-f&&(F[1]=v(u(A+w-h+f),F[1])),C-y/2<0?F[0]=\n\tv(u(-C+y/2),F[0]):C+y/2>d&&(F[2]=v(u(C+y/2-d),F[2]))}}if(Ba(F)===0||this.verifyDataLabelOverflow(F))this.placeDataLabels(),r&&g&&p(this.points,function(b){i=b.connector;x=b.labelPos;if((t=b.dataLabel)&&t._pos)G=t._attr.visibility,A=t.connX,C=t.connY,j=k?[\"M\",A+(x[6]===\"left\"?5:-5),C,\"C\",A,C,2*x[2]-x[4],2*x[3]-x[5],x[2],x[3],\"L\",x[4],x[5]]:[\"M\",A+(x[6]===\"left\"?5:-5),C,\"L\",x[2],x[3],\"L\",x[4],x[5]],i?(i.animate({d:j}),i.attr(\"visibility\",G)):b.connector=i=a.chart.renderer.path(j).attr({\"stroke-width\":g,\n\tstroke:e.connectorColor||b.color||\"#606060\",visibility:G}).add(a.dataLabelsGroup);else if(i)b.connector=i.destroy()})}},F.pie.prototype.placeDataLabels=function(){p(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?\"animate\":\"attr\"](b),a.moved=!0):a&&a.attr({y:-999})})},F.pie.prototype.alignDataLabel=sa,F.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||80,f;d[0]!==null?e=v(b[2]-v(a[1],a[3]),c):(e=v(b[2]-\n\ta[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=v(C(e,b[2]-v(a[0],a[2])),c):(e=v(C(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);e<b[2]?(b[2]=e,this.translate(b),p(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels&&this.drawDataLabels()):f=!0;return f};if(F.column)F.column.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=a.dlBox||a.shapeArgs,i=a.below||a.plotY>m(this.translatedThreshold,f.plotSizeY),j=m(c.inside,!!this.options.stacking);if(h&&\n\t(d=w(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=m(c.align,!g||j?\"center\":i?\"right\":\"left\");c.verticalAlign=m(c.verticalAlign,g||j?\"middle\":i?\"top\":\"bottom\");O.prototype.alignDataLabel.call(this,a,b,c,d,e)};S=R.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver();\n\tfor(;d&&!e;)e=d.point,d=d.parentNode;if(e!==t&&e!==b.hoverPoint)e.onMouseOver(c)};p(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)p(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass(\"highcharts-tracker\").on(\"mouseover\",f).on(\"mouseout\",function(a){c.onTrackerMouseOut(a)}).css(e),$a))a[b].on(\"touchstart\",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:\n\ta.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},q=\"rgba(192,192,192,\"+(aa?1.0E-4:0.002)+\")\";if(e&&!c)for(m=e+1;m--;)d[m]===\"M\"&&d.splice(m+1,0,d[m+1]-i,d[m+2],\"L\"),(m&&d[m]===\"M\"||m===e)&&d.splice(m,0,\"L\",d[m-2]+i,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push(\"M\",e.plotX-i,e.plotY,\"L\",e.plotX+i,e.plotY);j?j.attr({d:d}):(a.tracker=h.path(d).attr({\"stroke-linejoin\":\"round\",\n\tvisibility:a.visible?\"visible\":\"hidden\",stroke:q,fill:c?q:Q,\"stroke-width\":b.lineWidth+(c?0:2*i),zIndex:2}).add(a.group),p([a.tracker,a.markerGroup],function(a){a.addClass(\"highcharts-tracker\").on(\"mouseover\",n).on(\"mouseout\",function(a){g.onTrackerMouseOut(a)}).css(l);if($a)a.on(\"touchstart\",n)}))}};if(F.column)ga.prototype.drawTracker=S.drawTrackerPoint;if(F.pie)F.pie.prototype.drawTracker=S.drawTrackerPoint;if(F.scatter)pa.prototype.drawTracker=S.drawTrackerPoint;q(lb.prototype,{setItemEvents:function(a,\n\tb,c,d,e){var f=this;(c?b:a.legendGroup).on(\"mouseover\",function(){a.setState(\"hover\");b.css(f.options.itemHoverStyle)}).on(\"mouseout\",function(){b.css(a.visible?d:e);a.setState()}).on(\"click\",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent(\"legendItemClick\",b,c):D(a,\"legendItemClick\",b,c)})},createCheckboxForItem:function(a){a.checkbox=Y(\"input\",{type:\"checkbox\",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,this.chart.container);\n\tK(a.checkbox,\"click\",function(b){D(a,\"checkboxClick\",{checked:b.target.checked},function(){a.select()})})}});E.legend.itemStyle.cursor=\"pointer\";q(Ya.prototype,{showResetZoom:function(){var a=this,b=E.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo===\"chart\"?null:\"plotBox\";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=\n\tthis;D(a,\"selection\",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?p(this.axes,function(a){b=a.zoom()}):p(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?\"zoomX\":\"zoomY\"]||c[h?\"pinchX\":\"pinchY\"])b=e.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom();else if(!d&&ca(e))this.resetZoomButton=e.destroy();b&&this.redraw(m(this.options.chart.animation,a&&a.animation,this.pointCount<\n\t100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&p(d,function(a){a.setState()});p(b===\"xy\"?[1,0]:[1],function(b){var d=a[b?\"chartX\":\"chartY\"],h=c[b?\"xAxis\":\"yAxis\"][0],i=c[b?\"mouseDownX\":\"mouseDownY\"],j=(h.pointRange||0)/2,k=h.getExtremes(),l=h.toValue(i-d,!0)+j,i=h.toValue(i+c[b?\"plotWidth\":\"plotHeight\"]-d,!0)-j;h.series.length&&l>C(k.dataMin,k.min)&&i<v(k.dataMax,k.max)&&(h.setExtremes(l,i,!1,!1,{trigger:\"pan\"}),e=!0);c[b?\"mouseDownX\":\"mouseDownY\"]=d});e&&c.redraw(!1);G(c.container,{cursor:\"move\"})}});\n\tq(Ea.prototype,{select:function(a,b){var c=this,d=c.series,e=d.chart,a=m(a,!c.selected);c.firePointEvent(a?\"select\":\"unselect\",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[Da(c,d.data)]=c.options;c.setState(a&&\"select\");b||p(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[Da(a,d.data)]=a.options,a.setState(\"\"),a.firePointEvent(\"unselect\")})})},onMouseOver:function(a){var b=this.series,c=b.chart,d=c.tooltip,e=c.hoverPoint;\n\tif(e&&e!==this)e.onMouseOut();this.firePointEvent(\"mouseOver\");d&&(!d.shared||b.noSharedTooltip)&&d.refresh(this,a);this.setState(\"hover\");c.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;if(!b||Da(this,b)===-1)this.firePointEvent(\"mouseOut\"),this.setState(),a.hoverPoint=null},importEvents:function(){if(!this.hasImportedEvents){var a=w(this.series.options.point,this.options).events,b;this.events=a;for(b in a)K(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a,\n\tb){var c=this.plotX,d=this.plotY,e=this.series,f=e.options.states,g=ba[e.type].marker&&e.options.marker,h=g&&!g.enabled,i=g&&g.states[a],j=i&&i.enabled===!1,k=e.stateMarkerGraphic,l=this.marker||{},m=e.chart,n=e.halo,p,a=a||\"\";p=this.pointAttr[a]||e.pointAttr[a];if(!(a===this.state&&!b||this.selected&&a!==\"select\"||f[a]&&f[a].enabled===!1||a&&(j||h&&i.enabled===!1)||a&&l.states&&l.states[a]&&l.states[a].enabled===!1)){if(this.graphic)g=g&&this.graphic.symbolName&&p.r,this.graphic.attr(w(p,g?{x:c-\n\tg,y:d-g,width:2*g,height:2*g}:{})),k&&k.hide();else{if(a&&i)if(g=i.radius,l=l.symbol||e.symbol,k&&k.currentSymbol!==l&&(k=k.destroy()),k)k[b?\"animate\":\"attr\"]({x:c-g,y:d-g});else if(l)e.stateMarkerGraphic=k=m.renderer.symbol(l,c-g,d-g,2*g,2*g).attr(p).add(e.markerGroup),k.currentSymbol=l;if(k)k[a&&m.isInsidePlot(c,d,m.inverted)?\"show\":\"hide\"]()}if((c=f[a]&&f[a].halo)&&c.size){if(!n)e.halo=n=m.renderer.path().add(e.seriesGroup);n.attr(q({fill:ya(this.color||e.color).setOpacity(c.opacity).get()},c.attributes))[b?\n\t\"animate\":\"attr\"]({d:this.haloPath(c.size)})}else n&&n.attr({d:[]});this.state=a}},haloPath:function(a){var b=this.series,c=b.chart,d=b.getPlotBox(),e=c.inverted;return c.renderer.symbols.circle(d.translateX+(e?b.yAxis.len-this.plotY:this.plotX)-a,d.translateY+(e?b.xAxis.len-this.plotX:this.plotY)-a,a*2,a*2)}});q(O.prototype,{onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&D(this,\"mouseOver\");this.setState(\"hover\");a.hoverSeries=\n\tthis},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&D(this,\"mouseOut\");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState();b.hoverSeries=null},setState:function(a){var b=this.options,c=this.graph,d=this.graphNeg,e=b.states,b=b.lineWidth,a=a||\"\";if(this.state!==a)this.state=a,e[a]&&e[a].enabled===!1||(a&&(b=e[a].lineWidth||b+1),c&&!c.dashstyle&&(a={\"stroke-width\":b},c.attr(a),d&&d.attr(a)))},\n\tsetVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===t?!h:a)?\"show\":\"hide\";p([\"group\",\"dataLabelsGroup\",\"markerGroup\",\"tracker\"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&p(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});p(c.linkedSeries,function(b){b.setVisible(a,!1)});if(g)d.isDirtyBox=!0;\n\tb!==!1&&d.redraw();D(c,f)},setTooltipPoints:function(a){var b=[],c,d,e=this.xAxis,f=e&&e.getExtremes(),g=e?e.tooltipLen||e.len:this.chart.plotSizeX,h,i,j=[];if(!(this.options.enableMouseTracking===!1||this.singularTooltips)){if(a)this.tooltipPoints=null;p(this.segments||this.points,function(a){b=b.concat(a)});e&&e.reversed&&(b=b.reverse());this.orderTooltipPoints&&this.orderTooltipPoints(b);a=b.length;for(i=0;i<a;i++)if(e=b[i],c=e.x,c>=f.min&&c<=f.max){h=b[i+1];c=d===t?0:d+1;for(d=b[i+1]?C(v(0,T((e.clientX+\n\t(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===t?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;D(this,a?\"select\":\"unselect\")},drawTracker:S.drawTrackerGraph});q(R,{Axis:la,Chart:Ya,Color:ya,Point:Ea,Tick:Sa,Renderer:Za,Series:O,SVGElement:P,SVGRenderer:ta,arrayMin:Na,arrayMax:Ba,charts:V,dateFormat:cb,format:Ia,pathAnim:ub,getOptions:function(){return E},\n\thasBidiBug:Nb,isTouchDevice:Jb,numberFormat:Ga,seriesTypes:F,setOptions:function(a){E=w(!0,E,a);Cb();return E},addEvent:K,removeEvent:W,createElement:Y,discardElement:Pa,css:G,each:p,extend:q,map:Ua,merge:w,pick:m,splat:qa,extendClass:ka,pInt:z,wrap:Ma,svg:aa,canvas:fa,vml:!aa&&!fa,product:\"Highcharts\",version:\"4.0.1\"})})();\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 142:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Sand-Signika theme for Highcharts JS\n\t * @author Torstein Honsi\n\t */\n\n\n\n\t// Add the background image to the container\n\tHighcharts.wrap(Highcharts.Chart.prototype, 'getContainer', function (proceed) {\n\t\tproceed.call(this);\n\t\tthis.container.style.background = 'url(http://www.highcharts.com/samples/graphics/sand.png)';\n\t});\n\n\n\tHighcharts.theme = {\n\t\tcolors: [\"#f45b5b\", \"#8085e9\", \"#8d4654\", \"#7798BF\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\t\tchart: {\n\t\t\tbackgroundColor: null,\n\t\t\tstyle: {\n\t\t\t\tfontFamily: \"Signika, serif\"\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: 'black',\n\t\t\t\tfontSize: '16px',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\tsubtitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: 'black'\n\t\t\t}\n\t\t},\n\t\ttooltip: {\n\t\t\tborderWidth: 0\n\t\t},\n\t\tlegend: {\n\t\t\titemStyle: {\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '13px'\n\t\t\t}\n\t\t},\n\t\txAxis: {\n\t\t\tlabels: {\n\t\t\t\tstyle: {\n\t\t\t\t\tcolor: '#6e6e70'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tyAxis: {\n\t\t\tlabels: {\n\t\t\t\tstyle: {\n\t\t\t\t\tcolor: '#6e6e70'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tplotOptions: {\n\t\t\tseries: {\n\t\t\t\tshadow: true\n\t\t\t},\n\t\t\tcandlestick: {\n\t\t\t\tlineColor: '#404048'\n\t\t\t}\n\t\t},\n\n\t\t// Highstock specific\n\t\tnavigator: {\n\t\t\txAxis: {\n\t\t\t\tgridLineColor: '#D0D0D8'\n\t\t\t}\n\t\t},\n\t\trangeSelector: {\n\t\t\tbuttonTheme: {\n\t\t\t\tfill: 'white',\n\t\t\t\tstroke: '#C0C0C8',\n\t\t\t\t'stroke-width': 1,\n\t\t\t\tstates: {\n\t\t\t\t\tselect: {\n\t\t\t\t\t\tfill: '#D0D0D8'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tscrollbar: {\n\t\t\ttrackBorderColor: '#C0C0C8'\n\t\t},\n\n\t\t// General\n\t\tbackground2: '#E0E0E8'\n\t\t\n\t};\n\n\t// Apply the theme\n\tHighcharts.setOptions(Highcharts.theme);\n\n\n/***/ },\n\n/***/ 149:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($, _) {module.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '', __j = Array.prototype.join;\n\tfunction print() { __p += __j.call(arguments, '') }\n\twith (obj) {\n\t__p += '<thead>\\r\\n    <th style=\"width:200px;\">#</th>\\r\\n';\n\n\t$.each(item[0].date , function (key, value){\n\t;\n\t__p += '\\r\\n    <th>' +\n\t((__t = ( value )) == null ? '' : __t) +\n\t'</th>\\r\\n';\n\n\t})\n\t;\n\t__p += '\\r\\n</thead>\\r\\n<tbody>\\r\\n';\n\n\n\tvar totalArray = []\n\t$.each(item , function (key, value){\n\t;\n\t__p += '\\r\\n<tr>\\r\\n    <td><span class=\"textOverflow\" style=\"width:200px\" title=\"' +\n\t((__t = ( value.name )) == null ? '' : __t) +\n\t'\">' +\n\t((__t = ( value.name )) == null ? '' : __t) +\n\t'</span></td>\\r\\n    ';\n\n\t    var dataIndex = 0;\n\t    $.each(value.data , function (totalKey, total){\n\n\t    ;\n\t__p += '\\r\\n    <td>\\r\\n        ' +\n\t((__t = ( total )) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    ';\n\n\t        if(_.isNumber(totalArray[dataIndex])) {\n\t            totalArray[dataIndex] +=total;\n\t        }else {\n\t            totalArray[dataIndex] = total;\n\t        }\n\t        dataIndex ++ ;\n\t    });\n\t    ;\n\t__p += '\\r\\n</tr>\\r\\n';\n\n\t});\n\t;\n\t__p += '\\r\\n\\r\\n<tr>\\r\\n<td>\\r\\n总计\\r\\n</td>\\r\\n';\n\n\t$.each(totalArray , function (key, value){\n\t;\n\t__p += '\\r\\n<td>' +\n\t((__t = (value)) == null ? '' : __t) +\n\t'</td>\\r\\n';\n\n\t})\n\t;\n\t__p += '\\r\\n</tr>\\r\\n</tbody>\\r\\n';\n\n\t}\n\treturn __p\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5), __webpack_require__(4)))\n\n/***/ },\n\n/***/ 155:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"' +\n\t((__t = (it.id || '' )) == null ? '' : __t) +\n\t'\">\\r\\n  <div class=\"modal-backdrop fade\"></div>\\r\\n  <div class=\"modal-dialog\">\\r\\n    <div class=\"modal-content\">\\r\\n\\r\\n      <div class=\"modal-header\">\\r\\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\r\\n        <h4 class=\"modal-title\">' +\n\t((__t = (it.header)) == null ? '' : __t) +\n\t'</h4>\\r\\n      </div>\\r\\n      <div class=\"modal-body\">\\r\\n        ' +\n\t((__t = (it.body)) == null ? '' : __t) +\n\t'\\r\\n      </div>\\r\\n      <div class=\"modal-footer\">\\r\\n        <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\r\\n      </div>\\r\\n\\r\\n    </div>\\r\\n  </div>\\r\\n</div>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ }\n\n});"
  },
  {
    "path": "static/entry.realtime.js",
    "content": "webpackJsonp([2],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar log = __webpack_require__(17);\n\tlog.init();\n\n\tvar source_trigger = __webpack_require__(14);\n\tsource_trigger.init();\n\n\tvar last_select = __webpack_require__(13);\n\tlast_select.init();\n\n/***/ },\n\n/***/ 13:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {exports.init = function(){\n\t\tvar last_select = -1;\n\t\t\n\t\ttry {\n\n\t\t    last_select = localStorage.last_select >> 0; // jshint ignore:line\n\t\t\t\n\t\t\tvar $sb = $('#select-business');\n\t\t\t\n\t\t\tlast_select > 0 && $sb.find('[value=' + last_select + ']').length && $sb.val(last_select);\n\n\t\t\t$sb.on('change', function(){\n\t\t\t\tlocalStorage.last_select = $sb.val();\n\t\t\t});\n\n\t\t} catch (ex) {}\n\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 14:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {exports.init = function() {\n\t\tvar not_show_source_page = false;\n\t\tvar hideform_class_name = 'main-table-hidefrom';\n\n\t\ttry {\n\t\t\tnot_show_source_page = !!localStorage.not_show_source_page;\n\t\t\t$('.main-table')[not_show_source_page ? 'addClass' : 'removeClass'](hideform_class_name);\n\t\t} catch (ex) {}\n\n\t\tvar update_source = function(show_source_page) {\n\t\t\tif (show_source_page) {\n\t\t\t\t$('.main-table').removeClass(hideform_class_name);\n\t\t\t\t$('#log-table .source_page_link').each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t$this.text($this.data('viewlink'));\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t$('.main-table').addClass(hideform_class_name);\n\t\t\t\t$('#log-table .source_page_link').each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t$this.text($this.data('viewtext'));\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar $ssp = $('#show_source_page');\n\t\t$ssp.prop('checked', !not_show_source_page).on('change', function() {\n\t\t\ttry {\n\t\t\t\tvar show_source_page = $ssp.prop('checked');\n\t\t\t\tlocalStorage.not_show_source_page = show_source_page ? '' : '1';\n\t\t\t\tupdate_source(show_source_page);\n\t\t\t} catch (ex) {}\n\t\t});\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 17:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var dialog = __webpack_require__(140);\n\tvar Delegator = __webpack_require__(21);\n\n\tvar logTable = __webpack_require__(146);\n\tvar keyword = __webpack_require__(147);\n\tvar debar = __webpack_require__(148);\n\tvar logDetailDialog = __webpack_require__(22);\n\n\tvar logConfig = {\n\t        id: 0,\n\t        startDate: 0,\n\t        endDate: 0,\n\t        include: [],\n\t        exclude: [],\n\t        index: 0,\n\t        level: [1, 2, 4]\n\t    },\n\n\t    encodeHtml = function(str) {\n\t        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n\t    },\n\n\t    formatMsg = function (str){\n\t        return str.replace(/@/gi , '<br/><b style=\"color:#A78830;\">@</b> ')\n\t    };\n\n\tvar websocket;\n\n\tvar currentSelectId = -1,\n\t    currentIndex = 0,\n\t    noData = false,\n\t    MAX_LIMIT = 500,\n\t    loading = false,\n\t    monitorTimeId;\n\n\tfunction addKeyword() {\n\t    var value = $.trim($('#keyword-ipt').val());\n\t    if (value !== '') {\n\t        if (!removeValue(value, logConfig.include)) {\n\t            $('#keyword-group').append(keyword({\n\t                it: {\n\t                    value: value\n\t                },\n\t                opt: {\n\t                    encodeHtml: encodeHtml,\n\t                    set: Delegator.set\n\t                }\n\t            }));\n\t        }\n\t        logConfig.include.push(value);\n\t        $('#keyword-ipt').val('');\n\t    }\n\t}\n\n\tfunction addDebar() {\n\t    var value = $.trim($('#debar-ipt').val());\n\t    if (value !== '') {\n\t        if (!removeValue(value, logConfig.exclude)) {\n\t            $('#debar-group').append(debar({\n\t                it: {\n\t                    value: value\n\t                },\n\t                opt: {\n\t                    encodeHtml: encodeHtml,\n\t                    set: Delegator.set\n\t                }\n\t            }));\n\t        }\n\t        logConfig.exclude.push(value);\n\t        $('#debar-ipt').val('');\n\t    }\n\t}\n\n\n\n\tfunction bindEvent() {\n\t    new Delegator(document.body)\n\t        .on('click', 'searchBusiness', function() {\n\t            // search business\n\t        }).on('click', 'addKeyword', addKeyword)\n\t        .on('keyup', 'addKeyword', function(e) {\n\t            if (e.which === 13) addKeyword();\n\t        }).on('click', 'removeKeywords', function() {\n\t            logConfig.include.length = 0;\n\t            $('#keyword-group').empty();\n\t        }).on('click', 'removeKeyword', function(e, value) {\n\t            $(this).closest('.keyword-tag').remove();\n\t            removeValue(value, logConfig.include);\n\t        }).on('click', 'addDebar', addDebar)\n\t        .on('keyup', 'addDebar', function(e) {\n\t            if (e.which === 13) addDebar();\n\t        }).on('click', 'removeDebars', function() {\n\t            logConfig.exclude.length = 0;\n\t            $('#debar-group').empty();\n\t        }).on('click', 'removeDebar', function(e, value) {\n\t            $(this).closest('.keyword-tag').remove();\n\t            removeValue(value, logConfig.exclude);\n\t        }).on('click', 'showLogs', function() {\n\t            logConfig.id = $('#select-business').val() >> 0; // jshint ignore:line\n\t            if (logConfig.id <= 0 || loading) {\n\t                !loading && dialog({\n\t                    header: '警告',\n\t                    body: '请选择一个项目'\n\t                });\n\t                return;\n\t            }\n\n\t            if (!$(this).data(\"stop\")) {\n\t                $(this).data(\"stop\", true);\n\t                $('#log-table').html('');\n\t                startMonitor(logConfig.id);\n\t                $(this).addClass(\"stop\").text('停止监听');\n\t            } else {\n\t                $(this).data(\"stop\", false);\n\t                websocket.close();\n\t                $(this).removeClass(\"stop\").text('开始监听');\n\t            }\n\n\t        })\n\t        .on('click', 'alertModal', function(e, data) {\n\t            var $target=$(e.currentTarget);\n\n\t            logDetailDialog({\n\t                id :$target.text(),\n\t                time :$target.siblings('.td-2').text(),\n\t                info :$target.siblings('.td-3').html(),\n\t                uin :$target.siblings('.td-4').text(),\n\t                ip :$target.siblings('.td-5').text(),\n\t                agent : $target.siblings('.td-6').attr(\"title\"),\n\t                source :   $target.siblings('.td-7').html() ,\n\t            })\n\n\t        }).on('change', 'selectBusiness', function() {\n\t            var val = $(this).val() - 0;\n\t            currentSelectId = val;\n\t            $('#log-table').html('');\n\t            currentIndex = 0;\n\t            noData = false;\n\t            logConfig.id = val;\n\t        }).on('click', 'showTd', function(e) {\n\t            var $target=$(e.currentTarget).toggleClass('active');\n\t            $('.main-table .'+$target.data('td')).toggleClass('active');\n\t            //保存用户偏好，隐藏为true\n\t            //console.log($target.data('td'));\n\t            localStorage.setItem($target.data('td'),!$target.hasClass('active'));\n\t            //console.log(localStorage);\n\t            window.classes[$target.data('td')]=$target.hasClass('active')?'active':'';\n\t        }).on('click', 'errorTypeClick', function() {\n\t            if ($(this).hasClass('msg-dis')) {\n\t                logConfig.level.push(4);\n\t                $(this).removeClass('msg-dis');\n\t            } else {\n\t                logConfig.level.splice($.inArray(4, logConfig.level), 1);\n\t                $(this).addClass('msg-dis');\n\t            }\n\t            console.log('log', logConfig.level);\n\n\t        }).on('click', 'logTypeClick', function() {\n\t            if ($(this).hasClass('msg-dis')) {\n\t                logConfig.level.push(2);\n\t                $(this).removeClass('msg-dis');\n\t            } else {\n\t                logConfig.level.splice($.inArray(2, logConfig.level), 1);\n\t                $(this).addClass('msg-dis');\n\t            }\n\n\n\t        }).on('click', 'debugTypeClick', function() {\n\t            if ($(this).hasClass('msg-dis')) {\n\t                logConfig.level.push(1);\n\t                $(this).removeClass('msg-dis');\n\t            } else {\n\t                logConfig.level.splice($.inArray(1, logConfig.level), 1);\n\t                $(this).addClass('msg-dis');\n\t            }\n\t        });\n\n\n\n\t}\n\n\tfunction removeValue(value, arr) {\n\t    for (var l = arr.length; l--;) {\n\t        if (arr[l] === value) {\n\t            return arr.splice(l, 1);\n\t        }\n\t    }\n\t}\n\n\tvar keepAliveTimeoutId;\n\tvar currentIndex;\n\tvar maxShow = 100;\n\tvar startMonitor = function(id) {\n\n\t    websocket = new WebSocket(\"ws://\" + location.host + \"/ws/realtimeLog\");\n\n\t    currentIndex = 0;\n\t    websocket.onmessage = function(evt) {\n\t        showLogs(JSON.parse(evt.data).message);\n\t    };\n\n\t    websocket.onclose = function() {\n\t        clearTimeout(keepAliveTimeoutId);\n\t    };\n\n\t    websocket.onopen = function() {\n\n\t        websocket.send(JSON.stringify({\n\t            type: \"INIT\",\n\t            include: logConfig.include,\n\t            exclude: logConfig.exclude,\n\t            level: logConfig.level,\n\t            id: id\n\t        }));\n\n\t        keepAliveTimeoutId = setInterval(function() {\n\t            websocket.send(JSON.stringify({\n\t                type: \"KEEPALIVE\"\n\t            }));\n\t        }, 5000);\n\t    };\n\t};\n\n\n\tfunction showLogs(data) {\n\n\t    var param = {\n\t        encodeHtml: encodeHtml,\n\t        set: Delegator.set,\n\t        startIndex: currentIndex,\n\t        formatMsg : formatMsg\n\t    };\n\n\t    var $table = $('#log-table');\n\n\t    if (maxShow % 100 === 0) {\n\t        $table.html($table.html().split(\"</tr>\").slice(0, maxShow).join(\"</tr>\"));\n\t    }\n\t    $table.prepend(logTable({\n\t        it: [data],\n\t        opt: param\n\t    }));\n\t    currentIndex++;\n\t}\n\n\tfunction init() {\n\t    bindEvent();\n\t    //读取用户偏好\n\t    var items=$(\"#content .right-side .setting-show .item\");\n\t    window.classes={};\n\t    //console.log(localStorage);\n\t    for(var i=0;i<items.length;i++){\n\t        var item=$(items[i]);\n\t        if(localStorage.getItem(item.data(\"td\"))==='true'){\n\t            item.removeClass('active');\n\t            $('.main-table .'+item.data('td')).removeClass('active');\n\t            window.classes[item.data('td')]='';\n\t        }else{\n\t            window.classes[item.data('td')]='active';\n\t        }\n\t    }\n\t    $('#content .mid-side .main-table thead tr').show();\n\t    $('#content .right-side .setting-show').show();\n\t}\n\n\texports.init = init;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 21:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * Map\n\t * @class\n\t */\n\tfunction Map() {\n\t    this.map = {};\n\t    this.length = 0;\n\t}\n\tMap.prototype = {\n\t    constructor: Map,\n\t    /**\n\t     * has\n\t     * @param {String} key\n\t     * @returns {Boolean}\n\t     */\n\t    has: function (key) {\n\t        return (key in this.map);\n\t    },\n\t    /**\n\t     * get\n\t     * @param {String} key\n\t     * @returns {Any}\n\t     */\n\t    get: function (key) {\n\t        return this.map[key];\n\t    },\n\t    /**\n\t     * set\n\t     * @param {String} key\n\t     * @param {Any} value\n\t     */\n\t    set: function (key, value) {\n\t        !this.has(key) && this.length++;\n\t        return (this.map[key] = value);\n\t    },\n\t    /**\n\t     * count\n\t     * @returns {Number}\n\t     */\n\t    count: function () {\n\t        return this.length;\n\t    },\n\t    /**\n\t     * remove\n\t     * @param {String} key\n\t     */\n\t    remove: function (key) {\n\t        if (this.has(key)) {\n\t            this.map[key] = null;\n\t            delete this.map[key];\n\t            this.length--;\n\t        }\n\t    }\n\t};\n\n\tvar cache = new Map(), set = cache.set, uid = 0;\n\tcache.set = function (node, value) {\n\t    if (!value) {\n\t        value = node;\n\t        set.call(cache, ++uid + '', value);\n\t        return uid;\n\t    } else {\n\t        typeof node === 'string' &&\n\t        (node = $(node)[0]);\n\t        $.data(node, 'event-data', value);\n\t        return this;\n\t    }\n\t};\n\n\tfunction _key(arr) {\n\t    if (!arr) return {};\n\t    arr = arr.split(' ');\n\t    var obj = {};\n\t    for (var i = 0, l = arr.length; i < l; i++) {\n\t        obj[arr[i]] = true;\n\t    }\n\t    return obj;\n\t}\n\n\t/**\n\t * Delegator\n\t * @class\n\t * @param {Selector} container\n\t */\n\tfunction Delegator(container) {\n\t    this.container = $(container);\n\t    this.listenerMap = new Map();\n\t}\n\n\t/**\n\t * getKey\n\t * @param {Any} value\n\t * @returns {Number}\n\t */\n\tDelegator.set = cache.set;\n\t/**\n\t * cache\n\t * @class\n\t * @static\n\t */\n\tDelegator.cache = cache;\n\n\tDelegator.prototype = {\n\t    constructor: Delegator,\n\t    _getListener: function (type) {\n\t        if (this.listenerMap.has(type)) {\n\t            return this.listenerMap.get(type);\n\t        }\n\t        function listener(e) {\n\t            var data = $.data(this),\n\t                routes = data['event-' + type + '-routes'],\n\t                eventData = data['event-data'], handle, dataKey;\n\n\t            // preprocessing\n\t            if (!routes && (routes = this.getAttribute('data-event-' + type))) {\n\t                (routes = routes.split(' ')) &&\n\t                (data['event-' + type + '-routes'] = routes);\n\t                !eventData &&\n\t                (dataKey = this.getAttribute('data-event-data')) &&\n\t                (eventData = cache.get(dataKey)) &&\n\t                (data['event-data'] = eventData) &&\n\t                (cache.remove(dataKey));\n\t                !data['event-stop-propagation'] &&\n\t                (data['event-stop-propagation'] = _key(this.getAttribute('data-event-stop-propagation')));\n\t            }\n\n\t            if (routes) {\n\t                for (var i = 0, l = routes.length; i < l; i++) {\n\t                    handle = listener.handleMap.get(routes[i]);\n\n\t                    if (handle) {\n\t                        handle.call(this, e, eventData);\n\t                    }\n\t                    data['event-stop-propagation'][type] &&\n\t                    e.stopPropagation();\n\t                }\n\t            }\n\t        }\n\n\t        listener.handleMap = new Map();\n\t        this.listenerMap.set(type, listener);\n\t        this.container.on(type, '[data-event-' + type + ']', listener);\n\t        return listener;\n\t    },\n\t    /**\n\t     * on\n\t     * @param {String} type\n\t     * @param {String} name\n\t     * @param {Function} handle\n\t     */\n\t    on: function (type, name, handle) {\n\t        var listener = this._getListener(type);\n\t        listener.handleMap.set(name, handle);\n\t        return this;\n\t    },\n\t    /**\n\t     * off\n\t     * @param {String} type\n\t     * @param {String} name\n\t     */\n\t    off: function (type, name) {\n\t        var listener = this._getListener(type),\n\t            handleMap = listener.handleMap;\n\t        handleMap.remove(name);\n\t        if (!handleMap.count()) {\n\t            this.container.off(type, '[data-event-' + type + ']', listener);\n\t            this.listenerMap.remove(type);\n\t        }\n\t    }\n\t};\n\n\tmodule.exports = Delegator;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 22:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar dialogTpl = __webpack_require__(152);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(dialogTpl(param))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on =  {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 140:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar modal = __webpack_require__(155);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(modal({it :param}))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on = param.on || {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 146:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(_) {module.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '', __j = Array.prototype.join;\n\tfunction print() { __p += __j.call(arguments, '') }\n\twith (obj) {\n\n\n\tvar urls;\n\tvar not_show_source_page = true;\n\ttry {\n\t    not_show_source_page = !!localStorage.not_show_source_page;\n\t} catch (ex) {}\n\n\t// 手Q\n\tvar RE_MQQ = /(ipad|iphone|ipod).*? (ipad)?qq\\/([\\d.]+)|\\bv1_and_sqi?_([\\d.]+)(.*? qq\\/([\\d.]+))?/;\n\n\tfunction getBrowserType(ua) {\n\t    if (!ua) {\n\t        return '';\n\t    }\n\t    ua = ua.toLowerCase();\n\n\t    var osIcon = '', browserIcon = '';\n\n\t    // os\n\t    if (ua.indexOf('android') > -1)\n\t        osIcon = 'ico-android';\n\t    else if (ua.indexOf('iphone') > -1 || ua.indexOf('ipad') > -1)\n\t        osIcon = 'ico-ios';\n\t    else if (ua.indexOf('windows') > -1)\n\t        osIcon = 'ico-windows';\n\n\n\t    // 手Q\n\t    if (RE_MQQ.test(ua)) {\n\t        browserIcon = 'ico-qq';\n\t    } else if (ua.indexOf('qqbrowser') > -1) {\n\t        browserIcon = 'ico-qb';\n\t    } else if (ua.indexOf('metasr') > -1) {\n\t        browserIcon = 'ico-sougou';\n\t    } else if (ua.indexOf('maxthon') > -1) {\n\t        browserIcon = 'ico-maxthon';\n\t    } else if (ua.indexOf('360se') > -1) {\n\t        browserIcon = 'ico-360';\n\t    } else if (ua.indexOf('qq/') > -1) {\n\t        browserIcon = 'ico-qq';\n\t    } else if (ua.indexOf('micromessenger') > -1) {\n\t        browserIcon = 'ico-wx';\n\t    } else if (ua.indexOf('edge') > -1) {\n\t        browserIcon = 'ico-edge';\n\t    } else if (ua.indexOf('chrome') > -1) {\n\t        browserIcon = 'ico-chrome';\n\t    } else if (ua.indexOf('msie') > -1 || ua.indexOf('trident') > -1) {\n\t        browserIcon = 'ico-ie';\n\t    } else if (ua.indexOf('firefox') > -1) {\n\t        browserIcon = 'ico-ff';\n\t    } else if (ua.indexOf('safari') > -1) {\n\t        browserIcon = 'ico-safari';\n\t    }\n\n\t    return [osIcon, browserIcon];\n\t}\n\n\tfunction sourcePage(data, type, opt) {\n\t    var from = data.from || ''\n\t    if (/view/.test(type)) {\n\t        var view = ['页面查看', opt.encodeHtml(from)];\n\t        return 'viewtext' === type ? view[0] :\n\t            'viewlink' === type ? view[1] :\n\t            not_show_source_page ? view[0] : view[1];\n\t    } else {\n\t        var href = opt.encodeHtml(from);\n\t        var msg = [data._target, data.rowNum, data.colNum].join(':') + ' ' + data.msg;\n\t        if (href.indexOf('#') === -1) {\n\t            href += '#BJ_ERROR=' + encodeURIComponent(msg);\n\t        } else {\n\t            href += '&BJ_ERROR=' + encodeURIComponent(msg);\n\t        }\n\t        return href;\n\t    }\n\t}\n\n\tfor (var i = 0 , l = it.length, type = ''; i < l; i++) {\n\t    switch(it[i].level.toString()) {\n\t        case '8':\n\t            type = 'warning';\n\t            break;\n\t        case '4':\n\t            type = 'err';\n\t            break;\n\t        case '2':\n\t            type = 'info';\n\t            break;\n\t        case '1':\n\t            type = 'debug';\n\t            break;\n\t        case '20':\n\t            type = 'offline';\n\t            break;\n\t    }\n\n\t    if (_.isArray(it[i].target)) {\n\t        it[i].target = it[i].target[0];\n\t    }\n\n\t    var isHtml = /^.+?\\.html\\??/.test(it[i].target);\n\t    var _target = it[i]._target = (it[i].target || it[i].url || '').replace(/\\)/g, '');\n\t;\n\t__p += '\\r\\n<tr id=\"tr-' +\n\t((__t = (i + 1 + opt.startIndex)) == null ? '' : __t) +\n\t'\">\\r\\n    <td  class=\"td-1 active info-type-' +\n\t((__t = (type)) == null ? '' : __t) +\n\t'\" data-event-click=\"alertModal\" title=\"点击查看#' +\n\t((__t = (i + 1 + opt.startIndex)) == null ? '' : __t) +\n\t'详情\">\\r\\n        ' +\n\t((__t = (i + 1 + opt.startIndex)) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  class=\"td-2 ' +\n\t((__t = (classes['td-2'] )) == null ? '' : __t) +\n\t'\">\\r\\n        ' +\n\t((__t = ( _.formatDate(new Date(it[i].date) , 'YYYY-MM-DD hh:mm:ss') )) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  style=\"\" class=\"td-3 ' +\n\t((__t = (classes['td-3'] )) == null ? '' : __t) +\n\t'\">\\r\\n        ' +\n\t((__t = ( opt.formatMsg(opt.encodeHtml(it[i].msg)) )) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  class=\"td-4 ' +\n\t((__t = (classes['td-4'] )) == null ? '' : __t) +\n\t'\" title=\"' +\n\t((__t = (  opt.encodeHtml(it[i].uin == 'NaN' ? '-' : it[i].uin ))) == null ? '' : __t) +\n\t'\" style=\"text-overflow: ellipsis;overflow: hidden;\" >\\r\\n        ' +\n\t((__t = (  opt.encodeHtml(it[i].uin == 'NaN' ? '-' : it[i].uin ))) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td  class=\"td-5 ' +\n\t((__t = (classes['td-5'] )) == null ? '' : __t) +\n\t'\">\\r\\n        ' +\n\t((__t = (it[i].ip )) == null ? '' : __t) +\n\t'\\r\\n    </td>\\r\\n    <td class=\"td-6 ' +\n\t((__t = ( classes['td-6'] )) == null ? '' : __t) +\n\t'\" title=\"' +\n\t((__t = ( it[i].userAgent )) == null ? '' : __t) +\n\t'\">\\r\\n            ';\n\n\t            var browserTypes = getBrowserType(it[i].userAgent);\n\t            for(var x = 0; x < browserTypes.length; x++) {\n\t             ;\n\t__p += '\\r\\n             <span class=\"ico-browser ' +\n\t((__t = ( browserTypes[x] )) == null ? '' : __t) +\n\t'\"></span>\\r\\n             ';\n\t};\n\t__p += '\\r\\n     </td>\\r\\n    <td class=\"td-7 ' +\n\t((__t = (classes['td-7'] )) == null ? '' : __t) +\n\t'\">\\r\\n        <a\\r\\n            style=\"word-break:break-all;display:block\"\\r\\n            href=\"' +\n\t((__t = ( opt.encodeHtml(_target))) == null ? '' : __t) +\n\t'\"\\r\\n            target=\"_blank\"\\r\\n            data-event-click=\"showSource\"\\r\\n            data-event-data=\"' +\n\t((__t = (opt.set(it[i]))) == null ? '' : __t) +\n\t'\"\\r\\n        >\\r\\n            ' +\n\t((__t = (opt.encodeHtml(_target))) == null ? '' : __t) +\n\t'\\r\\n            <span\\r\\n                class=\"err-where\"\\r\\n                style=\"height:24px;line-height:24px;border-radius:3px\"\\r\\n            >\\r\\n                ' +\n\t((__t = (opt.encodeHtml(it[i].rowNum || 0))) == null ? '' : __t) +\n\t'行\\r\\n                ' +\n\t((__t = (opt.encodeHtml(it[i].colNum || 0))) == null ? '' : __t) +\n\t'列\\r\\n            </span>\\r\\n        </a>\\r\\n        <a\\r\\n            class=\"source_page_link\"\\r\\n            style=\"font-size:12px\"\\r\\n            target=\"_blank\"\\r\\n            href=\"' +\n\t((__t = (sourcePage(it[i], 'href', opt))) == null ? '' : __t) +\n\t'\"\\r\\n            data-viewtext=\"' +\n\t((__t = (sourcePage(it[i], 'viewtext', opt))) == null ? '' : __t) +\n\t'\"\\r\\n            data-viewlink=\"' +\n\t((__t = (sourcePage(it[i], 'viewlink', opt))) == null ? '' : __t) +\n\t'\"\\r\\n        >' +\n\t((__t = (sourcePage(it[i], 'view', opt))) == null ? '' : __t) +\n\t'</a>\\r\\n    </td>\\r\\n</tr>\\r\\n';\n\t } ;\n\t__p += '\\r\\n\\r\\n';\n\t if(it.length === 0 ){;\n\t__p += '\\r\\n<td colspan=\"7\" style=\"\\r\\n    text-align: center;\\r\\n    background: rgb(221, 221, 221);\\r\\n\">无更多数据</td>\\r\\n';\n\t};\n\t__p += '\\r\\n';\n\n\t}\n\treturn __p\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ },\n\n/***/ 147:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<a class=\"keyword-tag\">' +\n\t((__t = (it.value)) == null ? '' : __t) +\n\t'<span class=\"keyword-del\" data-event-click=\"removeKeyword\" data-event-data=\"' +\n\t((__t = (opt.set(it.value))) == null ? '' : __t) +\n\t'\">x</span></a>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 148:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<a class=\"keyword-tag\">' +\n\t((__t = (it.value)) == null ? '' : __t) +\n\t'<span class=\"keyword-del\" data-event-click=\"removeDebar\" data-event-data=\"' +\n\t((__t = (opt.set(it.value))) == null ? '' : __t) +\n\t'\">x</span></a>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 152:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '\\n\\n<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"logDetailModal\">\\n    <div class=\"modal-backdrop fade\"></div>\\n    <div class=\"modal-dialog\">\\n        <div class=\"modal-content\">\\n\\n            <div class=\"modal-header\">\\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\n                <h4 class=\"modal-title\">日志详情</h4>\\n            </div>\\n            <div class=\"modal-body\">\\n                <p>\\n                    <b>Time：</b><span class=\"time\">' +\n\t((__t = (time)) == null ? '' : __t) +\n\t'</span>\\n                </p>\\n                <p>\\n                    <b>Info：</b><div class=\"info\">' +\n\t((__t = (info)) == null ? '' : __t) +\n\t'</div>\\n                </p>\\n                <p>\\n                    <b>uin：</b><span class=\"uin\">' +\n\t((__t = (uin)) == null ? '' : __t) +\n\t'</span>\\n                </p>\\n                <p>\\n                    <b>ip：</b><span class=\"ip\">' +\n\t((__t = (ip)) == null ? '' : __t) +\n\t'</span>\\n                </p>\\n                <p>\\n                    <b>agent：</b><div class=\"userAgent\">' +\n\t((__t = (agent)) == null ? '' : __t) +\n\t'</div>\\n                </p>\\n                <p>\\n                    <b>Source：</b><div class=\"source\">' +\n\t((__t = (source)) == null ? '' : __t) +\n\t'</div>\\n                </p>\\n            </div>\\n            <div class=\"modal-footer\">\\n                <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\n            </div>\\n\\n        </div>\\n    </div>\\n</div>\\n';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 155:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"' +\n\t((__t = (it.id || '' )) == null ? '' : __t) +\n\t'\">\\r\\n  <div class=\"modal-backdrop fade\"></div>\\r\\n  <div class=\"modal-dialog\">\\r\\n    <div class=\"modal-content\">\\r\\n\\r\\n      <div class=\"modal-header\">\\r\\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\r\\n        <h4 class=\"modal-title\">' +\n\t((__t = (it.header)) == null ? '' : __t) +\n\t'</h4>\\r\\n      </div>\\r\\n      <div class=\"modal-body\">\\r\\n        ' +\n\t((__t = (it.body)) == null ? '' : __t) +\n\t'\\r\\n      </div>\\r\\n      <div class=\"modal-footer\">\\r\\n        <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\r\\n      </div>\\r\\n\\r\\n    </div>\\r\\n  </div>\\r\\n</div>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ }\n\n});"
  },
  {
    "path": "static/entry.statistics.js",
    "content": "webpackJsonp([8],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar statistics = __webpack_require__(18);\n\tstatistics.init();\n\n\tvar last_select = __webpack_require__(13);\n\tlast_select.init();\n\n/***/ },\n\n/***/ 13:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {exports.init = function(){\n\t\tvar last_select = -1;\n\t\t\n\t\ttry {\n\n\t\t    last_select = localStorage.last_select >> 0; // jshint ignore:line\n\t\t\t\n\t\t\tvar $sb = $('#select-business');\n\t\t\t\n\t\t\tlast_select > 0 && $sb.find('[value=' + last_select + ']').length && $sb.val(last_select);\n\n\t\t\t$sb.on('change', function(){\n\t\t\t\tlocalStorage.last_select = $sb.val();\n\t\t\t});\n\n\t\t} catch (ex) {}\n\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 18:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * @info 用户列表js\n\t * @author coverguo\n\t * */\n\n\n\t__webpack_require__(23);\n\tvar Dialog = __webpack_require__(140);\n\tvar statisticsTpl = __webpack_require__(150);\n\n\tvar encodeHtml = function (str) {\n\t    return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n\t};\n\n\n\t    var statistics = {\n\t        init : function (){\n\n\t            var maxDate = 60*60*1000*24 *1;\n\n\t            $(\".datetimepicker\").datetimepicker({format: 'YYYY-MM-DD'}).data(\"DateTimePicker\").setMaxDate(new Date());\n\n\t            $('#startTime').data(\"DateTimePicker\").setDate( new Date(new Date() - maxDate));\n\n\t            this.bindEvent();\n\n\t        },\n\t        bindEvent : function (){\n\t            $('#showLogs').bind(\"click\" , function(e){\n\t                var projectId = $(\"#select-business\").val();\n\n\t                if(isNaN(projectId) || projectId<0){\n\t                    Dialog({\n\t                        header: '警告',\n\t                        body: '请选择一个项目'\n\t                    })\n\t                    return ;\n\t                }\n\n\t                $.getJSON(\"/controller/statisticsAction/queryById.do\" , {projectId : projectId , startDate : new Date($('#startTime').val() + \" 00:00:00\") - 0} , function (data){\n\t                        $('#table-content').html(statisticsTpl({it : data,  opt : {encodeHtml : encodeHtml }}));\n\t                    if(  data && data.data[0] ){\n\t                        $('#error-count').html(data.data[0].total || 0 );\n\t                    }\n\t                });\n\t            });\n\t        }\n\n\t    }\n\n\tmodule.exports = statistics;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 21:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * Map\n\t * @class\n\t */\n\tfunction Map() {\n\t    this.map = {};\n\t    this.length = 0;\n\t}\n\tMap.prototype = {\n\t    constructor: Map,\n\t    /**\n\t     * has\n\t     * @param {String} key\n\t     * @returns {Boolean}\n\t     */\n\t    has: function (key) {\n\t        return (key in this.map);\n\t    },\n\t    /**\n\t     * get\n\t     * @param {String} key\n\t     * @returns {Any}\n\t     */\n\t    get: function (key) {\n\t        return this.map[key];\n\t    },\n\t    /**\n\t     * set\n\t     * @param {String} key\n\t     * @param {Any} value\n\t     */\n\t    set: function (key, value) {\n\t        !this.has(key) && this.length++;\n\t        return (this.map[key] = value);\n\t    },\n\t    /**\n\t     * count\n\t     * @returns {Number}\n\t     */\n\t    count: function () {\n\t        return this.length;\n\t    },\n\t    /**\n\t     * remove\n\t     * @param {String} key\n\t     */\n\t    remove: function (key) {\n\t        if (this.has(key)) {\n\t            this.map[key] = null;\n\t            delete this.map[key];\n\t            this.length--;\n\t        }\n\t    }\n\t};\n\n\tvar cache = new Map(), set = cache.set, uid = 0;\n\tcache.set = function (node, value) {\n\t    if (!value) {\n\t        value = node;\n\t        set.call(cache, ++uid + '', value);\n\t        return uid;\n\t    } else {\n\t        typeof node === 'string' &&\n\t        (node = $(node)[0]);\n\t        $.data(node, 'event-data', value);\n\t        return this;\n\t    }\n\t};\n\n\tfunction _key(arr) {\n\t    if (!arr) return {};\n\t    arr = arr.split(' ');\n\t    var obj = {};\n\t    for (var i = 0, l = arr.length; i < l; i++) {\n\t        obj[arr[i]] = true;\n\t    }\n\t    return obj;\n\t}\n\n\t/**\n\t * Delegator\n\t * @class\n\t * @param {Selector} container\n\t */\n\tfunction Delegator(container) {\n\t    this.container = $(container);\n\t    this.listenerMap = new Map();\n\t}\n\n\t/**\n\t * getKey\n\t * @param {Any} value\n\t * @returns {Number}\n\t */\n\tDelegator.set = cache.set;\n\t/**\n\t * cache\n\t * @class\n\t * @static\n\t */\n\tDelegator.cache = cache;\n\n\tDelegator.prototype = {\n\t    constructor: Delegator,\n\t    _getListener: function (type) {\n\t        if (this.listenerMap.has(type)) {\n\t            return this.listenerMap.get(type);\n\t        }\n\t        function listener(e) {\n\t            var data = $.data(this),\n\t                routes = data['event-' + type + '-routes'],\n\t                eventData = data['event-data'], handle, dataKey;\n\n\t            // preprocessing\n\t            if (!routes && (routes = this.getAttribute('data-event-' + type))) {\n\t                (routes = routes.split(' ')) &&\n\t                (data['event-' + type + '-routes'] = routes);\n\t                !eventData &&\n\t                (dataKey = this.getAttribute('data-event-data')) &&\n\t                (eventData = cache.get(dataKey)) &&\n\t                (data['event-data'] = eventData) &&\n\t                (cache.remove(dataKey));\n\t                !data['event-stop-propagation'] &&\n\t                (data['event-stop-propagation'] = _key(this.getAttribute('data-event-stop-propagation')));\n\t            }\n\n\t            if (routes) {\n\t                for (var i = 0, l = routes.length; i < l; i++) {\n\t                    handle = listener.handleMap.get(routes[i]);\n\n\t                    if (handle) {\n\t                        handle.call(this, e, eventData);\n\t                    }\n\t                    data['event-stop-propagation'][type] &&\n\t                    e.stopPropagation();\n\t                }\n\t            }\n\t        }\n\n\t        listener.handleMap = new Map();\n\t        this.listenerMap.set(type, listener);\n\t        this.container.on(type, '[data-event-' + type + ']', listener);\n\t        return listener;\n\t    },\n\t    /**\n\t     * on\n\t     * @param {String} type\n\t     * @param {String} name\n\t     * @param {Function} handle\n\t     */\n\t    on: function (type, name, handle) {\n\t        var listener = this._getListener(type);\n\t        listener.handleMap.set(name, handle);\n\t        return this;\n\t    },\n\t    /**\n\t     * off\n\t     * @param {String} type\n\t     * @param {String} name\n\t     */\n\t    off: function (type, name) {\n\t        var listener = this._getListener(type),\n\t            handleMap = listener.handleMap;\n\t        handleMap.remove(name);\n\t        if (!handleMap.count()) {\n\t            this.container.off(type, '[data-event-' + type + ']', listener);\n\t            this.listenerMap.remove(type);\n\t        }\n\t    }\n\t};\n\n\tmodule.exports = Delegator;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 23:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(jQuery) {/**\n\t * @preserve jQuery DateTimePicker plugin v2.4.1\n\t * @homepage http://xdsoft.net/jqplugins/datetimepicker/\n\t * (c) 2014, Chupurnov Valeriy.\n\t */\n\t/*global document,window,jQuery,setTimeout,clearTimeout*/\n\t(function ($) {\n\t\t'use strict';\n\t\tvar default_options  = {\n\t\t\ti18n: {\n\t\t\t\tar: { // Arabic\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"مايو\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"ن\", \"ث\", \"ع\", \"خ\", \"ج\", \"س\", \"ح\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tro: { // Romanian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"ianuarie\", \"februarie\", \"martie\", \"aprilie\", \"mai\", \"iunie\", \"iulie\", \"august\", \"septembrie\", \"octombrie\", \"noiembrie\", \"decembrie\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"l\", \"ma\", \"mi\", \"j\", \"v\", \"s\", \"d\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tid: { // Indonesian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\", \"Min\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tbg: { // Bulgarian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfa: { // Persian/Farsi\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tru: { // Russian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Вск\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tuk: { // Ukrainian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ндл\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Сбт\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\ten: { // English\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tel: { // Ελληνικά\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tde: { // German\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tnl: { // Dutch\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\ttr: { // Turkish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Paz\", \"Pts\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cts\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfr: { //French\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tes: { // Spanish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tth: { // Thai\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tpl: { // Polish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"styczeń\", \"luty\", \"marzec\", \"kwiecień\", \"maj\", \"czerwiec\", \"lipiec\", \"sierpień\", \"wrzesień\", \"październik\", \"listopad\", \"grudzień\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"nd\", \"pn\", \"wt\", \"śr\", \"cz\", \"pt\", \"sb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tpt: { // Portuguese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tch: { // Simplified Chinese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tse: { // Swedish\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\",  \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tkr: { // Korean\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tit: { // Italian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tda: { // Dansk\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"July\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tno: { // Norwegian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tja: { // Japanese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tvi: { // Vietnamese\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Tháng 1\", \"Tháng 2\", \"Tháng 3\", \"Tháng 4\", \"Tháng 5\", \"Tháng 6\", \"Tháng 7\", \"Tháng 8\", \"Tháng 9\", \"Tháng 10\", \"Tháng 11\", \"Tháng 12\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsl: { // Slovenščina\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tcs: { // Čeština\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\thu: { // Hungarian\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Cs\", \"Pé\", \"Szo\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\taz: { //Azerbaijanian (Azeri)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Yanvar\", \"Fevral\", \"Mart\", \"Aprel\", \"May\", \"Iyun\", \"Iyul\", \"Avqust\", \"Sentyabr\", \"Oktyabr\", \"Noyabr\", \"Dekabr\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"B\", \"Be\", \"Ça\", \"Ç\", \"Ca\", \"C\", \"Ş\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tbs: { //Bosanski\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tca: { //Català\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dg\", \"Dl\", \"Dt\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'en-GB': { //English (British)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tet: { //\"Eesti\"\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Jaanuar\", \"Veebruar\", \"Märts\", \"Aprill\", \"Mai\", \"Juuni\", \"Juuli\", \"August\", \"September\", \"Oktoober\", \"November\", \"Detsember\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\teu: { //Euskara\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Urtarrila\", \"Otsaila\", \"Martxoa\", \"Apirila\", \"Maiatza\", \"Ekaina\", \"Uztaila\", \"Abuztua\", \"Iraila\", \"Urria\", \"Azaroa\", \"Abendua\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ig.\", \"Al.\", \"Ar.\", \"Az.\", \"Og.\", \"Or.\", \"La.\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tfi: { //Finnish (Suomi)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kesäkuu\", \"Heinäkuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tgl: { //Galego\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Xan\", \"Feb\", \"Maz\", \"Abr\", \"Mai\", \"Xun\", \"Xul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dec\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Xov\", \"Ven\", \"Sab\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\thr: { //Hrvatski\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tko: { //Korean (한국어)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tlt: { //Lithuanian (lietuvių)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Sausio\", \"Vasario\", \"Kovo\", \"Balandžio\", \"Gegužės\", \"Birželio\", \"Liepos\", \"Rugpjūčio\", \"Rugsėjo\", \"Spalio\", \"Lapkričio\", \"Gruodžio\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sek\", \"Pir\", \"Ant\", \"Tre\", \"Ket\", \"Pen\", \"Šeš\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tlv: { //Latvian (Latviešu)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis \", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sv\", \"Pr\", \"Ot\", \"Tr\", \"Ct\", \"Pk\", \"St\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tmk: { //Macedonian (Македонски)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tmn: { //Mongolian (Монгол)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"1-р сар\", \"2-р сар\", \"3-р сар\", \"4-р сар\", \"5-р сар\", \"6-р сар\", \"7-р сар\", \"8-р сар\", \"9-р сар\", \"10-р сар\", \"11-р сар\", \"12-р сар\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Дав\", \"Мяг\", \"Лха\", \"Пүр\", \"Бсн\", \"Бям\", \"Ням\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'pt-BR': { //Português(Brasil)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsk: { //Slovenčina\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsq: { //Albanian (Shqip)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'sr-YU': { //Serbian (Srpski)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"čet\", \"Pet\", \"Sub\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsr: { //Serbian Cyrillic (Српски)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"јануар\", \"фебруар\", \"март\", \"април\", \"мај\", \"јун\", \"јул\", \"август\", \"септембар\", \"октобар\", \"новембар\", \"децембар\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"нед\", \"пон\", \"уто\", \"сре\", \"чет\", \"пет\", \"суб\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tsv: { //Svenska\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t'zh-TW': { //Traditional Chinese (繁體中文)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tzh: { //Simplified Chinese (简体中文)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\the: { //Hebrew (עברית)\n\t\t\t\t\tmonths: [\n\t\t\t\t\t\t'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'\n\t\t\t\t\t],\n\t\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\t'א\\'', 'ב\\'', 'ג\\'', 'ד\\'', 'ה\\'', 'ו\\'', 'שבת'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\tvalue: '',\n\t\t\tlang: 'en',\n\n\t\t\tformat:\t'Y/m/d H:i',\n\t\t\tformatTime:\t'H:i',\n\t\t\tformatDate:\t'Y/m/d',\n\n\t\t\tstartDate:\tfalse, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',\n\t\t\tstep: 60,\n\t\t\tmonthChangeSpinner: true,\n\n\t\t\tcloseOnDateSelect: false,\n\t\t\tcloseOnWithoutClick: true,\n\t\t\tcloseOnInputClick: true,\n\n\t\t\ttimepicker: true,\n\t\t\tdatepicker: true,\n\t\t\tweeks: false,\n\n\t\t\tdefaultTime: false,\t// use formatTime format (ex. '10:00' for formatTime:\t'H:i')\n\t\t\tdefaultDate: false,\t// use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')\n\n\t\t\tminDate: false,\n\t\t\tmaxDate: false,\n\t\t\tminTime: false,\n\t\t\tmaxTime: false,\n\n\t\t\tallowTimes: [],\n\t\t\topened: false,\n\t\t\tinitTime: true,\n\t\t\tinline: false,\n\t\t\ttheme: '',\n\n\t\t\tonSelectDate: function () {},\n\t\t\tonSelectTime: function () {},\n\t\t\tonChangeMonth: function () {},\n\t\t\tonChangeYear: function () {},\n\t\t\tonChangeDateTime: function () {},\n\t\t\tonShow: function () {},\n\t\t\tonClose: function () {},\n\t\t\tonGenerate: function () {},\n\n\t\t\twithoutCopyright: true,\n\t\t\tinverseButton: false,\n\t\t\thours12: false,\n\t\t\tnext:\t'xdsoft_next',\n\t\t\tprev : 'xdsoft_prev',\n\t\t\tdayOfWeekStart: 0,\n\t\t\tparentID: 'body',\n\t\t\ttimeHeightInTimePicker: 25,\n\t\t\ttimepickerScrollbar: true,\n\t\t\ttodayButton: true,\n\t\t\tdefaultSelect: true,\n\n\t\t\tscrollMonth: true,\n\t\t\tscrollTime: true,\n\t\t\tscrollInput: true,\n\n\t\t\tlazyInit: false,\n\t\t\tmask: false,\n\t\t\tvalidateOnBlur: true,\n\t\t\tallowBlank: true,\n\t\t\tyearStart: 1950,\n\t\t\tyearEnd: 2050,\n\t\t\tstyle: '',\n\t\t\tid: '',\n\t\t\tfixed: false,\n\t\t\troundTime: 'round', // ceil, floor\n\t\t\tclassName: '',\n\t\t\tweekends: [],\n\t\t\tdisabledDates : [],\n\t\t\tyearOffset: 0,\n\t\t\tbeforeShowDay: null,\n\n\t\t\tenterLikeTab: true\n\t\t};\n\t\t// fix for ie8\n\t\tif (!Array.prototype.indexOf) {\n\t\t\tArray.prototype.indexOf = function (obj, start) {\n\t\t\t\tvar i, j;\n\t\t\t\tfor (i = (start || 0), j = this.length; i < j; i += 1) {\n\t\t\t\t\tif (this[i] === obj) { return i; }\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t}\n\t\tDate.prototype.countDaysInMonth = function () {\n\t\t\treturn new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();\n\t\t};\n\t\t$.fn.extend ( \"xdsoftScroller\"   ,  function (percent) {\n\t\t\treturn this.each(function () {\n\t\t\t\tvar timeboxparent = $(this),\n\t\t\t\t\tpointerEventToXY = function (e) {\n\t\t\t\t\t\tvar out = {x: 0, y: 0},\n\t\t\t\t\t\t\ttouch;\n\t\t\t\t\t\tif (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {\n\t\t\t\t\t\t\ttouch  = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];\n\t\t\t\t\t\t\tout.x = touch.clientX;\n\t\t\t\t\t\t\tout.y = touch.clientY;\n\t\t\t\t\t\t} else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {\n\t\t\t\t\t\t\tout.x = e.clientX;\n\t\t\t\t\t\t\tout.y = e.clientY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn out;\n\t\t\t\t\t},\n\t\t\t\t\tmove = 0,\n\t\t\t\t\ttimebox,\n\t\t\t\t\tparentHeight,\n\t\t\t\t\theight,\n\t\t\t\t\tscrollbar,\n\t\t\t\t\tscroller,\n\t\t\t\t\tmaximumOffset = 100,\n\t\t\t\t\tstart = false,\n\t\t\t\t\tstartY = 0,\n\t\t\t\t\tstartTop = 0,\n\t\t\t\t\th1 = 0,\n\t\t\t\t\ttouchStart = false,\n\t\t\t\t\tstartTopScroll = 0,\n\t\t\t\t\tcalcOffset = function () {};\n\t\t\t\tif (percent === 'hide') {\n\t\t\t\t\ttimeboxparent.find('.xdsoft_scrollbar').hide();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!$(this).hasClass('xdsoft_scroller_box')) {\n\t\t\t\t\ttimebox = timeboxparent.children().eq(0);\n\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\tscrollbar = $('<div class=\"xdsoft_scrollbar\"></div>');\n\t\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>');\n\t\t\t\t\tscrollbar.append(scroller);\n\n\t\t\t\t\ttimeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);\n\t\t\t\t\tcalcOffset = function calcOffset(event) {\n\t\t\t\t\t\tvar offset = pointerEventToXY(event).y - startY + startTopScroll;\n\t\t\t\t\t\tif (offset < 0) {\n\t\t\t\t\t\t\toffset = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (offset + scroller[0].offsetHeight > h1) {\n\t\t\t\t\t\t\toffset = h1 - scroller[0].offsetHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);\n\t\t\t\t\t};\n\n\t\t\t\t\tscroller\n\t\t\t\t\t\t.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {\n\t\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstartY = pointerEventToXY(event).y;\n\t\t\t\t\t\t\tstartTopScroll = parseInt(scroller.css('margin-top'), 10);\n\t\t\t\t\t\t\th1 = scrollbar[0].offsetHeight;\n\n\t\t\t\t\t\t\tif (event.type === 'mousedown') {\n\t\t\t\t\t\t\t\tif (document) {\n\t\t\t\t\t\t\t\t\t$(document.body).addClass('xdsoft_noselect');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft_scroller', function arguments_callee() {\n\t\t\t\t\t\t\t\t\t$([document.body, window]).off('mouseup.xdsoft_scroller', arguments_callee)\n\t\t\t\t\t\t\t\t\t\t.off('mousemove.xdsoft_scroller', calcOffset)\n\t\t\t\t\t\t\t\t\t\t.removeClass('xdsoft_noselect');\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t$(document.body).on('mousemove.xdsoft_scroller', calcOffset);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttouchStart = true;\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('touchmove', function (event) {\n\t\t\t\t\t\t\tif (touchStart) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tcalcOffset(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('touchend touchcancel', function (event) {\n\t\t\t\t\t\t\ttouchStart =  false;\n\t\t\t\t\t\t\tstartTopScroll = 0;\n\t\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent\n\t\t\t\t\t\t.on('scroll_element.xdsoft_scroller', function (event, percentage) {\n\t\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpercentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;\n\n\t\t\t\t\t\t\tscroller.css('margin-top', maximumOffset * percentage);\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {\n\t\t\t\t\t\t\tvar percent, sh;\n\t\t\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\t\tpercent = parentHeight / height;\n\t\t\t\t\t\t\tsh = percent * scrollbar[0].offsetHeight;\n\t\t\t\t\t\t\tif (percent > 1) {\n\t\t\t\t\t\t\t\tscroller.hide();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tscroller.show();\n\t\t\t\t\t\t\t\tscroller.css('height', parseInt(sh > 10 ? sh : 10, 10));\n\t\t\t\t\t\t\t\tmaximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;\n\t\t\t\t\t\t\t\tif (noTriggerScroll !== true) {\n\t\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('mousewheel', function (event) {\n\t\t\t\t\t\tvar top = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\n\t\t\t\t\t\ttop = top - (event.deltaY * 20);\n\t\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchstart', function (event) {\n\t\t\t\t\t\tstart = pointerEventToXY(event);\n\t\t\t\t\t\tstartTop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchmove', function (event) {\n\t\t\t\t\t\tif (start) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tvar coord = pointerEventToXY(event);\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\ttimeboxparent.on('touchend touchcancel', function (event) {\n\t\t\t\t\t\tstart = false;\n\t\t\t\t\t\tstartTop = 0;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t\t});\n\t\t});\n\n\t\t$.fn.extend ( \"datetimepicker\" , function (opt) {\n\t\t\tvar KEY0 = 48,\n\t\t\t\tKEY9 = 57,\n\t\t\t\t_KEY0 = 96,\n\t\t\t\t_KEY9 = 105,\n\t\t\t\tCTRLKEY = 17,\n\t\t\t\tDEL = 46,\n\t\t\t\tENTER = 13,\n\t\t\t\tESC = 27,\n\t\t\t\tBACKSPACE = 8,\n\t\t\t\tARROWLEFT = 37,\n\t\t\t\tARROWUP = 38,\n\t\t\t\tARROWRIGHT = 39,\n\t\t\t\tARROWDOWN = 40,\n\t\t\t\tTAB = 9,\n\t\t\t\tF5 = 116,\n\t\t\t\tAKEY = 65,\n\t\t\t\tCKEY = 67,\n\t\t\t\tVKEY = 86,\n\t\t\t\tZKEY = 90,\n\t\t\t\tYKEY = 89,\n\t\t\t\tctrlDown\t=\tfalse,\n\t\t\t\toptions = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),\n\n\t\t\t\tlazyInitTimer = 0,\n\t\t\t\tcreateDateTimePicker,\n\t\t\t\tdestroyDateTimePicker,\n\t\t\t\t_xdsoft_datetime,\n\n\t\t\t\tlazyInit = function (input) {\n\t\t\t\t\tinput\n\t\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function initOnActionCallback(event) {\n\t\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclearTimeout(lazyInitTimer);\n\t\t\t\t\t\t\tlazyInitTimer = setTimeout(function () {\n\n\t\t\t\t\t\t\t\tif (!input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\t\t\tcreateDateTimePicker(input);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t\t\t.off('open.xdsoft focusin.xdsoft mousedown.xdsoft', initOnActionCallback)\n\t\t\t\t\t\t\t\t\t.trigger('open.xdsoft');\n\t\t\t\t\t\t\t}, 100);\n\t\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\tcreateDateTimePicker = function (input) {\n\t\t\t\tvar datetimepicker = $('<div ' + (options.id ? 'id=\"' + options.id + '\"' : '') + ' ' + (options.style ? 'style=\"' + options.style + '\"' : '') + ' class=\"xdsoft_datetimepicker xdsoft_' + options.theme + ' xdsoft_noselect ' + (options.weeks ? ' xdsoft_showweeks' : '') + options.className + '\"></div>'),\n\t\t\t\t\txdsoft_copyright = $('<div class=\"xdsoft_copyright\"><a target=\"_blank\" href=\"http://xdsoft.net/jqplugins/datetimepicker/\">xdsoft.net</a></div>'),\n\t\t\t\t\tdatepicker = $('<div class=\"xdsoft_datepicker active\"></div>'),\n\t\t\t\t\tmounth_picker = $('<div class=\"xdsoft_mounthpicker\"><button type=\"button\" class=\"xdsoft_prev\"></button><button type=\"button\" class=\"xdsoft_today_button\"></button>' +\n\t\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_month\"><span></span><i></i></div>' +\n\t\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_year\"><span></span><i></i></div>' +\n\t\t\t\t\t\t'<button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\t\tcalendar = $('<div class=\"xdsoft_calendar\"></div>'),\n\t\t\t\t\ttimepicker = $('<div class=\"xdsoft_timepicker active\"><button type=\"button\" class=\"xdsoft_prev\"></button><div class=\"xdsoft_time_box\"></div><button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\t\ttimeboxparent = timepicker.find('.xdsoft_time_box').eq(0),\n\t\t\t\t\ttimebox = $('<div class=\"xdsoft_time_variant\"></div>'),\n\t\t\t\t\t/*scrollbar = $('<div class=\"xdsoft_scrollbar\"></div>'),\n\t\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>'),*/\n\t\t\t\t\tmonthselect = $('<div class=\"xdsoft_select xdsoft_monthselect\"><div></div></div>'),\n\t\t\t\t\tyearselect = $('<div class=\"xdsoft_select xdsoft_yearselect\"><div></div></div>'),\n\t\t\t\t\ttriggerAfterOpen = false,\n\t\t\t\t\tXDSoft_datetime,\n\t\t\t\t\t//scroll_element,\n\t\t\t\t\txchangeTimer,\n\t\t\t\t\ttimerclick,\n\t\t\t\t\tcurrent_time_index,\n\t\t\t\t\tsetPos,\n\t\t\t\t\ttimer = 0,\n\t\t\t\t\ttimer1 = 0;\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_month span')\n\t\t\t\t\t\t.after(monthselect);\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_year span')\n\t\t\t\t\t\t.after(yearselect);\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tvar select = $(this).find('.xdsoft_select').eq(0),\n\t\t\t\t\t\t\tval = 0,\n\t\t\t\t\t\t\ttop = 0,\n\t\t\t\t\t\t\tvisible = select.is(':visible'),\n\t\t\t\t\t\t\titems,\n\t\t\t\t\t\t\ti;\n\n\t\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t\t\t.hide();\n\t\t\t\t\t\tif (_xdsoft_datetime.currentTime) {\n\t\t\t\t\t\t\tval = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselect[visible ? 'hide' : 'show']();\n\t\t\t\t\t\tfor (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {\n\t\t\t\t\t\t\tif (items.eq(i).data('value') === val) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttop += items[0].offsetHeight;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselect.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t.xdsoftScroller()\n\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t})\n\t\t\t\t\t.on('mousedown.xdsoft', '.xdsoft_option', function (event) {\n\t\t\t\t\t\tvar year = _xdsoft_datetime.currentTime.getFullYear();\n\t\t\t\t\t\tif (_xdsoft_datetime && _xdsoft_datetime.currentTime) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$(this).parent().parent().hide();\n\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tdatetimepicker.setOptions = function (_options) {\n\t\t\t\t\toptions = $.extend(true, {}, options, _options);\n\n\t\t\t\t\tif (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {\n\t\t\t\t\t\toptions.allowTimes = $.extend(true, [], _options.allowTimes);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {\n\t\t\t\t\t\toptions.weekends = $.extend(true, [], _options.weekends);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {\n\t                    options.disabledDates = $.extend(true, [], _options.disabledDates);\n\t                }\n\n\t\t\t\t\tif ((options.open || options.opened) && (!options.inline)) {\n\t\t\t\t\t\tinput.trigger('open.xdsoft');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.inline) {\n\t\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\t\tdatetimepicker.addClass('xdsoft_inline');\n\t\t\t\t\t\tinput.after(datetimepicker).hide();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.inverseButton) {\n\t\t\t\t\t\toptions.next = 'xdsoft_prev';\n\t\t\t\t\t\toptions.prev = 'xdsoft_next';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.datepicker) {\n\t\t\t\t\t\tdatepicker.addClass('active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatepicker.removeClass('active');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.timepicker) {\n\t\t\t\t\t\ttimepicker.addClass('active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimepicker.removeClass('active');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.value) {\n\t\t\t\t\t\tif (input && input.val) {\n\t\t\t\t\t\t\tinput.val(options.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(options.value);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isNaN(options.dayOfWeekStart)) {\n\t\t\t\t\t\toptions.dayOfWeekStart = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!options.timepickerScrollbar) {\n\t\t\t\t\t\ttimeboxparent.xdsoftScroller('hide');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.minDate && /^-(.*)$/.test(options.minDate)) {\n\t\t\t\t\t\toptions.minDate = _xdsoft_datetime.strToDateTime(options.minDate).dateFormat(options.formatDate);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.maxDate &&  /^\\+(.*)$/.test(options.maxDate)) {\n\t\t\t\t\t\toptions.maxDate = _xdsoft_datetime.strToDateTime(options.maxDate).dateFormat(options.formatDate);\n\t\t\t\t\t}\n\n\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t\t\t\t.css('visibility', !options.todayButton ? 'hidden' : 'visible');\n\n\t\t\t\t\tif (options.mask) {\n\t\t\t\t\t\tvar e,\n\t\t\t\t\t\t\tgetCaretPos = function (input) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tif (document.selection && document.selection.createRange) {\n\t\t\t\t\t\t\t\t\t\tvar range = document.selection.createRange();\n\t\t\t\t\t\t\t\t\t\treturn range.getBookmark().charCodeAt(2) - 2;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (input.setSelectionRange) {\n\t\t\t\t\t\t\t\t\t\treturn input.selectionStart;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetCaretPos = function (node, pos) {\n\t\t\t\t\t\t\t\tnode = (typeof node === \"string\" || node instanceof String) ? document.getElementById(node) : node;\n\t\t\t\t\t\t\t\tif (!node) {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (node.createTextRange) {\n\t\t\t\t\t\t\t\t\tvar textRange = node.createTextRange();\n\t\t\t\t\t\t\t\t\ttextRange.collapse(true);\n\t\t\t\t\t\t\t\t\ttextRange.moveEnd('character', pos);\n\t\t\t\t\t\t\t\t\ttextRange.moveStart('character', pos);\n\t\t\t\t\t\t\t\t\ttextRange.select();\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (node.setSelectionRange) {\n\t\t\t\t\t\t\t\t\tnode.setSelectionRange(pos, pos);\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisValidValue = function (mask, value) {\n\t\t\t\t\t\t\t\tvar reg = mask\n\t\t\t\t\t\t\t\t\t.replace(/([\\[\\]\\/\\{\\}\\(\\)\\-\\.\\+]{1})/g, '\\\\$1')\n\t\t\t\t\t\t\t\t\t.replace(/_/g, '{digit+}')\n\t\t\t\t\t\t\t\t\t.replace(/([0-9]{1})/g, '{digit$1}')\n\t\t\t\t\t\t\t\t\t.replace(/\\{digit([0-9]{1})\\}/g, '[0-$1_]{1}')\n\t\t\t\t\t\t\t\t\t.replace(/\\{digit[\\+]\\}/g, '[0-9_]{1}');\n\t\t\t\t\t\t\t\treturn (new RegExp(reg)).test(value);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tinput.off('keydown.xdsoft');\n\n\t\t\t\t\t\tif (options.mask === true) {\n\t\t\t\t\t\t\toptions.mask = options.format\n\t\t\t\t\t\t\t\t.replace(/Y/g, '9999')\n\t\t\t\t\t\t\t\t.replace(/F/g, '9999')\n\t\t\t\t\t\t\t\t.replace(/m/g, '19')\n\t\t\t\t\t\t\t\t.replace(/d/g, '39')\n\t\t\t\t\t\t\t\t.replace(/H/g, '29')\n\t\t\t\t\t\t\t\t.replace(/i/g, '59')\n\t\t\t\t\t\t\t\t.replace(/s/g, '59');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($.type(options.mask) === 'string') {\n\t\t\t\t\t\t\tif (!isValidValue(options.mask, input.val())) {\n\t\t\t\t\t\t\t\tinput.val(options.mask.replace(/[0-9]/g, '_'));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tinput.on('keydown.xdsoft', function (event) {\n\t\t\t\t\t\t\t\tvar val = this.value,\n\t\t\t\t\t\t\t\t\tkey = event.which,\n\t\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\t\tdigit;\n\n\t\t\t\t\t\t\t\tif (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {\n\t\t\t\t\t\t\t\t\tpos = getCaretPos(this);\n\t\t\t\t\t\t\t\t\tdigit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';\n\n\t\t\t\t\t\t\t\t\tif ((key === BACKSPACE || key === DEL) && pos) {\n\t\t\t\t\t\t\t\t\t\tpos -= 1;\n\t\t\t\t\t\t\t\t\t\tdigit = '_';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? -1 : 1;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tval = val.substr(0, pos) + digit + val.substr(pos + 1);\n\t\t\t\t\t\t\t\t\tif ($.trim(val) === '') {\n\t\t\t\t\t\t\t\t\t\tval = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (pos === options.mask.length) {\n\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? 0 : 1;\n\t\t\t\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? -1 : 1;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (isValidValue(options.mask, val)) {\n\t\t\t\t\t\t\t\t\t\tthis.value = val;\n\t\t\t\t\t\t\t\t\t\tsetCaretPos(this, pos);\n\t\t\t\t\t\t\t\t\t} else if ($.trim(val) === '') {\n\t\t\t\t\t\t\t\t\t\tthis.value = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tinput.trigger('error_input.xdsoft');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (options.validateOnBlur) {\n\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t.off('blur.xdsoft')\n\t\t\t\t\t\t\t.on('blur.xdsoft', function () {\n\t\t\t\t\t\t\t\tif (options.allowBlank && !$.trim($(this).val()).length) {\n\t\t\t\t\t\t\t\t\t$(this).val(null);\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').empty();\n\t\t\t\t\t\t\t\t} else if (!Date.parseDate($(this).val(), options.format)) {\n\t\t\t\t\t\t\t\t\t$(this).val((_xdsoft_datetime.now()).dateFormat(options.format));\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\toptions.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;\n\n\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t.trigger('xchange.xdsoft')\n\t\t\t\t\t\t.trigger('afterOpen.xdsoft');\n\t\t\t\t};\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.data('options', options)\n\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tyearselect.hide();\n\t\t\t\t\t\tmonthselect.hide();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\t//scroll_element = timepicker.find('.xdsoft_time_box');\n\t\t\t\ttimeboxparent.append(timebox);\n\t\t\t\ttimeboxparent.xdsoftScroller();\n\n\t\t\t\tdatetimepicker.on('afterOpen.xdsoft', function () {\n\t\t\t\t\ttimeboxparent.xdsoftScroller();\n\t\t\t\t});\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.append(datepicker)\n\t\t\t\t\t.append(timepicker);\n\n\t\t\t\tif (options.withoutCopyright !== true) {\n\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t.append(xdsoft_copyright);\n\t\t\t\t}\n\n\t\t\t\tdatepicker\n\t\t\t\t\t.append(mounth_picker)\n\t\t\t\t\t.append(calendar);\n\n\t\t\t\t$(options.parentID)\n\t\t\t\t\t.append(datetimepicker);\n\n\t\t\t\tXDSoft_datetime = function () {\n\t\t\t\t\tvar _this = this;\n\t\t\t\t\t_this.now = function (norecursion) {\n\t\t\t\t\t\tvar d = new Date(),\n\t\t\t\t\t\t\tdate,\n\t\t\t\t\t\t\ttime;\n\n\t\t\t\t\t\tif (!norecursion && options.defaultDate) {\n\t\t\t\t\t\t\tdate = _this.strToDate(options.defaultDate);\n\t\t\t\t\t\t\td.setFullYear(date.getFullYear());\n\t\t\t\t\t\t\td.setMonth(date.getMonth());\n\t\t\t\t\t\t\td.setDate(date.getDate());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.yearOffset) {\n\t\t\t\t\t\t\td.setFullYear(d.getFullYear() + options.yearOffset);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!norecursion && options.defaultTime) {\n\t\t\t\t\t\t\ttime = _this.strtotime(options.defaultTime);\n\t\t\t\t\t\t\td.setHours(time.getHours());\n\t\t\t\t\t\t\td.setMinutes(time.getMinutes());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.isValidDate = function (d) {\n\t\t\t\t\t\tif (Object.prototype.toString.call(d) !== \"[object Date]\") {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn !isNaN(d.getTime());\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.setCurrentTime = function (dTime) {\n\t\t\t\t\t\t_this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.empty = function () {\n\t\t\t\t\t\t_this.currentTime = null;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.getCurrentTime = function (dTime) {\n\t\t\t\t\t\treturn _this.currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.nextMonth = function () {\n\t\t\t\t\t\tvar month = _this.currentTime.getMonth() + 1,\n\t\t\t\t\t\t\tyear;\n\t\t\t\t\t\tif (month === 12) {\n\t\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);\n\t\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tyear = _this.currentTime.getFullYear();\n\n\t\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\t_this.currentTime.setMonth(month);\n\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\treturn month;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.prevMonth = function () {\n\t\t\t\t\t\tvar month = _this.currentTime.getMonth() - 1;\n\t\t\t\t\t\tif (month === -1) {\n\t\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);\n\t\t\t\t\t\t\tmonth = 11;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\t_this.currentTime.setMonth(month);\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\treturn month;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.getWeekOfYear = function (datetime) {\n\t\t\t\t\t\tvar onejan = new Date(datetime.getFullYear(), 0, 1);\n\t\t\t\t\t\treturn Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strToDateTime = function (sDateTime) {\n\t\t\t\t\t\tvar tmpDate = [], timeOffset, currentTime;\n\n\t\t\t\t\t\tif (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {\n\t\t\t\t\t\t\treturn sDateTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttmpDate = /^(\\+|\\-)(.*)$/.exec(sDateTime);\n\t\t\t\t\t\tif (tmpDate) {\n\t\t\t\t\t\t\ttmpDate[2] = Date.parseDate(tmpDate[2], options.formatDate);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tmpDate  && tmpDate[2]) {\n\t\t\t\t\t\t\ttimeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;\n\t\t\t\t\t\t\tcurrentTime = new Date((_xdsoft_datetime.now()).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentTime = sDateTime ? Date.parseDate(sDateTime, options.format) : _this.now();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strToDate = function (sDate) {\n\t\t\t\t\t\tif (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {\n\t\t\t\t\t\t\treturn sDate;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar currentTime = sDate ? Date.parseDate(sDate, options.formatDate) : _this.now(true);\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.strtotime = function (sTime) {\n\t\t\t\t\t\tif (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {\n\t\t\t\t\t\t\treturn sTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar currentTime = sTime ? Date.parseDate(sTime, options.formatTime) : _this.now(true);\n\t\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t};\n\n\t\t\t\t\t_this.str = function () {\n\t\t\t\t\t\treturn _this.currentTime.dateFormat(options.format);\n\t\t\t\t\t};\n\t\t\t\t\t_this.currentTime = this.now();\n\t\t\t\t};\n\n\t\t\t\t_xdsoft_datetime = new XDSoft_datetime();\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(0);\n\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t\t}).on('dblclick.xdsoft', function () {\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t});\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\t\tstop = false;\n\n\t\t\t\t\t\t(function arguments_callee1(v) {\n\t\t\t\t\t\t\tvar month =  _xdsoft_datetime.currentTime.getMonth();\n\t\t\t\t\t\t\tif ($this.hasClass(options.next)) {\n\t\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t\t\t} else if ($this.hasClass(options.prev)) {\n\t\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (options.monthChangeSpinner) {\n\t\t\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee1, v || 100);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}(500));\n\n\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft', function arguments_callee2() {\n\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t\t$([document.body, window]).off('mouseup.xdsoft', arguments_callee2);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\ttimepicker\n\t\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\t\tstop = false,\n\t\t\t\t\t\t\tperiod = 110;\n\t\t\t\t\t\t(function arguments_callee4(v) {\n\t\t\t\t\t\t\tvar pheight = timeboxparent[0].clientHeight,\n\t\t\t\t\t\t\t\theight = timebox[0].offsetHeight,\n\t\t\t\t\t\t\t\ttop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t\t\t\tif ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t\t} else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {\n\t\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]);\n\t\t\t\t\t\t\tperiod = (period > 10) ? 10 : period - 10;\n\t\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee4, v || period);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}(500));\n\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft', function arguments_callee5() {\n\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t\t$([document.body, window])\n\t\t\t\t\t\t\t\t.off('mouseup.xdsoft', arguments_callee5);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\txchangeTimer = 0;\n\t\t\t\t// base handler - generating a calendar and timepicker\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('xchange.xdsoft', function (event) {\n\t\t\t\t\t\tclearTimeout(xchangeTimer);\n\t\t\t\t\t\txchangeTimer = setTimeout(function () {\n\t\t\t\t\t\t\tvar table =\t'',\n\t\t\t\t\t\t\t\tstart = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),\n\t\t\t\t\t\t\t\ti = 0,\n\t\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\t\ttoday = _xdsoft_datetime.now(),\n\t\t\t\t\t\t\t\tmaxDate = false,\n\t\t\t\t\t\t\t\tminDate = false,\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tm,\n\t\t\t\t\t\t\t\tw,\n\t\t\t\t\t\t\t\tclasses = [],\n\t\t\t\t\t\t\t\tcustomDateSettings,\n\t\t\t\t\t\t\t\tnewRow = true,\n\t\t\t\t\t\t\t\ttime = '',\n\t\t\t\t\t\t\t\th = '',\n\t\t\t\t\t\t\t\tline_time;\n\n\t\t\t\t\t\t\twhile (start.getDay() !== options.dayOfWeekStart) {\n\t\t\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttable += '<table><thead><tr>';\n\n\t\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\t\ttable += '<th></th>';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (j = 0; j < 7; j += 1) {\n\t\t\t\t\t\t\t\ttable += '<th>' + options.i18n[options.lang].dayOfWeek[(j + options.dayOfWeekStart) % 7] + '</th>';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttable += '</tr></thead>';\n\t\t\t\t\t\t\ttable += '<tbody>';\n\n\t\t\t\t\t\t\tif (options.maxDate !== false) {\n\t\t\t\t\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\n\t\t\t\t\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (options.minDate !== false) {\n\t\t\t\t\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\n\t\t\t\t\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twhile (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {\n\t\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\t\ti += 1;\n\n\t\t\t\t\t\t\t\td = start.getDate();\n\t\t\t\t\t\t\t\ty = start.getFullYear();\n\t\t\t\t\t\t\t\tm = start.getMonth();\n\t\t\t\t\t\t\t\tw = _xdsoft_datetime.getWeekOfYear(start);\n\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_date');\n\n\t\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {\n\t\t\t\t\t\t\t\t\tcustomDateSettings = options.beforeShowDay.call(datetimepicker, start);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcustomDateSettings = null;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t} else if (options.disabledDates.indexOf(start.dateFormat(options.formatDate)) !== -1) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (customDateSettings && customDateSettings[1] !== \"\") {\n\t\t\t\t\t\t\t\t\tclasses.push(customDateSettings[1]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (_xdsoft_datetime.currentTime.getMonth() !== m) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_other_month');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ((options.defaultSelect || datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (today.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(start.dateFormat(options.formatDate)) === -1) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_weekend');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {\n\t\t\t\t\t\t\t\t\tclasses.push(options.beforeShowDay(start));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (newRow) {\n\t\t\t\t\t\t\t\t\ttable += '<tr>';\n\t\t\t\t\t\t\t\t\tnewRow = false;\n\t\t\t\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\t\t\t\ttable += '<th>' + w + '</th>';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttable += '<td data-date=\"' + d + '\" data-month=\"' + m + '\" data-year=\"' + y + '\"' + ' class=\"xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '\">' +\n\t\t\t\t\t\t\t\t\t\t\t'<div>' + d + '</div>' +\n\t\t\t\t\t\t\t\t\t\t'</td>';\n\n\t\t\t\t\t\t\t\tif (start.getDay() === options.dayOfWeekStartPrev) {\n\t\t\t\t\t\t\t\t\ttable += '</tr>';\n\t\t\t\t\t\t\t\t\tnewRow = true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart.setDate(d + 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable += '</tbody></table>';\n\n\t\t\t\t\t\t\tcalendar.html(table);\n\n\t\t\t\t\t\t\tmounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[options.lang].months[_xdsoft_datetime.currentTime.getMonth()]);\n\t\t\t\t\t\t\tmounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());\n\n\t\t\t\t\t\t\t// generate timebox\n\t\t\t\t\t\t\ttime = '';\n\t\t\t\t\t\t\th = '';\n\t\t\t\t\t\t\tm = '';\n\t\t\t\t\t\t\tline_time = function line_time(h, m) {\n\t\t\t\t\t\t\t\tvar now = _xdsoft_datetime.now();\n\t\t\t\t\t\t\t\tnow.setHours(h);\n\t\t\t\t\t\t\t\th = parseInt(now.getHours(), 10);\n\t\t\t\t\t\t\t\tnow.setMinutes(m);\n\t\t\t\t\t\t\t\tm = parseInt(now.getMinutes(), 10);\n\t\t\t\t\t\t\t\tvar optionDateTime = new Date(_xdsoft_datetime.currentTime)\n\t\t\t\t\t\t\t\toptionDateTime.setHours(h);\n\t\t\t\t\t\t\t\toptionDateTime.setMinutes(m);\n\t\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\t\tif((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && parseInt(_xdsoft_datetime.currentTime.getHours(), 10) === parseInt(h, 10) && (options.step > 59 || Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step === parseInt(m, 10))) {\n\t\t\t\t\t\t\t\t\tif (options.defaultSelect || datetimepicker.data('changed')) {\n\t\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t\t\t} else if (options.initTime) {\n\t\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_init_time');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime += '<div class=\"xdsoft_time ' + classes.join(' ') + '\" data-hour=\"' + h + '\" data-minute=\"' + m + '\">' + now.dateFormat(options.formatTime) + '</div>';\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {\n\t\t\t\t\t\t\t\tfor (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < 60; j += options.step) {\n\t\t\t\t\t\t\t\t\t\th = (i < 10 ? '0' : '') + i;\n\t\t\t\t\t\t\t\t\t\tm = (j < 10 ? '0' : '') + j;\n\t\t\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfor (i = 0; i < options.allowTimes.length; i += 1) {\n\t\t\t\t\t\t\t\t\th = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();\n\t\t\t\t\t\t\t\t\tm = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();\n\t\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttimebox.html(time);\n\n\t\t\t\t\t\t\topt = '';\n\t\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\t\t\tfor (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) {\n\t\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + i + '</div>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyearselect.children().eq(0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.html(opt);\n\n\t\t\t\t\t\t\tfor (i = 0, opt = ''; i <= 11; i += 1) {\n\t\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + options.i18n[options.lang].months[i] + '</div>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmonthselect.children().eq(0).html(opt);\n\t\t\t\t\t\t\t$(datetimepicker)\n\t\t\t\t\t\t\t\t.trigger('generate.xdsoft');\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t})\n\t\t\t\t\t.on('afterOpen.xdsoft', function () {\n\t\t\t\t\t\tif (options.timepicker) {\n\t\t\t\t\t\t\tvar classType, pheight, height, top;\n\t\t\t\t\t\t\tif (timebox.find('.xdsoft_current').length) {\n\t\t\t\t\t\t\t\tclassType = '.xdsoft_current';\n\t\t\t\t\t\t\t} else if (timebox.find('.xdsoft_init_time').length) {\n\t\t\t\t\t\t\t\tclassType = '.xdsoft_init_time';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (classType) {\n\t\t\t\t\t\t\t\tpheight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\t\t\ttop = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;\n\t\t\t\t\t\t\t\tif ((height - pheight) < top) {\n\t\t\t\t\t\t\t\t\ttop = height - pheight;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\ttimerclick = 0;\n\t\t\t\tcalendar\n\t\t\t\t\t.on('click.xdsoft', 'td', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();  // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap\n\t\t\t\t\t\ttimerclick += 1;\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentTime.setDate(1);\n\t\t\t\t\t\tcurrentTime.setFullYear($this.data('year'));\n\t\t\t\t\t\tcurrentTime.setMonth($this.data('month'));\n\t\t\t\t\t\tcurrentTime.setDate($this.data('date'));\n\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\tif ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === 0 && !options.timepicker))) && !options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onSelectDate &&\t$.isFunction(options.onSelectDate)) {\n\t\t\t\t\t\t\toptions.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\ttimerclick = 0;\n\t\t\t\t\t\t}, 200);\n\t\t\t\t\t});\n\n\t\t\t\ttimebox\n\t\t\t\t\t.on('click.xdsoft', 'div', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentTime.setHours($this.data('hour'));\n\t\t\t\t\t\tcurrentTime.setMinutes($this.data('minute'));\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\t\tdatetimepicker.data('input').val(_xdsoft_datetime.str());\n\t\t\t\t\t\tif (!options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onSelectTime && $.isFunction(options.onSelectTime)) {\n\t\t\t\t\t\t\toptions.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t});\n\n\n\t\t\t\tdatepicker\n\t\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\t\tif (!options.scrollMonth) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.deltaY < 0) {\n\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\tinput\n\t\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\t\tif (!options.scrollInput) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!options.datepicker && options.timepicker) {\n\t\t\t\t\t\t\tcurrent_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;\n\t\t\t\t\t\t\tif (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {\n\t\t\t\t\t\t\t\tcurrent_time_index += event.deltaY;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (timebox.children().eq(current_time_index).length) {\n\t\t\t\t\t\t\t\ttimebox.children().eq(current_time_index).trigger('mousedown');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.datepicker && !options.timepicker) {\n\t\t\t\t\t\t\tdatepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);\n\t\t\t\t\t\t\tif (input.val) {\n\t\t\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('changedatetime.xdsoft', function (event) {\n\t\t\t\t\t\tif (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {\n\t\t\t\t\t\t\tvar $input = datetimepicker.data('input');\n\t\t\t\t\t\t\toptions.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);\n\t\t\t\t\t\t\tdelete options.value;\n\t\t\t\t\t\t\t$input.trigger('change');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('generate.xdsoft', function () {\n\t\t\t\t\t\tif (options.onGenerate && $.isFunction(options.onGenerate)) {\n\t\t\t\t\t\t\toptions.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (triggerAfterOpen) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t\t\t\ttriggerAfterOpen = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('click.xdsoft', function (xdevent) {\n\t\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t\t});\n\n\t\t\t\tcurrent_time_index = 0;\n\n\t\t\t\tsetPos = function () {\n\t\t\t\t\tvar offset = datetimepicker.data('input').offset(), top = offset.top + datetimepicker.data('input')[0].offsetHeight - 1, left = offset.left, position = \"position\";\n\t\t\t\t\tif (options.fixed) {\n\t\t\t\t\t\ttop -= $(window).scrollTop();\n\t\t\t\t\t\tleft -= $(window).scrollLeft();\n\t\t\t\t\t\tposition = \"fixed\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (top + datetimepicker[0].offsetHeight > $(window).height() + $(window).scrollTop()) {\n\t\t\t\t\t\t\ttop = offset.top - datetimepicker[0].offsetHeight + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (left + datetimepicker[0].offsetWidth > $(window).width()) {\n\t\t\t\t\t\t\tleft = $(window).width() - datetimepicker[0].offsetWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdatetimepicker.css({\n\t\t\t\t\t\tleft: left,\n\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\tposition: position\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.on('open.xdsoft', function (event) {\n\t\t\t\t\t\tvar onShow = true;\n\t\t\t\t\t\tif (options.onShow && $.isFunction(options.onShow)) {\n\t\t\t\t\t\t\tonShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (onShow !== false) {\n\t\t\t\t\t\t\tdatetimepicker.show();\n\t\t\t\t\t\t\tsetPos();\n\t\t\t\t\t\t\t$(window)\n\t\t\t\t\t\t\t\t.off('resize.xdsoft', setPos)\n\t\t\t\t\t\t\t\t.on('resize.xdsoft', setPos);\n\n\t\t\t\t\t\t\tif (options.closeOnWithoutClick) {\n\t\t\t\t\t\t\t\t$([document.body, window]).on('mousedown.xdsoft', function arguments_callee6() {\n\t\t\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\t\t\t$([document.body, window]).off('mousedown.xdsoft', arguments_callee6);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('close.xdsoft', function (event) {\n\t\t\t\t\t\tvar onClose = true;\n\t\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t\t\t\t.hide();\n\t\t\t\t\t\tif (options.onClose && $.isFunction(options.onClose)) {\n\t\t\t\t\t\t\tonClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (onClose !== false && !options.opened && !options.inline) {\n\t\t\t\t\t\t\tdatetimepicker.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t})\n\t\t\t\t\t.on('toggle.xdsoft', function (event) {\n\t\t\t\t\t\tif (datetimepicker.is(':visible')) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.data('input', input);\n\n\t\t\t\ttimer = 0;\n\t\t\t\ttimer1 = 0;\n\n\t\t\t\tdatetimepicker.data('xdsoft_datetime', _xdsoft_datetime);\n\t\t\t\tdatetimepicker.setOptions(options);\n\n\t\t\t\tfunction getCurrentValue() {\n\n\t\t\t\t\tvar ct = false, time;\n\n\t\t\t\t\tif (options.startDate) {\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.startDate);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tct = options.value || ((input && input.val && input.val()) ? input.val() : '');\n\t\t\t\t\t\tif (ct) {\n\t\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(ct);\n\t\t\t\t\t\t} else if (options.defaultDate) {\n\t\t\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.defaultDate);\n\t\t\t\t\t\t\tif (options.defaultTime) {\n\t\t\t\t\t\t\t\ttime = _xdsoft_datetime.strtotime(options.defaultTime);\n\t\t\t\t\t\t\t\tct.setHours(time.getHours());\n\t\t\t\t\t\t\t\tct.setMinutes(time.getMinutes());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ct && _xdsoft_datetime.isValidDate(ct)) {\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tct = '';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ct || 0;\n\t\t\t\t}\n\n\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\t\tinput\n\t\t\t\t\t.data('xdsoft_datetimepicker', datetimepicker)\n\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function (event) {\n\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\ttimer = setTimeout(function () {\n\t\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible')) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t})\n\t\t\t\t\t.on('keydown.xdsoft', function (event) {\n\t\t\t\t\t\tvar val = this.value, elementSelector,\n\t\t\t\t\t\t\tkey = event.which;\n\t\t\t\t\t\tif ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {\n\t\t\t\t\t\t\telementSelector = $(\"input:visible,textarea:visible\");\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\telementSelector.eq(elementSelector.index(this) + 1).focus();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ([TAB].indexOf(key) !== -1) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t};\n\t\t\tdestroyDateTimePicker = function (input) {\n\t\t\t\tvar datetimepicker = input.data('xdsoft_datetimepicker');\n\t\t\t\tif (datetimepicker) {\n\t\t\t\t\tdatetimepicker.data('xdsoft_datetime', null);\n\t\t\t\t\tdatetimepicker.remove();\n\t\t\t\t\tinput\n\t\t\t\t\t\t.data('xdsoft_datetimepicker', null)\n\t\t\t\t\t\t.off('.xdsoft');\n\t\t\t\t\t$(window).off('resize.xdsoft');\n\t\t\t\t\t$([window, document.body]).off('mousedown.xdsoft');\n\t\t\t\t\tif (input.unmousewheel) {\n\t\t\t\t\t\tinput.unmousewheel();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t$(document)\n\t\t\t\t.off('keydown.xdsoftctrl keyup.xdsoftctrl')\n\t\t\t\t.on('keydown.xdsoftctrl', function (e) {\n\t\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\t\tctrlDown = true;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keyup.xdsoftctrl', function (e) {\n\t\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\t\tctrlDown = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\treturn this.each(function () {\n\t\t\t\tvar datetimepicker = $(this).data('xdsoft_datetimepicker');\n\t\t\t\tif (datetimepicker) {\n\t\t\t\t\tif ($.type(opt) === 'string') {\n\t\t\t\t\t\tswitch (opt) {\n\t\t\t\t\t\tcase 'show':\n\t\t\t\t\t\t\t$(this).select().focus();\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'hide':\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'toggle':\n\t\t\t\t\t\t\tdatetimepicker.trigger('toggle.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'destroy':\n\t\t\t\t\t\t\tdestroyDateTimePicker($(this));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'reset':\n\t\t\t\t\t\t\tthis.value = this.defaultValue;\n\t\t\t\t\t\t\tif (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format))) {\n\t\t\t\t\t\t\t\tdatetimepicker.data('changed', false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t\t.setOptions(opt);\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif ($.type(opt) !== 'string') {\n\t\t\t\t\tif (!options.lazyInit || options.open || options.inline) {\n\t\t\t\t\t\tcreateDateTimePicker($(this));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlazyInit($(this));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t$.fn.extend ( \"datetimepicker.defaults\" , default_options);\n\t}(jQuery));\n\t(function () {\n\n\t/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)\n\t * Licensed under the MIT License (LICENSE.txt).\n\t *\n\t * Version: 3.1.12\n\t *\n\t * Requires: jQuery 1.2.2+\n\t */\n\t!function(a){true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(5)], __WEBPACK_AMD_DEFINE_FACTORY__ = (a), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):\"object\"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type=\"mousewheel\",\"detail\"in g&&(m=-1*g.detail),\"wheelDelta\"in g&&(m=g.wheelDelta),\"wheelDeltaY\"in g&&(m=g.wheelDeltaY),\"wheelDeltaX\"in g&&(l=-1*g.wheelDeltaX),\"axis\"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,\"deltaY\"in g&&(m=-1*g.deltaY,j=m),\"deltaX\"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,\"mousewheel-line-height\");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,\"mousewheel-page-height\");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?\"floor\":\"ceil\"](j/f),l=Math[l>=1?\"floor\":\"ceil\"](l/f),m=Math[m>=1?\"floor\":\"ceil\"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&\"mousewheel\"===a.type&&b%120===0}var e,f,g=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],h=\"onwheel\"in document||document.documentMode>=9?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:\"3.1.12\",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,\"mousewheel-line-height\",k.getLineHeight(this)),a.data(this,\"mousewheel-page-height\",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,\"mousewheel-line-height\"),a.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(b){var c=a(b),d=c[\"offsetParent\"in a.fn?\"offsetParent\":\"parent\"]();return d.length||(d=a(\"body\")),parseInt(d.css(\"fontSize\"),10)||parseInt(c.css(\"fontSize\"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind(\"mousewheel\",a):this.trigger(\"mousewheel\")},unmousewheel:function(a){return this.unbind(\"mousewheel\",a)}})});\n\n\t// Parse and Format Library\n\t//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/\n\t/*\n\t * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>\n\t *\n\t * This program is free software; you can redistribute it and/or modify it\n\t * under the terms of the GNU Lesser General Public License as published by the\n\t * Free Software Foundation, version 2.1.\n\t *\n\t * This program is distributed in the hope that it will be useful, but WITHOUT\n\t * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\t * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more\n\t * details.\n\t */\n\tDate.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(b){if(b==\"unixtime\"){return parseInt(this.getTime()/1000);}if(Date.formatFunctions[b]==null){Date.createNewFormat(b);}var a=Date.formatFunctions[b];return this[a]();};Date.createNewFormat=function(format){var funcName=\"format\"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var code=\"Date.prototype.\"+funcName+\" = function() {return \";var special=false;var ch=\"\";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch==\"\\\\\"){special=true;}else{if(special){special=false;code+=\"'\"+String.escape(ch)+\"' + \";}else{code+=Date.getFormatCode(ch);}}}eval(code.substring(0,code.length-3)+\";}\");};Date.getFormatCode=function(a){switch(a){case\"d\":return\"String.leftPad(this.getDate(), 2, '0') + \";case\"D\":return\"Date.dayNames[this.getDay()].substring(0, 3) + \";case\"j\":return\"this.getDate() + \";case\"l\":return\"Date.dayNames[this.getDay()] + \";case\"S\":return\"this.getSuffix() + \";case\"w\":return\"this.getDay() + \";case\"z\":return\"this.getDayOfYear() + \";case\"W\":return\"this.getWeekOfYear() + \";case\"F\":return\"Date.monthNames[this.getMonth()] + \";case\"m\":return\"String.leftPad(this.getMonth() + 1, 2, '0') + \";case\"M\":return\"Date.monthNames[this.getMonth()].substring(0, 3) + \";case\"n\":return\"(this.getMonth() + 1) + \";case\"t\":return\"this.getDaysInMonth() + \";case\"L\":return\"(this.isLeapYear() ? 1 : 0) + \";case\"Y\":return\"this.getFullYear() + \";case\"y\":return\"('' + this.getFullYear()).substring(2, 4) + \";case\"a\":return\"(this.getHours() < 12 ? 'am' : 'pm') + \";case\"A\":return\"(this.getHours() < 12 ? 'AM' : 'PM') + \";case\"g\":return\"((this.getHours() %12) ? this.getHours() % 12 : 12) + \";case\"G\":return\"this.getHours() + \";case\"h\":return\"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + \";case\"H\":return\"String.leftPad(this.getHours(), 2, '0') + \";case\"i\":return\"String.leftPad(this.getMinutes(), 2, '0') + \";case\"s\":return\"String.leftPad(this.getSeconds(), 2, '0') + \";case\"O\":return\"this.getGMTOffset() + \";case\"T\":return\"this.getTimezone() + \";case\"Z\":return\"(this.getTimezoneOffset() * -60) + \";default:return\"'\"+String.escape(a)+\"' + \";}};Date.parseDate=function(a,c){if(c==\"unixtime\"){return new Date(!isNaN(parseInt(a))?parseInt(a)*1000:0);}if(Date.parseFunctions[c]==null){Date.createParser(c);}var b=Date.parseFunctions[c];return Date[b](a);};Date.createParser=function(format){var funcName=\"parse\"+Date.parseFunctions.count++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code=\"Date.\"+funcName+\" = function(input) {\\nvar y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, z = -1;\\nvar d = new Date();\\ny = d.getFullYear();\\nm = d.getMonth();\\nd = d.getDate();\\nvar results = input.match(Date.parseRegexes[\"+regexNum+\"]);\\nif (results && results.length > 0) {\";var regex=\"\";var special=false;var ch=\"\";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch==\"\\\\\"){special=true;}else{if(special){special=false;regex+=String.escape(ch);}else{obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}}code+=\"if (y > 0 && z > 0){\\nvar doyDate = new Date(y,0);\\ndoyDate.setDate(z);\\nm = doyDate.getMonth();\\nd = doyDate.getDate();\\n}\";code+=\"if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\\n{return new Date(y, m, d, h, i, s);}\\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\\n{return new Date(y, m, d, h, i);}\\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0)\\n{return new Date(y, m, d, h);}\\nelse if (y > 0 && m >= 0 && d > 0)\\n{return new Date(y, m, d);}\\nelse if (y > 0 && m >= 0)\\n{return new Date(y, m);}\\nelse if (y > 0)\\n{return new Date(y);}\\n}return null;}\";Date.parseRegexes[regexNum]=new RegExp(\"^\"+regex+\"$\");eval(code);};Date.formatCodeToRegex=function(b,a){switch(b){case\"D\":return{g:0,c:null,s:\"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\"};case\"j\":case\"d\":return{g:1,c:\"d = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,2})\"};case\"l\":return{g:0,c:null,s:\"(?:\"+Date.dayNames.join(\"|\")+\")\"};case\"S\":return{g:0,c:null,s:\"(?:st|nd|rd|th)\"};case\"w\":return{g:0,c:null,s:\"\\\\d\"};case\"z\":return{g:1,c:\"z = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,3})\"};case\"W\":return{g:0,c:null,s:\"(?:\\\\d{2})\"};case\"F\":return{g:1,c:\"m = parseInt(Date.monthNumbers[results[\"+a+\"].substring(0, 3)], 10);\\n\",s:\"(\"+Date.monthNames.join(\"|\")+\")\"};case\"M\":return{g:1,c:\"m = parseInt(Date.monthNumbers[results[\"+a+\"]], 10);\\n\",s:\"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\"};case\"n\":case\"m\":return{g:1,c:\"m = parseInt(results[\"+a+\"], 10) - 1;\\n\",s:\"(\\\\d{1,2})\"};case\"t\":return{g:0,c:null,s:\"\\\\d{1,2}\"};case\"L\":return{g:0,c:null,s:\"(?:1|0)\"};case\"Y\":return{g:1,c:\"y = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{4})\"};case\"y\":return{g:1,c:\"var ty = parseInt(results[\"+a+\"], 10);\\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\\n\",s:\"(\\\\d{1,2})\"};case\"a\":return{g:1,c:\"if (results[\"+a+\"] == 'am') {\\nif (h == 12) { h = 0; }\\n} else { if (h < 12) { h += 12; }}\",s:\"(am|pm)\"};case\"A\":return{g:1,c:\"if (results[\"+a+\"] == 'AM') {\\nif (h == 12) { h = 0; }\\n} else { if (h < 12) { h += 12; }}\",s:\"(AM|PM)\"};case\"g\":case\"G\":case\"h\":case\"H\":return{g:1,c:\"h = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,2})\"};case\"i\":return{g:1,c:\"i = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{2})\"};case\"s\":return{g:1,c:\"s = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{2})\"};case\"O\":return{g:0,c:null,s:\"[+-]\\\\d{4}\"};case\"T\":return{g:0,c:null,s:\"[A-Z]{3}\"};case\"Z\":return{g:0,c:null,s:\"[+-]\\\\d{1,5}\"};default:return{g:0,c:null,s:String.escape(b)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,\"$1\").replace(/^.*?\\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\\)$/,\"$1$2$3\");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?\"-\":\"+\")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,\"0\")+String.leftPad(Math.abs(this.getTimezoneOffset())%60,2,\"0\");};Date.prototype.getDayOfYear=function(){var a=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var b=0;b<this.getMonth();++b){a+=Date.daysInMonth[b];}return a+this.getDate();};Date.prototype.getWeekOfYear=function(){var b=this.getDayOfYear()+(4-this.getDay());var a=new Date(this.getFullYear(),0,1);var c=(7-a.getDay()+4);return String.leftPad(Math.ceil((b-c)/7)+1,2,\"0\");};Date.prototype.isLeapYear=function(){var a=this.getFullYear();return((a&3)==0&&(a%100||(a%400==0&&a)));};Date.prototype.getFirstDayOfMonth=function(){var a=(this.getDay()-(this.getDate()-1))%7;return(a<0)?(a+7):a;};Date.prototype.getLastDayOfMonth=function(){var a=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(a<0)?(a+7):a;};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return\"st\";case 2:case 22:return\"nd\";case 3:case 23:return\"rd\";default:return\"th\";}};String.escape=function(a){return a.replace(/('|\\\\)/g,\"\\\\$1\");};String.leftPad=function(d,b,c){var a=new String(d);if(c==null){c=\" \";}while(a.length<b){a=c+a;}return a;};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];Date.dayNames=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.patterns={ISO8601LongPattern:\"Y-m-d H:i:s\",ISO8601ShortPattern:\"Y-m-d\",ShortDatePattern:\"n/j/Y\",LongDatePattern:\"l, F d, Y\",FullDateTimePattern:\"l, F d, Y g:i:s A\",MonthDayPattern:\"F d\",ShortTimePattern:\"g:i A\",LongTimePattern:\"g:i:s A\",SortableDateTimePattern:\"Y-m-d\\\\TH:i:s\",UniversalSortableDateTimePattern:\"Y-m-d H:i:sO\",YearMonthPattern:\"F, Y\"};\n\t}());\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 140:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar modal = __webpack_require__(155);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(modal({it :param}))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on = param.on || {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 150:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {module.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '', __j = Array.prototype.join;\n\tfunction print() { __p += __j.call(arguments, '') }\n\twith (obj) {\n\n\n\t    if (!it.data || !it.data[0] || !it.data[0].content || !it.data[0].content[0]) {\n\t;\n\t__p += '\\r\\n    <tr ><td colspan=\"3\" style=\"text-align: center\">当天没有统计数据</td></tr>\\r\\n';\n\n\t    } else {\n\t        var count = 0 ;\n\t        var content = it.data[0].content;\n\t        $.each(content , function (key , value) {\n\t;\n\t__p += '\\r\\n<tr class=\"listRow\">\\r\\n    <td class=\"td-row-1\" style=\"width:40px;\">' +\n\t((__t = ( ++count )) == null ? '' : __t) +\n\t'</td>\\r\\n    <td class=\"td-row-2\" style=\"width:120px;\">' +\n\t((__t = ( value.total )) == null ? '' : __t) +\n\t'</td>\\r\\n    <td class=\"td-row-3\" style=\"word-break:break-all\">' +\n\t((__t = ( opt.encodeHtml(value.title) )) == null ? '' : __t) +\n\t'</td>\\r\\n</tr>\\r\\n';\n\n\t        });\n\t    }\n\t;\n\t__p += '\\r\\n';\n\n\t}\n\treturn __p\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 155:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"' +\n\t((__t = (it.id || '' )) == null ? '' : __t) +\n\t'\">\\r\\n  <div class=\"modal-backdrop fade\"></div>\\r\\n  <div class=\"modal-dialog\">\\r\\n    <div class=\"modal-content\">\\r\\n\\r\\n      <div class=\"modal-header\">\\r\\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\r\\n        <h4 class=\"modal-title\">' +\n\t((__t = (it.header)) == null ? '' : __t) +\n\t'</h4>\\r\\n      </div>\\r\\n      <div class=\"modal-body\">\\r\\n        ' +\n\t((__t = (it.body)) == null ? '' : __t) +\n\t'\\r\\n      </div>\\r\\n      <div class=\"modal-footer\">\\r\\n        <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\r\\n      </div>\\r\\n\\r\\n    </div>\\r\\n  </div>\\r\\n</div>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ }\n\n});"
  },
  {
    "path": "static/entry.userManage.js",
    "content": "webpackJsonp([6],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar usermanger = __webpack_require__(19);\n\n\tusermanger.init();\n\n/***/ },\n\n/***/ 19:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * @info 用户列表js\n\t * @author coverguo\n\t * */\n\n\tvar Dialog = __webpack_require__(140);\n\tvar userTable = __webpack_require__(151);\n\n\n\t    var encodeHtml = function (str) {\n\t        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n\t    };\n\t    function bindEvent() {\n\n\t        $(\".searchBtn\").on(\"click\", function (){\n\t            reloadPage();\n\t        });\n\n\t        $(\"#add-btn\").on(\"click\", function () {\n\t            var params ={\n\t                userName : $(\".add-userName\").val(),\n\t                applyId  : $(\".search-applyId\").val()\n\t            };\n\t            console.log(params);\n\t            $ajax(\"/controller/userApplyAction/addUserApply.do\", params, function(data){\n\t                reloadPage();\n\t            });\n\t        });\n\n\t        var submiting =  false;\n\t        $(\"#userList\").on(\"click\",'.user-deleteBtn', function (){\n\t            if(submiting){\n\t                return;\n\t            }\n\t            submiting = true;\n\t            var params = {\n\t                id : $(this).data().uaid\n\t            };\n\t            if(window.confirm('你确定要删除该用户吗？')){\n\t                $ajax(\"/controller/userApplyAction/remove.do\", params, function(data){\n\t                    location.reload();\n\t                });\n\t            }else{\n\t                return false;\n\t            }\n\n\t        });\n\n\n\t        $(\"#userList\").on(\"click\",'.user-authBtn', function (){\n\t            if(submiting){\n\t                return;\n\t            }\n\t            submiting = true;\n\t            var params = {\n\t                id : $(this).data().uaid\n\t            };\n\t            $ajax(\"/controller/userApplyAction/auth.do\", params, function(data){\n\t                location.reload();\n\t            });\n\n\t        });\n\t    };\n\n\t    function reloadPage(){\n\t        var params ={\n\t            userText : $(\".search-userText\").val(),\n\t            applyId  : $(\".search-applyId\").val(),\n\t            role : $(\".search-userType\").val()\n\t        };\n\t        var url = \"/user/userManage.html\";\n\t        url += \"?applyId=\" + params.applyId + \"&role=\" + params.role + \"&userText=\" + params.userText;\n\t        location.href = url;\n\t    }\n\t    function $ajax(url, params, cb,type){\n\t        $.ajax({\n\t            url: url,\n\t            data:params,\n\t            type: type?type:'post',\n\t            success: function(data) {\n\t                var ret = data.ret;\n\t                switch(ret){\n\t                    case 0://成功\n\t                        //执行成功回调函数.\n\t                        cb(data);\n\n\t                        break;\n\t                    default ://没有登陆态或登陆态失效\n\t                        alert(data.msg);\n\t                }\n\t            },\n\t            error: function() {\n\t            }\n\t        });\n\t    }\n\t    $.extend({\n\t        getUrlVars: function(){\n\t            var vars = [], hash;\n\t            var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');\n\t            for(var i = 0; i < hashes.length; i++)\n\t            {\n\t                hash = hashes[i].split('=');\n\t                vars.push(hash[0]);\n\t                vars[hash[0]] = hash[1];\n\t            }\n\t            return vars;\n\t        },\n\t        getUrlVar: function(name){\n\t            return $.getUrlVars()[name];\n\t        }\n\t    });\n\n\t    function init() {\n\t        var urlParams = $.getUrlVars();\n\t        var params ={\n\t            userText :urlParams.userText || '' ,\n\t            applyId  : urlParams.applyId || -1 ,\n\t            role : urlParams.role || -1\n\t        };\n\t        $ajax(\"controller/userAction/queryListByCondition.do\",params,function(items){\n\t            console.log(items);\n\t            var param = {\n\t                encodeHtml: encodeHtml,\n\t                isAdmin : items.isAdmin\n\t            };\n\t            $('#userList').html(userTable({it : items.data, opt : param}));\n\n\t        });\n\t        //设置初始搜索框内容\n\t        $(\".search-userText\").val(params.userText);\n\t        $(\".search-applyId\").val(params.applyId);\n\t        $(\".search-userType\").val(params.role);\n\n\t        //设置info\n\t        if(params.applyId ==-1){\n\t            $(\".add-userName\").attr(\"disabled\",\"disabled\");\n\t            $(\"#add-btn\").attr(\"disabled\",\"disabled\");\n\t        }else{\n\t            $(\".add-userName\").removeAttr(\"disabled\");\n\t            $(\"#add-btn\").removeAttr(\"disabled\");\n\t        }\n\t        $(\".projectName\").text( $(\".search-applyId\").find(\"option:selected\").text());\n\t        bindEvent();\n\n\n\t    }\n\n\tmodule.exports = {\n\t        init: init\n\t    }\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 21:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {/**\n\t * Map\n\t * @class\n\t */\n\tfunction Map() {\n\t    this.map = {};\n\t    this.length = 0;\n\t}\n\tMap.prototype = {\n\t    constructor: Map,\n\t    /**\n\t     * has\n\t     * @param {String} key\n\t     * @returns {Boolean}\n\t     */\n\t    has: function (key) {\n\t        return (key in this.map);\n\t    },\n\t    /**\n\t     * get\n\t     * @param {String} key\n\t     * @returns {Any}\n\t     */\n\t    get: function (key) {\n\t        return this.map[key];\n\t    },\n\t    /**\n\t     * set\n\t     * @param {String} key\n\t     * @param {Any} value\n\t     */\n\t    set: function (key, value) {\n\t        !this.has(key) && this.length++;\n\t        return (this.map[key] = value);\n\t    },\n\t    /**\n\t     * count\n\t     * @returns {Number}\n\t     */\n\t    count: function () {\n\t        return this.length;\n\t    },\n\t    /**\n\t     * remove\n\t     * @param {String} key\n\t     */\n\t    remove: function (key) {\n\t        if (this.has(key)) {\n\t            this.map[key] = null;\n\t            delete this.map[key];\n\t            this.length--;\n\t        }\n\t    }\n\t};\n\n\tvar cache = new Map(), set = cache.set, uid = 0;\n\tcache.set = function (node, value) {\n\t    if (!value) {\n\t        value = node;\n\t        set.call(cache, ++uid + '', value);\n\t        return uid;\n\t    } else {\n\t        typeof node === 'string' &&\n\t        (node = $(node)[0]);\n\t        $.data(node, 'event-data', value);\n\t        return this;\n\t    }\n\t};\n\n\tfunction _key(arr) {\n\t    if (!arr) return {};\n\t    arr = arr.split(' ');\n\t    var obj = {};\n\t    for (var i = 0, l = arr.length; i < l; i++) {\n\t        obj[arr[i]] = true;\n\t    }\n\t    return obj;\n\t}\n\n\t/**\n\t * Delegator\n\t * @class\n\t * @param {Selector} container\n\t */\n\tfunction Delegator(container) {\n\t    this.container = $(container);\n\t    this.listenerMap = new Map();\n\t}\n\n\t/**\n\t * getKey\n\t * @param {Any} value\n\t * @returns {Number}\n\t */\n\tDelegator.set = cache.set;\n\t/**\n\t * cache\n\t * @class\n\t * @static\n\t */\n\tDelegator.cache = cache;\n\n\tDelegator.prototype = {\n\t    constructor: Delegator,\n\t    _getListener: function (type) {\n\t        if (this.listenerMap.has(type)) {\n\t            return this.listenerMap.get(type);\n\t        }\n\t        function listener(e) {\n\t            var data = $.data(this),\n\t                routes = data['event-' + type + '-routes'],\n\t                eventData = data['event-data'], handle, dataKey;\n\n\t            // preprocessing\n\t            if (!routes && (routes = this.getAttribute('data-event-' + type))) {\n\t                (routes = routes.split(' ')) &&\n\t                (data['event-' + type + '-routes'] = routes);\n\t                !eventData &&\n\t                (dataKey = this.getAttribute('data-event-data')) &&\n\t                (eventData = cache.get(dataKey)) &&\n\t                (data['event-data'] = eventData) &&\n\t                (cache.remove(dataKey));\n\t                !data['event-stop-propagation'] &&\n\t                (data['event-stop-propagation'] = _key(this.getAttribute('data-event-stop-propagation')));\n\t            }\n\n\t            if (routes) {\n\t                for (var i = 0, l = routes.length; i < l; i++) {\n\t                    handle = listener.handleMap.get(routes[i]);\n\n\t                    if (handle) {\n\t                        handle.call(this, e, eventData);\n\t                    }\n\t                    data['event-stop-propagation'][type] &&\n\t                    e.stopPropagation();\n\t                }\n\t            }\n\t        }\n\n\t        listener.handleMap = new Map();\n\t        this.listenerMap.set(type, listener);\n\t        this.container.on(type, '[data-event-' + type + ']', listener);\n\t        return listener;\n\t    },\n\t    /**\n\t     * on\n\t     * @param {String} type\n\t     * @param {String} name\n\t     * @param {Function} handle\n\t     */\n\t    on: function (type, name, handle) {\n\t        var listener = this._getListener(type);\n\t        listener.handleMap.set(name, handle);\n\t        return this;\n\t    },\n\t    /**\n\t     * off\n\t     * @param {String} type\n\t     * @param {String} name\n\t     */\n\t    off: function (type, name) {\n\t        var listener = this._getListener(type),\n\t            handleMap = listener.handleMap;\n\t        handleMap.remove(name);\n\t        if (!handleMap.count()) {\n\t            this.container.off(type, '[data-event-' + type + ']', listener);\n\t            this.listenerMap.remove(type);\n\t        }\n\t    }\n\t};\n\n\tmodule.exports = Delegator;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 140:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Delegator = __webpack_require__(21);\n\tvar modal = __webpack_require__(155);\n\n\t    var container;\n\n\t    function hide() {\n\t        container.removeClass('in');\n\t        container.find('.modal-backdrop').removeClass('in');\n\t        setTimeout(function () {\n\t            container.remove();\n\t            container = undefined;\n\t        }, 300);\n\t    }\n\n\t    function Dialog (param) {\n\t        if (container) {\n\t            container.remove();\n\t            container = undefined;\n\t        }\n\t        container = $(modal({it :param}))\n\t            .appendTo(document.body)\n\t            .show();\n\n\t        var key,\n\t            action,\n\t            delegator,\n\t            on = param.on || {};\n\n\t        delegator = (new Delegator(container))\n\t            .on('click', 'close', hide);\n\n\t        for (key in on) {\n\t            action = key.split('/');\n\t            delegator.on(action[0], action[1], on[key]);\n\t        }\n\n\t        setTimeout(function () {\n\t            container.addClass('in');\n\t            container.find('.modal-backdrop').addClass('in');\n\t        }, 0);\n\t    }\n\n\t    Dialog.hide = hide;\n\n\tmodule.exports =  Dialog;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n\n/***/ 151:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '', __j = Array.prototype.join;\n\tfunction print() { __p += __j.call(arguments, '') }\n\twith (obj) {\n\n\t for(var i =0, len = it.length;i<len; i++){\n\t    var role =\"参与者\";\n\t    if(it[i].role == 1){\n\t        role =\"项目管理员\";\n\t    }\n\t;\n\t__p += '\\r\\n<tr class=\"listRow\">\\r\\n    <td>' +\n\t((__t = ( i+1)) == null ? '' : __t) +\n\t'</td>\\r\\n    <td>' +\n\t((__t = ( it[i].loginName)) == null ? '' : __t) +\n\t'</td>\\r\\n    <td>' +\n\t((__t = ( it[i].chineseName?it[i].chineseName:\"无\")) == null ? '' : __t) +\n\t'</td>\\r\\n    <td>' +\n\t((__t = ( it[i].name)) == null ? '' : __t) +\n\t'</td>\\r\\n    <td>' +\n\t((__t = ( role)) == null ? '' : __t) +\n\t' </td>\\r\\n    <td>\\r\\n        ';\n\tif(it[i].role != 1 ){;\n\t__p += '\\r\\n            <button class=\"user-authBtn btn-default modifyBtn\" data-uaid = \"' +\n\t((__t = ( it[i].id)) == null ? '' : __t) +\n\t'\">授权管理员</button>\\r\\n            <button class=\"user-deleteBtn btn-default modifyBtn\" data-uaid = \"' +\n\t((__t = ( it[i].id)) == null ? '' : __t) +\n\t'\">删除</button>\\r\\n        ';\n\t};\n\t__p += '\\r\\n\\r\\n        ';\n\tif(it[i].role ==1 && opt.isAdmin){;\n\t__p += '\\r\\n        <button class=\"user-deleteBtn btn-default modifyBtn\" data-uaid = \"' +\n\t((__t = ( it[i].id)) == null ? '' : __t) +\n\t'\">删除</button>\\r\\n        ';\n\t};\n\t__p += '\\r\\n\\r\\n    </td>\\r\\n</tr>\\r\\n';\n\t};\n\t__p += '\\r\\n';\n\n\t}\n\treturn __p\n\t}\n\n/***/ },\n\n/***/ 155:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function (obj) {\n\tobj || (obj = {});\n\tvar __t, __p = '';\n\twith (obj) {\n\t__p += '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"' +\n\t((__t = (it.id || '' )) == null ? '' : __t) +\n\t'\">\\r\\n  <div class=\"modal-backdrop fade\"></div>\\r\\n  <div class=\"modal-dialog\">\\r\\n    <div class=\"modal-content\">\\r\\n\\r\\n      <div class=\"modal-header\">\\r\\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\\r\\n        <h4 class=\"modal-title\">' +\n\t((__t = (it.header)) == null ? '' : __t) +\n\t'</h4>\\r\\n      </div>\\r\\n      <div class=\"modal-body\">\\r\\n        ' +\n\t((__t = (it.body)) == null ? '' : __t) +\n\t'\\r\\n      </div>\\r\\n      <div class=\"modal-footer\">\\r\\n        <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\\r\\n      </div>\\r\\n\\r\\n    </div>\\r\\n  </div>\\r\\n</div>';\n\n\t}\n\treturn __p\n\t}\n\n/***/ }\n\n});"
  },
  {
    "path": "static/img/tmp/tmp",
    "content": ""
  },
  {
    "path": "static/js/beautify.js",
    "content": "/*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2013 Einar Lielmanis and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n\n JS Beautifier\n---------------\n\n\n  Written by Einar Lielmanis, <einar@jsbeautifier.org>\n      http://jsbeautifier.org/\n\n  Originally converted to javascript by Vital, <vital76@gmail.com>\n  \"End braces on own line\" added by Chris J. Shull, <chrisjshull@gmail.com>\n  Parsing improvements for brace-less statements by Liam Newman <bitwiseman@gmail.com>\n\n\n  Usage:\n    js_beautify(js_source_text);\n    js_beautify(js_source_text, options);\n\n  The options are:\n    indent_size (default 4)          - indentation size,\n    indent_char (default space)      - character to indent with,\n    preserve_newlines (default true) - whether existing line breaks should be preserved,\n    max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk,\n\n    jslint_happy (default false) - if true, then jslint-stricter mode is enforced.\n\n            jslint_happy        !jslint_happy\n            ---------------------------------\n            function ()         function()\n\n            switch () {         switch() {\n            case 1:               case 1:\n              break;                break;\n            }                   }\n\n    space_after_anon_function (default false) - should the space before an anonymous function's parens be added, \"function()\" vs \"function ()\",\n          NOTE: This option is overriden by jslint_happy (i.e. if jslint_happy is true, space_after_anon_function is true by design)\n\n    brace_style (default \"collapse\") - \"collapse\" | \"expand\" | \"end-expand\"\n            put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line.\n\n    space_before_conditional (default true) - should the space before conditional statement be added, \"if(true)\" vs \"if (true)\",\n\n    unescape_strings (default false) - should printable characters in strings encoded in \\xNN notation be unescaped, \"example\" vs \"\\x65\\x78\\x61\\x6d\\x70\\x6c\\x65\"\n\n    wrap_line_length (default unlimited) - lines should wrap at next opportunity after this number of characters.\n          NOTE: This is not a hard limit. Lines will continue until a point where a newline would\n                be preserved if it were present.\n\n    end_with_newline (default false)  - end output with a newline\n\n\n    e.g\n\n    js_beautify(js_source_text, {\n      'indent_size': 1,\n      'indent_char': '\\t'\n    });\n\n*/\n\n(function() {\n\n    var acorn = {};\n    (function (exports) {\n      // This section of code is taken from acorn.\n      //\n      // Acorn was written by Marijn Haverbeke and released under an MIT\n      // license. The Unicode regexps (for identifiers and whitespace) were\n      // taken from [Esprima](http://esprima.org) by Ariya Hidayat.\n      //\n      // Git repositories for Acorn are available at\n      //\n      //     http://marijnhaverbeke.nl/git/acorn\n      //     https://github.com/marijnh/acorn.git\n\n      // ## Character categories\n\n      // Big ugly regular expressions that match characters in the\n      // whitespace, identifier, and identifier-start categories. These\n      // are only applied when a character is found to actually have a\n      // code point above 128.\n\n      var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n      var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n      var nonASCIIidentifierChars = \"\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n      var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n      var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n      // Whether a single character denotes a newline.\n\n      var newline = exports.newline = /[\\n\\r\\u2028\\u2029]/;\n\n      // Matches a whole line break (where CRLF is considered a single\n      // line break). Used to count lines.\n\n      var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n\n      // Test whether a given character code starts an identifier.\n\n      var isIdentifierStart = exports.isIdentifierStart = function(code) {\n        if (code < 65) return code === 36;\n        if (code < 91) return true;\n        if (code < 97) return code === 95;\n        if (code < 123)return true;\n        return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n      };\n\n      // Test whether a given character is part of an identifier.\n\n      var isIdentifierChar = exports.isIdentifierChar = function(code) {\n        if (code < 48) return code === 36;\n        if (code < 58) return true;\n        if (code < 65) return false;\n        if (code < 91) return true;\n        if (code < 97) return code === 95;\n        if (code < 123)return true;\n        return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n      };\n    })(acorn);\n\n    function in_array(what, arr) {\n        for (var i = 0; i < arr.length; i += 1) {\n            if (arr[i] === what) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    function trim(s) {\n        return s.replace(/^\\s+|\\s+$/g, '');\n    }\n\n    function js_beautify(js_source_text, options) {\n        \"use strict\";\n        var beautifier = new Beautifier(js_source_text, options);\n        return beautifier.beautify();\n    }\n\n    var MODE = {\n            BlockStatement: 'BlockStatement', // 'BLOCK'\n            Statement: 'Statement', // 'STATEMENT'\n            ObjectLiteral: 'ObjectLiteral', // 'OBJECT',\n            ArrayLiteral: 'ArrayLiteral', //'[EXPRESSION]',\n            ForInitializer: 'ForInitializer', //'(FOR-EXPRESSION)',\n            Conditional: 'Conditional', //'(COND-EXPRESSION)',\n            Expression: 'Expression' //'(EXPRESSION)'\n        };\n\n    function Beautifier(js_source_text, options) {\n        \"use strict\";\n        var output\n        var tokens = [], token_pos;\n        var Tokenizer;\n        var current_token;\n        var last_type, last_last_text, indent_string;\n        var flags, previous_flags, flag_store;\n        var prefix;\n\n        var handlers, opt;\n        var baseIndentString = '';\n\n        handlers = {\n            'TK_START_EXPR': handle_start_expr,\n            'TK_END_EXPR': handle_end_expr,\n            'TK_START_BLOCK': handle_start_block,\n            'TK_END_BLOCK': handle_end_block,\n            'TK_WORD': handle_word,\n            'TK_RESERVED': handle_word,\n            'TK_SEMICOLON': handle_semicolon,\n            'TK_STRING': handle_string,\n            'TK_EQUALS': handle_equals,\n            'TK_OPERATOR': handle_operator,\n            'TK_COMMA': handle_comma,\n            'TK_BLOCK_COMMENT': handle_block_comment,\n            'TK_INLINE_COMMENT': handle_inline_comment,\n            'TK_COMMENT': handle_comment,\n            'TK_DOT': handle_dot,\n            'TK_UNKNOWN': handle_unknown,\n            'TK_EOF': handle_eof\n        };\n\n        function create_flags(flags_base, mode) {\n            var next_indent_level = 0;\n            if (flags_base) {\n                next_indent_level = flags_base.indentation_level;\n                if (!output.just_added_newline() &&\n                    flags_base.line_indent_level > next_indent_level) {\n                    next_indent_level = flags_base.line_indent_level;\n                }\n            }\n\n            var next_flags = {\n                mode: mode,\n                parent: flags_base,\n                last_text: flags_base ? flags_base.last_text : '', // last token text\n                last_word: flags_base ? flags_base.last_word : '', // last 'TK_WORD' passed\n                declaration_statement: false,\n                declaration_assignment: false,\n                multiline_frame: false,\n                if_block: false,\n                else_block: false,\n                do_block: false,\n                do_while: false,\n                in_case_statement: false, // switch(..){ INSIDE HERE }\n                in_case: false, // we're on the exact line with \"case 0:\"\n                case_body: false, // the indented case-action block\n                indentation_level: next_indent_level,\n                line_indent_level: flags_base ? flags_base.line_indent_level : next_indent_level,\n                start_line_index: output.get_line_number(),\n                ternary_depth: 0\n            };\n            return next_flags;\n        }\n\n        // Some interpreters have unexpected results with foo = baz || bar;\n        options = options ? options : {};\n        opt = {};\n\n        // compatibility\n        if (options.braces_on_own_line !== undefined) { //graceful handling of deprecated option\n            opt.brace_style = options.braces_on_own_line ? \"expand\" : \"collapse\";\n        }\n        opt.brace_style = options.brace_style ? options.brace_style : (opt.brace_style ? opt.brace_style : \"collapse\");\n\n        // graceful handling of deprecated option\n        if (opt.brace_style === \"expand-strict\") {\n            opt.brace_style = \"expand\";\n        }\n\n\n        opt.indent_size = options.indent_size ? parseInt(options.indent_size, 10) : 4;\n        opt.indent_char = options.indent_char ? options.indent_char : ' ';\n        opt.preserve_newlines = (options.preserve_newlines === undefined) ? true : options.preserve_newlines;\n        opt.break_chained_methods = (options.break_chained_methods === undefined) ? false : options.break_chained_methods;\n        opt.max_preserve_newlines = (options.max_preserve_newlines === undefined) ? 0 : parseInt(options.max_preserve_newlines, 10);\n        opt.space_in_paren = (options.space_in_paren === undefined) ? false : options.space_in_paren;\n        opt.space_in_empty_paren = (options.space_in_empty_paren === undefined) ? false : options.space_in_empty_paren;\n        opt.jslint_happy = (options.jslint_happy === undefined) ? false : options.jslint_happy;\n        opt.space_after_anon_function = (options.space_after_anon_function === undefined) ? false : options.space_after_anon_function;\n        opt.keep_array_indentation = (options.keep_array_indentation === undefined) ? false : options.keep_array_indentation;\n        opt.space_before_conditional = (options.space_before_conditional === undefined) ? true : options.space_before_conditional;\n        opt.unescape_strings = (options.unescape_strings === undefined) ? false : options.unescape_strings;\n        opt.wrap_line_length = (options.wrap_line_length === undefined) ? 0 : parseInt(options.wrap_line_length, 10);\n        opt.e4x = (options.e4x === undefined) ? false : options.e4x;\n        opt.end_with_newline = (options.end_with_newline === undefined) ? false : options.end_with_newline;\n\n\n        // force opt.space_after_anon_function to true if opt.jslint_happy\n        if(opt.jslint_happy) {\n            opt.space_after_anon_function = true;\n        }\n\n        if(options.indent_with_tabs){\n            opt.indent_char = '\\t';\n            opt.indent_size = 1;\n        }\n\n        //----------------------------------\n        indent_string = '';\n        while (opt.indent_size > 0) {\n            indent_string += opt.indent_char;\n            opt.indent_size -= 1;\n        }\n\n        var preindent_index = 0;\n        if(js_source_text && js_source_text.length) {\n            while ( (js_source_text.charAt(preindent_index) === ' ' ||\n                    js_source_text.charAt(preindent_index) === '\\t')) {\n                baseIndentString += js_source_text.charAt(preindent_index);\n                preindent_index += 1;\n            }\n            js_source_text = js_source_text.substring(preindent_index);\n        }\n\n        last_type = 'TK_START_BLOCK'; // last token type\n        last_last_text = ''; // pre-last token text\n        output = new Output(indent_string, baseIndentString);\n\n\n        // Stack of parsing/formatting states, including MODE.\n        // We tokenize, parse, and output in an almost purely a forward-only stream of token input\n        // and formatted output.  This makes the beautifier less accurate than full parsers\n        // but also far more tolerant of syntax errors.\n        //\n        // For example, the default mode is MODE.BlockStatement. If we see a '{' we push a new frame of type\n        // MODE.BlockStatement on the the stack, even though it could be object literal.  If we later\n        // encounter a \":\", we'll switch to to MODE.ObjectLiteral.  If we then see a \";\",\n        // most full parsers would die, but the beautifier gracefully falls back to\n        // MODE.BlockStatement and continues on.\n        flag_store = [];\n        set_mode(MODE.BlockStatement);\n\n        this.beautify = function() {\n\n            /*jshint onevar:true */\n            var local_token, sweet_code;\n            Tokenizer = new tokenizer(js_source_text, opt, indent_string);\n            tokens = Tokenizer.tokenize();\n            token_pos = 0;\n\n            while (local_token = get_token()) {\n                for(var i = 0; i < local_token.comments_before.length; i++) {\n                    // The cleanest handling of inline comments is to treat them as though they aren't there.\n                    // Just continue formatting and the behavior should be logical.\n                    // Also ignore unknown tokens.  Again, this should result in better behavior.\n                    handle_token(local_token.comments_before[i]);\n                }\n                handle_token(local_token);\n\n                last_last_text = flags.last_text;\n                last_type = local_token.type;\n                flags.last_text = local_token.text;\n\n                token_pos += 1;\n            }\n\n            sweet_code = output.get_code();\n            if (opt.end_with_newline) {\n                sweet_code += '\\n';\n            }\n\n            return sweet_code;\n        };\n\n        function handle_token(local_token) {\n            var newlines = local_token.newlines;\n            var keep_whitespace = opt.keep_array_indentation && is_array(flags.mode);\n\n            if (keep_whitespace) {\n                for (i = 0; i < newlines; i += 1) {\n                    print_newline(i > 0);\n                }\n            } else {\n                if (opt.max_preserve_newlines && newlines > opt.max_preserve_newlines) {\n                    newlines = opt.max_preserve_newlines;\n                }\n\n                if (opt.preserve_newlines) {\n                    if (local_token.newlines > 1) {\n                        print_newline();\n                        for (var i = 1; i < newlines; i += 1) {\n                            print_newline(true);\n                        }\n                    }\n                }\n            }\n\n            current_token = local_token;\n            handlers[current_token.type]();\n        }\n\n        // we could use just string.split, but\n        // IE doesn't like returning empty strings\n\n        function split_newlines(s) {\n            //return s.split(/\\x0d\\x0a|\\x0a/);\n\n            s = s.replace(/\\x0d/g, '');\n            var out = [],\n                idx = s.indexOf(\"\\n\");\n            while (idx !== -1) {\n                out.push(s.substring(0, idx));\n                s = s.substring(idx + 1);\n                idx = s.indexOf(\"\\n\");\n            }\n            if (s.length) {\n                out.push(s);\n            }\n            return out;\n        }\n\n        function allow_wrap_or_preserved_newline(force_linewrap) {\n            force_linewrap = (force_linewrap === undefined) ? false : force_linewrap;\n\n            if (output.just_added_newline()) {\n                return\n            }\n\n            if ((opt.preserve_newlines && current_token.wanted_newline) || force_linewrap) {\n                print_newline(false, true);\n            } else if (opt.wrap_line_length) {\n                // We never wrap the first token of a line due to newline check above.\n                var proposed_line_length = output.current_line.get_character_count() + current_token.text.length +\n                    (output.space_before_token ? 1 : 0);\n                if (proposed_line_length >= opt.wrap_line_length) {\n                    print_newline(false, true);\n                }\n            }\n        }\n\n        function print_newline(force_newline, preserve_statement_flags) {\n            if (!preserve_statement_flags) {\n                if (flags.last_text !== ';' && flags.last_text !== ',' && flags.last_text !== '=' && last_type !== 'TK_OPERATOR') {\n                    while (flags.mode === MODE.Statement && !flags.if_block && !flags.do_block) {\n                        restore_mode();\n                    }\n                }\n            }\n\n            if (output.add_new_line(force_newline)) {\n                flags.multiline_frame = true;\n            }\n        }\n\n        function print_token_line_indentation() {\n            if (output.just_added_newline()) {\n                if (opt.keep_array_indentation && is_array(flags.mode) && current_token.wanted_newline) {\n                    // prevent removing of this whitespace as redundant\n                    output.current_line.push('');\n                    for (var i = 0; i < current_token.whitespace_before.length; i += 1) {\n                        output.current_line.push(current_token.whitespace_before[i]);\n                    }\n                    output.space_before_token = false;\n                } else if (output.add_indent_string(flags.indentation_level)) {\n                    flags.line_indent_level = flags.indentation_level;\n                }\n            }\n        }\n\n        function print_token(printable_token) {\n            printable_token = printable_token || current_token.text;\n            print_token_line_indentation();\n            output.add_token(printable_token);\n        }\n\n        function indent() {\n            flags.indentation_level += 1;\n        }\n\n        function deindent() {\n            if (flags.indentation_level > 0 &&\n                ((!flags.parent) || flags.indentation_level > flags.parent.indentation_level))\n                flags.indentation_level -= 1;\n        }\n\n        function set_mode(mode) {\n            if (flags) {\n                flag_store.push(flags);\n                previous_flags = flags;\n            } else {\n                previous_flags = create_flags(null, mode);\n            }\n\n            flags = create_flags(previous_flags, mode);\n        }\n\n        function is_array(mode) {\n            return mode === MODE.ArrayLiteral;\n        }\n\n        function is_expression(mode) {\n            return in_array(mode, [MODE.Expression, MODE.ForInitializer, MODE.Conditional]);\n        }\n\n        function restore_mode() {\n            if (flag_store.length > 0) {\n                previous_flags = flags;\n                flags = flag_store.pop();\n                if (previous_flags.mode === MODE.Statement) {\n                    output.remove_redundant_indentation(previous_flags);\n                }\n            }\n        }\n\n        function start_of_object_property() {\n            return flags.parent.mode === MODE.ObjectLiteral && flags.mode === MODE.Statement && (\n                (flags.last_text === ':' && flags.ternary_depth === 0) || (last_type === 'TK_RESERVED' && in_array(flags.last_text, ['get', 'set'])));\n        }\n\n        function start_of_statement() {\n            if (\n                    (last_type === 'TK_RESERVED' && in_array(flags.last_text, ['var', 'let', 'const']) && current_token.type === 'TK_WORD') ||\n                    (last_type === 'TK_RESERVED' && flags.last_text === 'do') ||\n                    (last_type === 'TK_RESERVED' && flags.last_text === 'return' && !current_token.wanted_newline) ||\n                    (last_type === 'TK_RESERVED' && flags.last_text === 'else' && !(current_token.type === 'TK_RESERVED' && current_token.text === 'if')) ||\n                    (last_type === 'TK_END_EXPR' && (previous_flags.mode === MODE.ForInitializer || previous_flags.mode === MODE.Conditional)) ||\n                    (last_type === 'TK_WORD' && flags.mode === MODE.BlockStatement\n                        && !flags.in_case\n                        && !(current_token.text === '--' || current_token.text === '++')\n                        && current_token.type !== 'TK_WORD' && current_token.type !== 'TK_RESERVED') ||\n                    (flags.mode === MODE.ObjectLiteral && (\n                        (flags.last_text === ':' && flags.ternary_depth === 0) || (last_type === 'TK_RESERVED' && in_array(flags.last_text, ['get', 'set']))))\n                ) {\n\n                set_mode(MODE.Statement);\n                indent();\n\n                if (last_type === 'TK_RESERVED' && in_array(flags.last_text, ['var', 'let', 'const']) && current_token.type === 'TK_WORD') {\n                    flags.declaration_statement = true;\n                }\n\n                // Issue #276:\n                // If starting a new statement with [if, for, while, do], push to a new line.\n                // if (a) if (b) if(c) d(); else e(); else f();\n                if (!start_of_object_property()) {\n                    allow_wrap_or_preserved_newline(\n                        current_token.type === 'TK_RESERVED' && in_array(current_token.text, ['do', 'for', 'if', 'while']));\n                }\n\n                return true;\n            }\n            return false;\n        }\n\n        function all_lines_start_with(lines, c) {\n            for (var i = 0; i < lines.length; i++) {\n                var line = trim(lines[i]);\n                if (line.charAt(0) !== c) {\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        function each_line_matches_indent(lines, indent) {\n            var i = 0,\n                len = lines.length,\n                line;\n            for (; i < len; i++) {\n                line = lines[i];\n                // allow empty lines to pass through\n                if (line && line.indexOf(indent) !== 0) {\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        function is_special_word(word) {\n            return in_array(word, ['case', 'return', 'do', 'if', 'throw', 'else']);\n        }\n\n        function get_token(offset) {\n            var index = token_pos + (offset || 0);\n            return (index < 0 || index >= tokens.length) ? null : tokens[index];\n        }\n\n        function handle_start_expr() {\n            if (start_of_statement()) {\n                // The conditional starts the statement if appropriate.\n            }\n\n            var next_mode = MODE.Expression;\n            if (current_token.text === '[') {\n\n                if (last_type === 'TK_WORD' || flags.last_text === ')') {\n                    // this is array index specifier, break immediately\n                    // a[x], fn()[x]\n                    if (last_type === 'TK_RESERVED' && in_array(flags.last_text, Tokenizer.line_starters)) {\n                        output.space_before_token = true;\n                    }\n                    set_mode(next_mode);\n                    print_token();\n                    indent();\n                    if (opt.space_in_paren) {\n                        output.space_before_token = true;\n                    }\n                    return;\n                }\n\n                next_mode = MODE.ArrayLiteral;\n                if (is_array(flags.mode)) {\n                    if (flags.last_text === '[' ||\n                        (flags.last_text === ',' && (last_last_text === ']' || last_last_text === '}'))) {\n                        // ], [ goes to new line\n                        // }, [ goes to new line\n                        if (!opt.keep_array_indentation) {\n                            print_newline();\n                        }\n                    }\n                }\n\n            } else {\n                if (last_type === 'TK_RESERVED' && flags.last_text === 'for') {\n                    next_mode = MODE.ForInitializer;\n                } else if (last_type === 'TK_RESERVED' && in_array(flags.last_text, ['if', 'while'])) {\n                    next_mode = MODE.Conditional;\n                } else {\n                    // next_mode = MODE.Expression;\n                }\n            }\n\n            if (flags.last_text === ';' || last_type === 'TK_START_BLOCK') {\n                print_newline();\n            } else if (last_type === 'TK_END_EXPR' || last_type === 'TK_START_EXPR' || last_type === 'TK_END_BLOCK' || flags.last_text === '.') {\n                // TODO: Consider whether forcing this is required.  Review failing tests when removed.\n                allow_wrap_or_preserved_newline(current_token.wanted_newline);\n                // do nothing on (( and )( and ][ and ]( and .(\n            } else if (!(last_type === 'TK_RESERVED' && current_token.text === '(') && last_type !== 'TK_WORD' && last_type !== 'TK_OPERATOR') {\n                output.space_before_token = true;\n            } else if ((last_type === 'TK_RESERVED' && (flags.last_word === 'function' || flags.last_word === 'typeof')) ||\n                (flags.last_text === '*' && last_last_text === 'function')) {\n                // function() vs function ()\n                if (opt.space_after_anon_function) {\n                    output.space_before_token = true;\n                }\n            } else if (last_type === 'TK_RESERVED' && (in_array(flags.last_text, Tokenizer.line_starters) || flags.last_text === 'catch')) {\n                if (opt.space_before_conditional) {\n                    output.space_before_token = true;\n                }\n            }\n\n            // Support of this kind of newline preservation.\n            // a = (b &&\n            //     (c || d));\n            if (current_token.text === '(') {\n                if (last_type === 'TK_EQUALS' || last_type === 'TK_OPERATOR') {\n                    if (!start_of_object_property()) {\n                        allow_wrap_or_preserved_newline();\n                    }\n                }\n            }\n\n            set_mode(next_mode);\n            print_token();\n            if (opt.space_in_paren) {\n                output.space_before_token = true;\n            }\n\n            // In all cases, if we newline while inside an expression it should be indented.\n            indent();\n        }\n\n        function handle_end_expr() {\n            // statements inside expressions are not valid syntax, but...\n            // statements must all be closed when their container closes\n            while (flags.mode === MODE.Statement) {\n                restore_mode();\n            }\n\n            if (flags.multiline_frame) {\n                allow_wrap_or_preserved_newline(current_token.text === ']' && is_array(flags.mode) && !opt.keep_array_indentation);\n            }\n\n            if (opt.space_in_paren) {\n                if (last_type === 'TK_START_EXPR' && ! opt.space_in_empty_paren) {\n                    // () [] no inner space in empty parens like these, ever, ref #320\n                    output.trim();\n                    output.space_before_token = false;\n                } else {\n                    output.space_before_token = true;\n                }\n            }\n            if (current_token.text === ']' && opt.keep_array_indentation) {\n                print_token();\n                restore_mode();\n            } else {\n                restore_mode();\n                print_token();\n            }\n            output.remove_redundant_indentation(previous_flags);\n\n            // do {} while () // no statement required after\n            if (flags.do_while && previous_flags.mode === MODE.Conditional) {\n                previous_flags.mode = MODE.Expression;\n                flags.do_block = false;\n                flags.do_while = false;\n\n            }\n        }\n\n        function handle_start_block() {\n            // Check if this is should be treated as a ObjectLiteral\n            var next_token = get_token(1)\n            var second_token = get_token(2)\n            if (second_token && (\n                    (second_token.text === ':' && in_array(next_token.type, ['TK_STRING', 'TK_WORD', 'TK_RESERVED']))\n                    || (in_array(next_token.text, ['get', 'set']) && in_array(second_token.type, ['TK_WORD', 'TK_RESERVED']))\n                )) {\n                // We don't support TypeScript,but we didn't break it for a very long time.\n                // We'll try to keep not breaking it.\n                if (!in_array(last_last_text, ['class','interface'])) {\n                    set_mode(MODE.ObjectLiteral);\n                } else {\n                    set_mode(MODE.BlockStatement);\n                }\n            } else {\n                set_mode(MODE.BlockStatement);\n            }\n\n            var empty_braces = !next_token.comments_before.length &&  next_token.text === '}';\n            var empty_anonymous_function = empty_braces && flags.last_word === 'function' &&\n                last_type === 'TK_END_EXPR';\n\n            if (opt.brace_style === \"expand\") {\n                if (last_type !== 'TK_OPERATOR' &&\n                    (empty_anonymous_function ||\n                        last_type === 'TK_EQUALS' ||\n                        (last_type === 'TK_RESERVED' && is_special_word(flags.last_text) && flags.last_text !== 'else'))) {\n                    output.space_before_token = true;\n                } else {\n                    print_newline(false, true);\n                }\n            } else { // collapse\n                if (last_type !== 'TK_OPERATOR' && last_type !== 'TK_START_EXPR') {\n                    if (last_type === 'TK_START_BLOCK') {\n                        print_newline();\n                    } else {\n                        output.space_before_token = true;\n                    }\n                } else {\n                    // if TK_OPERATOR or TK_START_EXPR\n                    if (is_array(previous_flags.mode) && flags.last_text === ',') {\n                        if (last_last_text === '}') {\n                            // }, { in array context\n                            output.space_before_token = true;\n                        } else {\n                            print_newline(); // [a, b, c, {\n                        }\n                    }\n                }\n            }\n            print_token();\n            indent();\n        }\n\n        function handle_end_block() {\n            // statements must all be closed when their container closes\n            while (flags.mode === MODE.Statement) {\n                restore_mode();\n            }\n            var empty_braces = last_type === 'TK_START_BLOCK';\n\n            if (opt.brace_style === \"expand\") {\n                if (!empty_braces) {\n                    print_newline();\n                }\n            } else {\n                // skip {}\n                if (!empty_braces) {\n                    if (is_array(flags.mode) && opt.keep_array_indentation) {\n                        // we REALLY need a newline here, but newliner would skip that\n                        opt.keep_array_indentation = false;\n                        print_newline();\n                        opt.keep_array_indentation = true;\n\n                    } else {\n                        print_newline();\n                    }\n                }\n            }\n            restore_mode();\n            print_token();\n        }\n\n        function handle_word() {\n            if (current_token.type === 'TK_RESERVED' && flags.mode !== MODE.ObjectLiteral &&\n                in_array(current_token.text, ['set', 'get'])) {\n                current_token.type = 'TK_WORD';\n            }\n\n            if (current_token.type === 'TK_RESERVED' && flags.mode === MODE.ObjectLiteral) {\n                var next_token = get_token(1);\n                if (next_token.text == ':') {\n                    current_token.type = 'TK_WORD';\n                }\n            }\n\n            if (start_of_statement()) {\n                // The conditional starts the statement if appropriate.\n            } else if (current_token.wanted_newline && !is_expression(flags.mode) &&\n                (last_type !== 'TK_OPERATOR' || (flags.last_text === '--' || flags.last_text === '++')) &&\n                last_type !== 'TK_EQUALS' &&\n                (opt.preserve_newlines || !(last_type === 'TK_RESERVED' && in_array(flags.last_text, ['var', 'let', 'const', 'set', 'get'])))) {\n\n                print_newline();\n            }\n\n            if (flags.do_block && !flags.do_while) {\n                if (current_token.type === 'TK_RESERVED' && current_token.text === 'while') {\n                    // do {} ## while ()\n                    output.space_before_token = true;\n                    print_token();\n                    output.space_before_token = true;\n                    flags.do_while = true;\n                    return;\n                } else {\n                    // do {} should always have while as the next word.\n                    // if we don't see the expected while, recover\n                    print_newline();\n                    flags.do_block = false;\n                }\n            }\n\n            // if may be followed by else, or not\n            // Bare/inline ifs are tricky\n            // Need to unwind the modes correctly: if (a) if (b) c(); else d(); else e();\n            if (flags.if_block) {\n                if (!flags.else_block && (current_token.type === 'TK_RESERVED' && current_token.text === 'else')) {\n                    flags.else_block = true;\n                } else {\n                    while (flags.mode === MODE.Statement) {\n                        restore_mode();\n                    }\n                    flags.if_block = false;\n                    flags.else_block = false;\n                }\n            }\n\n            if (current_token.type === 'TK_RESERVED' && (current_token.text === 'case' || (current_token.text === 'default' && flags.in_case_statement))) {\n                print_newline();\n                if (flags.case_body || opt.jslint_happy) {\n                    // switch cases following one another\n                    deindent();\n                    flags.case_body = false;\n                }\n                print_token();\n                flags.in_case = true;\n                flags.in_case_statement = true;\n                return;\n            }\n\n            if (current_token.type === 'TK_RESERVED' && current_token.text === 'function') {\n                if (in_array(flags.last_text, ['}', ';']) || (output.just_added_newline() && ! in_array(flags.last_text, ['[', '{', ':', '=', ',']))) {\n                    // make sure there is a nice clean space of at least one blank line\n                    // before a new function definition\n                    if ( !output.just_added_blankline() && !current_token.comments_before.length) {\n                        print_newline();\n                        print_newline(true);\n                    }\n                }\n                if (last_type === 'TK_RESERVED' || last_type === 'TK_WORD') {\n                    if (last_type === 'TK_RESERVED' && in_array(flags.last_text, ['get', 'set', 'new', 'return', 'export'])) {\n                        output.space_before_token = true;\n                    } else if (last_type === 'TK_RESERVED' && flags.last_text === 'default' && last_last_text === 'export') {\n                        output.space_before_token = true;\n                    } else {\n                        print_newline();\n                    }\n                } else if (last_type === 'TK_OPERATOR' || flags.last_text === '=') {\n                    // foo = function\n                    output.space_before_token = true;\n                } else if (!flags.multiline_frame && (is_expression(flags.mode) || is_array(flags.mode))) {\n                    // (function\n                } else {\n                    print_newline();\n                }\n            }\n\n            if (last_type === 'TK_COMMA' || last_type === 'TK_START_EXPR' || last_type === 'TK_EQUALS' || last_type === 'TK_OPERATOR') {\n                if (!start_of_object_property()) {\n                    allow_wrap_or_preserved_newline();\n                }\n            }\n\n            if (current_token.type === 'TK_RESERVED' &&  in_array(current_token.text, ['function', 'get', 'set'])) {\n                print_token();\n                flags.last_word = current_token.text;\n                return;\n            }\n\n            prefix = 'NONE';\n\n            if (last_type === 'TK_END_BLOCK') {\n                if (!(current_token.type === 'TK_RESERVED' && in_array(current_token.text, ['else', 'catch', 'finally']))) {\n                    prefix = 'NEWLINE';\n                } else {\n                    if (opt.brace_style === \"expand\" || opt.brace_style === \"end-expand\") {\n                        prefix = 'NEWLINE';\n                    } else {\n                        prefix = 'SPACE';\n                        output.space_before_token = true;\n                    }\n                }\n            } else if (last_type === 'TK_SEMICOLON' && flags.mode === MODE.BlockStatement) {\n                // TODO: Should this be for STATEMENT as well?\n                prefix = 'NEWLINE';\n            } else if (last_type === 'TK_SEMICOLON' && is_expression(flags.mode)) {\n                prefix = 'SPACE';\n            } else if (last_type === 'TK_STRING') {\n                prefix = 'NEWLINE';\n            } else if (last_type === 'TK_RESERVED' || last_type === 'TK_WORD' ||\n                (flags.last_text === '*' && last_last_text === 'function')) {\n                prefix = 'SPACE';\n            } else if (last_type === 'TK_START_BLOCK') {\n                prefix = 'NEWLINE';\n            } else if (last_type === 'TK_END_EXPR') {\n                output.space_before_token = true;\n                prefix = 'NEWLINE';\n            }\n\n            if (current_token.type === 'TK_RESERVED' && in_array(current_token.text, Tokenizer.line_starters) && flags.last_text !== ')') {\n                if (flags.last_text === 'else' || flags.last_text === 'export') {\n                    prefix = 'SPACE';\n                } else {\n                    prefix = 'NEWLINE';\n                }\n\n            }\n\n            if (current_token.type === 'TK_RESERVED' && in_array(current_token.text, ['else', 'catch', 'finally'])) {\n                if (last_type !== 'TK_END_BLOCK' || opt.brace_style === \"expand\" || opt.brace_style === \"end-expand\") {\n                    print_newline();\n                } else {\n                    output.trim(true);\n                    var line = output.current_line;\n                    // If we trimmed and there's something other than a close block before us\n                    // put a newline back in.  Handles '} // comment' scenario.\n                    if (line.last() !== '}') {\n                        print_newline();\n                    }\n                    output.space_before_token = true;\n                }\n            } else if (prefix === 'NEWLINE') {\n                if (last_type === 'TK_RESERVED' && is_special_word(flags.last_text)) {\n                    // no newline between 'return nnn'\n                    output.space_before_token = true;\n                } else if (last_type !== 'TK_END_EXPR') {\n                    if ((last_type !== 'TK_START_EXPR' || !(current_token.type === 'TK_RESERVED' && in_array(current_token.text, ['var', 'let', 'const']))) && flags.last_text !== ':') {\n                        // no need to force newline on 'var': for (var x = 0...)\n                        if (current_token.type === 'TK_RESERVED' && current_token.text === 'if' && flags.last_text === 'else') {\n                            // no newline for } else if {\n                            output.space_before_token = true;\n                        } else {\n                            print_newline();\n                        }\n                    }\n                } else if (current_token.type === 'TK_RESERVED' && in_array(current_token.text, Tokenizer.line_starters) && flags.last_text !== ')') {\n                    print_newline();\n                }\n            } else if (flags.multiline_frame && is_array(flags.mode) && flags.last_text === ',' && last_last_text === '}') {\n                print_newline(); // }, in lists get a newline treatment\n            } else if (prefix === 'SPACE') {\n                output.space_before_token = true;\n            }\n            print_token();\n            flags.last_word = current_token.text;\n\n            if (current_token.type === 'TK_RESERVED' && current_token.text === 'do') {\n                flags.do_block = true;\n            }\n\n            if (current_token.type === 'TK_RESERVED' && current_token.text === 'if') {\n                flags.if_block = true;\n            }\n        }\n\n        function handle_semicolon() {\n            if (start_of_statement()) {\n                // The conditional starts the statement if appropriate.\n                // Semicolon can be the start (and end) of a statement\n                output.space_before_token = false;\n            }\n            while (flags.mode === MODE.Statement && !flags.if_block && !flags.do_block) {\n                restore_mode();\n            }\n            print_token();\n        }\n\n        function handle_string() {\n            if (start_of_statement()) {\n                // The conditional starts the statement if appropriate.\n                // One difference - strings want at least a space before\n                output.space_before_token = true;\n            } else if (last_type === 'TK_RESERVED' || last_type === 'TK_WORD') {\n                output.space_before_token = true;\n            } else if (last_type === 'TK_COMMA' || last_type === 'TK_START_EXPR' || last_type === 'TK_EQUALS' || last_type === 'TK_OPERATOR') {\n                if (!start_of_object_property()) {\n                    allow_wrap_or_preserved_newline();\n                }\n            } else {\n                print_newline();\n            }\n            print_token();\n        }\n\n        function handle_equals() {\n            if (start_of_statement()) {\n                // The conditional starts the statement if appropriate.\n            }\n\n            if (flags.declaration_statement) {\n                // just got an '=' in a var-line, different formatting/line-breaking, etc will now be done\n                flags.declaration_assignment = true;\n            }\n            output.space_before_token = true;\n            print_token();\n            output.space_before_token = true;\n        }\n\n        function handle_comma() {\n            if (flags.declaration_statement) {\n                if (is_expression(flags.parent.mode)) {\n                    // do not break on comma, for(var a = 1, b = 2)\n                    flags.declaration_assignment = false;\n                }\n\n                print_token();\n\n                if (flags.declaration_assignment) {\n                    flags.declaration_assignment = false;\n                    print_newline(false, true);\n                } else {\n                    output.space_before_token = true;\n                }\n                return;\n            }\n\n            print_token();\n            if (flags.mode === MODE.ObjectLiteral ||\n                (flags.mode === MODE.Statement && flags.parent.mode === MODE.ObjectLiteral)) {\n                if (flags.mode === MODE.Statement) {\n                    restore_mode();\n                }\n                print_newline();\n            } else {\n                // EXPR or DO_BLOCK\n                output.space_before_token = true;\n            }\n\n        }\n\n        function handle_operator() {\n            if (start_of_statement()) {\n                // The conditional starts the statement if appropriate.\n            }\n\n            if (last_type === 'TK_RESERVED' && is_special_word(flags.last_text)) {\n                // \"return\" had a special handling in TK_WORD. Now we need to return the favor\n                output.space_before_token = true;\n                print_token();\n                return;\n            }\n\n            // hack for actionscript's import .*;\n            if (current_token.text === '*' && last_type === 'TK_DOT') {\n                print_token();\n                return;\n            }\n\n            if (current_token.text === ':' && flags.in_case) {\n                flags.case_body = true;\n                indent();\n                print_token();\n                print_newline();\n                flags.in_case = false;\n                return;\n            }\n\n            if (current_token.text === '::') {\n                // no spaces around exotic namespacing syntax operator\n                print_token();\n                return;\n            }\n\n            // http://www.ecma-international.org/ecma-262/5.1/#sec-7.9.1\n            // if there is a newline between -- or ++ and anything else we should preserve it.\n            if (current_token.wanted_newline && (current_token.text === '--' || current_token.text === '++')) {\n                print_newline(false, true);\n            }\n\n            // Allow line wrapping between operators\n            if (last_type === 'TK_OPERATOR') {\n                allow_wrap_or_preserved_newline();\n            }\n\n            var space_before = true;\n            var space_after = true;\n\n            if (in_array(current_token.text, ['--', '++', '!', '~']) || (in_array(current_token.text, ['-', '+']) && (in_array(last_type, ['TK_START_BLOCK', 'TK_START_EXPR', 'TK_EQUALS', 'TK_OPERATOR']) || in_array(flags.last_text, Tokenizer.line_starters) || flags.last_text === ','))) {\n                // unary operators (and binary +/- pretending to be unary) special cases\n\n                space_before = false;\n                space_after = false;\n\n                if (flags.last_text === ';' && is_expression(flags.mode)) {\n                    // for (;; ++i)\n                    //        ^^^\n                    space_before = true;\n                }\n\n                if (last_type === 'TK_RESERVED' || last_type === 'TK_END_EXPR') {\n                    space_before = true;\n                } else if (last_type === 'TK_OPERATOR') {\n                    space_before =\n                        (in_array(current_token.text, ['--', '-']) && in_array(flags.last_text, ['--', '-'])) ||\n                        (in_array(current_token.text, ['++', '+']) && in_array(flags.last_text, ['++', '+']));\n                }\n\n                if ((flags.mode === MODE.BlockStatement || flags.mode === MODE.Statement) && (flags.last_text === '{' || flags.last_text === ';')) {\n                    // { foo; --i }\n                    // foo(); --bar;\n                    print_newline();\n                }\n            } else if (current_token.text === ':') {\n                if (flags.ternary_depth === 0) {\n                    // Colon is invalid javascript outside of ternary and object, but do our best to guess what was meant.\n                    space_before = false;\n                } else {\n                    flags.ternary_depth -= 1;\n                }\n            } else if (current_token.text === '?') {\n                flags.ternary_depth += 1;\n            } else if (current_token.text === '*' && last_type === 'TK_RESERVED' && flags.last_text === 'function') {\n                space_before = false;\n                space_after = false;\n            }\n            output.space_before_token = output.space_before_token || space_before;\n            print_token();\n            output.space_before_token = space_after;\n        }\n\n        function handle_block_comment() {\n            var lines = split_newlines(current_token.text);\n            var j; // iterator for this case\n            var javadoc = false;\n            var starless = false;\n            var lastIndent = current_token.whitespace_before.join('');\n            var lastIndentLength = lastIndent.length;\n\n            // block comment starts with a new line\n            print_newline(false, true);\n            if (lines.length > 1) {\n                if (all_lines_start_with(lines.slice(1), '*')) {\n                    javadoc = true;\n                }\n                else if (each_line_matches_indent(lines.slice(1), lastIndent)) {\n                    starless = true;\n                }\n            }\n\n            // first line always indented\n            print_token(lines[0]);\n            for (j = 1; j < lines.length; j++) {\n                print_newline(false, true);\n                if (javadoc) {\n                    // javadoc: reformat and re-indent\n                    print_token(' ' + trim(lines[j]));\n                } else if (starless && lines[j].length > lastIndentLength) {\n                    // starless: re-indent non-empty content, avoiding trim\n                    print_token(lines[j].substring(lastIndentLength));\n                } else {\n                    // normal comments output raw\n                    output.add_token(lines[j]);\n                }\n            }\n\n            // for comments of more than one line, make sure there's a new line after\n            print_newline(false, true);\n        }\n\n        function handle_inline_comment() {\n            output.space_before_token = true;\n            print_token();\n            output.space_before_token = true;\n        }\n\n        function handle_comment() {\n            if (current_token.wanted_newline) {\n                print_newline(false, true);\n            } else {\n                output.trim(true);\n            }\n\n            output.space_before_token = true;\n            print_token();\n            print_newline(false, true);\n        }\n\n        function handle_dot() {\n            if (start_of_statement()) {\n                // The conditional starts the statement if appropriate.\n            }\n\n            if (last_type === 'TK_RESERVED' && is_special_word(flags.last_text)) {\n                output.space_before_token = true;\n            } else {\n                // allow preserved newlines before dots in general\n                // force newlines on dots after close paren when break_chained - for bar().baz()\n                allow_wrap_or_preserved_newline(flags.last_text === ')' && opt.break_chained_methods);\n            }\n\n            print_token();\n        }\n\n        function handle_unknown() {\n            print_token();\n\n            if (current_token.text[current_token.text.length - 1] === '\\n') {\n                print_newline();\n            }\n        }\n\n        function handle_eof() {\n            // Unwind any open statements\n            while (flags.mode === MODE.Statement) {\n                restore_mode();\n            }\n        }\n    }\n\n    function OutputLine() {\n        var character_count = 0;\n        var line_items = [];\n\n        this.get_character_count = function() {\n            return character_count;\n        }\n\n        this.get_item_count = function() {\n            return line_items.length;\n        }\n\n        this.get_output = function() {\n            return line_items.join('');\n        }\n\n        this.last = function() {\n            if (line_items.length) {\n              return line_items[line_items.length - 1];\n            } else {\n              return null;\n            }\n        }\n\n        this.push = function(input) {\n            line_items.push(input);\n            character_count += input.length;\n        }\n\n        this.remove_indent = function(indent_string, baseIndentString) {\n            var splice_index = 0;\n\n            // skip empty lines\n            if (line_items.length === 0) {\n                return;\n            }\n\n            // skip the preindent string if present\n            if (baseIndentString && line_items[0] === baseIndentString) {\n                splice_index = 1;\n            }\n\n            // remove one indent, if present\n            if (line_items[splice_index] === indent_string) {\n                character_count -= line_items[splice_index].length;\n                line_items.splice(splice_index, 1);\n            }\n        }\n\n        this.trim = function(indent_string, baseIndentString) {\n            while (this.get_item_count() &&\n                (this.last() === ' ' ||\n                    this.last() === indent_string ||\n                    this.last() === baseIndentString)) {\n                var item = line_items.pop();\n                character_count -= item.length;\n            }\n        }\n    }\n\n    function Output(indent_string, baseIndentString) {\n        var lines =[];\n        this.baseIndentString = baseIndentString;\n        this.current_line = null;\n        this.space_before_token = false;\n\n        this.get_line_number = function() {\n            return lines.length;\n        }\n\n        // Using object instead of string to allow for later expansion of info about each line\n        this.add_new_line = function(force_newline) {\n            if (this.get_line_number() === 1 && this.just_added_newline()) {\n                return false; // no newline on start of file\n            }\n\n            if (force_newline || !this.just_added_newline()) {\n                this.current_line = new OutputLine();\n                lines.push(this.current_line);\n                return true;\n            }\n\n            return false;\n        }\n\n        // initialize\n        this.add_new_line(true);\n\n        this.get_code = function() {\n            var sweet_code = lines[0].get_output();\n            for (var line_index = 1; line_index < lines.length; line_index++) {\n                sweet_code += '\\n' + lines[line_index].get_output();\n            }\n            sweet_code = sweet_code.replace(/[\\r\\n\\t ]+$/, '');\n            return sweet_code;\n        }\n\n        this.add_indent_string = function(indentation_level) {\n            if (baseIndentString) {\n                this.current_line.push(baseIndentString);\n            }\n\n            // Never indent your first output indent at the start of the file\n            if (lines.length > 1) {\n                for (var i = 0; i < indentation_level; i += 1) {\n                    this.current_line.push(indent_string);\n                }\n                return true;\n            }\n            return false;\n        }\n\n        this.add_token = function(printable_token) {\n            this.add_space_before_token();\n            this.current_line.push(printable_token);\n        }\n\n        this.add_space_before_token = function() {\n            if (this.space_before_token && this.current_line.get_item_count()) {\n                var last_output = this.current_line.last();\n                if (last_output !== ' ' && last_output !== indent_string && last_output !== baseIndentString) { // prevent occassional duplicate space\n                    this.current_line.push(' ');\n                }\n            }\n            this.space_before_token = false;\n        }\n\n        this.remove_redundant_indentation = function (frame) {\n            // This implementation is effective but has some issues:\n            //     - less than great performance due to array splicing\n            //     - can cause line wrap to happen too soon due to indent removal\n            //           after wrap points are calculated\n            // These issues are minor compared to ugly indentation.\n\n            if (frame.multiline_frame ||\n                frame.mode === MODE.ForInitializer ||\n                frame.mode === MODE.Conditional) {\n                return;\n            }\n\n            // remove one indent from each line inside this section\n            var index = frame.start_line_index;\n            var line;\n\n            var output_length = lines.length;\n            while (index < output_length) {\n                lines[index].remove_indent(indent_string, baseIndentString);\n                index++;\n            }\n        }\n\n        this.trim = function(eat_newlines) {\n            eat_newlines = (eat_newlines === undefined) ? false : eat_newlines;\n\n            this.current_line.trim(indent_string, baseIndentString);\n\n            while (eat_newlines && lines.length > 1 &&\n                this.current_line.get_item_count() === 0) {\n                lines.pop();\n                this.current_line = lines[lines.length - 1]\n                this.current_line.trim(indent_string, baseIndentString);\n            }\n        }\n\n        this.just_added_newline = function() {\n            return this.current_line.get_item_count() === 0;\n        }\n\n        this.just_added_blankline = function() {\n            if (this.just_added_newline()) {\n                if (lines.length === 1) {\n                    return true; // start of the file and newline = blank\n                }\n\n                var line = lines[lines.length - 2];\n                return line.get_item_count() === 0;\n            }\n            return false;\n        }\n    }\n\n\n    var Token = function(type, text, newlines, whitespace_before, mode, parent) {\n        this.type = type;\n        this.text = text;\n        this.comments_before = [];\n        this.newlines = newlines || 0;\n        this.wanted_newline = newlines > 0;\n        this.whitespace_before = whitespace_before || [];\n        this.parent = null;\n    }\n\n    function tokenizer(input, opts, indent_string) {\n\n        var whitespace = \"\\n\\r\\t \".split('');\n        var digit = /[0-9]/;\n\n        var punct = ('+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! ~ , : ? ^ ^= |= :: =>'\n                +' <%= <% %> <?= <? ?>').split(' '); // try to be a good boy and try not to break the markup language identifiers\n\n        // words which should always start on new line.\n        this.line_starters = 'continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,yield,import,export'.split(',');\n        var reserved_words = this.line_starters.concat(['do', 'in', 'else', 'get', 'set', 'new', 'catch', 'finally', 'typeof']);\n\n        var n_newlines, whitespace_before_token, in_html_comment, tokens, parser_pos;\n        var input_length;\n\n        this.tokenize = function() {\n            // cache the source's length.\n            input_length = input.length\n            parser_pos = 0;\n            in_html_comment = false\n            tokens = [];\n\n            var next, last;\n            var token_values;\n            var open = null;\n            var open_stack = [];\n            var comments = [];\n\n            while (!(last && last.type === 'TK_EOF')) {\n                token_values = tokenize_next();\n                next = new Token(token_values[1], token_values[0], n_newlines, whitespace_before_token);\n                while(next.type === 'TK_INLINE_COMMENT' || next.type === 'TK_COMMENT' ||\n                    next.type === 'TK_BLOCK_COMMENT' || next.type === 'TK_UNKNOWN') {\n                    comments.push(next);\n                    token_values = tokenize_next();\n                    next = new Token(token_values[1], token_values[0], n_newlines, whitespace_before_token);\n                }\n\n                if (comments.length) {\n                    next.comments_before = comments;\n                    comments = [];\n                }\n\n                if (next.type === 'TK_START_BLOCK' || next.type === 'TK_START_EXPR') {\n                    next.parent = last;\n                    open = next;\n                    open_stack.push(next);\n                }  else if ((next.type === 'TK_END_BLOCK' || next.type === 'TK_END_EXPR') &&\n                    (open && (\n                        (next.text === ']' && open.text === '[') ||\n                        (next.text === ')' && open.text === '(') ||\n                        (next.text === '}' && open.text === '}')))) {\n                    next.parent = open.parent;\n                    open = open_stack.pop();\n                }\n\n                tokens.push(next);\n                last = next;\n            }\n\n            return tokens;\n        }\n\n        function tokenize_next() {\n            var i, resulting_string;\n\n            n_newlines = 0;\n            whitespace_before_token = [];\n\n            if (parser_pos >= input_length) {\n                return ['', 'TK_EOF'];\n            }\n\n            var last_token;\n            if (tokens.length) {\n                last_token = tokens[tokens.length-1];\n            } else {\n                // For the sake of tokenizing we can pretend that there was on open brace to start\n                last_token = new Token('TK_START_BLOCK', '{');\n            }\n\n\n            var c = input.charAt(parser_pos);\n            parser_pos += 1;\n\n            while (in_array(c, whitespace)) {\n\n                if (c === '\\n') {\n                    n_newlines += 1;\n                    whitespace_before_token = [];\n                } else if (n_newlines) {\n                    if (c === indent_string) {\n                        whitespace_before_token.push(indent_string);\n                    } else if (c !== '\\r') {\n                        whitespace_before_token.push(' ');\n                    }\n                }\n\n                if (parser_pos >= input_length) {\n                    return ['', 'TK_EOF'];\n                }\n\n                c = input.charAt(parser_pos);\n                parser_pos += 1;\n            }\n\n            if (digit.test(c)) {\n                var allow_decimal = true;\n                var allow_e = true;\n                var local_digit = digit;\n\n                if (c === '0' && parser_pos < input_length && /[Xx]/.test(input.charAt(parser_pos))) {\n                    // switch to hex number, no decimal or e, just hex digits\n                    allow_decimal = false;\n                    allow_e = false;\n                    c += input.charAt(parser_pos);\n                    parser_pos += 1;\n                    local_digit = /[0123456789abcdefABCDEF]/\n                } else {\n                    // we know this first loop will run.  It keeps the logic simpler.\n                    c = '';\n                    parser_pos -= 1\n                }\n\n                // Add the digits\n                while (parser_pos < input_length && local_digit.test(input.charAt(parser_pos))) {\n                    c += input.charAt(parser_pos);\n                    parser_pos += 1;\n\n                    if (allow_decimal && parser_pos < input_length && input.charAt(parser_pos) === '.') {\n                        c += input.charAt(parser_pos);\n                        parser_pos += 1;\n                        allow_decimal = false;\n                    }\n\n                    if (allow_e && parser_pos < input_length && /[Ee]/.test(input.charAt(parser_pos))) {\n                        c += input.charAt(parser_pos);\n                        parser_pos += 1;\n\n                        if (parser_pos < input_length && /[+-]/.test(input.charAt(parser_pos))) {\n                            c += input.charAt(parser_pos);\n                            parser_pos += 1;\n                        }\n\n                        allow_e = false;\n                        allow_decimal = false;\n                    }\n                }\n\n                return [c, 'TK_WORD'];\n            }\n\n            if (acorn.isIdentifierStart(input.charCodeAt(parser_pos-1))) {\n                if (parser_pos < input_length) {\n                    while (acorn.isIdentifierChar(input.charCodeAt(parser_pos))) {\n                        c += input.charAt(parser_pos);\n                        parser_pos += 1;\n                        if (parser_pos === input_length) {\n                            break;\n                        }\n                    }\n                }\n\n                if (!(last_token.type === 'TK_DOT' ||\n                        (last_token.type === 'TK_RESERVED' && in_array(last_token.text, ['set', 'get'])))\n                    && in_array(c, reserved_words)) {\n                    if (c === 'in') { // hack for 'in' operator\n                        return [c, 'TK_OPERATOR'];\n                    }\n                    return [c, 'TK_RESERVED'];\n                }\n\n                return [c, 'TK_WORD'];\n            }\n\n            if (c === '(' || c === '[') {\n                return [c, 'TK_START_EXPR'];\n            }\n\n            if (c === ')' || c === ']') {\n                return [c, 'TK_END_EXPR'];\n            }\n\n            if (c === '{') {\n                return [c, 'TK_START_BLOCK'];\n            }\n\n            if (c === '}') {\n                return [c, 'TK_END_BLOCK'];\n            }\n\n            if (c === ';') {\n                return [c, 'TK_SEMICOLON'];\n            }\n\n            if (c === '/') {\n                var comment = '';\n                // peek for comment /* ... */\n                var inline_comment = true;\n                if (input.charAt(parser_pos) === '*') {\n                    parser_pos += 1;\n                    if (parser_pos < input_length) {\n                        while (parser_pos < input_length && !(input.charAt(parser_pos) === '*' && input.charAt(parser_pos + 1) && input.charAt(parser_pos + 1) === '/')) {\n                            c = input.charAt(parser_pos);\n                            comment += c;\n                            if (c === \"\\n\" || c === \"\\r\") {\n                                inline_comment = false;\n                            }\n                            parser_pos += 1;\n                            if (parser_pos >= input_length) {\n                                break;\n                            }\n                        }\n                    }\n                    parser_pos += 2;\n                    if (inline_comment && n_newlines === 0) {\n                        return ['/*' + comment + '*/', 'TK_INLINE_COMMENT'];\n                    } else {\n                        return ['/*' + comment + '*/', 'TK_BLOCK_COMMENT'];\n                    }\n                }\n                // peek for comment // ...\n                if (input.charAt(parser_pos) === '/') {\n                    comment = c;\n                    while (input.charAt(parser_pos) !== '\\r' && input.charAt(parser_pos) !== '\\n') {\n                        comment += input.charAt(parser_pos);\n                        parser_pos += 1;\n                        if (parser_pos >= input_length) {\n                            break;\n                        }\n                    }\n                    return [comment, 'TK_COMMENT'];\n                }\n\n            }\n\n            if (c === '`' || c === \"'\" || c === '\"' || // string\n                (\n                    (c === '/') || // regexp\n                    (opts.e4x && c === \"<\" && input.slice(parser_pos - 1).match(/^<([-a-zA-Z:0-9_.]+|{[^{}]*}|!\\[CDATA\\[[\\s\\S]*?\\]\\])\\s*([-a-zA-Z:0-9_.]+=('[^']*'|\"[^\"]*\"|{[^{}]*})\\s*)*\\/?\\s*>/)) // xml\n                ) && ( // regex and xml can only appear in specific locations during parsing\n                    (last_token.type === 'TK_RESERVED' && in_array(last_token.text , ['return', 'case', 'throw', 'else', 'do', 'typeof', 'yield'])) ||\n                    (last_token.type === 'TK_END_EXPR' && last_token.text === ')' &&\n                        last_token.parent && last_token.parent.type === 'TK_RESERVED' && in_array(last_token.parent.text, ['if', 'while', 'for'])) ||\n                    (in_array(last_token.type, ['TK_COMMENT', 'TK_START_EXPR', 'TK_START_BLOCK',\n                        'TK_END_BLOCK', 'TK_OPERATOR', 'TK_EQUALS', 'TK_EOF', 'TK_SEMICOLON', 'TK_COMMA'\n                    ]))\n                )) {\n\n                var sep = c,\n                    esc = false,\n                    has_char_escapes = false;\n\n                resulting_string = c;\n\n                if (sep === '/') {\n                    //\n                    // handle regexp\n                    //\n                    var in_char_class = false;\n                    while (parser_pos < input_length &&\n                            ((esc || in_char_class || input.charAt(parser_pos) !== sep) &&\n                            !acorn.newline.test(input.charAt(parser_pos)))) {\n                        resulting_string += input.charAt(parser_pos);\n                        if (!esc) {\n                            esc = input.charAt(parser_pos) === '\\\\';\n                            if (input.charAt(parser_pos) === '[') {\n                                in_char_class = true;\n                            } else if (input.charAt(parser_pos) === ']') {\n                                in_char_class = false;\n                            }\n                        } else {\n                            esc = false;\n                        }\n                        parser_pos += 1;\n                    }\n                } else if (opts.e4x && sep === '<') {\n                    //\n                    // handle e4x xml literals\n                    //\n                    var xmlRegExp = /<(\\/?)([-a-zA-Z:0-9_.]+|{[^{}]*}|!\\[CDATA\\[[\\s\\S]*?\\]\\])\\s*([-a-zA-Z:0-9_.]+=('[^']*'|\"[^\"]*\"|{[^{}]*})\\s*)*(\\/?)\\s*>/g;\n                    var xmlStr = input.slice(parser_pos - 1);\n                    var match = xmlRegExp.exec(xmlStr);\n                    if (match && match.index === 0) {\n                        var rootTag = match[2];\n                        var depth = 0;\n                        while (match) {\n                            var isEndTag = !! match[1];\n                            var tagName = match[2];\n                            var isSingletonTag = ( !! match[match.length - 1]) || (tagName.slice(0, 8) === \"![CDATA[\");\n                            if (tagName === rootTag && !isSingletonTag) {\n                                if (isEndTag) {\n                                    --depth;\n                                } else {\n                                    ++depth;\n                                }\n                            }\n                            if (depth <= 0) {\n                                break;\n                            }\n                            match = xmlRegExp.exec(xmlStr);\n                        }\n                        var xmlLength = match ? match.index + match[0].length : xmlStr.length;\n                        parser_pos += xmlLength - 1;\n                        return [xmlStr.slice(0, xmlLength), \"TK_STRING\"];\n                    }\n                } else {\n                    //\n                    // handle string\n                    //\n                    // Template strings can travers lines without escape characters.\n                    // Other strings cannot\n                    while (parser_pos < input_length &&\n                            (esc || (input.charAt(parser_pos) !== sep &&\n                            (sep === '`' || !acorn.newline.test(input.charAt(parser_pos)))))) {\n                        resulting_string += input.charAt(parser_pos);\n                        if (esc) {\n                            if (input.charAt(parser_pos) === 'x' || input.charAt(parser_pos) === 'u') {\n                                has_char_escapes = true;\n                            }\n                            esc = false;\n                        } else {\n                            esc = input.charAt(parser_pos) === '\\\\';\n                        }\n                        parser_pos += 1;\n                    }\n\n                }\n\n                if (has_char_escapes && opts.unescape_strings) {\n                    resulting_string = unescape_string(resulting_string);\n                }\n\n                if (parser_pos < input_length && input.charAt(parser_pos) === sep) {\n                    resulting_string += sep;\n                    parser_pos += 1;\n\n                    if (sep === '/') {\n                        // regexps may have modifiers /regexp/MOD , so fetch those, too\n                        // Only [gim] are valid, but if the user puts in garbage, do what we can to take it.\n                        while (parser_pos < input_length && acorn.isIdentifierStart(input.charCodeAt(parser_pos))) {\n                            resulting_string += input.charAt(parser_pos);\n                            parser_pos += 1;\n                        }\n                    }\n                }\n                return [resulting_string, 'TK_STRING'];\n            }\n\n            if (c === '#') {\n\n                if (tokens.length === 0 && input.charAt(parser_pos) === '!') {\n                    // shebang\n                    resulting_string = c;\n                    while (parser_pos < input_length && c !== '\\n') {\n                        c = input.charAt(parser_pos);\n                        resulting_string += c;\n                        parser_pos += 1;\n                    }\n                    return [trim(resulting_string) + '\\n', 'TK_UNKNOWN'];\n                }\n\n\n\n                // Spidermonkey-specific sharp variables for circular references\n                // https://developer.mozilla.org/En/Sharp_variables_in_JavaScript\n                // http://mxr.mozilla.org/mozilla-central/source/js/src/jsscan.cpp around line 1935\n                var sharp = '#';\n                if (parser_pos < input_length && digit.test(input.charAt(parser_pos))) {\n                    do {\n                        c = input.charAt(parser_pos);\n                        sharp += c;\n                        parser_pos += 1;\n                    } while (parser_pos < input_length && c !== '#' && c !== '=');\n                    if (c === '#') {\n                        //\n                    } else if (input.charAt(parser_pos) === '[' && input.charAt(parser_pos + 1) === ']') {\n                        sharp += '[]';\n                        parser_pos += 2;\n                    } else if (input.charAt(parser_pos) === '{' && input.charAt(parser_pos + 1) === '}') {\n                        sharp += '{}';\n                        parser_pos += 2;\n                    }\n                    return [sharp, 'TK_WORD'];\n                }\n            }\n\n            if (c === '<' && input.substring(parser_pos - 1, parser_pos + 3) === '<!--') {\n                parser_pos += 3;\n                c = '<!--';\n                while (input.charAt(parser_pos) !== '\\n' && parser_pos < input_length) {\n                    c += input.charAt(parser_pos);\n                    parser_pos++;\n                }\n                in_html_comment = true;\n                return [c, 'TK_COMMENT'];\n            }\n\n            if (c === '-' && in_html_comment && input.substring(parser_pos - 1, parser_pos + 2) === '-->') {\n                in_html_comment = false;\n                parser_pos += 2;\n                return ['-->', 'TK_COMMENT'];\n            }\n\n            if (c === '.') {\n                return [c, 'TK_DOT'];\n            }\n\n            if (in_array(c, punct)) {\n                while (parser_pos < input_length && in_array(c + input.charAt(parser_pos), punct)) {\n                    c += input.charAt(parser_pos);\n                    parser_pos += 1;\n                    if (parser_pos >= input_length) {\n                        break;\n                    }\n                }\n\n                if (c === ',') {\n                    return [c, 'TK_COMMA'];\n                } else if (c === '=') {\n                    return [c, 'TK_EQUALS'];\n                } else {\n                    return [c, 'TK_OPERATOR'];\n                }\n            }\n\n            return [c, 'TK_UNKNOWN'];\n        }\n\n\n        function unescape_string(s) {\n            var esc = false,\n                out = '',\n                pos = 0,\n                s_hex = '',\n                escaped = 0,\n                c;\n\n            while (esc || pos < s.length) {\n\n                c = s.charAt(pos);\n                pos++;\n\n                if (esc) {\n                    esc = false;\n                    if (c === 'x') {\n                        // simple hex-escape \\x24\n                        s_hex = s.substr(pos, 2);\n                        pos += 2;\n                    } else if (c === 'u') {\n                        // unicode-escape, \\u2134\n                        s_hex = s.substr(pos, 4);\n                        pos += 4;\n                    } else {\n                        // some common escape, e.g \\n\n                        out += '\\\\' + c;\n                        continue;\n                    }\n                    if (!s_hex.match(/^[0123456789abcdefABCDEF]+$/)) {\n                        // some weird escaping, bail out,\n                        // leaving whole string intact\n                        return s;\n                    }\n\n                    escaped = parseInt(s_hex, 16);\n\n                    if (escaped >= 0x00 && escaped < 0x20) {\n                        // leave 0x00...0x1f escaped\n                        if (c === 'x') {\n                            out += '\\\\x' + s_hex;\n                        } else {\n                            out += '\\\\u' + s_hex;\n                        }\n                        continue;\n                    } else if (escaped === 0x22 || escaped === 0x27 || escaped === 0x5c) {\n                        // single-quote, apostrophe, backslash - escape these\n                        out += '\\\\' + String.fromCharCode(escaped);\n                    } else if (c === 'x' && escaped > 0x7e && escaped <= 0xff) {\n                        // we bail out on \\x7f..\\xff,\n                        // leaving whole string escaped,\n                        // as it's probably completely binary\n                        return s;\n                    } else {\n                        out += String.fromCharCode(escaped);\n                    }\n                } else if (c === '\\\\') {\n                    esc = true;\n                } else {\n                    out += c;\n                }\n            }\n            return out;\n        }\n\n    }\n\n\n    if (typeof define === \"function\" && define.amd) {\n        // Add support for AMD ( https://github.com/amdjs/amdjs-api/wiki/AMD#defineamd-property- )\n        define([], function() {\n            return { js_beautify: js_beautify };\n        });\n    } else if (typeof exports !== \"undefined\") {\n        // Add support for CommonJS. Just put this file somewhere on your require.paths\n        // and you will be able to `var js_beautify = require(\"beautify\").js_beautify`.\n        exports.js_beautify = js_beautify;\n    } else if (typeof window !== \"undefined\") {\n        // If we're running a web page and don't have either of the above, add our one global\n        window.js_beautify = js_beautify;\n    } else if (typeof global !== \"undefined\") {\n        // If we don't even have window, try global.\n        global.js_beautify = js_beautify;\n    }\n\n}());\n"
  },
  {
    "path": "static/js/require.js",
    "content": "var requirejs,require,define;\n(function(aa){function I(b){return\"[object Function]\"===P.call(b)}function J(b){return\"[object Array]\"===P.call(b)}function x(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function Q(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function r(b,c){return ga.call(b,c)}function m(b,c){return r(b,c)&&b[c]}function G(b,c){for(var d in b)if(r(b,d)&&c(b[d],d))break}function R(b,c,d,m){c&&G(c,function(c,k){if(d||!r(b,k))m&&\"string\"!==typeof c?(b[k]||(b[k]={}),R(b[k],\n    c,d,m)):b[k]=c});return b}function t(b,c){return function(){return c.apply(b,arguments)}}function ba(b){throw b;}function ca(b){if(!b)return b;var c=aa;x(b.split(\".\"),function(b){c=c[b]});return c}function A(b,c,d,m){c=Error(c+\"\\nhttp://requirejs.org/docs/errors.html#\"+b);c.requireType=b;c.requireModules=m;d&&(c.originalError=d);return c}function ha(b){function c(a,f,B){var e,n,b,c,d,S,h,g=f&&f.split(\"/\"),k=j.map,i=k&&k[\"*\"];if(a&&\".\"===a.charAt(0))if(f){e=m(j.pkgs,f)?g=[f]:g.slice(0,g.length-1);\n    f=a=e.concat(a.split(\"/\"));for(e=0;f[e];e+=1)if(n=f[e],\".\"===n)f.splice(e,1),e-=1;else if(\"..\"===n)if(1===e&&(\"..\"===f[2]||\"..\"===f[0]))break;else 0<e&&(f.splice(e-1,2),e-=2);e=m(j.pkgs,f=a[0]);a=a.join(\"/\");e&&a===f+\"/\"+e.main&&(a=f)}else 0===a.indexOf(\"./\")&&(a=a.substring(2));if(B&&k&&(g||i)){f=a.split(\"/\");for(e=f.length;0<e;e-=1){b=f.slice(0,e).join(\"/\");if(g)for(n=g.length;0<n;n-=1)if(B=m(k,g.slice(0,n).join(\"/\")))if(B=m(B,b)){c=B;d=e;break}if(c)break;!S&&i&&m(i,b)&&(S=m(i,b),h=e)}!c&&S&&(c=\n    S,d=h);c&&(f.splice(0,d,c),a=f.join(\"/\"))}return a}function d(a){z&&x(document.getElementsByTagName(\"script\"),function(f){if(f.getAttribute(\"data-requiremodule\")===a&&f.getAttribute(\"data-requirecontext\")===h.contextName)return f.parentNode.removeChild(f),true})}function y(a){var f=m(j.paths,a);if(f&&J(f)&&1<f.length)return d(a),f.shift(),h.require.undef(a),h.require([a]),true}function g(a){var f,b=a?a.indexOf(\"!\"):-1;-1<b&&(f=a.substring(0,b),a=a.substring(b+1,a.length));return[f,a]}function k(a,\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        f,b,e){var n,C,l=null,d=f?f.name:null,k=a,i=true,j=\"\";a||(i=false,a=\"_@r\"+(P+=1));a=g(a);l=a[0];a=a[1];l&&(l=c(l,d,e),C=m(p,l));a&&(l?j=C&&C.normalize?C.normalize(a,function(a){return c(a,d,e)}):c(a,d,e):(j=c(a,d,e),a=g(j),l=a[0],j=a[1],b=true,n=h.nameToUrl(j)));b=l&&!C&&!b?\"_unnormalized\"+(Q+=1):\"\";return{prefix:l,name:j,parentMap:f,unnormalized:!!b,url:n,originalName:k,isDefine:i,id:(l?l+\"!\"+j:j)+b}}function q(a){var f=a.id,b=m(o,f);b||(b=o[f]=new h.Module(a));return b}function s(a,f,b){var e=a.id,\n    n=m(o,e);if(r(p,e)&&(!n||n.defineEmitComplete))\"defined\"===f&&b(p[e]);else if(n=q(a),n.error&&\"error\"===f)b(n.error);else n.on(f,b)}function u(a,f){var b=a.requireModules,e=false;if(f)f(a);else if(x(b,function(f){if(f=m(o,f))f.error=a,f.events.error&&(e=true,f.emit(\"error\",a))}),!e)i.onError(a)}function v(){T.length&&(ia.apply(H,[H.length-1,0].concat(T)),T=[])}function w(a){delete o[a];delete V[a]}function F(a,f,b){var e=a.map.id;a.error?a.emit(\"error\",a.error):(f[e]=true,x(a.depMaps,function(e,c){var d=\n    e.id,g=m(o,d);g&&!a.depMatched[c]&&!b[d]&&(m(f,d)?(a.defineDep(c,p[d]),a.check()):F(g,f,b))}),b[e]=true)}function D(){var a,f,b,e,n=(b=1E3*j.waitSeconds)&&h.startTime+b<(new Date).getTime(),c=[],l=[],g=false,k=true;if(!W){W=true;G(V,function(b){a=b.map;f=a.id;if(b.enabled&&(a.isDefine||l.push(b),!b.error))if(!b.inited&&n)y(f)?g=e=true:(c.push(f),d(f));else if(!b.inited&&b.fetched&&a.isDefine&&(g=true,!a.prefix))return k=false});if(n&&c.length)return b=A(\"timeout\",\"Load timeout for modules: \"+c,null,\n    c),b.contextName=h.contextName,u(b);k&&x(l,function(a){F(a,{},{})});if((!n||e)&&g)if((z||da)&&!X)X=setTimeout(function(){X=0;D()},50);W=false}}function E(a){r(p,a[0])||q(k(a[0],null,true)).init(a[1],a[2])}function K(a){var a=a.currentTarget||a.srcElement,b=h.onScriptLoad;a.detachEvent&&!Y?a.detachEvent(\"onreadystatechange\",b):a.removeEventListener(\"load\",b,false);b=h.onScriptError;(!a.detachEvent||Y)&&a.removeEventListener(\"error\",b,false);return{node:a,id:a&&a.getAttribute(\"data-requiremodule\")}}\n    function L(){var a;for(v();H.length;){a=H.shift();if(null===a[0])return u(A(\"mismatch\",\"Mismatched anonymous define() template: \"+a[a.length-1]));E(a)}}var W,Z,h,M,X,j={waitSeconds:7,baseUrl:\"./\",paths:{},pkgs:{},shim:{},config:{}},o={},V={},$={},H=[],p={},U={},P=1,Q=1;M={require:function(a){return a.require?a.require:a.require=h.makeRequire(a.map)},exports:function(a){a.usingExports=true;if(a.map.isDefine)return a.exports?a.exports:a.exports=p[a.map.id]={}},module:function(a){return a.module?a.module:\n        a.module={id:a.map.id,uri:a.map.url,config:function(){var b=m(j.pkgs,a.map.id);return(b?m(j.config,a.map.id+\"/\"+b.main):m(j.config,a.map.id))||{}},exports:p[a.map.id]}}};Z=function(a){this.events=m($,a.id)||{};this.map=a;this.shim=m(j.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};Z.prototype={init:function(a,b,c,e){e=e||{};if(!this.inited){this.factory=b;if(c)this.on(\"error\",c);else this.events.error&&(c=t(this,function(a){this.emit(\"error\",a)}));\n        this.depMaps=a&&a.slice(0);this.errback=c;this.inited=true;this.ignore=e.ignore;e.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=true,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=true;h.startTime=(new Date).getTime();var a=this.map;if(this.shim)h.makeRequire(this.map,{enableBuildCallback:true})(this.shim.deps||[],t(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?\n        this.callPlugin():this.load()}},load:function(){var a=this.map.url;U[a]||(U[a]=true,h.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var e=this.exports,n=this.factory;if(this.inited)if(this.error)this.emit(\"error\",this.error);else{if(!this.defining){this.defining=true;if(1>this.depCount&&!this.defined){if(I(n)){if(this.events.error&&this.map.isDefine||i.onError!==ba)try{e=h.execCb(c,n,b,e)}catch(d){a=d}else e=h.execCb(c,n,b,e);this.map.isDefine&&\n    ((b=this.module)&&void 0!==b.exports&&b.exports!==this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?\"define\":\"require\",u(this.error=a)}else e=n;this.exports=e;if(this.map.isDefine&&!this.ignore&&(p[c]=e,i.onResourceLoad))i.onResourceLoad(h,this.map,this.depMaps);w(c);this.defined=true}this.defining=false;this.defined&&!this.defineEmitted&&(this.defineEmitted=\n        true,this.emit(\"defined\",this.exports),this.defineEmitComplete=true)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=k(a.prefix);this.depMaps.push(d);s(d,\"defined\",t(this,function(e){var n,d;d=this.map.name;var g=this.map.parentMap?this.map.parentMap.name:null,B=h.makeRequire(a.parentMap,{enableBuildCallback:true});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,g,true)})||\"\"),e=k(a.prefix+\"!\"+d,this.map.parentMap),s(e,\"defined\",t(this,function(a){this.init([],\n        function(){return a},null,{enabled:true,ignore:true})})),d=m(o,e.id)){this.depMaps.push(e);if(this.events.error)d.on(\"error\",t(this,function(a){this.emit(\"error\",a)}));d.enable()}}else n=t(this,function(a){this.init([],function(){return a},null,{enabled:true})}),n.error=t(this,function(a){this.inited=true;this.error=a;a.requireModules=[b];G(o,function(a){0===a.map.id.indexOf(b+\"_unnormalized\")&&w(a.map.id)});u(a)}),n.fromText=t(this,function(e,c){var d=a.name,g=k(d),l=N;c&&(e=c);l&&(N=false);q(g);\n        r(j.config,b)&&(j.config[d]=j.config[b]);try{i.exec(e)}catch(C){return u(A(\"fromtexteval\",\"fromText eval for \"+b+\" failed: \"+C,C,[b]))}l&&(N=true);this.depMaps.push(g);h.completeLoad(d);B([d],n)}),e.load(a.name,B,n,j)}));h.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=true;x(this.depMaps,t(this,function(a,b){var c,e;if(\"string\"===typeof a){a=k(a,this.map.isDefine?this.map:this.map.parentMap,false,!this.skipMap);this.depMaps[b]=a;if(c=m(M,\n        a.id)){this.depExports[b]=c(this);return}this.depCount+=1;s(a,\"defined\",t(this,function(a){this.defineDep(b,a);this.check()}));this.errback&&s(a,\"error\",t(this,this.errback))}c=a.id;e=o[c];!r(M,c)&&e&&!e.enabled&&h.enable(a,this)}));G(this.pluginMaps,t(this,function(a){var b=m(o,a.id);b&&!b.enabled&&h.enable(a,this)}));this.enabling=false;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){x(this.events[a],function(a){a(b)});\"error\"===a&&delete this.events[a]}};\n    h={config:j,contextName:b,registry:o,defined:p,urlFetched:U,defQueue:H,Module:Z,makeModuleMap:k,nextTick:i.nextTick,onError:u,configure:function(a){a.baseUrl&&\"/\"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+=\"/\");var b=j.pkgs,c=j.shim,e={paths:true,config:true,map:true};G(a,function(a,b){e[b]?\"map\"===b?(j.map||(j.map={}),R(j[b],a,true,true)):R(j[b],a,true):j[b]=a});a.shim&&(G(a.shim,function(a,b){J(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=h.makeShimExports(a);c[b]=\n        a}),j.shim=c);a.packages&&(x(a.packages,function(a){a=\"string\"===typeof a?{name:a}:a;b[a.name]={name:a.name,location:a.location||a.name,main:(a.main||\"main\").replace(ja,\"\").replace(ea,\"\")}}),j.pkgs=b);G(o,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=k(b))});if(a.deps||a.callback)h.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(aa,arguments));return b||a.exports&&ca(a.exports)}},makeRequire:function(a,f){function d(e,c,g){var l,j;\n        f.enableBuildCallback&&c&&I(c)&&(c.__requireJsBuild=true);if(\"string\"===typeof e){if(I(c))return u(A(\"requireargs\",\"Invalid require call\"),g);if(a&&r(M,e))return M[e](o[a.id]);if(i.get)return i.get(h,e,a,d);l=k(e,a,false,true);l=l.id;return!r(p,l)?u(A(\"notloaded\",'Module name \"'+l+'\" has not been loaded yet for context: '+b+(a?\"\":\". Use require([])\"))):p[l]}L();h.nextTick(function(){L();j=q(k(null,a));j.skipMap=f.skipMap;j.init(e,c,g,{enabled:true});D()});return d}f=f||{};R(d,{isBrowser:z,toUrl:function(b){var d,\n        f=b.lastIndexOf(\".\"),g=b.split(\"/\")[0];if(-1!==f&&(!(\".\"===g||\"..\"===g)||1<f))d=b.substring(f,b.length),b=b.substring(0,f);return h.nameToUrl(c(b,a&&a.id,true),d,true)},defined:function(b){return r(p,k(b,a,false,true).id)},specified:function(b){b=k(b,a,false,true).id;return r(p,b)||r(o,b)}});a||(d.undef=function(b){v();var c=k(b,a,true),f=m(o,b);delete p[b];delete U[c.url];delete $[b];f&&(f.events.defined&&($[b]=f.events),w(b))});return d},enable:function(a){m(o,a.id)&&q(a).enable()},completeLoad:function(a){var b,\n        c,e=m(j.shim,a)||{},d=e.exports;for(v();H.length;){c=H.shift();if(null===c[0]){c[0]=a;if(b)break;b=true}else c[0]===a&&(b=true);E(c)}c=m(o,a);if(!b&&!r(p,a)&&c&&!c.inited){if(j.enforceDefine&&(!d||!ca(d)))return y(a)?void 0:u(A(\"nodefine\",\"No define call for \"+a,null,[a]));E([a,e.deps||[],e.exportsFn])}D()},nameToUrl:function(a,b,c){var e,d,g,l,k,h;if(i.jsExtRegExp.test(a))l=a+(b||\"\");else{e=j.paths;d=j.pkgs;l=a.split(\"/\");for(k=l.length;0<k;k-=1)if(h=l.slice(0,k).join(\"/\"),g=m(d,h),h=m(e,h)){J(h)&&\n    (h=h[0]);l.splice(0,k,h);break}else if(g){a=a===g.name?g.location+\"/\"+g.main:g.location;l.splice(0,k,a);break}l=l.join(\"/\");l+=b||(/\\?/.test(l)||c?\"\":\".js\");l=(\"/\"===l.charAt(0)||l.match(/^[\\w\\+\\.\\-]+:/)?\"\":j.baseUrl)+l}return j.urlArgs?l+((-1===l.indexOf(\"?\")?\"?\":\"&\")+j.urlArgs):l},load:function(a,b){i.load(h,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if(\"load\"===a.type||ka.test((a.currentTarget||a.srcElement).readyState))O=null,a=K(a),h.completeLoad(a.id)},onScriptError:function(a){var b=\n        K(a);if(!y(b.id))return u(A(\"scripterror\",\"Script error for: \"+b.id,a,[b.id]))}};h.require=h.makeRequire();return h}var i,v,w,D,K,E,O,L,q,fa,la=/(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg,ma=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,ea=/\\.js$/,ja=/^\\.\\//;v=Object.prototype;var P=v.toString,ga=v.hasOwnProperty,ia=Array.prototype.splice,z=!!(\"undefined\"!==typeof window&&navigator&&window.document),da=!z&&\"undefined\"!==typeof importScripts,ka=z&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:\n    /^(complete|loaded)$/,Y=\"undefined\"!==typeof opera&&\"[object Opera]\"===opera.toString(),F={},s={},T=[],N=false;if(\"undefined\"===typeof define){if(\"undefined\"!==typeof requirejs){if(I(requirejs))return;s=requirejs;requirejs=void 0}\"undefined\"!==typeof require&&!I(require)&&(s=require,require=void 0);i=requirejs=function(b,c,d,y){var g,k=\"_\";!J(b)&&\"string\"!==typeof b&&(g=b,J(c)?(b=c,c=d,d=y):b=[]);g&&g.context&&(k=g.context);(y=m(F,k))||(y=F[k]=i.s.newContext(k));g&&y.configure(g);return y.require(b,\n    c,d)};i.config=function(b){return i(b)};i.nextTick=\"undefined\"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=i);i.version=\"2.1.6\";i.jsExtRegExp=/^\\/|:|\\?|\\.js$/;i.isBrowser=z;v=i.s={contexts:F,newContext:ha};i({});x([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(b){i[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(w=v.head=document.getElementsByTagName(\"head\")[0],D=document.getElementsByTagName(\"base\")[0]))w=v.head=D.parentNode;i.onError=\n    ba;i.load=function(b,c,d){var i=b&&b.config||{},g;if(z)return g=i.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\"),g.type=i.scriptType||\"text/javascript\",g.charset=\"utf-8\",g.async=true,g.setAttribute(\"data-requirecontext\",b.contextName),g.setAttribute(\"data-requiremodule\",c),g.attachEvent&&!(g.attachEvent.toString&&0>g.attachEvent.toString().indexOf(\"[native code\"))&&!Y?(N=true,g.attachEvent(\"onreadystatechange\",b.onScriptLoad)):(g.addEventListener(\"load\",\n    b.onScriptLoad,false),g.addEventListener(\"error\",b.onScriptError,false)),g.src=d,L=g,D?w.insertBefore(g,D):w.appendChild(g),L=null,g;if(da)try{importScripts(d),b.completeLoad(c)}catch(k){b.onError(A(\"importscripts\",\"importScripts failed for \"+c+\" at \"+d,k,[c]))}};z&&Q(document.getElementsByTagName(\"script\"),function(b){w||(w=b.parentNode);if(K=b.getAttribute(\"data-main\"))return q=K,s.baseUrl||(E=q.split(\"/\"),q=E.pop(),fa=E.length?E.join(\"/\")+\"/\":\"./\",s.baseUrl=fa),q=q.replace(ea,\"\"),i.jsExtRegExp.test(q)&&\n    (q=K),s.deps=s.deps?s.deps.concat(q):[q],true});define=function(b,c,d){var i,g;\"string\"!==typeof b&&(d=c,c=b,b=null);J(c)||(d=c,c=null);!c&&I(d)&&(c=[],d.length&&(d.toString().replace(la,\"\").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(c)));if(N){if(!(i=L))O&&\"interactive\"===O.readyState||Q(document.getElementsByTagName(\"script\"),function(b){if(\"interactive\"===b.readyState)return O=b}),i=O;i&&(b||(b=i.getAttribute(\"data-requiremodule\")),g=\n    F[i.getAttribute(\"data-requirecontext\")])}(g?g.defQueue:T).push([b,c,d])};define.amd={jQuery:true};i.exec=function(b){return eval(b)};i(s)}})(this);\n"
  },
  {
    "path": "static/lib/bootstrap/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.0 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default:disabled,\n.btn-default[disabled] {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);\n  background-image:      -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2));\n  background-image:         linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #2d6ca2;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #2d6ca2;\n  border-color: #2b669a;\n}\n.btn-primary:disabled,\n.btn-primary[disabled] {\n  background-color: #2d6ca2;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success:disabled,\n.btn-success[disabled] {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info:disabled,\n.btn-info[disabled] {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning:disabled,\n.btn-warning[disabled] {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger:disabled,\n.btn-danger[disabled] {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #357ebd;\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image:      -o-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));\n  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);\n  background-image:      -o-linear-gradient(top, #428bca 0%, #3071a9 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9));\n  background-image:         linear-gradient(to bottom, #428bca 0%, #3071a9 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #3071a9;\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);\n  background-image:      -o-linear-gradient(top, #428bca 0%, #3278b3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3));\n  background-image:         linear-gradient(to bottom, #428bca 0%, #3278b3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #3278b3;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image:      -o-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));\n  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}"
  },
  {
    "path": "static/lib/bootstrap/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.0 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('glyphicons-halflings-regular.eot');\n  src: url('glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('glyphicons-halflings-regular.woff') format('woff'), url('glyphicons-halflings-regular.ttf') format('truetype'), url('glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #428bca;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #428bca;\n}\na.text-primary:hover {\n  color: #3071a9;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #428bca;\n}\na.bg-primary:hover {\n  background-color: #3071a9;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  line-height: 34px;\n  line-height: 1.42857143 \\0;\n}\ninput[type=\"date\"].input-sm,\ninput[type=\"time\"].input-sm,\ninput[type=\"datetime-local\"].input-sm,\ninput[type=\"month\"].input-sm {\n  line-height: 30px;\n  line-height: 1.5 \\0;\n}\ninput[type=\"date\"].input-lg,\ninput[type=\"time\"].input-lg,\ninput[type=\"datetime-local\"].input-lg,\ninput[type=\"month\"].input-lg {\n  line-height: 46px;\n  line-height: 1.33 \\0;\n}\n_:-ms-fullscreen,\n:root input[type=\"date\"],\n_:-ms-fullscreen,\n:root input[type=\"time\"],\n_:-ms-fullscreen,\n:root input[type=\"datetime-local\"],\n_:-ms-fullscreen,\n:root input[type=\"month\"] {\n  line-height: 1.42857143;\n}\n_:-ms-fullscreen.input-sm,\n:root input[type=\"date\"].input-sm,\n_:-ms-fullscreen.input-sm,\n:root input[type=\"time\"].input-sm,\n_:-ms-fullscreen.input-sm,\n:root input[type=\"datetime-local\"].input-sm,\n_:-ms-fullscreen.input-sm,\n:root input[type=\"month\"].input-sm {\n  line-height: 1.5;\n}\n_:-ms-fullscreen.input-lg,\n:root input[type=\"date\"].input-lg,\n_:-ms-fullscreen.input-lg,\n:root input[type=\"time\"].input-lg,\n_:-ms-fullscreen.input-lg,\n:root input[type=\"datetime-local\"].input-lg,\n_:-ms-fullscreen.input-lg,\n:root input[type=\"month\"].input-lg {\n  line-height: 1.33;\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm,\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm,\nselect.form-group-sm .form-control {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\ntextarea.form-group-sm .form-control,\nselect[multiple].input-sm,\nselect[multiple].form-group-sm .form-control {\n  height: auto;\n}\n.input-lg,\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg,\nselect.form-group-lg .form-control {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\ntextarea.form-group-lg .form-control,\nselect[multiple].input-lg,\nselect[multiple].form-group-lg .form-control {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 14.3px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #3071a9;\n  border-color: #285e8e;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #428bca;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n  visibility: hidden;\n}\n.collapse.in {\n  display: block;\n  visibility: visible;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #428bca;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px solid;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: 0;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #428bca;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #428bca;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n  visibility: hidden;\n}\n.tab-content > .active {\n  display: block;\n  visibility: visible;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n    visibility: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #428bca;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #2a6496;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #fff;\n  cursor: default;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #428bca;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px 15px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding: 48px 0;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #428bca;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #428bca;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\na.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #e1edf7;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #428bca;\n}\n.panel-primary > .panel-heading .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #428bca;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  min-height: 16.42857143px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  visibility: visible;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000;\n            perspective: 1000;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  font-family: serif;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -15px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -15px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "static/lib/bootstrap/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.0 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.0\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.0\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.0'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.0\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.0'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state = state + 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false\n        else $parent.find('.active').removeClass('active')\n      }\n      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n    }\n\n    if (changed) this.$element.toggleClass('active')\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target)\n      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n      Plugin.call($btn, 'toggle')\n      e.preventDefault()\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', e.type == 'focus')\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.0\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      =\n    this.sliding     =\n    this.interval    =\n    this.$active     =\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.0'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var delta = direction == 'prev' ? -1 : 1\n    var activeIndex = this.getItemIndex(active)\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var fallback  = type == 'next' ? 'first' : 'last'\n    var that      = this\n\n    if (!$next.length) {\n      if (!this.options.wrap) return\n      $next = this.$element.find('.item')[fallback]()\n    }\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.0\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $(this.options.trigger).filter('[href=\"#' + element.id + '\"], [data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.0'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true,\n    trigger: '[data-toggle=\"collapse\"]'\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && option == 'show') options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.0\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.0'\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown', relatedTarget)\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.divider):visible a'\n    var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--                        // up\n    if (e.which == 40 && index < $items.length - 1) index++                        // down\n    if (!~index)                                      index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)\n    })\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.0\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options        = options\n    this.$body          = $(document.body)\n    this.$element       = $(element)\n    this.$backdrop      =\n    this.isShown        = null\n    this.scrollbarWidth = 0\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.0'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.setScrollbar()\n    this.escape()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element\n        .addClass('in')\n        .attr('aria-hidden', false)\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$element.find('.modal-dialog') // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .attr('aria-hidden', true)\n      .off('click.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\n        .prependTo(this.$element)\n        .on('click.dismiss.bs.modal', $.proxy(function (e) {\n          if (e.target !== e.currentTarget) return\n          this.options.backdrop == 'static'\n            ? this.$element[0].focus.call(this.$element[0])\n            : this.hide.call(this)\n        }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', '')\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    if (document.body.clientWidth >= window.innerWidth) return 0\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.0\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       =\n    this.options    =\n    this.enabled    =\n    this.timeout    =\n    this.hoverState =\n    this.$element   = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.0'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (self && self.$tip && self.$tip.is(':visible')) {\n      self.hoverState = 'in'\n      return\n    }\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var $container   = this.options.container ? $(this.options.container) : this.$element.parent()\n        var containerDim = this.getPosition($container)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < containerDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > containerDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < containerDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  = offset.top  + marginTop\n    offset.left = offset.left + marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {\n    this.arrow()\n      .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isHorizontal ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = this.tip()\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      that.$element\n        .removeAttr('aria-describedby')\n        .trigger('hidden.bs.' + that.type)\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && this.$tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    return (this.$tip = this.$tip || $(this.options.template))\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this    = $(this)\n      var data     = $this.data('bs.tooltip')\n      var options  = typeof option == 'object' && option\n      var selector = options && options.selector\n\n      if (!data && option == 'destroy') return\n      if (selector) {\n        if (!data) $this.data('bs.tooltip', (data = {}))\n        if (!data[selector]) data[selector] = new Tooltip(this, options)\n      } else {\n        if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      }\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.0\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.0'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n  Popover.prototype.tip = function () {\n    if (!this.$tip) this.$tip = $(this.options.template)\n    return this.$tip\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this    = $(this)\n      var data     = $this.data('bs.popover')\n      var options  = typeof option == 'object' && option\n      var selector = options && options.selector\n\n      if (!data && option == 'destroy') return\n      if (selector) {\n        if (!data) $this.data('bs.popover', (data = {}))\n        if (!data[selector]) data[selector] = new Popover(this, options)\n      } else {\n        if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      }\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.0\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    var process  = $.proxy(this.process, this)\n\n    this.$body          = $('body')\n    this.$scrollElement = $(element).is('body') ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', process)\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.0'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var offsetMethod = 'offset'\n    var offsetBase   = 0\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.offsets = []\n    this.targets = []\n    this.scrollHeight = this.getScrollHeight()\n\n    var self     = this\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        self.offsets.push(this[0])\n        self.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n        '[data-target=\"' + target + '\"],' +\n        this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.0\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.VERSION = '3.3.0'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu')) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.0\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      =\n    this.unpin        =\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.0'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && colliderTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = $('body').height()\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "static/lib/charts/highcharts.js",
    "content": "/*\n Highcharts JS v4.0.1 (2014-04-24)\n\n (c) 2009-2014 Torstein Honsi\n\n License: www.highcharts.com/license\n*/\n(function(){function q(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function w(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!==\"object\"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c===\"object\"&&Object.prototype.toString.call(c)!==\"[object Array]\"&&d!==\"renderTo\"&&typeof c.nodeType!==\"number\"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a<c;a++)d=e(d,b[a]);return d}function z(a,b){return parseInt(a,b||\n10)}function Fa(a){return typeof a===\"string\"}function ca(a){return typeof a===\"object\"}function La(a){return Object.prototype.toString.call(a)===\"[object Array]\"}function ha(a){return typeof a===\"number\"}function za(a){return U.log(a)/U.LN10}function ia(a){return U.pow(10,a)}function ja(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function r(a){return a!==t&&a!==null}function H(a,b,c){var d,e;if(Fa(b))r(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(r(b)&&\nca(b))for(d in b)a.setAttribute(d,b[d]);return e}function qa(a){return La(a)?a:[a]}function m(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!==\"undefined\"&&c!==null)return c}function G(a,b){if(Aa&&!aa&&b&&b.opacity!==t)b.filter=\"alpha(opacity=\"+b.opacity*100+\")\";q(a.style,b)}function Y(a,b,c,d,e){a=y.createElement(a);b&&q(a,b);e&&G(a,{padding:0,border:Q,margin:0});c&&G(a,c);d&&d.appendChild(a);return a}function ka(a,b){var c=function(){};c.prototype=new a;q(c.prototype,b);return c}\nfunction Ga(a,b,c,d){var e=E.lang,a=+a||0,f=b===-1?(a.toString().split(\".\")[1]||\"\").length:isNaN(b=M(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?\"-\":\"\",c=String(z(a=M(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:\"\")+c.substr(g).replace(/(\\d{3})(?=\\d)/g,\"$1\"+d)+(f?b+M(a-c).toFixed(f).slice(2):\"\")}function Ha(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Ma(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);\na.unshift(d);return c.apply(this,a)}}function Ia(a,b){for(var c=\"{\",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(\":\");g=f.shift().split(\".\");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]];if(f.length)f=f.join(\":\"),g=/\\.([0-9])/,h=E.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e!==null&&(e=Ga(e,i,h.decimalPoint,f.indexOf(\",\")>-1?h.thousandsSep:\"\"))):e=cb(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?\"}\":\"{\"}j.push(a);return j.join(\"\")}function mb(a){return U.pow(10,T(U.log(a)/\nU.LN10))}function nb(a,b,c,d){var e,c=m(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Bb(){this.symbol=this.color=0}function ob(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:d});for(e=0;e<c;e++)delete a[e].ss_i}function Na(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function Ba(a){for(var b=\na.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Oa(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Pa(a){db||(db=Y(Ja));a&&db.appendChild(a);db.innerHTML=\"\"}function ra(a,b){var c=\"Highcharts error #\"+a+\": www.highcharts.com/errors/\"+a;if(b)throw c;else I.console&&console.log(c)}function da(a){return parseFloat(a.toPrecision(14))}function Qa(a,b){va=m(a,b.animation)}function Cb(){var a=E.global.useUTC,b=a?\"getUTC\":\"get\",c=a?\"setUTC\":\"set\";Ra=(a&&E.global.timezoneOffset||\n0)*6E4;eb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,m(c,1),m(g,0),m(h,0),m(i,0))).getTime()};pb=b+\"Minutes\";qb=b+\"Hours\";rb=b+\"Day\";Xa=b+\"Date\";fb=b+\"Month\";gb=b+\"FullYear\";Db=c+\"Minutes\";Eb=c+\"Hours\";sb=c+\"Date\";Fb=c+\"Month\";Gb=c+\"FullYear\"}function P(){}function Sa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||\"\";this.isNew=!0;!c&&!d&&this.addLabel()}function la(){this.init.apply(this,arguments)}function Ya(){this.init.apply(this,arguments)}function Hb(a,b,c,d,e){var f=a.chart.inverted;\nthis.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.alignOptions={align:b.align||(f?c?\"left\":\"right\":\"center\"),verticalAlign:b.verticalAlign||(f?\"middle\":c?\"bottom\":\"top\"),y:m(b.y,f?4:c?14:-6),x:m(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?\"right\":\"left\":\"center\")}var t,y=document,I=window,U=Math,u=U.round,T=U.floor,Ka=U.ceil,v=U.max,C=U.min,M=U.abs,Z=U.cos,ea=U.sin,ma=U.PI,Ca=ma*2/360,wa=navigator.userAgent,Ib=I.opera,Aa=/msie/i.test(wa)&&\n!Ib,hb=y.documentMode===8,ib=/AppleWebKit/.test(wa),Ta=/Firefox/.test(wa),Jb=/(Mobile|Android|Windows Phone)/.test(wa),xa=\"http://www.w3.org/2000/svg\",aa=!!y.createElementNS&&!!y.createElementNS(xa,\"svg\").createSVGRect,Nb=Ta&&parseInt(wa.split(\"Firefox/\")[1],10)<4,fa=!aa&&!Aa&&!!y.createElement(\"canvas\").getContext,Za,$a,Kb={},tb=0,db,E,cb,va,ub,A,sa=function(){},V=[],ab=0,Ja=\"div\",Q=\"none\",Ob=/^[0-9]+$/,Pb=\"stroke-width\",eb,Ra,pb,qb,rb,Xa,fb,gb,Db,Eb,sb,Fb,Gb,F={},R=I.Highcharts=I.Highcharts?ra(16,\n!0):{};cb=function(a,b,c){if(!r(b)||isNaN(b))return\"Invalid date\";var a=m(a,\"%Y-%m-%d %H:%M:%S\"),d=new Date(b-Ra),e,f=d[qb](),g=d[rb](),h=d[Xa](),i=d[fb](),j=d[gb](),k=E.lang,l=k.weekdays,d=q({a:l[g].substr(0,3),A:l[g],d:Ha(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ha(i+1),y:j.toString().substr(2,2),Y:j,H:Ha(f),I:Ha(f%12||12),l:f%12||12,M:Ha(d[pb]()),p:f<12?\"AM\":\"PM\",P:f<12?\"am\":\"pm\",S:Ha(d.getSeconds()),L:Ha(u(b%1E3),3)},R.dateFormats);for(e in d)for(;a.indexOf(\"%\"+e)!==-1;)a=a.replace(\"%\"+e,typeof d[e]===\n\"function\"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Bb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};A=function(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}(\"millisecond\",1,\"second\",1E3,\"minute\",6E4,\"hour\",36E5,\"day\",864E5,\"week\",6048E5,\"month\",26784E5,\"year\",31556952E3);ub={init:function(a,b,c){var b=b||\"\",d=a.shift,e=b.indexOf(\"C\")>-1,f=e?7:3,g,b=b.split(\" \"),c=[].concat(c),\nh,i,j=function(a){for(g=a.length;g--;)a[g]===\"M\"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===\nb.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};(function(a){I.HighchartsAdapter=I.HighchartsAdapter||a&&{init:function(b){var c=a.fx,d=c.step,e,f=a.Tween,g=f&&f.propHooks;e=a.cssHooks.opacity;a.extend(a.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});a.each([\"cur\",\"_default\",\"width\",\"height\",\"opacity\"],function(a,b){var e=d,k;b===\"cur\"?e=c.prototype:b===\"_default\"&&f&&(e=g[b],b=\"set\");(k=e[b])&&(e[b]=function(c){var d,c=\na?c:this;if(c.prop!==\"align\")return d=c.elem,d.attr?d.attr(c.prop,b===\"cur\"?t:c.now):k.apply(this,arguments)})});Ma(e,\"get\",function(a,b,c){return b.attr?b.opacity||0:a.call(this,b,c)});e=function(a){var c=a.elem,d;if(!a.started)d=b.init(c,c.d,c.toD),a.start=d[0],a.end=d[1],a.started=!0;c.attr(\"d\",b.step(a.start,a.end,a.pos,c.toD))};f?g.d={set:e}:d.d=e;this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],\na[c],c,a)===!1)return c};a.fn.highcharts=function(){var a=\"Chart\",b=arguments,c,d;if(this[0]){Fa(b[0])&&(a=b[0],b=Array.prototype.slice.call(b,1));c=b[0];if(c!==t)c.chart=c.chart||{},c.chart.renderTo=this[0],new R[a](c,b[1]),d=this;c===t&&(d=V[H(this[0],\"data-highcharts-chart\")])}return d}},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b,c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);return d},offset:function(b){return a(b).offset()},\naddEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=y.removeEventListener?\"removeEventListener\":\"detachEvent\";y[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g=\"detached\"+c,h;!Aa&&d&&(delete d.layerX,delete d.layerY,delete d.returnValue);q(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each([\"preventDefault\",\"stopPropagation\"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b===\"preventDefault\"&&(h=!0)}}});a(b).trigger(f);\nb[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===t)c.pageX=a.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(!b.style)b.style={};if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==t&&b.attr&&(c.opacity+=\"px\");e.animate(c,d)},stop:function(b){a(b).stop()}}})(I.jQuery);var S=I.HighchartsAdapter,N=S||{};S&&S.init.call(S,ub);var jb=N.adapterRun,Qb=N.getScript,Da=N.inArray,p=N.each,vb=N.grep,Rb=N.offset,Ua=\nN.map,K=N.addEvent,W=N.removeEvent,D=N.fireEvent,Sb=N.washMouseEvent,kb=N.animate,bb=N.stop,N={enabled:!0,x:0,y:15,style:{color:\"#606060\",cursor:\"default\",fontSize:\"11px\"}};E={colors:\"#7cb5ec,#434348,#90ed7d,#f7a35c,#8085e9,#f15c80,#e4d354,#8085e8,#8d4653,#91e8e1\".split(\",\"),symbols:[\"circle\",\"diamond\",\"square\",\"triangle\",\"triangle-down\"],lang:{loading:\"Loading...\",months:\"January,February,March,April,May,June,July,August,September,October,November,December\".split(\",\"),shortMonths:\"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec\".split(\",\"),\nweekdays:\"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday\".split(\",\"),decimalPoint:\".\",numericSymbols:\"k,M,G,T,P,E\".split(\",\"),resetZoom:\"Reset zoom\",resetZoomTitle:\"Reset zoom level 1:1\",thousandsSep:\",\"},global:{useUTC:!0,canvasToolsURL:\"http://code.highcharts.com/4.0.1/modules/canvas-tools.js\",VMLRadialGradientURL:\"http://code.highcharts.com/4.0.1/gfx/vml-radial-gradient.png\"},chart:{borderColor:\"#4572A7\",borderRadius:0,defaultSeriesType:\"line\",ignoreHiddenSeries:!0,spacing:[10,10,15,\n10],backgroundColor:\"#FFFFFF\",plotBorderColor:\"#C0C0C0\",resetZoomButton:{theme:{zIndex:20},position:{align:\"right\",x:-10,y:10}}},title:{text:\"Chart title\",align:\"center\",margin:15,style:{color:\"#333333\",fontSize:\"18px\"}},subtitle:{text:\"\",align:\"center\",style:{color:\"#555555\"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{lineWidth:0,radius:4,lineColor:\"#FFFFFF\",states:{hover:{enabled:!0},select:{fillColor:\"#FFFFFF\",lineColor:\"#000000\",\nlineWidth:2}}},point:{events:{}},dataLabels:w(N,{align:\"center\",enabled:!1,formatter:function(){return this.y===null?\"\":Ga(this.y,-1)},verticalAlign:\"bottom\",y:0}),cropThreshold:300,pointRange:0,states:{hover:{marker:{},halo:{size:10,opacity:0.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3}},labels:{style:{position:\"absolute\",color:\"#3E576F\"}},legend:{enabled:!0,align:\"center\",layout:\"horizontal\",labelFormatter:function(){return this.name},borderColor:\"#909090\",borderRadius:0,navigation:{activeColor:\"#274b6d\",\ninactiveColor:\"#CCC\"},shadow:!1,itemStyle:{color:\"#333333\",fontSize:\"12px\",fontWeight:\"bold\"},itemHoverStyle:{color:\"#000\"},itemHiddenStyle:{color:\"#CCC\"},itemCheckboxStyle:{position:\"absolute\",width:\"13px\",height:\"13px\"},symbolPadding:5,verticalAlign:\"bottom\",x:0,y:0,title:{style:{fontWeight:\"bold\"}}},loading:{labelStyle:{fontWeight:\"bold\",position:\"relative\",top:\"1em\"},style:{position:\"absolute\",backgroundColor:\"white\",opacity:0.5,textAlign:\"center\"}},tooltip:{enabled:!0,animation:aa,backgroundColor:\"rgba(249, 249, 249, .85)\",\nborderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:\"%A, %b %e, %H:%M:%S.%L\",second:\"%A, %b %e, %H:%M:%S\",minute:\"%A, %b %e, %H:%M\",hour:\"%A, %b %e, %H:%M\",day:\"%A, %b %e, %Y\",week:\"Week from %A, %b %e, %Y\",month:\"%B %Y\",year:\"%Y\"},headerFormat:'<span style=\"font-size: 10px\">{point.key}</span><br/>',pointFormat:'<span style=\"color:{series.color}\">●</span> {series.name}: <b>{point.y}</b><br/>',shadow:!0,snap:Jb?25:10,style:{color:\"#333333\",cursor:\"default\",fontSize:\"12px\",padding:\"8px\",\nwhiteSpace:\"nowrap\"}},credits:{enabled:!0,text:\"Highcharts.com\",href:\"http://www.highcharts.com\",position:{align:\"right\",x:-10,verticalAlign:\"bottom\",y:-5},style:{cursor:\"pointer\",color:\"#909090\",fontSize:\"9px\"}}};var ba=E.plotOptions,S=ba.line;Cb();var Tb=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/,Ub=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,Vb=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/,ya=function(a){var b=[],c,\nd;(function(a){a&&a.stops?d=Ua(a.stops,function(a){return ya(a[1])}):(c=Tb.exec(a))?b=[z(c[1]),z(c[2]),z(c[3]),parseFloat(c[4],10)]:(c=Ub.exec(a))?b=[z(c[1],16),z(c[2],16),z(c[3],16),1]:(c=Vb.exec(a))&&(b=[z(c[1]),z(c[2]),z(c[3]),1])})(a);return{get:function(c){var f;d?(f=w(a),f.stops=[].concat(f.stops),p(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c===\"rgb\"?\"rgb(\"+b[0]+\",\"+b[1]+\",\"+b[2]+\")\":c===\"a\"?b[3]:\"rgba(\"+b.join(\",\")+\")\":a;return f},brighten:function(a){if(d)p(d,\nfunction(b){b.brighten(a)});else if(ha(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=z(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};P.prototype={init:function(a,b){this.element=b===\"span\"?Y(b):y.createElementNS(xa,b);this.renderer=a},opacity:1,animate:function(a,b,c){b=m(b,va,!0);bb(this);if(b){b=w(b,{});if(c)b.complete=c;kb(this,a,b)}else this.attr(a),c&&c()},colorGradient:function(a,b,c){var d=this.renderer,e,f,g,h,i,j,k,l,o,n,s=[];a.linearGradient?\nf=\"linearGradient\":a.radialGradient&&(f=\"radialGradient\");if(f){g=a[f];h=d.gradients;j=a.stops;o=c.radialReference;La(g)&&(a[f]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:\"userSpaceOnUse\"});f===\"radialGradient\"&&o&&!r(g.gradientUnits)&&(g=w(g,{cx:o[0]-o[2]/2+g.cx*o[2],cy:o[1]-o[2]/2+g.cy*o[2],r:g.r*o[2],gradientUnits:\"userSpaceOnUse\"}));for(n in g)n!==\"id\"&&s.push(n,g[n]);for(n in j)s.push(j[n]);s=s.join(\",\");h[s]?a=h[s].attr(\"id\"):(g.id=a=\"highcharts-\"+tb++,h[s]=i=d.createElement(f).attr(g).add(d.defs),\ni.stops=[],p(j,function(a){a[1].indexOf(\"rgba\")===0?(e=ya(a[1]),k=e.get(\"rgb\"),l=e.get(\"a\")):(k=a[1],l=1);a=d.createElement(\"stop\").attr({offset:a[0],\"stop-color\":k,\"stop-opacity\":l}).add(i);i.stops.push(a)}));c.setAttribute(b,\"url(\"+d.url+\"#\"+a+\")\")}},attr:function(a,b){var c,d,e=this.element,f,g=this,h;typeof a===\"string\"&&b!==t&&(c=a,a={},a[c]=b);if(typeof a===\"string\")g=(this[a+\"Getter\"]||this._defaultGetter).call(this,a,e);else{for(c in a){d=a[c];h=!1;this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&\n(f||(this.symbolAttr(a),f=!0),h=!0);if(this.rotation&&(c===\"x\"||c===\"y\"))this.doTransform=!0;h||(this[c+\"Setter\"]||this._defaultSetter).call(this,d,c,e);this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c)&&this.updateShadows(c,d)}if(this.doTransform)this.updateTransform(),this.doTransform=!1}return g},updateShadows:function(a,b){for(var c=this.shadows,d=c.length;d--;)c[d].setAttribute(a,a===\"height\"?v(b-(c[d].cutHeight||0),0):a===\"d\"?this.d:b)},addClass:function(a){var b=this.element,\nc=H(b,\"class\")||\"\";c.indexOf(a)===-1&&H(b,\"class\",c+\" \"+a);return this},symbolAttr:function(a){var b=this;p(\"x,y,r,start,end,width,height,innerR,anchorX,anchorY\".split(\",\"),function(c){b[c]=m(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr(\"clip-path\",a?\"url(\"+this.renderer.url+\"#\"+a.id+\")\":Q)},crisp:function(a){var b,c={},d,e=a.strokeWidth||this.strokeWidth||this.attr&&this.attr(\"stroke-width\")||0;d=u(e)%2/2;a.x=T(a.x||this.x||\n0)+d;a.y=T(a.y||this.y||0)+d;a.width=T((a.width||this.width||0)-2*d);a.height=T((a.height||this.height||0)-2*d);a.strokeWidth=e;for(b in a)this[b]!==a[b]&&(this[b]=c[b]=a[b]);return c},css:function(a){var b=this.styles,c={},d=this.element,e,f,g=\"\";e=!b;if(a&&a.color)a.fill=a.color;if(b)for(f in a)a[f]!==b[f]&&(c[f]=a[f],e=!0);if(e){e=this.textWidth=a&&a.width&&d.nodeName.toLowerCase()===\"text\"&&z(a.width);b&&(a=q(b,c));this.styles=a;e&&(fa||!aa&&this.renderer.forExport)&&delete a.width;if(Aa&&!aa)G(this.element,\na);else{b=function(a,b){return\"-\"+b.toLowerCase()};for(f in a)g+=f.replace(/([A-Z])/g,b)+\":\"+a[f]+\";\";H(d,\"style\",g)}e&&this.added&&this.renderer.buildText(this)}return this},on:function(a,b){var c=this,d=c.element;$a&&a===\"click\"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(wa.indexOf(\"Android\")===-1||Date.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d[\"on\"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=\na;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation,g=this.element;e&&(a+=this.attr(\"width\"),b+=this.attr(\"height\"));a=[\"translate(\"+a+\",\"+b+\")\"];e?a.push(\"rotate(90) scale(-1,1)\"):f&&a.push(\"rotate(\"+f+\" \"+(g.getAttribute(\"x\")||0)+\" \"+(g.getAttribute(\"y\")||0)+\")\");\n(r(c)||r(d))&&a.push(\"scale(\"+m(c,1)+\" \"+m(d,1)+\")\");a.length&&g.setAttribute(\"transform\",a.join(\" \"))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=a,this.alignByTranslate=b,!c||Fa(c))this.alignTo=d=c||\"renderer\",ja(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=m(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||\n0);g=(c.y||0)+(a.y||0);if(d===\"right\"||d===\"center\")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?\"translateX\":\"x\"]=u(f);if(e===\"bottom\"||e===\"middle\")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?\"translateY\":\"y\"]=u(g);this[this.placed?\"animate\":\"attr\"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d,e=this.rotation;c=this.element;var f=this.styles,g=e*Ca;d=this.textStr;var h;if(d===\"\"||Ob.test(d))h=\"num.\"+d.toString().length+\n(f?\"|\"+f.fontSize+\"|\"+f.fontFamily:\"\");h&&(a=b.cache[h]);if(!a){if(c.namespaceURI===xa||b.forExport){try{a=c.getBBox?q({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(i){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){c=a.width;d=a.height;if(Aa&&f&&f.fontSize===\"11px\"&&d.toPrecision(3)===\"16.9\")a.height=d=14;if(e)a.width=M(d*ea(g))+M(c*Z(g)),a.height=M(d*Z(g))+M(c*ea(g))}this.bBox=a;h&&(b.cache[h]=a)}return a},show:function(a){return a&&this.element.namespaceURI===\nxa?(this.element.removeAttribute(\"visibility\"),this):this.attr({visibility:a?\"inherit\":\"visible\"})},hide:function(){return this.attr({visibility:\"hidden\"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=this.element,f=this.zIndex,g,h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(f)c.handleZ=!0,f=z(f);if(c.handleZ){a=d.childNodes;\nfor(g=0;g<a.length;g++)if(b=a[g],c=H(b,\"zIndex\"),b!==e&&(z(c)>f||!r(f)&&r(c))){d.insertBefore(e,b);h=!0;break}}h||d.appendChild(e);this.added=!0;if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName===\"SPAN\"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;bb(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=\n0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);for(c&&p(c,function(b){a.safeRemoveChild(b)});d&&d.div.childNodes.length===0;)b=d.parentGroup,a.safeRemoveChild(d.div),delete d.div,d=b;a.alignTo&&ja(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,j,k;if(a){i=m(a.width,3);j=(a.opacity||0.15)/i;k=this.parentInverted?\"(-1,-1)\":\"(\"+m(a.offsetX,1)+\", \"+m(a.offsetY,1)+\")\";for(e=1;e<=i;e++){f=\ng.cloneNode(0);h=i*2+1-2*e;H(f,{isShadow:\"true\",stroke:a.color||\"black\",\"stroke-opacity\":j*e,\"stroke-width\":h,transform:\"translate\"+k,fill:Q});if(c)H(f,\"height\",v(H(f,\"height\")-h,0)),f.cutHeight=h;b?b.element.appendChild(f):g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this},xGetter:function(a){this.element.nodeName===\"circle\"&&(a={x:\"cx\",y:\"cy\"}[a]||a);return this._defaultGetter(a)},_defaultGetter:function(a){a=m(this[a],this.element?this.element.getAttribute(a):null,0);/^[0-9\\.]+$/.test(a)&&\n(a=parseFloat(a));return a},dSetter:function(a,b,c){a&&a.join&&(a=a.join(\" \"));/(NaN| {2}|^$)/.test(a)&&(a=\"M 0 0\");c.setAttribute(b,a);this[b]=a},dashstyleSetter:function(a){var b;if(a=a&&a.toLowerCase()){a=a.replace(\"shortdashdotdot\",\"3,1,1,1,1,1,\").replace(\"shortdashdot\",\"3,1,1,1\").replace(\"shortdot\",\"1,1,\").replace(\"shortdash\",\"3,1,\").replace(\"longdash\",\"8,3,\").replace(/dot/g,\"1,3,\").replace(\"dash\",\"4,3,\").replace(/,$/,\"\").split(\",\");for(b=a.length;b--;)a[b]=z(a[b])*this.element.getAttribute(\"stroke-width\");\na=a.join(\",\");this.element.setAttribute(\"stroke-dasharray\",a)}},alignSetter:function(a){this.element.setAttribute(\"text-anchor\",{left:\"start\",center:\"middle\",right:\"end\"}[a])},opacitySetter:function(a,b,c){this[b]=a;c.setAttribute(b,a)},\"stroke-widthSetter\":function(a,b,c){a===0&&(a=1.0E-5);this.strokeWidth=a;c.setAttribute(b,a)},titleSetter:function(a){var b=this.element.getElementsByTagName(\"title\")[0];b||(b=y.createElementNS(xa,\"title\"),this.element.appendChild(b));b.textContent=a},textSetter:function(a){if(a!==\nthis.textStr)delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this)},fillSetter:function(a,b,c){typeof a===\"string\"?c.setAttribute(b,a):a&&this.colorGradient(a,b,c)},zIndexSetter:function(a,b,c){c.setAttribute(b,a);this[b]=a},_defaultSetter:function(a,b,c){c.setAttribute(b,a)}};P.prototype.yGetter=P.prototype.xGetter;P.prototype.translateXSetter=P.prototype.translateYSetter=P.prototype.rotationSetter=P.prototype.verticalAlignSetter=P.prototype.scaleXSetter=P.prototype.scaleYSetter=\nfunction(a,b){this[b]=a;this.doTransform=!0};P.prototype.strokeSetter=P.prototype.fillSetter;var ta=function(){this.init.apply(this,arguments)};ta.prototype={Element:P,init:function(a,b,c,d,e){var f=location,g,d=this.createElement(\"svg\").attr({version:\"1.1\"}).css(this.getStyle(d));g=d.element;a.appendChild(g);a.innerHTML.indexOf(\"xmlns\")===-1&&H(g,\"xmlns\",xa);this.isSVG=!0;this.box=g;this.boxWrapper=d;this.alignedObjects=[];this.url=(Ta||ib)&&y.getElementsByTagName(\"base\").length?f.href.replace(/#.*?$/,\n\"\").replace(/([\\('\\)])/g,\"\\\\$1\").replace(/ /g,\"%20\"):\"\";this.createElement(\"desc\").add().element.appendChild(y.createTextNode(\"Created with Highcharts 4.0.1\"));this.defs=this.createElement(\"defs\").add();this.forExport=e;this.gradients={};this.cache={};this.setSize(b,c,!1);var h;if(Ta&&a.getBoundingClientRect)this.subPixelFix=b=function(){G(a,{left:0,top:0});h=a.getBoundingClientRect();G(a,{left:Ka(h.left)-h.left+\"px\",top:Ka(h.top)-h.top+\"px\"})},b(),K(I,\"resize\",b)},getStyle:function(a){return this.style=\nq({fontFamily:'\"Lucida Grande\", \"Lucida Sans Unicode\", Arial, Helvetica, sans-serif',fontSize:\"12px\"},a)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Oa(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&W(I,\"resize\",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},\nbuildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=m(a.textStr,\"\").toString(),f=e.indexOf(\"<\")!==-1,g=b.childNodes,h,i,j=H(b,\"x\"),k=a.styles,l=a.textWidth,o=k&&k.lineHeight,n=g.length,s=function(a){return o?z(o):c.fontMetrics(/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:k&&k.fontSize||c.style.fontSize||12).h};n--;)b.removeChild(g[n]);!f&&e.indexOf(\" \")===-1?b.appendChild(y.createTextNode(e)):(h=/<.*style=\"([^\"]+)\".*>/,i=/<.*href=\"(http[^\"]+)\".*>/,l&&!a.added&&this.box.appendChild(b),\ne=f?e.replace(/<(b|strong)>/g,'<span style=\"font-weight:bold\">').replace(/<(i|em)>/g,'<span style=\"font-style:italic\">').replace(/<a/g,\"<span\").replace(/<\\/(b|strong|i|em|a)>/g,\"</span>\").split(/<br.*?>/g):[e],e[e.length-1]===\"\"&&e.pop(),p(e,function(e,f){var g,n=0,e=e.replace(/<span/g,\"|||<span\").replace(/<\\/span>/g,\"</span>|||\");g=e.split(\"|||\");p(g,function(e){if(e!==\"\"||g.length===1){var o={},m=y.createElementNS(xa,\"tspan\"),p;h.test(e)&&(p=e.match(h)[1].replace(/(;| |^)color([ :])/,\"$1fill$2\"),\nH(m,\"style\",p));i.test(e)&&!d&&(H(m,\"onclick\",'location.href=\"'+e.match(i)[1]+'\"'),G(m,{cursor:\"pointer\"}));e=(e.replace(/<(.|\\n)*?>/g,\"\")||\" \").replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\");if(e!==\" \"){m.appendChild(y.createTextNode(e));if(n)o.dx=0;else if(f&&j!==null)o.x=j;H(m,o);!n&&f&&(!aa&&d&&G(m,{display:\"block\"}),H(m,\"dy\",s(m),ib&&m.offsetHeight));b.appendChild(m);n++;if(l)for(var e=e.replace(/([^\\^])-/g,\"$1- \").split(\" \"),o=e.length>1&&k.whiteSpace!==\"nowrap\",$,r,B=a._clipHeight,q=[],v=s(),t=\n1;o&&(e.length||q.length);)delete a.bBox,$=a.getBBox(),r=$.width,!aa&&c.forExport&&(r=c.measureSpanWidth(m.firstChild.data,a.styles)),$=r>l,!$||e.length===1?(e=q,q=[],e.length&&(t++,B&&t*v>B?(e=[\"...\"],a.attr(\"title\",a.textStr)):(m=y.createElementNS(xa,\"tspan\"),H(m,{dy:v,x:j}),p&&H(m,\"style\",p),b.appendChild(m),r>l&&(l=r)))):(m.removeChild(m.firstChild),q.unshift(e.pop())),e.length&&m.appendChild(y.createTextNode(e.join(\" \").replace(/- /g,\"-\")))}}})}))},button:function(a,b,c,d,e,f,g,h,i){var j=this.label(a,\nb,c,i,null,null,null,null,\"button\"),k=0,l,o,n,s,m,p,a={x1:0,y1:0,x2:0,y2:1},e=w({\"stroke-width\":1,stroke:\"#CCCCCC\",fill:{linearGradient:a,stops:[[0,\"#FEFEFE\"],[1,\"#F6F6F6\"]]},r:2,padding:5,style:{color:\"black\"}},e);n=e.style;delete e.style;f=w(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#FFF\"],[1,\"#ACF\"]]}},f);s=f.style;delete f.style;g=w(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#9BD\"],[1,\"#CDF\"]]}},g);m=g.style;delete g.style;h=w(e,{style:{color:\"#CCC\"}},h);p=h.style;delete h.style;\nK(j.element,Aa?\"mouseover\":\"mouseenter\",function(){k!==3&&j.attr(f).css(s)});K(j.element,Aa?\"mouseout\":\"mouseleave\",function(){k!==3&&(l=[e,f,g][k],o=[n,s,m][k],j.attr(l).css(o))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(m):a===3&&j.attr(h).css(p):j.attr(e).css(n)};return j.on(\"click\",function(){k!==3&&d.call(j)}).attr(e).css(q({cursor:\"default\"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=u(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=u(a[2])+b%2/2);return a},path:function(a){var b=\n{fill:Q};La(a)?b.d=a:ca(a)&&q(b,a);return this.createElement(\"path\").attr(b)},circle:function(a,b,c){a=ca(a)?a:{x:a,y:b,r:c};b=this.createElement(\"circle\");b.xSetter=function(a){this.element.setAttribute(\"cx\",a)};b.ySetter=function(a){this.element.setAttribute(\"cy\",a)};return b.attr(a)},arc:function(a,b,c,d,e,f){if(ca(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol(\"arc\",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){var e=ca(a)?a.r:\ne,g=this.createElement(\"rect\"),a=ca(a)?a:a===t?{}:{x:a,y:b,width:v(c,0),height:v(d,0)};if(f!==t)a.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;g.rSetter=function(a){H(this.element,{rx:a,ry:a})};return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[m(c,!0)?\"animate\":\"attr\"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement(\"g\");return r(a)?b.attr({\"class\":\"highcharts-\"+a}):b},image:function(a,b,c,d,e){var f=\n{preserveAspectRatio:Q};arguments.length>1&&q(f,{x:b,y:c,width:d,height:e});f=this.createElement(\"image\").attr(f);f.element.setAttributeNS?f.element.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",a):f.element.setAttribute(\"hc-svg-href\",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(u(b),u(c),d,e,f),i=/^url\\((.*?)\\)$/,j,k;if(h)g=this.path(h),q(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&q(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),\na.alignByTranslate||a.translate(u((d-b[0])/2),u((e-b[1])/2)))},j=a.match(i)[1],a=Kb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),Y(\"img\",{onload:function(){k(g,Kb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return[\"M\",a+c/2,b,\"C\",a+c+e,b,a+c+e,b+d,a+c/2,b+d,\"C\",a-e,b+d,a-e,b,a+c/2,b,\"Z\"]},square:function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c,b+d,a,b+d,\"Z\"]},triangle:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",\na+c,b+d,a,b+d,\"Z\"]},\"triangle-down\":function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c/2,b+d,\"Z\"]},diamond:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",a+c,b+d/2,a+c/2,b+d,a,b+d/2,\"Z\"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=Z(f),j=ea(f),k=Z(g),g=ea(g),e=e.end-f<ma?0:1;return[\"M\",a+c*i,b+c*j,\"A\",c,c,0,e,1,a+c*k,b+c*g,h?\"M\":\"L\",a+d*k,b+d*g,\"A\",d,d,0,e,0,a+d*i,b+d*j,h?\"\":\"Z\"]},callout:function(a,b,c,d,e){var f=C(e&&e.r||0,c,d),g=f+6,h=e&&e.anchorX,i=e&&e.anchorY,\ne=u(e.strokeWidth||0)%2/2;a+=e;b+=e;e=[\"M\",a+f,b,\"L\",a+c-f,b,\"C\",a+c,b,a+c,b,a+c,b+f,\"L\",a+c,b+d-f,\"C\",a+c,b+d,a+c,b+d,a+c-f,b+d,\"L\",a+f,b+d,\"C\",a,b+d,a,b+d,a,b+d-f,\"L\",a,b+f,\"C\",a,b,a,b,a+f,b];h&&h>c&&i>b+g&&i<b+d-g?e.splice(13,3,\"L\",a+c,i-6,a+c+6,i,a+c,i+6,a+c,b+d-f):h&&h<0&&i>b+g&&i<b+d-g?e.splice(33,3,\"L\",a,i+6,a-6,i,a,i-6,a,b+f):i&&i>d&&h>a+g&&h<a+c-g?e.splice(23,3,\"L\",h+6,b+d,h,b+d+6,h-6,b+d,a+f,b+d):i&&i<0&&h>a+g&&h<a+c-g&&e.splice(3,3,\"L\",h-6,b,h,b-6,h+6,b,c-f,b);return e}},clipRect:function(a,\nb,c,d){var e=\"highcharts-\"+tb++,f=this.createElement(\"clipPath\").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},text:function(a,b,c,d){var e=fa||!aa&&this.forExport,f={};if(d&&!this.forExport)return this.html(a,b,c);f.x=Math.round(b||0);if(c)f.y=Math.round(c);if(a||a===0)f.text=a;a=this.createElement(\"text\").attr(f);e&&a.css({position:\"absolute\"});if(!d)a.xSetter=function(a,b,c){var d=c.childNodes,e,f;for(f=1;f<d.length;f++)e=d[f],e.getAttribute(\"x\")===c.getAttribute(\"x\")&&\ne.setAttribute(\"x\",a);c.setAttribute(b,a)};return a},fontMetrics:function(a){var a=a||this.style.fontSize,a=/px/.test(a)?z(a):/em/.test(a)?parseFloat(a)*12:12,a=a<24?a+4:u(a*1.2),b=u(a*0.8);return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a,b;a=s.element.style;J=(Va===void 0||wb===void 0||n.styles.textAlign)&&s.textStr&&s.getBBox();n.width=(Va||J.width||0)+2*x+v;n.height=(wb||J.height||0)+2*x;na=x+o.fontMetrics(a&&a.fontSize).b;if(z){if(!m)a=u(-L*x),b=h?-na:0,n.box=m=d?o.symbol(d,\na,b,n.width,n.height,B):o.rect(a,b,n.width,n.height,0,B[Pb]),m.attr(\"fill\",Q).add(n);m.isImg||m.attr(q({width:u(n.width),height:u(n.height)},B));B=null}}function k(){var a=n.styles,a=a&&a.textAlign,b=v+x*(1-L),c;c=h?0:na;if(r(Va)&&J&&(a===\"center\"||a===\"right\"))b+={center:0.5,right:1}[a]*(Va-J.width);if(b!==s.x||c!==s.y)s.attr(\"x\",b),c!==t&&s.attr(\"y\",c);s.x=b;s.y=c}function l(a,b){m?m.attr(a,b):B[a]=b}var o=this,n=o.g(i),s=o.text(\"\",0,0,g).attr({zIndex:1}),m,J,L=0,x=3,v=0,Va,wb,xb,yb,y=0,B={},na,\nz;n.onAdd=function(){s.add(n);n.attr({text:a||\"\",x:b,y:c});m&&r(e)&&n.attr({anchorX:e,anchorY:f})};n.widthSetter=function(a){Va=a};n.heightSetter=function(a){wb=a};n.paddingSetter=function(a){r(a)&&a!==x&&(x=a,k())};n.paddingLeftSetter=function(a){r(a)&&a!==v&&(v=a,k())};n.alignSetter=function(a){L={left:0,center:0.5,right:1}[a]};n.textSetter=function(a){a!==t&&s.textSetter(a);j();k()};n[\"stroke-widthSetter\"]=function(a,b){a&&(z=!0);y=a%2/2;l(b,a)};n.strokeSetter=n.fillSetter=n.rSetter=function(a,\nb){b===\"fill\"&&a&&(z=!0);l(b,a)};n.anchorXSetter=function(a,b){e=a;l(b,a+y-xb)};n.anchorYSetter=function(a,b){f=a;l(b,a-yb)};n.xSetter=function(a){n.x=a;L&&(a-=L*((Va||J.width)+x));xb=u(a);n.attr(\"translateX\",xb)};n.ySetter=function(a){yb=n.y=u(a);n.attr(\"translateY\",yb)};var A=n.css;return q(n,{css:function(a){if(a){var b={},a=w(a);p(\"fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow\".split(\",\"),function(c){a[c]!==t&&(b[c]=a[c],delete a[c])});s.css(b)}return A.call(n,\na)},getBBox:function(){return{width:J.width+2*x,height:J.height+2*x,x:J.x-x,y:J.y-x}},shadow:function(a){m&&m.shadow(a);return n},destroy:function(){W(n.element,\"mouseenter\");W(n.element,\"mouseleave\");s&&(s=s.destroy());m&&(m=m.destroy());P.prototype.destroy.call(n);n=o=j=k=l=null}})}};Za=ta;q(P.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&b.tagName===\"SPAN\"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=q(this.styles,a);G(this.element,a);return this},htmlGetBBox:function(){var a=\nthis.element,b=this.bBox;if(!b){if(a.nodeName===\"text\")a.style.position=\"absolute\";b=this.bBox={x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}return b},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||\"left\",h={left:0,center:0.5,right:1}[g],i=this.shadows;G(b,{marginLeft:c,marginTop:d});i&&p(i,function(a){G(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&\np(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName===\"SPAN\"){var j=this.rotation,k,l=z(this.textWidth),o=[j,g,b.innerHTML,this.textWidth].join(\",\");if(o!==this.cTT){k=a.fontMetrics(b.style.fontSize).b;r(j)&&this.setSpanRotation(j,h,k);i=m(this.elemWidth,b.offsetWidth);if(i>l&&/[ \\-]/.test(b.textContent||b.innerText))G(b,{width:l+\"px\",display:\"block\",whiteSpace:\"normal\"}),i=l;this.getSpanCorrection(i,k,h,j,g)}G(b,{left:e+(this.xCorr||0)+\"px\",top:f+(this.yCorr||0)+\"px\"});if(ib)k=b.offsetHeight;\nthis.cTT=o}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=Aa?\"-ms-transform\":ib?\"-webkit-transform\":Ta?\"MozTransform\":Ib?\"-o-transform\":\"\";d[e]=d.transform=\"rotate(\"+a+\"deg)\";d[e+(Ta?\"Origin\":\"-origin\")]=d.transformOrigin=b*100+\"% \"+c+\"px\";G(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});q(ta.prototype,{html:function(a,b,c){var d=this.createElement(\"span\"),e=d.element,f=d.renderer;d.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;\ne.innerHTML=this.textStr=a};d.xSetter=d.ySetter=d.alignSetter=d.rotationSetter=function(a,b){b===\"align\"&&(b=\"textAlign\");d[b]=a;d.htmlUpdateTransform()};d.attr({text:a,x:u(b),y:u(c)}).css({position:\"absolute\",whiteSpace:\"nowrap\",fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});d.css=d.htmlCss;if(f.isSVG)d.add=function(a){var b,c=f.box.parentNode,j=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)j.push(a),a=a.parentGroup;p(j.reverse(),function(a){var d;b=a.div=a.div||Y(Ja,{className:H(a.element,\n\"class\")},{position:\"absolute\",left:(a.translateX||0)+\"px\",top:(a.translateY||0)+\"px\"},b||c);d=b.style;q(a,{translateXSetter:function(b,c){d.left=b+\"px\";a[c]=b;a.doTransform=!0},translateYSetter:function(b,c){d.top=b+\"px\";a[c]=b;a.doTransform=!0},visibilitySetter:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(e);d.added=!0;d.alignOnAdd&&d.htmlUpdateTransform();return d};return d}});var X;if(!aa&&!fa){R.VMLElement=X={init:function(a,b){var c=[\"<\",b,' filled=\"f\" stroked=\"f\"'],d=[\"position: \",\"absolute\",\n\";\"],e=b===Ja;(b===\"shape\"||e)&&d.push(\"left:0;top:0;width:1px;height:1px;\");d.push(\"visibility: \",e?\"hidden\":\"visible\");c.push(' style=\"',d.join(\"\"),'\"/>');if(b)c=e||b===\"span\"||b===\"img\"?c.join(\"\"):a.prepVML(c),this.element=Y(c);this.renderer=a},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();return this},updateTransform:P.prototype.htmlUpdateTransform,\nsetSpanRotation:function(){var a=this.rotation,b=Z(a*Ca),c=ea(a*Ca);G(this.element,{filter:a?[\"progid:DXImageTransform.Microsoft.Matrix(M11=\",b,\", M12=\",-c,\", M21=\",c,\", M22=\",b,\", sizingMethod='auto expand')\"].join(\"\"):Q})},getSpanCorrection:function(a,b,c,d,e){var f=d?Z(d*Ca):1,g=d?ea(d*Ca):0,h=m(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!==\"left\"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=\nh*c*(g<0?-1:1)),G(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(ha(a[b]))c[b]=u(a[b]*10)-5;else if(a[b]===\"Z\")c[b]=\"x\";else if(c[b]=a[b],a.isArc&&(a[b]===\"wa\"||a[b]===\"at\"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(\" \")||\"x\"},clip:function(a){var b=this,c;a?(c=a.members,ja(c,b),c.push(b),b.destroyClip=function(){ja(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:hb?\"inherit\":\"rect(auto)\"});\nreturn b.css(a)},css:P.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Pa(a)},destroy:function(){this.destroyClip&&this.destroyClip();return P.prototype.destroy.apply(this)},on:function(a,b){this.element[\"on\"+a]=function(){var a=I.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=z(a[c-2])-10*b;return a.join(\" \")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,\nl,o,n,s;k&&typeof k.value!==\"string\"&&(k=\"x\");o=k;if(a){n=m(a.width,3);s=(a.opacity||0.15)/n;for(e=1;e<=3;e++){l=n*2+1-2*e;c&&(o=this.cutOffPath(k.value,l+0.5));j=['<shape isShadow=\"true\" strokeweight=\"',l,'\" filled=\"false\" path=\"',o,'\" coordsize=\"10 10\" style=\"',f.style.cssText,'\" />'];h=Y(g.prepVML(j),null,{left:z(i.left)+m(a.offsetX,1),top:z(i.top)+m(a.offsetY,1)});if(c)h.cutOff=l+1;j=['<stroke color=\"',a.color||\"black\",'\" opacity=\"',s*e,'\"/>'];Y(g.prepVML(j),null,null,h);b?b.element.appendChild(h):\nf.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this},updateShadows:sa,setAttr:function(a,b){hb?this.element[a]=b:this.element.setAttribute(a,b)},classSetter:function(a){this.element.className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName(\"stroke\")[0]||Y(this.renderer.prepVML([\"<stroke/>\"]),null,null,c))[b]=a||\"solid\";this[b]=a},dSetter:function(a,b,c){var d=this.shadows,a=a||[];this.d=a.join(\" \");c.path=a=this.pathToVML(a);if(d)for(c=d.length;c--;)d[c].path=d[c].cutOff?\nthis.cutOffPath(a,d[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var d=c.nodeName;if(d===\"SPAN\")c.style.color=a;else if(d!==\"IMG\")c.filled=a!==Q,this.setAttr(\"fillcolor\",this.renderer.color(a,c,b,this))},opacitySetter:sa,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-u(ea(a*Ca)+1)+\"px\";c.top=u(Z(a*Ca))+\"px\"},strokeSetter:function(a,b,c){this.setAttr(\"strokecolor\",this.renderer.color(a,c,b))},\"stroke-widthSetter\":function(a,b,c){c.stroked=!!a;this[b]=a;ha(a)&&(a+=\"px\");\nthis.setAttr(\"strokeweight\",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){a===\"inherit\"&&(a=\"visible\");this.shadows&&p(this.shadows,function(c){c.style[b]=a});c.nodeName===\"DIV\"&&(a=a===\"hidden\"?\"-999em\":0,hb||(c.style[b]=a?\"visible\":\"hidden\"),b=\"top\");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;b===\"x\"?b=\"left\":b===\"y\"&&(b=\"top\");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}};X=ka(P,X);X.prototype.ySetter=\nX.prototype.widthSetter=X.prototype.heightSetter=X.prototype.xSetter;var ga={Element:X,isIE8:wa.indexOf(\"MSIE 8.0\")>-1,init:function(a,b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ja).css(q(this.getStyle(d),{position:\"relative\"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!y.namespaces.hcv){y.namespaces.add(\"hcv\",\"urn:schemas-microsoft-com:vml\");try{y.createStyleSheet().cssText=\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \"}catch(f){y.styleSheets[0].cssText+=\n\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \"}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=ca(a);return q(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c===\"shape\"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:\"rect(\"+u(a?e:d)+\"px,\"+u(a?\nf:b)+\"px,\"+u(a?b:f)+\"px,\"+u(a?d:e)+\"px)\"};!a&&hb&&c===\"DIV\"&&q(d,{width:b+\"px\",height:f+\"px\"});return d},updateClipping:function(){p(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=Q;a&&a.linearGradient?i=\"gradient\":a&&a.radialGradient&&(i=\"pattern\");if(i){var k,l,o=a.linearGradient||a.radialGradient,n,s,m,J,L,x=\"\",a=a.stops,r,v=[],q=function(){h=['<fill colors=\"'+v.join(\",\")+'\" opacity=\"',m,'\" o:opacity2=\"',s,'\" type=\"',i,'\" ',x,'focus=\"100%\" method=\"any\" />'];\nY(e.prepVML(h),null,null,b)};n=a[0];r=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);r[0]<1&&a.push([1,r[1]]);p(a,function(a,b){g.test(a[1])?(f=ya(a[1]),k=f.get(\"rgb\"),l=f.get(\"a\")):(k=a[1],l=1);v.push(a[0]*100+\"% \"+k);b?(m=l,J=k):(s=l,L=k)});if(c===\"fill\")if(i===\"gradient\")c=o.x1||o[0]||0,a=o.y1||o[1]||0,n=o.x2||o[2]||0,o=o.y2||o[3]||0,x='angle=\"'+(90-U.atan((o-a)/(n-c))*180/ma)+'\"',q();else{var j=o.r,t=j*2,u=j*2,y=o.cx,B=o.cy,na=b.radialReference,w,j=function(){na&&(w=d.getBBox(),y+=(na[0]-w.x)/w.width-\n0.5,B+=(na[1]-w.y)/w.height-0.5,t*=na[2]/w.width,u*=na[2]/w.height);x='src=\"'+E.global.VMLRadialGradientURL+'\" size=\"'+t+\",\"+u+'\" origin=\"0.5,0.5\" position=\"'+y+\",\"+B+'\" color2=\"'+L+'\" ';q()};d.added?j():d.onAdd=j;j=J}else j=k}else if(g.test(a)&&b.tagName!==\"IMG\")f=ya(a),h=[\"<\",c,' opacity=\"',f.get(\"a\"),'\"/>'],Y(this.prepVML(h),null,null,b),j=f.get(\"rgb\");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type=\"solid\";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join(\"\");b?\n(a=a.replace(\"/>\",' xmlns=\"urn:schemas-microsoft-com:vml\" />'),a=a.indexOf('style=\"')===-1?a.replace(\"/>\",' style=\"display:inline-block;behavior:url(#default#VML);\" />'):a.replace('style=\"','style=\"display:inline-block;behavior:url(#default#VML);')):a=a.replace(\"<\",\"<hcv:\");return a},text:ta.prototype.html,path:function(a){var b={coordsize:\"10 10\"};La(a)?b.d=a:ca(a)&&q(b,a);return this.createElement(\"shape\").attr(b)},circle:function(a,b,c){var d=this.symbol(\"circle\");if(ca(a))c=a.r,b=a.y,a=a.x;d.isCircle=\n!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:\"highcharts-\"+a,\"class\":\"highcharts-\"+a});return this.createElement(Ja).attr(b)},image:function(a,b,c,d,e){var f=this.createElement(\"img\").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a===\"rect\"?this.symbol(a):ta.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName===\"IMG\"&&a.style;G(a,{flip:\"x\",left:z(d.width)-(e?z(e.top):\n1),top:z(d.height)-(e?z(e.left):1),rotation:-90});p(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=Z(f),i=ea(f),j=Z(g),k=ea(g);if(g-f===0)return[\"x\"];f=[\"wa\",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push(\"e\",\"M\",a,b);f.push(\"at\",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,\"x\",\"e\");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return[\"wa\",a,b,a+c,b+d,a+c,b+d/2,a+\nc,b+d/2,\"e\"]},rect:function(a,b,c,d,e){return ta.prototype.symbols[!r(e)||!e.r?\"square\":\"callout\"].call(0,a,b,c,d,e)}}};R.VMLRenderer=X=function(){this.init.apply(this,arguments)};X.prototype=w(ta.prototype,ga);Za=X}ta.prototype.measureSpanWidth=function(a,b){var c=y.createElement(\"span\"),d;d=y.createTextNode(a);c.appendChild(d);G(c,b);this.box.appendChild(c);d=c.offsetWidth;Pa(c);return d};var Lb;if(fa)R.CanVGRenderer=X=function(){xa=\"http://www.w3.org/1999/xhtml\"},X.prototype.symbols={},Lb=function(){function a(){var a=\nb.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Qb(d,a);b.push(c)}}}(),Za=X;Sa.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=a.names,g=this.pos,h=b.labels,i=a.tickPositions,d=d&&e&&!h.step&&!h.staggerLines&&!h.rotation&&c.plotWidth/i.length||!d&&(c.margin[3]||c.chartWidth*0.33),j=g===i[0],k=g===i[i.length-1],l,f=e?m(e[g],f[g],g):g,e=this.label,o=i.info;a.isDatetimeAxis&&o&&(l=b.dateTimeLabelFormats[o.higherRanks[g]||\no.unitName]);this.isFirst=j;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:j,isLast:k,dateTimeLabelFormat:l,value:a.isLog?da(ia(f)):f});g=d&&{width:v(1,u(d-2*(h.padding||10)))+\"px\"};g=q(g,h.style);if(r(e))e&&e.attr({text:b}).css(g);else{l={align:a.labelAlign};if(ha(h.rotation))l.rotation=h.rotation;if(d&&h.ellipsis)l._clipHeight=a.len/i.length;this.label=r(b)&&h.enabled?c.renderer.text(b,0,0,h.useHTML).attr(l).css(g).add(a.labelGroup):null}},getLabelSize:function(){var a=this.label,\nb=this.axis;return a?a.getBBox()[b.horiz?\"height\":\"width\"]:0},getLabelSides:function(){var a=this.label.getBBox(),b=this.axis,c=b.horiz,d=b.options.labels,a=c?a.width:a.height,b=c?d.x-a*{left:0,center:0.5,right:1}[b.labelAlign]:0;return[b,c?a+b:a]},handleOverflow:function(a,b){var c=!0,d=this.axis,e=this.isFirst,f=this.isLast,g=d.horiz?b.x:b.y,h=d.reversed,i=d.tickPositions,j=this.getLabelSides(),k=j[0],j=j[1],l,o,n,s=this.label.line||0;l=d.labelEdge;o=d.justifyLabels&&(e||f);l[s]===t||g+k>l[s]?l[s]=\ng+j:o||(c=!1);if(o){l=(o=d.justifyToPlot)?d.pos:0;o=o?l+d.len:d.chart.chartWidth;do a+=e?1:-1,n=d.ticks[i[a]];while(i[a]&&(!n||n.label.line!==s));d=n&&n.label.xy&&n.label.xy.x+n.getLabelSides()[e?0:1];e&&!h||f&&h?g+k<l&&(g=l-k,n&&g+j>d&&(c=!1)):g+j>o&&(g=o-j,n&&g+k<d&&(c=!1));b.x=g}return c},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-\ne.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,l=i.staggerLines,o=i.chart.renderer.fontMetrics(e.style.fontSize).b,n=e.rotation,a=a+e.x-(f&&d?f*j*(k?-1:1):0),b=b+e.y-(f&&!d?f*j*(k?1:-1):0);n&&i.side===2&&(b-=o-o*Z(n*Ca));!r(e.y)&&!n&&(b+=o-c.getBBox().height/2);if(l)c.line=g/(h||1)%l,b+=c.line*(i.labelOffset/l);return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine([\"M\",\na,b,\"L\",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,j=this.pos,k=e.labels,l=this.gridLine,o=h?h+\"Grid\":\"grid\",n=h?h+\"Tick\":\"tick\",s=e[o+\"LineWidth\"],p=e[o+\"LineColor\"],J=e[o+\"LineDashStyle\"],L=e[n+\"Length\"],o=e[n+\"Width\"]||0,x=e[n+\"Color\"],r=e[n+\"Position\"],n=this.mark,v=k.step,q=!0,u=d.tickmarkOffset,w=this.getPosition(g,j,u,b),y=w.x,w=w.y,B=g&&y===d.pos+d.len||!g&&w===d.pos?-1:1;this.isActive=!0;if(s){j=d.getPlotLinePath(j+\nu,s*B,b,!0);if(l===t){l={stroke:p,\"stroke-width\":s};if(J)l.dashstyle=J;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=s?f.path(j).attr(l).add(d.gridGroup):null}if(!b&&l&&j)l[this.isNew?\"attr\":\"animate\"]({d:j,opacity:c})}if(o&&L)r===\"inside\"&&(L=-L),d.opposite&&(L=-L),h=this.getMarkPath(y,w,L,o*B,g,f),n?n.animate({d:h,opacity:c}):this.mark=f.path(h).attr({stroke:x,\"stroke-width\":o,opacity:c}).add(d.axisGroup);if(i&&!isNaN(y))i.xy=w=this.getLabelPosition(y,w,i,g,k,u,a,v),this.isFirst&&!this.isLast&&\n!m(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!m(e.showLastLabel,1)?q=!1:!d.isRadial&&!k.step&&!k.rotation&&!b&&c!==0&&(q=this.handleOverflow(a,w)),v&&a%v&&(q=!1),q&&!isNaN(w.y)?(w.opacity=c,i[this.isNew?\"attr\":\"animate\"](w),this.isNew=!1):i.attr(\"y\",-9999)},destroy:function(){Oa(this,this.axis)}};R.PlotLineOrBand=function(a,b){this.axis=a;if(b)this.options=b,this.id=b.id};R.PlotLineOrBand.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,\ng=a.label,h=e.width,i=e.to,j=e.from,k=r(j)&&r(i),l=e.value,o=e.dashStyle,n=a.svgElem,s=[],p,J=e.color,L=e.zIndex,x=e.events,q={},t=b.chart.renderer;b.isLog&&(j=za(j),i=za(i),l=za(l));if(h){if(s=b.getPlotLinePath(l,h),q={stroke:J,\"stroke-width\":h},o)q.dashstyle=o}else if(k){j=v(j,b.min-d);i=C(i,b.max+d);s=b.getPlotBandPath(j,i,e);if(J)q.fill=J;if(e.borderWidth)q.stroke=e.borderColor,q[\"stroke-width\"]=e.borderWidth}else return;if(r(L))q.zIndex=L;if(n)if(s)n.animate({d:s},null,n.onGetPath);else{if(n.hide(),\nn.onGetPath=function(){n.show()},g)a.label=g=g.destroy()}else if(s&&s.length&&(a.svgElem=n=t.path(s).attr(q).add(),x))for(p in d=function(b){n.on(b,function(c){x[b].apply(a,[c])})},x)d(p);if(f&&r(f.text)&&s&&s.length&&b.width>0&&b.height>0){f=w({align:c&&k&&\"center\",x:c?!k&&4:10,verticalAlign:!c&&k&&\"middle\",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g){q={align:f.textAlign||f.align,rotation:f.rotation};if(r(L))q.zIndex=L;a.label=g=t.text(f.text,0,0,f.useHTML).attr(q).css(f.style).add()}b=[s[1],\ns[4],m(s[6],s[1])];s=[s[2],s[5],m(s[7],s[2])];c=Na(b);k=Na(s);g.align(f,!1,{x:c,y:k,width:Ba(b)-c,height:Ba(s)-k});g.show()}else g&&g.hide();return a},destroy:function(){ja(this.axis.plotLinesAndBands,this);delete this.axis;Oa(this)}};la.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:\"%H:%M:%S.%L\",second:\"%H:%M:%S\",minute:\"%H:%M\",hour:\"%H:%M\",day:\"%e. %b\",week:\"%e. %b\",month:\"%b '%y\",year:\"%Y\"},endOnTick:!1,gridLineColor:\"#C0C0C0\",labels:N,lineColor:\"#C0D0E0\",lineWidth:1,minPadding:0.01,\nmaxPadding:0.01,minorGridLineColor:\"#E0E0E0\",minorGridLineWidth:1,minorTickColor:\"#A0A0A0\",minorTickLength:2,minorTickPosition:\"outside\",startOfWeek:1,startOnTick:!1,tickColor:\"#C0D0E0\",tickLength:10,tickmarkPlacement:\"between\",tickPixelInterval:100,tickPosition:\"outside\",tickWidth:1,title:{align:\"middle\",style:{color:\"#707070\"}},type:\"linear\"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,\ntickWidth:0,title:{rotation:270,text:\"Values\"},stackLabels:{enabled:!1,formatter:function(){return Ga(this.total,-1)},style:N.style}},defaultLeftAxisOptions:{labels:{x:-15,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:20},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-15},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?\"xAxis\":\"yAxis\";this.opposite=\nb.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e===\"category\";this.names=[];this.isLog=e===\"logarithmic\";this.isDatetimeAxis=e===\"datetime\";this.isLinked=r(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement===\n\"between\"?0.5:0;this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.min=this.max=null;this.crosshair=m(d.crosshair,qa(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;Da(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length,0,this):a.axes.push(this),a[this.coll].push(this));\nthis.series=this.series||[];if(a.inverted&&c&&this.reversed===t)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)K(this,f,d[f]);if(this.isLog)this.val2lin=za,this.lin2val=ia},setOptions:function(a){this.options=w(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],w(E[this.coll],a))},defaultLabelFormatter:function(){var a=\nthis.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=E.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ia(h,this);else if(c)g=b;else if(d)g=cb(d,b);else if(f&&a>=1E3)for(;f--&&g===t;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Ga(b/c,-1)+e[f]);g===t&&(g=M(b)>=1E4?Ga(b,0):Ga(b,-1,t,\"\"));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.buildStacks&&a.buildStacks();p(a.series,function(c){if(c.visible||\n!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=C(m(a.dataMin,d[0]),Na(d)),a.dataMax=v(m(a.dataMax,d[0]),Ba(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(r(c)&&r(e))a.dataMin=C(m(a.dataMin,c),c),a.dataMax=v(m(a.dataMax,e),e);if(r(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMax<d)a.dataMax=d,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e,f){var g=\n1,h=0,i=d?this.oldTransA:this.transA,d=d?this.oldMin:this.min,j=this.minPixelPadding,e=(this.options.ordinal||this.isLog&&e)&&this.lin2val;if(!i)i=this.transA;if(c)g*=-1,h=this.len;this.reversed&&(g*=-1,h-=g*(this.sector||this.len));b?(a=a*g+h,a-=j,a=a/i+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),f===\"between\"&&(f=0.5),a=g*(a-d)*i+h+g*j+(ha(f)?i*f*this.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-\n(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,e){var f=this.chart,g=this.left,h=this.top,i,j,k=c&&f.oldChartHeight||f.chartHeight,l=c&&f.oldChartWidth||f.chartWidth,o;i=this.transB;e=m(e,this.translate(a,null,null,c));a=c=u(e+i);i=j=u(k-e-i);if(isNaN(e))o=!0;else if(this.horiz){if(i=h,j=k-this.bottom,a<g||a>g+this.width)o=!0}else if(a=g,c=l-this.right,i<h||i>h+this.height)o=!0;return o&&!d?null:f.renderer.crispLine([\"M\",a,i,\"L\",c,j],b||1)},getLinearTickPositions:function(a,\nb,c){var d,e=da(T(b/a)*a),f=da(Ka(c/a)*a),g=[];if(b===c&&ha(b))return[b];for(b=e;b<=f;){g.push(b);b=da(b+a);if(b===d)break;d=b}return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a<e;a++)d=d.concat(this.getLogTickPositions(c,b[a-1],b[a],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval===\"auto\")d=d.concat(this.getTimeTicks(this.normalizeTimeTickInterval(c),this.min,this.max,a.startOfWeek)),d[0]<this.min&&\nd.shift();else for(b=this.min+(b[0]-this.min)%c;b<=this.max;b+=c)d.push(b);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===t&&!this.isLog)r(a.min)||r(a.max)?this.minRange=null:(p(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===t||h<f)f=h}),this.minRange=C(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=\n(k-c+b)/2;d=[b-d,m(a.min,b-d)];if(e)d[2]=this.dataMin;b=Ba(d);c=[b+k,m(a.max,b+k)];if(e)c[2]=this.dataMax;c=Na(c);c-b<k&&(d[0]=c-k,d[1]=m(a.min,c-k),b=Ba(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this,c=b.max-b.min,d=b.axisPointRange||0,e,f=0,g=0,h=b.linkedParent,i=!!b.categories,j=b.transA;if(b.isXAxis||i||d)h?(f=h.minPointOffset,g=h.pointRangePadding):p(b.series,function(a){var h=i?1:b.isXAxis?a.pointRange:b.axisPointRange||0,j=a.options.pointPlacement,n=a.closestPointRange;\nh>c&&(h=0);d=v(d,h);f=v(f,Fa(j)?0:h/2);g=v(g,j===\"on\"?0:h);!a.noSharedTooltip&&r(n)&&(e=r(e)?C(e,n):n)}),h=b.ordinalSlope&&e?b.ordinalSlope/e:1,b.minPointOffset=f*=h,b.pointRangePadding=g*=h,b.pointRange=C(d,c),b.closestPointRange=e;if(a)b.oldTransA=j;b.translationSlope=b.transA=j=b.len/(c+g||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=j*f},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding,\nk=d.minPadding,l=d.tickInterval,o=d.minTickInterval,n=d.tickPixelInterval,s,$=b.categories;h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=m(c.min,c.dataMin),b.max=m(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ra(11,1)):(b.min=m(b.userMin,d.min,b.dataMin),b.max=m(b.userMax,d.max,b.dataMax));if(e)!a&&C(b.min,m(b.dataMin,b.min))<=0&&ra(10,1),b.min=da(za(b.min)),b.max=da(za(b.max));if(b.range&&r(b.max))b.userMin=b.min=v(b.min,b.max-b.range),b.userMax=b.max,b.range=\nnull;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!$&&!b.axisPointRange&&!b.usePercentage&&!h&&r(b.min)&&r(b.max)&&(c=b.max-b.min)){if(!r(d.min)&&!r(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!r(d.max)&&!r(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}if(ha(d.floor))b.min=v(b.min,d.floor);if(ha(d.ceiling))b.max=C(b.max,d.ceiling);b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&n===b.linkedParent.options.tickPixelInterval?b.tickInterval=\nb.linkedParent.tickInterval:(b.tickInterval=m(l,$?1:(b.max-b.min)*n/v(b.len,n)),!r(l)&&b.len<n&&!this.isRadial&&!this.isLog&&!$&&d.startOnTick&&d.endOnTick&&(s=!0,b.tickInterval/=4));g&&!a&&p(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange)b.tickInterval=v(b.pointRange,b.tickInterval);if(!l&&b.tickInterval<\no)b.tickInterval=o;if(!f&&!e&&!l)b.tickInterval=nb(b.tickInterval,null,mb(b.tickInterval),d);b.minorTickInterval=d.minorTickInterval===\"auto\"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=a=d.tickPositions?[].concat(d.tickPositions):i&&i.apply(b,[b.min,b.max]);if(!a)!b.ordinalPositions&&(b.max-b.min)/b.tickInterval>v(2*b.len,200)&&ra(19,!0),a=f?b.getTimeTicks(b.normalizeTimeTickInterval(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,\n!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),s&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h<f&&a.pop(),a.length===1&&(d=M(b.max)>1E13?1:0.001,b.min-=d,b.max+=d)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.coll,this.pos,this.len].join(\"-\");if(!this.isLinked&&\n!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1&&this.min!==t){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(da(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(r(d)&&a!==d)this.isDirty=\n!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!==this.oldAxisLength;p(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax){if(!this.isXAxis)for(b in a)for(c in a[b])a[b][c].total=null,a[b][c].cum=0;this.forceRedraw=!1;this.getSeriesExtremes();this.setTickPositions();this.oldUserMin=\nthis.userMin;this.oldUserMax=this.userMax;if(!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==this.oldMax}else if(!this.isXAxis){if(this.oldStacks)a=this.stacks=this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}this.setMaxTicks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=m(c,!0),e=q(e,{min:a,max:b});D(f,\"setExtremes\",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;f.isDirtyExtremes=!0;c&&g.redraw(d)})},zoom:function(a,b){var c=this.dataMin,d=this.dataMax,\ne=this.options;this.allowZoomOutside||(r(c)&&a<=C(c,m(e.min,c))&&(a=t),r(d)&&b>=v(d,m(e.max,d))&&(b=t));this.displayBtn=a!==t||b!==t;this.setExtremes(a,b,!1,t,{trigger:\"zoom\"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=this.horiz,e=m(b.width,a.plotWidth-c+(b.offsetRight||0)),f=m(b.height,a.plotHeight),g=m(b.top,a.plotTop),b=m(b.left,a.plotLeft+c),c=/%$/;c.test(f)&&(f=parseInt(f,10)/100*a.plotHeight);c.test(g)&&(g=parseInt(g,10)/100*a.plotHeight+a.plotTop);\nthis.left=b;this.top=g;this.width=e;this.height=f;this.bottom=a.chartHeight-f-g;this.right=a.chartWidth-e-b;this.len=v(d?e:f,0);this.pos=d?b:g},getExtremes:function(){var a=this.isLog;return{min:a?da(ia(this.min)):this.min,max:a?da(ia(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ia(this.min):this.min,b=b?ia(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=\n(m(a,0)-this.side*90+720)%360;return a>15&&a<165?\"right\":a>195&&a<345?\"left\":\"center\"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,o=0,n=d.title,s=d.labels,$=0,J=b.axisOffset,L=b.clipOffset,x=[-1,1,1,-1][h],q,u=1,w=m(s.maxStaggerLines,5),y,z,A,B,na=h===2?c.fontMetrics(s.style.fontSize).b:0;a.hasData=j=a.hasVisibleSeries||r(a.min)&&r(a.max)&&!!e;a.showAxis=b=j||m(d.showEmpty,!0);a.staggerLines=\na.horiz&&s.staggerLines;if(!a.axisGroup)a.gridGroup=c.g(\"grid\").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g(\"axis\").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g(\"axis-labels\").attr({zIndex:s.zIndex||7}).addClass(\"highcharts-\"+a.coll.toLowerCase()+\"-labels\").add();if(j||a.isLinked){a.labelAlign=m(s.align||a.autoLabelAlign(s.rotation));p(e,function(b){f[b]?f[b].addLabel():f[b]=new Sa(a,b)});if(a.horiz&&!a.staggerLines&&w&&!s.rotation){for(q=a.reversed?[].concat(e).reverse():e;u<w;){j=\n[];y=!1;for(s=0;s<q.length;s++)z=q[s],A=(A=f[z].label&&f[z].label.getBBox())?A.width:0,B=s%u,A&&(z=a.translate(z),j[B]!==t&&z<j[B]&&(y=!0),j[B]=z+A);if(y)u++;else break}if(u>1)a.staggerLines=u}p(e,function(b){if(h===0||h===2||{1:\"left\",3:\"right\"}[h]===a.labelAlign)$=v(f[b].getLabelSize(),$)});if(a.staggerLines)$*=a.staggerLines,a.labelOffset=$}else for(q in f)f[q].destroy(),delete f[q];if(n&&n.text&&n.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(n.text,0,0,n.useHTML).attr({zIndex:7,rotation:n.rotation||\n0,align:n.textAlign||{low:\"left\",middle:\"center\",high:\"right\"}[n.align]}).addClass(\"highcharts-\"+this.coll.toLowerCase()+\"-title\").css(n.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?\"height\":\"width\"],o=m(n.margin,g?5:10),l=n.offset;a.axisTitle[b?\"show\":\"hide\"]()}a.offset=x*m(d.offset,J[h]);a.axisTitleMargin=m(l,$+o+($&&x*d.labels[g?\"y\":\"x\"]-na));J[h]=v(J[h],a.axisTitleMargin+k+x*a.offset);L[i]=v(L[i],T(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite,\nd=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine([\"M\",e?this.left:f,e?d:this.top,\"L\",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=z(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*\nthis.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.horiz,c=a.reversed,d=a.chart,e=d.renderer,f=a.options,g=a.isLog,h=a.isLinked,i=a.tickPositions,j,k=a.axisTitle,l=a.ticks,o=a.minorTicks,n=a.alternateBands,s=f.stackLabels,m=f.alternateGridColor,J=a.tickmarkOffset,L=f.lineWidth,x=d.hasRendered&&r(a.oldMin)&&!isNaN(a.oldMin),q=a.hasData,v=a.showAxis,u,w=f.labels.overflow,y=a.justifyLabels=b&&w!==\n!1,z;a.labelEdge.length=0;a.justifyToPlot=w===\"justify\";p([l,o,n],function(a){for(var b in a)a[b].isActive=!1});if(q||h)if(a.minorTickInterval&&!a.categories&&p(a.getMinorTickPositions(),function(b){o[b]||(o[b]=new Sa(a,b,\"minor\"));x&&o[b].isNew&&o[b].render(null,!0);o[b].render(null,!1,1)}),i.length&&(j=i.slice(),(b&&c||!b&&!c)&&j.reverse(),y&&(j=j.slice(1).concat([j[0]])),p(j,function(b,c){y&&(c=c===j.length-1?0:c+1);if(!h||b>=a.min&&b<=a.max)l[b]||(l[b]=new Sa(a,b)),x&&l[b].isNew&&l[b].render(c,\n!0,0.1),l[b].render(c,!1,1)}),J&&a.min===0&&(l[-1]||(l[-1]=new Sa(a,-1,null,!0)),l[-1].render(-1))),m&&p(i,function(b,c){if(c%2===0&&b<a.max)n[b]||(n[b]=new R.PlotLineOrBand(a)),u=b+J,z=i[c+1]!==t?i[c+1]+J:a.max,n[b].options={from:g?ia(u):u,to:g?ia(z):z,color:m},n[b].render(),n[b].isActive=!0}),!a._addedPlotLB)p((f.plotLines||[]).concat(f.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0;p([l,o,n],function(a){var b,c,e=[],f=va?va.duration||500:0,g=function(){for(c=e.length;c--;)a[e[c]]&&\n!a[e[c]].isActive&&(a[e[c]].destroy(),delete a[e[c]])};for(b in a)if(!a[b].isActive)a[b].render(b,!1,0),a[b].isActive=!1,e.push(b);a===n||!d.hasRendered||!f?g():f&&setTimeout(g,f)});if(L)b=a.getLinePath(L),a.axisLine?a.axisLine.animate({d:b}):a.axisLine=e.path(b).attr({stroke:f.lineColor,\"stroke-width\":L,zIndex:7}).add(a.axisGroup),a.axisLine[v?\"show\":\"hide\"]();if(k&&v)k[k.isNew?\"attr\":\"animate\"](a.getTitlePosition()),k.isNew=!1;s&&s.enabled&&a.renderStackTotals();a.isDirty=!1},redraw:function(){var a=\nthis.chart.pointer;a&&a.reset(!0);this.render();p(this.plotLinesAndBands,function(a){a.render()});p(this.series,function(a){a.isDirty=!0})},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||W(b);for(d in c)Oa(c[d]),c[d]=null;p([b.ticks,b.minorTicks,b.alternateBands],function(a){Oa(a)});for(a=e.length;a--;)e[a].destroy();p(\"stackTotalGroup,axisLine,axisTitle,axisGroup,cross,gridGroup,labelGroup\".split(\",\"),function(a){b[a]&&(b[a]=b[a].destroy())});this.cross&&this.cross.destroy()},\ndrawCrosshair:function(a,b){if(this.crosshair)if((r(b)||!m(this.crosshair.snap,!0))===!1)this.hideCrosshair();else{var c,d=this.crosshair,e=d.animation;m(d.snap,!0)?r(b)&&(c=this.chart.inverted!=this.horiz?b.plotX:this.len-b.plotY):c=this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos;c=this.isRadial?this.getPlotLinePath(this.isXAxis?b.x:m(b.stackY,b.y)):this.getPlotLinePath(null,null,null,null,c);if(c===null)this.hideCrosshair();else if(this.cross)this.cross.attr({visibility:\"visible\"})[e?\"animate\":\n\"attr\"]({d:c},e);else{e={\"stroke-width\":d.width||1,stroke:d.color||\"#C0C0C0\",zIndex:d.zIndex||2};if(d.dashStyle)e.dashstyle=d.dashStyle;this.cross=this.chart.renderer.path(c).attr(e).add()}}},hideCrosshair:function(){this.cross&&this.cross.hide()}};q(la.prototype,{getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a);d&&c?d.push(c[4],c[5],c[1],c[2]):d=null;return d},addPlotBand:function(a){this.addPlotBandOrLine(a,\"plotBands\")},addPlotLine:function(a){this.addPlotBandOrLine(a,\n\"plotLines\")},addPlotBandOrLine:function(a,b){var c=(new R.PlotLineOrBand(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]||[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();p([c.plotLines||[],d.plotLines||[],c.plotBands||[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id===a&&ja(b,b[e])})}});la.prototype.getTimeTicks=function(a,b,\nc,d){var e=[],f={},g=E.global.useUTC,h,i=new Date(b-Ra),j=a.unitRange,k=a.count;if(r(b)){j>=A.second&&(i.setMilliseconds(0),i.setSeconds(j>=A.minute?0:k*T(i.getSeconds()/k)));if(j>=A.minute)i[Db](j>=A.hour?0:k*T(i[pb]()/k));if(j>=A.hour)i[Eb](j>=A.day?0:k*T(i[qb]()/k));if(j>=A.day)i[sb](j>=A.month?1:k*T(i[Xa]()/k));j>=A.month&&(i[Fb](j>=A.year?0:k*T(i[fb]()/k)),h=i[gb]());j>=A.year&&(h-=h%k,i[Gb](h));if(j===A.week)i[sb](i[Xa]()-i[rb]()+m(d,1));b=1;Ra&&(i=new Date(i.getTime()+Ra));h=i[gb]();for(var d=\ni.getTime(),l=i[fb](),o=i[Xa](),n=g?Ra:(864E5+i.getTimezoneOffset()*6E4)%864E5;d<c;)e.push(d),j===A.year?d=eb(h+b*k,0):j===A.month?d=eb(h,l+b*k):!g&&(j===A.day||j===A.week)?d=eb(h,l,o+b*k*(j===A.day?1:7)):d+=j*k,b++;e.push(d);p(vb(e,function(a){return j<=A.hour&&a%A.day===n}),function(a){f[a]=\"day\"})}e.info=q(a,{higherRanks:f,totalRange:j*k});return e};la.prototype.normalizeTimeTickInterval=function(a,b){var c=b||[[\"millisecond\",[1,2,5,10,20,25,50,100,200,500]],[\"second\",[1,2,5,10,15,30]],[\"minute\",\n[1,2,5,10,15,30]],[\"hour\",[1,2,3,4,6,8,12]],[\"day\",[1,2]],[\"week\",[1,2]],[\"month\",[1,2,3,4,6]],[\"year\",null]],d=c[c.length-1],e=A[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=A[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+A[c[g+1][0]])/2)break;e===A.year&&a<5*e&&(f=[1,2,5]);c=nb(a/e,f,d[0]===\"year\"?v(mb(a/e),1):1);return{unitRange:e,count:c,unitName:d[0]}};la.prototype.getLogTickPositions=function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=u(a),g=this.getLinearTickPositions(a,\nb,c);else if(a>=0.08)for(var f=T(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=za(ia(f)*e[h]),j>b&&(!d||k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=ia(b),c=ia(c),a=e[d?\"minorTickInterval\":\"tickInterval\"],a=m(a===\"auto\"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=nb(a,null,mb(a)),g=Ua(this.getLinearTickPositions(a,b,c),za),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=\na;return g};var Mb=R.Tooltip=function(){this.init.apply(this,arguments)};Mb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=z(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label(\"\",0,0,b.shape||\"callout\",null,null,b.useHTML,null,\"tooltip\").attr({padding:e,fill:b.backgroundColor,\"stroke-width\":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});fa||this.label.shadow(b.shadow);this.shared=b.shared},\ndestroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden,h=e.followPointer||e.len>1;q(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:h?t:g?(2*f.anchorX+c)/3:c,anchorY:h?t:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(M(a-f.x)>1||M(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a=\nthis,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},m(this.options.hideDelay,500)),b&&p(b,function(a){a.setState()}),this.chart.hoverPoints=null},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=qa(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===t&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(p(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow?\n(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:h]);return Ua(c,u)},getPosition:function(a,b,c){var d=this.chart,e=this.distance,f={},g,h=[\"y\",d.chartHeight,b,c.plotY+d.plotTop],i=[\"x\",d.chartWidth,a,c.plotX+d.plotLeft],j=c.ttBelow||d.inverted&&!c.negative||!d.inverted&&c.negative,k=function(a,b,c,d){var g=c<d-e,b=d+e+c<b,c=d-e-c;d+=e;if(j&&b)f[a]=d;else if(!j&&g)f[a]=c;else if(g)f[a]=c;else if(b)f[a]=\nd;else return!1},l=function(a,b,c,d){if(d<e||d>b-e)return!1;else f[a]=d<c/2?1:d>b-c/2?b-c-2:d-c/2},o=function(a){var b=h;h=i;i=b;g=a},n=function(){k.apply(0,h)!==!1?l.apply(0,i)===!1&&!g&&(o(!0),n()):g?f.x=f.y=0:(o(!0),n())};(d.inverted||this.len>1)&&o();n();return f},defaultFormatter:function(a){var b=this.points||qa(this),c=b[0].series,d;d=[a.tooltipHeaderFormatter(b[0])];p(b,function(a){c=a.series;d.push(c.tooltipFormatter&&c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))});\nd.push(a.options.footerFormat||\"\");return d.join(\"\")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=this.shared;clearTimeout(this.hideTimer);this.followPointer=qa(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&p(h,function(a){a.setState()}),p(a,function(a){a.setState(\"hover\");j.push(a.getLabelConfig())}),h={x:a[0].category,\ny:a[0].y},h.points=j,this.len=j.length,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;this.distance=m(h.tooltipOptions.distance,16);i===!1?this.hide():(this.isHidden&&(bb(d),d.attr(\"opacity\",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||\"#606060\",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g,negative:a.negative,ttBelow:a.ttBelow}),this.isHidden=!1);D(c,\"tooltipRefresh\",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,\nc=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(u(c.x),u(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)},tooltipHeaderFormatter:function(a){var b=a.series,c=b.tooltipOptions,d=c.dateTimeLabelFormats,e=c.xDateFormat,f=b.xAxis,g=f&&f.options.type===\"datetime\"&&ha(a.key),c=c.headerFormat,f=f&&f.closestPointRange,h;if(g&&!e){if(f)for(h in A){if(A[h]>=f||A[h]<=A.day&&a.key%A[h]>0){e=d[h];break}}else e=d.day;e=e||d.year}g&&e&&(c=c.replace(\"{point.key}\",\"{point.key:\"+\ne+\"}\"));return Ia(c,{point:a,series:b})}};var oa;$a=y.documentElement.ontouchstart!==t;var Wa=R.Pointer=function(a,b){this.init(a,b)};Wa.prototype={init:function(a,b){var c=b.chart,d=c.events,e=fa?\"\":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.hasZoom=f||e;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(R.Tooltip&&b.tooltip.enabled)a.tooltip=new Mb(a,b.tooltip),\nthis.followTouchMove=b.tooltip.followTouchMove;this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||window.event,a=Sb(a);if(!a.target)a.target=a.srcElement;d=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;if(!b)this.chartPosition=b=Rb(this.chart.container);d.pageX===t?(c=v(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return q(a,{chartX:u(c),chartY:u(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};p(this.chart.axes,function(c){b[c.isXAxis?\"xAxis\":\n\"yAxis\"].push({axis:c,value:c.toValue(a[c.horiz?\"chartX\":\"chartY\"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e,f,g=b.hoverPoint,h=b.hoverSeries,i,j,k=b.chartWidth,l=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!h||!h.noSharedTooltip)){f=[];i=c.length;for(j=0;j<i;j++)if(c[j].visible&&c[j].options.enableMouseTracking!==!1&&!c[j].noSharedTooltip&&\nc[j].singularTooltips!==!0&&c[j].tooltipPoints.length&&(e=c[j].tooltipPoints[l])&&e.series)e._dist=M(l-e.clientX),k=C(k,e._dist),f.push(e);for(i=f.length;i--;)f[i]._dist>k&&f.splice(i,1);if(f.length&&f[0].clientX!==this.hoverX)d.refresh(f,a),this.hoverX=f[0].clientX}c=h&&h.tooltipOptions.followPointer;if(h&&h.tracker&&!c){if((e=h.tooltipPoints[l])&&e!==g)e.onMouseOver(a)}else d&&c&&!d.isHidden&&(h=d.getAnchor([{}],a),d.updatePosition({plotX:h[0],plotY:h[1]}));if(d&&!this._onDocumentMouseMove)this._onDocumentMouseMove=\nfunction(a){if(V[oa])V[oa].pointer.onDocumentMouseMove(a)},K(y,\"mousemove\",this._onDocumentMouseMove);p(b.axes,function(b){b.drawCrosshair(a,m(e,g))})},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,f=e&&e.shared?b.hoverPoints:d;(a=a&&e&&f)&&qa(f)[0].plotX===t&&(a=!1);if(a)e.refresh(f),d&&d.setState(d.state,!0);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&e.hide();if(this._onDocumentMouseMove)W(y,\"mousemove\",this._onDocumentMouseMove),this._onDocumentMouseMove=null;\np(b.axes,function(a){a.hideCrosshair()});this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;p(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},\ndrag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,o=this.mouseDownX,n=this.mouseDownY;d<h?d=h:d>h+j&&(d=h+j);e<i?e=i:e>i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(o-d,2)+Math.pow(n-e,2));if(this.hasDragged>10){l=b.isInsidePlot(o-h,n-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill||\n\"rgba(69,114,167,0.25)\",zIndex:7}).add();this.selectionMarker&&f&&(d-=o,this.selectionMarker.attr({width:M(d),x:(d>0?0:d)+o}));this.selectionMarker&&g&&(d=e-n,this.selectionMarker.attr({height:M(d),y:(d>0?0:d)+n}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},a=this.selectionMarker,e=a.attr?a.attr(\"x\"):a.x,f=a.attr?a.attr(\"y\"):a.y,g=a.attr?a.attr(\"width\"):\na.width,h=a.attr?a.attr(\"height\"):a.height,i;if(this.hasDragged||c)p(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?e:f),b=a.toValue(b?e+g:f+h);!isNaN(c)&&!isNaN(b)&&(d[a.coll].push({axis:a,min:C(c,b),max:v(c,b)}),i=!0)}}),i&&D(b,\"selection\",d,function(a){b.zoom(q(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)G(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=\n!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){V[oa]&&V[oa].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,\"highcharts-tracker\")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){var a=V[oa];if(a)a.pointer.reset(),a.pointer.chartPosition=\nnull},onContainerMouseMove:function(a){var b=this.chart;oa=b.index;a=this.normalize(a);b.mouseIsDown===\"mousedown\"&&this.drag(a);(this.inClass(a.target,\"highcharts-tracker\")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=H(a,\"class\"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf(\"highcharts-container\")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,c=(a=a.relatedTarget||\na.toElement)&&a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,\"highcharts-tooltip\")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,a=this.normalize(a);a.cancelBubble=!0;b.cancelClick||(c&&this.inClass(a.target,\"highcharts-tracker\")?(D(c.series,\"click\",q(a,{point:c})),b.hoverPoint&&c.firePointEvent(\"click\",a)):(q(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&D(b,\"click\",a)))},setDOMEvents:function(){var a=\nthis,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)};K(b,\"mouseleave\",a.onContainerMouseLeave);ab===1&&K(y,\"mouseup\",a.onDocumentMouseUp);if($a)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},ab===1&&K(y,\"touchend\",a.onDocumentTouchEnd)},destroy:function(){var a;W(this.chart.container,\"mouseleave\",this.onContainerMouseLeave);\nab||(W(y,\"mouseup\",this.onDocumentMouseUp),W(y,\"touchend\",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};q(R.Pointer.prototype,{pinchTranslate:function(a,b,c,d,e,f){(this.zoomHor||this.pinchHor)&&this.pinchTranslateDirection(!0,a,b,c,d,e,f);(this.zoomVert||this.pinchVert)&&this.pinchTranslateDirection(!1,a,b,c,d,e,f)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,j=a?\"x\":\"y\",k=a?\"X\":\"Y\",l=\"chart\"+k,o=a?\"width\":\"height\",n=i[\"plot\"+(a?\n\"Left\":\"Top\")],s,m,p=h||1,q=i.inverted,x=i.bounds[a?\"h\":\"v\"],r=b.length===1,v=b[0][l],u=c[0][l],t=!r&&b[1][l],w=!r&&c[1][l],y,c=function(){!r&&M(v-t)>20&&(p=h||M(u-w)/M(v-t));m=(n-u)/p+v;s=i[\"plot\"+(a?\"Width\":\"Height\")]/p};c();b=m;b<x.min?(b=x.min,y=!0):b+s>x.max&&(b=x.max-s,y=!0);y?(u-=0.8*(u-g[j][0]),r||(w-=0.8*(w-g[j][1])),c()):g[j]=[u,w];q||(f[j]=m-n,f[o]=s);f=q?1/p:p;e[o]=s;e[j]=b;d[q?a?\"scaleY\":\"scaleX\":\"scale\"+k]=p;d[\"translate\"+k]=f*n+(u-f*v)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,\ne=b.followTouchMove,f=a.touches,g=f.length,h=b.lastValidTouch,i=b.hasZoom,j=b.selectionMarker,k={},l=g===1&&(b.inClass(a.target,\"highcharts-tracker\")&&c.runTrackerClick||c.runChartClick),o={};(i||e)&&!l&&a.preventDefault();Ua(f,function(a){return b.normalize(a)});if(a.type===\"touchstart\")p(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],p(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?\"h\":\"v\"],d=a.minPixelPadding,\ne=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=C(e,f),e=v(e,f);b.min=C(a.pos,g-d);b.max=v(a.pos+a.len,e+d)}});else if(d.length){if(!j)b.selectionMarker=j=q({destroy:sa},c.plotBox);b.pinchTranslate(d,f,k,j,o,h);b.hasPinched=i;b.scaleGroups(k,o);!i&&e&&g===1&&this.runPointActions(b.normalize(a))}},onContainerTouchStart:function(a){var b=this.chart;oa=b.index;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()):\na.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){V[oa]&&V[oa].pointer.drop(a)}});if(I.PointerEvent||I.MSPointerEvent){var ua={},zb=!!I.PointerEvent,Wb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in ua)ua.hasOwnProperty(a)&&b.push({pageX:ua[a].pageX,pageY:ua[a].pageY,target:ua[a].target});return b},Ab=function(a,b,c,d){a=a.originalEvent||a;if((a.pointerType===\"touch\"||\na.pointerType===a.MSPOINTER_TYPE_TOUCH)&&V[oa])d(a),d=V[oa].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:sa,touches:Wb()})};q(Wa.prototype,{onContainerPointerDown:function(a){Ab(a,\"onContainerTouchStart\",\"touchstart\",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Ab(a,\"onContainerTouchMove\",\"touchmove\",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!ua[a.pointerId].target)ua[a.pointerId].target=a.currentTarget})},\nonDocumentPointerUp:function(a){Ab(a,\"onContainerTouchEnd\",\"touchend\",function(a){delete ua[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,zb?\"pointerdown\":\"MSPointerDown\",this.onContainerPointerDown);a(this.chart.container,zb?\"pointermove\":\"MSPointerMove\",this.onContainerPointerMove);a(y,zb?\"pointerup\":\"MSPointerUp\",this.onDocumentPointerUp)}});Ma(Wa.prototype,\"init\",function(a,b,c){a.call(this,b,c);(this.hasZoom||this.followTouchMove)&&G(b.container,{\"-ms-touch-action\":Q,\"touch-action\":Q})});\nMa(Wa.prototype,\"setDOMEvents\",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(K)});Ma(Wa.prototype,\"destroy\",function(a){this.batchMSEvents(W);a.call(this)})}var lb=R.Legend=function(a,b){this.init(a,b)};lb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=m(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=z(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=w(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY=\ne-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.symbolWidth=m(b.symbolWidth,16),c.pages=[],c.render(),K(c.chart,\"endResize\",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.legendColor||a.color||\"#CCC\":g,g=a.options&&a.options.marker,i={fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in i.stroke=h,g=a.convertAttribs(g),\ng)d=g[j],d!==t&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;p([\"legendItem\",\"legendLine\",\"legendSymbol\",\"legendGroup\"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Pa(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},\npositionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,p(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,G(f,{left:b.translateX+e.checkboxOffset+f.x-20+\"px\",top:g+\"px\",display:g>c-6&&g<c+d-6?\"\":Q}))})},renderTitle:function(){var a=this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,\"legend-title\").attr({zIndex:1}).css(b.style).add(this.group);\na=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},renderItem:function(a){var b=this.chart,c=b.renderer,d=this.options,e=d.layout===\"horizontal\",f=this.symbolWidth,g=d.symbolPadding,h=this.itemStyle,i=this.itemHiddenStyle,j=this.padding,k=e?m(d.itemDistance,20):0,l=!d.rtl,o=d.width,n=d.itemMarginBottom||0,s=this.itemMarginTop,p=this.initialItemX,q=a.legendItem,r=a.series&&a.series.drawLegendSymbol?a.series:a,x=r.options,x=this.createCheckboxForItem&&\nx&&x.showCheckbox,t=d.useHTML;if(!q)a.legendGroup=c.g(\"legend-item\").attr({zIndex:1}).add(this.scrollGroup),r.drawLegendSymbol(this,a),a.legendItem=q=c.text(d.labelFormat?Ia(d.labelFormat,a):d.labelFormatter.call(a),l?f+g:-g,this.baseline,t).css(w(a.visible?h:i)).attr({align:l?\"left\":\"right\",zIndex:2}).add(a.legendGroup),this.setItemEvents&&this.setItemEvents(a,q,t,h,i),this.colorizeItem(a,a.visible),x&&this.createCheckboxForItem(a);c=q.getBBox();f=a.checkboxOffset=d.itemWidth||a.legendItemWidth||\nf+g+c.width+k+(x?20:0);this.itemHeight=g=u(a.legendItemHeight||c.height);if(e&&this.itemX-p+f>(o||b.chartWidth-2*j-p-d.x))this.itemX=p,this.itemY+=s+this.lastLineHeight+n,this.lastLineHeight=0;this.maxItemWidth=v(this.maxItemWidth,f);this.lastItemY=s+this.itemY+n;this.lastLineHeight=v(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=s+g+n,this.lastLineHeight=g);this.offsetWidth=o||v((e?this.itemX-p-k:f)+j,this.offsetWidth)},getAllItems:function(){var a=\n[];p(this.chart.series,function(b){var c=b.options;if(m(c.showInLegend,!r(c.linkedTo)?t:!1,!0))a=a.concat(b.legendItems||(c.legendType===\"point\"?b.data:b))});return a},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,o=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g(\"legend\").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);\na.renderTitle();e=a.getAllItems();ob(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;p(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||o){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?\"attr\":\"animate\"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,\n\"stroke-width\":l||0,fill:o||Q}).add(d).shadow(j.shadow),i.isNew=!0;i[f?\"show\":\"hide\"]()}a.legendWidth=g;a.legendHeight=h;p(e,function(b){a.positionItem(b)});f&&d.align(q({width:g,height:h},j),!0,\"spacingBox\");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign===\"top\"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,j=e.navigation,k=m(j.animation,!0),l=j.arrowSize||12,o=this.nav,n=this.pages,\ns,q=this.allItems;e.layout===\"horizontal\"&&(f/=2);g&&(f=C(f,g));n.length=0;if(a>f&&!e.useHTML){this.clipHeight=h=f-20-this.titleHeight-this.padding;this.currentPage=m(this.currentPage,1);this.fullHeight=a;p(q,function(a,b){var c=a._legendItemPos[1],d=u(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(s||c)!==n[e-1])n.push(s||c),e++;b===q.length-1&&c+d-n[e-1]>h&&n.push(c);c!==s&&(s=c)});if(!i)i=b.clipRect=d.clipRect(0,this.padding,9999,0),b.contentGroup.clip(i);i.attr({height:h});if(!o)this.nav=\no=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol(\"triangle\",0,0,l,l).on(\"click\",function(){b.scroll(-1,k)}).add(o),this.pager=d.text(\"\",15,10).css(j.style).add(o),this.down=d.symbol(\"triangle-down\",0,0,l,l).on(\"click\",function(){b.scroll(1,k)}).add(o);b.scroll(0);a=f}else if(o)i.attr({height:c.chartHeight}),o.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation,\nh=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==t&&Qa(b,this.chart),this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:\"visible\"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?\"default\":\"pointer\"}),i.attr({text:e+\"/\"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?\"default\":\"pointer\"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}};\nN=R.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||12;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-5-c/2,a.symbolWidth,c,a.options.symbolRadius||0).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline-u(e.fontMetrics(a.options.itemStyle.fontSize).b*0.3),g;if(b.lineWidth){g={\"stroke-width\":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=\ne.path([\"M\",0,a,\"L\",d,a]).attr(g).add(f)}if(c&&c.enabled!==!1)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};(/Trident\\/7\\.0/.test(wa)||Ta)&&Ma(lb.prototype,\"positionItem\",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)});Ya.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=w(E,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray(\"margin\",d);this.spacing=this.splashArray(\"spacing\",\nd);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=V.length;V.push(f);ab++;d.reflow!==!1&&K(f,\"load\",function(){f.initReflow()});if(e)for(g in e)K(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=fa?!1:m(d.animation,!0);f.pointCount=0;f.counters=new Bb;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=F[a.type||b.type||b.defaultSeriesType])||ra(17,!0);b=new b;b.init(this,\na);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&p(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,o=l.isHidden(),n=[];Qa(a,this);o&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&\n(g=!0,a.isDirty)){h=!0;break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;p(c,function(a){a.isDirty&&a.options.legendType===\"point\"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,p(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();p(b,function(a){a.isDirty&&(i=!0)});p(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,n.push(function(){D(a,\"afterSetExtremes\",\nq(a.eventArgs,a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();p(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset(!0);l.draw();D(this,\"redraw\");o&&this.cloneRenderTo(!0);p(n,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===a)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===\na)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=qa(b.xAxis||{}),b=b.yAxis=qa(b.yAxis||{});p(c,function(a,b){a.index=b;a.isX=!0});p(b,function(a,b){a.index=b});c=c.concat(b);p(c,function(b){new la(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];p(this.series,function(b){a=a.concat(vb(b.points||[],function(a){return a.selected}))});return a},getSelectedSeries:function(){return vb(this.series,function(a){return a.selected})},getStacks:function(){var a=\nthis;p(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks=a.stacks});p(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+m(b.options.stack,\"\")})},setTitle:function(a,b,c){var g;var d=this,e=d.options,f;f=e.title=w(e.title,a);g=e.subtitle=w(e.subtitle,b),e=g;p([[\"title\",a,f],[\"subtitle\",b,e]],function(a){var b=a[0],c=d[b],e=a[1],a=a[2];c&&e&&(d[b]=c=c.destroy());a&&a.text&&!c&&(d[b]=d.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,\n\"class\":\"highcharts-\"+b,zIndex:a.zIndex||4}).css(a.style).add())});d.layOutTitles(c)},layOutTitles:function(a){var b=0,c=this.title,d=this.subtitle,e=this.options,f=e.title,e=e.subtitle,g=this.spacingBox.width-44;if(c&&(c.css({width:(f.width||g)+\"px\"}).align(q({y:15},f),!1,\"spacingBox\"),!f.floating&&!f.verticalAlign))b=c.getBBox().height;d&&(d.css({width:(e.width||g)+\"px\"}).align(q({y:b+f.margin},e),!1,\"spacingBox\"),!e.floating&&!e.verticalAlign&&(b=Ka(b+d.getBBox().height)));c=this.titleOffset!==\nb;this.titleOffset=b;if(!this.isDirtyBox&&c)this.isDirtyBox=c,this.hasRendered&&m(a,!0)&&this.isDirtyBox&&this.redraw()},getChartSize:function(){var a=this.options.chart,b=a.width,a=a.height,c=this.renderToClone||this.renderTo;if(!r(b))this.containerWidth=jb(c,\"width\");if(!r(a))this.containerHeight=jb(c,\"height\");this.chartWidth=v(0,b||this.containerWidth||600);this.chartHeight=v(0,m(a,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;\na?b&&(this.renderTo.appendChild(c),Pa(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),G(b,{position:\"absolute\",top:\"-9999px\",display:\"block\"}),b.style.setProperty&&b.style.setProperty(\"display\",\"block\",\"important\"),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e=\"highcharts-\"+tb++;if(Fa(a))this.renderTo=a=y.getElementById(a);\na||ra(13,!0);c=z(H(a,\"data-highcharts-chart\"));!isNaN(c)&&V[c]&&V[c].hasRendered&&V[c].destroy();H(a,\"data-highcharts-chart\",this.index);a.innerHTML=\"\";!b.skipClone&&!a.offsetWidth&&this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=Y(Ja,{className:\"highcharts-container\"+(b.className?\" \"+b.className:\"\"),id:e},q({position:\"relative\",overflow:\"hidden\",width:c+\"px\",height:d+\"px\",textAlign:\"left\",lineHeight:\"normal\",zIndex:0,\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\"},\nb.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new ta(a,c,d,b.style,!0):new Za(a,c,d,b.style);fa&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,f=m(e.margin,20),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!r(d[0]))this.plotTop=v(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i===\"right\"){if(!r(d[1]))this.marginRight=\nv(this.marginRight,c.legendWidth-g+f+a[1])}else if(i===\"left\"){if(!r(d[3]))this.plotLeft=v(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j===\"top\"){if(!r(d[0]))this.plotTop=v(this.plotTop,c.legendHeight+h+f+a[0])}else if(j===\"bottom\"&&!r(d[2]))this.marginBottom=v(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&p(this.axes,function(a){a.getOffset()});r(d[3])||\n(this.plotLeft+=b[3]);r(d[0])||(this.plotTop+=b[0]);r(d[2])||(this.marginBottom+=b[2]);r(d[1])||(this.marginRight+=b[1]);this.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||jb(d,\"width\"),f=c.height||jb(d,\"height\"),c=a?a.target:I,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&e&&f&&(c===I||c===y)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=setTimeout(d,100):d();b.containerWidth=\ne;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};K(I,\"resize\",b);K(a,\"destroy\",function(){W(I,\"resize\",b)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&D(d,\"endResize\",null,function(){d.isResizing-=1})};Qa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(r(a))d.chartWidth=e=v(0,u(a)),d.hasUserSize=!!e;if(r(b))d.chartHeight=f=v(0,u(b));(va?kb:G)(d.container,{width:e+\"px\",height:f+\"px\"},va);d.setChartSize(!0);d.renderer.setSize(e,\nf,c);d.maxTicks=null;p(d.axes,function(a){a.isDirty=!0;a.setScale()});p(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;D(d,\"resize\");va===!1?g():setTimeout(g,va&&va.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=u(this.plotLeft);this.plotTop=j=u(this.plotTop);this.plotWidth=\nk=v(0,u(d-i-this.marginRight));this.plotHeight=l=v(0,u(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*T(this.plotBorderWidth/2);b=Ka(v(d,h[3])/2);c=Ka(v(d,h[0])/2);this.clipBox={x:b,y:c,width:T(this.plotSizeX-v(d,h[1])/2-b),height:T(this.plotSizeY-v(d,h[2])/2-c)};a||p(this.axes,function(a){a.setAxisSize();\na.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=m(b[0],a[0]);this.marginRight=m(b[1],a[1]);this.marginBottom=m(b[2],a[2]);this.plotLeft=m(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,\no=a.plotBorderWidth||0,n,s=this.plotLeft,m=this.plotTop,p=this.plotWidth,q=this.plotHeight,r=this.plotBox,v=this.clipRect,u=this.clipBox;n=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp({width:c-n,height:d-n}));else{e={fill:j||Q};if(i)e.stroke=a.borderColor,e[\"stroke-width\"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass(\"highcharts-background\").add().shadow(a.shadow)}if(k)f?f.animate(r):this.plotBackground=b.rect(s,m,p,q,0).attr({fill:k}).add().shadow(a.plotShadow);\nif(l)h?h.animate(r):this.plotBGImage=b.image(l,s,m,p,q).add();v?v.animate({width:u.width,height:u.height}):this.clipRect=b.clipRect(u);if(o)g?g.animate(g.crisp({x:s,y:m,width:p,height:q})):this.plotBorder=b.rect(s,m,p,q,0,-o).attr({stroke:a.plotBorderColor,\"stroke-width\":o,fill:Q,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;p([\"inverted\",\"angular\",\"polar\"],function(g){c=F[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];\nfor(e=d&&d.length;!f&&e--;)(c=F[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;p(b,function(a){a.linkedSeries.length=0});p(b,function(b){var d=b.options.linkedTo;if(Fa(d)&&(d=d===\":previous\"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},renderSeries:function(){p(this.series,function(a){a.translate();a.setTooltipPoints&&a.setTooltipPoints();a.render()})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,e=d.labels,f=\nd.credits,g;a.setTitle();a.legend=new lb(a,d.legend);a.getStacks();p(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;p(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&p(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g(\"series-group\").attr({zIndex:3}).add();a.renderSeries();e.items&&p(e.items,function(b){var d=q(e.style,b.style),f=z(d.left)+a.plotLeft,g=z(d.top)+a.plotTop+12;delete d.left;delete d.top;\nc.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on(\"click\",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;D(a,\"destroy\");V[a.index]=t;ab--;a.renderTo.removeAttribute(\"data-highcharts-chart\");W(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();\np(\"title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer\".split(\",\"),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML=\"\",W(d),f&&Pa(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!aa&&I==I.top&&y.readyState!==\"complete\"||fa&&!I.canvg?(fa?Lb.push(function(){a.firstRender()},a.options.global.canvasToolsURL):y.attachEvent(\"onreadystatechange\",\nfunction(){y.detachEvent(\"onreadystatechange\",a.firstRender);y.readyState===\"complete\"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender()){a.getContainer();D(a,\"init\");a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();p(b.series||[],function(b){a.initSeries(b)});a.linkSeries();D(a,\"beforeRender\");if(R.Pointer)a.pointer=new Wa(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);p(a.callbacks,function(b){b.apply(a,[a])});a.cloneRenderTo(!0);\nD(a,\"load\")}},splashArray:function(a,b){var c=b[a],c=ca(c)?c:[c,c,c,c];return[m(b[a+\"Top\"],c[0]),m(b[a+\"Right\"],c[1]),m(b[a+\"Bottom\"],c[2]),m(b[a+\"Left\"],c[3])]}};Ya.prototype.callbacks=[];X=R.CenteredSeriesMixin={getCenter:function(){var a=this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[m(b[0],\"50%\"),m(b[1],\"50%\"),a.size||\"100%\",a.innerSize||0],g=C(e,f),h;return Ua(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*z(a)/100:\na)+(d?c:0)})}};var Ea=function(){};Ea.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Ea.prototype.optionsToObject.call(this,a);q(this,a);this.options=this.options?q(this.options,a):a;if(d)this.y=this[d];if(this.x===\nt&&c)this.x=b===t?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.pointArrayMap||[\"y\"],e=d.length,f=0,g=0;if(typeof a===\"number\"||a===null)b[d[0]]=a;else if(La(a)){if(a.length>e){c=typeof a[0];if(c===\"string\")b.name=a[0];else if(c===\"number\")b.x=a[0];f++}for(;g<e;)b[d[g++]]=a[f++]}else if(typeof a===\"object\"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers=!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;\nif(b&&(this.setState(),ja(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)W(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a=\"graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup\".split(\",\"),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,\npoint:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=m(c.valueDecimals,\"\"),e=c.valuePrefix||\"\",f=c.valueSuffix||\"\";p(b.pointArrayMap||[\"y\"],function(b){b=\"{point.\"+b;if(e||f)a=a.replace(b+\"}\",e+b+\"}\"+f);a=a.replace(b+\"}\",b+\":,.\"+d+\"f}\")});return Ia(a,{point:this,series:this.series})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&\nthis.importEvents();a===\"click\"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});D(this,a,b,c)}};var O=function(){};O.prototype={isCartesian:!0,type:\"line\",pointClass:Ea,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:\"lineColor\",\"stroke-width\":\"lineWidth\",fill:\"fillColor\",r:\"radius\"},axisTypes:[\"xAxis\",\"yAxis\"],colorCounter:0,parallelArrays:[\"x\",\"y\"],init:function(a,b){var c=this,d,e,f=a.series,g=function(a,b){return m(a.options.index,a._i)-m(b.options.index,\nb._i)};c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();q(c,{name:b.name,state:\"\",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if(fa)b.animation=!1;e=b.events;for(d in e)K(c,d,e[d]);if(e&&e.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor();c.getSymbol();p(c.parallelArrays,function(a){c[a+\"Data\"]=[]});c.setData(b.data,!1);if(c.isCartesian)a.hasCartesianSeries=!0;f.push(c);c._i=f.length-1;ob(f,g);this.yAxis&&\nob(this.yAxis.series,g);p(f,function(a,b){a.index=b;a.name=a.name||\"Series \"+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;p(a.axisTypes||[],function(e){p(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]!==t&&b[e]===d.id||b[e]===t&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});!a[e]&&a.optionalAxis!==e&&ra(18,!0)})},updateParallelArrays:function(a,b){var c=a.series,d=arguments;p(c.parallelArrays,typeof b===\"number\"?function(d){var f=d===\"y\"&&c.toYData?c.toYData(a):a[d];\nc[d+\"Data\"][b]=f}:function(a){Array.prototype[b].apply(c[a+\"Data\"],Array.prototype.slice.call(d,2))})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=m(b,a.pointStart,0);this.pointInterval=m(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else p(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+\n1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=w(e,c.series,a);this.tooltipOptions=w(E.tooltip,E.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;return c},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,\ne;e=a.color||ba[this.type].color;if(!e&&!a.colorByPoint)r(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)r(a._symbolIndex)?a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:N.drawLineMarker,\nsetData:function(a,b,c,d){var e=this,f=e.points,g=f&&f.length||0,h,i=e.options,j=e.chart,k=null,l=e.xAxis,o=l&&!!l.categories,n=e.tooltipPoints,s=i.turboThreshold,q=this.xData,r=this.yData,v=(h=e.pointArrayMap)&&h.length,a=a||[];h=a.length;b=m(b,!0);if(d!==!1&&h&&g===h&&!e.cropped&&!e.hasGroupedData)p(a,function(a,b){f[b].update(a,!1)});else{e.xIncrement=null;e.pointRange=o?1:i.pointRange;e.colorCounter=0;p(this.parallelArrays,function(a){e[a+\"Data\"].length=0});if(s&&h>s){for(c=0;k===null&&c<h;)k=\na[c],c++;if(ha(k)){o=m(i.pointStart,0);i=m(i.pointInterval,1);for(c=0;c<h;c++)q[c]=o,r[c]=a[c],o+=i;e.xIncrement=o}else if(La(k))if(v)for(c=0;c<h;c++)i=a[c],q[c]=i[0],r[c]=i.slice(1,v+1);else for(c=0;c<h;c++)i=a[c],q[c]=i[0],r[c]=i[1];else ra(12)}else for(c=0;c<h;c++)if(a[c]!==t&&(i={series:e},e.pointClass.prototype.applyOptions.apply(i,[a[c]]),e.updateParallelArrays(i,c),o&&i.name))l.names[i.x]=i.name;Fa(r[0])&&ra(14,!0);e.data=[];e.options.data=a;for(c=g;c--;)f[c]&&f[c].destroy&&f[c].destroy();\nif(n)n.length=0;if(l)l.minRange=l.userMinRange;e.isDirty=e.isDirtyData=j.isDirtyBox=!0;c=!1}b&&j.redraw(c)},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i=this.options,j=i.cropThreshold,k=0,l=this.isCartesian,o,n;if(l&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(l&&this.sorted&&(!j||d>j||this.forceCrop))if(o=h.min,n=h.max,b[d-1]<o||b[0]>n)b=[],c=[];else if(b[0]<o||b[d-1]>n)e=this.cropData(this.xData,this.yData,o,n),b=e.xData,c=e.yData,\ne=e.start,f=!0,k=b.length;for(d=b.length-1;d>=0;d--)a=b[d]-b[d-1],!f&&b[d]>o&&b[d]<n&&k++,a>0&&(g===t||a<g)?g=a:a<0&&this.requireSorting&&ra(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c;this.activePointCount=k;if(i.pointRange===null)this.pointRange=g||1;this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=m(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>=c){f=v(0,i-h);break}for(;i<e;i++)if(a[i]>d){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,\ng),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],o;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(o=0;o<g;o++)i=h+o,j?l[o]=(new f).init(this,[d[o]].concat(qa(e[o]))):(b[i]?k=b[i]:a[i]!==t&&(b[i]=k=(new f).init(this,a[i],d[o])),l[o]=k);if(b&&(g!==(c=b.length)||j))for(o=0;o<c;o++)if(o===h&&!j&&(o+=g),b[o])b[o].destroyElements(),b[o].plotX=\nt;this.data=b;this.points=l},getExtremes:function(a){var b=this.yAxis,c=this.processedXData,d,e=[],f=0;d=this.xAxis.getExtremes();var g=d.min,h=d.max,i,j,k,l,a=a||this.stackedYData||this.processedYData;d=a.length;for(l=0;l<d;l++)if(j=c[l],k=a[l],i=k!==null&&k!==t&&(!b.isLog||k.length||k>0),j=this.getExtremesFromAll||this.cropped||(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=m(void 0,Na(e));this.dataMax=m(void 0,Ba(e))},translate:function(){this.processedXData||\nthis.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i===\"between\"||ha(i),k=a.threshold,a=0;a<g;a++){var l=f[a],o=l.x,n=l.y,s=l.low,p=b&&e.stacks[(this.negStacks&&n<k?\"-\":\"\")+this.stackKey];if(e.isLog&&n<=0)l.y=n=null;l.plotX=c.translate(o,0,0,0,1,i,this.type===\"flags\");if(b&&this.visible&&p&&p[o])p=p[o],n=p.points[this.index+\",\"+a],s=n[0],n=n[1],s===0&&(s=m(k,e.min)),\ne.isLog&&s<=0&&(s=null),l.total=l.stackTotal=p.total,l.percentage=p.total&&l.y/p.total*100,l.stackY=n,p.setOffset(this.pointXOffset||0,this.barW||0);l.yBottom=r(s)?e.translate(s,0,1,0,1):null;h&&(n=this.modifyValue(n,l));l.plotY=typeof n===\"number\"&&n!==Infinity?e.translate(n,0,1,0,1):t;l.clientX=j?c.translate(o,0,0,0,1):l.plotX;l.negative=l.y<(k||0);l.category=d&&d[l.x]!==t?d[l.x]:l.x}this.getSegments()},animate:function(a){var b=this.chart,c=b.renderer,d;d=this.options.animation;var e=this.clipBox||\nb.clipBox,f=b.inverted,g;if(d&&!ca(d))d=ba[this.type].animation;g=[\"_sharedClip\",d.duration,d.easing,e.height].join(\",\");a?(a=b[g],d=b[g+\"m\"],a||(b[g]=a=c.clipRect(q(e,{width:0})),b[g+\"m\"]=d=c.clipRect(-99,f?-b.plotLeft:-b.plotTop,99,f?b.chartWidth:b.chartHeight)),this.group.clip(a),this.markerGroup.clip(d),this.sharedClipKey=g):((a=b[g])&&a.animate({width:b.plotSizeX},d),b[g+\"m\"]&&b[g+\"m\"].animate({width:b.plotSizeX+99},d),this.animate=null)},afterAnimate:function(){var a=this.chart,b=this.sharedClipKey,\nc=this.group,d=this.clipBox;if(c&&this.options.clip!==!1){if(!b||!d)c.clip(d?a.renderer.clipRect(d):a.clipRect);this.markerGroup.clip()}D(this,\"afterAnimate\");setTimeout(function(){b&&a[b]&&(d||(a[b]=a[b].destroy()),a[b+\"m\"]&&(a[b+\"m\"]=a[b+\"m\"].destroy()))},100)},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,j,k;d=this.options.marker;var l=this.pointAttr[\"\"],o,n=this.markerGroup,s=m(d.enabled,this.activePointCount<0.5*this.xAxis.len/d.radius);if(d.enabled!==!1||this._hasPointMarkers)for(f=\nb.length;f--;)if(g=b[f],d=T(g.plotX),e=g.plotY,k=g.graphic,i=g.marker||{},a=s&&i.enabled===t||i.enabled,o=c.isInsidePlot(u(d),e,c.inverted),a&&e!==t&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?\"select\":\"\"]||l,h=a.r,i=m(i.symbol,this.symbol),j=i.indexOf(\"url\")===0,k)k[o?\"show\":\"hide\"](!0).animate(q({x:d-h,y:e-h},k.symbolName?{width:2*h,height:2*h}:{}));else{if(o&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(n)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,\nb,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=m(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=ba[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color;f={stroke:g,fill:g};var h=a.points||[],i,j=[],k,l=a.pointAttrToOptions;k=a.hasPointSpecificOptions;var o=b.negativeColor,n=c.lineColor,s=c.fillColor;i=b.turboThreshold;var m;b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=\ne.color||ya(e.color||g).brighten(e.brightness).get();j[\"\"]=a.convertAttribs(c,f);p([\"hover\",\"select\"],function(b){j[b]=a.convertAttribs(d[b],j[\"\"])});a.pointAttr=j;g=h.length;if(!i||g<i||k)for(;g--;){i=h[g];if((c=i.options&&i.options.marker||i.options)&&c.enabled===!1)c.radius=0;if(i.negative&&o)i.color=i.fillColor=o;k=b.colorByPoint||i.color;if(i.options)for(m in l)r(c[l[m]])&&(k=!0);if(k){c=c||{};k=[];d=c.states||{};f=d.hover=d.hover||{};if(!b.marker)f.color=f.color||!i.options.color&&e.color||\nya(i.color).brighten(f.brightness||e.brightness).get();f={color:i.color};if(!s)f.fillColor=i.color;if(!n)f.lineColor=i.color;k[\"\"]=a.convertAttribs(q(f,c),j[\"\"]);k.hover=a.convertAttribs(d.hover,j.hover,k[\"\"]);k.select=a.convertAttribs(d.select,j.select,k[\"\"])}else k=j;i.pointAttr=k}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\\/533/.test(wa),d,e,f=a.data||[],g,h,i;D(a,\"destroy\");W(a);p(a.axisTypes||[],function(b){if(i=a[b])ja(i.series,a),i.isDirty=i.forceRedraw=!0});a.legendItem&&a.chart.legend.destroyItem(a);\nfor(e=f.length;e--;)(g=f[e])&&g.destroy&&g.destroy();a.points=null;clearTimeout(a.animationTimeout);p(\"area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip\".split(\",\"),function(b){a[b]&&(d=c&&b===\"group\"?\"hide\":\"destroy\",a[b][d]())});if(b.hoverSeries===a)b.hoverSeries=null;ja(b.series,a);for(h in a)delete a[h]},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;p(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,\ne,f)):(c.push(f?\"L\":\"M\"),d&&f&&(i=a[f-1],d===\"right\"?c.push(i.plotX,h):d===\"center\"?c.push((i.plotX+g)/2,i.plotY,(i.plotX+g)/2,h):c.push(g,i.plotY)),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a=this,b=[],c,d=[];p(a.segments,function(e){c=a.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[[\"graph\",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=b.linecap!==\"square\",g=this.getGraphPath(),\nh=b.negativeColor;h&&c.push([\"graphNeg\",h]);p(c,function(c,h){var k=c[0],l=a[k];if(l)bb(l),l.animate({d:g});else if(d&&g.length)l={stroke:c[1],\"stroke-width\":d,fill:Q,zIndex:1},e?l.dashstyle=e:f&&(l[\"stroke-linecap\"]=l[\"stroke-linejoin\"]=\"round\"),a[k]=a.chart.renderer.path(g).attr(l).add(a.group).shadow(!h&&b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=\nb.chartHeight,k=v(e,j),l=this.yAxis;if(d&&(f||g)){d=u(l.toPixels(a.threshold||0,!0));d<0&&(k-=d);a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},\ninvertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};p([\"group\",\"markerGroup\"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)K(c,\"resize\",a),K(b,\"destroy\",function(){W(c,\"resize\",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?\"attr\":\"animate\"](this.getPlotBox());return f},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;\nif(a.inverted)b=c,c=this.xAxis;return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=(c=d.animation)&&!!a.animate&&b.renderer.isSVG&&m(c.duration,500)||0,f=a.visible?\"visible\":\"hidden\",g=d.zIndex,h=a.hasRendered,i=b.seriesGroup;c=a.plotGroup(\"group\",\"series\",f,g,i);a.markerGroup=a.plotGroup(\"markerGroup\",\"markers\",f,g,i);e&&a.animate(!0);a.getAttribs();c.inverted=a.isCartesian?b.inverted:!1;a.drawGraph&&(a.drawGraph(),\na.clipNeg());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();d.clip!==!1&&!a.sharedClipKey&&!h&&c.clip(b.clipRect);e&&a.animate();if(!h)e?a.animationTimeout=setTimeout(function(){a.afterAnimate()},e):a.afterAnimate();a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,\nheight:a.plotHeight}),c.animate({translateX:m(d&&d.left,a.plotLeft),translateY:m(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints&&this.setTooltipPoints(!0);this.render();b&&D(this,\"updatedData\")}};Hb.prototype={destroy:function(){Oa(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ia(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:\"hidden\"}):this.label=this.axis.chart.renderer.text(c,null,null,b.useHTML).css(b.style).attr({align:this.textAlign,\nrotation:b.rotation,visibility:\"hidden\"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(c.usePercentage?100:this.total,0,0,0,1),c=c.translate(0),c=M(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e[this.options.crop===!1||d.isInsidePlot(f.x,f.y)?\"show\":\"hide\"](!0)}};la.prototype.buildStacks=function(){var a=\nthis.series,b=m(this.options.reversedStacks,!0),c=a.length;if(!this.isXAxis){for(this.usePercentage=!1;c--;)a[b?c:a.length-c-1].setStackedPoints();if(this.usePercentage)for(c=0;c<a.length;c++)a[c].setPercentStacks()}};la.prototype.renderStackTotals=function(){var a=this.chart,b=a.renderer,c=this.stacks,d,e,f=this.stackTotalGroup;if(!f)this.stackTotalGroup=f=b.g(\"stack-labels\").attr({visibility:\"visible\",zIndex:6}).add();f.translate(a.plotLeft,a.plotTop);for(d in c)for(e in a=c[d],a)a[e].render(f)};\nO.prototype.setStackedPoints=function(){if(this.options.stacking&&!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.stack,e=e.stacking,h=this.stackKey,i=\"-\"+h,j=this.negStacks,k=this.yAxis,l=k.stacks,o=k.oldStacks,n,m,p,q,r,u;for(q=0;q<d;q++){r=a[q];u=b[q];p=this.index+\",\"+q;m=(n=j&&u<f)?i:h;l[m]||(l[m]={});if(!l[m][r])o[m]&&o[m][r]?(l[m][r]=o[m][r],l[m][r].total=null):l[m][r]=new Hb(k,\nk.options.stackLabels,n,r,g);m=l[m][r];m.points[p]=[m.cum||0];e===\"percent\"?(n=n?h:i,j&&l[n]&&l[n][r]?(n=l[n][r],m.total=n.total=v(n.total,m.total)+M(u)||0):m.total=da(m.total+(M(u)||0))):m.total=da(m.total+(u||0));m.cum=(m.cum||0)+(u||0);m.points[p].push(m.cum);c[q]=m.cum}if(e===\"percent\")k.usePercentage=!0;this.stackedYData=c;k.oldStacks={}}};O.prototype.setPercentStacks=function(){var a=this,b=a.stackKey,c=a.yAxis.stacks,d=a.processedXData;p([b,\"-\"+b],function(b){var e;for(var f=d.length,g,h;f--;)if(g=\nd[f],e=(h=c[b]&&c[b][g])&&h.points[a.index+\",\"+f],g=e)h=h.total?100/h.total:0,g[0]=da(g[0]*h),g[1]=da(g[1]*h),a.stackedYData[f]=g[1]})};q(Ya.prototype,{addSeries:function(a,b,c){var d,e=this;a&&(b=m(b,!0),D(e,\"addSeries\",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?\"xAxis\":\"yAxis\",f=this.options;new la(this,w(a,{index:this[e].length,isX:b}));f[e]=qa(f[e]||{});f[e].push(a);m(c,!0)&&this.redraw(d)},showLoading:function(a){var b=\nthis.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv=c=Y(Ja,{className:\"highcharts-loading\"},q(d.style,{zIndex:10,display:Q}),this.container),this.loadingSpan=Y(\"span\",null,d.labelStyle,c);this.loadingSpan.innerHTML=a||b.lang.loading;if(!this.loadingShown)G(c,{opacity:0,display:\"\",left:this.plotLeft+\"px\",top:this.plotTop+\"px\",width:this.plotWidth+\"px\",height:this.plotHeight+\"px\"}),kb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=\nthis.options,b=this.loadingDiv;b&&kb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){G(b,{display:Q})}});this.loadingShown=!1}});q(Ea.prototype,{update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=e.chart,j=e.options,b=m(b,!0);d.firePointEvent(\"update\",{options:a},function(){d.applyOptions(a);if(ca(a)){e.getAttribs();if(f)a&&a.marker&&a.marker.symbol?d.graphic=f.destroy():f.attr(d.pointAttr[d.state||\"\"]);if(a&&a.dataLabels&&d.dataLabel)d.dataLabel=d.dataLabel.destroy()}g=\nDa(d,h);e.updateParallelArrays(d,g);j.data[g]=d.options;e.isDirty=e.isDirtyData=!0;if(!e.fixedBox&&e.hasCartesianSeries)i.isDirtyBox=!0;j.legendType===\"point\"&&i.legend.destroyItem(d);b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.points,f=d.chart,g,h=d.data;Qa(b,f);a=m(a,!0);c.firePointEvent(\"remove\",null,function(){g=Da(c,h);h.length===e.length&&e.splice(g,1);h.splice(g,1);d.options.data.splice(g,1);d.updateParallelArrays(c,\"splice\",g,1);c.destroy();d.isDirty=!0;d.isDirtyData=\n!0;a&&f.redraw()})}});q(O.prototype,{addPoint:function(a,b,c,d){var e=this.options,f=this.data,g=this.graph,h=this.area,i=this.chart,j=this.xAxis&&this.xAxis.names,k=g&&g.shift||0,l=e.data,o,n=this.xData;Qa(d,i);c&&p([g,h,this.graphNeg,this.areaNeg],function(a){if(a)a.shift=k+1});if(h)h.isArea=!0;b=m(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);g=d.x;h=n.length;if(this.requireSorting&&g<n[h-1])for(o=!0;h&&n[h-1]>g;)h--;this.updateParallelArrays(d,\"splice\",h,0,0);this.updateParallelArrays(d,\nh);if(j)j[g]=d.name;l.splice(h,0,a);o&&(this.data.splice(h,0,null),this.processData());e.legendType===\"point\"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),this.updateParallelArrays(d,\"shift\"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},remove:function(a,b){var c=this,d=c.chart,a=m(a,!0);if(!c.isRemoving)c.isRemoving=!0,D(c,\"remove\",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=\n!1},update:function(a,b){var c=this.chart,d=this.type,e=F[d].prototype,f,a=w(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(f in e)e.hasOwnProperty(f)&&(this[f]=t);q(this,F[a.type||d].prototype);this.init(c,a);m(b,!0)&&c.redraw(!1)}});q(la.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=w(this.userOptions,a);this.destroy(!0);this._addedPlotLB=t;this.init(c,q(a,{events:t}));c.isDirtyBox=\n!0;m(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);ja(b.axes,this);ja(b[c],this);b.options[c].splice(this.options.index,1);p(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;m(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});ga=ka(O);F.line=ga;ba.area=w(S,{threshold:0});var pa=ka(O,{type:\"area\",getSegments:function(){var a=\n[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,o,n;if(this.options.stacking&&!this.cropped){for(o=0;o<j.length;o++)g[j[o].x]=j[o];for(n in f)f[n].total!==null&&c.push(+n);c.sort(function(a,b){return a-b});p(c,function(a){if(!k||g[a]&&g[a].y!==null)g[a]?b.push(g[a]):(h=d.translate(a),l=f[a].percent?f[a].total?f[a].cum*100/f[a].total:0:f[a].cum,i=e.toPixels(l,!0),b.push({y:null,plotX:h,clientX:h,plotY:i,yBottom:i,onMouseOver:sa}))});\nb.length&&a.push(b)}else O.prototype.getSegments.call(this),a=this.segments;this.segments=a},getSegmentPath:function(a){var b=O.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push(\"L\",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-1;d>=0;d--)g=m(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},\ncloseSegment:function(a,b,c){a.push(\"L\",b[b.length-1].plotX,c,\"L\",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];O.prototype.drawGraph.apply(this);var a=this,b=this.areaPath,c=this.options,d=c.negativeColor,e=c.negativeFillColor,f=[[\"area\",this.color,c.fillColor]];(d||e)&&f.push([\"areaNeg\",d,e]);p(f,function(d){var e=d[0],f=a[e];f?f.animate({d:b}):a[e]=a.chart.renderer.path(b).attr({fill:m(d[2],ya(d[1]).setOpacity(m(c.fillOpacity,0.75)).get()),zIndex:0}).add(a.group)})},drawLegendSymbol:N.drawRectangle});\nF.area=pa;ba.spline=w(S);ga=ka(O,{type:\"spline\",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(f&&g){a=f.plotY;j=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*e+a)/2.5;j=(1.5*d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=v(a,e),k=2*e-i):i<a&&i<e&&(i=C(a,e),k=2*e-i);k>g&&k>e?(k=v(g,e),i=2*e-k):k<g&&k<e&&(k=C(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=[\"C\",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=\nf.rightContY=null):b=[\"M\",d,e];return b}});F.spline=ga;ba.areaspline=w(ba.area);pa=pa.prototype;ga=ka(ga,{type:\"areaspline\",closedStacks:!0,getSegmentPath:pa.getSegmentPath,closeSegment:pa.closeSegment,drawGraph:pa.drawGraph,drawLegendSymbol:N.drawRectangle});F.areaspline=ga;ba.column=w(S,{borderColor:\"#FFFFFF\",borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1,halo:!1},select:{color:\"#C0C0C0\",borderColor:\"#000000\",\nshadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},stickyTracking:!1,tooltip:{distance:6},threshold:0});ga=ka(O,{type:\"column\",pointAttrToOptions:{stroke:\"borderColor\",fill:\"color\",r:\"borderRadius\"},cropShoulder:0,trackerGroups:[\"group\",\"dataLabelsGroup\"],negStacks:!0,init:function(){O.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=\nc.reversed,f,g={},h,i=0;b.grouping===!1?i=1:p(a.chart.series,function(b){var c=b.options,e=b.yAxis;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos===e.pos)c.stacking?(f=b.stackKey,g[f]===t&&(g[f]=i++),h=g[f]):c.grouping!==!1&&(h=i++),b.columnIndex=h});var c=C(M(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||c.tickInterval||1),c.len),j=c*b.groupPadding,k=(c-2*j)/i,l=b.pointWidth,b=r(l)?(k-l)/2:k*b.pointPadding,l=m(l,k-2*b);return a.columnMetrics={width:l,offset:b+(j+((e?i-(a.columnIndex||\n0):a.columnIndex)||0)*k-c/2)*(e?-1:1)}},translate:function(){var a=this,b=a.chart,c=a.options,d=a.borderWidth=m(c.borderWidth,a.activePointCount>0.5*a.xAxis.len?0:1),e=a.yAxis,f=a.translatedThreshold=e.getThreshold(c.threshold),g=m(c.minPointLength,5),c=a.getColumnMetrics(),h=c.width,i=a.barW=Ka(v(h,1+2*d)),j=a.pointXOffset=c.offset,k=-(d%2?0.5:0),l=d%2?0.5:1;b.renderer.isVML&&b.inverted&&(l+=1);O.prototype.translate.apply(a);p(a.points,function(c){var d=m(c.yBottom,f),p=C(v(-999-d,c.plotY),e.len+\n999+d),q=c.plotX+j,r=i,t=C(p,d),x;x=v(p,d)-t;M(x)<g&&g&&(x=g,t=u(M(t-f)>g?d-g:f-(e.translate(c.y,0,1,0,1)<=f?g:0)));c.barX=q;c.pointWidth=h;c.tooltipPos=b.inverted?[e.len-p,a.xAxis.len-q-r/2]:[q+r/2,p];d=M(q)<0.5;r=u(q+r)+k;q=u(q)+k;r-=q;p=M(t)<0.5;x=u(t+x)+l;t=u(t)+l;x-=t;d&&(q+=1,r-=1);p&&(t-=1,x+=1);c.shapeType=\"rect\";c.shapeArgs={x:q,y:t,width:r,height:x}})},getSymbol:sa,drawLegendSymbol:N.drawRectangle,drawGraph:sa,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=c.animationLimit||\n250,f,g,h;p(a.points,function(i){var j=i.plotY,k=i.graphic;if(j!==t&&!isNaN(j)&&i.y!==null)f=i.shapeArgs,h=r(a.borderWidth)?{\"stroke-width\":a.borderWidth}:{},g=i.pointAttr[i.selected?\"select\":\"\"]||a.pointAttr[\"\"],k?(bb(k),k.attr(h)[b.pointCount<e?\"animate\":\"attr\"](w(f))):i.graphic=d[i.shapeType](f).attr(g).attr(h).add(a.group).shadow(c.shadow,null,c.stacking&&!c.borderRadius);else if(k)i.graphic=k.destroy()})},animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(aa)a?\n(e.scaleY=0.001,a=C(b.pos+b.len,v(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?\"translateX\":\"translateY\"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type===a.type)b.isDirty=!0});O.prototype.remove.apply(a,arguments)}});F.column=ga;ba.bar=w(ba.column);pa=ka(ga,{type:\"bar\",inverted:!0});F.bar=pa;ba.scatter=w(S,{lineWidth:0,tooltip:{headerFormat:'<span style=\"color:{series.color}\">●</span> <span style=\"font-size: 10px;\"> {series.name}</span><br/>',\npointFormat:\"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>\"},stickyTracking:!1});pa=ka(O,{type:\"scatter\",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"markerGroup\"],takeOrdinalPosition:!1,singularTooltips:!0,drawGraph:function(){this.options.lineWidth&&O.prototype.drawGraph.call(this)}});F.scatter=pa;ba.pie=w(S,{borderColor:\"#FFFFFF\",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,\nlegendType:\"point\",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});S={type:\"pie\",isCartesian:!1,pointClass:ka(Ea,{init:function(){Ea.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;q(a,{visible:a.visible!==!1,name:m(a.name,\"Slice\")});b=function(b){a.slice(b.type===\"select\")};K(a,\"select\",b);K(a,\"unselect\",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart;b.visible=b.options.visible=\na=a===t?!b.visible:a;c.options.data[Da(b,c.data)]=b.options;p([\"graphic\",\"dataLabel\",\"connector\",\"shadowGroup\"],function(c){if(b[c])b[c][a?\"show\":\"hide\"](!0)});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;Qa(c,d.chart);m(b,!0);this.sliced=this.options.sliced=a=r(a)?a:!this.sliced;d.options.data[Da(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);\nthis.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var b=this.shapeArgs,c=this.series.chart;return this.series.chart.renderer.symbols.arc(c.plotLeft+b.x,c.plotTop+b.y,b.r+a,b.r+a,{innerR:this.shapeArgs.r,start:b.start,end:b.end})}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"group\",\"dataLabelsGroup\"],axisTypes:[],pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\"},singularTooltips:!0,getColor:sa,animate:function(a){var b=this,c=b.points,d=\nb.startAngleRad;if(!a)p(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b,c,d){O.prototype.setData.call(this,a,!1,c,d);this.processData();this.generatePoints();m(b,!0)&&this.chart.redraw(c)},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;O.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?\n0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0?e.y/b*100:0,e.total=b},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ma/180*(i-90),i=(this.endAngleRad=ma/180*(m(c.endAngle,i+360)-90))-j,k=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,o,n=k.length,p;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=U.asin(C((b-a[1])/(a[2]/2+l),1));return a[0]+(c?-1:1)*Z(h)*(a[2]/\n2+l)};for(o=0;o<n;o++){p=k[o];f=j+b*i;if(!c||p.visible)b+=p.percentage/100;g=j+b*i;p.shapeType=\"arc\";p.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:u(f*1E3)/1E3,end:u(g*1E3)/1E3};h=(g+f)/2;h>1.5*ma?h-=2*ma:h<-ma/2&&(h+=2*ma);p.slicedTranslation={translateX:u(Z(h)*d),translateY:u(ea(h)*d)};f=Z(h)*a[2]/2;g=ea(h)*a[2]/2;p.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];p.half=h<-ma/2||h>ma/2?1:0;p.angle=h;e=C(e,l/2);p.labelPos=[a[0]+f+Z(h)*l,a[1]+g+ea(h)*l,a[0]+f+Z(h)*e,a[1]+g+ea(h)*e,a[0]+f,a[1]+g,l<0?\n\"center\":p.half?\"right\":\"left\",h]}},drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g(\"shadow\").add(a.group);p(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g(\"shadow\").add(a.shadowGroup);c=h.sliced?h.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(q(g,c)):h.graphic=d=b[h.shapeType](g).setRadialReference(a.center).attr(h.pointAttr[h.selected?\"select\":\n\"\"]).attr({\"stroke-linejoin\":\"round\"}).attr(c).add(a.group).shadow(e,f);h.visible!==void 0&&h.setVisible(h.visible)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:N.drawRectangle,getCenter:X.getCenter,getSymbol:sa};S=ka(O,S);F.pie=S;O.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,e=a.points,f,g,h,i;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),i=a.plotGroup(\"dataLabelsGroup\",\n\"data-labels\",\"hidden\",d.zIndex||6),!a.hasRendered&&m(d.defer,!0)&&(i.attr({opacity:0}),K(a,\"afterAnimate\",function(){a.dataLabelsGroup.show()[b.animation?\"animate\":\"attr\"]({opacity:1},{duration:200})})),g=d,p(e,function(b){var e,l=b.dataLabel,o,n,p=b.connector,u=!0;f=b.options&&b.options.dataLabels;e=m(f&&f.enabled,g.enabled);if(l&&!e)b.dataLabel=l.destroy();else if(e){d=w(g,f);e=d.rotation;o=b.getLabelConfig();h=d.format?Ia(d.format,o):d.formatter.call(o,d);d.style.color=m(d.color,d.style.color,\na.color,\"black\");if(l)if(r(h))l.attr({text:h}),u=!1;else{if(b.dataLabel=l=l.destroy(),p)b.connector=p.destroy()}else if(r(h)){l={fill:d.backgroundColor,stroke:d.borderColor,\"stroke-width\":d.borderWidth,r:d.borderRadius||0,rotation:e,padding:d.padding,zIndex:1};for(n in l)l[n]===t&&delete l[n];l=b.dataLabel=a.chart.renderer[e?\"text\":\"label\"](h,0,-999,null,null,null,d.useHTML).attr(l).css(q(d.style,c&&{cursor:c})).add(i).shadow(d.shadow)}l&&a.alignDataLabel(b,l,d,null,u)}})};O.prototype.alignDataLabel=\nfunction(a,b,c,d,e){var f=this.chart,g=f.inverted,h=m(a.plotX,-999),i=m(a.plotY,-999),j=b.getBBox();if(a=this.visible&&(a.series.forceDL||f.isInsidePlot(h,u(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g)))d=q({x:g?f.plotWidth-i:h,y:u(g?f.plotHeight-h:i),width:0,height:0},d),q(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?\"attr\":\"animate\"](g)):(b.align(c,null,d),g=b.alignAttr,m(c.overflow,\"justify\")===\"justify\"?this.justifyDataLabel(b,\nc,g,j,d,e):m(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));if(!a)b.attr({y:-999}),b.placed=!1};O.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h===\"right\"?b.align=\"left\":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h===\"left\"?b.align=\"right\":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i===\"bottom\"?b.verticalAlign=\"top\":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i===\"top\"?b.verticalAlign=\"bottom\":b.y=g.plotHeight-\nj,k=!0;if(k)a.placed=!f,a.align(b,null,e)};if(F.pie)F.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=m(e.connectorPadding,10),g=m(e.connectorWidth,1),h=d.plotWidth,d=d.plotHeight,i,j,k=m(e.softConnector,!0),l=e.distance,o=a.center,n=o[2]/2,q=o[1],r=l>0,t,w,x,y,z=[[],[]],A,C,G,D,B,F=[0,0,0,0],N=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){O.prototype.drawDataLabels.apply(a);p(b,function(a){a.dataLabel&&a.visible&&z[a.half].push(a)});\nfor(D=0;!y&&b[D];)y=b[D]&&b[D].dataLabel&&(b[D].dataLabel.getBBox().height||21),D++;for(D=2;D--;){var b=[],K=[],H=z[D],I=H.length,E;a.sortByAngle(H,D-0.5);if(l>0){for(B=q-n-l;B<=q+n+l;B+=y)b.push(B);w=b.length;if(I>w){c=[].concat(H);c.sort(N);for(B=I;B--;)c[B].rank=B;for(B=I;B--;)H[B].rank>=w&&H.splice(B,1);I=H.length}for(B=0;B<I;B++){c=H[B];x=c.labelPos;c=9999;var Q,P;for(P=0;P<w;P++)Q=M(b[P]-x[1]),Q<c&&(c=Q,E=P);if(E<B&&b[B]!==null)E=B;else for(w<I-B+E&&b[B]!==null&&(E=w-I+B);b[E]===null;)E++;K.push({i:E,\ny:b[E]});b[E]=null}K.sort(N)}for(B=0;B<I;B++){c=H[B];x=c.labelPos;t=c.dataLabel;G=c.visible===!1?\"hidden\":\"visible\";c=x[1];if(l>0){if(w=K.pop(),E=w.i,C=w.y,c>C&&b[E+1]!==null||c<C&&b[E-1]!==null)C=c}else C=c;A=e.justify?o[0]+(D?-1:1)*(n+l):a.getX(E===0||E===b.length-1?c:C,D);t._attr={visibility:G,align:x[6]};t._pos={x:A+e.x+({left:f,right:-f}[x[6]]||0),y:C+e.y-10};t.connX=A;t.connY=C;if(this.options.size===null)w=t.width,A-w<f?F[3]=v(u(w-A+f),F[3]):A+w>h-f&&(F[1]=v(u(A+w-h+f),F[1])),C-y/2<0?F[0]=\nv(u(-C+y/2),F[0]):C+y/2>d&&(F[2]=v(u(C+y/2-d),F[2]))}}if(Ba(F)===0||this.verifyDataLabelOverflow(F))this.placeDataLabels(),r&&g&&p(this.points,function(b){i=b.connector;x=b.labelPos;if((t=b.dataLabel)&&t._pos)G=t._attr.visibility,A=t.connX,C=t.connY,j=k?[\"M\",A+(x[6]===\"left\"?5:-5),C,\"C\",A,C,2*x[2]-x[4],2*x[3]-x[5],x[2],x[3],\"L\",x[4],x[5]]:[\"M\",A+(x[6]===\"left\"?5:-5),C,\"L\",x[2],x[3],\"L\",x[4],x[5]],i?(i.animate({d:j}),i.attr(\"visibility\",G)):b.connector=i=a.chart.renderer.path(j).attr({\"stroke-width\":g,\nstroke:e.connectorColor||b.color||\"#606060\",visibility:G}).add(a.dataLabelsGroup);else if(i)b.connector=i.destroy()})}},F.pie.prototype.placeDataLabels=function(){p(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?\"animate\":\"attr\"](b),a.moved=!0):a&&a.attr({y:-999})})},F.pie.prototype.alignDataLabel=sa,F.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||80,f;d[0]!==null?e=v(b[2]-v(a[1],a[3]),c):(e=v(b[2]-\na[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=v(C(e,b[2]-v(a[0],a[2])),c):(e=v(C(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);e<b[2]?(b[2]=e,this.translate(b),p(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels&&this.drawDataLabels()):f=!0;return f};if(F.column)F.column.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=a.dlBox||a.shapeArgs,i=a.below||a.plotY>m(this.translatedThreshold,f.plotSizeY),j=m(c.inside,!!this.options.stacking);if(h&&\n(d=w(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=m(c.align,!g||j?\"center\":i?\"right\":\"left\");c.verticalAlign=m(c.verticalAlign,g||j?\"middle\":i?\"top\":\"bottom\");O.prototype.alignDataLabel.call(this,a,b,c,d,e)};S=R.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver();\nfor(;d&&!e;)e=d.point,d=d.parentNode;if(e!==t&&e!==b.hoverPoint)e.onMouseOver(c)};p(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)p(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass(\"highcharts-tracker\").on(\"mouseover\",f).on(\"mouseout\",function(a){c.onTrackerMouseOut(a)}).css(e),$a))a[b].on(\"touchstart\",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:\na.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},q=\"rgba(192,192,192,\"+(aa?1.0E-4:0.002)+\")\";if(e&&!c)for(m=e+1;m--;)d[m]===\"M\"&&d.splice(m+1,0,d[m+1]-i,d[m+2],\"L\"),(m&&d[m]===\"M\"||m===e)&&d.splice(m,0,\"L\",d[m-2]+i,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push(\"M\",e.plotX-i,e.plotY,\"L\",e.plotX+i,e.plotY);j?j.attr({d:d}):(a.tracker=h.path(d).attr({\"stroke-linejoin\":\"round\",\nvisibility:a.visible?\"visible\":\"hidden\",stroke:q,fill:c?q:Q,\"stroke-width\":b.lineWidth+(c?0:2*i),zIndex:2}).add(a.group),p([a.tracker,a.markerGroup],function(a){a.addClass(\"highcharts-tracker\").on(\"mouseover\",n).on(\"mouseout\",function(a){g.onTrackerMouseOut(a)}).css(l);if($a)a.on(\"touchstart\",n)}))}};if(F.column)ga.prototype.drawTracker=S.drawTrackerPoint;if(F.pie)F.pie.prototype.drawTracker=S.drawTrackerPoint;if(F.scatter)pa.prototype.drawTracker=S.drawTrackerPoint;q(lb.prototype,{setItemEvents:function(a,\nb,c,d,e){var f=this;(c?b:a.legendGroup).on(\"mouseover\",function(){a.setState(\"hover\");b.css(f.options.itemHoverStyle)}).on(\"mouseout\",function(){b.css(a.visible?d:e);a.setState()}).on(\"click\",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent(\"legendItemClick\",b,c):D(a,\"legendItemClick\",b,c)})},createCheckboxForItem:function(a){a.checkbox=Y(\"input\",{type:\"checkbox\",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,this.chart.container);\nK(a.checkbox,\"click\",function(b){D(a,\"checkboxClick\",{checked:b.target.checked},function(){a.select()})})}});E.legend.itemStyle.cursor=\"pointer\";q(Ya.prototype,{showResetZoom:function(){var a=this,b=E.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo===\"chart\"?null:\"plotBox\";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=\nthis;D(a,\"selection\",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?p(this.axes,function(a){b=a.zoom()}):p(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?\"zoomX\":\"zoomY\"]||c[h?\"pinchX\":\"pinchY\"])b=e.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom();else if(!d&&ca(e))this.resetZoomButton=e.destroy();b&&this.redraw(m(this.options.chart.animation,a&&a.animation,this.pointCount<\n100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&p(d,function(a){a.setState()});p(b===\"xy\"?[1,0]:[1],function(b){var d=a[b?\"chartX\":\"chartY\"],h=c[b?\"xAxis\":\"yAxis\"][0],i=c[b?\"mouseDownX\":\"mouseDownY\"],j=(h.pointRange||0)/2,k=h.getExtremes(),l=h.toValue(i-d,!0)+j,i=h.toValue(i+c[b?\"plotWidth\":\"plotHeight\"]-d,!0)-j;h.series.length&&l>C(k.dataMin,k.min)&&i<v(k.dataMax,k.max)&&(h.setExtremes(l,i,!1,!1,{trigger:\"pan\"}),e=!0);c[b?\"mouseDownX\":\"mouseDownY\"]=d});e&&c.redraw(!1);G(c.container,{cursor:\"move\"})}});\nq(Ea.prototype,{select:function(a,b){var c=this,d=c.series,e=d.chart,a=m(a,!c.selected);c.firePointEvent(a?\"select\":\"unselect\",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[Da(c,d.data)]=c.options;c.setState(a&&\"select\");b||p(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[Da(a,d.data)]=a.options,a.setState(\"\"),a.firePointEvent(\"unselect\")})})},onMouseOver:function(a){var b=this.series,c=b.chart,d=c.tooltip,e=c.hoverPoint;\nif(e&&e!==this)e.onMouseOut();this.firePointEvent(\"mouseOver\");d&&(!d.shared||b.noSharedTooltip)&&d.refresh(this,a);this.setState(\"hover\");c.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;if(!b||Da(this,b)===-1)this.firePointEvent(\"mouseOut\"),this.setState(),a.hoverPoint=null},importEvents:function(){if(!this.hasImportedEvents){var a=w(this.series.options.point,this.options).events,b;this.events=a;for(b in a)K(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a,\nb){var c=this.plotX,d=this.plotY,e=this.series,f=e.options.states,g=ba[e.type].marker&&e.options.marker,h=g&&!g.enabled,i=g&&g.states[a],j=i&&i.enabled===!1,k=e.stateMarkerGraphic,l=this.marker||{},m=e.chart,n=e.halo,p,a=a||\"\";p=this.pointAttr[a]||e.pointAttr[a];if(!(a===this.state&&!b||this.selected&&a!==\"select\"||f[a]&&f[a].enabled===!1||a&&(j||h&&i.enabled===!1)||a&&l.states&&l.states[a]&&l.states[a].enabled===!1)){if(this.graphic)g=g&&this.graphic.symbolName&&p.r,this.graphic.attr(w(p,g?{x:c-\ng,y:d-g,width:2*g,height:2*g}:{})),k&&k.hide();else{if(a&&i)if(g=i.radius,l=l.symbol||e.symbol,k&&k.currentSymbol!==l&&(k=k.destroy()),k)k[b?\"animate\":\"attr\"]({x:c-g,y:d-g});else if(l)e.stateMarkerGraphic=k=m.renderer.symbol(l,c-g,d-g,2*g,2*g).attr(p).add(e.markerGroup),k.currentSymbol=l;if(k)k[a&&m.isInsidePlot(c,d,m.inverted)?\"show\":\"hide\"]()}if((c=f[a]&&f[a].halo)&&c.size){if(!n)e.halo=n=m.renderer.path().add(e.seriesGroup);n.attr(q({fill:ya(this.color||e.color).setOpacity(c.opacity).get()},c.attributes))[b?\n\"animate\":\"attr\"]({d:this.haloPath(c.size)})}else n&&n.attr({d:[]});this.state=a}},haloPath:function(a){var b=this.series,c=b.chart,d=b.getPlotBox(),e=c.inverted;return c.renderer.symbols.circle(d.translateX+(e?b.yAxis.len-this.plotY:this.plotX)-a,d.translateY+(e?b.xAxis.len-this.plotX:this.plotY)-a,a*2,a*2)}});q(O.prototype,{onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&D(this,\"mouseOver\");this.setState(\"hover\");a.hoverSeries=\nthis},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&D(this,\"mouseOut\");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState();b.hoverSeries=null},setState:function(a){var b=this.options,c=this.graph,d=this.graphNeg,e=b.states,b=b.lineWidth,a=a||\"\";if(this.state!==a)this.state=a,e[a]&&e[a].enabled===!1||(a&&(b=e[a].lineWidth||b+1),c&&!c.dashstyle&&(a={\"stroke-width\":b},c.attr(a),d&&d.attr(a)))},\nsetVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===t?!h:a)?\"show\":\"hide\";p([\"group\",\"dataLabelsGroup\",\"markerGroup\",\"tracker\"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&p(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});p(c.linkedSeries,function(b){b.setVisible(a,!1)});if(g)d.isDirtyBox=!0;\nb!==!1&&d.redraw();D(c,f)},setTooltipPoints:function(a){var b=[],c,d,e=this.xAxis,f=e&&e.getExtremes(),g=e?e.tooltipLen||e.len:this.chart.plotSizeX,h,i,j=[];if(!(this.options.enableMouseTracking===!1||this.singularTooltips)){if(a)this.tooltipPoints=null;p(this.segments||this.points,function(a){b=b.concat(a)});e&&e.reversed&&(b=b.reverse());this.orderTooltipPoints&&this.orderTooltipPoints(b);a=b.length;for(i=0;i<a;i++)if(e=b[i],c=e.x,c>=f.min&&c<=f.max){h=b[i+1];c=d===t?0:d+1;for(d=b[i+1]?C(v(0,T((e.clientX+\n(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===t?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;D(this,a?\"select\":\"unselect\")},drawTracker:S.drawTrackerGraph});q(R,{Axis:la,Chart:Ya,Color:ya,Point:Ea,Tick:Sa,Renderer:Za,Series:O,SVGElement:P,SVGRenderer:ta,arrayMin:Na,arrayMax:Ba,charts:V,dateFormat:cb,format:Ia,pathAnim:ub,getOptions:function(){return E},\nhasBidiBug:Nb,isTouchDevice:Jb,numberFormat:Ga,seriesTypes:F,setOptions:function(a){E=w(!0,E,a);Cb();return E},addEvent:K,removeEvent:W,createElement:Y,discardElement:Pa,css:G,each:p,extend:q,map:Ua,merge:w,pick:m,splat:qa,extendClass:ka,pInt:z,wrap:Ma,svg:aa,canvas:fa,vml:!aa&&!fa,product:\"Highcharts\",version:\"4.0.1\"})})();\n"
  },
  {
    "path": "static/lib/charts/sand-signika.js",
    "content": "/**\n * Sand-Signika theme for Highcharts JS\n * @author Torstein Honsi\n */\n\n\n\n// Add the background image to the container\nHighcharts.wrap(Highcharts.Chart.prototype, 'getContainer', function (proceed) {\n\tproceed.call(this);\n\tthis.container.style.background = 'url(http://www.highcharts.com/samples/graphics/sand.png)';\n});\n\n\nHighcharts.theme = {\n\tcolors: [\"#f45b5b\", \"#8085e9\", \"#8d4654\", \"#7798BF\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\tchart: {\n\t\tbackgroundColor: null,\n\t\tstyle: {\n\t\t\tfontFamily: \"Signika, serif\"\n\t\t}\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: 'black',\n\t\t\tfontSize: '16px',\n\t\t\tfontWeight: 'bold'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: 'black'\n\t\t}\n\t},\n\ttooltip: {\n\t\tborderWidth: 0\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfontWeight: 'bold',\n\t\t\tfontSize: '13px'\n\t\t}\n\t},\n\txAxis: {\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#6e6e70'\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#6e6e70'\n\t\t\t}\n\t\t}\n\t},\n\tplotOptions: {\n\t\tseries: {\n\t\t\tshadow: true\n\t\t},\n\t\tcandlestick: {\n\t\t\tlineColor: '#404048'\n\t\t}\n\t},\n\n\t// Highstock specific\n\tnavigator: {\n\t\txAxis: {\n\t\t\tgridLineColor: '#D0D0D8'\n\t\t}\n\t},\n\trangeSelector: {\n\t\tbuttonTheme: {\n\t\t\tfill: 'white',\n\t\t\tstroke: '#C0C0C8',\n\t\t\t'stroke-width': 1,\n\t\t\tstates: {\n\t\t\t\tselect: {\n\t\t\t\t\tfill: '#D0D0D8'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tscrollbar: {\n\t\ttrackBorderColor: '#C0C0C8'\n\t},\n\n\t// General\n\tbackground2: '#E0E0E8'\n\t\n};\n\n// Apply the theme\nHighcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "static/lib/jquery/jquery.datetimepicker.js",
    "content": "/**\n * @preserve jQuery DateTimePicker plugin v2.4.1\n * @homepage http://xdsoft.net/jqplugins/datetimepicker/\n * (c) 2014, Chupurnov Valeriy.\n */\n/*global document,window,jQuery,setTimeout,clearTimeout*/\n(function ($) {\n\t'use strict';\n\tvar default_options  = {\n\t\ti18n: {\n\t\t\tar: { // Arabic\n\t\t\t\tmonths: [\n\t\t\t\t\t\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"مايو\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"ن\", \"ث\", \"ع\", \"خ\", \"ج\", \"س\", \"ح\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tro: { // Romanian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"ianuarie\", \"februarie\", \"martie\", \"aprilie\", \"mai\", \"iunie\", \"iulie\", \"august\", \"septembrie\", \"octombrie\", \"noiembrie\", \"decembrie\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"l\", \"ma\", \"mi\", \"j\", \"v\", \"s\", \"d\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tid: { // Indonesian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\", \"Min\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tbg: { // Bulgarian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tfa: { // Persian/Farsi\n\t\t\t\tmonths: [\n\t\t\t\t\t'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'\n\t\t\t\t]\n\t\t\t},\n\t\t\tru: { // Russian\n\t\t\t\tmonths: [\n\t\t\t\t\t'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Вск\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tuk: { // Ukrainian\n\t\t\t\tmonths: [\n\t\t\t\t\t'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Ндл\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Сбт\"\n\t\t\t\t]\n\t\t\t},\n\t\t\ten: { // English\n\t\t\t\tmonths: [\n\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tel: { // Ελληνικά\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tde: { // German\n\t\t\t\tmonths: [\n\t\t\t\t\t'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tnl: { // Dutch\n\t\t\t\tmonths: [\n\t\t\t\t\t\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"\n\t\t\t\t]\n\t\t\t},\n\t\t\ttr: { // Turkish\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Paz\", \"Pts\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cts\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tfr: { //French\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tes: { // Spanish\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tth: { // Thai\n\t\t\t\tmonths: [\n\t\t\t\t\t'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'\n\t\t\t\t]\n\t\t\t},\n\t\t\tpl: { // Polish\n\t\t\t\tmonths: [\n\t\t\t\t\t\"styczeń\", \"luty\", \"marzec\", \"kwiecień\", \"maj\", \"czerwiec\", \"lipiec\", \"sierpień\", \"wrzesień\", \"październik\", \"listopad\", \"grudzień\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"nd\", \"pn\", \"wt\", \"śr\", \"cz\", \"pt\", \"sb\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tpt: { // Portuguese\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tch: { // Simplified Chinese\n\t\t\t\tmonths: [\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tse: { // Swedish\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\",  \"Oktober\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tkr: { // Korean\n\t\t\t\tmonths: [\n\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tit: { // Italian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tda: { // Dansk\n\t\t\t\tmonths: [\n\t\t\t\t\t\"January\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"July\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tno: { // Norwegian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tja: { // Japanese\n\t\t\t\tmonths: [\n\t\t\t\t\t\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tvi: { // Vietnamese\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Tháng 1\", \"Tháng 2\", \"Tháng 3\", \"Tháng 4\", \"Tháng 5\", \"Tháng 6\", \"Tháng 7\", \"Tháng 8\", \"Tháng 9\", \"Tháng 10\", \"Tháng 11\", \"Tháng 12\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tsl: { // Slovenščina\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tcs: { // Čeština\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"\n\t\t\t\t]\n\t\t\t},\n\t\t\thu: { // Hungarian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Cs\", \"Pé\", \"Szo\"\n\t\t\t\t]\n\t\t\t},\n\t\t\taz: { //Azerbaijanian (Azeri)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Yanvar\", \"Fevral\", \"Mart\", \"Aprel\", \"May\", \"Iyun\", \"Iyul\", \"Avqust\", \"Sentyabr\", \"Oktyabr\", \"Noyabr\", \"Dekabr\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"B\", \"Be\", \"Ça\", \"Ç\", \"Ca\", \"C\", \"Ş\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tbs: { //Bosanski\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tca: { //Català\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Dg\", \"Dl\", \"Dt\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"\n\t\t\t\t]\n\t\t\t},\n\t\t\t'en-GB': { //English (British)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tet: { //\"Eesti\"\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Jaanuar\", \"Veebruar\", \"Märts\", \"Aprill\", \"Mai\", \"Juuni\", \"Juuli\", \"August\", \"September\", \"Oktoober\", \"November\", \"Detsember\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\"\n\t\t\t\t]\n\t\t\t},\n\t\t\teu: { //Euskara\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Urtarrila\", \"Otsaila\", \"Martxoa\", \"Apirila\", \"Maiatza\", \"Ekaina\", \"Uztaila\", \"Abuztua\", \"Iraila\", \"Urria\", \"Azaroa\", \"Abendua\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Ig.\", \"Al.\", \"Ar.\", \"Az.\", \"Og.\", \"Or.\", \"La.\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tfi: { //Finnish (Suomi)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kesäkuu\", \"Heinäkuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tgl: { //Galego\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Xan\", \"Feb\", \"Maz\", \"Abr\", \"Mai\", \"Xun\", \"Xul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dec\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Xov\", \"Ven\", \"Sab\"\n\t\t\t\t]\n\t\t\t},\n\t\t\thr: { //Hrvatski\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tko: { //Korean (한국어)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tlt: { //Lithuanian (lietuvių)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Sausio\", \"Vasario\", \"Kovo\", \"Balandžio\", \"Gegužės\", \"Birželio\", \"Liepos\", \"Rugpjūčio\", \"Rugsėjo\", \"Spalio\", \"Lapkričio\", \"Gruodžio\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Sek\", \"Pir\", \"Ant\", \"Tre\", \"Ket\", \"Pen\", \"Šeš\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tlv: { //Latvian (Latviešu)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis \", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Sv\", \"Pr\", \"Ot\", \"Tr\", \"Ct\", \"Pk\", \"St\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tmk: { //Macedonian (Македонски)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tmn: { //Mongolian (Монгол)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"1-р сар\", \"2-р сар\", \"3-р сар\", \"4-р сар\", \"5-р сар\", \"6-р сар\", \"7-р сар\", \"8-р сар\", \"9-р сар\", \"10-р сар\", \"11-р сар\", \"12-р сар\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Дав\", \"Мяг\", \"Лха\", \"Пүр\", \"Бсн\", \"Бям\", \"Ням\"\n\t\t\t\t]\n\t\t\t},\n\t\t\t'pt-BR': { //Português(Brasil)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tsk: { //Slovenčina\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tsq: { //Albanian (Shqip)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t]\n\t\t\t},\n\t\t\t'sr-YU': { //Serbian (Srpski)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"čet\", \"Pet\", \"Sub\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tsr: { //Serbian Cyrillic (Српски)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"јануар\", \"фебруар\", \"март\", \"април\", \"мај\", \"јун\", \"јул\", \"август\", \"септембар\", \"октобар\", \"новембар\", \"децембар\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"нед\", \"пон\", \"уто\", \"сре\", \"чет\", \"пет\", \"суб\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tsv: { //Svenska\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t]\n\t\t\t},\n\t\t\t'zh-TW': { //Traditional Chinese (繁體中文)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tzh: { //Simplified Chinese (简体中文)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t]\n\t\t\t},\n\t\t\the: { //Hebrew (עברית)\n\t\t\t\tmonths: [\n\t\t\t\t\t'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t'א\\'', 'ב\\'', 'ג\\'', 'ד\\'', 'ה\\'', 'ו\\'', 'שבת'\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\tvalue: '',\n\t\tlang: 'en',\n\n\t\tformat:\t'Y/m/d H:i',\n\t\tformatTime:\t'H:i',\n\t\tformatDate:\t'Y/m/d',\n\n\t\tstartDate:\tfalse, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',\n\t\tstep: 60,\n\t\tmonthChangeSpinner: true,\n\n\t\tcloseOnDateSelect: false,\n\t\tcloseOnWithoutClick: true,\n\t\tcloseOnInputClick: true,\n\n\t\ttimepicker: true,\n\t\tdatepicker: true,\n\t\tweeks: false,\n\n\t\tdefaultTime: false,\t// use formatTime format (ex. '10:00' for formatTime:\t'H:i')\n\t\tdefaultDate: false,\t// use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')\n\n\t\tminDate: false,\n\t\tmaxDate: false,\n\t\tminTime: false,\n\t\tmaxTime: false,\n\n\t\tallowTimes: [],\n\t\topened: false,\n\t\tinitTime: true,\n\t\tinline: false,\n\t\ttheme: '',\n\n\t\tonSelectDate: function () {},\n\t\tonSelectTime: function () {},\n\t\tonChangeMonth: function () {},\n\t\tonChangeYear: function () {},\n\t\tonChangeDateTime: function () {},\n\t\tonShow: function () {},\n\t\tonClose: function () {},\n\t\tonGenerate: function () {},\n\n\t\twithoutCopyright: true,\n\t\tinverseButton: false,\n\t\thours12: false,\n\t\tnext:\t'xdsoft_next',\n\t\tprev : 'xdsoft_prev',\n\t\tdayOfWeekStart: 0,\n\t\tparentID: 'body',\n\t\ttimeHeightInTimePicker: 25,\n\t\ttimepickerScrollbar: true,\n\t\ttodayButton: true,\n\t\tdefaultSelect: true,\n\n\t\tscrollMonth: true,\n\t\tscrollTime: true,\n\t\tscrollInput: true,\n\n\t\tlazyInit: false,\n\t\tmask: false,\n\t\tvalidateOnBlur: true,\n\t\tallowBlank: true,\n\t\tyearStart: 1950,\n\t\tyearEnd: 2050,\n\t\tstyle: '',\n\t\tid: '',\n\t\tfixed: false,\n\t\troundTime: 'round', // ceil, floor\n\t\tclassName: '',\n\t\tweekends: [],\n\t\tdisabledDates : [],\n\t\tyearOffset: 0,\n\t\tbeforeShowDay: null,\n\n\t\tenterLikeTab: true\n\t};\n\t// fix for ie8\n\tif (!Array.prototype.indexOf) {\n\t\tArray.prototype.indexOf = function (obj, start) {\n\t\t\tvar i, j;\n\t\t\tfor (i = (start || 0), j = this.length; i < j; i += 1) {\n\t\t\t\tif (this[i] === obj) { return i; }\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\t}\n\tDate.prototype.countDaysInMonth = function () {\n\t\treturn new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();\n\t};\n\t$.fn.extend ( \"xdsoftScroller\"   ,  function (percent) {\n\t\treturn this.each(function () {\n\t\t\tvar timeboxparent = $(this),\n\t\t\t\tpointerEventToXY = function (e) {\n\t\t\t\t\tvar out = {x: 0, y: 0},\n\t\t\t\t\t\ttouch;\n\t\t\t\t\tif (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {\n\t\t\t\t\t\ttouch  = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];\n\t\t\t\t\t\tout.x = touch.clientX;\n\t\t\t\t\t\tout.y = touch.clientY;\n\t\t\t\t\t} else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {\n\t\t\t\t\t\tout.x = e.clientX;\n\t\t\t\t\t\tout.y = e.clientY;\n\t\t\t\t\t}\n\t\t\t\t\treturn out;\n\t\t\t\t},\n\t\t\t\tmove = 0,\n\t\t\t\ttimebox,\n\t\t\t\tparentHeight,\n\t\t\t\theight,\n\t\t\t\tscrollbar,\n\t\t\t\tscroller,\n\t\t\t\tmaximumOffset = 100,\n\t\t\t\tstart = false,\n\t\t\t\tstartY = 0,\n\t\t\t\tstartTop = 0,\n\t\t\t\th1 = 0,\n\t\t\t\ttouchStart = false,\n\t\t\t\tstartTopScroll = 0,\n\t\t\t\tcalcOffset = function () {};\n\t\t\tif (percent === 'hide') {\n\t\t\t\ttimeboxparent.find('.xdsoft_scrollbar').hide();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!$(this).hasClass('xdsoft_scroller_box')) {\n\t\t\t\ttimebox = timeboxparent.children().eq(0);\n\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\tscrollbar = $('<div class=\"xdsoft_scrollbar\"></div>');\n\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>');\n\t\t\t\tscrollbar.append(scroller);\n\n\t\t\t\ttimeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);\n\t\t\t\tcalcOffset = function calcOffset(event) {\n\t\t\t\t\tvar offset = pointerEventToXY(event).y - startY + startTopScroll;\n\t\t\t\t\tif (offset < 0) {\n\t\t\t\t\t\toffset = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (offset + scroller[0].offsetHeight > h1) {\n\t\t\t\t\t\toffset = h1 - scroller[0].offsetHeight;\n\t\t\t\t\t}\n\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);\n\t\t\t\t};\n\n\t\t\t\tscroller\n\t\t\t\t\t.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {\n\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstartY = pointerEventToXY(event).y;\n\t\t\t\t\t\tstartTopScroll = parseInt(scroller.css('margin-top'), 10);\n\t\t\t\t\t\th1 = scrollbar[0].offsetHeight;\n\n\t\t\t\t\t\tif (event.type === 'mousedown') {\n\t\t\t\t\t\t\tif (document) {\n\t\t\t\t\t\t\t\t$(document.body).addClass('xdsoft_noselect');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft_scroller', function arguments_callee() {\n\t\t\t\t\t\t\t\t$([document.body, window]).off('mouseup.xdsoft_scroller', arguments_callee)\n\t\t\t\t\t\t\t\t\t.off('mousemove.xdsoft_scroller', calcOffset)\n\t\t\t\t\t\t\t\t\t.removeClass('xdsoft_noselect');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t$(document.body).on('mousemove.xdsoft_scroller', calcOffset);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttouchStart = true;\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('touchmove', function (event) {\n\t\t\t\t\t\tif (touchStart) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tcalcOffset(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('touchend touchcancel', function (event) {\n\t\t\t\t\t\ttouchStart =  false;\n\t\t\t\t\t\tstartTopScroll = 0;\n\t\t\t\t\t});\n\n\t\t\t\ttimeboxparent\n\t\t\t\t\t.on('scroll_element.xdsoft_scroller', function (event, percentage) {\n\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpercentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;\n\n\t\t\t\t\t\tscroller.css('margin-top', maximumOffset * percentage);\n\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\ttimebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t})\n\t\t\t\t\t.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {\n\t\t\t\t\t\tvar percent, sh;\n\t\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\tpercent = parentHeight / height;\n\t\t\t\t\t\tsh = percent * scrollbar[0].offsetHeight;\n\t\t\t\t\t\tif (percent > 1) {\n\t\t\t\t\t\t\tscroller.hide();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tscroller.show();\n\t\t\t\t\t\t\tscroller.css('height', parseInt(sh > 10 ? sh : 10, 10));\n\t\t\t\t\t\t\tmaximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;\n\t\t\t\t\t\t\tif (noTriggerScroll !== true) {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\ttimeboxparent.on('mousewheel', function (event) {\n\t\t\t\t\tvar top = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\n\t\t\t\t\ttop = top - (event.deltaY * 20);\n\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t\ttimeboxparent.on('touchstart', function (event) {\n\t\t\t\t\tstart = pointerEventToXY(event);\n\t\t\t\t\tstartTop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t});\n\n\t\t\t\ttimeboxparent.on('touchmove', function (event) {\n\t\t\t\t\tif (start) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tvar coord = pointerEventToXY(event);\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\ttimeboxparent.on('touchend touchcancel', function (event) {\n\t\t\t\t\tstart = false;\n\t\t\t\t\tstartTop = 0;\n\t\t\t\t});\n\t\t\t}\n\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t});\n\t});\n\n\t$.fn.extend ( \"datetimepicker\" , function (opt) {\n\t\tvar KEY0 = 48,\n\t\t\tKEY9 = 57,\n\t\t\t_KEY0 = 96,\n\t\t\t_KEY9 = 105,\n\t\t\tCTRLKEY = 17,\n\t\t\tDEL = 46,\n\t\t\tENTER = 13,\n\t\t\tESC = 27,\n\t\t\tBACKSPACE = 8,\n\t\t\tARROWLEFT = 37,\n\t\t\tARROWUP = 38,\n\t\t\tARROWRIGHT = 39,\n\t\t\tARROWDOWN = 40,\n\t\t\tTAB = 9,\n\t\t\tF5 = 116,\n\t\t\tAKEY = 65,\n\t\t\tCKEY = 67,\n\t\t\tVKEY = 86,\n\t\t\tZKEY = 90,\n\t\t\tYKEY = 89,\n\t\t\tctrlDown\t=\tfalse,\n\t\t\toptions = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),\n\n\t\t\tlazyInitTimer = 0,\n\t\t\tcreateDateTimePicker,\n\t\t\tdestroyDateTimePicker,\n\t\t\t_xdsoft_datetime,\n\n\t\t\tlazyInit = function (input) {\n\t\t\t\tinput\n\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function initOnActionCallback(event) {\n\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearTimeout(lazyInitTimer);\n\t\t\t\t\t\tlazyInitTimer = setTimeout(function () {\n\n\t\t\t\t\t\t\tif (!input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\t\tcreateDateTimePicker(input);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t\t.off('open.xdsoft focusin.xdsoft mousedown.xdsoft', initOnActionCallback)\n\t\t\t\t\t\t\t\t.trigger('open.xdsoft');\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t});\n\t\t\t};\n\n\t\tcreateDateTimePicker = function (input) {\n\t\t\tvar datetimepicker = $('<div ' + (options.id ? 'id=\"' + options.id + '\"' : '') + ' ' + (options.style ? 'style=\"' + options.style + '\"' : '') + ' class=\"xdsoft_datetimepicker xdsoft_' + options.theme + ' xdsoft_noselect ' + (options.weeks ? ' xdsoft_showweeks' : '') + options.className + '\"></div>'),\n\t\t\t\txdsoft_copyright = $('<div class=\"xdsoft_copyright\"><a target=\"_blank\" href=\"http://xdsoft.net/jqplugins/datetimepicker/\">xdsoft.net</a></div>'),\n\t\t\t\tdatepicker = $('<div class=\"xdsoft_datepicker active\"></div>'),\n\t\t\t\tmounth_picker = $('<div class=\"xdsoft_mounthpicker\"><button type=\"button\" class=\"xdsoft_prev\"></button><button type=\"button\" class=\"xdsoft_today_button\"></button>' +\n\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_month\"><span></span><i></i></div>' +\n\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_year\"><span></span><i></i></div>' +\n\t\t\t\t\t'<button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\tcalendar = $('<div class=\"xdsoft_calendar\"></div>'),\n\t\t\t\ttimepicker = $('<div class=\"xdsoft_timepicker active\"><button type=\"button\" class=\"xdsoft_prev\"></button><div class=\"xdsoft_time_box\"></div><button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\ttimeboxparent = timepicker.find('.xdsoft_time_box').eq(0),\n\t\t\t\ttimebox = $('<div class=\"xdsoft_time_variant\"></div>'),\n\t\t\t\t/*scrollbar = $('<div class=\"xdsoft_scrollbar\"></div>'),\n\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>'),*/\n\t\t\t\tmonthselect = $('<div class=\"xdsoft_select xdsoft_monthselect\"><div></div></div>'),\n\t\t\t\tyearselect = $('<div class=\"xdsoft_select xdsoft_yearselect\"><div></div></div>'),\n\t\t\t\ttriggerAfterOpen = false,\n\t\t\t\tXDSoft_datetime,\n\t\t\t\t//scroll_element,\n\t\t\t\txchangeTimer,\n\t\t\t\ttimerclick,\n\t\t\t\tcurrent_time_index,\n\t\t\t\tsetPos,\n\t\t\t\ttimer = 0,\n\t\t\t\ttimer1 = 0;\n\n\t\t\tmounth_picker\n\t\t\t\t.find('.xdsoft_month span')\n\t\t\t\t\t.after(monthselect);\n\t\t\tmounth_picker\n\t\t\t\t.find('.xdsoft_year span')\n\t\t\t\t\t.after(yearselect);\n\n\t\t\tmounth_picker\n\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\tvar select = $(this).find('.xdsoft_select').eq(0),\n\t\t\t\t\t\tval = 0,\n\t\t\t\t\t\ttop = 0,\n\t\t\t\t\t\tvisible = select.is(':visible'),\n\t\t\t\t\t\titems,\n\t\t\t\t\t\ti;\n\n\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t\t.hide();\n\t\t\t\t\tif (_xdsoft_datetime.currentTime) {\n\t\t\t\t\t\tval = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();\n\t\t\t\t\t}\n\n\t\t\t\t\tselect[visible ? 'hide' : 'show']();\n\t\t\t\t\tfor (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {\n\t\t\t\t\t\tif (items.eq(i).data('value') === val) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttop += items[0].offsetHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tselect.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\tmounth_picker\n\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t.xdsoftScroller()\n\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t})\n\t\t\t\t.on('mousedown.xdsoft', '.xdsoft_option', function (event) {\n\t\t\t\t\tvar year = _xdsoft_datetime.currentTime.getFullYear();\n\t\t\t\t\tif (_xdsoft_datetime && _xdsoft_datetime.currentTime) {\n\t\t\t\t\t\t_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));\n\t\t\t\t\t}\n\n\t\t\t\t\t$(this).parent().parent().hide();\n\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tdatetimepicker.setOptions = function (_options) {\n\t\t\t\toptions = $.extend(true, {}, options, _options);\n\n\t\t\t\tif (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {\n\t\t\t\t\toptions.allowTimes = $.extend(true, [], _options.allowTimes);\n\t\t\t\t}\n\n\t\t\t\tif (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {\n\t\t\t\t\toptions.weekends = $.extend(true, [], _options.weekends);\n\t\t\t\t}\n\n\t\t\t\tif (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {\n                    options.disabledDates = $.extend(true, [], _options.disabledDates);\n                }\n\n\t\t\t\tif ((options.open || options.opened) && (!options.inline)) {\n\t\t\t\t\tinput.trigger('open.xdsoft');\n\t\t\t\t}\n\n\t\t\t\tif (options.inline) {\n\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\tdatetimepicker.addClass('xdsoft_inline');\n\t\t\t\t\tinput.after(datetimepicker).hide();\n\t\t\t\t}\n\n\t\t\t\tif (options.inverseButton) {\n\t\t\t\t\toptions.next = 'xdsoft_prev';\n\t\t\t\t\toptions.prev = 'xdsoft_next';\n\t\t\t\t}\n\n\t\t\t\tif (options.datepicker) {\n\t\t\t\t\tdatepicker.addClass('active');\n\t\t\t\t} else {\n\t\t\t\t\tdatepicker.removeClass('active');\n\t\t\t\t}\n\n\t\t\t\tif (options.timepicker) {\n\t\t\t\t\ttimepicker.addClass('active');\n\t\t\t\t} else {\n\t\t\t\t\ttimepicker.removeClass('active');\n\t\t\t\t}\n\n\t\t\t\tif (options.value) {\n\t\t\t\t\tif (input && input.val) {\n\t\t\t\t\t\tinput.val(options.value);\n\t\t\t\t\t}\n\t\t\t\t\t_xdsoft_datetime.setCurrentTime(options.value);\n\t\t\t\t}\n\n\t\t\t\tif (isNaN(options.dayOfWeekStart)) {\n\t\t\t\t\toptions.dayOfWeekStart = 0;\n\t\t\t\t} else {\n\t\t\t\t\toptions.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;\n\t\t\t\t}\n\n\t\t\t\tif (!options.timepickerScrollbar) {\n\t\t\t\t\ttimeboxparent.xdsoftScroller('hide');\n\t\t\t\t}\n\n\t\t\t\tif (options.minDate && /^-(.*)$/.test(options.minDate)) {\n\t\t\t\t\toptions.minDate = _xdsoft_datetime.strToDateTime(options.minDate).dateFormat(options.formatDate);\n\t\t\t\t}\n\n\t\t\t\tif (options.maxDate &&  /^\\+(.*)$/.test(options.maxDate)) {\n\t\t\t\t\toptions.maxDate = _xdsoft_datetime.strToDateTime(options.maxDate).dateFormat(options.formatDate);\n\t\t\t\t}\n\n\t\t\t\tmounth_picker\n\t\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t\t\t.css('visibility', !options.todayButton ? 'hidden' : 'visible');\n\n\t\t\t\tif (options.mask) {\n\t\t\t\t\tvar e,\n\t\t\t\t\t\tgetCaretPos = function (input) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tif (document.selection && document.selection.createRange) {\n\t\t\t\t\t\t\t\t\tvar range = document.selection.createRange();\n\t\t\t\t\t\t\t\t\treturn range.getBookmark().charCodeAt(2) - 2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (input.setSelectionRange) {\n\t\t\t\t\t\t\t\t\treturn input.selectionStart;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsetCaretPos = function (node, pos) {\n\t\t\t\t\t\t\tnode = (typeof node === \"string\" || node instanceof String) ? document.getElementById(node) : node;\n\t\t\t\t\t\t\tif (!node) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (node.createTextRange) {\n\t\t\t\t\t\t\t\tvar textRange = node.createTextRange();\n\t\t\t\t\t\t\t\ttextRange.collapse(true);\n\t\t\t\t\t\t\t\ttextRange.moveEnd('character', pos);\n\t\t\t\t\t\t\t\ttextRange.moveStart('character', pos);\n\t\t\t\t\t\t\t\ttextRange.select();\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (node.setSelectionRange) {\n\t\t\t\t\t\t\t\tnode.setSelectionRange(pos, pos);\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisValidValue = function (mask, value) {\n\t\t\t\t\t\t\tvar reg = mask\n\t\t\t\t\t\t\t\t.replace(/([\\[\\]\\/\\{\\}\\(\\)\\-\\.\\+]{1})/g, '\\\\$1')\n\t\t\t\t\t\t\t\t.replace(/_/g, '{digit+}')\n\t\t\t\t\t\t\t\t.replace(/([0-9]{1})/g, '{digit$1}')\n\t\t\t\t\t\t\t\t.replace(/\\{digit([0-9]{1})\\}/g, '[0-$1_]{1}')\n\t\t\t\t\t\t\t\t.replace(/\\{digit[\\+]\\}/g, '[0-9_]{1}');\n\t\t\t\t\t\t\treturn (new RegExp(reg)).test(value);\n\t\t\t\t\t\t};\n\t\t\t\t\tinput.off('keydown.xdsoft');\n\n\t\t\t\t\tif (options.mask === true) {\n\t\t\t\t\t\toptions.mask = options.format\n\t\t\t\t\t\t\t.replace(/Y/g, '9999')\n\t\t\t\t\t\t\t.replace(/F/g, '9999')\n\t\t\t\t\t\t\t.replace(/m/g, '19')\n\t\t\t\t\t\t\t.replace(/d/g, '39')\n\t\t\t\t\t\t\t.replace(/H/g, '29')\n\t\t\t\t\t\t\t.replace(/i/g, '59')\n\t\t\t\t\t\t\t.replace(/s/g, '59');\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($.type(options.mask) === 'string') {\n\t\t\t\t\t\tif (!isValidValue(options.mask, input.val())) {\n\t\t\t\t\t\t\tinput.val(options.mask.replace(/[0-9]/g, '_'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tinput.on('keydown.xdsoft', function (event) {\n\t\t\t\t\t\t\tvar val = this.value,\n\t\t\t\t\t\t\t\tkey = event.which,\n\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\tdigit;\n\n\t\t\t\t\t\t\tif (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {\n\t\t\t\t\t\t\t\tpos = getCaretPos(this);\n\t\t\t\t\t\t\t\tdigit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';\n\n\t\t\t\t\t\t\t\tif ((key === BACKSPACE || key === DEL) && pos) {\n\t\t\t\t\t\t\t\t\tpos -= 1;\n\t\t\t\t\t\t\t\t\tdigit = '_';\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? -1 : 1;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tval = val.substr(0, pos) + digit + val.substr(pos + 1);\n\t\t\t\t\t\t\t\tif ($.trim(val) === '') {\n\t\t\t\t\t\t\t\t\tval = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (pos === options.mask.length) {\n\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? 0 : 1;\n\t\t\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t\t\t\tpos += (key === BACKSPACE || key === DEL) ? -1 : 1;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (isValidValue(options.mask, val)) {\n\t\t\t\t\t\t\t\t\tthis.value = val;\n\t\t\t\t\t\t\t\t\tsetCaretPos(this, pos);\n\t\t\t\t\t\t\t\t} else if ($.trim(val) === '') {\n\t\t\t\t\t\t\t\t\tthis.value = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tinput.trigger('error_input.xdsoft');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (options.validateOnBlur) {\n\t\t\t\t\tinput\n\t\t\t\t\t\t.off('blur.xdsoft')\n\t\t\t\t\t\t.on('blur.xdsoft', function () {\n\t\t\t\t\t\t\tif (options.allowBlank && !$.trim($(this).val()).length) {\n\t\t\t\t\t\t\t\t$(this).val(null);\n\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').empty();\n\t\t\t\t\t\t\t} else if (!Date.parseDate($(this).val(), options.format)) {\n\t\t\t\t\t\t\t\t$(this).val((_xdsoft_datetime.now()).dateFormat(options.format));\n\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\toptions.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.trigger('xchange.xdsoft')\n\t\t\t\t\t.trigger('afterOpen.xdsoft');\n\t\t\t};\n\n\t\t\tdatetimepicker\n\t\t\t\t.data('options', options)\n\t\t\t\t.on('mousedown.xdsoft', function (event) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tyearselect.hide();\n\t\t\t\t\tmonthselect.hide();\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t//scroll_element = timepicker.find('.xdsoft_time_box');\n\t\t\ttimeboxparent.append(timebox);\n\t\t\ttimeboxparent.xdsoftScroller();\n\n\t\t\tdatetimepicker.on('afterOpen.xdsoft', function () {\n\t\t\t\ttimeboxparent.xdsoftScroller();\n\t\t\t});\n\n\t\t\tdatetimepicker\n\t\t\t\t.append(datepicker)\n\t\t\t\t.append(timepicker);\n\n\t\t\tif (options.withoutCopyright !== true) {\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.append(xdsoft_copyright);\n\t\t\t}\n\n\t\t\tdatepicker\n\t\t\t\t.append(mounth_picker)\n\t\t\t\t.append(calendar);\n\n\t\t\t$(options.parentID)\n\t\t\t\t.append(datetimepicker);\n\n\t\t\tXDSoft_datetime = function () {\n\t\t\t\tvar _this = this;\n\t\t\t\t_this.now = function (norecursion) {\n\t\t\t\t\tvar d = new Date(),\n\t\t\t\t\t\tdate,\n\t\t\t\t\t\ttime;\n\n\t\t\t\t\tif (!norecursion && options.defaultDate) {\n\t\t\t\t\t\tdate = _this.strToDate(options.defaultDate);\n\t\t\t\t\t\td.setFullYear(date.getFullYear());\n\t\t\t\t\t\td.setMonth(date.getMonth());\n\t\t\t\t\t\td.setDate(date.getDate());\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.yearOffset) {\n\t\t\t\t\t\td.setFullYear(d.getFullYear() + options.yearOffset);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!norecursion && options.defaultTime) {\n\t\t\t\t\t\ttime = _this.strtotime(options.defaultTime);\n\t\t\t\t\t\td.setHours(time.getHours());\n\t\t\t\t\t\td.setMinutes(time.getMinutes());\n\t\t\t\t\t}\n\n\t\t\t\t\treturn d;\n\t\t\t\t};\n\n\t\t\t\t_this.isValidDate = function (d) {\n\t\t\t\t\tif (Object.prototype.toString.call(d) !== \"[object Date]\") {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn !isNaN(d.getTime());\n\t\t\t\t};\n\n\t\t\t\t_this.setCurrentTime = function (dTime) {\n\t\t\t\t\t_this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t};\n\n\t\t\t\t_this.empty = function () {\n\t\t\t\t\t_this.currentTime = null;\n\t\t\t\t};\n\n\t\t\t\t_this.getCurrentTime = function (dTime) {\n\t\t\t\t\treturn _this.currentTime;\n\t\t\t\t};\n\n\t\t\t\t_this.nextMonth = function () {\n\t\t\t\t\tvar month = _this.currentTime.getMonth() + 1,\n\t\t\t\t\t\tyear;\n\t\t\t\t\tif (month === 12) {\n\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);\n\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tyear = _this.currentTime.getFullYear();\n\n\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\t_this.currentTime.setMonth(month);\n\n\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t}\n\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\treturn month;\n\t\t\t\t};\n\n\t\t\t\t_this.prevMonth = function () {\n\t\t\t\t\tvar month = _this.currentTime.getMonth() - 1;\n\t\t\t\t\tif (month === -1) {\n\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);\n\t\t\t\t\t\tmonth = 11;\n\t\t\t\t\t}\n\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\t_this.currentTime.setMonth(month);\n\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t}\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\treturn month;\n\t\t\t\t};\n\n\t\t\t\t_this.getWeekOfYear = function (datetime) {\n\t\t\t\t\tvar onejan = new Date(datetime.getFullYear(), 0, 1);\n\t\t\t\t\treturn Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);\n\t\t\t\t};\n\n\t\t\t\t_this.strToDateTime = function (sDateTime) {\n\t\t\t\t\tvar tmpDate = [], timeOffset, currentTime;\n\n\t\t\t\t\tif (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {\n\t\t\t\t\t\treturn sDateTime;\n\t\t\t\t\t}\n\n\t\t\t\t\ttmpDate = /^(\\+|\\-)(.*)$/.exec(sDateTime);\n\t\t\t\t\tif (tmpDate) {\n\t\t\t\t\t\ttmpDate[2] = Date.parseDate(tmpDate[2], options.formatDate);\n\t\t\t\t\t}\n\t\t\t\t\tif (tmpDate  && tmpDate[2]) {\n\t\t\t\t\t\ttimeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;\n\t\t\t\t\t\tcurrentTime = new Date((_xdsoft_datetime.now()).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentTime = sDateTime ? Date.parseDate(sDateTime, options.format) : _this.now();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\tcurrentTime = _this.now();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn currentTime;\n\t\t\t\t};\n\n\t\t\t\t_this.strToDate = function (sDate) {\n\t\t\t\t\tif (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {\n\t\t\t\t\t\treturn sDate;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar currentTime = sDate ? Date.parseDate(sDate, options.formatDate) : _this.now(true);\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t}\n\t\t\t\t\treturn currentTime;\n\t\t\t\t};\n\n\t\t\t\t_this.strtotime = function (sTime) {\n\t\t\t\t\tif (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {\n\t\t\t\t\t\treturn sTime;\n\t\t\t\t\t}\n\t\t\t\t\tvar currentTime = sTime ? Date.parseDate(sTime, options.formatTime) : _this.now(true);\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t}\n\t\t\t\t\treturn currentTime;\n\t\t\t\t};\n\n\t\t\t\t_this.str = function () {\n\t\t\t\t\treturn _this.currentTime.dateFormat(options.format);\n\t\t\t\t};\n\t\t\t\t_this.currentTime = this.now();\n\t\t\t};\n\n\t\t\t_xdsoft_datetime = new XDSoft_datetime();\n\n\t\t\tmounth_picker\n\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t_xdsoft_datetime.setCurrentTime(0);\n\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t}).on('dblclick.xdsoft', function () {\n\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t});\n\t\t\tmounth_picker\n\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\tstop = false;\n\n\t\t\t\t\t(function arguments_callee1(v) {\n\t\t\t\t\t\tvar month =  _xdsoft_datetime.currentTime.getMonth();\n\t\t\t\t\t\tif ($this.hasClass(options.next)) {\n\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t\t} else if ($this.hasClass(options.prev)) {\n\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.monthChangeSpinner) {\n\t\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee1, v || 100);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}(500));\n\n\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft', function arguments_callee2() {\n\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t$([document.body, window]).off('mouseup.xdsoft', arguments_callee2);\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\ttimepicker\n\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t.on('mousedown.xdsoft', function () {\n\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\tstop = false,\n\t\t\t\t\t\tperiod = 110;\n\t\t\t\t\t(function arguments_callee4(v) {\n\t\t\t\t\t\tvar pheight = timeboxparent[0].clientHeight,\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight,\n\t\t\t\t\t\t\ttop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t\t\tif ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {\n\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t} else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {\n\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]);\n\t\t\t\t\t\tperiod = (period > 10) ? 10 : period - 10;\n\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee4, v || period);\n\t\t\t\t\t\t}\n\t\t\t\t\t}(500));\n\t\t\t\t\t$([document.body, window]).on('mouseup.xdsoft', function arguments_callee5() {\n\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t$([document.body, window])\n\t\t\t\t\t\t\t.off('mouseup.xdsoft', arguments_callee5);\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\txchangeTimer = 0;\n\t\t\t// base handler - generating a calendar and timepicker\n\t\t\tdatetimepicker\n\t\t\t\t.on('xchange.xdsoft', function (event) {\n\t\t\t\t\tclearTimeout(xchangeTimer);\n\t\t\t\t\txchangeTimer = setTimeout(function () {\n\t\t\t\t\t\tvar table =\t'',\n\t\t\t\t\t\t\tstart = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),\n\t\t\t\t\t\t\ti = 0,\n\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\ttoday = _xdsoft_datetime.now(),\n\t\t\t\t\t\t\tmaxDate = false,\n\t\t\t\t\t\t\tminDate = false,\n\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tm,\n\t\t\t\t\t\t\tw,\n\t\t\t\t\t\t\tclasses = [],\n\t\t\t\t\t\t\tcustomDateSettings,\n\t\t\t\t\t\t\tnewRow = true,\n\t\t\t\t\t\t\ttime = '',\n\t\t\t\t\t\t\th = '',\n\t\t\t\t\t\t\tline_time;\n\n\t\t\t\t\t\twhile (start.getDay() !== options.dayOfWeekStart) {\n\t\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttable += '<table><thead><tr>';\n\n\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\ttable += '<th></th>';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (j = 0; j < 7; j += 1) {\n\t\t\t\t\t\t\ttable += '<th>' + options.i18n[options.lang].dayOfWeek[(j + options.dayOfWeekStart) % 7] + '</th>';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttable += '</tr></thead>';\n\t\t\t\t\t\ttable += '<tbody>';\n\n\t\t\t\t\t\tif (options.maxDate !== false) {\n\t\t\t\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\n\t\t\t\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.minDate !== false) {\n\t\t\t\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\n\t\t\t\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twhile (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {\n\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\ti += 1;\n\n\t\t\t\t\t\t\td = start.getDate();\n\t\t\t\t\t\t\ty = start.getFullYear();\n\t\t\t\t\t\t\tm = start.getMonth();\n\t\t\t\t\t\t\tw = _xdsoft_datetime.getWeekOfYear(start);\n\n\t\t\t\t\t\t\tclasses.push('xdsoft_date');\n\n\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {\n\t\t\t\t\t\t\t\tcustomDateSettings = options.beforeShowDay.call(datetimepicker, start);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcustomDateSettings = null;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t} else if (options.disabledDates.indexOf(start.dateFormat(options.formatDate)) !== -1) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (customDateSettings && customDateSettings[1] !== \"\") {\n\t\t\t\t\t\t\t\tclasses.push(customDateSettings[1]);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (_xdsoft_datetime.currentTime.getMonth() !== m) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_other_month');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ((options.defaultSelect || datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (today.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(start.dateFormat(options.formatDate)) === -1) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_weekend');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {\n\t\t\t\t\t\t\t\tclasses.push(options.beforeShowDay(start));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (newRow) {\n\t\t\t\t\t\t\t\ttable += '<tr>';\n\t\t\t\t\t\t\t\tnewRow = false;\n\t\t\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\t\t\ttable += '<th>' + w + '</th>';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttable += '<td data-date=\"' + d + '\" data-month=\"' + m + '\" data-year=\"' + y + '\"' + ' class=\"xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '\">' +\n\t\t\t\t\t\t\t\t\t\t'<div>' + d + '</div>' +\n\t\t\t\t\t\t\t\t\t'</td>';\n\n\t\t\t\t\t\t\tif (start.getDay() === options.dayOfWeekStartPrev) {\n\t\t\t\t\t\t\t\ttable += '</tr>';\n\t\t\t\t\t\t\t\tnewRow = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstart.setDate(d + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable += '</tbody></table>';\n\n\t\t\t\t\t\tcalendar.html(table);\n\n\t\t\t\t\t\tmounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[options.lang].months[_xdsoft_datetime.currentTime.getMonth()]);\n\t\t\t\t\t\tmounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());\n\n\t\t\t\t\t\t// generate timebox\n\t\t\t\t\t\ttime = '';\n\t\t\t\t\t\th = '';\n\t\t\t\t\t\tm = '';\n\t\t\t\t\t\tline_time = function line_time(h, m) {\n\t\t\t\t\t\t\tvar now = _xdsoft_datetime.now();\n\t\t\t\t\t\t\tnow.setHours(h);\n\t\t\t\t\t\t\th = parseInt(now.getHours(), 10);\n\t\t\t\t\t\t\tnow.setMinutes(m);\n\t\t\t\t\t\t\tm = parseInt(now.getMinutes(), 10);\n\t\t\t\t\t\t\tvar optionDateTime = new Date(_xdsoft_datetime.currentTime)\n\t\t\t\t\t\t\toptionDateTime.setHours(h);\n\t\t\t\t\t\t\toptionDateTime.setMinutes(m);\n\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\tif((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && parseInt(_xdsoft_datetime.currentTime.getHours(), 10) === parseInt(h, 10) && (options.step > 59 || Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step === parseInt(m, 10))) {\n\t\t\t\t\t\t\t\tif (options.defaultSelect || datetimepicker.data('changed')) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t\t} else if (options.initTime) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_init_time');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime += '<div class=\"xdsoft_time ' + classes.join(' ') + '\" data-hour=\"' + h + '\" data-minute=\"' + m + '\">' + now.dateFormat(options.formatTime) + '</div>';\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {\n\t\t\t\t\t\t\tfor (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {\n\t\t\t\t\t\t\t\tfor (j = 0; j < 60; j += options.step) {\n\t\t\t\t\t\t\t\t\th = (i < 10 ? '0' : '') + i;\n\t\t\t\t\t\t\t\t\tm = (j < 10 ? '0' : '') + j;\n\t\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (i = 0; i < options.allowTimes.length; i += 1) {\n\t\t\t\t\t\t\t\th = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();\n\t\t\t\t\t\t\t\tm = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();\n\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimebox.html(time);\n\n\t\t\t\t\t\topt = '';\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\t\tfor (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) {\n\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + i + '</div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyearselect.children().eq(0)\n\t\t\t\t\t\t\t\t\t\t\t\t.html(opt);\n\n\t\t\t\t\t\tfor (i = 0, opt = ''; i <= 11; i += 1) {\n\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + options.i18n[options.lang].months[i] + '</div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmonthselect.children().eq(0).html(opt);\n\t\t\t\t\t\t$(datetimepicker)\n\t\t\t\t\t\t\t.trigger('generate.xdsoft');\n\t\t\t\t\t}, 10);\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t})\n\t\t\t\t.on('afterOpen.xdsoft', function () {\n\t\t\t\t\tif (options.timepicker) {\n\t\t\t\t\t\tvar classType, pheight, height, top;\n\t\t\t\t\t\tif (timebox.find('.xdsoft_current').length) {\n\t\t\t\t\t\t\tclassType = '.xdsoft_current';\n\t\t\t\t\t\t} else if (timebox.find('.xdsoft_init_time').length) {\n\t\t\t\t\t\t\tclassType = '.xdsoft_init_time';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (classType) {\n\t\t\t\t\t\t\tpheight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\t\ttop = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;\n\t\t\t\t\t\t\tif ((height - pheight) < top) {\n\t\t\t\t\t\t\t\ttop = height - pheight;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\ttimerclick = 0;\n\t\t\tcalendar\n\t\t\t\t.on('click.xdsoft', 'td', function (xdevent) {\n\t\t\t\t\txdevent.stopPropagation();  // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap\n\t\t\t\t\ttimerclick += 1;\n\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentTime.setDate(1);\n\t\t\t\t\tcurrentTime.setFullYear($this.data('year'));\n\t\t\t\t\tcurrentTime.setMonth($this.data('month'));\n\t\t\t\t\tcurrentTime.setDate($this.data('date'));\n\n\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\tif ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === 0 && !options.timepicker))) && !options.inline) {\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.onSelectDate &&\t$.isFunction(options.onSelectDate)) {\n\t\t\t\t\t\toptions.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t}\n\n\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\ttimerclick = 0;\n\t\t\t\t\t}, 200);\n\t\t\t\t});\n\n\t\t\ttimebox\n\t\t\t\t.on('click.xdsoft', 'div', function (xdevent) {\n\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentTime.setHours($this.data('hour'));\n\t\t\t\t\tcurrentTime.setMinutes($this.data('minute'));\n\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\tdatetimepicker.data('input').val(_xdsoft_datetime.str());\n\t\t\t\t\tif (!options.inline) {\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.onSelectTime && $.isFunction(options.onSelectTime)) {\n\t\t\t\t\t\toptions.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t}\n\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t});\n\n\n\t\t\tdatepicker\n\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\tif (!options.scrollMonth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (event.deltaY < 0) {\n\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\tinput\n\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\tif (!options.scrollInput) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!options.datepicker && options.timepicker) {\n\t\t\t\t\t\tcurrent_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;\n\t\t\t\t\t\tif (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {\n\t\t\t\t\t\t\tcurrent_time_index += event.deltaY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (timebox.children().eq(current_time_index).length) {\n\t\t\t\t\t\t\ttimebox.children().eq(current_time_index).trigger('mousedown');\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (options.datepicker && !options.timepicker) {\n\t\t\t\t\t\tdatepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);\n\t\t\t\t\t\tif (input.val) {\n\t\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tdatetimepicker\n\t\t\t\t.on('changedatetime.xdsoft', function (event) {\n\t\t\t\t\tif (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {\n\t\t\t\t\t\tvar $input = datetimepicker.data('input');\n\t\t\t\t\t\toptions.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);\n\t\t\t\t\t\tdelete options.value;\n\t\t\t\t\t\t$input.trigger('change');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('generate.xdsoft', function () {\n\t\t\t\t\tif (options.onGenerate && $.isFunction(options.onGenerate)) {\n\t\t\t\t\t\toptions.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t}\n\t\t\t\t\tif (triggerAfterOpen) {\n\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t\t\ttriggerAfterOpen = false;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('click.xdsoft', function (xdevent) {\n\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t});\n\n\t\t\tcurrent_time_index = 0;\n\n\t\t\tsetPos = function () {\n\t\t\t\tvar offset = datetimepicker.data('input').offset(), top = offset.top + datetimepicker.data('input')[0].offsetHeight - 1, left = offset.left, position = \"position\";\n\t\t\t\tif (options.fixed) {\n\t\t\t\t\ttop -= $(window).scrollTop();\n\t\t\t\t\tleft -= $(window).scrollLeft();\n\t\t\t\t\tposition = \"fixed\";\n\t\t\t\t} else {\n\t\t\t\t\tif (top + datetimepicker[0].offsetHeight > $(window).height() + $(window).scrollTop()) {\n\t\t\t\t\t\ttop = offset.top - datetimepicker[0].offsetHeight + 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (left + datetimepicker[0].offsetWidth > $(window).width()) {\n\t\t\t\t\t\tleft = $(window).width() - datetimepicker[0].offsetWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdatetimepicker.css({\n\t\t\t\t\tleft: left,\n\t\t\t\t\ttop: top,\n\t\t\t\t\tposition: position\n\t\t\t\t});\n\t\t\t};\n\t\t\tdatetimepicker\n\t\t\t\t.on('open.xdsoft', function (event) {\n\t\t\t\t\tvar onShow = true;\n\t\t\t\t\tif (options.onShow && $.isFunction(options.onShow)) {\n\t\t\t\t\t\tonShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t}\n\t\t\t\t\tif (onShow !== false) {\n\t\t\t\t\t\tdatetimepicker.show();\n\t\t\t\t\t\tsetPos();\n\t\t\t\t\t\t$(window)\n\t\t\t\t\t\t\t.off('resize.xdsoft', setPos)\n\t\t\t\t\t\t\t.on('resize.xdsoft', setPos);\n\n\t\t\t\t\t\tif (options.closeOnWithoutClick) {\n\t\t\t\t\t\t\t$([document.body, window]).on('mousedown.xdsoft', function arguments_callee6() {\n\t\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\t\t$([document.body, window]).off('mousedown.xdsoft', arguments_callee6);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('close.xdsoft', function (event) {\n\t\t\t\t\tvar onClose = true;\n\t\t\t\t\tmounth_picker\n\t\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t\t\t.hide();\n\t\t\t\t\tif (options.onClose && $.isFunction(options.onClose)) {\n\t\t\t\t\t\tonClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t}\n\t\t\t\t\tif (onClose !== false && !options.opened && !options.inline) {\n\t\t\t\t\t\tdatetimepicker.hide();\n\t\t\t\t\t}\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t})\n\t\t\t\t.on('toggle.xdsoft', function (event) {\n\t\t\t\t\tif (datetimepicker.is(':visible')) {\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.data('input', input);\n\n\t\t\ttimer = 0;\n\t\t\ttimer1 = 0;\n\n\t\t\tdatetimepicker.data('xdsoft_datetime', _xdsoft_datetime);\n\t\t\tdatetimepicker.setOptions(options);\n\n\t\t\tfunction getCurrentValue() {\n\n\t\t\t\tvar ct = false, time;\n\n\t\t\t\tif (options.startDate) {\n\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.startDate);\n\t\t\t\t} else {\n\t\t\t\t\tct = options.value || ((input && input.val && input.val()) ? input.val() : '');\n\t\t\t\t\tif (ct) {\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(ct);\n\t\t\t\t\t} else if (options.defaultDate) {\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.defaultDate);\n\t\t\t\t\t\tif (options.defaultTime) {\n\t\t\t\t\t\t\ttime = _xdsoft_datetime.strtotime(options.defaultTime);\n\t\t\t\t\t\t\tct.setHours(time.getHours());\n\t\t\t\t\t\t\tct.setMinutes(time.getMinutes());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (ct && _xdsoft_datetime.isValidDate(ct)) {\n\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t} else {\n\t\t\t\t\tct = '';\n\t\t\t\t}\n\n\t\t\t\treturn ct || 0;\n\t\t\t}\n\n\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\tinput\n\t\t\t\t.data('xdsoft_datetimepicker', datetimepicker)\n\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function (event) {\n\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = setTimeout(function () {\n\t\t\t\t\t\tif (input.is(':disabled') || input.is(':hidden') || !input.is(':visible')) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t}, 100);\n\t\t\t\t})\n\t\t\t\t.on('keydown.xdsoft', function (event) {\n\t\t\t\t\tvar val = this.value, elementSelector,\n\t\t\t\t\t\tkey = event.which;\n\t\t\t\t\tif ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {\n\t\t\t\t\t\telementSelector = $(\"input:visible,textarea:visible\");\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\telementSelector.eq(elementSelector.index(this) + 1).focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif ([TAB].indexOf(key) !== -1) {\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t};\n\t\tdestroyDateTimePicker = function (input) {\n\t\t\tvar datetimepicker = input.data('xdsoft_datetimepicker');\n\t\t\tif (datetimepicker) {\n\t\t\t\tdatetimepicker.data('xdsoft_datetime', null);\n\t\t\t\tdatetimepicker.remove();\n\t\t\t\tinput\n\t\t\t\t\t.data('xdsoft_datetimepicker', null)\n\t\t\t\t\t.off('.xdsoft');\n\t\t\t\t$(window).off('resize.xdsoft');\n\t\t\t\t$([window, document.body]).off('mousedown.xdsoft');\n\t\t\t\tif (input.unmousewheel) {\n\t\t\t\t\tinput.unmousewheel();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t$(document)\n\t\t\t.off('keydown.xdsoftctrl keyup.xdsoftctrl')\n\t\t\t.on('keydown.xdsoftctrl', function (e) {\n\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\tctrlDown = true;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('keyup.xdsoftctrl', function (e) {\n\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\tctrlDown = false;\n\t\t\t\t}\n\t\t\t});\n\t\treturn this.each(function () {\n\t\t\tvar datetimepicker = $(this).data('xdsoft_datetimepicker');\n\t\t\tif (datetimepicker) {\n\t\t\t\tif ($.type(opt) === 'string') {\n\t\t\t\t\tswitch (opt) {\n\t\t\t\t\tcase 'show':\n\t\t\t\t\t\t$(this).select().focus();\n\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'hide':\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'toggle':\n\t\t\t\t\t\tdatetimepicker.trigger('toggle.xdsoft');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'destroy':\n\t\t\t\t\t\tdestroyDateTimePicker($(this));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'reset':\n\t\t\t\t\t\tthis.value = this.defaultValue;\n\t\t\t\t\t\tif (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format))) {\n\t\t\t\t\t\t\tdatetimepicker.data('changed', false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t.setOptions(opt);\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif ($.type(opt) !== 'string') {\n\t\t\t\tif (!options.lazyInit || options.open || options.inline) {\n\t\t\t\t\tcreateDateTimePicker($(this));\n\t\t\t\t} else {\n\t\t\t\t\tlazyInit($(this));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\t$.fn.extend ( \"datetimepicker.defaults\" , default_options);\n}(jQuery));\n(function () {\n\n/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)\n * Licensed under the MIT License (LICENSE.txt).\n *\n * Version: 3.1.12\n *\n * Requires: jQuery 1.2.2+\n */\n!function(a){\"function\"==typeof define&&define.amd?define([\"jquery\"],a):\"object\"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type=\"mousewheel\",\"detail\"in g&&(m=-1*g.detail),\"wheelDelta\"in g&&(m=g.wheelDelta),\"wheelDeltaY\"in g&&(m=g.wheelDeltaY),\"wheelDeltaX\"in g&&(l=-1*g.wheelDeltaX),\"axis\"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,\"deltaY\"in g&&(m=-1*g.deltaY,j=m),\"deltaX\"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,\"mousewheel-line-height\");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,\"mousewheel-page-height\");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?\"floor\":\"ceil\"](j/f),l=Math[l>=1?\"floor\":\"ceil\"](l/f),m=Math[m>=1?\"floor\":\"ceil\"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&\"mousewheel\"===a.type&&b%120===0}var e,f,g=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],h=\"onwheel\"in document||document.documentMode>=9?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:\"3.1.12\",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,\"mousewheel-line-height\",k.getLineHeight(this)),a.data(this,\"mousewheel-page-height\",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,\"mousewheel-line-height\"),a.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(b){var c=a(b),d=c[\"offsetParent\"in a.fn?\"offsetParent\":\"parent\"]();return d.length||(d=a(\"body\")),parseInt(d.css(\"fontSize\"),10)||parseInt(c.css(\"fontSize\"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind(\"mousewheel\",a):this.trigger(\"mousewheel\")},unmousewheel:function(a){return this.unbind(\"mousewheel\",a)}})});\n\n// Parse and Format Library\n//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/\n/*\n * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>\n *\n * This program is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by the\n * Free Software Foundation, version 2.1.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more\n * details.\n */\nDate.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(b){if(b==\"unixtime\"){return parseInt(this.getTime()/1000);}if(Date.formatFunctions[b]==null){Date.createNewFormat(b);}var a=Date.formatFunctions[b];return this[a]();};Date.createNewFormat=function(format){var funcName=\"format\"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var code=\"Date.prototype.\"+funcName+\" = function() {return \";var special=false;var ch=\"\";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch==\"\\\\\"){special=true;}else{if(special){special=false;code+=\"'\"+String.escape(ch)+\"' + \";}else{code+=Date.getFormatCode(ch);}}}eval(code.substring(0,code.length-3)+\";}\");};Date.getFormatCode=function(a){switch(a){case\"d\":return\"String.leftPad(this.getDate(), 2, '0') + \";case\"D\":return\"Date.dayNames[this.getDay()].substring(0, 3) + \";case\"j\":return\"this.getDate() + \";case\"l\":return\"Date.dayNames[this.getDay()] + \";case\"S\":return\"this.getSuffix() + \";case\"w\":return\"this.getDay() + \";case\"z\":return\"this.getDayOfYear() + \";case\"W\":return\"this.getWeekOfYear() + \";case\"F\":return\"Date.monthNames[this.getMonth()] + \";case\"m\":return\"String.leftPad(this.getMonth() + 1, 2, '0') + \";case\"M\":return\"Date.monthNames[this.getMonth()].substring(0, 3) + \";case\"n\":return\"(this.getMonth() + 1) + \";case\"t\":return\"this.getDaysInMonth() + \";case\"L\":return\"(this.isLeapYear() ? 1 : 0) + \";case\"Y\":return\"this.getFullYear() + \";case\"y\":return\"('' + this.getFullYear()).substring(2, 4) + \";case\"a\":return\"(this.getHours() < 12 ? 'am' : 'pm') + \";case\"A\":return\"(this.getHours() < 12 ? 'AM' : 'PM') + \";case\"g\":return\"((this.getHours() %12) ? this.getHours() % 12 : 12) + \";case\"G\":return\"this.getHours() + \";case\"h\":return\"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + \";case\"H\":return\"String.leftPad(this.getHours(), 2, '0') + \";case\"i\":return\"String.leftPad(this.getMinutes(), 2, '0') + \";case\"s\":return\"String.leftPad(this.getSeconds(), 2, '0') + \";case\"O\":return\"this.getGMTOffset() + \";case\"T\":return\"this.getTimezone() + \";case\"Z\":return\"(this.getTimezoneOffset() * -60) + \";default:return\"'\"+String.escape(a)+\"' + \";}};Date.parseDate=function(a,c){if(c==\"unixtime\"){return new Date(!isNaN(parseInt(a))?parseInt(a)*1000:0);}if(Date.parseFunctions[c]==null){Date.createParser(c);}var b=Date.parseFunctions[c];return Date[b](a);};Date.createParser=function(format){var funcName=\"parse\"+Date.parseFunctions.count++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code=\"Date.\"+funcName+\" = function(input) {\\nvar y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, z = -1;\\nvar d = new Date();\\ny = d.getFullYear();\\nm = d.getMonth();\\nd = d.getDate();\\nvar results = input.match(Date.parseRegexes[\"+regexNum+\"]);\\nif (results && results.length > 0) {\";var regex=\"\";var special=false;var ch=\"\";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch==\"\\\\\"){special=true;}else{if(special){special=false;regex+=String.escape(ch);}else{obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}}code+=\"if (y > 0 && z > 0){\\nvar doyDate = new Date(y,0);\\ndoyDate.setDate(z);\\nm = doyDate.getMonth();\\nd = doyDate.getDate();\\n}\";code+=\"if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\\n{return new Date(y, m, d, h, i, s);}\\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\\n{return new Date(y, m, d, h, i);}\\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0)\\n{return new Date(y, m, d, h);}\\nelse if (y > 0 && m >= 0 && d > 0)\\n{return new Date(y, m, d);}\\nelse if (y > 0 && m >= 0)\\n{return new Date(y, m);}\\nelse if (y > 0)\\n{return new Date(y);}\\n}return null;}\";Date.parseRegexes[regexNum]=new RegExp(\"^\"+regex+\"$\");eval(code);};Date.formatCodeToRegex=function(b,a){switch(b){case\"D\":return{g:0,c:null,s:\"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\"};case\"j\":case\"d\":return{g:1,c:\"d = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,2})\"};case\"l\":return{g:0,c:null,s:\"(?:\"+Date.dayNames.join(\"|\")+\")\"};case\"S\":return{g:0,c:null,s:\"(?:st|nd|rd|th)\"};case\"w\":return{g:0,c:null,s:\"\\\\d\"};case\"z\":return{g:1,c:\"z = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,3})\"};case\"W\":return{g:0,c:null,s:\"(?:\\\\d{2})\"};case\"F\":return{g:1,c:\"m = parseInt(Date.monthNumbers[results[\"+a+\"].substring(0, 3)], 10);\\n\",s:\"(\"+Date.monthNames.join(\"|\")+\")\"};case\"M\":return{g:1,c:\"m = parseInt(Date.monthNumbers[results[\"+a+\"]], 10);\\n\",s:\"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\"};case\"n\":case\"m\":return{g:1,c:\"m = parseInt(results[\"+a+\"], 10) - 1;\\n\",s:\"(\\\\d{1,2})\"};case\"t\":return{g:0,c:null,s:\"\\\\d{1,2}\"};case\"L\":return{g:0,c:null,s:\"(?:1|0)\"};case\"Y\":return{g:1,c:\"y = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{4})\"};case\"y\":return{g:1,c:\"var ty = parseInt(results[\"+a+\"], 10);\\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\\n\",s:\"(\\\\d{1,2})\"};case\"a\":return{g:1,c:\"if (results[\"+a+\"] == 'am') {\\nif (h == 12) { h = 0; }\\n} else { if (h < 12) { h += 12; }}\",s:\"(am|pm)\"};case\"A\":return{g:1,c:\"if (results[\"+a+\"] == 'AM') {\\nif (h == 12) { h = 0; }\\n} else { if (h < 12) { h += 12; }}\",s:\"(AM|PM)\"};case\"g\":case\"G\":case\"h\":case\"H\":return{g:1,c:\"h = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{1,2})\"};case\"i\":return{g:1,c:\"i = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{2})\"};case\"s\":return{g:1,c:\"s = parseInt(results[\"+a+\"], 10);\\n\",s:\"(\\\\d{2})\"};case\"O\":return{g:0,c:null,s:\"[+-]\\\\d{4}\"};case\"T\":return{g:0,c:null,s:\"[A-Z]{3}\"};case\"Z\":return{g:0,c:null,s:\"[+-]\\\\d{1,5}\"};default:return{g:0,c:null,s:String.escape(b)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,\"$1\").replace(/^.*?\\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\\)$/,\"$1$2$3\");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?\"-\":\"+\")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,\"0\")+String.leftPad(Math.abs(this.getTimezoneOffset())%60,2,\"0\");};Date.prototype.getDayOfYear=function(){var a=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var b=0;b<this.getMonth();++b){a+=Date.daysInMonth[b];}return a+this.getDate();};Date.prototype.getWeekOfYear=function(){var b=this.getDayOfYear()+(4-this.getDay());var a=new Date(this.getFullYear(),0,1);var c=(7-a.getDay()+4);return String.leftPad(Math.ceil((b-c)/7)+1,2,\"0\");};Date.prototype.isLeapYear=function(){var a=this.getFullYear();return((a&3)==0&&(a%100||(a%400==0&&a)));};Date.prototype.getFirstDayOfMonth=function(){var a=(this.getDay()-(this.getDate()-1))%7;return(a<0)?(a+7):a;};Date.prototype.getLastDayOfMonth=function(){var a=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(a<0)?(a+7):a;};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return\"st\";case 2:case 22:return\"nd\";case 3:case 23:return\"rd\";default:return\"th\";}};String.escape=function(a){return a.replace(/('|\\\\)/g,\"\\\\$1\");};String.leftPad=function(d,b,c){var a=new String(d);if(c==null){c=\" \";}while(a.length<b){a=c+a;}return a;};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];Date.dayNames=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.patterns={ISO8601LongPattern:\"Y-m-d H:i:s\",ISO8601ShortPattern:\"Y-m-d\",ShortDatePattern:\"n/j/Y\",LongDatePattern:\"l, F d, Y\",FullDateTimePattern:\"l, F d, Y g:i:s A\",MonthDayPattern:\"F d\",ShortTimePattern:\"g:i A\",LongTimePattern:\"g:i:s A\",SortableDateTimePattern:\"Y-m-d\\\\TH:i:s\",UniversalSortableDateTimePattern:\"Y-m-d H:i:sO\",YearMonthPattern:\"F, Y\"};\n}());\n"
  },
  {
    "path": "static/lib/underscore/underscore.ext.js",
    "content": "\nif(!_){\n    _={};\n}\n\n_.formatDate= function(date, formatString){\n    /*\n     * eg:formatString=\"YYYY-MM-DD hh:mm:ss\";\n     */\n    var o = {\n        \"M+\" : date.getMonth()+1,    //month\n        \"D+\" : date.getDate(),    //day\n        \"h+\" : date.getHours(),    //hour\n        \"m+\" : date.getMinutes(),    //minute\n        \"s+\" : date.getSeconds(),    //second\n        \"q+\" : Math.floor((date.getMonth()+3)/3),    //quarter\n        \"S\" : date.getMilliseconds()    //millisecond\n    }\n\n    if(/(Y+)/.test(formatString)){\n        formatString = formatString.replace(RegExp.$1, (date.getFullYear()+\"\").substr(4 - RegExp.$1.length));\n    }\n\n    for(var k in o){\n        if(new RegExp(\"(\"+ k +\")\").test(formatString)){\n            formatString = formatString.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : (\"00\"+ o[k]).substr((\"\"+ o[k]).length));\n        }\n    }\n    return formatString;\n}"
  },
  {
    "path": "static/module/apply/load.apply.js",
    "content": "var apply = require(\"./mod.apply\");\n\napply.init();"
  },
  {
    "path": "static/module/apply/mod.apply.js",
    "content": "/**\n * @info 申请新页面页面js\n * @author coverguo\n * */\n\nvar REG_REFERER = /^https?:\\/\\/[^\\/]+\\//i;\nvar REG_DOMAIN_STAR = /^\\*(\\.[^\\/]+)?$/;\n\nvar Dialog = require(\"dialog/dialog\");\n\n\nvar applyBox = $(\"#applyContainer\");\n\nfunction bindEvent() {\n    applyBox.on('click', '.apply-submit', function(e) {\n        e.preventDefault();\n        var mainpage = $.trim($(\".apply-url\").val());\n        if ($('.apply-name').val().length <= 0) {\n            alert(\"请填写业务名称\");\n            return;\n        }\n        if (!REG_DOMAIN_STAR.test(mainpage) && !REG_REFERER.test(mainpage)) {\n            alert(\"业务URL格式错误 , eg: http://www.qq.com/\");\n            return;\n        }\n\n    var blackListIP = $('.apply-blacklist-ip').val();\n    var blackListUA = $('.apply-blacklist-ua').val();\n    var blackList = {ip : blackListIP ? blackListIP.split(\",\") : [] , ua : blackListUA ? blackListUA.split(\",\"): [] }\n\n\n\n    var params = {};\n        //申请数据\n        $.extend(params, {\n            name: $('.apply-name').val(),\n            description: $('.apply-description').val(),\n            url: mainpage,\n            blacklist: JSON.stringify(blackList),\n            id: $(\"#applyId\").val()\n        });\n\n        $.post('./controller/applyAction/addApply.do', params, function(data) {\n            var ret = data.ret;\n            switch (ret) {\n                case 0: //成功\n                    //执行成功回调函数.\n                    alert(\"成功\");\n                    location.href = '/user/applyList.html';\n                    break;\n                case 1: //没有登陆态或登陆态失效\n                    alert(\"失败\");\n            }\n        }).fail(function() {\n            // 错误处理\n        });\n    });\n}\n\n\nfunction init() {\n    bindEvent();\n}\n\nmodule.exports = {\n    init: init\n};\n"
  },
  {
    "path": "static/module/applyList/load.applyList.js",
    "content": "var applyList = require(\"./mod.applyList\");\n\napplyList.init();"
  },
  {
    "path": "static/module/applyList/mod.applyList.js",
    "content": "/**\n * @info 申请列表js\n * @author coverguo\n * */\n\n\nvar Dialog = require(\"dialog/dialog\");\nvar applyTable = require(\"./template/applyTable.ejs\");\n\n\n    var maxDate = 60*60*1000*24 *2;\n    var   encodeHtml = function (str) {\n        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n    };\n    //选择的状态\n    var tempStatus,\n        oldClass;\n\n\n    function doApprove(params , cb){\n        $.post('/controller/approveAction/doApprove.do',params, function (data) {\n            var ret = data.ret;\n            switch(ret){\n                case 0://成功\n                    //执行成功回调函数.\n                    cb(data);\n                    break;\n                case 1://没有登陆态或登陆态失效\n                    alert(data.msg);\n            }\n        }).fail(function () {\n            // 错误处理\n        });\n    }\n\n    var deleteItem = function ($item , id){\n        if(!confirm(\"你确定要删除吗\")){\n            return ;\n        }\n        $.getJSON('/controller/applyAction/remove.do',{id : id}, function (data) {\n            var ret = data.ret;\n            if(ret == 0){\n                $item.parents(\".listRow\").remove();\n            }else {\n                alert(data.msg);\n            }\n        }).fail(function () {\n            alert(\"删除失败\");\n        });\n    }\n    function bindEvent() {\n\n        //搜索\n        $(\"#apply_searchBtn\").on(\"click\", function () {\n            var searchParam = {\n                searchText:$(\"#apply_searchText\").val(),\n                statusType:parseInt($(\"#apply_searchType\").val(),10)\n            };\n            getSearchList(searchParam, function(data){\n                console.log(data);\n                var param = {\n                    encodeHtml: encodeHtml\n                };\n                $('.dataTable').html(applyTable({it : data, opt : param}));\n                //bindEvent();\n            });\n        });\n\n        //审核\n        $(\"#applyList\").on(\"click\",\".approveBtn\", function(){\n            $(this).siblings(\".approveBlock\").show();\n            tempStatus = $(this).siblings(\".approveBlock\").find(\"#statusPanel\").data(\"value\");\n            oldClass = $(this).siblings(\".approveBlock\").find(\"#statusPanel\").attr(\"class\");\n        });\n        $(\".approveBlock .closeBtn\").on(\"click\", function(e){\n            $(this).parent().hide();\n            //取消则返回之前的class\n            $(this).siblings(\"#statusPanel\").removeClass().addClass(oldClass);\n            e.stopPropagation();\n        });\n        $(\"#statusPanel .statusBtn\").on(\"click\", function(e){\n            var type = $(this).data(\"type\");\n            oldClass = $(this).parent().attr(\"class\");\n            tempStatus = $(this).data(\"value\");\n            $(this).parent().removeClass().addClass(type +\"-active\");\n            e.stopPropagation();\n        });\n        $(\"#applyList .deleteBtn\").on(\"click\", function(e){\n            deleteItem($(this) , $(this).data(\"applyid\"));\n            e.stopPropagation();\n        });\n        $(\".approveBlock .operation\").on(\"click\", function (e) {\n\n            if( $(this).siblings(\"#statusPanel\").hasClass(\"delete-active\")){\n                deleteItem($(this) , $(this).data(\"apply_id\"));\n                return ;\n            }\n            //只有提交了才改变状态值\n            $(this).siblings(\"#statusPanel\").data().value = tempStatus;\n            var param = {\n                reply       : $(this).siblings(\".replyText\").val(),\n                applyId     : $(this).data(\"apply_id\"),\n                applyStatus : tempStatus\n            };\n            var $self = $(this);\n            doApprove(param, function (data) {\n                alert(data.msg);\n                $self.parent().hide();\n                location.reload();\n            });\n            e.stopPropagation();\n        });\n\n        $(\"#applyList .appkey_btn\").click(function (){\n\n        });\n\n    }\n    function getSearchList(params,cb){\n        $.get('./controller/applyAction/queryListBySearch.do',params, function (data) {\n            var ret = data.ret;\n            switch(ret){\n                case 0://成功\n                    //执行成功回调函数.\n                    cb(data.data);\n                    break;\n                case 1://没有登陆态或登陆态失效\n                    alert(\"失败\");\n            }\n        }).fail(function () {\n            // 错误处理\n        });\n    }\n    //获取列表页信息\n    function getApplyList(cb){\n        var params = {\n        };\n        $.get('./controller/applyAction/queryListByUser.do',params, function (data) {\n            var ret = data.ret;\n            switch(ret){\n                case 0://成功\n                    //执行成功回调函数.\n                    cb(data.data);\n                    break;\n                case 1://没有登陆态或登陆态失效\n                    alert(\"失败\");\n            }\n        }).fail(function () {\n            // 错误处理\n        });\n    }\n\n    function init() {\n        //$(\".datetimepicker\").datetimepicker({format: 'YYYY-MM-DD HH:mm'}).data(\"DateTimePicker\").setMaxDate(new Date());\n        //\n        //$('.fromTime').data(\"DateTimePicker\").setDate( new Date(new Date() - maxDate));\n        //$('.toTime').data(\"DateTimePicker\").setDate( new Date());\n        getApplyList(function(data){\n            console.log(data);\n            var param = {\n                encodeHtml: encodeHtml\n            };\n            $('.dataTable').html(applyTable({it : data, opt :param}));\n            bindEvent();\n        });\n\n\n    }\n\nmodule.exports = {\n        init: init\n}\n"
  },
  {
    "path": "static/module/applyList/template/applyTable.ejs",
    "content": "<%\n    var len = it.item.length;\n\n    var statue = \"\";\n\n%>\n<% if(len !=0){%>\n<thead>\n<tr>\n    <!--<th><input class=\"tableSelectCheckBox parentCheckBox\" type=\"checkbox\"/></th>-->\n    <th>#</th>\n    <th style=\"width:80px;\">上报id</th>\n    <th style=\"width:80px;\">appkey</th>\n    <th >名称</th>\n    <th>申请人</th>\n    <th style=\"width:120px;\">申请时间</th>\n   <!-- <th >业务描述</th>-->\n    <th >详情</th>\n    <th style=\"width:120px;\"><%= it.role ==1 ? '操作' : '状态'%></th>\n    <%if (it.role != 1) { %>\n    <th style=\"width:120px;\">操作</th>\n    <% }%>\n\n\n</tr>\n</thead>\n\n<tbody id=\"applyList\">\n<%\nvar one ;\nfor(var i = 0; i<len ; i++){\n    one = it.item[i];\n    one.status -= 0;\n    var STATUS_BLOCK_HEIGHT = 24;\n    var status = 'applying-active';\n    var statusText = '待审核';\n    var statusClass = 'applyingBtn'\n    var blacklistIPStr = '';\n    var blacklistUAStr = '';\n\n    try {\n        one.blacklist = JSON.parse(one.blacklist || {})\n    }catch(e){\n        one.blacklist = {};\n    }\n    blacklistIPStr =  one.blacklist.ip ? one.blacklist.ip.join(',') : ''\n    blacklistUAStr =  one.blacklist.ua ? one.blacklist.ua.join(',') : ''\n\n    if(one.status != 0){\n        status = one.status ==1 ? 'agree-active' : 'disagree-active';\n        statusText = one.status ==1 ? '已通过' : '已拒绝';\n        statusClass = one.status ==1 ? 'passBtn' : 'rejectedBtn';\n    }\n\n%>\n    <tr class=\"listRow\" >\n        <!--<td><input class=\"tableSelectCheckBox\" type=\"checkbox\"/></td>-->\n        <td class=\"\"><%=(i +1)%></td>\n        <td class=\"apply_id\" style=\"text-align: center;\"><%=one.id%></td>\n        <td class=\"apply_appkey\" style=\"text-align: center;\" >\n            <a class=\"appkey_btn\" href=\"javascript:void(0)\" >appkey</a>\n            <div class=\"appkey-panel\" style=\"text-align: left\">\n                <div> appkey : <strong><%=one.appkey%></strong></div>\n            </div>\n        </td>\n        <td class=\"apply_name\">\n            <span style=\"width:100px;\" class=\"textOverflow\" title=\"<%=one.name%>\"><%=one.name%></span>\n        </td>\n        <td class=\"apply_userName\"><%=one.userName%></td>\n        <td class=\"apply_createTime\"><%= _.formatDate( new Date(one.createTime) , 'YYYY-MM-DD' )%></td>\n       <!-- <td  class=\"apply_description\">\n            <span style=\"width:250px;\" class=\"textOverflow\" title=\"<%=one.description%>\"> <%=one.description%></span>\n        </td>-->\n        <td class=\"apply_url\" >\n            <span style=\"width:270px;\" class=\"textOverflow\" title=\"<%=one.url%>\"><b>url：</b><%=one.url%></span>\n            <span style=\"width:270px;\" class=\"textOverflow\" >\n                <b>ip：</b><%= blacklistIPStr    %>\n            </span>\n             <span style=\"width:270px;\" class=\"textOverflow\" >\n                <b>userAgent：</b><%= blacklistUAStr    %>\n              </span>\n            <span style=\"width:270px;\" class=\"textOverflow\" title=\"<%=one.description%>\"><b>描述：</b><%=one.description%></span>\n        </td>\n\n        <td class=\"apply_operation\">\n            <%if(it.role == 1){%>\n            <div  class=\"modifyBtn approveBtn <%=statusClass%>\">\n                <%= statusText%>\n            </div>\n            <div class=\"approveBlock\" >\n                <div class=\"closeBtn\">关闭</div>\n                <input  class=\"rowBlock replyText\" type=\"text\" name=\"description\" placeholder=\"操作描述\"/>\n                <div id=\"statusPanel\" class=\"<%= status%>\" data-value=\"<%= one.status%>\">\n                    <div class=\"statusBtn applying\" data-type=\"applying\" data-value=\"0\">待审核</div>\n                    <div class=\"statusBtn agree\" data-type=\"agree\" data-value=\"1\">通过</div>\n                    <div class=\"statusBtn disagree\" data-type=\"disagree\" data-value=\"2\">拒绝</div>\n                    <div class=\"statusBtn delete\" data-type=\"delete\" >删除</div>\n                </div>\n                <div class=\"operation\" data-apply_id=\"<%=one.id%>\">\n                    <button class=\"submitBtn\" >确定</button>\n                </div>\n            </div>\n            <%} else {%>\n            <div  class=\" <%=statusClass%>\">\n                <%= statusText%>\n            </div>\n            <%}%>\n        </td>\n        <%if (it.role != 1) { %>\n        <td>\n            <%  if(true || one.status != 1) {%>\n            <button class=\"editBtn\">\n                <a href=\"apply.html?applyId=<%=one.id%>\">编辑</a>\n            </button>\n            <% } %>\n            <button class=\"deleteBtn\" data-applyid=\"<%=one.id%>\">\n                <a href=\"javascript:void(0)\">删除</a>\n            </button>\n        </td>\n        <%}%>\n    </tr>\n<%}%>\n</tbody>\n<%}%>\n"
  },
  {
    "path": "static/module/authUserManage/load.authUserManage.js",
    "content": "var usermanger = require(\"./mod.authUserManage.js\");\n\nusermanger.init();"
  },
  {
    "path": "static/module/authUserManage/mod.authUserManage.js",
    "content": "/**\n * @info 用户列表js\n * @author coverguo\n * */\n\nvar userTable = require(\"./template/userTable.ejs\");\n\n\n    var encodeHtml = function (str) {\n        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n    };\n    function bindEvent() {\n\n        $(\".searchBtn\").on(\"click\", function (){\n            fetch();\n        });\n\n\n        var submiting =  false;\n\n        $(\"#userList\").on(\"click\",'.user-authBtn', function (){\n            if(submiting){\n                return;\n            }\n            submiting = true;\n            var params = {\n                id : $(this).data(\"uaid\"),\n                role : $(this).data(\"role\")\n            };\n            $ajax(\"/controller/userAction/authUser.do\", params, function(data){\n                fetch();\n                submiting = false;\n            });\n\n        });\n    };\n\n    function $ajax(url, params, cb,type){\n        $.ajax({\n            url: url,\n            data:params,\n            type: type?type:'post',\n            success: function(data) {\n                var ret = data.ret;\n                switch(ret){\n                    case 0://成功\n                        //执行成功回调函数.\n                        cb(data);\n\n                        break;\n                    default ://没有登陆态或登陆态失效\n                        alert(data.msg);\n                }\n            },\n            error: function() {\n            }\n        });\n    }\n    function fetch() {\n        var params ={\n            roleType : $('.search-userType').val()\n        };\n        $ajax(\"controller/userAction/queryUserByCondition.do\",params,function(items){\n            var param = {\n                encodeHtml: encodeHtml\n            };\n            $('#userList').html(userTable({it : items.data, opt : param}));\n\n        });\n\n\n    }\n\nmodule.exports = {\n        init: function (){\n            fetch();\n            bindEvent();\n        }\n}\n"
  },
  {
    "path": "static/module/authUserManage/template/userTable.ejs",
    "content": "<% for(var i =0, len = it.length;i<len; i++){\n    var role =\"普通用户\";\n    var operationType = 0;\n    if(it[i].role == 1){\n        if(it[i].loginName == \"admin\") {\n            role = \"超级管理员\";\n            operationType = 2;\n        }else {\n            role =\"管理员\";\n            operationType = 1;\n        }\n    }\n%>\n<tr class=\"listRow\">\n    <td><%= i+1%></td>\n    <td><%= it[i].loginName%></td>\n    <td><%= it[i].chineseName?it[i].chineseName:\"无\"%></td>\n    <td><%= it[i].email%></td>\n    <td><%= role%> </td>\n    <td>\n        <%if(operationType == 1 ){%>\n            <button class=\"user-authBtn btn-default modifyBtn\" data-uaid=\"<%= it[i].id%>\" data-role=\"0\">转为普通成员</button>\n        <%} else if(operationType == 0) {%>\n            <button class=\"user-authBtn btn-default modifyBtn\" data-uaid=\"<%= it[i].id%>\" data-role=\"1\" >授权管理员</button>\n        <%}%>\n\n\n    </td>\n</tr>\n<%}%>\n"
  },
  {
    "path": "static/module/charts/load.charts.js",
    "content": "var charts = require('./mod.charts');\n\ncharts.init();"
  },
  {
    "path": "static/module/charts/mod.charts.js",
    "content": "/* global _ */\n/**\n * @info 图表统计js\n * @author coverguo\n */\nrequire(\"jquery/jquery.datetimepicker\");\nrequire(\"charts/highcharts\");\nrequire(\"charts/sand-signika\");\nvar Dialog = require(\"dialog/dialog\");\n\nvar dayNumber = 0,\n    days = [];\n\nvar chart_title, chart_projects = [];\nvar statistics = {\n    init: function() {\n        this.bindEvent();\n    },\n    setChart: function(data) {\n        $('#chartsContainer').highcharts({ //图表展示容器，与div的id保持一致\n            chart: {\n                type: 'line' //指定图表的类型，默认是折线图（line）\n            },\n            title: {\n                text: chart_title //指定图表标题\n            },\n            xAxis: {\n                categories: setChartX(dayNumber)\n            },\n            yAxis: {\n                min: 0,\n                title: {\n                    text: '报错数量' //指定y轴的标题\n                }\n            },\n            series: chart_projects\n        });\n    },\n    bindEvent: function() {\n        var self = this;\n        $('#showCharts').bind(\"click\", function(e) {\n            var param = {\n                projectId: $(\"#select-chartBusiness\").val(),\n                timeScope: $(\"#select-timeScope\").val()\n            };\n            $.getJSON(\"/controller/statisticsAction/queryByChart.do\", param, function(data) {\n                var $options = $(\"#select-chartBusiness option\");\n                var $selectedOption = $(\"#select-chartBusiness\").find(\"option:selected\");\n\n                chart_projects = [];\n                dayNumber = param.timeScope == 1 ? 7 : 30;\n                days = setChartX(dayNumber);\n                var project = null;\n                if (param.projectId == -1) {\n                    var projectLength = $options.length;\n                    for (var i = 1; i < projectLength; i++) {\n                        var defaultData1 = [];\n                        setDefaultTotal(defaultData1, dayNumber);\n                        project = {\n                            name: $options.eq(i).text(),\n                            projectId: $options.eq(i).val() - 0,\n                            date: days,\n                            data: defaultData1\n                        };\n                        chart_projects.push(project);\n                    }\n                } else {\n                    var defaultData2 = [];\n                    setDefaultTotal(defaultData2, dayNumber);\n                    project = {\n                        name: $selectedOption.text(),\n                        projectId: $(\"#select-chartBusiness\").val() - 0,\n                        date: days,\n                        data: defaultData2\n                    };\n                    chart_projects.push(project);\n                }\n\n                //设置表格title\n                chart_title = $(\"#select-chartBusiness\").find(\"option:selected\").text() + $(\"#select-timeScope\").find(\"option:selected\").text() + \"统计\";\n                console.log(data);\n                sortChartData(data.data);\n                console.log('project', chart_projects);\n                self.setChart();\n            });\n        });\n    }\n\n};\n\nfunction setChartX(number) {\n    var days = [];\n    var nowDay = new Date() - 0;\n\n    for (var i = number; i > 0; i--) {\n        var day = nowDay - i * 1000 * 60 * 60 * 24;\n        days.push(_.formatDate(new Date(day), 'MM-DD'));\n    }\n    return days;\n}\n\nfunction setDefaultTotal(arr, number) {\n    for (var i = number; i > 0; i--) {\n        arr.push(0);\n    }\n}\n\nfunction whichDayIndex(day1) {\n    for (var i = 0, len = days.length; i < len; i++) {\n        if (day1 == days[i]) {\n            return i;\n        }\n    }\n    return false;\n}\n\nfunction sortChartData(data) {\n\n    for (var i = 0, len = data.length; i < len; i++) {\n        data[i].startDate = _.formatDate(new Date(data[i].startDate), 'MM-DD');\n        for (var j = 0, length = chart_projects.length; j < length; j++) {\n            if (data[i].projectId == chart_projects[j].projectId) {\n                chart_projects[j]['data'][whichDayIndex(data[i].startDate)] = data[i].total;\n            }\n        }\n    }\n}\n\nmodule.exports = statistics;"
  },
  {
    "path": "static/module/common/app.css",
    "content": "@charset 'UTF-8';\nbody,\nhtml\n{\n    font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, \\5b8b\\4f53, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif;\n\n    height: 100%;\n\n    background: #f7f7f7;\n}\n\n.clear\n{\n    clear: both;\n}\na:hover\n{\n    text-decoration: none;\n}\n\nheader\n{\n    z-index: 1;\n\n    width: 100%;\n    height: 40px;\n    background: #f7f7f7;\n    border-bottom: 1px solid #b8b8b8;\n}\n.head-logo\n{\n    /*display: none;*/\n}\n.head-logo img\n{\n    float: left;\n\n    max-width: 36px;\n    max-height: 36px;\n}\n\n.head-logo span\n{\n    /*font-size: 1.6em;*/\n    line-height: 40px;\n\n    /*display: none;*/\n\n    padding-left: 5px;\n}\n\n.head-user\n{\n    line-height: 38px;\n\n    position: absolute;\n    top: 0;\n    right: 1em;\n}\n.head-user img\n{\n    width: 36px;\n    height: 36px;\n\n    border-radius: 36px;\n}\n\n.nav\n{\n    position: relative;\n\n    border-bottom: 1px solid #b8b8b8;\n}\n.nav .item\n{\n    display: inline-block;\n\n    width: 150px;\n    margin-left: -3px;\n\n    cursor: pointer;\n    text-align: center;\n}\n.nav .item a\n{\n    line-height: 30px;\n\n    display: block;\n\n    height: 30px;\n    padding: 0;\n\n    color: #494c54;\n}\n\n\n.nav .item a:hover,\n.nav .item.active > a\n{\n    color: #fff;\n    background: #353434;\n}\n.nav .items\n{\n    line-height: 30px;\n\n    position: relative;\n\n    display: inline-block;\n\n    width: 150px;\n    height: 30px;\n    margin-left: -3px;\n\n    cursor: pointer;\n    text-align: center;\n}\n.nav .items:hover .subNav\n{\n    display: block;\n}\n.nav .items .subNav\n{\n    position: absolute;\n    z-index: 99;\n    top: 30px;\n    left: 0;\n\n    display: none;\n\n    width: 100%;\n    padding: 0;\n\n    border: 1px solid #b8b8b8;\n    border-top: 1px solid #fff;\n    background: #fff;\n}\n\n.items .subNav .item\n{\n    line-height: 35px;\n\n    list-style: none;\n}\n\nform\n{\n    margin-top: 100px;\n}\n\n#content.autoBottom\n{\n    position: absolute;\n    top: 71px;\n    bottom: 0;\n    width: 100%;\n    background: #f7f7f7;\n}\n\n#content .wrap\n{\n    position: relative;\n\n    height: 100%;\n}\n#content .left-side\n{\n    position: absolute;\n    left: 0;\n\n    width: 207px;\n    height: 100%;\n\n    color: #7f8083;\n    background: #2a2d33;\n}\n.left-side a\n{\n    color: #7f8083;\n}\n#content .left-side label\n{\n    font-size: 12px;\n    font-weight: normal;\n\n    width: 100%;\n    padding: 20px 0 10px 20px;\n\n    border-bottom: 1px solid #3a3d42;\n}\n#content .left-side ul\n{\n    padding: 0;\n}\n#content .left-side li\n{\n    list-style: none;\n}\n#content .left-side li  a\n{\n    font-size: 16px;\n\n    display: block;\n\n    padding: 5px 0;\n\n    cursor: pointer;\n    text-align: center;\n}\n#content .left-side li.active  a\n{\n    color: #fff;\n    background: #656c7e;\n}\n#content .left-side li.active:hover\n{\n    color: #fff;\n    background: #656c7e;\n}\n#content .left-side li:hover\n{\n    color: #fff;\n    background: #3e424b;\n}\n#content .mid-side\n{\n    position: relative;\n    height: 100%;\n    margin-right: 250px;\n    padding-top: 10px;\n}\n#content .mid-side .main-top\n{\n    padding: 10px;\n}\n#content .mid-side .main-top .main-title\n{\n    font-size: 24px;\n\n    float: left;\n\n    margin: 0;\n}\n#content .mid-side .main-top .main-count\n{\n    display: inline-block;\n\n    margin: 6px 0 0 30px;\n}\n#content .mid-side .main-top .main-count em\n{\n    font-style: normal;\n\n    color: #88b6f2;\n}\n#content .mid-side .main-mid\n{\n    overflow-y: scroll;\n\n    height: 100%;\n}\n#content .mid-side .main-table\n{\n    width: 99%;\n    margin: 0 auto;\n\n    table-layout: fixed;\n    border-collapse: collapse;\n\n    border: 1px solid #dedede;\n}\n#content .mid-side .main-table tr,\n#content .mid-side .main-table td\n{\n    height: 35px;\n}\n#content .mid-side .main-table td.td-1{\n    cursor: pointer;\n}\n#detailModal{\n    display: none;\n    position: fixed;\n    top: 0;\n    bottom: 0;\n    left:0;\n    right: 0;\n    z-index: 1000;\n    background-color: rgba(0,0,0,0.5);\n    padding: 10px;\n}\n#detailModal .content{\n    z-index: 10000;\n    background-color: white;\n    width: 500px;\n    height: 100%;\n    overflow-x: auto;\n    margin: 0 auto;\n    padding: 20px;\n    word-break:break-all;\n}\n#detailModal .button{\n    line-height: 36px;\n    width: 137px;\n    height: 37px;\n    cursor: pointer;\n    text-align: center;\n    font-size:14px;\n    color: #fff;\n    border-radius: 3px;\n    background: #2d82f2;\n    margin: 0 auto;\n}\n#detailModal .content h4 .id{\n    color: #2d82f2;\n}\n#content .mid-side .main-table thead tr\n{\n    background: #f8f8f8;\n    display: none;\n}\n#content .mid-side .main-table tbody tr:hover\n{\n    background: #efefef;\n}\n#content .mid-side .main-table td,\n#content .mid-side .main-table th\n{\n    padding: 0 10px;\n    border: 1px solid #dedede;\n    word-break: break-all;\n    display: none;\n}\n\n#content .mid-side .active-table.main-table td,\n#content .mid-side .active-table.main-table th\n{\n    display: table-cell;\n}\n\n#content .mid-side .main-table td.td-1,\n#content .mid-side .main-table th.td-1\n{\n    width: 50px;\n}\n\n#content .mid-side .main-table td.td-2,\n#content .mid-side .main-table th.td-2\n{\n    width: 200px;\n}\n#content .mid-side .main-table td.td-5,\n#content .mid-side .main-table th.td-5\n{\n    width: 150px;\n}\n#content .mid-side .main-table td.td-6,\n#content .mid-side .main-table th.td-6\n{\n    width: 80px;\n}\n\n#content .mid-side .main-table td.td-4,\n#content .mid-side .main-table th.td-4\n{\n    width: 120px;\n}\n\n\n#content .mid-side .main-table td.active,\n#content .mid-side .main-table th.active\n{\n    display:table-cell;\n}\n#content .mid-side .main-table td.info-type-err,\n#content .mid-side .main-table td.info-type-4\n{\n    color: #fff;\n    background: #f68e8e;\n}\n#content .mid-side .main-table td.info-type-debug\n{\n    color: #fff;\n    background: #aad7d8;\n}\n#content .mid-side .main-table td.info-type-offline\n{\n    color: #fff;\n    background: #808080;\n}\n#content .mid-side .main-table td.info-type-info\n{\n    color: #fff;\n    background: #88b6f2;\n}\n#content .mid-side .main-table .err-where\n{\n    display: inline-block;\n\n    margin: 0 3px;\n    padding: 1px 3px;\n\n    border: 1px solid #ccc;\n    background: #ddd;\n}\n#content .mid-side .main-table .ico-browser\n{\n    display: inline-block;\n\n    width: 22px;\n    height: 22px;\n\n    cursor: pointer;\n}\n#content .mid-side .main-table .ico-edge\n{\n    background: url(/static/img/ico-edge.png) no-repeat;\n}\n#content .mid-side .main-table .ico-ie\n{\n    background: url(/static/img/ico-ie.png) no-repeat;\n}\n#content .mid-side .main-table .ico-chrome\n{\n    background: url(/static/img/ico-chrome.png) no-repeat;\n}\n#content .mid-side .main-table .ico-ff\n{\n    background: url(/static/img/ico-ff.png) no-repeat;\n}\n#content .mid-side .main-table .ico-opera\n{\n    background: url(/static/img/ico-opera.png) no-repeat;\n}\n#content .mid-side .main-table .ico-safari\n{\n    background: url(/static/img/ico-safari.png) no-repeat;\n}\n#content .mid-side .main-table .ico-qq\n{\n    background: url(/static/img/ico-qq.png) no-repeat;\n}\n#content .mid-side .main-table .ico-sougou\n{\n    background: url(/static/img/ico-sougou.png) no-repeat;\n}\n#content .mid-side .main-table .ico-360\n{\n    background: url(/static/img/ico-360.png) no-repeat;\n}\n#content .mid-side .main-table .ico-qb\n{\n    background: url(/static/img/ico-qb.png) no-repeat;\n}\n#content .mid-side .main-table .ico-liebao\n{\n    background: url(/static/img/ico-liebao.png) no-repeat;\n}\n#content .mid-side .main-table .ico-android\n{\n    background: url(/static/img/ico-android.png) no-repeat;\n}\n#content .mid-side .main-table .ico-ios\n{\n    background: url(/static/img/ico-ios.png) no-repeat;\n}\n#content .mid-side .main-table .ico-wx\n{\n    background: url(/static/img/ico-wx.png) no-repeat;\n}\n#content .mid-side .main-table .ico-windows\n {\n     background: url(/static/img/ico-windows.png) no-repeat;\n }\n#content .right-side\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 250px;\n    height: 100%;\n    color: #333;\n    //overflow-y: scroll;\n    background: #ededed;\n}\n\n#content .mid-side .main-table .ico-ie\n{\n    background: url(/static/img/ico-ie.png) no-repeat;\n}\n#content .mid-side .main-table .ico-chrome\n{\n    background: url(/static/img/ico-chrome.png) no-repeat;\n}\n#content .mid-side .main-table .ico-ff\n{\n    background: url(/static/img/ico-ff.png) no-repeat;\n}\n#content .mid-side .main-table .ico-opera\n{\n    background: url(/static/img/ico-opera.png) no-repeat;\n}\n#content .mid-side .main-table .ico-safari\n{\n    background: url(/static/img/ico-safari.png) no-repeat;\n}\n#content .mid-side .main-table .ico-qq\n{\n    background: url(/static/img/ico-qq.png) no-repeat;\n}\n#content .mid-side .main-table .ico-sougou\n{\n    background: url(/static/img/ico-sougou.png) no-repeat;\n}\n#content .mid-side .main-table .ico-360\n{\n    background: url(/static/img/ico-360.png) no-repeat;\n}\n#content .mid-side .main-table .ico-qb\n{\n    background: url(/static/img/ico-qb.png) no-repeat;\n}\n#content .mid-side .main-table .ico-liebao\n{\n    background: url(/static/img/ico-liebao.png) no-repeat;\n}\n#content .mid-side .main-table .ico-android\n{\n    background: url(/static/img/ico-android.png) no-repeat;\n}\n#content .mid-side .main-table .ico-ios\n{\n    background: url(/static/img/ico-ios.png) no-repeat;\n}\n#content .mid-side .main-table .ico-wx\n{\n    background: url(/static/img/ico-wx.png) no-repeat;\n}\n#content .mid-side .main-table .ico-maxthon\n{\n    background: url(/static/img/ico-maxthon.png) no-repeat;\n}\n\n#content .right-side section\n{\n    padding: 20px 30px 0;\n}\n#content .right-side label\n{\n    font-weight: normal;\n}\n#content .right-side #select-all\n{\n    margin-left: 20px;\n}\n#content .right-side .setting-title\n{\n    font-weight: normal;\n}\n#content .right-side .setting-msg\n{\n    padding: 0;\n}\n#content .right-side .setting-msg li\n{\n    line-height: 46px;\n\n    float: left;\n\n    width: 46px;\n    height: 46px;\n    margin-right: 5px;\n\n    list-style: none;\n\n    cursor: pointer;\n    text-align: center;\n\n    color: #fff;\n    border-radius: 100px;\n    background: #d6d6d6;\n}\n#content .right-side .setting-msg.offline-type li\n{\n\n    width: 42px;\n    height: 42px;\n    font-size: 12px;\n}\n\n#content .right-side .setting-msg li.msg-error\n{\n    background: #f68e8e;\n}\n#content .right-side .setting-msg li.msg-log\n{\n    background: #88b6f2;\n}\n#content .right-side .setting-msg li.msg-debug\n{\n    background: #aad7d8;\n}\n#content .right-side .setting-msg li.msg-offline\n{\n    background: #808080;\n}\n#content .right-side .setting-msg li.msg-dis\n{\n    color: #333;\n    background: #d6d6d6;\n}\n#content .right-side .keyword-ctn .keyword-ipt\n{\n    width: 70px;\n    height: 25px;\n    padding: 5px;\n\n    outline: none;\n}\n#content .right-side .keyword-ctn .keyword-btn\n{\n    font-size: 12px;\n\n    height: 25px;\n    margin-left: 10px;\n    padding: 3px;\n}\n#content .right-side .setting-search\n{\n    line-height: 36px;\n\n    float: left;\n\n    width: 137px;\n    height: 37px;\n\n    cursor: pointer;\n    text-align: center;\n\n    color: #fff;\n    border-radius: 3px;\n    background: #2d82f2;\n}\n#content .right-side .setting-show\n{\n    display: none;\n}\n#content .right-side .setting-show .item\n{\n    display: inline-block;\n    color: white;\n    cursor: pointer;\n    background-color: gray;\n    padding: 2px 5px 2px 5px;\n    margin: 2px;\n}\n#content .right-side .setting-show .item.active\n{\n    background-color: #2d82f2;\n\n}\n\n#content .right-side .setting-search.stop\n{\n    background: #A94442;\n}\n\n#content .right-side .setting-search.stop:hover\n{\n    background: #922523;\n}\n\n#content .right-side .setting-search:hover\n{\n    background: #165db8;\n}\n#content .right-side .keyword-tag\n{\n    font-size: 10px;\n    line-height: 18px;\n\n    position: relative;\n\n    display: inline-block;\n\n    height: 18px;\n    margin: 5px 0 5px 8px;\n    padding: 0 2px 0 12px;\n\n    text-decoration: none;\n\n    color: #333;\n    border-radius: 0 5px 5px 0;\n    background: #c9e5e8;\n}\n#content .right-side .keyword-tag .keyword-del\n{\n    margin: 0 5px 0 5px;\n    padding: 0 4px;\n\n    cursor: pointer;\n\n    border: 1px solid #c9e5e8;\n    border-radius: 10px;\n}\n#content .right-side .keyword-tag .keyword-del:hover\n{\n    border: 1px solid #fff;\n}\n#content .right-side .keyword-tag:before\n{\n    position: absolute;\n    top: 0;\n    left: -18px;\n\n    width: 0;\n    height: 0;\n\n    content: ' ';\n\n    border: 9px solid;\n    border-color: #ededed;\n    border-right-color: #c9e5e8;\n}\n#content .right-side .keyword-tag::after\n{\n    position: absolute;\n    top: 7px;\n    left: 2px;\n\n    width: 4px;\n    height: 4px;\n\n    content: ' ';\n\n    -webkit-border-radius: 4px;\n            border-radius: 4px;\n    background-color: #fff;\n    -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, .3);\n            box-shadow: 0 0 0 1px rgba(0, 0, 0, .3);\n}\n\n.page-nav\n{\n    margin-top: 20px;\n\n    text-align: center;\n}\n.page-nav .page-number\n{\n    line-height: 20px;\n\n    display: inline-block;\n\n    width: 20px;\n    height: 20px;\n    margin: 0 3px 30px;\n\n    text-decoration: none;\n\n    color: #fff;\n    -webkit-border-radius: 50%;\n    -webkit-border-radius: 50%;\n       -moz-border-radius: 50%;\n            border-radius: 50%;\n    background: #4d4d4d;\n}\n.page-nav .current\n{\n    cursor: default;\n\n    background: #88acdb;\n}\n.page-nav .extend\n{\n    margin: 0 27px;\n\n    color: #4d4d4d;\n}\n\n/*common */\n.main\n{\n    width: 920px;\n    margin: 0 auto;\n    padding: 20px;\n}\n.main img\n{\n    margin: 10px;\n    padding: 10px;\n\n    border: 1px solid #ddd;\n}\n.main b\n{\n    line-height: 30px;\n}\n\n.ml-mod\n{\n    /*text-indent: 2em;*/\n    font-size: 16px;\n    line-height: 22px;\n\n    margin: 5px;\n}\n.m-title\n{\n    font-size: 25px;\n    line-height: 40px;\n\n    color: #46acea;\n}\n/*common end*/\n/*@apply  coverguo 2014-12-31*/\n\n\n.formContainer\n{\n    padding-top: 10px;\n}\n.formContainer h3\n{\n    font-weight: bold;\n\n    margin-bottom: 40px;\n\n    text-align: center;\n}\n.form-wrap\n{\n    max-width: 800px;\n    margin: 60px auto;\n}\n\n/*@log  */\n\n.log-operation .log-select\n{\n    display: inline-block;\n\n    width: 200px;\n    height: 45px;\n}\n.log-operation .log-searchBtn\n{\n    line-height: 43px;\n\n    display: inline-block;\n\n    width: 120px;\n    height: 43px;\n    margin-left: 40px;\n\n    cursor: pointer;\n    text-align: center;\n\n    color: #fff;\n    border-radius: 3px;\n    background: #88b6f2;\n}\n\n\n\n/*@applyList  coverguo 2014-01-07*/\n\n/*common */\n.tableSelectCheckBox\n{\n    width: 17px;\n    height: 17px;\n\n    vertical-align: sub;\n}\n.parentCheckBox\n{\n    width: 20px;\n    height: 20px;\n}\n.searchPanel\n{\n    font-size: 16px;\n\n    margin: 0 20px;\n    padding: 10px;\n\n    border: 1px solid #cdcaca;\n    background: #ededed;\n}\n.searchPanel .search-info\n{\n    margin: 0 10px 0 20px;\n}\n.searchPanel select\n{\n    font-size: 14px;\n    line-height: 1.42857143;\n\n    width: 160px;\n    height: 34px;\n    padding: 6px 12px;\n\n    color: #555;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    background-color: #fff;\n    background-image: none;\n}\n.searchPanel button\n{\n    width: 80px;\n    margin-left: 20px;\n\n    vertical-align: bottom;\n}\n.btn-long\n{\n    min-width: 100px;\n}\n.modifyBtn\n{\n    position: relative;\n\n    overflow: hidden;\n\n    height: 26px;\n    margin-left: 10px;\n    padding: 3px 15px;\n\n    cursor: pointer;\n    text-align: center;\n\n    border: 1px solid #aaa;\n    border-radius: 12px;\n}\n.apply_operation\n{\n    position: relative;\n}\n.apply_operation .approveBlock\n{\n    position: absolute;\n    z-index: 99;\n    top: 40px;\n    left: -80px;\n\n    display: none;\n\n    width: 330px;\n    padding: 30px 10px 10px 10px;\n\n    border: 1px solid #9d9696;\n    border-radius: 4px;\n    background: #e5e5e5;\n}\n.approveBlock input[name='description']\n{\n    width: 100%;\n    padding-left: 1em;\n}\n.approveBlock .rowBlock\n{\n    margin-bottom: 8px;\n}\n.approveBlock .operation\n{\n    margin: 0 auto;\n}\n.operation button\n{\n    width: 100%;\n    height: 30px;\n}\n#statusPanel\n{\n    margin-bottom: 8px;\n}\n.statusBtn\n{\n    line-height: 24px;\n\n    display: inline-block;\n\n    -webkit-box-sizing: border-box;\n            box-sizing: border-box;\n    width: 73px;\n    height: 24px;\n\n    cursor: pointer;\n    text-align: center;\n\n    color: #fff;\n    background: #999;\n}\n.applying-active .applying,\n.agree-active .agree,\n.disagree-active .disagree\n{\n    background: #259bb6;;\n}\n.delete-active .delete\n{\n    background: #f33;;\n}\n.approveBlock .closeBtn\n{\n    position: absolute;\n    top: 4px;\n    right: 4px;\n\n    width: 40px;\n    height: 15px;\n\n    cursor: pointer;\n}\n\n/*@userpanel */\n.contentPanel\n{\n    max-width: 1200px;\n    margin: 40px auto;\n}\n.marginLeftSideBar\n{\n    /*margin-left: 207px;*/\n    padding-top: 10px;\n}\n.ListTable\n{\n    padding: 10px 20px ;\n}\n.ListTable .operationPanel\n{\n    display: inline-block;\n\n    margin-left: 30px;\n\n    vertical-align: text-bottom;\n}\n.infoPanel .info\n{\n    font-size: 18px;\n    font-weight: bold;\n    line-height: 45px;\n}\n\n.ListTable .infoPanel .projectName\n{\n    font-size: 22px;\n}\n.ListTable .tableTitle\n{\n    font-size: 24px;\n    font-weight: bold;\n    line-height: 40px;\n\n    display: block;\n\n    padding-left: 10px;\n\n    color: #fff;\n    border-bottom: 2px solid #ddd;\n    border-radius: 4px 4px 0 0;\n    background: #3a3d42;\n}\n.tableWrapper\n{\n    margin: -2px 1px 0 1px;\n    padding: 20px 10px;\n}\n.dataTable .listRow:hover\n{\n    background: #ddd;\n}\n\n.userEditor form\n{\n    margin: 0;\n}\n\n.main-table-hidefrom .td-7\n{\n    width: 135px;\n}\n\n#statistics section\n{\n    padding: 10px 0 ;\n}\n\n.approveBtn\n{\n    background: white;\n}\n\n.applyingBtn\n{\n    color: orange;\n}\n\n.passBtn\n{\n    color: green;\n}\n\n.rejectedBtn\n{\n    color: red;\n}\n\n.textOverflow\n{\n    display: block;\n    overflow: hidden;\n\n    white-space: nowrap;\n    text-overflow: ellipsis;\n}\n\n/*charts ͼ��*/\n\n#chart-table\n{\n    margin-top: 30px;\n    margin-bottom: 100px;\n}\n#content #chartsContainer\n{\n    overflow: auto;\n\n    height: auto;\n    /*  width: 98%;*/\n    margin: 0  auto;\n    padding: 0 15px;\n}\n\n\n\n#code-view .modal-body\n{\n    height: 600px;\n}\n\n#code-view .modal-body iframe\n{\n    width: 100%;\n    height: 100%;\n\n    border: none;\n}\n\n\n.toolar-ul\n{\n    line-height: 30px;\n\n    list-style: none;\n}\n\n.toolar-ul li\n{\n    position: relative;\n    left: -150px;\n\n    transition: .3s linear .1s ;\n}\n\n.toolar-ul li:nth-child(2)\n{\n    transition-delay: .2s ;\n}\n\n.toolar-ul li:nth-child(3)\n{\n    transition-delay: .3s ;\n}\n\n\n.toolar-ul.show li\n{\n    left: 0;\n}\n\n.apply_appkey\n{\n    position: relative;\n}\n\n.apply_appkey:hover .appkey-panel\n{\n    display: block;\n}\n\n.apply_appkey .appkey-panel\n{\n    position: absolute;\n    z-index: 99;\n    top: 30px;\n    left: -100px;\n\n    display: none;\n\n    width: 360px;\n    padding: 5px;\n\n    border: 1px solid #9d9696;\n    border-radius: 4px;\n    background: #e5e5e5;\n}\n\n.input-tips\n{\n    line-height: 1.8em;\n\n    padding-top: 5px;\n\n    text-align: left;\n}\n.input-tips b\n{\n    font-weight: normal;\n\n    padding: 0 5px;\n\n    border: 1px solid #ccc;\n    border-radius: 2px;\n    background: #eee;\n}\n\n.modal-body {\n    word-break: break-all;\n}\n\n@media (max-width: 500px) {\n    #content .mid-side{\n        margin-right: 200px;\n    }\n    #content .mid-side .main-table td.td-3,\n    #content .mid-side .main-table th.td-3,\n    #content .mid-side .main-table td.td-4,\n    #content .mid-side .main-table th.td-4,\n    #content .mid-side .main-table td.td-5,\n    #content .mid-side .main-table th.td-5,\n    #content .mid-side .main-table td.td-6,\n    #content .mid-side .main-table th.td-6,\n    #content .mid-side .main-table td.td-7,\n    #content .mid-side .main-table th.td-7{\n        display: none;\n    }\n    #content .right-side{\n        width: 200px;\n    }\n    #content .right-side section:first-child{\n        display: none;\n    }\n    #content .right-side section{\n        padding: 5px 10px;\n    }\n    #content .right-side section br{\n        display: none;\n    }\n    #content .right-side section p{\n        margin: 0;\n    }\n    #content .right-side .setting-show{\n        display: none;\n    }\n    #detailModal .content{\n        width: 100%;\n        padding: 10px;\n    }\n    #content .right-side .setting-title\n    {\n        display: inline-block;\n        margin-right: 5px;\n    }\n    #content .right-side .setting-msg\n    {\n        display: inline-block;\n        margin: 0;\n    }\n    #content .right-side .setting-msg li\n    {\n        width: 30px;\n        height: 30px;\n        line-height: 30px;\n        font-size: 12px;\n        margin-bottom: -7px;\n    }\n}\n"
  },
  {
    "path": "static/module/common/last.select.js",
    "content": "exports.init = function(){\n\tvar last_select = -1;\n\t\n\ttry {\n\n\t    last_select = localStorage.last_select >> 0; // jshint ignore:line\n\t\t\n\t\tvar $sb = $('#select-business');\n\t\t\n\t\tlast_select > 0 && $sb.find('[value=' + last_select + ']').length && $sb.val(last_select);\n\n\t\t$sb.on('change', function(){\n\t\t\tlocalStorage.last_select = $sb.val();\n\t\t});\n\n\t} catch (ex) {}\n\n};"
  },
  {
    "path": "static/module/home/load.home.js",
    "content": "var $nav = $('.toolar-ul');\n\n$nav.on(\"click\" , \"a\" , function (e){\n    e.preventDefault();\n    var href = $(this).attr(\"href\");\n    $(\"html,body\").animate({scrollTop:  ($(href).offset().top -120) + \"px\"});\n});\n\n\nsetTimeout(function (){\n    $nav.addClass(\"show\");\n},500)"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.ar.js",
    "content": "/**\n* Arabic translation for bootstrap-datetimepicker\n* Ala' Mohammad <amohammad@birzeit.ecu>\n*/\n;(function($){\n\t$.fn.datetimepicker.dates['ar'] = {\n\t\tdays: [\"الأحد\", \"الاثنين\", \"الثلاثاء\", \"الأربعاء\", \"الخميس\", \"الجمعة\", \"السبت\", \"الأحد\"],\n\t\tdaysShort: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\", \"أحد\"],\n\t\tdaysMin: [\"أح\", \"إث\", \"ث\", \"أر\", \"خ\", \"ج\", \"س\", \"أح\"],\n\t\tmonths: [\"يناير\", \"فبراير\", \"مارس\", \"أبريل\", \"مايو\", \"يونيو\", \"يوليو\", \"أغسطس\", \"سبتمبر\", \"أكتوبر\", \"نوفمبر\", \"ديسمبر\"],\n\t\tmonthsShort: [\"يناير\", \"فبراير\", \"مارس\", \"أبريل\", \"مايو\", \"يونيو\", \"يوليو\", \"أغسطس\", \"سبتمبر\", \"أكتوبر\", \"نوفمبر\", \"ديسمبر\"],\n\t\ttoday: \"هذا اليوم\",\n\t\tsuffix: [],\n\t\tmeridiem: [],\n\t\trtl: true\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.bg.js",
    "content": "/**\n * Bulgarian translation for bootstrap-datetimepicker\n * Apostol Apostolov <apostol.s.apostolov@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['bg'] = {\n\t\tdays: [\"Неделя\", \"Понеделник\", \"Вторник\", \"Сряда\", \"Четвъртък\", \"Петък\", \"Събота\", \"Неделя\"],\n\t\tdaysShort: [\"Нед\", \"Пон\", \"Вто\", \"Сря\", \"Чет\", \"Пет\", \"Съб\", \"Нед\"],\n\t\tdaysMin: [\"Н\", \"П\", \"В\", \"С\", \"Ч\", \"П\", \"С\", \"Н\"],\n\t\tmonths: [\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"],\n\t\tmonthsShort: [\"Ян\", \"Фев\", \"Мар\", \"Апр\", \"Май\", \"Юни\", \"Юли\", \"Авг\", \"Сеп\", \"Окт\", \"Ное\", \"Дек\"],\n\t\ttoday: \"днес\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.ca.js",
    "content": "/**\n * Catalan translation for bootstrap-datetimepicker\n * J. Garcia <jogaco.en@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['ca'] = {\n\t\tdays: [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\", \"Diumenge\"],\n\t\tdaysShort: [\"Diu\",  \"Dil\", \"Dmt\", \"Dmc\", \"Dij\", \"Div\", \"Dis\", \"Diu\"],\n\t\tdaysMin: [\"dg\", \"dl\", \"dt\", \"dc\", \"dj\", \"dv\", \"ds\", \"dg\"],\n\t\tmonths: [\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"],\n\t\tmonthsShort: [\"Gen\", \"Feb\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Oct\", \"Nov\", \"Des\"],\n\t\ttoday: \"Avui\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.cs.js",
    "content": "/**\n * Czech translation for bootstrap-datetimepicker\n * Matěj Koubík <matej@koubik.name>\n * Fixes by Michal Remiš <michal.remis@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['cs'] = {\n\t\tdays: [\"Neděle\", \"Pondělí\", \"Úterý\", \"Středa\", \"Čtvrtek\", \"Pátek\", \"Sobota\", \"Neděle\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Úte\", \"Stř\", \"Čtv\", \"Pát\", \"Sob\", \"Ned\"],\n\t\tdaysMin: [\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\", \"Ne\"],\n\t\tmonths: [\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"],\n\t\tmonthsShort: [\"Led\", \"Úno\", \"Bře\", \"Dub\", \"Kvě\", \"Čer\", \"Čnc\", \"Srp\", \"Zář\", \"Říj\", \"Lis\", \"Pro\"],\n\t\ttoday: \"Dnes\",\n\t\tsuffix: [],\n\t\tmeridiem: [],\n\t\tweekStart: 1,\n\t\tformat: \"dd.mm.yyyy\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.da.js",
    "content": "/**\n * Danish translation for bootstrap-datetimepicker\n * Christian Pedersen <http://github.com/chripede>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['da'] = {\n\t\tdays: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\", \"Søndag\"],\n\t\tdaysShort: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\", \"Søn\"],\n\t\tdaysMin: [\"Sø\", \"Ma\", \"Ti\", \"On\", \"To\", \"Fr\", \"Lø\", \"Sø\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"I Dag\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.de.js",
    "content": "/**\n * German translation for bootstrap-datetimepicker\n * Sam Zurcher <sam@orelias.ch>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['de'] = {\n\t\tdays: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\", \"Sonntag\"],\n\t\tdaysShort: [\"Son\", \"Mon\", \"Die\", \"Mit\", \"Don\", \"Fre\", \"Sam\", \"Son\"],\n\t\tdaysMin: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\", \"So\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mär\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"],\n\t\ttoday: \"Heute\",\n\t\tsuffix: [],\n\t\tmeridiem: [],\n\t\tweekStart: 1,\n\t\tformat: \"dd.mm.yyyy\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.ee.js",
    "content": "/**\n * Estonian translation for bootstrap-datetimepicker\n * Rene Korss <http://rene.korss.ee> \n */\n;(function($){\n\t$.fn.datetimepicker.dates['ee'] = {\n\t\tdays:        \t[\"Pühapäev\", \"Esmaspäev\", \"Teisipäev\", \"Kolmapäev\", \"Neljapäev\", \"Reede\", \"Laupäev\", \"Pühapäev\"],\n\t\tdaysShort:   \t[\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\", \"P\"],\n\t\tdaysMin:     \t[\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\", \"P\"],\n\t\tmonths:      \t[\"Jaanuar\", \"Veebruar\", \"Märts\", \"Aprill\", \"Mai\", \"Juuni\", \"Juuli\", \"August\", \"September\", \"Oktoober\", \"November\", \"Detsember\"],\n\t\tmonthsShort: \t[\"Jaan\", \"Veebr\", \"Märts\", \"Apr\", \"Mai\", \"Juuni\", \"Juuli\", \"Aug\", \"Sept\", \"Okt\", \"Nov\", \"Dets\"],\n\t\ttoday:       \t\"Täna\",\n\t\tsuffix:     \t[],\n\t\tmeridiem: \t\t[],\n\t\tweekStart: \t\t1,\n\t\tformat: \t\t\"dd.mm.yyyy hh:ii\"\n\t};\n}(jQuery));"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.el.js",
    "content": "/**\n* Greek translation for bootstrap-datetimepicker\n*/\n;(function($){\n  $.fn.datetimepicker.dates['el'] = {\n\t    days: [\"Κυριακή\", \"Δευτέρα\", \"Τρίτη\", \"Τετάρτη\", \"Πέμπτη\", \"Παρασκευή\", \"Σάββατο\", \"Κυριακή\"],\n\t    daysShort: [\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\", \"Κυρ\"],\n\t    daysMin: [\"Κυ\", \"Δε\", \"Τρ\", \"Τε\", \"Πε\", \"Πα\", \"Σα\", \"Κυ\"],\n\t    months: [\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"],\n\t    monthsShort: [\"Ιαν\", \"Φεβ\", \"Μαρ\", \"Απρ\", \"Μάι\", \"Ιουν\", \"Ιουλ\", \"Αυγ\", \"Σεπ\", \"Οκτ\", \"Νοε\", \"Δεκ\"],\n\t    today: \"Σήμερα\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n  };\n}(jQuery));"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.es.js",
    "content": "/**\n * Spanish translation for bootstrap-datetimepicker\n * Bruno Bonamin <bruno.bonamin@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['es'] = {\n\t\tdays: [\"Domingo\", \"Lunes\", \"Martes\", \"Miércoles\", \"Jueves\", \"Viernes\", \"Sábado\", \"Domingo\"],\n\t\tdaysShort: [\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\", \"Dom\"],\n\t\tdaysMin: [\"Do\", \"Lu\", \"Ma\", \"Mi\", \"Ju\", \"Vi\", \"Sa\", \"Do\"],\n\t\tmonths: [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"],\n\t\tmonthsShort: [\"Ene\", \"Feb\", \"Mar\", \"Abr\", \"May\", \"Jun\", \"Jul\", \"Ago\", \"Sep\", \"Oct\", \"Nov\", \"Dic\"],\n\t\ttoday: \"Hoy\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.fi.js",
    "content": "/**\n * Finnish translation for bootstrap-datetimepicker\n * Jaakko Salonen <https://github.com/jsalonen>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['fi'] = {\n\t\tdays: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\", \"sunnuntai\"],\n\t\tdaysShort: [\"sun\", \"maa\", \"tii\", \"kes\", \"tor\", \"per\", \"lau\", \"sun\"],\n\t\tdaysMin: [\"su\", \"ma\", \"ti\", \"ke\", \"to\", \"pe\", \"la\", \"su\"],\n\t\tmonths: [\"tammikuu\", \"helmikuu\", \"maaliskuu\", \"huhtikuu\", \"toukokuu\", \"kesäkuu\", \"heinäkuu\", \"elokuu\", \"syyskuu\", \"lokakuu\", \"marraskuu\", \"joulukuu\"],\n\t\tmonthsShort: [\"tam\", \"hel\", \"maa\", \"huh\", \"tou\", \"kes\", \"hei\", \"elo\", \"syy\", \"lok\", \"mar\", \"jou\"],\n\t\ttoday: \"tänään\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.fr.js",
    "content": "/**\n * French translation for bootstrap-datetimepicker\n * Nico Mollet <nico.mollet@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['fr'] = {\n\t\tdays: [\"Dimanche\", \"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\", \"Dimanche\"],\n\t\tdaysShort: [\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\", \"Dim\"],\n\t\tdaysMin: [\"D\", \"L\", \"Ma\", \"Me\", \"J\", \"V\", \"S\", \"D\"],\n\t\tmonths: [\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"],\n\t\tmonthsShort: [\"Jan\", \"Fev\", \"Mar\", \"Avr\", \"Mai\", \"Jui\", \"Jul\", \"Aou\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Aujourd'hui\",\n\t\tsuffix: [],\n\t\tmeridiem: [\"am\", \"pm\"],\n\t\tweekStart: 1,\n\t\tformat: \"dd/mm/yyyy\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.he.js",
    "content": "/**\n * Hebrew translation for bootstrap-datetimepicker\n * Sagie Maoz <sagie@maoz.info>\n */\n;(function($){\n  $.fn.datetimepicker.dates['he'] = {\n      days: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\", \"ראשון\"],\n      daysShort: [\"א\", \"ב\", \"ג\", \"ד\", \"ה\", \"ו\", \"ש\", \"א\"],\n      daysMin: [\"א\", \"ב\", \"ג\", \"ד\", \"ה\", \"ו\", \"ש\", \"א\"],\n      months: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\n      monthsShort: [\"ינו\", \"פבר\", \"מרץ\", \"אפר\", \"מאי\", \"יונ\", \"יול\", \"אוג\", \"ספט\", \"אוק\", \"נוב\", \"דצמ\"],\n      today: \"היום\",\n\t  suffix: [],\n\t  meridiem: [],\n      rtl: true\n  };\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.hr.js",
    "content": "/**\n * Croatian localisation\n */\n;(function($){\n\t$.fn.datetimepicker.dates['hr'] = {\n\t\tdays: [\"Nedjelja\", \"Ponedjelja\", \"Utorak\", \"Srijeda\", \"Četrtak\", \"Petak\", \"Subota\", \"Nedjelja\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Uto\", \"Srr\", \"Čet\", \"Pet\", \"Sub\", \"Ned\"],\n\t\tdaysMin: [\"Ne\", \"Po\", \"Ut\", \"Sr\", \"Če\", \"Pe\", \"Su\", \"Ne\"],\n\t\tmonths: [\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"],\n\t\tmonthsShort: [\"Sije\", \"Velj\", \"Ožu\", \"Tra\", \"Svi\", \"Lip\", \"Jul\", \"Kol\", \"Ruj\", \"Lis\", \"Stu\", \"Pro\"],\n\t\ttoday: \"Danas\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.hu.js",
    "content": "/**\n * Hungarian translation for bootstrap-datetimepicker\n * darevish <http://github.com/darevish>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['hu'] = {\n\t\tdays: [\"Vasárnap\", \"Hétfő\", \"Kedd\", \"Szerda\", \"Csütörtök\", \"Péntek\", \"Szombat\", \"Vasárnap\"],\n\t\tdaysShort: [\"Vas\", \"Hét\", \"Ked\", \"Sze\", \"Csü\", \"Pén\", \"Szo\", \"Vas\"],\n\t\tdaysMin: [\"V\", \"H\", \"K\", \"Sze\", \"Cs\", \"P\", \"Szo\", \"V\"],\n\t\tmonths: [\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Már\", \"Ápr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sze\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Ma\",\n\t\tsuffix: [],\n\t\tmeridiem: [],\n\t\tweekStart: 1\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.id.js",
    "content": "/**\n * Bahasa translation for bootstrap-datetimepicker\n * Azwar Akbar <azwar.akbar@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['id'] = {\n\t\tdays: [\"Minggu\", \"Senin\", \"Selasa\", \"Rabu\", \"Kamis\", \"Jumat\", \"Sabtu\", \"Minggu\"],\n\t\tdaysShort: [\"Mgu\", \"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\", \"Mgu\"],\n\t\tdaysMin: [\"Mg\", \"Sn\", \"Sl\", \"Ra\", \"Ka\", \"Ju\", \"Sa\", \"Mg\"],\n\t\tmonths: [\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ags\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.is.js",
    "content": "/**\n * Icelandic translation for bootstrap-datetimepicker\n * Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['is'] = {\n\t\tdays: [\"Sunnudagur\", \"Mánudagur\", \"Þriðjudagur\", \"Miðvikudagur\", \"Fimmtudagur\", \"Föstudagur\", \"Laugardagur\", \"Sunnudagur\"],\n\t\tdaysShort: [\"Sun\", \"Mán\", \"Þri\", \"Mið\", \"Fim\", \"Fös\", \"Lau\", \"Sun\"],\n\t\tdaysMin: [\"Su\", \"Má\", \"Þr\", \"Mi\", \"Fi\", \"Fö\", \"La\", \"Su\"],\n\t\tmonths: [\"Janúar\", \"Febrúar\", \"Mars\", \"Apríl\", \"Maí\", \"Júní\", \"Júlí\", \"Ágúst\", \"September\", \"Október\", \"Nóvember\", \"Desember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maí\", \"Jún\", \"Júl\", \"Ágú\", \"Sep\", \"Okt\", \"Nóv\", \"Des\"],\n\t\ttoday: \"Í Dag\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.it.js",
    "content": "/**\n * Italian translation for bootstrap-datetimepicker\n * Enrico Rubboli <rubboli@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['it'] = {\n\t\tdays: [\"Domenica\", \"Lunedi\", \"Martedi\", \"Mercoledi\", \"Giovedi\", \"Venerdi\", \"Sabato\", \"Domenica\"],\n\t\tdaysShort: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\", \"Dom\"],\n\t\tdaysMin: [\"Do\", \"Lu\", \"Ma\", \"Me\", \"Gi\", \"Ve\", \"Sa\", \"Do\"],\n\t\tmonths: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"],\n\t\tmonthsShort: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"],\n\t\ttoday: \"Oggi\",\n\t\tsuffix: [],\n\t\tmeridiem: [],\n\t\tweekStart: 1,\n\t\tformat: \"dd/mm/yyyy hh:ii:ss\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.ja.js",
    "content": "/**\n * Japanese translation for bootstrap-datetimepicker\n * Norio Suzuki <https://github.com/suzuki/>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['ja'] = {\n\t\tdays: [\"日曜\", \"月曜\", \"火曜\", \"水曜\", \"木曜\", \"金曜\", \"土曜\", \"日曜\"],\n\t\tdaysShort: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"],\n\t\tdaysMin: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"],\n\t\tmonths: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n\t\tmonthsShort: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n\t\ttoday: \"今日\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.ko.js",
    "content": "/**\n * Korean translation for bootstrap-datetimepicker\n * Gu Youn <http://github.com/guyoun>\n * Baekjoon Choi <http://github.com/Baekjoon>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['ko'] = {\n\t\tdays: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\", \"일요일\"],\n\t\tdaysShort: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\", \"일\"],\n\t\tdaysMin: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\", \"일\"],\n\t\tmonths: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"],\n\t\tmonthsShort: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"],\n\t\tsuffix: [],\n\t\tmeridiem: [\"오전\", \"오후\"],\n        today: \"오늘\",\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.lt.js",
    "content": "﻿/**\n * Lithuanian translation for bootstrap-datetimepicker\n * Šarūnas Gliebus <ssharunas@yahoo.co.uk>\n */\n\n;(function($){\n    $.fn.datetimepicker.dates['lt'] = {\n        days: [\"Sekmadienis\", \"Pirmadienis\", \"Antradienis\", \"Trečiadienis\", \"Ketvirtadienis\", \"Penktadienis\", \"Šeštadienis\", \"Sekmadienis\"],\n        daysShort: [\"S\", \"Pr\", \"A\", \"T\", \"K\", \"Pn\", \"Š\", \"S\"],\n        daysMin: [\"Sk\", \"Pr\", \"An\", \"Tr\", \"Ke\", \"Pn\", \"Št\", \"Sk\"],\n        months: [\"Sausis\", \"Vasaris\", \"Kovas\", \"Balandis\", \"Gegužė\", \"Birželis\", \"Liepa\", \"Rugpjūtis\", \"Rugsėjis\", \"Spalis\", \"Lapkritis\", \"Gruodis\"],\n        monthsShort: [\"Sau\", \"Vas\", \"Kov\", \"Bal\", \"Geg\", \"Bir\", \"Lie\", \"Rugp\", \"Rugs\", \"Spa\", \"Lap\", \"Gru\"],\n        today: \"Šiandien\",\n\t\tsuffix: [],\n\t\tmeridiem: [],\n        weekStart: 1\n    };\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.lv.js",
    "content": "/**\n * Latvian translation for bootstrap-datetimepicker\n * Artis Avotins <artis@apit.lv>\n */\n\n;(function($){\n    $.fn.datetimepicker.dates['lv'] = {\n        days: [\"Svētdiena\", \"Pirmdiena\", \"Otrdiena\", \"Trešdiena\", \"Ceturtdiena\", \"Piektdiena\", \"Sestdiena\", \"Svētdiena\"],\n        daysShort: [\"Sv\", \"P\", \"O\", \"T\", \"C\", \"Pk\", \"S\", \"Sv\"],\n        daysMin: [\"Sv\", \"Pr\", \"Ot\", \"Tr\", \"Ce\", \"Pk\", \"St\", \"Sv\"],\n        months: [\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis\", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"],\n        monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jūn\", \"Jūl\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec.\"],\n        today: \"Šodien\",\n\t\tsuffix: [],\n\t\tmeridiem: [],\n        weekStart: 1\n    };\n}(jQuery));"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.ms.js",
    "content": "/**\n * Malay translation for bootstrap-datetimepicker\n * Ateman Faiz <noorulfaiz@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['ms'] = {\n\t\tdays: [\"Ahad\", \"Isnin\", \"Selasa\", \"Rabu\", \"Khamis\", \"Jumaat\", \"Sabtu\", \"Ahad\"],\n\t\tdaysShort: [\"Aha\", \"Isn\", \"Sel\", \"Rab\", \"Kha\", \"Jum\", \"Sab\", \"Aha\"],\n\t\tdaysMin: [\"Ah\", \"Is\", \"Se\", \"Ra\", \"Kh\", \"Ju\", \"Sa\", \"Ah\"],\n\t\tmonths: [\"Januari\", \"Februari\", \"Mac\", \"April\", \"Mei\", \"Jun\", \"Julai\", \"Ogos\", \"September\", \"Oktober\", \"November\", \"Disember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ogo\", \"Sep\", \"Okt\", \"Nov\", \"Dis\"],\n\t\ttoday: \"Hari Ini\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.nb.js",
    "content": "/**\n * Norwegian (bokmål) translation for bootstrap-datetimepicker\n * Fredrik Sundmyhr <http://github.com/fsundmyhr>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['nb'] = {\n\t\tdays: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\", \"Søndag\"],\n\t\tdaysShort: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\", \"Søn\"],\n\t\tdaysMin: [\"Sø\", \"Ma\", \"Ti\", \"On\", \"To\", \"Fr\", \"Lø\", \"Sø\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\n\t\ttoday: \"I Dag\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.nl.js",
    "content": "/**\n * Dutch translation for bootstrap-datetimepicker\n * Reinier Goltstein <mrgoltstein@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['nl'] = {\n\t\tdays: [\"Zondag\", \"Maandag\", \"Dinsdag\", \"Woensdag\", \"Donderdag\", \"Vrijdag\", \"Zaterdag\", \"Zondag\"],\n\t\tdaysShort: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\", \"Zo\"],\n\t\tdaysMin: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\", \"Zo\"],\n\t\tmonths: [\"Januari\", \"Februari\", \"Maart\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Augustus\", \"September\", \"Oktober\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mrt\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Vandaag\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.no.js",
    "content": "/**\n * Norwegian translation for bootstrap-datetimepicker\n * Rune Warhuus <rune@dinkdonkd.no>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['no'] = {\n\t\tdays: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\", \"Søndag\"],\n\t\tdaysShort: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\", \"Søn\"],\n\t\tdaysMin: [\"Sø\", \"Ma\", \"Ti\", \"On\", \"To\", \"Fr\", \"Lø\", \"Sø\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\n\t\ttoday: \"I Dag\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.pl.js",
    "content": "/**\n * Polish translation for bootstrap-datetimepicker\n * Robert <rtpm@gazeta.pl>\n */\n;(function($){\n$.fn.datetimepicker.dates['pl'] = {\n        days: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\", \"Niedziela\"],\n        daysShort: [\"Nie\", \"Pn\", \"Wt\", \"Śr\", \"Czw\", \"Pt\", \"So\", \"Nie\"],\n        daysMin: [\"N\", \"Pn\", \"Wt\", \"Śr\", \"Cz\", \"Pt\", \"So\", \"N\"],\n        months: [\"Styczeń\", \"Luty\", \"Marzec\", \"Kwiecień\", \"Maj\", \"Czerwiec\", \"Lipiec\", \"Sierpień\", \"Wrzesień\", \"Październik\", \"Listopad\", \"Grudzień\"],\n        monthsShort: [\"Sty\", \"Lu\", \"Mar\", \"Kw\", \"Maj\", \"Cze\", \"Lip\", \"Sie\", \"Wrz\", \"Pa\", \"Lis\", \"Gru\"],\n        today: \"Dzisiaj\",\n\t\tsuffix: [],\n\t\tmeridiem: [],\n        weekStart: 1\n};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.pt-BR.js",
    "content": "/**\n * Brazilian translation for bootstrap-datetimepicker\n * Cauan Cabral <cauan@radig.com.br>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['pt-BR'] = {\n        format: 'dd/mm/yyyy',\n\t\tdays: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\", \"Domingo\"],\n\t\tdaysShort: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\", \"Dom\"],\n\t\tdaysMin: [\"Do\", \"Se\", \"Te\", \"Qu\", \"Qu\", \"Se\", \"Sa\", \"Do\"],\n\t\tmonths: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\n\t\tmonthsShort: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"],\n\t\ttoday: \"Hoje\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.pt.js",
    "content": "/**\n * Portuguese translation for bootstrap-datetimepicker\n * Original code: Cauan Cabral <cauan@radig.com.br>\n * Tiago Melo <tiago.blackcode@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['pt'] = {\n\t\tdays: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\", \"Domingo\"],\n\t\tdaysShort: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\", \"Dom\"],\n\t\tdaysMin: [\"Do\", \"Se\", \"Te\", \"Qu\", \"Qu\", \"Se\", \"Sa\", \"Do\"],\n\t\tmonths: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\n\t\tmonthsShort: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"],\n\t\tsuffix: [],\n\t\tmeridiem: [\"am\",\"pm\"],\n\t\ttoday: \"Hoje\"\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.ro.js",
    "content": "/**\n * Romanian translation for bootstrap-datetimepicker\n * Cristian Vasile <cristi.mie@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['ro'] = {\n\t\tdays: [\"Duminică\", \"Luni\", \"Marţi\", \"Miercuri\", \"Joi\", \"Vineri\", \"Sâmbătă\", \"Duminică\"],\n\t\tdaysShort: [\"Dum\", \"Lun\", \"Mar\", \"Mie\", \"Joi\", \"Vin\", \"Sâm\", \"Dum\"],\n\t\tdaysMin: [\"Du\", \"Lu\", \"Ma\", \"Mi\", \"Jo\", \"Vi\", \"Sâ\", \"Du\"],\n\t\tmonths: [\"Ianuarie\", \"Februarie\", \"Martie\", \"Aprilie\", \"Mai\", \"Iunie\", \"Iulie\", \"August\", \"Septembrie\", \"Octombrie\", \"Noiembrie\", \"Decembrie\"],\n\t\tmonthsShort: [\"Ian\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Iun\", \"Iul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Astăzi\",\n\t\tsuffix: [],\n\t\tmeridiem: [],\n\t\tweekStart: 1\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.rs-latin.js",
    "content": "/**\n * Serbian latin translation for bootstrap-datetimepicker\n * Bojan Milosavlević <milboj@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['rs'] = {\n\t\tdays: [\"Nedelja\",\"Ponedeljak\", \"Utorak\", \"Sreda\", \"Četvrtak\", \"Petak\", \"Subota\", \"Nedelja\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"Čet\", \"Pet\", \"Sub\", \"Ned\"],\n\t\tdaysMin: [\"N\", \"Po\", \"U\", \"Sr\", \"Č\", \"Pe\", \"Su\", \"N\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Avg\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Danas\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.rs.js",
    "content": "/**\n * Serbian cyrillic translation for bootstrap-datetimepicker\n * Bojan Milosavlević <milboj@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['rs'] = {\n\t\tdays: [\"Недеља\",\"Понедељак\", \"Уторак\", \"Среда\", \"Четвртак\", \"Петак\", \"Субота\", \"Недеља\"],\n\t\tdaysShort: [\"Нед\", \"Пон\", \"Уто\", \"Сре\", \"Чет\", \"Пет\", \"Суб\", \"Нед\"],\n\t\tdaysMin: [\"Н\", \"По\", \"У\", \"Ср\", \"Ч\", \"Пе\", \"Су\", \"Н\"],\n\t\tmonths: [\"Јануар\", \"Фебруар\", \"Март\", \"Април\", \"Мај\", \"Јун\", \"Јул\", \"Август\", \"Септембар\", \"Октобар\", \"Новембар\", \"Децембар\"],\n\t\tmonthsShort: [\"Јан\", \"Феб\", \"Мар\", \"Апр\", \"Мај\", \"Јун\", \"Јул\", \"Авг\", \"Сеп\", \"Окт\", \"Нов\", \"Дец\"],\n\t\ttoday: \"Данас\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.ru.js",
    "content": "/**\n * Russian translation for bootstrap-datetimepicker\n * Victor Taranenko <darwin@snowdale.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['ru'] = {\n\t\tdays: [\"Воскресенье\", \"Понедельник\", \"Вторник\", \"Среда\", \"Четверг\", \"Пятница\", \"Суббота\", \"Воскресенье\"],\n\t\tdaysShort: [\"Вск\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Суб\", \"Вск\"],\n\t\tdaysMin: [\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\", \"Вс\"],\n\t\tmonths: [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Май\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Октябрь\", \"Ноябрь\", \"Декабрь\"],\n\t\tmonthsShort: [\"Янв\", \"Фев\", \"Мар\", \"Апр\", \"Май\", \"Июн\", \"Июл\", \"Авг\", \"Сен\", \"Окт\", \"Ноя\", \"Дек\"],\n\t\ttoday: \"Сегодня\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.sk.js",
    "content": "/**\n * Slovak translation for bootstrap-datetimepicker\n * Marek Lichtner <marek@licht.sk>\n * Fixes by Michal Remiš <michal.remis@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates[\"sk\"] = {\n\t\tdays: [\"Nedeľa\", \"Pondelok\", \"Utorok\", \"Streda\", \"Štvrtok\", \"Piatok\", \"Sobota\", \"Nedeľa\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Uto\", \"Str\", \"Štv\", \"Pia\", \"Sob\", \"Ned\"],\n\t\tdaysMin: [\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pia\", \"So\", \"Ne\"],\n\t\tmonths: [\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Dnes\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.sl.js",
    "content": "/**\n * Slovene translation for bootstrap-datetimepicker\n * Gregor Rudolf <gregor.rudolf@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['sl'] = {\n\t\tdays: [\"Nedelja\", \"Ponedeljek\", \"Torek\", \"Sreda\", \"Četrtek\", \"Petek\", \"Sobota\", \"Nedelja\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\", \"Ned\"],\n\t\tdaysMin: [\"Ne\", \"Po\", \"To\", \"Sr\", \"Če\", \"Pe\", \"So\", \"Ne\"],\n\t\tmonths: [\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Avg\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Danes\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.sv.js",
    "content": "/**\n * Swedish translation for bootstrap-datetimepicker\n * Patrik Ragnarsson <patrik@starkast.net>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['sv'] = {\n\t\tdays: [\"Söndag\", \"Måndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\", \"Söndag\"],\n\t\tdaysShort: [\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\", \"Sön\"],\n\t\tdaysMin: [\"Sö\", \"Må\", \"Ti\", \"On\", \"To\", \"Fr\", \"Lö\", \"Sö\"],\n\t\tmonths: [\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"I Dag\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.sw.js",
    "content": "/**\n * Swahili translation for bootstrap-datetimepicker\n * Edwin Mugendi <https://github.com/edwinmugendi>\n * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku\n */\n;(function($){\n    $.fn.datetimepicker.dates['sw'] = {\n        days: [\"Jumapili\", \"Jumatatu\", \"Jumanne\", \"Jumatano\", \"Alhamisi\", \"Ijumaa\", \"Jumamosi\", \"Jumapili\"],\n        daysShort: [\"J2\", \"J3\", \"J4\", \"J5\", \"Alh\", \"Ij\", \"J1\", \"J2\"],\n        daysMin: [\"2\", \"3\", \"4\", \"5\", \"A\", \"I\", \"1\", \"2\"],\n        months: [\"Januari\", \"Februari\", \"Machi\", \"Aprili\", \"Mei\", \"Juni\", \"Julai\", \"Agosti\", \"Septemba\", \"Oktoba\", \"Novemba\", \"Desemba\"],\n        monthsShort: [\"Jan\", \"Feb\", \"Mac\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ago\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\n        today: \"Leo\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n    };\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.th.js",
    "content": "/**\n * Thai translation for bootstrap-datetimepicker\n * Suchau Jiraprapot <seroz24@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['th'] = {\n\t\tdays: [\"อาทิตย์\", \"จันทร์\", \"อังคาร\", \"พุธ\", \"พฤหัส\", \"ศุกร์\", \"เสาร์\", \"อาทิตย์\"],\n\t\tdaysShort: [\"อา\", \"จ\", \"อ\", \"พ\", \"พฤ\", \"ศ\", \"ส\", \"อา\"],\n\t\tdaysMin: [\"อา\", \"จ\", \"อ\", \"พ\", \"พฤ\", \"ศ\", \"ส\", \"อา\"],\n\t\tmonths: [\"มกราคม\", \"กุมภาพันธ์\", \"มีนาคม\", \"เมษายน\", \"พฤษภาคม\", \"มิถุนายน\", \"กรกฎาคม\", \"สิงหาคม\", \"กันยายน\", \"ตุลาคม\", \"พฤศจิกายน\", \"ธันวาคม\"],\n\t\tmonthsShort: [\"ม.ค.\", \"ก.พ.\", \"มี.ค.\", \"เม.ย.\", \"พ.ค.\", \"มิ.ย.\", \"ก.ค.\", \"ส.ค.\", \"ก.ย.\", \"ต.ค.\", \"พ.ย.\", \"ธ.ค.\"],\n\t\ttoday: \"วันนี้\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.tr.js",
    "content": "/**\n * Turkish translation for bootstrap-datetimepicker\n * Serkan Algur <kaisercrazy_2@hotmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['tr'] = {\n\t\tdays: [\"Pazar\", \"Pazartesi\", \"Salı\", \"Çarşamba\", \"Perşembe\", \"Cuma\", \"Cumartesi\", \"Pazar\"],\n\t\tdaysShort: [\"Pz\", \"Pzt\", \"Sal\", \"Çrş\", \"Prş\", \"Cu\", \"Cts\", \"Pz\"],\n\t\tdaysMin: [\"Pz\", \"Pzt\", \"Sa\", \"Çr\", \"Pr\", \"Cu\", \"Ct\", \"Pz\"],\n\t\tmonths: [\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"],\n\t\tmonthsShort: [\"Oca\", \"Şub\", \"Mar\", \"Nis\", \"May\", \"Haz\", \"Tem\", \"Ağu\", \"Eyl\", \"Eki\", \"Kas\", \"Ara\"],\n\t\ttoday: \"Bugün\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));\n\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.ua.js",
    "content": "/**\n * Ukrainian translation for bootstrap-datepicker\n * Igor Polynets\n */\n;(function($){\n\t$.fn.datetimepicker.dates['ua'] = {\n\t\tdays: [\"Неділя\", \"Понеділок\", \"Вівторок\", \"Середа\", \"Четверг\", \"П'ятниця\", \"Субота\", \"Неділя\"],\n\t\tdaysShort: [\"Нед\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Суб\", \"Нед\"],\n\t\tdaysMin: [\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\", \"Нд\"],\n\t\tmonths: [\"Cічень\", \"Лютий\", \"Березень\", \"Квітень\", \"Травень\", \"Червень\", \"Липень\", \"Серпень\", \"Вересень\", \"Жовтень\", \"Листопад\", \"Грудень\"],\n\t\tmonthsShort: [\"Січ\", \"Лют\", \"Бер\", \"Квт\", \"Трв\", \"Чер\", \"Лип\", \"Сер\", \"Вер\", \"Жов\", \"Лис\", \"Грд\"],\n\t\ttoday: \"Сьогодні\",\n\t\tweekStart: 1\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.uk.js",
    "content": "/**\n * Ukrainian translation for bootstrap-datetimepicker\n * Andrey Vityuk <andrey [dot] vityuk [at] gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['uk'] = {\n\t\tdays: [\"Неділя\", \"Понеділок\", \"Вівторок\", \"Середа\", \"Четвер\", \"П'ятниця\", \"Субота\", \"Неділя\"],\n\t\tdaysShort: [\"Нед\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Суб\", \"Нед\"],\n\t\tdaysMin: [\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\", \"Нд\"],\n\t\tmonths: [\"Січень\", \"Лютий\", \"Березень\", \"Квітень\", \"Травень\", \"Червень\", \"Липень\", \"Серпень\", \"Вересень\", \"Жовтень\", \"Листопад\", \"Грудень\"],\n\t\tmonthsShort: [\"Січ\", \"Лют\", \"Бер\", \"Кві\", \"Тра\", \"Чер\", \"Лип\", \"Сер\", \"Вер\", \"Жов\", \"Лис\", \"Гру\"],\n\t\ttoday: \"Сьогодні\",\n\t\tsuffix: [],\n\t\tmeridiem: []\n\t};\n}(jQuery));"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.zh-CN.js",
    "content": "/**\n * Simplified Chinese translation for bootstrap-datetimepicker\n * Yuan Cheung <advanimal@gmail.com>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['zh-CN'] = {\n\t\t\tdays: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\", \"星期日\"],\n\t\t\tdaysShort: [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\", \"周日\"],\n\t\t\tdaysMin:  [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"],\n\t\t\tmonths: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n\t\t\tmonthsShort: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n\t\t\ttoday: \"今日\",\n\t\t\tsuffix: [],\n\t\t\tmeridiem: [\"上午\", \"下午\"]\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/locales/bootstrap-datetimepicker.zh-TW.js",
    "content": "/**\n * Traditional Chinese translation for bootstrap-datetimepicker\n * Rung-Sheng Jang <daniel@i-trend.co.cc>\n */\n;(function($){\n\t$.fn.datetimepicker.dates['zh-TW'] = {\n\tdays: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\", \"星期日\"],\n\t  daysShort: [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\", \"周日\"],\n\t\tdaysMin:  [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"],\n\t\tmonths: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n\t\tmonthsShort: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n\t\ttoday: \"今天\",\n    suffix: [],\n\t\tmeridiem: [\"上午\", \"下午\"]\n\t};\n}(jQuery));\n"
  },
  {
    "path": "static/module/log/load.log.js",
    "content": "var log = require(\"./mod.log\");\nlog.init();\n\nvar source_trigger = require(\"./source.trigger\");\nsource_trigger.init();\n\nvar last_select = require(\"../common/last.select\");\nlast_select.init();"
  },
  {
    "path": "static/module/log/load.offlinelog.js",
    "content": "var log = require(\"./mod.offlinelog\");\nlog.init();\n\nvar source_trigger = require(\"./source.trigger\");\nsource_trigger.init();\n\n//var last_select = require(\"../common/last.select\");\n//last_select.init();\n"
  },
  {
    "path": "static/module/log/load.realtime.js",
    "content": "var log = require(\"./mod.realtime\");\nlog.init();\n\nvar source_trigger = require(\"./source.trigger\");\nsource_trigger.init();\n\nvar last_select = require(\"../common/last.select\");\nlast_select.init();"
  },
  {
    "path": "static/module/log/logDetailDialog/logDetailDialog.js",
    "content": "var Delegator = require(\"delegator\");\nvar dialogTpl = require(\"./tpl/dialog.ejs\");\n\n    var container;\n\n    function hide() {\n        container.removeClass('in');\n        container.find('.modal-backdrop').removeClass('in');\n        setTimeout(function () {\n            container.remove();\n            container = undefined;\n        }, 300);\n    }\n\n\n    function Dialog (param) {\n        if (container) {\n            container.remove();\n            container = undefined;\n        }\n        container = $(dialogTpl(param))\n            .appendTo(document.body)\n            .show();\n\n        var key,\n            action,\n            delegator,\n            on =  {};\n\n        delegator = (new Delegator(container))\n            .on('click', 'close', hide);\n\n        for (key in on) {\n            action = key.split('/');\n            delegator.on(action[0], action[1], on[key]);\n        }\n\n        setTimeout(function () {\n            container.addClass('in');\n            container.find('.modal-backdrop').addClass('in');\n\n        }, 0);\n    }\n\n    Dialog.hide = hide;\n\nmodule.exports =  Dialog;\n"
  },
  {
    "path": "static/module/log/logDetailDialog/tpl/dialog.ejs",
    "content": "\n\n<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"logDetailModal\">\n    <div class=\"modal-backdrop fade\"></div>\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\n                <h4 class=\"modal-title\">日志详情</h4>\n            </div>\n            <div class=\"modal-body\">\n                <p>\n                    <b>Time：</b><span class=\"time\"><%=time%></span>\n                </p>\n                <p>\n                    <b>Info：</b><div class=\"info\"><%=info%></div>\n                </p>\n                <p>\n                    <b>uin：</b><span class=\"uin\"><%=uin%></span>\n                </p>\n                <p>\n                    <b>ip：</b><span class=\"ip\"><%=ip%></span>\n                </p>\n                <p>\n                    <b>agent：</b><div class=\"userAgent\"><%=agent%></div>\n                </p>\n                <p>\n                    <b>Source：</b><div class=\"source\"><%=source%></div>\n                </p>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\n            </div>\n\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "static/module/log/mod.log.js",
    "content": "/* global _ */\nvar dialog = require(\"dialog/dialog\");\nvar Delegator = require(\"delegator\");\n\nvar logTable = require(\"./template/logTable.ejs\");\nvar keyword = require(\"./template/keyword.ejs\");\nvar debar = require(\"./template/debar.ejs\");\n\nvar logDetailDialog = require(\"./logDetailDialog/logDetailDialog\");\n\nrequire(\"jquery/jquery.datetimepicker\");\n\nvar logConfig = {\n        id: 0,\n        startDate: 0,\n        endDate: 0,\n        include: [],\n        exclude: [],\n        index: 0,\n        level: [1, 2, 4]\n    },\n\n    encodeHtml = function(str) {\n        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n    },\n\n    formatMsg = function (str){\n        return str.replace(/@/gi , '<br/><b style=\"color:#A78830\">@</b> ')\n    };\n\nvar maxDate = 60 * 60 * 1000 * 24 * 2;\n\nvar currentSelectId = -1,\n    currentIndex = 0,\n    noData = false,\n    MAX_LIMIT = 500,\n    loading = false;\n\nfunction addKeyword() {\n    var value = $.trim($('#keyword-ipt').val());\n    if (value !== '') {\n        if (!removeValue(value, logConfig.include)) {\n            $('#keyword-group').append(keyword({\n                it: {\n                    value: value\n                },\n                opt: {\n                    encodeHtml: encodeHtml,\n                    set: Delegator.set\n                }\n            }));\n        }\n        logConfig.include.push(value);\n        $('#keyword-ipt').val('');\n    }\n}\n\nfunction addDebar() {\n    var value = $.trim($('#debar-ipt').val());\n    if (value !== '') {\n        if (!removeValue(value, logConfig.exclude)) {\n            $('#debar-group').append(debar({\n                it: {\n                    value: value\n                },\n                opt: {\n                    encodeHtml: encodeHtml,\n                    set: Delegator.set\n                }\n            }));\n        }\n        logConfig.exclude.push(value);\n        $('#debar-ipt').val('');\n    }\n}\n\nfunction bindEvent() {\n    new Delegator(document.body)\n        .on('click', 'searchBusiness', function() {\n            // search business\n        }).on('click', 'addKeyword', addKeyword)\n        .on('keyup', 'addKeyword', function(e) {\n            if (e.which === 13) addKeyword();\n        }).on('click', 'removeKeywords', function() {\n            logConfig.include.length = 0;\n            $('#keyword-group').empty();\n        }).on('click', 'removeKeyword', function(e, value) {\n            $(this).closest('.keyword-tag').remove();\n            removeValue(value, logConfig.include);\n        }).on('click', 'addDebar', addDebar)\n        .on('keyup', 'addDebar', function(e) {\n            if (e.which === 13) addDebar();\n        }).on('click', 'removeDebars', function() {\n            logConfig.exclude.length = 0;\n            $('#debar-group').empty();\n        }).on('click', 'removeDebar', function(e, value) {\n            $(this).closest('.keyword-tag').remove();\n            removeValue(value, logConfig.exclude);\n        }).on('click', 'showLogs', function() {\n            var startTime = ($('#startTime').val() || '').replace(/-/g, '/'),\n                endTime = ($('#endTime').val() || '').replace(/-/g, '/');\n            logConfig.startDate = startTime === '' ?\n                new Date().getTime() - maxDate :\n                new Date(startTime).getTime();\n            logConfig.endDate = endTime === '' ?\n                new Date().getTime() :\n                new Date(endTime).getTime();\n            //测试时间是否符合\n            if (isTimeRight(logConfig.startDate, logConfig.endDate)) {\n                showLogs(logConfig, false);\n            }\n        })\n        .on('click', 'alertModal', function(e) {\n            var $target=$(e.currentTarget);\n\n            logDetailDialog({\n                id :$target.text(),\n                time :$target.siblings('.td-2').text(),\n                info :$target.siblings('.td-3').html(),\n                uin :$target.siblings('.td-4').text(),\n                ip :$target.siblings('.td-5').text(),\n                agent : $target.siblings('.td-6').attr(\"title\"),\n                source :   $target.siblings('.td-7').html() ,\n            })\n\n        }).on('change', 'selectBusiness', function() {\n            var val = $(this).val() - 0;\n            currentSelectId = val;\n            $('#log-table').html('');\n            currentIndex = 0;\n            noData = false;\n            logConfig.id = val;\n        }).on('click', 'showTd', function(e) {\n            var $target=$(e.currentTarget).toggleClass('active');\n            $('.main-table .'+$target.data('td')).toggleClass('active');\n            //保存用户偏好，隐藏为true\n            //console.log($target.data('td'));\n            localStorage.setItem($target.data('td'),!$target.hasClass('active'));\n            //console.log(localStorage);\n            window.classes[$target.data('td')]=$target.hasClass('active')?'active':'';\n        }).on('click', 'errorTypeClick', function() {\n            if ($(this).hasClass('msg-dis')) {\n                logConfig.level.push(4);\n                $(this).removeClass('msg-dis');\n            } else {\n                logConfig.level.splice($.inArray(4, logConfig.level), 1);\n                $(this).addClass('msg-dis');\n            }\n        }).on('click', 'logTypeClick', function() {\n            if ($(this).hasClass('msg-dis')) {\n                logConfig.level.push(2);\n                $(this).removeClass('msg-dis');\n            } else {\n                logConfig.level.splice($.inArray(2, logConfig.level), 1);\n                $(this).addClass('msg-dis');\n            }\n        }).on('click', 'debugTypeClick', function() {\n            if ($(this).hasClass('msg-dis')) {\n                logConfig.level.push(1);\n                $(this).removeClass('msg-dis');\n            } else {\n                logConfig.level.splice($.inArray(1, logConfig.level), 1);\n                $(this).addClass('msg-dis');\n            }\n        });\n\n    var throttled = _.throttle(function(e) {\n        var $this = $(this);\n        var top = $this.scrollTop();\n        var height = $this.height();\n        var scrollHeight = $this.prop('scrollHeight');\n\n        if (scrollHeight - height - top <= 200 && !noData) {\n            logConfig.id = currentSelectId;\n            showLogs(logConfig, true);\n        }\n    }, 100);\n\n    $('.main-mid').scroll(throttled);\n}\n\nfunction isTimeRight(begin, end) {\n    if (begin > end) {\n        dialog({\n            header: '时间范围错误',\n            body: '结束时间必须在开始时间之后！'\n        });\n        return false;\n    } else if (end - maxDate > begin) {\n        dialog({\n            header: '时间范围错误',\n            body: '结束时间和开始时间间隔需在三天之内！'\n        });\n        return false;\n    }\n    return true;\n\n}\n\nfunction removeValue(value, arr) {\n    for (var l = arr.length; l--;) {\n        if (arr[l] === value) {\n            return arr.splice(l, 1);\n        }\n    }\n}\n\nfunction showLogs(opts, isAdd) {\n    opts.id = $('#select-business').val() >> 0; // jshint ignore:line\n    if (opts.id <= 0 || loading) {\n        !loading && dialog({\n            header: '警告',\n            body: '请选择一个项目'\n        });\n        return;\n    }\n\n    loading = true;\n\n    $(\".setting-search\").text(\"正在加载...\")\n\n\n    if (!isAdd) {\n        currentIndex = 0;\n        noData = false;\n    }\n\n    var url = '/controller/logAction/queryLogList.do';\n    $.ajax({\n        url: url,\n        data: {\n            id: opts.id,\n            startDate: opts.startDate,\n            endDate: opts.endDate,\n            include: opts.include,\n            exclude: opts.exclude,\n            index: currentIndex,\n            _t: new Date() - 0,\n            level: opts.level\n        },\n        success: function(data) {\n            $(\".setting-search\").text(\"查询日志\")\n            var ret = data.ret;\n            if (ret === 0) {\n                var param = {\n                    encodeHtml: encodeHtml,\n                    set: Delegator.set,\n                    startIndex: currentIndex * MAX_LIMIT,\n                    formatMsg : formatMsg\n                };\n\n                if (isAdd) {\n                    $('#log-table').append(logTable({\n                        it: data.data,\n                        opt: param,\n                        classes: window.classes\n                    }));\n                } else {\n                    $('#log-table').html(logTable({\n                        it: data.data,\n                        opt: param,\n                        classes: window.classes\n                    }));\n                }\n\n                currentIndex++;\n                if (data.data.length === 0) {\n                    noData = true;\n                }\n            }else {\n                dialog({\n                    header: '查询失败',\n                    body: JSON.stringify(data.msg)\n                });\n            }\n            loading = false;\n        },\n        error: function() {\n            $(\".setting-search\").text(\"查询日志\")\n            loading = false;\n        }\n    });\n}\n\nfunction init() {\n    bindEvent();\n    //读取用户偏好\n    var items=$(\"#content .right-side .setting-show .item\");\n    window.classes={};\n    //console.log(localStorage);\n    for(var i=0;i<items.length;i++){\n        var item=$(items[i]);\n        if(localStorage.getItem(item.data(\"td\"))==='true'){\n            item.removeClass('active');\n            $('.main-table .'+item.data('td')).removeClass('active');\n            window.classes[item.data('td')]='';\n        }else{\n            window.classes[item.data('td')]='active';\n        }\n    }\n    $('#content .mid-side .main-table thead tr').show();\n    $('#content .right-side .setting-show').show();\n\n    $(\".datetimepicker\").datetimepicker({\n        format: 'YYYY-MM-DD HH:mm'\n    }).data(\"DateTimePicker\").setMaxDate(new Date());\n\n    $('#startTime').data(\"DateTimePicker\").setDate(new Date(new Date() - maxDate));\n    $('#endTime').data(\"DateTimePicker\").setDate(new Date());\n}\n\nexports.init = init;\n"
  },
  {
    "path": "static/module/log/mod.offlinelog.js",
    "content": "var dialog = require(\"dialog/dialog\");\nvar Delegator = require(\"delegator\");\n\nvar logTable = require(\"./template/logTable.ejs\");\nvar keyword = require(\"./template/keyword.ejs\");\nvar debar = require(\"./template/debar.ejs\");\nvar offlineDialog = require(\"./offlineDialog/offlineDialog\");\nvar logDetailDialog = require(\"./logDetailDialog/logDetailDialog\");\n\nvar offlineLogCache = {};\n\n\nvar logConfig = {\n        id: 0,\n        startDate: 0,\n        endDate: 0,\n        include: [],\n        exclude: [],\n        index: 0,\n        level: [1, 2, 4 , 20]\n    },\n\n    encodeHtml = function(str) {\n        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n    },\n\n    formatMsg = function (str){\n        return str.replace(/@/gi , '<br/><b style=\"color:#A78830;\">@</b> ')\n    };\n\n\nvar currentSelectId = -1,\n    currentIndex = 0,\n    noData = false,\n    MAX_LIMIT = 500,\n    loading = false,\n    monitorTimeId;\n\nfunction addKeyword() {\n    var value = $.trim($('#keyword-ipt').val());\n    if (value !== '') {\n        if (!removeValue(value, logConfig.include)) {\n            $('#keyword-group').append(keyword({\n                it: {\n                    value: value\n                },\n                opt: {\n                    encodeHtml: encodeHtml,\n                    set: Delegator.set\n                }\n            }));\n        }\n        logConfig.include.push(value);\n        $('#keyword-ipt').val('');\n    }\n}\n\nfunction addDebar() {\n    var value = $.trim($('#debar-ipt').val());\n    if (value !== '') {\n        if (!removeValue(value, logConfig.exclude)) {\n            $('#debar-group').append(debar({\n                it: {\n                    value: value\n                },\n                opt: {\n                    encodeHtml: encodeHtml,\n                    set: Delegator.set\n                }\n            }));\n        }\n        logConfig.exclude.push(value);\n        $('#debar-ipt').val('');\n    }\n}\n\n\n\nfunction bindEvent() {\n    new Delegator(document.body)\n        .on('click', 'searchBusiness', function() {\n            // search business\n        }).on('click', 'addKeyword', addKeyword)\n        .on('keyup', 'addKeyword', function(e) {\n            if (e.which === 13) addKeyword();\n        }).on('click', 'removeKeywords', function() {\n            logConfig.include.length = 0;\n            $('#keyword-group').empty();\n        }).on('click', 'removeKeyword', function(e, value) {\n            $(this).closest('.keyword-tag').remove();\n            removeValue(value, logConfig.include);\n        }).on('click', 'addDebar', addDebar)\n        .on('keyup', 'addDebar', function(e) {\n            if (e.which === 13) addDebar();\n        }).on('click', 'removeDebars', function() {\n            logConfig.exclude.length = 0;\n            $('#debar-group').empty();\n        }).on('click', 'removeDebar', function(e, value) {\n            $(this).closest('.keyword-tag').remove();\n            removeValue(value, logConfig.exclude);\n        }).on('click', 'configOfflineMonitor', function(e, value) {\n\n            if ( logConfig.id <= 0 ) {\n                !loading && dialog({\n                    header: '警告',\n                    body: '请选择一个项目'\n                });\n                return;\n            }\n\n            offlineDialog(logConfig)\n\n\n        }).on('click', 'showLogs', function() {\n            var fileId = logConfig.fileId = $('#select-offline-logs').val(); // jshint ignore:line\n\n            if(loading){\n                return ;\n            }\n\n            if (logConfig.fileId <= 0 || logConfig.id <= 0 ) {\n                !loading && dialog({\n                    header: '警告',\n                    body: '请选择一个离线日志'\n                });\n                return;\n            }\n\n\n            loading = true;\n            $(\".setting-search\").text(\"正在加载...\")\n\n            if(offlineLogCache[fileId]){\n                showLogs(offlineLogCache[fileId] , logConfig)\n                $(\".setting-search\").text(\"查询日志\");\n                loading = false;\n                return ;\n            }\n\n            var url = '/controller/logAction/showOfflineLog.do';\n            $.ajax({\n                url: url,\n                data: {\n                    id: logConfig.id,\n                    fileId: fileId,\n                },\n                success : function (data){\n                    loading = false;\n\n                    $(\".setting-search\").text(\"查询日志\")\n                    var offlineLogs = JSON.parse(data.data);\n                    var newLogs = []\n                    offlineLogs.logs.forEach(function (item){\n                        var  date = new Date(item.time);\n                        item.userAgent = offlineLogs.userAgent;\n                        item.date = _.formatDate(date , 'YYYY-MM-DD hh:mm:ss');\n                        var all = \"\";\n                        for(var key in item ) {\n                            if(key == 'time'){\n                                continue\n                            }\n                            all += ';'+key+'=' + item[key];\n                        }\n                        item.date = date;\n                        item.all = all;\n                        newLogs.push(item)\n                    })\n\n                    offlineLogCache[fileId] = newLogs\n\n                    showLogs(offlineLogCache[fileId] , logConfig)\n                },\n                error : function (){\n\n                }\n            })\n\n\n\n\n        })\n        .on('click', 'alertModal', function(e, data) {\n            var $target=$(e.currentTarget);\n\n            logDetailDialog({\n                id :$target.text(),\n                time :$target.siblings('.td-2').text(),\n                info :$target.siblings('.td-3').html(),\n                uin :$target.siblings('.td-4').text(),\n                ip :$target.siblings('.td-5').text(),\n                agent : $target.siblings('.td-6').attr(\"title\"),\n                source :   $target.siblings('.td-7').html() ,\n            })\n        }).on('change', 'selectBusiness', function() {\n            var val = $(this).val() - 0;\n            currentSelectId = val;\n            $('#log-table').html('');\n            currentIndex = 0;\n            noData = false;\n            logConfig.id = val;\n            fetchOfflineFile(val)\n        }).on('click', 'showTd', function(e) {\n            var $target=$(e.currentTarget).toggleClass('active');\n            $('.main-table .'+$target.data('td')).toggleClass('active');\n            //保存用户偏好，隐藏为true\n            //console.log($target.data('td'));\n            localStorage.setItem($target.data('td'),!$target.hasClass('active'));\n            //console.log(localStorage);\n            window.classes[$target.data('td')]=$target.hasClass('active')?'active':'';\n        }).on('click', 'errorTypeClick', function() {\n            if ($(this).hasClass('msg-dis')) {\n                logConfig.level.push(4);\n                $(this).removeClass('msg-dis');\n            } else {\n                logConfig.level.splice($.inArray(4, logConfig.level), 1);\n                $(this).addClass('msg-dis');\n            }\n            console.log('log', logConfig.level);\n\n        }).on('click', 'logTypeClick', function() {\n            if ($(this).hasClass('msg-dis')) {\n                logConfig.level.push(2);\n                $(this).removeClass('msg-dis');\n            } else {\n                logConfig.level.splice($.inArray(2, logConfig.level), 1);\n                $(this).addClass('msg-dis');\n            }\n\n\n        }).on('click', 'debugTypeClick', function() {\n            if ($(this).hasClass('msg-dis')) {\n                logConfig.level.push(1);\n                $(this).removeClass('msg-dis');\n            } else {\n                logConfig.level.splice($.inArray(1, logConfig.level), 1);\n                $(this).addClass('msg-dis');\n            }\n        }).on('click', 'offlineTypeClick', function() {\n            if ($(this).hasClass('msg-dis')) {\n                logConfig.level.push(20);\n                $(this).removeClass('msg-dis');\n            } else {\n                logConfig.level.splice($.inArray(20, logConfig.level), 1);\n                $(this).addClass('msg-dis');\n            }\n        });\n\n\n}\n\nfunction removeValue(value, arr) {\n    for (var l = arr.length; l--;) {\n        if (arr[l] === value) {\n            return arr.splice(l, 1);\n        }\n    }\n}\n\n\n\nfunction fetchOfflineFile (id){\n    if(id == -1 || !id){\n        $(\"#select-offline-logs\").attr(\"disabled\").html('<option value=\"-1\">-- 选择离线日志 --</option>')\n        return;\n    }\n    var url = '/controller/logAction/showOfflineFiles.do';\n    $.ajax({\n        url: url,\n        data: {\n            id: id,\n        },\n        success : function (data){\n            if(data.data.length <= 0){\n                $(\"#select-offline-logs\").attr(\"disabled\" , \"disabled\").html('<option value=\"-1\">-- 无离线日志 --</option>')\n            }else {\n                $(\"#select-offline-logs\").removeAttr(\"disabled\").html(\"\")\n                $.each(data.data, function (key , item){\n                    var arr = item.id.split(\"_\");\n                    var itemName = arr[0];\n                    if(arr[2]  ){\n                        var dateStr = _.formatDate(new Date(arr[2]-0) , 'YYYY-MM-DD');\n                        itemName += \" (\" + dateStr +\")\";\n                    }\n\n\n                    $(\"#select-offline-logs\").append('<option value=\"'+item.id +'\">'+itemName+'</option>')\n                })\n            }\n        },\n        error : function (){\n\n        }\n    })\n}\n\nfunction showLogs(data , opt) {\n\n\n\n    var includeJSON = [];\n    opt.include.forEach(function(value, key) {\n        includeJSON.push(value);\n    });\n\n\n    var excludeJSON = [];\n    opt.exclude.forEach(function(value, key) {\n        excludeJSON.push(value);\n    });\n\n\n    var newData = [];\n    data.forEach(function (value){\n        var matched = false;\n\n        if($.inArray( value.level , opt.level ) == -1){\n            return ;\n        }\n        if(includeJSON.length || excludeJSON.length){\n            for(var i = 0 ; i < includeJSON.length ; i++){\n                if(value.all.indexOf(includeJSON[i]) > -1){\n                    matched = true;\n                }\n            }\n\n            for(var i = 0 ; i < excludeJSON.length ; i++){\n                if(value.all.indexOf(excludeJSON[i]) > -1){\n                   matched = false;\n                }else {\n                    matched = true;\n                }\n            }\n        }else  {\n            matched = true;\n        }\n\n        if(matched){\n            newData.push(value)\n        }\n\n\n    });\n\n    var param = {\n        encodeHtml: encodeHtml,\n        set: Delegator.set,\n        startIndex: 1,\n        formatMsg : formatMsg\n    };\n\n    $('#log-table').html(logTable({\n        it: newData,\n        opt: param,\n        classes: {\n            'td-1':'active',\n            'td-2':'active',\n            'td-3':'active',\n            'td-6':'active',\n            'td-7':'active',\n        }\n    }));\n}\n\nfunction init() {\n    bindEvent();\n    //读取用户偏好\n\n    $('.main-table .td-4').removeClass('active');\n    $('.main-table .td-5').removeClass('active');\n\n\n    $('#content .mid-side .main-table thead tr').show();\n    $('#content .right-side .setting-show').show();\n}\n\nexports.init = init;\n"
  },
  {
    "path": "static/module/log/mod.realtime.js",
    "content": "var dialog = require(\"dialog/dialog\");\nvar Delegator = require(\"delegator\");\n\nvar logTable = require(\"./template/logTable.ejs\");\nvar keyword = require(\"./template/keyword.ejs\");\nvar debar = require(\"./template/debar.ejs\");\nvar logDetailDialog = require(\"./logDetailDialog/logDetailDialog\");\n\nvar logConfig = {\n        id: 0,\n        startDate: 0,\n        endDate: 0,\n        include: [],\n        exclude: [],\n        index: 0,\n        level: [1, 2, 4]\n    },\n\n    encodeHtml = function(str) {\n        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n    },\n\n    formatMsg = function (str){\n        return str.replace(/@/gi , '<br/><b style=\"color:#A78830;\">@</b> ')\n    };\n\nvar websocket;\n\nvar currentSelectId = -1,\n    currentIndex = 0,\n    noData = false,\n    MAX_LIMIT = 500,\n    loading = false,\n    monitorTimeId;\n\nfunction addKeyword() {\n    var value = $.trim($('#keyword-ipt').val());\n    if (value !== '') {\n        if (!removeValue(value, logConfig.include)) {\n            $('#keyword-group').append(keyword({\n                it: {\n                    value: value\n                },\n                opt: {\n                    encodeHtml: encodeHtml,\n                    set: Delegator.set\n                }\n            }));\n        }\n        logConfig.include.push(value);\n        $('#keyword-ipt').val('');\n    }\n}\n\nfunction addDebar() {\n    var value = $.trim($('#debar-ipt').val());\n    if (value !== '') {\n        if (!removeValue(value, logConfig.exclude)) {\n            $('#debar-group').append(debar({\n                it: {\n                    value: value\n                },\n                opt: {\n                    encodeHtml: encodeHtml,\n                    set: Delegator.set\n                }\n            }));\n        }\n        logConfig.exclude.push(value);\n        $('#debar-ipt').val('');\n    }\n}\n\n\n\nfunction bindEvent() {\n    new Delegator(document.body)\n        .on('click', 'searchBusiness', function() {\n            // search business\n        }).on('click', 'addKeyword', addKeyword)\n        .on('keyup', 'addKeyword', function(e) {\n            if (e.which === 13) addKeyword();\n        }).on('click', 'removeKeywords', function() {\n            logConfig.include.length = 0;\n            $('#keyword-group').empty();\n        }).on('click', 'removeKeyword', function(e, value) {\n            $(this).closest('.keyword-tag').remove();\n            removeValue(value, logConfig.include);\n        }).on('click', 'addDebar', addDebar)\n        .on('keyup', 'addDebar', function(e) {\n            if (e.which === 13) addDebar();\n        }).on('click', 'removeDebars', function() {\n            logConfig.exclude.length = 0;\n            $('#debar-group').empty();\n        }).on('click', 'removeDebar', function(e, value) {\n            $(this).closest('.keyword-tag').remove();\n            removeValue(value, logConfig.exclude);\n        }).on('click', 'showLogs', function() {\n            logConfig.id = $('#select-business').val() >> 0; // jshint ignore:line\n            if (logConfig.id <= 0 || loading) {\n                !loading && dialog({\n                    header: '警告',\n                    body: '请选择一个项目'\n                });\n                return;\n            }\n\n            if (!$(this).data(\"stop\")) {\n                $(this).data(\"stop\", true);\n                $('#log-table').html('');\n                startMonitor(logConfig.id);\n                $(this).addClass(\"stop\").text('停止监听');\n            } else {\n                $(this).data(\"stop\", false);\n                websocket.close();\n                $(this).removeClass(\"stop\").text('开始监听');\n            }\n\n        })\n        .on('click', 'alertModal', function(e, data) {\n            var $target=$(e.currentTarget);\n\n            logDetailDialog({\n                id :$target.text(),\n                time :$target.siblings('.td-2').text(),\n                info :$target.siblings('.td-3').html(),\n                uin :$target.siblings('.td-4').text(),\n                ip :$target.siblings('.td-5').text(),\n                agent : $target.siblings('.td-6').attr(\"title\"),\n                source :   $target.siblings('.td-7').html() ,\n            })\n\n        }).on('change', 'selectBusiness', function() {\n            var val = $(this).val() - 0;\n            currentSelectId = val;\n            $('#log-table').html('');\n            currentIndex = 0;\n            noData = false;\n            logConfig.id = val;\n        }).on('click', 'showTd', function(e) {\n            var $target=$(e.currentTarget).toggleClass('active');\n            $('.main-table .'+$target.data('td')).toggleClass('active');\n            //保存用户偏好，隐藏为true\n            //console.log($target.data('td'));\n            localStorage.setItem($target.data('td'),!$target.hasClass('active'));\n            //console.log(localStorage);\n            window.classes[$target.data('td')]=$target.hasClass('active')?'active':'';\n        }).on('click', 'errorTypeClick', function() {\n            if ($(this).hasClass('msg-dis')) {\n                logConfig.level.push(4);\n                $(this).removeClass('msg-dis');\n            } else {\n                logConfig.level.splice($.inArray(4, logConfig.level), 1);\n                $(this).addClass('msg-dis');\n            }\n            console.log('log', logConfig.level);\n\n        }).on('click', 'logTypeClick', function() {\n            if ($(this).hasClass('msg-dis')) {\n                logConfig.level.push(2);\n                $(this).removeClass('msg-dis');\n            } else {\n                logConfig.level.splice($.inArray(2, logConfig.level), 1);\n                $(this).addClass('msg-dis');\n            }\n\n\n        }).on('click', 'debugTypeClick', function() {\n            if ($(this).hasClass('msg-dis')) {\n                logConfig.level.push(1);\n                $(this).removeClass('msg-dis');\n            } else {\n                logConfig.level.splice($.inArray(1, logConfig.level), 1);\n                $(this).addClass('msg-dis');\n            }\n        });\n\n\n\n}\n\nfunction removeValue(value, arr) {\n    for (var l = arr.length; l--;) {\n        if (arr[l] === value) {\n            return arr.splice(l, 1);\n        }\n    }\n}\n\nvar keepAliveTimeoutId;\nvar currentIndex;\nvar maxShow = 100;\nvar startMonitor = function(id) {\n\n    websocket = new WebSocket(\"ws://\" + location.host + \"/ws/realtimeLog\");\n\n    currentIndex = 0;\n    websocket.onmessage = function(evt) {\n        showLogs(JSON.parse(evt.data).message);\n    };\n\n    websocket.onclose = function() {\n        clearTimeout(keepAliveTimeoutId);\n    };\n\n    websocket.onopen = function() {\n\n        websocket.send(JSON.stringify({\n            type: \"INIT\",\n            include: logConfig.include,\n            exclude: logConfig.exclude,\n            level: logConfig.level,\n            id: id\n        }));\n\n        keepAliveTimeoutId = setInterval(function() {\n            websocket.send(JSON.stringify({\n                type: \"KEEPALIVE\"\n            }));\n        }, 5000);\n    };\n};\n\n\nfunction showLogs(data) {\n\n    var param = {\n        encodeHtml: encodeHtml,\n        set: Delegator.set,\n        startIndex: currentIndex,\n        formatMsg : formatMsg\n    };\n\n    var $table = $('#log-table');\n\n    if (maxShow % 100 === 0) {\n        $table.html($table.html().split(\"</tr>\").slice(0, maxShow).join(\"</tr>\"));\n    }\n    $table.prepend(logTable({\n        it: [data],\n        opt: param\n    }));\n    currentIndex++;\n}\n\nfunction init() {\n    bindEvent();\n    //读取用户偏好\n    var items=$(\"#content .right-side .setting-show .item\");\n    window.classes={};\n    //console.log(localStorage);\n    for(var i=0;i<items.length;i++){\n        var item=$(items[i]);\n        if(localStorage.getItem(item.data(\"td\"))==='true'){\n            item.removeClass('active');\n            $('.main-table .'+item.data('td')).removeClass('active');\n            window.classes[item.data('td')]='';\n        }else{\n            window.classes[item.data('td')]='active';\n        }\n    }\n    $('#content .mid-side .main-table thead tr').show();\n    $('#content .right-side .setting-show').show();\n}\n\nexports.init = init;\n"
  },
  {
    "path": "static/module/log/offlineDialog/offlineDialog.js",
    "content": "var Delegator = require(\"delegator\");\nvar offline_monitor_row = require(\"./tpl/offline_monitor_row.ejs\");\nvar dialogTpl = require(\"./tpl/dialog.ejs\");\n\n    var container;\n\n    function hide() {\n        container.removeClass('in');\n        container.find('.modal-backdrop').removeClass('in');\n        setTimeout(function () {\n            container.remove();\n            container = undefined;\n        }, 300);\n    }\n\n    function showOfflineLogConfig(logConfig){\n        $.ajax({\n            url: \"/controller/logAction/getOfflineLogConfig.do\",\n            data: {\n                id: logConfig.id,\n            },\n            success : function (data){\n                $(\"#offlineConfigModal table\").html(\"\")\n                _.each(data.data , function (value ,key){\n                    $(\"#offlineConfigModal table\").append(offline_monitor_row({uin : key}))\n                })\n            },\n            error : function (){\n\n            }\n        })\n    }\n\n    function Dialog (param) {\n        if (container) {\n            container.remove();\n            container = undefined;\n        }\n        container = $(dialogTpl())\n            .appendTo(document.body)\n            .show();\n\n        var key,\n            action,\n            delegator,\n            on =  {};\n\n        delegator = (new Delegator(container))\n            .on('click', 'close', hide)\n            .on('click', 'addUin', function (){\n                var val = $(\"#addUin\").val();\n\n                if(val.length <=0){\n                    return ;\n                }\n                $.ajax({\n                    url: \"/controller/logAction/addOfflineLogConfig.do\",\n                    data: {\n                        uin: val,\n                        id : param.id\n                    },\n                    success : function (data){\n                        if(!data.data.hadAdd && data.ret == 0){\n                            $(\"#offlineConfigModal table\").append(offline_monitor_row({uin : val}))\n                        }\n\n                        $(\"#addUin\").val(\"\")\n                    },\n                    error : function (){\n\n                    }\n                })\n            })\n            .on('click', 'deleteUin', function (e){\n                var val = $(e.currentTarget).attr(\"uin\");\n\n                if(val.length <=0){\n                    return ;\n                }\n                $.ajax({\n                    url: \"/controller/logAction/deleteOfflineLogConfig.do\",\n                    data: {\n                        uin: val,\n                        id : param.id\n                    },\n                    success : function (){\n                        $(e.currentTarget).parents(\"tr\").remove();\n                    },\n                    error : function (){\n\n                    }\n                })\n            });\n\n        for (key in on) {\n            action = key.split('/');\n            delegator.on(action[0], action[1], on[key]);\n        }\n\n        setTimeout(function () {\n            container.addClass('in');\n            container.find('.modal-backdrop').addClass('in');\n\n            showOfflineLogConfig(param);\n        }, 0);\n    }\n\n    Dialog.hide = hide;\n\nmodule.exports =  Dialog;\n"
  },
  {
    "path": "static/module/log/offlineDialog/tpl/dialog.ejs",
    "content": "<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" id=\"offlineConfigModal\">\n    <div class=\"modal-backdrop fade\"></div>\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\" data-event-click=\"close\">×</span><span class=\"sr-only\">Close</span></button>\n                <h4 class=\"modal-title\">设置离线日志自动拉取</h4>\n            </div>\n            <div class=\"modal-body\">\n                <div class=\"form-group\" style=\"text-align: center;\">\n                    <input style=\"display: inline-block;width: 300px;\" type=\"text\" class=\"form-control\" id=\"addUin\" placeholder=\"添加监听的UIN\">\n                    <button type=\"submit\" class=\"btn btn-default\" data-event-click=\"addUin\">添加</button>\n                </div>\n                <div class=\"uin-list\">\n                    <table class=\"table table-striped\">\n                    </table>\n                </div>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-event-click=\"close\">Close</button>\n            </div>\n\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "static/module/log/offlineDialog/tpl/offline_monitor_row.ejs",
    "content": "<tr>\n    <td style=\"width:70%\"><%=uin%></td>\n    <td>监听中</td>\n    <td><a uin=\"<%=uin%>\" data-event-click=\"deleteUin\" href=\"javascript:;\">删除</a></td>\n</tr>\n"
  },
  {
    "path": "static/module/log/source.trigger.js",
    "content": "exports.init = function() {\n\tvar not_show_source_page = false;\n\tvar hideform_class_name = 'main-table-hidefrom';\n\n\ttry {\n\t\tnot_show_source_page = !!localStorage.not_show_source_page;\n\t\t$('.main-table')[not_show_source_page ? 'addClass' : 'removeClass'](hideform_class_name);\n\t} catch (ex) {}\n\n\tvar update_source = function(show_source_page) {\n\t\tif (show_source_page) {\n\t\t\t$('.main-table').removeClass(hideform_class_name);\n\t\t\t$('#log-table .source_page_link').each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\t$this.text($this.data('viewlink'));\n\t\t\t});\n\t\t} else {\n\t\t\t$('.main-table').addClass(hideform_class_name);\n\t\t\t$('#log-table .source_page_link').each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\t$this.text($this.data('viewtext'));\n\t\t\t});\n\t\t}\n\t};\n\n\tvar $ssp = $('#show_source_page');\n\t$ssp.prop('checked', !not_show_source_page).on('change', function() {\n\t\ttry {\n\t\t\tvar show_source_page = $ssp.prop('checked');\n\t\t\tlocalStorage.not_show_source_page = show_source_page ? '' : '1';\n\t\t\tupdate_source(show_source_page);\n\t\t} catch (ex) {}\n\t});\n};"
  },
  {
    "path": "static/module/log/template/debar.ejs",
    "content": "<a class=\"keyword-tag\"><%=it.value%><span class=\"keyword-del\" data-event-click=\"removeDebar\" data-event-data=\"<%=opt.set(it.value)%>\">x</span></a>"
  },
  {
    "path": "static/module/log/template/keyword.ejs",
    "content": "<a class=\"keyword-tag\"><%=it.value%><span class=\"keyword-del\" data-event-click=\"removeKeyword\" data-event-data=\"<%=opt.set(it.value)%>\">x</span></a>"
  },
  {
    "path": "static/module/log/template/logTable.ejs",
    "content": "<%\nvar urls;\nvar not_show_source_page = true;\ntry {\n    not_show_source_page = !!localStorage.not_show_source_page;\n} catch (ex) {}\n\n// 手Q\nvar RE_MQQ = /(ipad|iphone|ipod).*? (ipad)?qq\\/([\\d.]+)|\\bv1_and_sqi?_([\\d.]+)(.*? qq\\/([\\d.]+))?/;\n\nfunction getBrowserType(ua) {\n    if (!ua) {\n        return '';\n    }\n    ua = ua.toLowerCase();\n\n    var osIcon = '', browserIcon = '';\n\n    // os\n    if (ua.indexOf('android') > -1)\n        osIcon = 'ico-android';\n    else if (ua.indexOf('iphone') > -1 || ua.indexOf('ipad') > -1)\n        osIcon = 'ico-ios';\n    else if (ua.indexOf('windows') > -1)\n        osIcon = 'ico-windows';\n\n\n    // 手Q\n    if (RE_MQQ.test(ua)) {\n        browserIcon = 'ico-qq';\n    } else if (ua.indexOf('qqbrowser') > -1) {\n        browserIcon = 'ico-qb';\n    } else if (ua.indexOf('metasr') > -1) {\n        browserIcon = 'ico-sougou';\n    } else if (ua.indexOf('maxthon') > -1) {\n        browserIcon = 'ico-maxthon';\n    } else if (ua.indexOf('360se') > -1) {\n        browserIcon = 'ico-360';\n    } else if (ua.indexOf('qq/') > -1) {\n        browserIcon = 'ico-qq';\n    } else if (ua.indexOf('micromessenger') > -1) {\n        browserIcon = 'ico-wx';\n    } else if (ua.indexOf('edge') > -1) {\n        browserIcon = 'ico-edge';\n    } else if (ua.indexOf('chrome') > -1) {\n        browserIcon = 'ico-chrome';\n    } else if (ua.indexOf('msie') > -1 || ua.indexOf('trident') > -1) {\n        browserIcon = 'ico-ie';\n    } else if (ua.indexOf('firefox') > -1) {\n        browserIcon = 'ico-ff';\n    } else if (ua.indexOf('safari') > -1) {\n        browserIcon = 'ico-safari';\n    }\n\n    return [osIcon, browserIcon];\n}\n\nfunction sourcePage(data, type, opt) {\n    var from = data.from || ''\n    if (/view/.test(type)) {\n        var view = ['页面查看', opt.encodeHtml(from)];\n        return 'viewtext' === type ? view[0] :\n            'viewlink' === type ? view[1] :\n            not_show_source_page ? view[0] : view[1];\n    } else {\n        var href = opt.encodeHtml(from);\n        var msg = [data._target, data.rowNum, data.colNum].join(':') + ' ' + data.msg;\n        if (href.indexOf('#') === -1) {\n            href += '#BJ_ERROR=' + encodeURIComponent(msg);\n        } else {\n            href += '&BJ_ERROR=' + encodeURIComponent(msg);\n        }\n        return href;\n    }\n}\n\nfor (var i = 0 , l = it.length, type = ''; i < l; i++) {\n    switch(it[i].level.toString()) {\n        case '8':\n            type = 'warning';\n            break;\n        case '4':\n            type = 'err';\n            break;\n        case '2':\n            type = 'info';\n            break;\n        case '1':\n            type = 'debug';\n            break;\n        case '20':\n            type = 'offline';\n            break;\n    }\n\n    if (_.isArray(it[i].target)) {\n        it[i].target = it[i].target[0];\n    }\n\n    var isHtml = /^.+?\\.html\\??/.test(it[i].target);\n    var _target = it[i]._target = (it[i].target || it[i].url || '').replace(/\\)/g, '');\n%>\n<tr id=\"tr-<%=i + 1 + opt.startIndex%>\">\n    <td  class=\"td-1 active info-type-<%=type%>\" data-event-click=\"alertModal\" title=\"点击查看#<%=i + 1 + opt.startIndex%>详情\">\n        <%=i + 1 + opt.startIndex%>\n    </td>\n    <td  class=\"td-2 <%=classes['td-2'] %>\">\n        <%= _.formatDate(new Date(it[i].date) , 'YYYY-MM-DD hh:mm:ss') %>\n    </td>\n    <td  style=\"\" class=\"td-3 <%=classes['td-3'] %>\">\n        <%= opt.formatMsg(opt.encodeHtml(it[i].msg)) %>\n    </td>\n    <td  class=\"td-4 <%=classes['td-4'] %>\" title=\"<%=  opt.encodeHtml(it[i].uin == 'NaN' ? '-' : it[i].uin )%>\" style=\"text-overflow: ellipsis;overflow: hidden;\" >\n        <%=  opt.encodeHtml(it[i].uin == 'NaN' ? '-' : it[i].uin )%>\n    </td>\n    <td  class=\"td-5 <%=classes['td-5'] %>\">\n        <%=it[i].ip %>\n    </td>\n    <td class=\"td-6 <%= classes['td-6'] %>\" title=\"<%= it[i].userAgent %>\">\n            <%\n            var browserTypes = getBrowserType(it[i].userAgent);\n            for(var x = 0; x < browserTypes.length; x++) {\n             %>\n             <span class=\"ico-browser <%= browserTypes[x] %>\"></span>\n             <%}%>\n     </td>\n    <td class=\"td-7 <%=classes['td-7'] %>\">\n        <a\n            style=\"word-break:break-all;display:block\"\n            href=\"<%= opt.encodeHtml(_target)%>\"\n            target=\"_blank\"\n            data-event-click=\"showSource\"\n            data-event-data=\"<%=opt.set(it[i])%>\"\n        >\n            <%=opt.encodeHtml(_target)%>\n            <span\n                class=\"err-where\"\n                style=\"height:24px;line-height:24px;border-radius:3px\"\n            >\n                <%=opt.encodeHtml(it[i].rowNum || 0)%>行\n                <%=opt.encodeHtml(it[i].colNum || 0)%>列\n            </span>\n        </a>\n        <a\n            class=\"source_page_link\"\n            style=\"font-size:12px\"\n            target=\"_blank\"\n            href=\"<%=sourcePage(it[i], 'href', opt)%>\"\n            data-viewtext=\"<%=sourcePage(it[i], 'viewtext', opt)%>\"\n            data-viewlink=\"<%=sourcePage(it[i], 'viewlink', opt)%>\"\n        ><%=sourcePage(it[i], 'view', opt)%></a>\n    </td>\n</tr>\n<% } %>\n\n<% if(it.length === 0 ){%>\n<td colspan=\"7\" style=\"\n    text-align: center;\n    background: rgb(221, 221, 221);\n\">无更多数据</td>\n<%}%>\n"
  },
  {
    "path": "static/module/projectTotal/load.projectTotal.js",
    "content": "var projectTotal = require('./mod.projectTotal.js');\n\nprojectTotal.init();"
  },
  {
    "path": "static/module/projectTotal/mod.projectTotal.js",
    "content": "/* global _ */\n/**\n * @info 图表统计js\n * @author coverguo\n *\n */\nrequire(\"jquery/jquery.datetimepicker\");\nrequire(\"charts/highcharts\");\nrequire(\"charts/sand-signika\");\nvar Dialog = require(\"dialog/dialog\");\nvar statisticsTpl = require(\"./template/statistics.ejs\");\n\nvar dayNumber = 0,\n    days = [];\n\nvar chart_title, chart_projects = [];\nvar statistics = {\n    init: function() {\n\n        this.bindEvent();\n\n    },\n    setChart: function(data) {\n        $('#chartsContainer').highcharts({ //图表展示容器，与div的id保持一致\n            chart: {\n                type: 'line' //指定图表的类型，默认是折线图（line）\n            },\n            title: {\n                text: \"\" //指定图表标题\n            },\n            xAxis: {\n                categories: setChartX(dayNumber)\n            },\n            yAxis: {\n                min: 0,\n                title: {\n                    text: '报错数量' //指定y轴的标题\n                }\n            },\n            series: chart_projects\n        });\n    },\n    renderTable: function() {\n        $('#chart-table').html(statisticsTpl({\n            item: chart_projects\n        }));\n    },\n    bindEvent: function() {\n        var self = this;\n        $('#showCharts').bind(\"click\", function(e) {\n            var param = {\n                projectId: $(\"#select-chartBusiness\").val(),\n                timeScope: $(\"#select-timeScope\").val()\n            };\n            $.getJSON(\"/controller/statisticsAction/queryByChartForAdmin.do\", param, function(data) {\n                var $options = $(\"#select-chartBusiness option\");\n                var $selectedOption = $(\"#select-chartBusiness\").find(\"option:selected\");\n\n                chart_projects = [];\n                dayNumber = param.timeScope == 1 ? 7 : 30;\n                days = setChartX(dayNumber);\n                var project = null;\n                if (param.projectId == -1) {\n                    var projectLength = $options.length;\n                    for (var i = 1; i < projectLength; i++) {\n                        var defaultData1 = [];\n                        setDefaultTotal(defaultData1, dayNumber);\n                        project = {\n                            name: $options.eq(i).text(),\n                            projectId: $options.eq(i).val() - 0,\n                            date: days,\n                            data: defaultData1\n                        };\n                        chart_projects.push(project);\n                    }\n                } else {\n                    var defaultData2 = [];\n                    setDefaultTotal(defaultData2, dayNumber);\n                    project = {\n                        name: $selectedOption.text(),\n                        projectId: $(\"#select-chartBusiness\").val() - 0,\n                        date: days,\n                        data: defaultData2\n                    };\n                    chart_projects.push(project);\n                }\n\n                //设置表格title\n                chart_title = $(\"#select-chartBusiness\").find(\"option:selected\").text() +\n                    $(\"#select-timeScope\").find(\"option:selected\").text() + \"统计\";\n                console.log(data);\n                sortChartData(data.data);\n                console.log('project', chart_projects);\n                self.renderTable();\n            });\n        });\n    }\n\n};\n\nfunction setChartX(number) {\n    var days = [];\n    var nowDay = new Date() - 0;\n\n    for (var i = number; i > 0; i--) {\n        var day = nowDay - i * 1000 * 60 * 60 * 24;\n        days.push(_.formatDate(new Date(day), 'MM-DD'));\n    }\n    return days;\n}\n\nfunction setDefaultTotal(arr, number) {\n    for (var i = number; i > 0; i--) {\n        arr.push(0);\n    }\n}\n\nfunction whichDayIndex(day1) {\n    for (var i = 0, len = days.length; i < len; i++) {\n        if (day1 == days[i]) {\n            return i;\n        }\n    }\n    return false;\n}\n\nfunction sortChartData(data) {\n    for (var i = 0, len = data.length; i < len; i++) {\n        data[i].startDate = _.formatDate(new Date(data[i].startDate), 'MM-DD');\n        for (var j = 0, length = chart_projects.length; j < length; j++) {\n            if (data[i].projectId == chart_projects[j].projectId) {\n                chart_projects[j]['data'][whichDayIndex(data[i].startDate)] = data[i].total;\n            }\n        }\n    }\n}\n\nmodule.exports = statistics;"
  },
  {
    "path": "static/module/projectTotal/template/statistics.ejs",
    "content": "<thead>\n    <th style=\"width:200px;\">#</th>\n<%\n$.each(item[0].date , function (key, value){\n%>\n    <th><%= value %></th>\n<%\n})\n%>\n</thead>\n<tbody>\n<%\n\nvar totalArray = []\n$.each(item , function (key, value){\n%>\n<tr>\n    <td><span class=\"textOverflow\" style=\"width:200px\" title=\"<%= value.name %>\"><%= value.name %></span></td>\n    <%\n    var dataIndex = 0;\n    $.each(value.data , function (totalKey, total){\n\n    %>\n    <td>\n        <%= total %>\n    </td>\n    <%\n        if(_.isNumber(totalArray[dataIndex])) {\n            totalArray[dataIndex] +=total;\n        }else {\n            totalArray[dataIndex] = total;\n        }\n        dataIndex ++ ;\n    });\n    %>\n</tr>\n<%\n});\n%>\n\n<tr>\n<td>\n总计\n</td>\n<%\n$.each(totalArray , function (key, value){\n%>\n<td><%=value%></td>\n<%\n})\n%>\n</tr>\n</tbody>\n"
  },
  {
    "path": "static/module/statistics/load.statistics.js",
    "content": "var statistics = require(\"./mod.statistics\");\nstatistics.init();\n\nvar last_select = require(\"../common/last.select\");\nlast_select.init();"
  },
  {
    "path": "static/module/statistics/mod.statistics.js",
    "content": "/**\n * @info 用户列表js\n * @author coverguo\n * */\n\n\nrequire(\"jquery/jquery.datetimepicker\");\nvar Dialog = require(\"dialog/dialog\");\nvar statisticsTpl = require(\"./template/statistics.ejs\");\n\nvar encodeHtml = function (str) {\n    return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n};\n\n\n    var statistics = {\n        init : function (){\n\n            var maxDate = 60*60*1000*24 *1;\n\n            $(\".datetimepicker\").datetimepicker({format: 'YYYY-MM-DD'}).data(\"DateTimePicker\").setMaxDate(new Date());\n\n            $('#startTime').data(\"DateTimePicker\").setDate( new Date(new Date() - maxDate));\n\n            this.bindEvent();\n\n        },\n        bindEvent : function (){\n            $('#showLogs').bind(\"click\" , function(e){\n                var projectId = $(\"#select-business\").val();\n\n                if(isNaN(projectId) || projectId<0){\n                    Dialog({\n                        header: '警告',\n                        body: '请选择一个项目'\n                    })\n                    return ;\n                }\n\n                $.getJSON(\"/controller/statisticsAction/queryById.do\" , {projectId : projectId , startDate : new Date($('#startTime').val() + \" 00:00:00\") - 0} , function (data){\n                        $('#table-content').html(statisticsTpl({it : data,  opt : {encodeHtml : encodeHtml }}));\n                    if(  data && data.data[0] ){\n                        $('#error-count').html(data.data[0].total || 0 );\n                    }\n                });\n            });\n        }\n\n    }\n\nmodule.exports = statistics;\n"
  },
  {
    "path": "static/module/statistics/template/statistics.ejs",
    "content": "<%\n    if (!it.data || !it.data[0] || !it.data[0].content || !it.data[0].content[0]) {\n%>\n    <tr ><td colspan=\"3\" style=\"text-align: center\">当天没有统计数据</td></tr>\n<%\n    } else {\n        var count = 0 ;\n        var content = it.data[0].content;\n        $.each(content , function (key , value) {\n%>\n<tr class=\"listRow\">\n    <td class=\"td-row-1\" style=\"width:40px;\"><%= ++count %></td>\n    <td class=\"td-row-2\" style=\"width:120px;\"><%= value.total %></td>\n    <td class=\"td-row-3\" style=\"word-break:break-all\"><%= opt.encodeHtml(value.title) %></td>\n</tr>\n<%\n        });\n    }\n%>\n"
  },
  {
    "path": "static/module/userManage/load.userManage.js",
    "content": "var usermanger = require(\"./mod.userManage\");\n\nusermanger.init();"
  },
  {
    "path": "static/module/userManage/mod.userManage.js",
    "content": "/**\n * @info 用户列表js\n * @author coverguo\n * */\n\nvar Dialog = require(\"dialog/dialog\");\nvar userTable = require(\"./template/userTable.ejs\");\n\n\n    var encodeHtml = function (str) {\n        return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\x60/g, '&#96;').replace(/\\x27/g, '&#39;').replace(/\\x22/g, '&quot;');\n    };\n    function bindEvent() {\n\n        $(\".searchBtn\").on(\"click\", function (){\n            reloadPage();\n        });\n\n        $(\"#add-btn\").on(\"click\", function () {\n            var params ={\n                userName : $(\".add-userName\").val(),\n                applyId  : $(\".search-applyId\").val()\n            };\n            console.log(params);\n            $ajax(\"/controller/userApplyAction/addUserApply.do\", params, function(data){\n                reloadPage();\n            });\n        });\n\n        var submiting =  false;\n        $(\"#userList\").on(\"click\",'.user-deleteBtn', function (){\n            if(submiting){\n                return;\n            }\n            submiting = true;\n            var params = {\n                id : $(this).data().uaid\n            };\n            if(window.confirm('你确定要删除该用户吗？')){\n                $ajax(\"/controller/userApplyAction/remove.do\", params, function(data){\n                    location.reload();\n                });\n            }else{\n                return false;\n            }\n\n        });\n\n\n        $(\"#userList\").on(\"click\",'.user-authBtn', function (){\n            if(submiting){\n                return;\n            }\n            submiting = true;\n            var params = {\n                id : $(this).data().uaid\n            };\n            $ajax(\"/controller/userApplyAction/auth.do\", params, function(data){\n                location.reload();\n            });\n\n        });\n    };\n\n    function reloadPage(){\n        var params ={\n            userText : $(\".search-userText\").val(),\n            applyId  : $(\".search-applyId\").val(),\n            role : $(\".search-userType\").val()\n        };\n        var url = \"/user/userManage.html\";\n        url += \"?applyId=\" + params.applyId + \"&role=\" + params.role + \"&userText=\" + params.userText;\n        location.href = url;\n    }\n    function $ajax(url, params, cb,type){\n        $.ajax({\n            url: url,\n            data:params,\n            type: type?type:'post',\n            success: function(data) {\n                var ret = data.ret;\n                switch(ret){\n                    case 0://成功\n                        //执行成功回调函数.\n                        cb(data);\n\n                        break;\n                    default ://没有登陆态或登陆态失效\n                        alert(data.msg);\n                }\n            },\n            error: function() {\n            }\n        });\n    }\n    $.extend({\n        getUrlVars: function(){\n            var vars = [], hash;\n            var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');\n            for(var i = 0; i < hashes.length; i++)\n            {\n                hash = hashes[i].split('=');\n                vars.push(hash[0]);\n                vars[hash[0]] = hash[1];\n            }\n            return vars;\n        },\n        getUrlVar: function(name){\n            return $.getUrlVars()[name];\n        }\n    });\n\n    function init() {\n        var urlParams = $.getUrlVars();\n        var params ={\n            userText :urlParams.userText || '' ,\n            applyId  : urlParams.applyId || -1 ,\n            role : urlParams.role || -1\n        };\n        $ajax(\"controller/userAction/queryListByCondition.do\",params,function(items){\n            console.log(items);\n            var param = {\n                encodeHtml: encodeHtml,\n                isAdmin : items.isAdmin\n            };\n            $('#userList').html(userTable({it : items.data, opt : param}));\n\n        });\n        //设置初始搜索框内容\n        $(\".search-userText\").val(params.userText);\n        $(\".search-applyId\").val(params.applyId);\n        $(\".search-userType\").val(params.role);\n\n        //设置info\n        if(params.applyId ==-1){\n            $(\".add-userName\").attr(\"disabled\",\"disabled\");\n            $(\"#add-btn\").attr(\"disabled\",\"disabled\");\n        }else{\n            $(\".add-userName\").removeAttr(\"disabled\");\n            $(\"#add-btn\").removeAttr(\"disabled\");\n        }\n        $(\".projectName\").text( $(\".search-applyId\").find(\"option:selected\").text());\n        bindEvent();\n\n\n    }\n\nmodule.exports = {\n        init: init\n    }\n"
  },
  {
    "path": "static/module/userManage/template/userTable.ejs",
    "content": "<% for(var i =0, len = it.length;i<len; i++){\n    var role =\"参与者\";\n    if(it[i].role == 1){\n        role =\"项目管理员\";\n    }\n%>\n<tr class=\"listRow\">\n    <td><%= i+1%></td>\n    <td><%= it[i].loginName%></td>\n    <td><%= it[i].chineseName?it[i].chineseName:\"无\"%></td>\n    <td><%= it[i].name%></td>\n    <td><%= role%> </td>\n    <td>\n        <%if(it[i].role != 1 ){%>\n            <button class=\"user-authBtn btn-default modifyBtn\" data-uaid = \"<%= it[i].id%>\">授权管理员</button>\n            <button class=\"user-deleteBtn btn-default modifyBtn\" data-uaid = \"<%= it[i].id%>\">删除</button>\n        <%}%>\n\n        <%if(it[i].role ==1 && opt.isAdmin){%>\n        <button class=\"user-deleteBtn btn-default modifyBtn\" data-uaid = \"<%= it[i].id%>\">删除</button>\n        <%}%>\n\n    </td>\n</tr>\n<%}%>\n"
  },
  {
    "path": "test/test-busiess-services.js",
    "content": "var mysql = require('mysql'),\n    BusinessService = require('../service/BusinessService'),\n    orm = require('orm');\n\nGLOBAL.DEBUG = true;\n//var mysql = \"mysql://badjs:pass4badjs@10.134.5.103:3306/badjs\";\nvar mysql = \"mysql://root:root@localhost:3306/badjs\";\n\norm.connect( mysql, function(err , db) {\n    if(err){\n        throw err;\n    }\n\n    global.models = {\n        userDao : require('../dao/UserDao')(db),\n        applyDao : require('../dao/ApplyDao')(db),\n        approveDao : require('../dao/ApproveDao')(db),\n        statisticsDao : require('../dao/StatisticsDao')(db),\n        db : db\n    }\n\n    var bs = new BusinessService();\n\n    bs.findBusinessByUser(\"chriscai\" , function (err  ,data){\n        console.log(data)\n    })\n\n});\n\n\n\n\n\n"
  },
  {
    "path": "test/test-crypto.js",
    "content": "var crypto = require('crypto');\n\nconsole.log(crypto.createHash(\"md5\").update(\"admin\").digest('hex'));"
  },
  {
    "path": "test/test-db-connect.js",
    "content": "\nvar mysql = require('mysql');\n\nvar conn = mysql.createConnection({\n    host     : '127.0.0.1',\n    user     : 'root',\n    password : '123456',\n    database : 'badjs'\n\n});\n\nconn.connect(function(err ) {\n    if(err){\n        throw e;\n    }\n\n    console.log('good');\n});\n\n"
  },
  {
    "path": "test/test-email-add.js",
    "content": "var mysql = require('mysql'),\n    orm = require('orm');\n\nvar mysql = \"mysql://root:root@localhost:3306/badjs\";\n//var mysql = \"mysql://badjs:pass4badjs@10.134.5.103:3306/badjs\";\n\norm.connect( mysql, function(err , db) {\n    if(err){\n        throw err;\n    }\n\n  var   userDao = require('../dao/UserDao')(db)\n\n    userDao.find({} , function (err , item){\n\n        item.forEach(function (value){\n            value.email = value.loginName + \"@tencent.com\";\n            value.save();\n        })\n\n\n\n    })\n\n});\n\n\n\n\n\n"
  },
  {
    "path": "test/test-fetch-statistics-to-today.js",
    "content": "\nvar mysql = require('mysql'),\n    StatisticsService = require('../service/StatisticsService'),\n    orm = require('orm');\n\nGLOBAL.pjconfig = require('../project.json');\n//GLOBAL.DEBUG = true;\nvar mysqlUrl = GLOBAL.pjconfig.mysql.url\n\norm.connect( mysqlUrl, function(err , db) {\n    if(err){\n        throw err;\n    }\n\n    global.models = {\n        userDao : require('../dao/UserDao')(db),\n        applyDao : require('../dao/ApplyDao')(db),\n        approveDao : require('../dao/ApproveDao')(db),\n        statisticsDao : require('../dao/StatisticsDao')(db),\n        db : db\n    }\n\n\n    var aa = new StatisticsService();\n\n\n    var startDate = new Date('2015-09-23 00:00:00');\n    var nowDate = new Date;\n\n    //fetch data until today\n    var fetch = function (id , startDate){\n        aa.fetchAndSave(id , startDate , function (){\n            console.log(startDate.toLocaleDateString() + \" ok \");\n            if((startDate -0) > (nowDate - 0) ){\n                console.log(\"out today\");\n                return ;\n            }\n            fetch(id , new Date(startDate.getFullYear() + \"-\" + (startDate.getMonth()+1)+\"-\"+ (startDate.getDate()+1)+\" 00:00:00\"));\n\n        })\n    }\n\n    fetch(24 , startDate);\n\n});\n\n\n\n"
  },
  {
    "path": "test/test-fetch-statistics.js",
    "content": "\nvar mysql = require('mysql'),\n    StatisticsService = require('../service/StatisticsService'),\n    orm = require('orm');\n\nGLOBAL.pjconfig = require('../project.json');\n//GLOBAL.DEBUG = true;\nvar mysqlUrl = GLOBAL.pjconfig.mysql.url\n\norm.connect( mysqlUrl, function(err , db) {\n    if(err){\n        throw err;\n    }\n\n    global.models = {\n        userDao : require('../dao/UserDao')(db),\n        applyDao : require('../dao/ApplyDao')(db),\n        approveDao : require('../dao/ApproveDao')(db),\n        statisticsDao : require('../dao/StatisticsDao')(db),\n        db : db\n    }\n\n\n    var aa = new StatisticsService();\n\n\n    var startDate = new Date('2015-09-23 00:00:00');\n    var nowDate = new Date;\n    var id = 991;\n    //fetch data until today\n        aa.fetchAndSave(id , startDate , function (){\n            console.log(startDate.toLocaleDateString() + \" ok \");\n\n        })\n\n    //fetch(24 , startDate);\n\n});\n\n\n\n"
  },
  {
    "path": "test/test-getProjects.js",
    "content": "var http = require('http');\n\n\n\nvar strParams=\"auth=badjsAccepter&projectsId=6_7_911_4_3_5\";\n\n\nhttp.get( \"http://10.143.132.205:9001/getProjects\" + '?' + strParams , function (res){\n    var buffer = '';\n    res.on('end' , function (){\n        console.log('ok')\n    })\n\n}).on('error' , function (err){\n    console.log('push project error :' + err);\n})\n\n\n\n\n"
  },
  {
    "path": "test/test-processor.js",
    "content": "\nvar EventEmitter = require(\"events\");\n\nvar eventEmitter = new EventEmitter;\n\nGLOBAL= {\n    pjconfig : {\n        zmq : {\n            \"url\" : \"tcp://127.0.0.1:10000\",\n            \"subscribe\" : \"badjs\"\n        }\n    }\n}\n\n\nvar ProcessorThread = require(\"../service/worker/ProcessorPool\");\n\n\n\n\nProcessorThread.createPool(1);\n\n\n\nvar webclientMock = {\n    _msgCallback :null,\n    send: function (data ){\n        console.log(data);\n    },\n    close : function (){\n\n    },\n    on : function (msg , cb){\n        if(msg == \"message\"){\n            eventEmitter.on(\"test\" , cb)\n        }\n\n    }\n}\n\n\nProcessorThread.getProcessor().start({wbClient : webclientMock});\nProcessorThread.getProcessor().start({wbClient : webclientMock});\nProcessorThread.getProcessor().start({wbClient : webclientMock});\n\nsetTimeout(function (){\n    eventEmitter.emit(\"test\", JSON.stringify({type : \"INIT\" , id:5}))\n\n},1000)\n\n\n\n"
  },
  {
    "path": "test/test-sendAll.js",
    "content": "GLOBAL.pjconfig = require('../project.json');\nvar EmailService = require(\"../service/EmailService\");\n\nvar orm = require('orm');\n\n\n//GLOBAL.DEBUG = true;\n\n\norm.connect( GLOBAL.pjconfig.mysql.url, function(err , db) {\n    if(err){\n        throw err;\n    }\n\n    global.models = {\n        userDao : require('../dao/UserDao')(db),\n        applyDao : require('../dao/ApplyDao')(db),\n        approveDao : require('../dao/ApproveDao')(db),\n        statisticsDao : require('../dao/StatisticsDao')(db),\n        db : db\n    }\n\n    var emailService = new EmailService;\n    emailService.queryAll( undefined   )\n\n});\n\n\n"
  },
  {
    "path": "test/test-sendEmail.js",
    "content": "GLOBAL.pjconfig = require('../project.json');\nvar EmailService = require('../service/EmailService');\n\nvar orm = require('orm');\n\norm.connect(GLOBAL.pjconfig.mysql.url, function(err, db) {\n    if (err) {\n        throw err;\n    }\n\n    global.models = {\n        userDao: require('../dao/UserDao')(db),\n        applyDao: require('../dao/ApplyDao')(db),\n        approveDao: require('../dao/ApproveDao')(db),\n        statisticsDao: require('../dao/StatisticsDao')(db),\n        db: db\n    };\n\n    var emailService = new EmailService;\n    emailService.queryAll(undefined, {\n        sendId: 991,\n        sendToList: ['chriscai@tencent.com', 'kaelyang@tencent.com'],\n        sendCcList: []\n    });\n\n});"
  },
  {
    "path": "test/test-statistics-find-by-time.js",
    "content": "  var mysql = require('mysql'),\n    StatisticsService = require('../service/StatisticsService'),\n    orm = require('orm');\n\nGLOBAL.pjconfig = require('../project.json');\n//GLOBAL.DEBUG = true;\nvar mysqlUrl = GLOBAL.pjconfig.mysql.url\n\norm.connect( mysqlUrl, function(err , db) {\n    if(err){\n        throw err;\n    }\n\n    global.models = {\n        userDao : require('../dao/UserDao')(db),\n        applyDao : require('../dao/ApplyDao')(db),\n        approveDao : require('../dao/ApproveDao')(db),\n        statisticsDao : require('../dao/StatisticsDao')(db),\n        db : db\n    }\n\n\n    var ss = new StatisticsService();\n    \n\n\n    var startDate = new Date('2017-01-15 00:00:00');\n    var endDate = new Date('2017-02-19 08:00:00');\n    \n    //fetch data until today\n   var ss = new StatisticsService();\n    \n\n\n    var startDate = new Date('2017-01-15 00:00:00');\n    var endDate = new Date('2017-02-19 08:00:00');\n    \n    //fetch data until today\n    var fetch = function (id , startDate){\n        ss.fetchAndSave(id , startDate , function (){ \n            console.log(id +\" : \"+  startDate.toLocaleDateString() + \" ok \");\n            if((startDate -0) > (endDate - 0)  ){  \n                console.log(\"out today\");\n                return ;\n            }   \n\n            setTimeout(function (){ \n                    var a = new Date(startDate)\n                    a.setDate( a.getDate() +1) \n                    fetch(id , a); \n            },100)\n\n        })  \n    }   \n\n\n    global.models.applyDao.find({\n                    status: 1\n                }, function(err, items) {\n\n                var count = 0;\n                items.forEach(function (item){\n                        count ++ ;\n                        setTimeout(function (){\n                                fetch(item.id , startDate)\n                        },3500 * count )\n                        //console.log(item.id)\n                })\n\n    })\n   // fetch(8 , startDate);\n\n});\n"
  },
  {
    "path": "test/test-zmq.js",
    "content": "/**\n * Created by chriscai on 2015/4/29.\n */\n\n\nvar pjconfig = require('../project.json');\n\nvar  zmq = require('zmq')\n    , client = zmq.socket('sub')\n    , port = pjconfig.zmq.url\n    , service = pjconfig.zmq.subscribe;\n\n\nvar http = require(\"http\");\n\n\n\n\n    logger.info(\"starting zmq : \" + service);\n\n    client.connect(port);\n    client.subscribe(service);\n\n\n\n\n    client.on('message', function (data) {\n        console.log(data.toString());\n    });\n\n"
  },
  {
    "path": "tmp/tmp",
    "content": ""
  },
  {
    "path": "utils/auth.js",
    "content": "var config = require('../package');\nvar des = require('./des');\nvar appKey = config.appKey;\nvar sysId = config.sysId;\n\t\nexports.info = function() {\n\tvar random = Math.floor(Math.random() * 10000);\n\tvar timestamp = Math.round(Date.now() / 1000);\n\tvar data = 'random' + random + 'timestamp' + timestamp;\n\tvar key = (sysId + '--------').substring(0, 8);\n\tvar signature = des.encrypt(data, key);\n\treturn {\n\t    'appkey': appKey,\n\t    'random': random,\n\t    'timestamp': timestamp,\n\t    'signature': signature\n\t};\n}"
  },
  {
    "path": "utils/dateFormat.js",
    "content": "/* global module */\nmodule.exports = function(date, fmt) {\n    var o = {\n        \"M+\": date.getMonth() + 1, //月份\n        \"d+\": date.getDate(), //日\n        \"h+\": date.getHours(), //小时\n        \"m+\": date.getMinutes(), //分\n        \"s+\": date.getSeconds(), //秒\n        \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度\n        \"S\": date.getMilliseconds() //毫秒\n    };\n    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n    for (var k in o)\n        if (new RegExp(\"(\" + k + \")\").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((\"00\" + o[k]).substr((\"\" + o[k]).length)));\n    return fmt;\n}"
  },
  {
    "path": "utils/des.js",
    "content": "var crypto = require('crypto');\n\nexports.encrypt = function (data, key) {\n\tvar key = new Buffer(key, 'ascii').toString('binary');\n\tvar vi = key;\n\tvar cipher = crypto.createCipheriv('des-cbc', key, vi);\n\tvar result = cipher.update(data, 'utf8', 'hex') + cipher.final('hex');\n    return result.toUpperCase();\n};\n\nexports.decrypt = function (data, key) {\n\tvar key = new Buffer(key, 'ascii').toString('binary');\n\tvar vi = key;\n\tvar cipher = crypto.createDecipheriv('des-cbc', key, vi);\n\tvar result = cipher.update(data, 'hex', 'utf8') + cipher.final('utf8');\n    return result;\n};"
  },
  {
    "path": "utils/email.js",
    "content": "/* global module */\nvar log4js = require('log4js');\nvar logger = log4js.getLogger();\nvar emailjs = require(\"emailjs\");\nvar EmailServer = null;\nvar RETRY = 3;\n\nmodule.exports = function(from, to, cc, title, content) {\n    logger.info(\"Send email \" + title);\n    var message = {\n        from: from,\n        to: to.join(\",\"),\n        cc: cc.join(\",\"),\n        text: title,\n        subject: title,\n        attachment: [{\n            data: content || '<html></html>',\n            alternative: true\n        }]\n    };\n\n    (function send(message, times) {\n        if (!EmailServer) {\n            EmailServer = emailjs.server.connect({\n                host: GLOBAL.pjconfig.email.smtp,\n                user:   GLOBAL.pjconfig.email.smtpUser, \n                password: GLOBAL.pjconfig.email.smtpPassword ,  \n                ssl: false\n            });\n        }\n        EmailServer.send(message, function(err, data) {\n            times--;\n            if (err ) {\n                logger.error(\"Send email error \" + title);\n                EmailServer = null;\n                return times>0 && send(message, times);\n            }\n            logger.info(\"Send email success \" + title);\n        });\n    })(message, RETRY);\n};\n"
  },
  {
    "path": "utils/email_tof.js",
    "content": "/* global module */\nvar child_process = require('child_process');\nvar log4js = require('log4js');\nvar logger = log4js.getLogger();\n\n\nvar wrap = function(str){\n    return [\"'\", (str || '').toString().replace(/'/g, '\"').replace(/[\\r\\n]/g, ''), \"'\"].join('');\n};\n\nvar fixMail = function(emails){\n    if (!Array.isArray(emails)) {\n        return '';\n    }\n\n    var output = [];\n    emails.forEach(function(v){\n        var name = (v || '').toString().replace(/@[\\w\\W]*$/, '');\n        name && output.push(name);\n    });\n\n    return output.join(\";\");\n};\n\nvar charset = 'utf8';\n\nmodule.exports = function(from, to, cc, title, content) {\n    logger.info(\"Send email \" + title);\n    var cmd = ['./utils/uniform_msg_client mail'];\n    cmd.push('-T', wrap(fixMail(to)));\n    cmd.push('-C', wrap(fixMail(cc)));\n    cmd.push('-S', wrap(title));\n    cmd.push('-c', wrap(content));\n    cmd.push('-d', wrap(charset));\n\n    child_process.exec(cmd.join(' '), function(error, stdout, stderr) {\n        logger.info(\"Send email  \" + stdout);\n        if (error !== null) {\n            logger.error(\"Send email error \" + error);\n            logger.error(\"Send email error \" + stderr);\n        }\n    });\n};"
  },
  {
    "path": "utils/express-websocket.js",
    "content": "var http = require('http');\nvar urlJoin = require('url-join');\nvar ServerResponse = http.ServerResponse;\nvar WebSocketServer = require('ws').Server;\n\nvar wsServers = {};\n\n/**\n * @param {express.Application} app\n * @param {http.Server} [server]\n */\nmodule.exports = function (app, server) {\n    if(!server) {\n        server = http.createServer(app);\n\n        app.listen = function()\n        {\n            return server.listen.apply(server, arguments)\n        }\n    }\n\n    function addSocketRoute(route, middleware, callback) {\n        var args = [].splice.call(arguments, 0);\n        var wsPath = urlJoin(app.mountpath, route);\n\n        if (args.length < 2)\n            throw new SyntaxError('Invalid number of arguments');\n\n        if (args.length === 2) {\n            middleware = [middleware];\n        } else if (typeof middleware === 'object') {\n            middleware.push(callback);\n        } else {\n            middleware = args.slice(1);\n        }\n\n        var wss = new WebSocketServer({\n            server: server,\n            path: wsPath\n        });\n\n        wsServers[wsPath] = wss;\n\n        wss.on('connection', function(ws) {\n            var response = new ServerResponse(ws.upgradeReq);\n            response.writeHead = function (statusCode) {\n                if (statusCode > 200) ws.close();\n            };\n            ws.upgradeReq.method = 'ws';\n\n            for(var i = 0 ; i < middleware.length ; i ++){\n                var cur = middleware[i];\n                cur(ws, ws.upgradeReq);\n            }\n\n\n\n        });\n\n        return app;\n    };\n\n    app.ws = addSocketRoute;\n\n    return {\n        app: app,\n        getWss: function (route) {\n            return wsServers[route];\n        }\n    };\n};\n"
  },
  {
    "path": "views/account.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/header.html')(it, opt)%>\nHello, <%=it.user.username%>.\n<%=include('./common/footer.html')(it)%>\n</body>\n</html>"
  },
  {
    "path": "views/apply.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/header.html')(it, opt)%>\n<main id=\"content\" role=\"main\">\n    <div class=\"wrap\">\n        <div id=\"applyContainer\" class=\"formContainer\">\n\n            <form id=\"applyForm\" class=\"form-horizontal form-wrap\" role=\"form\">\n                <h3 class=\"applyTitle\">\n                    <% if (it.apply.name) {%>\n                    业务编辑\n                    <% } else { %>\n                    新业务申请\n                    <%}%>\n                </h3>\n                <div class=\"form-group\">\n                    <label  class=\"col-sm-4 control-label\">业务名称 <span style=\"color: red\">*</span></label>\n                    <div class=\"col-sm-6\">\n                        <input  type=\"text\" class=\"apply-name form-control\" placeholder=\"申请业务名\" value=\"<%=it.apply.name%>\">\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <label class=\"col-sm-4 control-label\">业务URL <span style=\"color: red\">*</span></label>\n                    <div class=\"col-sm-6\">\n                        <input\n                            type=\"url\"\n                            class=\"apply-url form-control\"\n                            placeholder=\"业务url\"\n                            value=\"<%=it.apply.url%>\"\n                        >\n                        <p class=\"input-tips\">\n                            上报请求的 referer 与该 url 不匹配将被拒绝<br>\n                            eg: <b>http://www.qq.com/(绝对匹配)</b> 和 <b>*.qq.com</b> 格式<br>\n                            如果不希望服务器做 referer 检查, 请填写 <b>*</b><br>\n                        </p>\n                    </div>\n\n\n                </div>\n\n                <!--<div class=\"form-group\">-->\n                <!--<label class=\"col-sm-4 control-label\">通知邮箱</label>-->\n                <!--<div class=\"col-sm-6\">-->\n                <!--<input type=\"email\" class=\"apply-mail form-control\"  placeholder=\"通知邮箱\">-->\n                <!--</div>-->\n                <!--</div>-->\n                <div class=\"form-group\">\n                    <label  class=\"col-sm-4 control-label\" >业务描述&nbsp;  </label>\n                    <div class=\"col-sm-6\">\n                        <textarea  placeholder=\"业务描述\" class=\"apply-description form-control\" rows=\"4\"><%=it.apply.description%></textarea>\n                    </div>\n                </div>\n\n                <div class=\"form-group\">\n                    <label class=\"col-sm-4 control-label\">IP 限制</label>\n                    <div class=\"col-sm-6\">\n                        <%\n                            try {\n                                it.apply.blacklist = JSON.parse(it.apply.blacklist || {})\n                            }catch(e){\n                                it.apply.blacklist = {}\n                            }\n                            var blacklistIPStr =  it.apply.blacklist.ip ? it.apply.blacklist.ip.join(',') : ''\n                            var blacklistUAStr =  it.apply.blacklist.ua ? it.apply.blacklist.ua.join(',') : ''\n                        %>\n\n                        <input\n                            class=\"apply-name form-control apply-blacklist-ip\"\n                            placeholder=\"拦截指定IP上报\"\n                            value=\"<%= blacklistIPStr %>\" type=\"text\" />\n                        <p class=\"input-tips\">\n                            格式如下：\n                            <code>127.0.0.5,132.5.3.*,132.4.* </code>\n                        </p>\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <label class=\"col-sm-4 control-label\">userAgent 限制</label>\n                    <div class=\"col-sm-6\">\n\n                        <input\n                            class=\"apply-name form-control apply-blacklist-ua\"\n                            placeholder=\"拦截指定userAgent上报\"\n                            value=\"<%= blacklistUAStr %>\" type=\"text\" />\n                        <p class=\"input-tips\">\n                            格式如下：\n                            <code> Baiduspider,Googlespider  </code>\n                        </p>\n                    </div>\n                </div>\n\n\n                <div class=\"form-group\">\n                    <div class=\"col-sm-offset-4 col-sm-6\">\n                        <button class=\"col-sm-3 btn btn-primary apply-submit\" >\n                            <% if (it.apply.name) {%>\n                            编辑\n                            <% } else { %>\n                            申请\n                            <%}%>\n                        </button>\n                        <button type=\"reset\" class=\"col-sm-offset-1 col-sm-3 btn btn-default\" >重置</button>\n                    </div>\n                    <% if (it.apply.name) {%>\n                     <input type=\"hidden\" value=\"<%=it.apply.id%>\" name=\"applyId\" id=\"applyId\">\n                    <% }  %>\n                </div>\n            </form>\n        </div>\n\n\n\n    </div>\n</main>\n\n<%=include('./common/footer.html')(it)%>\n<script src=\"/static/entry.apply.js\"></script>\n</body>\n\n</html>\n"
  },
  {
    "path": "views/applyList.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\">\n    <div class=\"wrap\">\n        <!--<%=include('./common/leftSide.html')(it, opt)%>-->\n        <div class=\"contentPanel\">\n            <div class=\"searchPanel clearfix\">\n              <!--  <label class=\"search-info\">申请人</label>\n                <input id=\"apply_searchText\" type=\"text\"  placeholder=\"申请人\">-->\n                <!--<label for=\"\">From</label>-->\n                <!--<input type=\"text\" value=\"\" readonly class=\"datetimepicker fromTime\" />-->\n                <!--<label for=\"\">to</label>-->\n                <!--<input type=\"text\" value=\"\" readonly class=\"datetimepicker toTime\" />-->\n                <label class=\"search-info\">状态类型</label>\n                <select id=\"apply_searchType\">\n                    <option value=\"3\">全部</option>\n                    <option value=\"0\">审核中</option>\n                    <option value=\"1\">已通过</option>\n                    <option value=\"2\">已拒绝</option>\n                </select>\n\n                <button type=\"button\" id=\"apply_searchBtn\" class=\"btn btn-default searchBtn\">搜索</button>\n\n            </div>\n            <div class=\"applyTable ListTable\">\n                <div class=\"tableTitle\">申请记录</div>\n                <div class=\"tableWrapper\">\n                    <table  class=\"dataTable table\">\n                    </table>\n                </div>\n\n            </div>\n        </div>\n    </div>\n\n</main>\n\n<%=include('./common/footer.html')(it)%>\n<script src=\"/static/entry.applyList.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "views/approve.html",
    "content": ""
  },
  {
    "path": "views/authUserManage.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('/common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\">\n    <div class=\"wrap\">\n        <!--<%=include('/common/leftSide.html')(it, opt)%>-->\n        <div class=\"contentPanel\">\n            <div class=\"searchPanel clearfix\">\n               <!-- <label class=\"search-info\">搜索信息</label>\n                <input type=\"text\" class=\"search-userText\" placeholder=\"姓名（此功能暂时没有用)\">-->\n                <label class=\"search-info\">当前项目</label>\n                <select name=\"roleType\" class=\"search-userType\">\n                        <option value=\"-1\">全部</option>\n                        <option value=\"1\">管理员</option>\n                        <option value=\"0\">普通用户</option>\n                </select>\n                <button type=\"button\" class=\"btn btn-default searchBtn\">搜索</button>\n\n\n            </div>\n\n            <div class=\"userTable ListTable\">\n                <div class=\"tableTitle\">用户表</div>\n                <div class=\"tableWrapper table-responsive\">\n                    <table class=\"dataTable table\">\n                        <thead>\n                        <tr>\n                            <th style=\"width:80px;\">#</th>\n                            <th style=\"width:200px;\">用户登录名</th>\n                            <th style=\"width:200px;\">用户中文名</th>\n                            <th style=\"width:200px;\">邮箱</th>\n                            <th style=\"width:200px;\">用户角色</th>\n                            <th>操作</th>\n                        </tr>\n                        </thead>\n                        <tbody id=\"userList\">\n\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n        </div>\n\n    </div>\n</main>\n\n<%=include('/common/footer.html')(it)%>\n<script src=\"/static/entry.authUserManage.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "views/charts.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n\n<%=include('./common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\" class=\"autoBottom\">\n    <div class=\"wrap\">\n        <!--<%=include('./common/leftSide.html')(it, opt)%>-->\n        <div class=\"mid-side\">\n            <div id=\"chartsContainer\"  class=\"main-mid\" style=\"height:90%\">\n\n            </div>\n        </div>\n        <div class=\"right-side\">\n\n            <section>\n                <label class=\"setting-title\">统计项目：</label>\n                <select class=\"form-control \"  id=\"select-chartBusiness\">\n                    <option value=\"-1\">-- 全部项目 --</option>\n                    <%  for(var i = 0 ; i < it.items.length ;i ++){\n                    var itemOne = it.items[i];\n\n                    %>\n                    <option value=\"<%=itemOne.id%>\"> <%=itemOne.name%></option>\n                    <%}%>\n                </select>\n            </section>\n            <section>\n                <label class=\"setting-title\">时间范围：</label>\n                <select  class=\"form-control\" id=\"select-timeScope\">\n                    <option value=\"1\">最近七天</option>\n                    <option value=\"2\">最近一个月</option>\n                </select>\n            </section>\n\n            <section>\n                <div class=\"setting-search\" id=\"showCharts\">图表统计</div>\n            </section>\n        </div>\n    </div>\n</main>\n<%=include('./common/footer.html')(it)%>\n<script src=\"/static/entry.charts.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "views/common/commonLinks.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n    <meta name=\"renderer\" content=\"webkit|ie-comp|ie-stand\">\n    <title>BadJs - 前端js异常监控系统</title>\n    <link href=\"/static/lib/bootstrap/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"/static/lib/bootstrap/bootstrap-theme.css\" rel=\"stylesheet\">\n    <link  href=\"/static/lib/bootstrap/bootstrap-datetimepicker.min.css\" rel=\"stylesheet\"/>\n    <link href=\"/static/module/common/app.css\" rel=\"stylesheet\">\n    <link rel=\"shortcut icon\" href=\"/static/img/favicon.ico\" type=\"image/x-icon\" />\n</head>\n<body>\n\n\t<script src=\"/static/badjs/bj-report.js\"></script>\n\t<script src=\"/static/badjs/bj-wrap.js\"></script>\n    <script>\n        BJ_REPORT.init({\n            id: 2,\n            url: \"http://127.0.0.1/badjs\"\n        });\n\n        BJ_REPORT.tryJs().spyAll();\n    </script>"
  },
  {
    "path": "views/common/footer.html",
    "content": "<script src=\"/static/common.js\"></script>\n\n"
  },
  {
    "path": "views/common/header.html",
    "content": "<header>\n    <%=include('./logo.html')(it, opt)%>\n    <div class=\"head-user\">\n        <% if (it.user) { %>\n        <span class=\"head-face\"><%= it.user.chineseName %>(<%= it.user.loginName %>)</span>\n        <a href=\"/logout\">退出</a>\n        <% } else { %>\n        <a href=\"/user/login\">登录</a>\n        <% } %>\n    </div>\n</header>\n<%=include('./nav.html')(it, opt)%>\n"
  },
  {
    "path": "views/common/indexHeader.html",
    "content": "<header style=\"border-bottom:1px solid #B8B8B8;position:fixed;top:0\">\n    <%=include('./logo.html')(it, opt)%>\n    <div class=\"head-user\">\n        <a href=\"/register.html\">注册新用户</a>\n        <a href=\"/user/index.html\">我的业务</a>\n    </div>\n</header>"
  },
  {
    "path": "views/common/leftSide.html",
    "content": "\n\n<div class=\"left-side\">\n    <section>\n        <label>日志</label>\n        <ul>\n\n            <li class=\"<%= it.index=='log'?'active':''%>\">\n                <a href=\"index.html\"><i></i>历史日志</a>\n            </li>\n            <li class=\"\">\n                <a href=\"\"><i></i>实时日志</a>\n            </li>\n        </ul>\n    </section>\n    <% if(it.user.role != 1){%>\n    <section>\n        <label>个人</label>\n        <ul>\n            <li class=\"<%= it.index=='personal'?'active':''%>\">\n                <a href=\"\"><i></i>个人中心</a>\n            </li>\n            <li class=\"<%= it.index=='applyList'?'active':''%>\">\n                <a href=\"applyList.html\"><i></i>申请记录</a>\n            </li>ist\n        </ul>\n    </section>\n    <%}else{%>\n    <section>\n        <label>管理</label>\n        <ul>\n            <li class=\"<%= it.index=='userManage'?'active':''%>\">\n                <a href=\"userManage.html\"><i></i>用户管理</a>\n            </li>\n            <li class=\"<%= it.index=='applyList'?'active':''%>\">\n                <a href=\"applyList.html\"><i></i>申请审核</a>\n            </li>\n        </ul>\n    </section>\n    <%}%>\n    <section>\n        <label>系统</label>\n        <ul>\n            <li class=\"<%= it.index=='introduce'?'active':''%>\">\n                <a href=\"\"><i></i>系统介绍</a>\n            </li>\n            <li class=\"<%= it.index=='guide'?'active':''%>\">\n                <a href=\"\"><i></i>接入指南</a>\n            </li>\n        </ul>\n    </section>\n</div>"
  },
  {
    "path": "views/common/logo.html",
    "content": "<div class=\"head-logo\">\n    <a href=\"index.html\">\n        <img src=\"/static/img/logo2.png\" >\n    </a>\n    <span>前端js异常监控系统</span>\n</div>\n"
  },
  {
    "path": "views/common/nav.html",
    "content": "<nav id=\"navbar\">\n    <ul class=\"nav\">\n        <li class=\"item <%= it.index=='log' ? 'active' : ''%>\">\n            <a href=\"index.html\">历史日志</a>\n        </li>\n        <li class=\"item <%= it.index=='realtime' ? 'active' : ''%>\">\n            <a href=\"realtimelog.html\">实时日志</a>\n        </li>\n\n        <li  class=\"item <%= it.index=='offlinelog' ? 'active' : ''%>\">\n            <a href=\"offlinelog.html\">离线日志</a>\n        </li>\n\n        <li class=\"item items <%= it.index=='statistics' ? 'active' : ''%>\">\n            <a><%= it.statisticsTitle?it.statisticsTitle:\"统计\" %></a>\n            <ul class=\"subNav\">\n                <li class=\"item\">\n                    <a  href=\"statistics.html\">日志统计</a>\n                </li>\n                <li class=\"item\">\n                    <a  href=\"charts.html\">图表统计</a>\n                </li>\n                <% if(it.user.role == 1) { %>\n                <li class=\"item\">\n                    <a  href=\"projectTotal.html\">项目统计</a>\n                </li>\n                <% } %>\n            </ul>\n        </li>\n        <li class=\"item <%= it.index=='apply' ? 'active' : ''%>\">\n            <a href=\"apply.html\">申请接入</a>\n        </li>\n        <li class=\"item items <%= it.index=='manage' ? 'active' : ''%>\">\n            <a><%= it.manageTitle?it.manageTitle:\"管理\" %></a>\n            <ul class=\"subNav\">\n                <li class=\"item\">\n                    <a  href=\"applyList.html\">申请项目列表</a>\n                </li>\n                <li class=\"item\">\n                    <a  href=\"userManage.html\">项目用户权限</a>\n                </li>\n                <% if(it.user.role == 1){ %>\n                <li class=\"item\">\n                    <a  href=\"authUserManage.html\">注册用户列表</a>\n                </li>\n                <% } %>\n                <li class=\"item\">\n                    <a  href=\"modifyUser.html\">密码修改</a>\n                </li>\n            </ul>\n        </li>\n        <li class=\"item items <%= it.index==('systemIntroduce'||'guide') ? 'active' : ''%>\">\n            <a href=\"introduce.html\">帮助</a>\n        </li>\n    </ul>\n</nav>\n"
  },
  {
    "path": "views/help.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\">\n    <div class=\"wrap\">\n        <div class=\"main autoM\">\n\n                <div class=\"m-mian js_navinfo\" id=\"Mnavinfo-2\">\n                <div class=\"m-r-side r\">\n                    <h2 class=\"m-title-2\">接入指南</h2>\n                    <ul class=\"toolar-ul\">\n                        <li><a class=\"toolar-list\" href=\"#caption1\">1.申请上报ID</a></li>\n                        <li><a class=\"toolar-list\" href=\"#caption2\">2.页面上报</a></li>\n                        <li><a class=\"toolar-list\" href=\"#caption3\">3.Nlog查看日志</a></li>\n                    </ul>\n                </div>\n                <div class=\"m-l-mian l\">\n                    <h2 class=\"m-title\" id=\"caption1\">1.申请上报ID</h2>\n                    <p class=\"ml-mod\">每个业务对应唯一ID，在Nlog中提供日志筛选 </p>\n                    <h2 class=\"m-title\" id=\"caption2\">2.页面上报</h2>\n                    <div class=\"ml-mod\">\n                        <p>\n                            <b>Step 1.引入Tryjs脚本</b><br/>\n                            代码封装在tryjs中---(github地址)http://github.com/imweb/mobile/tree/master/src/tools<br/>\n                            <b>加载tryjs模块，并初始化</b><br/>\n                            <img src='img/js.png' width=\"70%\" />\n                        </p>\n                        <p>\n                            <b>Step 2.申请项目接入</b><br/>\n                            <img src='img/insert.png' width=\"100%\" />\n                        </p>\n                        <div>\n                            <p><b>Step 3.页面上报</b></p>\n                            <p>在页面需要上报的上报点加入以下代码:<br/>\n                                $.badjs(msg, url, line, smid, level);\n                                参数对应的含义分别是：<br/>\n                            <ul style=\"margin-left:20px;\">\n                                <li>msg {String} 上报错误信息</li>\n                                <li>url {String} 该上报信息所属的文件路径</li>\n                                <li>line {Number} 上报信息所属的文件行号，没有为0</li>\n                                <li>smid {Number} 上报对应的monitor id</li>\n                                <li> level {Number} 上报对应的级别:\n                                    <ul style=\"margin-left:30px;\">\n                                        <li> debug（调试日志）：1 ;</li>\n                                        <li> info（流水日志）：2 ;</li>\n                                        <li> error（错误日志）：4（默认值） ;</li>\n                                        <li> fail（致命错误日志）：8</li>\n                                    </ul>\n                                </li>\n                            </ul>\n                            </p>\n                        </div>\n                        <div>\n                            <p><b id=\"caption3\">Step 4.badjs系统查看日志，进行统计</b></p>\n                            <p>在badjs系统中设置查询参数，选择对应的业务名称<br/>\n                                <img src='img/log.png' width=\"100%\"  /><br/>\n                                对查询结果进行统计<br/>\n                                图表统计<br/>\n                                <img src='img/charts.png' width=\"100%\" />\n                                日志统计<br/>\n                                <img src='img/statistics.png' width=\"100%\" />\n                            </p>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"clear\"></div>\n            </div>\n            <div class=\"m-mian js_navinfo\" id=\"Mnavinfo-3\">\n                <div>\n                    <h2 class=\"m-title\">常见问题FAQ</h2>\n                    <div class=\"ml-mod\">下面列举一些常见问题供各部门同事参考，参考中无法找到解决办法的问题可以RTX联系IMWebA/IMWebB协助处理。</div>\n                    <h2 class=\"m-title\">业务接入问题</h2>\n                    <div class=\"ml-mod\">\n                        <p><b>Q1.Badjs脚本做了什么？</b></p>\n                        <p>将信息上报到Nlog日志系统。同时监听error事件，上报脚本错误。</p>\n                        <p><b>Q2.为什么要申请业务ID？</b></p>\n                        <p>业务ID是为了方便在Nlog系统中做查询筛选，每一条上报记录对应了唯一一个业务。</p>\n                    </div>\n\n                </div>\n            </div>\n        </div>\n\n\n    </div>\n</main>\n\n<%=include('./common/footer.html')(it)%>\n</body>\n\n</html>"
  },
  {
    "path": "views/index.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/indexHeader.html')(it, opt)%>\n\n\n\n<div style=\"margin-top:25px;float:left; width:200px;position:fixed; \">\n    <div class=\"m-r-side r\">\n        <ul class=\"toolar-ul\" style=\"\">\n            <li><a class=\"toolar-list\" href=\"#caption1\">1. 申请上报ID</a></li>\n            <li><a class=\"toolar-list\" href=\"#caption2\">2. 页面上报</a></li>\n            <li><a class=\"toolar-list\" href=\"#caption3\">3. Nlog查看日志</a></li>\n        </ul>\n    </div>\n</div>\n\n<main id=\"content\" role=\"main\" class=\"index-container\" style=\"margin-left:200px;margin-top:80px;\">\n    <div class=\"wrap\">\n        <div class=\"main autoM\">\n\n            <div class=\"m-mian js_navinfo\" id=\"Mnavinfo-2\">\n\n                <div class=\"m-l-mian l\">\n                    <h2 class=\"m-title\" id=\"caption1\">1.申请上报ID</h2>\n                    <p class=\"ml-mod\">每个业务对应唯一ID ，这个ID 是在上报的时候必须指定的 </p>\n                    <h2 class=\"m-title\" id=\"caption2\">2.页面上报</h2>\n                    <div class=\"ml-mod\">\n                        <p>\n                            <b>Step 1.引入badjs脚本</b>\n                        </p>\n                        <p>\n                            项目地址 ：<a href=\"https://github.com/BetterJS/report\" _blank=\"target\"> https://github.com/BetterJS/report</a><br/>\n                            dist 目录下的:<br/>\n                            bj-report.js 最基本的上报组件<br/>\n                            bj-report-tryjs.js 包含基本和高级tryjs的组件(推荐)<br/>\n                            <br/>\n\n                        </p>\n                        <p>\n                            <b>Step 2.申请项目接入</b><br/>\n                            <p> 首先点击右上角进行注册或则登录。</p>\n                            <p> 登录完成后，进入管理控制台，点击导航栏中的“申请接入” ，然后等待管理员的审核。 </p>\n                        </p>\n                        <div>\n                            <p><b>Step 3.页面上报</b></p>\n                            <p> 说明请查看 <a href=\"https://github.com/BetterJS/report\" _blank=\"target\"> github项目</a> 地址readme <br/>\n                            </p>\n                        </div>\n                    </div>\n                    <h2 class=\"m-title\" id=\"caption3\">3.Nlog查看日志</h2>\n                    <p>在badjs系统中设置查询参数，选择对应的业务名称<br/>\n                        <img src='/static/img/log.png' width=\"100%\"  /><br/>\n                        对查询结果进行统计<br/>\n                        图表统计<br/>\n                        <img src='/static/img/charts.png' width=\"100%\" />\n                        日志统计<br/>\n                        <img src='/static/img/statistics.png' width=\"100%\" />\n                    </p>\n                </div>\n                <div class=\"clear\"></div>\n            </div>\n            <div class=\"m-mian js_navinfo\" id=\"Mnavinfo-3\">\n                <div>\n                    <h2 class=\"m-title\">常见问题FAQ</h2>\n                    <div class=\"ml-mod\">下面列举一些常见问题供各位参考，参考中无法找到解决办法的问题可以访问 <a  target=\"_blank\" href=\"https://github.com/BetterJS/doc/issues\">https://github.com/BetterJS/doc/issues</a></div>\n                    <h2 class=\"m-title\">业务接入问题</h2>\n                    <div class=\"ml-mod\">\n                        <p><b>Q1.Badjs脚本做了什么？</b></p>\n                        <p>将信息上报到Nlog日志系统。同时监听error事件，上报脚本错误。</p>\n                        <p><b>Q2.为什么要申请业务ID？</b></p>\n                        <p>业务ID是为了方便在Nlog系统中做查询筛选，每一条上报记录对应了唯一一个业务。</p>\n                    </div>\n\n                </div>\n            </div>\n        </div>\n\n\n    </div>\n</main>\n\n<%=include('./common/footer.html')(it)%>\n<script src=\"/static/entry.home.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "views/introduce.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\">\n    <div class=\"wrap\">\n        <div class=\"main autoM\">\n            <div class=\"m-mian js_navinfo\" id=\"Mnavinfo-1\">\n                <div>\n                    <h2 class=\"m-title\">1.Badjs能解决哪些问题？</h2>\n                    <p class=\"ml-mod\">还在为js脚本的调试、错误等信息苦恼吗？还在为无法重现错误、无法定位问题而郁闷吗？由<a href=\"http://imweb.github.io/\">imweb</a>前端团队开发的\n                        Badjs上报可以方便的解决此类问题，快速定位错误，还等什么，赶紧接入Badjs上报吧。</p>\n                    <p class=\"ml-mod\">Badjs是为了解决页面js脚本的调试、错误、失败等信息的解决方案。\n                        Web页面将调试，错误等信息通过badjs上报到本系统，开发者在本系统中可以查到上报的错误信息，方便追踪问题。</p>\n                    <!-- <h2 class=\"m-title\">2.目前已接入的业务</h2>\n                     <div class=\"ml-mod\">\n                         <table class=\"tablelist\" width=\"60%\" cellpadding=\"1\" cellspacing=\"1\">\n                             <tbody>\n                             <tr>\n                                 <td class=\"tabletitle\">业务名称</td>\n                                 <td class=\"tabletitle\">URL</td>\n                                 <td class=\"tabletitle\">路径</td>\n                             </tr>\n                             <tr>\n                                 <td>QQ安全中心</td>\n                                 <td>http://aq.qq.com</td>\n                                 <td></td>\n                             </tr>\n                             <tr>\n                                 <td>可能认识的人</td>\n                                 <td>http://id.qq.com/index.html#possible</td>\n                                 <td></td>\n                             </tr>\n                             <tr>\n                                 <td>群查找</td>\n                                 <td></td>\n                                 <td></td>\n                             </tr>\n                             <tr>\n                                 <td>表情搜索</td>\n                                 <td></td>\n                                 <td></td>\n                             </tr>\n                             <tr>\n                                 <td>QQ等级</td>\n                                 <td>http://id.qq.com/level2/</td>\n                                 <td></td>\n                             </tr>\n                             <tr>\n                                 <td>LBS</td>\n                                 <td></td>\n                                 <td></td>\n                             </tr>\n                             <tr>\n                                 <td>推荐表情</td>\n                                 <td></td>\n                                 <td></td>\n                             </tr>\n                             <tr>\n                                 <td>定时消息</td>\n                                 <td>http://id.qq.com/#greeting</td>\n                                 <td></td>\n                             </tr>\n                             <tr>\n                                 <td>群设置</td>\n                                 <td></td>\n                                 <td></td>\n                             </tr>\n                             <tr>\n                                 <td>AIO应用</td>\n                                 <td></td>\n                                 <td></td>\n                             </tr>\n                             </tbody>\n                         </table>\n                     </div>-->\n                    <div class=\"clear\"></div>\n                </div>\n            </div>\n            <div class=\"m-mian js_navinfo\" id=\"Mnavinfo-3\">\n                <div>\n                    <h2 class=\"m-title\">常见问题FAQ</h2>\n                    <div class=\"ml-mod\">下面列举一些常见问题供各位参考，参考中无法找到解决办法的问题可以访问 <a target=\"_blank\" href=\"https://github.com/BetterJS/doc/issues\">https://github.com/BetterJS/doc/issues</a></div>\n                    <h2 class=\"m-title\">业务接入问题</h2>\n                    <div class=\"ml-mod\">\n                        <p><b>Q1.Badjs脚本做了什么？</b></p>\n                        <p>将信息上报到badjs系统。同时监听error事件，上报脚本错误。</p>\n                        <p><b>Q2.为什么要申请业务ID？</b></p>\n                        <p>业务ID是为了方便在badjs系统中做查询筛选，每一条上报记录对应了唯一一个业务。</p>\n                        <p><b>Q3.项目的有开源吗？</b></p>\n                        <p>项目是有开源的：<a href=\"https://github.com/BetterJS\">https://github.com/BetterJS</a></p>\n                    </div>\n            </div>\n        </div>\n\n\n    </div>\n</main>\n\n<%=include('./common/footer.html')(it)%>\n</body>\n\n</html>\n"
  },
  {
    "path": "views/log.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\" class=\"autoBottom\">\n    <div class=\"wrap\">\n        <!--<%=include('./common/leftSide.html')(it, opt)%>-->\n        <div class=\"mid-side\">\n            <div class=\"main-mid\">\n                <table class=\"main-table\">\n                    <thead>\n                        <tr>\n                            <th class=\"td-1 active\">#</th>\n                            <th class=\"td-2 active\">Time</th>\n                            <th class=\"td-3 active\">Information</th>\n                            <th class=\"td-4 active\">uin</th>\n                            <th class=\"td-5 active\">ip</th>\n                            <th class=\"td-6 active\">Agent</th>\n                            <th class=\"td-7 active\">\n                            <!--<div class=\"source_page_trigger\" title=\"点击显示/隐藏原始上报\"><input type=\"checkbox\" checked=\"checked\" id=\"show_source_page\"><label for=\"show_source_page\">Source</label></div>-->\n                                Source\n                            </th>\n                        </tr>\n                    </thead>\n                    <tbody id=\"log-table\">\n\n                    </tbody>\n                </table>\n            </div>\n        </div>\n        <div class=\"right-side\">\n            <section>\n                <div class=\"setting-show\">\n                    <span class=\"item active td-2\" data-td=\"td-2\" data-event-click=\"showTd\">Time</span>\n                    <span class=\"item active td-3\" data-td=\"td-3\" data-event-click=\"showTd\">Information</span>\n                    <span class=\"item active td-4\" data-td=\"td-4\" data-event-click=\"showTd\">uin</span>\n                    <span class=\"item active td-5\" data-td=\"td-5\" data-event-click=\"showTd\">ip</span>\n                    <span class=\"item active td-6\" data-td=\"td-6\" data-event-click=\"showTd\">Agent</span>\n                    <span class=\"item active td-7\" data-td=\"td-7\" data-event-click=\"showTd\">Source</span>\n                </div>\n            </section>\n            <section>\n                <div class=\"log-select\">\n                    <!--  <input type=\"text\" class=\"head-input\" placeholder=\"选择业务\"/>\n                      <div class=\"head-btn\" data-event-click=\"searchBusiness\"><span class=\"glyphicon glyphicon-search\"></span></div>-->\n                    <select class=\"form-control \" data-event-change=\"selectBusiness\" id=\"select-business\">\n                        <option value=\"-1\">-- 请选择项目 --</option>\n\n                        <%  for(var i = 0 ; i < it.items.length ;i ++){\n                            var itemOne = it.items[i];\n\n                        %>\n                        <option value=\"<%=itemOne.id%>\"> (id=<%=itemOne.id%>) <%=itemOne.name%></option>\n                        <%}%>\n                    </select>\n                </div>\n                <div class=\"clear\"></div>\n            </section>\n            <section>\n                <p class=\"setting-title\">消息类型\n                <ul class=\"setting-msg\">\n                    <li class=\"msg-error \" data-event-click=\"errorTypeClick\">error</li>\n                    <li class=\"msg-log\" data-event-click=\"logTypeClick\">log</li>\n                <!--    <li class=\"msg-debug\" data-event-click=\"debugTypeClick\">debug</li>-->\n                </ul>\n                <div class=\"clear\"></div>\n            </section>\n            <section>\n                <p class=\"setting-title\">起始时间</p>\n                <input type=\"text\" value=\"\" readonly class=\"datetimepicker\" id=\"startTime\"/><br>\n\n                <p class=\"setting-title\">结束时间</p>\n                <input type=\"text\" value=\"\" readonly class=\"datetimepicker\" id=\"endTime\"/>\n            </section>\n            <section>\n                <p class=\"setting-title\">包含关键词</p>\n                <div class=\"keyword-ctn\">\n                    <input type=\"text\" class=\"keyword-ipt\" id=\"keyword-ipt\" data-event-keyup=\"addKeyword\"/><button class=\"keyword-btn\" data-event-click=\"addKeyword\">添加</button><button class=\"keyword-btn\" data-event-click=\"removeKeywords\">清空</button>\n                    <div class=\"keyword-tag-ctn\" id=\"keyword-group\">\n                    </div>\n                </div>\n            </section>\n            <section>\n                <p class=\"setting-title\">排除关键词</p>\n                <div class=\"keyword-ctn\">\n                    <input type=\"text\" class=\"keyword-ipt\" id=\"debar-ipt\" data-event-keyup=\"addDebar\"/><button class=\"keyword-btn\" data-event-click=\"addDebar\">添加</button><button class=\"keyword-btn\" data-event-click=\"removeDebars\">清空</button>\n                    <div class=\"keyword-tag-ctn\" id=\"debar-group\">\n                    </div>\n                </div>\n            </section>\n            <section>\n                <div class=\"setting-search\" data-event-click=\"showLogs\">查询日志</div>\n            </section>\n        </div>\n    </div>\n</main>\n<div id=\"detailModal\" data-event-click=\"closeModal\" class=\"click\">\n    <div class=\"content\">\n        <h4>\n            <span class=\"id\"></span>\n            <a href=\"javascript:void(0);\" class=\"pull-right click\" data-event-click=\"closeModal\" title=\"关闭弹窗\">X</a>\n        </h4>\n        <p>\n            <b>Time：</b><span class=\"time\"></span>\n        </p>\n        <p>\n            <b>Info：</b><div class=\"info\"></div>\n        </p>\n        <p>\n            <b>uin：</b><span class=\"uin\"></span>\n        </p>\n        <p>\n            <b>ip：</b><span class=\"ip\"></span>\n        </p>\n        <p>\n            <b>agent：</b><div class=\"agent\"></div>\n        </p>\n        <p>\n            <b>Source：</b><div class=\"source\"></div>\n        </p>\n        <div class=\"click button\" data-event-click=\"closeModal\">关闭弹窗</button>\n    </div>\n</div>\n<%=include('./common/footer.html')(it)%>\n<script src=\"/static/entry.log.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "views/login.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/indexHeader.html')(it, opt)%>\n\n<main class=\"index-container\" style=\"padding-top:250px;\">\n\n    <form role=\"form\" action=\"login.html\" method=\"post\" style=\"width:500px;margin:0 auto;\">\n        <div class=\"form-group\">\n            <label for=\"username\">帐号</label>\n            <input type=\"text\" value=\"<%=it.name%>\" class=\"form-control\" id=\"username\" name=\"username\" placeholder=\"请输入帐号\">\n        </div>\n        <div class=\"form-group\">\n            <label for=\"password\">密码</label>\n            <input type=\"password\" class=\"form-control\" id=\"password\" name=\"password\" placeholder=\"请输入密码\">\n            <p class=\"help-block\" style=\"text-align: left ;position: relative\">\n                <span style=\"color:red;\"><%=it.message%>&nbsp;</span>\n                <% if(it.isUseOA) {%>\n                <span style=\"position: absolute;right:0;top:0\">使用 <a  href=\"user/oalogin\">OA进行登录</a></span>\n                <%}%>\n            </p>\n        </div>\n        <button type=\"submit\" class=\"btn btn-default\">登录</button>\n    </form>\n</main>\n\n<%=include('./common/footer.html')(it)%>\n<script>\n</script>\n</body>\n</html>"
  },
  {
    "path": "views/modifyUser.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/header.html')(it, opt)%>\n<main id=\"content\" role=\"main\">\n    <div class=\"wrap\">\n        <div class=\"formContainer\">\n\n            <form action=\"modifyUser.html\"  method=\"post\" class=\"form-horizontal form-wrap\" >\n                <h3 >\n                    修改密码\n                </h3>\n                <div class=\"form-group\">\n                    <label  class=\"col-sm-4 control-label\">旧密码</label>\n                    <div class=\"col-sm-6\">\n                        <input  type=\"password\" name=\"oldpassword\" class=\"  form-control\" placeholder=\"输入旧密码\"  >\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <label  class=\"col-sm-4 control-label\">新密码</label>\n                    <div class=\"col-sm-6\">\n                        <input type=\"password\" name=\"newpassword\"  class=\"  form-control\"  placeholder=\"输入新密码\"  >\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <label  class=\"col-sm-4 control-label\">新密码确认</label>\n                    <div class=\"col-sm-6\">\n                        <input type=\"password\" name=\"newpassword2\" class=\"form-control\"  placeholder=\"输入二次密码确认\"  >\n                        <p class=\"help-block\" style=\"text-align: left ;position: relative\">\n                            <span style=\"color:<%= (it.type == '1' ? 'green' : 'red' )%>;\">&nbsp;<%=it.message%></span>\n                        </p>\n                    </div>\n                </div>\n\n\n                <div class=\"form-group\">\n                    <div class=\"col-sm-offset-4 col-sm-6\">\n                        <button class=\"col-sm-3 btn btn-primary apply-submit\" >\n                            保存\n                        </button>\n                        <button type=\"reset\" class=\"col-sm-offset-1 col-sm-3 btn btn-default\" >重置</button>\n                    </div>\n                </div>\n            </form>\n        </div>\n\n\n\n    </div>\n</main>\n\n<%=include('./common/footer.html')(it)%>\n\n<% if (it.type == '1'   ){%>\n<script> setTimeout(function (){window.location.href=\"/login.html\"},3000)</script>\n<%}%>\n\n</body>\n\n</html>"
  },
  {
    "path": "views/monitor.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\">\n    <div class=\"wrap\">\n        <div class=\"main autoM\">\n            <div class=\"m-mian js_navinfo\" id=\"Mnavinfo-1\">\n                <div>\n                    <h3 class=\"m-title\">介绍</h3>\n                    <p class=\"ml-mod\">实时监控是接入了 http://monitor.server.com 系统，地址如下：</p>\n                    <p class=\"ml-mod\"> <a target=\"_blank\" href=\"http://monitor.server.com/link/graph/viewid:12368\">http://monitor.server.com/link/graph/viewid:12368</a></p>\n                    <div class=\"clear\"></div>\n                </div>\n            </div>\n            <div class=\"m-mian js_navinfo\" id=\"Mnavinfo-2\">\n                <div>\n                    <h2 class=\"m-title\">如何接入</h2>\n                    <div class=\"ml-mod\">首先 BJ-REPORT 升级到最新版本， V 1.1.1</div>\n                    <div class=\"ml-mod\">\n                        <p><b>1. 申请监控id </b></p>\n                        <p>点击 <a target=\"_blank\" href=\"http://monitor.server.com/link/configattr\">监控id申请</a></p>\n                        <p>将信息上报到badjs系统。同时监听error事件，上报脚本错误。</p>\n                        <p><img width=\"800px\" src=\"/static/img/monitor/1.png\"></p>\n                        <p><b>2. 绑定视图 </b></p>\n                        <p>点击 <a target=\"_blank\" href=\"http://monitor.server.com/link/graph/viewid:12368\">视图绑定</a></p>\n                        <p><img width=\"800px\" src=\"/static/img/monitor/2.png\"></p>\n                        <p><b>3.上报</b></p>\n                        <p>使用最新版本的BJ-REPORT ,会有一个 ext 属性，添加msid 为你的申请监控id 即可,如下图 </p>\n                        <p><img src=\"/static/img/monitor/3.png\"></p>\n                        <p><b>5.完成</b></p>\n                        <p>完成版定后，可以进行上报，大概2分钟后会看到数据</p>\n                        <p>&nbsp;</p>\n                        <p>&nbsp;</p>\n                        <p>&nbsp;</p>\n                        <p><b>6.机器绑定</b></p>\n                        <p>假如你申请的id需要绑定到你自己的视图上面，则需要对你的视图进行机器绑定</p>\n                        <p><img width=\"800px\"  src=\"/static/img/monitor/4.png\"></p>\n                    </div>\n                </div>\n            </div>\n\n\n        </div>\n</main>\n\n<%=include('./common/footer.html')(it)%>\n</body>\n\n</html>"
  },
  {
    "path": "views/offlinelog.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\" class=\"autoBottom\">\n    <div class=\"wrap\">\n        <!--<%=include('./common/leftSide.html')(it, opt)%>-->\n        <div class=\"mid-side\">\n            <div class=\"main-mid\">\n                <table class=\"main-table\">\n                    <thead>\n                        <tr>\n                            <th class=\"td-1 active\">#</th>\n                            <th class=\"td-2 active\">Time</th>\n                            <th class=\"td-3 active\">Information</th>\n                            <th class=\"td-4 active\">uin</th>\n                            <th class=\"td-5 active\">ip</th>\n                            <th class=\"td-6 active\">Agent</th>\n                            <th class=\"td-7 active\">\n                            <!--<div class=\"source_page_trigger\" title=\"点击显示/隐藏原始上报\"><input type=\"checkbox\" checked=\"checked\" id=\"show_source_page\"><label for=\"show_source_page\">Source</label></div>-->\n                                Source\n                            </th>\n                        </tr>\n                    </thead>\n                    <tbody id=\"log-table\">\n\n                    </tbody>\n                </table>\n            </div>\n        </div>\n        <div class=\"right-side\">\n\n            <!--<section>\n                <div class=\"setting-show\">\n                    <span class=\"item active td-2\" data-td=\"td-2\" data-event-click=\"showTd\">Time</span>\n                    <span class=\"item active td-3\" data-td=\"td-3\" data-event-click=\"showTd\">Information</span>\n                    <span class=\"item active td-4\" data-td=\"td-4\" data-event-click=\"showTd\">uin</span>\n                    <span class=\"item active td-5\" data-td=\"td-5\" data-event-click=\"showTd\">ip</span>\n                    <span class=\"item active td-6\" data-td=\"td-6\" data-event-click=\"showTd\">Agent</span>\n                    <span class=\"item active td-7\" data-td=\"td-7\" data-event-click=\"showTd\">Source</span>\n                </div>\n            </section>-->\n            <section>\n                <div class=\"log-select\">\n                    <!--  <input type=\"text\" class=\"head-input\" placeholder=\"选择业务\"/>\n                      <div class=\"head-btn\" data-event-click=\"searchBusiness\"><span class=\"glyphicon glyphicon-search\"></span></div>-->\n                    <select  class=\"form-control \" data-event-change=\"selectBusiness\" id=\"select-business\">\n                        <option value=\"-1\">-- 请选择项目 --</option>\n\n                        <%  for(var i = 0 ; i < it.items.length ;i ++){\n                            var itemOne = it.items[i];\n\n                        %>\n                        <option value=\"<%=itemOne.id%>\"> (id=<%=itemOne.id%>) <%=itemOne.name%></option>\n                        <%}%>\n                    </select>\n                </div>\n                <div class=\"clear\"></div>\n            </section>\n            <section>\n                <a href=\"javascript:;\" data-event-click=\"configOfflineMonitor\">设置离线日志自动拉取</a>\n                <div class=\"clear\"></div>\n            </section>\n            <section>\n                <div class=\"log-select\">\n                    <!--  <input type=\"text\" class=\"head-input\" placeholder=\"选择业务\"/>\n                      <div class=\"head-btn\" data-event-click=\"searchBusiness\"><span class=\"glyphicon glyphicon-search\"></span></div>-->\n                    <select disabled  class=\"form-control \" data-event-change=\"selectOfflineLogs\" id=\"select-offline-logs\">\n                        <option value=\"-1\">-- 选择日志 --</option>\n\n                    </select>\n                </div>\n                <div class=\"clear\"></div>\n            </section>\n\n            <section>\n                <p class=\"setting-title\">消息类型\n                <ul class=\"setting-msg offline-type\">\n                    <li class=\"msg-error\" data-event-click=\"errorTypeClick\">error</li>\n                    <li class=\"msg-log\" data-event-click=\"logTypeClick\">log</li>\n                    <li class=\"msg-debug\" data-event-click=\"debugTypeClick\">debug</li>\n                    <li class=\"msg-offline\" data-event-click=\"offlineTypeClick\">offline</li>\n                </ul>\n                <div class=\"clear\"></div>\n            </section>\n            <section>\n                <p class=\"setting-title\">包含关键词</p>\n                <div class=\"keyword-ctn\">\n                    <input type=\"text\" class=\"keyword-ipt\" id=\"keyword-ipt\" data-event-keyup=\"addKeyword\"/><button class=\"keyword-btn\" data-event-click=\"addKeyword\">添加</button><button class=\"keyword-btn\" data-event-click=\"removeKeywords\">清空</button>\n                    <div class=\"keyword-tag-ctn\" id=\"keyword-group\">\n                    </div>\n                </div>\n            </section>\n            <section>\n                <p class=\"setting-title\">排除关键词</p>\n                <div class=\"keyword-ctn\">\n                    <input type=\"text\" class=\"keyword-ipt\" id=\"debar-ipt\" data-event-keyup=\"addDebar\"/><button class=\"keyword-btn\" data-event-click=\"addDebar\">添加</button><button class=\"keyword-btn\" data-event-click=\"removeDebars\">清空</button>\n                    <div class=\"keyword-tag-ctn\" id=\"debar-group\">\n                    </div>\n                </div>\n            </section>\n            <section>\n                <div class=\"setting-search\" data-event-click=\"showLogs\">查看日志</div>\n                <div class=\"clear\"></div>\n            </section>\n\n        </div>\n    </div>\n</main>\n\n\n\n<%=include('./common/footer.html')(it)%>\n<script>\n    var systime = '<%=it.systime%>' - 0;\n    var currentTime = new Date - 0;\n    var diffTime = systime - currentTime;\n</script>\n<script src=\"/static/entry.offlinelog.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "views/projectTotal.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n\n<%=include('./common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\" class=\"autoBottom\">\n    <div class=\"wrap\">\n        <!--<%=include('./common/leftSide.html')(it, opt)%>-->\n        <div class=\"mid-side\">\n            <table id=\"chart-table\" class=\"table table-condensed\"></table>\n            <div id=\"chartsContainer\"  class=\"main-mid\">\n\n            </div>\n\n        </div>\n        <div class=\"right-side\">\n\n            <section>\n                <label class=\"setting-title\">统计项目：</label>\n                <select class=\"form-control \"  id=\"select-chartBusiness\">\n                    <option value=\"-1\">-- 全部项目 --</option>\n                    <%  for(var i = 0 ; i < it.items.length ;i ++){\n                    var itemOne = it.items[i];\n\n                    %>\n                    <option value=\"<%=itemOne.id%>\"> <%=itemOne.name%></option>\n                    <%}%>\n                </select>\n            </section>\n            <section>\n                <label class=\"setting-title\">时间范围：</label>\n                <select disabled  class=\"form-control\" id=\"select-timeScope\">\n                    <option value=\"1\">最近七天</option>\n                    <option value=\"2\">最近一个月</option>\n                </select>\n            </section>\n\n            <section>\n                <div class=\"setting-search\" id=\"showCharts\">图表统计</div>\n            </section>\n        </div>\n    </div>\n</main>\n<%=include('./common/footer.html')(it)%>\n<script src=\"/static/entry.projectTotal.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "views/realtimelog.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\" class=\"autoBottom\">\n    <div class=\"wrap\">\n        <!--<%=include('./common/leftSide.html')(it, opt)%>-->\n        <div class=\"mid-side\">\n            <div class=\"main-mid\">\n                <table class=\"main-table\">\n                    <thead>\n                        <tr>\n                            <th class=\"td-1 active\">#</th>\n                            <th class=\"td-2 active\">Time</th>\n                            <th class=\"td-3 active\">Information</th>\n                            <th class=\"td-4 active\">uin</th>\n                            <th class=\"td-5 active\">ip</th>\n                            <th class=\"td-6 active\">Agent</th>\n                            <th class=\"td-7 active\">\n                            <!--<div class=\"source_page_trigger\" title=\"点击显示/隐藏原始上报\"><input type=\"checkbox\" checked=\"checked\" id=\"show_source_page\"><label for=\"show_source_page\">Source</label></div>-->\n                                Source\n                            </th>\n                        </tr>\n                    </thead>\n                    <tbody id=\"log-table\">\n\n                    </tbody>\n                </table>\n            </div>\n        </div>\n        <div class=\"right-side\">\n            <section>\n                <div class=\"setting-show\">\n                    <span class=\"item active td-2\" data-td=\"td-2\" data-event-click=\"showTd\">Time</span>\n                    <span class=\"item active td-3\" data-td=\"td-3\" data-event-click=\"showTd\">Information</span>\n                    <span class=\"item active td-4\" data-td=\"td-4\" data-event-click=\"showTd\">uin</span>\n                    <span class=\"item active td-5\" data-td=\"td-5\" data-event-click=\"showTd\">ip</span>\n                    <span class=\"item active td-6\" data-td=\"td-6\" data-event-click=\"showTd\">Agent</span>\n                    <span class=\"item active td-7\" data-td=\"td-7\" data-event-click=\"showTd\">Source</span>\n                </div>\n            </section>\n            <section>\n                <div class=\"log-select\">\n                    <!--  <input type=\"text\" class=\"head-input\" placeholder=\"选择业务\"/>\n                      <div class=\"head-btn\" data-event-click=\"searchBusiness\"><span class=\"glyphicon glyphicon-search\"></span></div>-->\n                    <select class=\"form-control \" data-event-change=\"selectBusiness\" id=\"select-business\">\n                        <option value=\"-1\">-- 请选择项目 --</option>\n\n                        <%  for(var i = 0 ; i < it.items.length ;i ++){\n                            var itemOne = it.items[i];\n\n                        %>\n                        <option value=\"<%=itemOne.id%>\"> (id=<%=itemOne.id%>) <%=itemOne.name%></option>\n                        <%}%>\n                    </select>\n                </div>\n                <div class=\"clear\"></div>\n            </section>\n            <section>\n                <p class=\"setting-title\">消息类型\n                <ul class=\"setting-msg\">\n                    <li class=\"msg-error\" data-event-click=\"errorTypeClick\">error</li>\n                    <li class=\"msg-log\" data-event-click=\"logTypeClick\">log</li>\n                    <li class=\"msg-debug\" data-event-click=\"debugTypeClick\">debug</li>\n                </ul>\n                <div class=\"clear\"></div>\n            </section>\n            <section>\n                <p class=\"setting-title\">包含关键词</p>\n                <div class=\"keyword-ctn\">\n                    <input type=\"text\" class=\"keyword-ipt\" id=\"keyword-ipt\" data-event-keyup=\"addKeyword\"/><button class=\"keyword-btn\" data-event-click=\"addKeyword\">添加</button><button class=\"keyword-btn\" data-event-click=\"removeKeywords\">清空</button>\n                    <div class=\"keyword-tag-ctn\" id=\"keyword-group\">\n                    </div>\n                </div>\n            </section>\n            <section>\n                <p class=\"setting-title\">排除关键词</p>\n                <div class=\"keyword-ctn\">\n                    <input type=\"text\" class=\"keyword-ipt\" id=\"debar-ipt\" data-event-keyup=\"addDebar\"/><button class=\"keyword-btn\" data-event-click=\"addDebar\">添加</button><button class=\"keyword-btn\" data-event-click=\"removeDebars\">清空</button>\n                    <div class=\"keyword-tag-ctn\" id=\"debar-group\">\n                    </div>\n                </div>\n            </section>\n            <section>\n                <div class=\"setting-search\" data-event-click=\"showLogs\">开始监听</div>\n            </section>\n        </div>\n    </div>\n</main>\n<div id=\"detailModal\" data-event-click=\"closeModal\" class=\"click\">\n    <div class=\"content\">\n        <h4>\n            <span class=\"id\"></span>\n            <a href=\"javascript:void(0);\" class=\"pull-right click\" data-event-click=\"closeModal\" title=\"关闭弹窗\">X</a>\n        </h4>\n        <p>\n            <b>Time：</b><span class=\"time\"></span>\n        </p>\n        <p>\n            <b>Info：</b><div class=\"info\"></div>\n        </p>\n        <p>\n            <b>uin：</b><span class=\"uin\"></span>\n        </p>\n        <p>\n            <b>ip：</b><span class=\"ip\"></span>\n        </p>\n        <p>\n            <b>agent：</b><div class=\"agent\"></div>\n        </p>\n        <p>\n            <b>Source：</b><div class=\"source\"></div>\n        </p>\n        <div class=\"click button\" data-event-click=\"closeModal\">关闭弹窗</button>\n    </div>\n</div>\n<%=include('./common/footer.html')(it)%>\n<script>\n    var systime = '<%=it.systime%>' - 0;\n    var currentTime = new Date - 0;\n    var diffTime = systime - currentTime;\n</script>\n<script src=\"/static/entry.realtime.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "views/register.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('./common/indexHeader.html')(it, opt)%>\n\n<main class=\"index-container\" style=\"padding-top:250px;\">\n\n    <form role=\"form\" action=\"register.html\" method=\"post\" style=\"width:500px;margin:0 auto;\">\n        <div class=\"form-group\">\n            <label for=\"username\">帐号</label>\n            <input type=\"text\" class=\"form-control\" value=\"<%=it.name%>\" id=\"username\" name=\"username\" placeholder=\"请输入帐号\">\n        </div>\n        <div class=\"form-group\">\n            <label for=\"password\">密码</label>\n            <input type=\"password\" class=\"form-control\" id=\"password\" name=\"password\" placeholder=\"请输入密码\">\n        </div>\n        <div class=\"form-group\">\n            <label for=\"password\">确认密码</label>\n            <input type=\"password\" class=\"form-control\" id=\"password2\" name=\"password2\" placeholder=\"请输入确认密码\">\n            <p class=\"help-block\" style=\"text-align: left ;position: relative\">\n                <span style=\"color:<%= (it.type == '1' ? 'green' : 'red' )%>;\">&nbsp;<%=it.message%></span>\n                <% if(it.isUseOA) {%>\n                <span style=\"position: absolute;right:0;top:0\">使用 <a  href=\"user/oalogin\">OA进行登录</a></span>\n                <%}%>\n            </p>\n        </div>\n\n        <div class=\"\">\n            <button type=\"submit\" class=\"btn btn-primary\">注册</button>\n           <button type=\"reset\" style=\"margin-left:20px;\" class=\" btn btn-default\">重置</button>\n        </div>\n\n    </form>\n</main>\n\n<%=include('./common/footer.html')(it)%>\n<script>\n</script>\n</body>\n</html>"
  },
  {
    "path": "views/statistics.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('/common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\" class=\"autoBottom\">\n    <div class=\"wrap\">\n        <!--<%=include('/common/leftSide.html')(it, opt)%>-->\n            <div class=\"right-side\"  >\n                <section>\n                    <label class=\"setting-title\">统计项目：</label>\n                    <select class=\"form-control \" data-event-change=\"selectBusiness\" id=\"select-business\"   >\n                        <option value=\"-1\">-- 请选择项目 --</option>\n                        <%  for(var i = 0 ; i < it.items.length ;i ++){\n                        var itemOne = it.items[i];\n\n                        %>\n                        <option value=\"<%=itemOne.id%>\"> (id=<%=itemOne.id%>) <%=itemOne.name%></option>\n                        <%}%>\n                    </select>\n                </section>\n                <section>\n                    <label class=\"setting-title\">统计时间：</label>\n                    <input type=\"text\" value=\"\" readonly class=\"datetimepicker\" id=\"startTime\"/>\n                </section>\n                <section>\n                    <div class=\"setting-search\" id=\"showLogs\">显示统计</div>\n                </section>\n            </div>\n            <div class=\"mid-side\">\n                <div class=\"main-mid\">\n                    <h4>TOP 50 , 错误PV : <span id=\"error-count\">0</span></h4>\n                    <table class=\"main-table active-table\">\n                        <thead>\n                        <tr>\n                            <th class=\"td-row-1\" style=\"width:40px\">#</th>\n                            <th class=\"td-row-2\" style=\"width:120px\">出现次数</th>\n                            <th class=\"td-row-3\" style=\"\">错误内容</th>\n                        </tr>\n                        </thead>\n                        <tbody id=\"table-content\">\n\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n    </div>\n</main>\n<%=include('./common/footer.html')(it)%>\n<script src=\"/static/entry.statistics.js\"></script>\n</body>\n\n</html>\n"
  },
  {
    "path": "views/userManage.html",
    "content": "<%=include('./common/commonLinks.html')(it, opt)%>\n<%=include('/common/header.html')(it, opt)%>\n\n<main id=\"content\" role=\"main\">\n    <div class=\"wrap\">\n        <!--<%=include('/common/leftSide.html')(it, opt)%>-->\n        <div class=\"contentPanel\">\n            <div class=\"searchPanel clearfix\">\n               <!-- <label class=\"search-info\">搜索信息</label>\n                <input type=\"text\" class=\"search-userText\" placeholder=\"姓名（此功能暂时没有用)\">-->\n                <label class=\"search-info\">当前项目</label>\n                <select class=\"search-applyId\">\n                    <option value=\"-1\">全部</option>\n                    <%\n                        var items = it.items;\n                        var items_length = items.length;\n                        items.sort(function(x, y) {\n                            return x.id - y.id;\n                        });\n                        for(var i = 0; i < items_length; i++) {\n                            var itemOne = items[i];\n                    %>\n                    <option value=\"<%=itemOne.id%>\">(<%=itemOne.id%>) <%=itemOne.name%></option>\n                    <%}%>\n                </select>\n                <label class=\"search-info\">用户类型</label>\n                <select class=\"search-userType\">\n                        <option value=\"-1\">全部</option>\n                        <option value=\"1\">管理员</option>\n                        <option value=\"0\">普通用户</option>\n                </select>\n                <button type=\"button\" class=\"btn btn-default searchBtn\">搜索</button>\n\n\n            </div>\n\n            <div class=\"userTable ListTable\">\n                <div class=\"infoPanel\">\n                    <span class=\"info\">当前项目：</span>\n                    <span class=\"info projectName\">全部</span>\n                    <div class=\"operationPanel\">\n                        <input class=\"add-userName\" type=\"text\" placeholder=\"增加的用户名\" disabled/>\n                        <button id=\"add-btn\" class=\"btn-default modifyBtn\" disabled>\n                            增加成员\n                        </button>\n                    </div>\n\n                </div>\n                <div class=\"tableTitle\">用户表</div>\n                <div class=\"tableWrapper table-responsive\">\n                    <table class=\"dataTable table\">\n                        <thead>\n                        <tr>\n                            <th>#</th>\n                            <th>用户登录名</th>\n                            <th>用户中文名</th>\n                            <th>所属项目名称</th>\n                            <th>用户项目权限</th>\n                            <th>操作</th>\n                        </tr>\n                        </thead>\n                        <tbody id=\"userList\">\n\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n        </div>\n\n    </div>\n</main>\n\n<%=include('/common/footer.html')(it)%>\n<script src=\"/static/entry.userManage.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "webpack.config.js",
    "content": "var webpack = require(\"webpack\");\nvar glob = require(\"glob\")\n\nvar path = require(\"path\");\n\n\nvar staticPath = path.join(__dirname , \"static\");\n\n\nvar array  = glob.sync( \"static/**/load.*.js\") ;\n\nvar entryMap = {};\nfor(var i = 0 ; i <array.length ; i ++){\nvar filePath = array[i];\nvar entryName = filePath.match(/load\\.(.+)\\.js/i , filePath )[1];\n    entryMap[\"entry.\" + entryName + \"\"] = filePath.replace(\"static\" , \".\");\n}\n\nentryMap[\"common\"] =  [\n    \"underscore\" ,\n    \"./lib/underscore/underscore.ext\" ,\n    \"jquery\",\n    \"expose?moment!moment\",\n    \"./lib/bootstrap/bootstrap\",\n    \"./lib/bootstrap/bootstrap-datetimepicker.min\"\n]\n\nmodule.exports = {\n    context: staticPath,\n    entry: entryMap,\n\n    output: {\n        path:  path.join(__dirname , \"static\"),\n        filename: './[name].js'\n    },\n    resolve: {\n        modulesDirectories : [   'node_modules' ,  path.join( __dirname, \"static/common\" ) ,  path.join( __dirname, \"static/lib\" ) , staticPath]\n    },\n    module : {\n        loaders: [\n            { test: /\\.css/, loader: \"css!style\" },\n            { test: /\\.ejs/, loader: \"ejs\" },\n        ]\n    },\n\n    plugins: [\n        new webpack.optimize.CommonsChunkPlugin( 'common' , 'common.js' ) ,\n        new webpack.ProvidePlugin({\n            $: 'jquery',\n            jQuery: 'jquery',\n            'window.jQuery': 'jquery',\n            _: 'underscore'\n        })\n    ]\n\n};"
  },
  {
    "path": "workflow/ExpressInitWorker.js",
    "content": "var express = require('express')\n    , tpl = require('express-micro-tpl')\n    , crypto = require('crypto')\n    , session = require('express-session')\n    , bodyParser = require('body-parser')\n    , cookieParser = require('cookie-parser')\n    , serveStatic = require('serve-static')\n    , app = express()\n    , router = require('../controller/router')\n    , orm = require('orm');\n\n\nvar path = require(\"path\");\n\nvar log4js = require('log4js'),\n    logger = log4js.getLogger();\n\n\n\napp.set('views',path.join(__dirname , \"..\" , \"views\"));\napp.set('view engine', 'html');\napp.engine('html', tpl.__express);\napp.use(session({ secret: 'keyboard cat', cookie: { maxAge: 120 * 60 * 1000 } }));\napp.use(bodyParser.urlencoded({ extended: false }));\napp.use(cookieParser());\napp.use('/static' , serveStatic(path.join(__dirname , \"..\" , \"static\")));\n\n\nvar msqlUrl = global.pjconfig.mysql.url;\n\n\nlogger.info('connect mysql: ' + msqlUrl);\n\n\napp.use(orm.express(msqlUrl, {\n    define: function (db, models, next) {\n\n    db.use(require(\"orm-transaction\"));\n    models.userDao = require('../dao/UserDao')(db);\n    models.applyDao = require('../dao/ApplyDao')(db);\n    models.approveDao = require('../dao/ApproveDao')(db);\n    models.userApplyDao = require('../dao/UserApplyDao')(db);\n    models.statisticsDao = require('../dao/StatisticsDao')(db);\n    models.db = db;\n\n    global.models = models;\n    logger.info('mysql connected');\n    next();\n}}));\n\n\nif(global.pjconfig.oos && global.pjconfig.oos.module){\n    app.use(\"/user\" ,require(\"../oos/\" + global.pjconfig.oos.module));\n}\n\n\napp.use(\"/user\" , function (req , res , next){\n    if(!req.session.user){\n        res.redirect(req.protocol + \"://\" + req.get('host') + '/login.html');\n        return ;\n    } else {\n        next();\n    }\n});\n\napp.use(function (err, req, res, next) {\n    res.send(err.stack);\n});\n\n\nrouter(app);\n\n\n\nvar port = parseInt(GLOBAL.pjconfig.port, 10) || 80;\nmodule.exports = function (){\n    app.listen(port);\n\n    logger.info('start badjs-web , listen ' + port + ' ...');\n}\n"
  },
  {
    "path": "workflow/InitWorker.js",
    "content": "var  log4js = require('log4js'),\n    logger = log4js.getLogger();\n\nvar path = require(\"path\");\n\n\n\nvar argv = process.argv.slice();\nif(argv.indexOf('--debug') >= 0){\n    logger.setLevel('DEBUG');\n    GLOBAL.DEBUG = true;\n    logger.info('running in debug');\n\n}else {\n    logger.setLevel('INFO');\n}\n\nif(argv.indexOf('--project') >= 0){\n    GLOBAL.pjconfig =  require(path.join(__dirname , \"..\" , '/project.debug.json'));\n}else {\n    GLOBAL.pjconfig = require(path.join(__dirname , \"..\" , 'project.json'));\n}\n\n\nmodule.exports = function (){\n\n}\n\n"
  },
  {
    "path": "workflow/ServiceInitWorker.js",
    "content": "var log4js = require('log4js'),\n    logger = log4js.getLogger();\n\n\n\n\n\n\nmodule.exports = function (){\n    setTimeout(function (){\n        var service = require(\"../service/StatisticsService\");\n        logger.info('start Statistics  ...');\n        new service().startMonitor();\n\n\n        var LogService = require(\"../service/LogService\");\n        var logService = new LogService();\n        var pushProject = function (){\n            logService.pushProject(function (err){\n                if(err){\n                    logger.warn('push project on system start and error ' + err);\n                }else {\n                    logger.info('push project on system start');\n                }\n\n            });\n        }\n\n        pushProject();\n\n\n         require(\"../service/OfflineLogService\")();\n\n\n        // 邮件报表\n        var EmailService = require(\"../service/EmailService\");\n        logger.info('start email report ...');\n        new EmailService().start();\n    },3000)\n}\n"
  },
  {
    "path": "workflow.config.json",
    "content": "{\n  \"path\" : \"./workflow\",\n  \"workflow\": [\n    \"InitWorker\",\n    \"ExpressInitWorker\",\n    \"ServiceInitWorker\"\n  ]\n}"
  }
]