[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nindent_style = tab\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": ".gitattributes",
    "content": "# Automatically normalize line endings for all text-based files\n* text=auto\n"
  },
  {
    "path": ".gitignore",
    "content": "# JSON version of coverage report\ncoverage/coverage.json\n\n# Installed npm modules\nnode_modules\n\n# Folder view configuration files\n.DS_Store\nDesktop.ini\n\n# Thumbnail cache files\n._*\nThumbs.db\n\n# Files that might appear on external disks\n.Spotlight-V100\n.Trashes\n"
  },
  {
    "path": ".npmignore",
    "content": ".*\n*.md\ncoverage\ntests\nbower.json\ncomponent.json\nGruntfile.js\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\nnode_js:\n  - \"0.10\"\n  - \"0.12\"\n  - \"4\"\n  - \"5\"\n  - \"6\"\nbefore_script:\n  - \"npm install -g grunt-cli\"\n  # Narwhal uses a hardcoded path to openjdk v6, so use that version\n  - \"sudo apt-get update -qq\"\n  - \"sudo apt-get install -qq openjdk-6-jre\"\n  - \"PACKAGE=rhino1.7.6; wget https://github.com/mozilla/rhino/releases/download/Rhino1_7_6_RELEASE/$PACKAGE.zip && sudo unzip $PACKAGE -d /opt/ && rm $PACKAGE.zip\"\n  - \"PACKAGE=rhino1.7.6; echo -e '#!/bin/sh\\\\njava -jar /opt/'$PACKAGE'/js.jar $@' | sudo tee /usr/local/bin/rhino && sudo chmod +x /usr/local/bin/rhino\"\n  - \"PACKAGE=ringojs-0.11; wget https://github.com/ringo/ringojs/releases/download/v0.11.0/$PACKAGE.zip && sudo unzip $PACKAGE -d /opt/ && rm $PACKAGE.zip\"\n  - \"PACKAGE=ringojs-0.11; sudo ln -s /opt/$PACKAGE/bin/ringo /usr/local/bin/ringo && sudo chmod +x /usr/local/bin/ringo\"\n  - \"PACKAGE=v0.3.2; wget https://github.com/280north/narwhal/archive/$PACKAGE.zip && sudo unzip $PACKAGE -d /opt/ && rm $PACKAGE.zip\"\n  - \"PACKAGE=narwhal-0.3.2; sudo ln -s /opt/$PACKAGE/bin/narwhal /usr/local/bin/narwhal && sudo chmod +x /usr/local/bin/narwhal\"\n  # If the enviroment stores rt.jar in a different directory, find it and symlink the directory\n  - \"PREFIX=/usr/lib/jvm; if [ ! -d $PREFIX/java-6-openjdk ]; then for d in $PREFIX/java-6-openjdk-*; do if [ -e $d/jre/lib/rt.jar ]; then sudo ln -s $d $PREFIX/java-6-openjdk; break; fi; done; fi\"\nscript:\n  - \"grunt ci\"\n"
  },
  {
    "path": "Gruntfile.js",
    "content": "module.exports = function(grunt) {\n\n\tgrunt.initConfig({\n\t\t'shell': {\n\t\t\t'options': {\n\t\t\t\t'stdout': true,\n\t\t\t\t'stderr': true,\n\t\t\t\t'failOnError': true\n\t\t\t},\n\t\t\t'cover': {\n\t\t\t\t'command': 'istanbul cover --report \"html\" --verbose --dir \"coverage\" \"tests/tests.js\"'\n\t\t\t},\n\t\t\t'test-narwhal': {\n\t\t\t\t'command': 'echo \"Testing in Narwhal...\"; export NARWHAL_OPTIMIZATION=-1; narwhal \"tests/tests.js\"'\n\t\t\t},\n\t\t\t'test-phantomjs': {\n\t\t\t\t'command': 'echo \"Testing in PhantomJS...\"; phantomjs \"tests/tests.js\"'\n\t\t\t},\n\t\t\t'test-rhino': {\n\t\t\t\t'command': 'echo \"Testing in Rhino...\"; rhino -opt -1 \"tests.js\"',\n\t\t\t\t'options': {\n\t\t\t\t\t'execOptions': {\n\t\t\t\t\t\t'cwd': 'tests'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t'test-ringo': {\n\t\t\t\t'command': 'echo \"Testing in Ringo...\"; ringo -o -1 \"tests/tests.js\"'\n\t\t\t},\n\t\t\t'test-node': {\n\t\t\t\t'command': 'echo \"Testing in Node...\"; node \"tests/tests.js\"'\n\t\t\t},\n\t\t\t'test-browser': {\n\t\t\t\t'command': 'echo \"Testing in a browser...\"; open \"tests/index.html\"'\n\t\t\t}\n\t\t}\n\t});\n\n\tgrunt.loadNpmTasks('grunt-shell');\n\n\tgrunt.registerTask('cover', 'shell:cover');\n\tgrunt.registerTask('ci', [\n\t\t'shell:test-narwhal',\n\t\t'shell:test-phantomjs',\n\t\t'shell:test-rhino',\n\t\t'shell:test-ringo',\n\t\t'shell:test-node',\n\t]);\n\tgrunt.registerTask('test', [\n\t\t'ci',\n\t\t'shell:test-browser'\n\t]);\n\n\tgrunt.registerTask('default', [\n\t\t'test',\n\t\t'cover'\n\t]);\n\n};\n"
  },
  {
    "path": "LICENSE-MIT.txt",
    "content": "Copyright Mathias Bynens <https://mathiasbynens.be/>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# luamin, a Lua minifier written in JavaScript\n\n[![Build status](https://travis-ci.org/mathiasbynens/luamin.svg?branch=master)](https://travis-ci.org/mathiasbynens/luamin)\n\nluamin uses the excellent [luaparse](https://oxyc.github.io/luaparse/) library to parse Lua code into an Abstract Syntax Tree. Based on that AST, luamin then generates a (hopefully) more compact yet semantically equivalent Lua program. [Here’s an online demo.](https://mothereff.in/lua-minifier)\n\nluamin was inspired by the [LuaMinify](https://github.com/stravant/LuaMinify) and [Esmangle](https://github.com/Constellation/esmangle) projects.\n\nFeel free to fork if you see possible improvements!\n\n## Installation and usage\n\nVia [npm](https://www.npmjs.com/):\n\n```bash\nnpm install luamin\n```\n\nVia [Bower](http://bower.io/):\n\n```bash\nbower install luamin\n```\n\nVia [Component](https://github.com/component/component):\n\n```bash\ncomponent install mathiasbynens/luamin\n```\n\nIn a browser:\n\n```html\n<script src=\"luamin.js\"></script>\n```\n\nIn [Narwhal](http://narwhaljs.org/), [Node.js](https://nodejs.org/), and [RingoJS](http://ringojs.org/):\n\n```js\nvar luamin = require('luamin');\n```\n\nIn [Rhino](http://www.mozilla.org/rhino/):\n\n```js\nload('luamin.js');\n```\n\nUsing an AMD loader like [RequireJS](http://requirejs.org/):\n\n```js\nrequire(\n  {\n    'paths': {\n      'luamin': 'path/to/luamin'\n    }\n  },\n  ['luamin'],\n  function(luamin) {\n    console.log(luamin);\n  }\n);\n```\n\nUsage example:\n\n```js\nvar luaCode = 'a = ((1 + 2) - 3) * (4 / (5 ^ 6)) -- foo';\nluamin.minify(luaCode); // 'a=(1+2-3)*4/5^6'\n\n// `minify` also accepts luaparse-compatible ASTs as its argument:\nvar ast = luaparse.parse(luaCode, { 'scope': true });\nluamin.minify(ast); // 'a=(1+2-3)*4/5^6'\n```\n\n### Using the `luamin` binary\n\nTo use the `luamin` binary in your shell, simply install luamin globally using npm:\n\n```bash\nnpm install -g luamin\n```\n\nAfter that you will be able to minify Lua scripts from the command line:\n\n```bash\n$ luamin -c 'a = ((1 + 2) - 3) * (4 / (5 ^ 6))'\na=(1+2-3)*4/5^6\n$ luamin -f foo.lua\na=(1+2-3)*4/5^6\n```\n\nSee `luamin --help` for the full list of options.\n\n## Support\n\nluamin has been tested in at least Chrome 25-48, Firefox 3-44, Safari 4-9, Opera 10-35, IE 6-11, Edge, Node.js v0.10.0–v5, Narwhal 0.3.2, RingoJS 0.8-0.11, PhantomJS 1.9.0, and Rhino 1.7.6.\n\n## Unit tests & code coverage\n\nAfter cloning this repository, run `npm install` to install the dependencies needed for luamin development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`.\n\nOnce that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, and web browsers as well, use `grunt test`.\n\nTo generate [the code coverage report](http://rawgithub.com/mathiasbynens/luamin/master/coverage/luamin/luamin.js.html), use `grunt cover`.\n\n## Author\n\n| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias \"Follow @mathias on Twitter\") |\n|---|\n| [Mathias Bynens](https://mathiasbynens.be/) |\n\n## License\n\nluamin is available under the [MIT](https://mths.be/mit) license.\n"
  },
  {
    "path": "bin/luamin",
    "content": "#!/usr/bin/env node\n(function() {\n\n\tvar fs = require('fs');\n\tvar luamin = require('../luamin.js');\n\tvar minify = luamin.minify;\n\tvar snippets = process.argv.splice(2);\n\tvar option = snippets.shift();\n\tvar isFile = false;\n\tvar isAST = false;\n\tvar stdin = process.stdin;\n\tvar data;\n\tvar log = console.log;\n\tvar main = function() {\n\n\t\tif (/^(?:-h|--help|undefined)$/.test(option)) {\n\t\t\tlog('luamin v%s - https://mths.be/luamin', luamin.version);\n\t\t\tlog([\n\t\t\t\t'\\nUsage:\\n',\n\t\t\t\t'\\tluamin [-c | --code] [snippet ...]',\n\t\t\t\t'\\tluamin [-f | --file] [file ...]',\n\t\t\t\t'\\tluamin [-a | --ast] [AST ...]',\n\t\t\t\t'\\tluamin [-v | --version]',\n\t\t\t\t'\\tluamin [-h | --help]',\n\t\t\t\t'\\nExamples:\\n',\n\t\t\t\t'\\tluamin -c \\'a = ((1 + 2) - 3) * (4 / (5 ^ 6))\\'',\n\t\t\t\t'\\tluamin -f foo.lua',\n\t\t\t\t'\\techo \\'a = \"foo\" .. \"bar\"\\' | luamin -c',\n\t\t\t\t'\\tluaparse --scope \\'a = 42\\' | luamin -a'\n\t\t\t].join('\\n'));\n\t\t\treturn process.exit(1);\n\t\t}\n\n\t\tif (/^(?:-v|--version)$/.test(option)) {\n\t\t\tlog('v%s', luamin.version);\n\t\t\treturn process.exit(1);\n\t\t}\n\n\t\tif (/^(?:-f|--file)$/.test(option)) {\n\t\t\tisFile = true;\n\t\t} else if (/^(?:-a|--ast)$/.test(option)) {\n\t\t\tisAST = true;\n\t\t} else if (!/^(?:-c|--code)$/.test(option)) {\n\t\t\tlog('Unrecognized option `%s`.', option);\n\t\t\tlog('Try `luamin --help` for more information.');\n\t\t\treturn process.exit(1);\n\t\t}\n\n\t\tif (!snippets.length) {\n\t\t\tlog('Error: option `%s` requires an argument.', option);\n\t\t\tlog('Try `luamin --help` for more information.');\n\t\t\treturn process.exit(1);\n\t\t}\n\n\t\tsnippets.forEach(function(snippet) {\n\t\t\tvar result;\n\t\t\tif (isFile) {\n\t\t\t\ttry {\n\t\t\t\t\tsnippet = fs.readFileSync(snippet, 'utf8');\n\t\t\t\t} catch(error) {\n\t\t\t\t\tlog('Error: no such file. (`%s`)', snippet);\n\t\t\t\t\treturn process.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (isAST) {\n\t\t\t\t\tsnippet = JSON.parse(snippet);\n\t\t\t\t}\n\t\t\t\tresult = minify(snippet);\n\t\t\t\tlog(result);\n\t\t\t} catch(error) {\n\t\t\t\tlog(error.message + '\\n');\n\t\t\t\tif (isAST) {\n\t\t\t\t\tlog('Error: failed to minify. Make sure the AST contains a ' +\n\t\t\t\t\t\t'`globals` property and is');\n\t\t\t\t\tlog('fully compatible with luaparse.');\n\t\t\t\t} else { // it’s a snippet or an AST\n\t\t\t\t\tlog('Error: failed to minify. Make sure the Lua code is valid.');\n\t\t\t\t}\n\t\t\t\tlog('If you think this is a bug in luamin, please report it:');\n\t\t\t\tlog('https://github.com/mathiasbynens/luamin/issues/new');\n\t\t\t\tlog(\n\t\t\t\t\t'\\nStack trace using luamin@%s and luaparse@%s:\\n',\n\t\t\t\t\tluamin.version,\n\t\t\t\t\trequire('luaparse').version\n\t\t\t\t);\n\t\t\t\tlog(error.stack);\n\t\t\t\treturn process.exit(1);\n\t\t\t}\n\t\t});\n\t\t// Return with exit status 0 outside of the `forEach` loop, in case\n\t\t// multiple snippets or files were passed in.\n\t\treturn process.exit(0);\n\n\t};\n\n\tif (stdin.isTTY) {\n\t\t// handle shell arguments\n\t\tmain();\n\t} else {\n\t\t// handle pipe\n\t\tdata = '';\n\t\tstdin.on('data', function(chunk) {\n\t\t\tdata += chunk;\n\t\t});\n\t\tstdin.on('end', function() {\n\t\t\tif (data.trim().length != 0) {\n\t\t\t\tsnippets.unshift(data.trim());\n\t\t\t}\n\t\t\tmain();\n\t\t});\n\t\tstdin.resume();\n\t}\n\n}());\n"
  },
  {
    "path": "bower.json",
    "content": "{\n\t\"name\": \"luamin\",\n\t\"version\": \"1.0.4\",\n\t\"main\": \"luamin.js\",\n\t\"dependencies\": {\n\t\t\"luaparse\": \"~0.2.1\"\n\t},\n\t\"ignore\": [\n\t\t\"bin\",\n\t\t\"coverage\",\n\t\t\"man\",\n\t\t\"tests\",\n\t\t\".*\",\n\t\t\"component.json\",\n\t\t\"Gruntfile.js\",\n\t\t\"node_modules\",\n\t\t\"package.json\"\n\t]\n}\n"
  },
  {
    "path": "component.json",
    "content": "{\n\t\"name\": \"luamin\",\n\t\"version\": \"1.0.4\",\n\t\"description\": \"A Lua minifier written in JavaScript\",\n\t\"repo\": \"mathiasbynens/luamin\",\n\t\"license\": \"MIT/GPL\",\n\t\"scripts\": [\n\t\t\"luamin.js\"\n\t],\n\t\"dependencies\": {\n\t\t\"oxyc/luaparse\": \"0.2.1\"\n\t},\n\t\"keywords\": [\n\t\t\"lua\",\n\t\t\"minify\",\n\t\t\"minifier\"\n\t]\n}\n"
  },
  {
    "path": "coverage/base.css",
    "content": "body, html {\n  margin:0; padding: 0;\n  height: 100%;\n}\nbody {\n    font-family: Helvetica Neue, Helvetica, Arial;\n    font-size: 14px;\n    color:#333;\n}\n.small { font-size: 12px;; }\n*, *:after, *:before {\n  -webkit-box-sizing:border-box;\n     -moz-box-sizing:border-box;\n          box-sizing:border-box;\n  }\nh1 { font-size: 20px; margin: 0;}\nh2 { font-size: 14px; }\npre {\n    font: 12px/1.4 Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n    margin: 0;\n    padding: 0;\n    -moz-tab-size: 2;\n    -o-tab-size:  2;\n    tab-size: 2;\n}\na { color:#0074D9; text-decoration:none; }\na:hover { text-decoration:underline; }\n.strong { font-weight: bold; }\n.space-top1 { padding: 10px 0 0 0; }\n.pad2y { padding: 20px 0; }\n.pad1y { padding: 10px 0; }\n.pad2x { padding: 0 20px; }\n.pad2 { padding: 20px; }\n.pad1 { padding: 10px; }\n.space-left2 { padding-left:55px; }\n.space-right2 { padding-right:20px; }\n.center { text-align:center; }\n.clearfix { display:block; }\n.clearfix:after {\n  content:'';\n  display:block;\n  height:0;\n  clear:both;\n  visibility:hidden;\n  }\n.fl { float: left; }\n@media only screen and (max-width:640px) {\n  .col3 { width:100%; max-width:100%; }\n  .hide-mobile { display:none!important; }\n}\n\n.quiet {\n  color: #7f7f7f;\n  color: rgba(0,0,0,0.5);\n}\n.quiet a { opacity: 0.7; }\n\n.fraction {\n  font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 10px;\n  color: #555;\n  background: #E8E8E8;\n  padding: 4px 5px;\n  border-radius: 3px;\n  vertical-align: middle;\n}\n\ndiv.path a:link, div.path a:visited { color: #333; }\ntable.coverage {\n  border-collapse: collapse;\n  margin: 10px 0 0 0;\n  padding: 0;\n}\n\ntable.coverage td {\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\ntable.coverage td.line-count {\n    text-align: right;\n    padding: 0 5px 0 20px;\n}\ntable.coverage td.line-coverage {\n    text-align: right;\n    padding-right: 10px;\n    min-width:20px;\n}\n\ntable.coverage td span.cline-any {\n    display: inline-block;\n    padding: 0 5px;\n    width: 100%;\n}\n.missing-if-branch {\n    display: inline-block;\n    margin-right: 5px;\n    border-radius: 3px;\n    position: relative;\n    padding: 0 4px;\n    background: #333;\n    color: yellow;\n}\n\n.skip-if-branch {\n    display: none;\n    margin-right: 10px;\n    position: relative;\n    padding: 0 4px;\n    background: #ccc;\n    color: white;\n}\n.missing-if-branch .typ, .skip-if-branch .typ {\n    color: inherit !important;\n}\n.coverage-summary {\n  border-collapse: collapse;\n  width: 100%;\n}\n.coverage-summary tr { border-bottom: 1px solid #bbb; }\n.keyline-all { border: 1px solid #ddd; }\n.coverage-summary td, .coverage-summary th { padding: 10px; }\n.coverage-summary tbody { border: 1px solid #bbb; }\n.coverage-summary td { border-right: 1px solid #bbb; }\n.coverage-summary td:last-child { border-right: none; }\n.coverage-summary th {\n  text-align: left;\n  font-weight: normal;\n  white-space: nowrap;\n}\n.coverage-summary th.file { border-right: none !important; }\n.coverage-summary th.pct { }\n.coverage-summary th.pic,\n.coverage-summary th.abs,\n.coverage-summary td.pct,\n.coverage-summary td.abs { text-align: right; }\n.coverage-summary td.file { white-space: nowrap;  }\n.coverage-summary td.pic { min-width: 120px !important;  }\n.coverage-summary tfoot td { }\n\n.coverage-summary .sorter {\n    height: 10px;\n    width: 7px;\n    display: inline-block;\n    margin-left: 0.5em;\n    background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;\n}\n.coverage-summary .sorted .sorter {\n    background-position: 0 -20px;\n}\n.coverage-summary .sorted-desc .sorter {\n    background-position: 0 -10px;\n}\n.status-line {  height: 10px; }\n/* dark red */\n.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }\n.low .chart { border:1px solid #C21F39 }\n/* medium red */\n.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }\n/* light red */\n.low, .cline-no { background:#FCE1E5 }\n/* light green */\n.high, .cline-yes { background:rgb(230,245,208) }\n/* medium green */\n.cstat-yes { background:rgb(161,215,106) }\n/* dark green */\n.status-line.high, .high .cover-fill { background:rgb(77,146,33) }\n.high .chart { border:1px solid rgb(77,146,33) }\n\n\n.medium .chart { border:1px solid #666; }\n.medium .cover-fill { background: #666; }\n\n.cbranch-no { background:  yellow !important; color: #111; }\n\n.cstat-skip { background: #ddd; color: #111; }\n.fstat-skip { background: #ddd; color: #111 !important; }\n.cbranch-skip { background: #ddd !important; color: #111; }\n\nspan.cline-neutral { background: #eaeaea; }\n.medium { background: #eaeaea; }\n\n.cover-fill, .cover-empty {\n  display:inline-block;\n  height: 12px;\n}\n.chart {\n  line-height: 0;\n}\n.cover-empty {\n    background: white;\n}\n.cover-full {\n    border-right: none !important;\n}\npre.prettyprint {\n    border: none !important;\n    padding: 0 !important;\n    margin: 0 !important;\n}\n.com { color: #999 !important; }\n.ignore-none { color: #999; font-weight: normal; }\n\n.wrapper {\n  min-height: 100%;\n  height: auto !important;\n  height: 100%;\n  margin: 0 auto -48px;\n}\n.footer, .push {\n  height: 48px;\n}\n"
  },
  {
    "path": "coverage/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for All files</title>\n    <meta charset=\"utf-8\" />\n    <link rel=\"stylesheet\" href=\"prettify.css\" />\n    <link rel=\"stylesheet\" href=\"base.css\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <style type='text/css'>\n        .coverage-summary .sorter {\n            background-image: url(sort-arrow-sprite.png);\n        }\n    </style>\n</head>\n<body>\n<div class='wrapper'>\n  <div class='pad1'>\n    <h1>\n      /\n    </h1>\n    <div class='clearfix'>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">97.35% </span>\n        <span class=\"quiet\">Statements</span>\n        <span class='fraction'>294/302</span>\n      </div>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">89.61% </span>\n        <span class=\"quiet\">Branches</span>\n        <span class='fraction'>207/231</span>\n      </div>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">96.43% </span>\n        <span class=\"quiet\">Functions</span>\n        <span class='fraction'>27/28</span>\n      </div>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">97.35% </span>\n        <span class=\"quiet\">Lines</span>\n        <span class='fraction'>294/302</span>\n      </div>\n    </div>\n  </div>\n  <div class='status-line high'></div>\n<div class=\"pad1\">\n<table class=\"coverage-summary\">\n<thead>\n<tr>\n   <th data-col=\"file\" data-fmt=\"html\" data-html=\"true\" class=\"file\">File</th>\n   <th data-col=\"pic\" data-type=\"number\" data-fmt=\"html\" data-html=\"true\" class=\"pic\"></th>\n   <th data-col=\"statements\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Statements</th>\n   <th data-col=\"statements_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"branches\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Branches</th>\n   <th data-col=\"branches_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"functions\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Functions</th>\n   <th data-col=\"functions_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"lines\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Lines</th>\n   <th data-col=\"lines_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n</tr>\n</thead>\n<tbody><tr>\n\t<td class=\"file high\" data-value=\"luamin/\"><a href=\"luamin/index.html\">luamin/</a></td>\n\t<td data-value=\"97.35\" class=\"pic high\"><div class=\"chart\"><div class=\"cover-fill\" style=\"width: 97%;\"></div><div class=\"cover-empty\" style=\"width:3%;\"></div></div></td>\n\t<td data-value=\"97.35\" class=\"pct high\">97.35%</td>\n\t<td data-value=\"302\" class=\"abs high\">294/302</td>\n\t<td data-value=\"89.61\" class=\"pct high\">89.61%</td>\n\t<td data-value=\"231\" class=\"abs high\">207/231</td>\n\t<td data-value=\"96.43\" class=\"pct high\">96.43%</td>\n\t<td data-value=\"28\" class=\"abs high\">27/28</td>\n\t<td data-value=\"97.35\" class=\"pct high\">97.35%</td>\n\t<td data-value=\"302\" class=\"abs high\">294/302</td>\n\t</tr>\n\n</tbody>\n</table>\n</div><div class='push'></div><!-- for sticky footer -->\n</div><!-- /wrapper -->\n<div class='footer quiet pad2 space-top1 center small'>\n  Code coverage\n  generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Fri Feb 05 2016 11:34:14 GMT+0100 (CET)\n</div>\n</div>\n<script src=\"prettify.js\"></script>\n<script>\nwindow.onload = function () {\n        if (typeof prettyPrint === 'function') {\n            prettyPrint();\n        }\n};\n</script>\n<script src=\"sorter.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "coverage/luamin/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for luamin/</title>\n    <meta charset=\"utf-8\" />\n    <link rel=\"stylesheet\" href=\"../prettify.css\" />\n    <link rel=\"stylesheet\" href=\"../base.css\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <style type='text/css'>\n        .coverage-summary .sorter {\n            background-image: url(../sort-arrow-sprite.png);\n        }\n    </style>\n</head>\n<body>\n<div class='wrapper'>\n  <div class='pad1'>\n    <h1>\n      <a href=\"../index.html\">all files</a> luamin/\n    </h1>\n    <div class='clearfix'>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">97.35% </span>\n        <span class=\"quiet\">Statements</span>\n        <span class='fraction'>294/302</span>\n      </div>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">89.61% </span>\n        <span class=\"quiet\">Branches</span>\n        <span class='fraction'>207/231</span>\n      </div>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">96.43% </span>\n        <span class=\"quiet\">Functions</span>\n        <span class='fraction'>27/28</span>\n      </div>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">97.35% </span>\n        <span class=\"quiet\">Lines</span>\n        <span class='fraction'>294/302</span>\n      </div>\n    </div>\n  </div>\n  <div class='status-line high'></div>\n<div class=\"pad1\">\n<table class=\"coverage-summary\">\n<thead>\n<tr>\n   <th data-col=\"file\" data-fmt=\"html\" data-html=\"true\" class=\"file\">File</th>\n   <th data-col=\"pic\" data-type=\"number\" data-fmt=\"html\" data-html=\"true\" class=\"pic\"></th>\n   <th data-col=\"statements\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Statements</th>\n   <th data-col=\"statements_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"branches\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Branches</th>\n   <th data-col=\"branches_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"functions\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Functions</th>\n   <th data-col=\"functions_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"lines\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Lines</th>\n   <th data-col=\"lines_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n</tr>\n</thead>\n<tbody><tr>\n\t<td class=\"file high\" data-value=\"luamin.js\"><a href=\"luamin.js.html\">luamin.js</a></td>\n\t<td data-value=\"97.35\" class=\"pic high\"><div class=\"chart\"><div class=\"cover-fill\" style=\"width: 97%;\"></div><div class=\"cover-empty\" style=\"width:3%;\"></div></div></td>\n\t<td data-value=\"97.35\" class=\"pct high\">97.35%</td>\n\t<td data-value=\"302\" class=\"abs high\">294/302</td>\n\t<td data-value=\"89.61\" class=\"pct high\">89.61%</td>\n\t<td data-value=\"231\" class=\"abs high\">207/231</td>\n\t<td data-value=\"96.43\" class=\"pct high\">96.43%</td>\n\t<td data-value=\"28\" class=\"abs high\">27/28</td>\n\t<td data-value=\"97.35\" class=\"pct high\">97.35%</td>\n\t<td data-value=\"302\" class=\"abs high\">294/302</td>\n\t</tr>\n\n</tbody>\n</table>\n</div><div class='push'></div><!-- for sticky footer -->\n</div><!-- /wrapper -->\n<div class='footer quiet pad2 space-top1 center small'>\n  Code coverage\n  generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Fri Feb 05 2016 11:34:14 GMT+0100 (CET)\n</div>\n</div>\n<script src=\"../prettify.js\"></script>\n<script>\nwindow.onload = function () {\n        if (typeof prettyPrint === 'function') {\n            prettyPrint();\n        }\n};\n</script>\n<script src=\"../sorter.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "coverage/luamin/luamin.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for luamin/luamin.js</title>\n    <meta charset=\"utf-8\" />\n    <link rel=\"stylesheet\" href=\"../prettify.css\" />\n    <link rel=\"stylesheet\" href=\"../base.css\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <style type='text/css'>\n        .coverage-summary .sorter {\n            background-image: url(../sort-arrow-sprite.png);\n        }\n    </style>\n</head>\n<body>\n<div class='wrapper'>\n  <div class='pad1'>\n    <h1>\n      <a href=\"../index.html\">all files</a> / <a href=\"index.html\">luamin/</a> luamin.js\n    </h1>\n    <div class='clearfix'>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">97.35% </span>\n        <span class=\"quiet\">Statements</span>\n        <span class='fraction'>294/302</span>\n      </div>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">89.61% </span>\n        <span class=\"quiet\">Branches</span>\n        <span class='fraction'>207/231</span>\n      </div>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">96.43% </span>\n        <span class=\"quiet\">Functions</span>\n        <span class='fraction'>27/28</span>\n      </div>\n      <div class='fl pad1y space-right2'>\n        <span class=\"strong\">97.35% </span>\n        <span class=\"quiet\">Lines</span>\n        <span class='fraction'>294/302</span>\n      </div>\n    </div>\n  </div>\n  <div class='status-line high'></div>\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count quiet\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416\n417\n418\n419\n420\n421\n422\n423\n424\n425\n426\n427\n428\n429\n430\n431\n432\n433\n434\n435\n436\n437\n438\n439\n440\n441\n442\n443\n444\n445\n446\n447\n448\n449\n450\n451\n452\n453\n454\n455\n456\n457\n458\n459\n460\n461\n462\n463\n464\n465\n466\n467\n468\n469\n470\n471\n472\n473\n474\n475\n476\n477\n478\n479\n480\n481\n482\n483\n484\n485\n486\n487\n488\n489\n490\n491\n492\n493\n494\n495\n496\n497\n498\n499\n500\n501\n502\n503\n504\n505\n506\n507\n508\n509\n510\n511\n512\n513\n514\n515\n516\n517\n518\n519\n520\n521\n522\n523\n524\n525\n526\n527\n528\n529\n530\n531\n532\n533\n534\n535\n536\n537\n538\n539\n540\n541\n542\n543\n544\n545\n546\n547\n548\n549\n550\n551\n552\n553\n554\n555\n556\n557\n558\n559\n560\n561\n562\n563\n564\n565\n566\n567\n568\n569\n570\n571\n572\n573\n574\n575\n576\n577\n578\n579\n580\n581\n582\n583\n584\n585\n586\n587\n588\n589\n590\n591\n592\n593\n594\n595\n596\n597\n598\n599\n600\n601\n602\n603\n604\n605\n606\n607\n608\n609\n610\n611\n612\n613\n614\n615\n616\n617\n618\n619\n620\n621\n622\n623\n624\n625\n626\n627\n628\n629\n630\n631\n632\n633\n634\n635\n636\n637\n638\n639\n640\n641\n642\n643\n644\n645\n646\n647\n648\n649\n650\n651\n652\n653\n654\n655\n656\n657\n658\n659\n660\n661\n662\n663\n664</td><td class=\"line-coverage quiet\"><span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1646×</span>\n<span class=\"cline-any cline-yes\">1646×</span>\n<span class=\"cline-any cline-yes\">1646×</span>\n<span class=\"cline-any cline-yes\">1646×</span>\n<span class=\"cline-any cline-yes\">4926×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">7127×</span>\n<span class=\"cline-any cline-yes\">7127×</span>\n<span class=\"cline-any cline-yes\">7127×</span>\n<span class=\"cline-any cline-yes\">125949×</span>\n<span class=\"cline-any cline-yes\">3606×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1528×</span>\n<span class=\"cline-any cline-yes\">1528×</span>\n<span class=\"cline-any cline-yes\">511×</span>\n<span class=\"cline-any cline-yes\">1671×</span>\n<span class=\"cline-any cline-yes\">1255×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1528×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">3539×</span>\n<span class=\"cline-any cline-yes\">3539×</span>\n<span class=\"cline-any cline-yes\">3539×</span>\n<span class=\"cline-any cline-yes\">3485×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">54×</span>\n<span class=\"cline-any cline-yes\">53×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">2×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">3537×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3338×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">197×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3559×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3558×</span>\n<span class=\"cline-any cline-yes\">19×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3539×</span>\n<span class=\"cline-any cline-yes\">3539×</span>\n<span class=\"cline-any cline-yes\">3539×</span>\n<span class=\"cline-any cline-yes\">3539×</span>\n<span class=\"cline-any cline-yes\">3539×</span>\n<span class=\"cline-any cline-yes\">3592×</span>\n<span class=\"cline-any cline-yes\">3592×</span>\n<span class=\"cline-any cline-yes\">3592×</span>\n<span class=\"cline-any cline-yes\">3537×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3537×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">17×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3520×</span>\n<span class=\"cline-any cline-yes\">3520×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">55×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2×</span>\n<span class=\"cline-any cline-yes\">2×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1332×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1332×</span>\n<span class=\"cline-any cline-yes\">1332×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1332×</span>\n<span class=\"cline-any cline-yes\">530×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">802×</span>\n<span class=\"cline-any cline-yes\">361×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">334×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">27×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">441×</span>\n<span class=\"cline-any cline-yes\">180×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">111×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">69×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">261×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">257×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">125×</span>\n<span class=\"cline-any cline-yes\">125×</span>\n<span class=\"cline-any cline-yes\">125×</span>\n<span class=\"cline-any cline-yes\">4×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">125×</span>\n<span class=\"cline-any cline-yes\">125×</span>\n<span class=\"cline-any cline-yes\">4×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">125×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1528×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1528×</span>\n<span class=\"cline-any cline-yes\">1528×</span>\n<span class=\"cline-any cline-yes\">1528×</span>\n<span class=\"cline-any cline-yes\">1528×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1528×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1528×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">533×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">995×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">451×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">544×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">186×</span>\n<span class=\"cline-any cline-yes\">186×</span>\n<span class=\"cline-any cline-yes\">186×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">186×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">186×</span>\n<span class=\"cline-any cline-yes\">186×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">186×</span>\n<span class=\"cline-any cline-yes\">37×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">186×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">15×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">358×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">44×</span>\n<span class=\"cline-any cline-yes\">44×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">44×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">44×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">314×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">74×</span>\n<span class=\"cline-any cline-yes\">74×</span>\n<span class=\"cline-any cline-yes\">11×</span>\n<span class=\"cline-any cline-yes\">11×</span>\n<span class=\"cline-any cline-yes\">2×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">74×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">240×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">18×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">222×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">21×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">201×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">42×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">159×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">83×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">76×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">15×</span>\n<span class=\"cline-any cline-yes\">15×</span>\n<span class=\"cline-any cline-yes\">5×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">11×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">11×</span>\n<span class=\"cline-any cline-yes\">6×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">15×</span>\n<span class=\"cline-any cline-yes\">15×</span>\n<span class=\"cline-any cline-yes\">15×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">61×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">60×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">60×</span>\n<span class=\"cline-any cline-yes\">44×</span>\n<span class=\"cline-any cline-yes\">4×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">40×</span>\n<span class=\"cline-any cline-yes\">28×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">44×</span>\n<span class=\"cline-any cline-yes\">19×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">60×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1527×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">539×</span>\n<span class=\"cline-any cline-yes\">539×</span>\n<span class=\"cline-any cline-yes\">500×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">537×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">500×</span>\n<span class=\"cline-any cline-yes\">500×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">500×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">212×</span>\n<span class=\"cline-any cline-yes\">218×</span>\n<span class=\"cline-any cline-yes\">217×</span>\n<span class=\"cline-any cline-yes\">6×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">211×</span>\n<span class=\"cline-any cline-yes\">211×</span>\n<span class=\"cline-any cline-yes\">215×</span>\n<span class=\"cline-any cline-yes\">215×</span>\n<span class=\"cline-any cline-yes\">4×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">288×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">63×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">63×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3458×</span>\n<span class=\"cline-any cline-yes\">3458×</span>\n<span class=\"cline-any cline-yes\">3395×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">63×</span>\n<span class=\"cline-any cline-yes\">13×</span>\n<span class=\"cline-any cline-yes\">13×</span>\n<span class=\"cline-any cline-yes\">18×</span>\n<span class=\"cline-any cline-yes\">18×</span>\n<span class=\"cline-any cline-yes\">5×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">225×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">63×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">162×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">17×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">17×</span>\n<span class=\"cline-any cline-yes\">17×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">17×</span>\n<span class=\"cline-any cline-yes\">8×</span>\n<span class=\"cline-any cline-yes\">3×</span>\n<span class=\"cline-any cline-yes\">3×</span>\n<span class=\"cline-any cline-yes\">3×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">8×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">17×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">145×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">11×</span>\n<span class=\"cline-any cline-yes\">11×</span>\n<span class=\"cline-any cline-yes\">11×</span>\n<span class=\"cline-any cline-yes\">11×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">134×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">30×</span>\n<span class=\"cline-any cline-yes\">30×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">104×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">18×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">18×</span>\n<span class=\"cline-any cline-yes\">12×</span>\n<span class=\"cline-any cline-yes\">12×</span>\n<span class=\"cline-any cline-yes\">6×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">86×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">15×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">71×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">10×</span>\n<span class=\"cline-any cline-yes\">10×</span>\n<span class=\"cline-any cline-yes\">10×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">61×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">31×</span>\n<span class=\"cline-any cline-yes\">31×</span>\n<span class=\"cline-any cline-yes\">31×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">31×</span>\n<span class=\"cline-any cline-yes\">16×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">28×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">28×</span>\n<span class=\"cline-any cline-yes\">12×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">31×</span>\n<span class=\"cline-any cline-yes\">31×</span>\n<span class=\"cline-any cline-yes\">31×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">30×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">13×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">13×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">17×</span>\n<span class=\"cline-any cline-yes\">17×</span>\n<span class=\"cline-any cline-yes\">4×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">13×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">13×</span>\n<span class=\"cline-any cline-yes\">15×</span>\n<span class=\"cline-any cline-yes\">15×</span>\n<span class=\"cline-any cline-yes\">2×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">13×</span>\n<span class=\"cline-any cline-yes\">13×</span>\n<span class=\"cline-any cline-yes\">13×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">17×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12×</span>\n<span class=\"cline-any cline-yes\">12×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12×</span>\n<span class=\"cline-any cline-yes\">2×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12×</span>\n<span class=\"cline-any cline-yes\">12×</span>\n<span class=\"cline-any cline-yes\">12×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">498×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">393×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">393×</span>\n<span class=\"cline-any cline-yes\">393×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">393×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">393×</span>\n<span class=\"cline-any cline-yes\">392×</span>\n<span class=\"cline-any cline-yes\">371×</span>\n<span class=\"cline-any cline-yes\">371×</span>\n<span class=\"cline-any cline-yes\">371×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">392×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-yes\">1×</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">/*! https://mths.be/luamin v1.0.0 by @mathias */\n;(function(root) {\n&nbsp;\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' &amp;&amp; exports;\n&nbsp;\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' &amp;&amp; module &amp;&amp;\n\t\tmodule.exports == freeExports &amp;&amp; module;\n&nbsp;\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' &amp;&amp; global;\n\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (freeGlobal.global === freeGlobal || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >freeGlobal.window === freeGlobal)</span> {\n\t\troot = freeGlobal;\n\t}\n&nbsp;\n\t/*--------------------------------------------------------------------------*/\n&nbsp;\n\tvar luaparse = root.luaparse || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >require('luaparse');</span>\n\tluaparse.defaultOptions.comments = false;\n\tluaparse.defaultOptions.scope = true;\n\tvar parse = luaparse.parse;\n&nbsp;\n\tvar regexAlphaUnderscore = /[a-zA-Z_]/;\n\tvar regexAlphaNumUnderscore = /[a-zA-Z0-9_]/;\n\tvar regexDigits = /[0-9]/;\n&nbsp;\n\t// http://www.lua.org/manual/5.2/manual.html#3.4.7\n\t// http://www.lua.org/source/5.2/lparser.c.html#priority\n\tvar PRECEDENCE = {\n\t\t'or': 1,\n\t\t'and': 2,\n\t\t'&lt;': 3, '&gt;': 3, '&lt;=': 3, '&gt;=': 3, '~=': 3, '==': 3,\n\t\t'..': 5,\n\t\t'+': 6, '-': 6, // binary -\n\t\t'*': 7, '/': 7, '%': 7,\n\t\t'unarynot': 8, 'unary#': 8, 'unary-': 8, // unary -\n\t\t'^': 10\n\t};\n&nbsp;\n\tvar IDENTIFIER_PARTS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a',\n\t\t'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',\n\t\t'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E',\n\t\t'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',\n\t\t'U', 'V', 'W', 'X', 'Y', 'Z', '_'];\n\tvar IDENTIFIER_PARTS_MAX = IDENTIFIER_PARTS.length - 1;\n&nbsp;\n\tvar each = function(array, fn) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\tvar max = length - 1;\n\t\twhile (++index &lt; length) {\n\t\t\tfn(array[index], index &lt; max);\n\t\t}\n\t};\n&nbsp;\n\tvar indexOf = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index &lt; length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn index;\n\t\t\t}\n\t\t}\n\t};\n&nbsp;\n\tvar hasOwnProperty = {}.hasOwnProperty;\n\tvar extend = function(destination, source) {\n\t\tvar key;\n\t\tif (source) {\n\t\t\tfor (key in source) {\n\t\t\t\tif (hasOwnProperty.call(source, key)) {\n\t\t\t\t\tdestination[key] = source[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn destination;\n\t};\n&nbsp;\n\tvar generateZeroes = function(length) {\n\t\tvar zero = '0';\n\t\tvar result = '';\n\t\tif (length &lt; 1) {\n\t\t\treturn result;\n\t\t}\n\t\tif (length == 1) {\n\t\t\treturn zero;\n\t\t}\n\t\twhile (length) {\n\t\t\tif (length &amp; 1) {\n\t\t\t\tresult += zero;\n\t\t\t}\n\t\t\tif (length &gt;&gt;= 1) {\n\t\t\t\tzero += zero;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n&nbsp;\n\t// http://www.lua.org/manual/5.2/manual.html#3.1\n\tfunction isKeyword(id) {\n\t\tswitch (id.length) {\n\t\t\tcase 2:\n\t\t\t\treturn 'do' == id || 'if' == id || 'in' == id || 'or' == id;\n\t\t\tcase 3:\n\t\t\t\treturn 'and' == id || 'end' == id || 'for' == id || 'nil' == id ||\n\t\t\t\t\t'not' == id;\n<span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >\t\t\tcase 4:</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn 'else' == id || 'goto' == id || 'then' == id || 'true' == id;</span>\n<span class=\"branch-3 cbranch-no\" title=\"branch not covered\" >\t\t\tcase 5:</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn 'break' == id || 'false' == id || 'local' == id ||</span>\n\t\t\t\t\t'until' == id || 'while' == id;\n<span class=\"branch-4 cbranch-no\" title=\"branch not covered\" >\t\t\tcase 6:</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn 'elseif' == id || 'repeat' == id || 'return' == id;</span>\n<span class=\"branch-5 cbranch-no\" title=\"branch not covered\" >\t\t\tcase 8:</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn 'function' == id;</span>\n\t\t}\n\t\treturn false;\n\t}\n&nbsp;\n\tvar currentIdentifier;\n\tvar identifierMap;\n\tvar identifiersInUse;\n\tvar generateIdentifier = function(originalName) {\n\t\t// Preserve `self` in methods\n\t\tif (originalName == 'self') {\n\t\t\treturn originalName;\n\t\t}\n&nbsp;\n\t\tif (hasOwnProperty.call(identifierMap, originalName)) {\n\t\t\treturn identifierMap[originalName];\n\t\t}\n\t\tvar length = currentIdentifier.length;\n\t\tvar position = length - 1;\n\t\tvar character;\n\t\tvar index;\n\t\twhile (position &gt;= 0) {\n\t\t\tcharacter = currentIdentifier.charAt(position);\n\t\t\tindex = indexOf(IDENTIFIER_PARTS, character);\n\t\t\tif (index != IDENTIFIER_PARTS_MAX) {\n\t\t\t\tcurrentIdentifier = currentIdentifier.substring(0, position) +\n\t\t\t\t\tIDENTIFIER_PARTS[index + 1] + generateZeroes(length - (position + 1));\n\t\t\t\tif (\n\t\t\t\t\tisKeyword(currentIdentifier) ||\n\t\t\t\t\tindexOf(identifiersInUse, currentIdentifier) &gt; -1\n\t\t\t\t) {\n\t\t\t\t\treturn generateIdentifier(originalName);\n\t\t\t\t}\n\t\t\t\tidentifierMap[originalName] = currentIdentifier;\n\t\t\t\treturn currentIdentifier;\n\t\t\t}\n\t\t\t--position;\n\t\t}\n\t\tcurrentIdentifier = 'a' + generateZeroes(length);\n\t\tif (indexOf(identifiersInUse, currentIdentifier) &gt; -1) {\n\t\t\treturn generateIdentifier(originalName);\n\t\t}\n\t\tidentifierMap[originalName] = currentIdentifier;\n\t\treturn currentIdentifier;\n\t};\n&nbsp;\n\t/*--------------------------------------------------------------------------*/\n&nbsp;\n\tvar joinStatements = function(a, b, separator) {\n\t\tseparator || (separator = ' ');\n&nbsp;\n\t\tvar lastCharA = a.slice(-1);\n\t\tvar firstCharB = b.charAt(0);\n&nbsp;\n\t\tif (lastCharA == '' || firstCharB == '') {\n\t\t\treturn a + b;\n\t\t}\n\t\tif (regexAlphaUnderscore.test(lastCharA)) {\n\t\t\tif (regexAlphaNumUnderscore.test(firstCharB)) {\n\t\t\t\t// e.g. `while` + `1`\n\t\t\t\t// e.g. `local a` + `local b`\n\t\t\t\treturn a + separator + b;\n\t\t\t} else {\n\t\t\t\t// e.g. `not` + `(2&gt;3 or 3&lt;2)`\n\t\t\t\t// e.g. `x` + `^`\n\t\t\t\treturn a + b;\n\t\t\t}\n\t\t}\n\t\tif (regexDigits.test(lastCharA)) {\n\t\t\tif (\n\t\t\t\tfirstCharB == '(' ||\n\t\t\t\t!(firstCharB == '.' ||\n\t\t\t\tregexAlphaUnderscore.test(firstCharB))\n\t\t\t) {\n\t\t\t\t// e.g. `1` + `+`\n\t\t\t\t// e.g. `1` + `==`\n\t\t\t\treturn a + b;\n\t\t\t} else {\n\t\t\t\t// e.g. `1` + `..`\n\t\t\t\t// e.g. `1` + `and`\n\t\t\t\treturn a + separator + b;\n\t\t\t}\n\t\t}\n\t\tif (lastCharA == firstCharB &amp;&amp; lastCharA == '-') {\n\t\t\t// e.g. `1-` + `-2`\n\t\t\treturn a + separator + b;\n\t\t}\n\t\treturn a + b;\n\t};\n&nbsp;\n\tvar formatBase = function(base) {\n\t\tvar result = '';\n\t\tvar needsParens = base.type == 'TableConstructorExpression';\n\t\tif (needsParens) {\n\t\t\tresult += '(';\n\t\t}\n\t\tresult += formatExpression(base);\n\t\tif (needsParens) {\n\t\t\tresult += ')';\n\t\t}\n\t\treturn result;\n\t};\n&nbsp;\n\tvar formatExpression = function(expression, options) {\n&nbsp;\n\t\toptions = extend({\n\t\t\t'precedence': 0,\n\t\t\t'preserveIdentifiers': false\n\t\t}, options);\n&nbsp;\n\t\tvar result = '';\n\t\tvar currentPrecedence;\n\t\tvar associativity;\n\t\tvar operator;\n&nbsp;\n\t\tvar expressionType = expression.type;\n&nbsp;\n\t\tif (expressionType == 'Identifier') {\n&nbsp;\n\t\t\tresult = expression.isLocal &amp;&amp; !options.preserveIdentifiers\n\t\t\t\t? generateIdentifier(expression.name)\n\t\t\t\t: expression.name;\n&nbsp;\n\t\t} else if (\n\t\t\texpressionType == 'StringLiteral' ||\n\t\t\texpressionType == 'NumericLiteral' ||\n\t\t\texpressionType == 'BooleanLiteral' ||\n\t\t\texpressionType == 'NilLiteral' ||\n\t\t\texpressionType == 'VarargLiteral'\n\t\t) {\n&nbsp;\n\t\t\tresult = expression.raw;\n&nbsp;\n\t\t} else if (\n\t\t\texpressionType == 'LogicalExpression' ||\n\t\t\texpressionType == 'BinaryExpression'\n\t\t) {\n&nbsp;\n\t\t\t// If an expression with precedence x\n\t\t\t// contains an expression with precedence &lt; x,\n\t\t\t// the inner expression must be wrapped in parens.\n\t\t\toperator = expression.operator;\n\t\t\tcurrentPrecedence = PRECEDENCE[operator];\n\t\t\tassociativity = 'left';\n&nbsp;\n\t\t\tresult = formatExpression(expression.left, {\n\t\t\t\t'precedence': currentPrecedence,\n\t\t\t\t'direction': 'left',\n\t\t\t\t'parent': operator\n\t\t\t});\n\t\t\tresult = joinStatements(result, operator);\n\t\t\tresult = joinStatements(result, formatExpression(expression.right, {\n\t\t\t\t'precedence': currentPrecedence,\n\t\t\t\t'direction': 'right',\n\t\t\t\t'parent': operator\n\t\t\t}));\n&nbsp;\n\t\t\tif (operator == '^' || operator == '..') {\n\t\t\t\tassociativity = \"right\";\n\t\t\t}\n&nbsp;\n\t\t\tif (\n\t\t\t\tcurrentPrecedence &lt; options.precedence ||\n\t\t\t\t(\n\t\t\t\t\tcurrentPrecedence == options.precedence &amp;&amp;\n\t\t\t\t\tassociativity != options.direction &amp;&amp;\n\t\t\t\t\toptions.parent != '+' &amp;&amp;\n\t\t\t\t\t!(options.parent == '*' &amp;&amp; (operator == '/' || operator == '*'))\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// The most simple case here is that of\n\t\t\t\t// protecting the parentheses on the RHS of\n\t\t\t\t// `1 - (2 - 3)` but deleting them from `(1 - 2) - 3`.\n\t\t\t\t// This is generally the right thing to do. The\n\t\t\t\t// semantics of `+` are special however: `1 + (2 - 3)`\n\t\t\t\t// == `1 + 2 - 3`. `-` and `+` are the only two operators\n\t\t\t\t// who share their precedence level. `*` also can\n\t\t\t\t// commute in such a way with `/`, but not with `%`\n\t\t\t\t// (all three share a precedence). So we test for\n\t\t\t\t// all of these conditions and avoid emitting\n\t\t\t\t// parentheses in the cases where we don’t have to.\n\t\t\t\tresult = '(' + result + ')';\n\t\t\t}\n&nbsp;\n\t\t} else if (expressionType == 'UnaryExpression') {\n&nbsp;\n\t\t\toperator = expression.operator;\n\t\t\tcurrentPrecedence = PRECEDENCE['unary' + operator];\n&nbsp;\n\t\t\tresult = joinStatements(\n\t\t\t\toperator,\n\t\t\t\tformatExpression(expression.argument, {\n\t\t\t\t\t'precedence': currentPrecedence\n\t\t\t\t})\n\t\t\t);\n&nbsp;\n\t\t\tif (\n\t\t\t\tcurrentPrecedence &lt; options.precedence &amp;&amp;\n\t\t\t\t// In principle, we should parenthesize the RHS of an\n\t\t\t\t// expression like `3^-2`, because `^` has higher precedence\n\t\t\t\t// than unary `-` according to the manual. But that is\n\t\t\t\t// misleading on the RHS of `^`, since the parser will\n\t\t\t\t// always try to find a unary operator regardless of\n\t\t\t\t// precedence.\n\t\t\t\t!(\n\t\t\t\t\t(options.parent == '^') &amp;&amp;\n\t\t\t\t\toptions.direction == 'right'\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tresult = '(' + result + ')';\n\t\t\t}\n&nbsp;\n\t\t} else if (expressionType == 'CallExpression') {\n&nbsp;\n\t\t\tresult = formatExpression(expression.base) + '(';\n\t\t\teach(expression.arguments, function(argument, needsComma) {\n\t\t\t\tresult += formatExpression(argument);\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n\t\t\tresult += ')';\n&nbsp;\n\t\t} else if (expressionType == 'TableCallExpression') {\n&nbsp;\n\t\t\tresult = formatExpression(expression.base) +\n\t\t\t\tformatExpression(expression.arguments);\n&nbsp;\n\t\t} else if (expressionType == 'StringCallExpression') {\n&nbsp;\n\t\t\tresult = formatExpression(expression.base) +\n\t\t\t\tformatExpression(expression.argument);\n&nbsp;\n\t\t} else if (expressionType == 'IndexExpression') {\n&nbsp;\n\t\t\tresult = formatBase(expression.base) + '[' +\n\t\t\t\tformatExpression(expression.index) + ']';\n&nbsp;\n\t\t} else if (expressionType == 'MemberExpression') {\n&nbsp;\n\t\t\tresult = formatBase(expression.base) + expression.indexer +\n\t\t\t\tformatExpression(expression.identifier, {\n\t\t\t\t\t'preserveIdentifiers': true\n\t\t\t\t});\n&nbsp;\n\t\t} else if (expressionType == 'FunctionDeclaration') {\n&nbsp;\n\t\t\tresult = 'function(';\n\t\t\tif (expression.parameters.length) {\n\t\t\t\teach(expression.parameters, function(parameter, needsComma) {\n\t\t\t\t\t// `Identifier`s have a `name`, `VarargLiteral`s have a `value`\n\t\t\t\t\tresult += parameter.name\n\t\t\t\t\t\t? generateIdentifier(parameter.name)\n\t\t\t\t\t\t: parameter.value;\n\t\t\t\t\tif (needsComma) {\n\t\t\t\t\t\tresult += ',';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tresult += ')';\n\t\t\tresult = joinStatements(result, formatStatementList(expression.body));\n\t\t\tresult = joinStatements(result, 'end');\n&nbsp;\n\t\t} else if (expressionType == 'TableConstructorExpression') {\n&nbsp;\n\t\t\tresult = '{';\n&nbsp;\n\t\t\teach(expression.fields, function(field, needsComma) {\n\t\t\t\tif (field.type == 'TableKey') {\n\t\t\t\t\tresult += '[' + formatExpression(field.key) + ']=' +\n\t\t\t\t\t\tformatExpression(field.value);\n\t\t\t\t} else if (field.type == 'TableValue') {\n\t\t\t\t\tresult += formatExpression(field.value);\n\t\t\t\t} else { // at this point, `field.type == 'TableKeyString'`\n\t\t\t\t\tresult += formatExpression(field.key, {\n\t\t\t\t\t\t// TODO: keep track of nested scopes (#18)\n\t\t\t\t\t\t'preserveIdentifiers': true\n\t\t\t\t\t}) + '=' + formatExpression(field.value);\n\t\t\t\t}\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n&nbsp;\n\t\t\tresult += '}';\n&nbsp;\n\t\t} else {\n&nbsp;\n\t\t\tthrow TypeError('Unknown expression type: `' + expressionType + '`');\n&nbsp;\n\t\t}\n&nbsp;\n\t\treturn result;\n\t};\n&nbsp;\n\tvar formatStatementList = function(body) {\n\t\tvar result = '';\n\t\teach(body, function(statement) {\n\t\t\tresult = joinStatements(result, formatStatement(statement), ';');\n\t\t});\n\t\treturn result;\n\t};\n&nbsp;\n\tvar formatStatement = function(statement) {\n\t\tvar result = '';\n\t\tvar statementType = statement.type;\n&nbsp;\n\t\tif (statementType == 'AssignmentStatement') {\n&nbsp;\n\t\t\t// left-hand side\n\t\t\teach(statement.variables, function(variable, needsComma) {\n\t\t\t\tresult += formatExpression(variable);\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n&nbsp;\n\t\t\t// right-hand side\n\t\t\tresult += '=';\n\t\t\teach(statement.init, function(init, needsComma) {\n\t\t\t\tresult += formatExpression(init);\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n&nbsp;\n\t\t} else if (statementType == 'LocalStatement') {\n&nbsp;\n\t\t\tresult = 'local ';\n&nbsp;\n\t\t\t// left-hand side\n\t\t\teach(statement.variables, function(variable, needsComma) {\n\t\t\t\t// Variables in a `LocalStatement` are always local, duh\n\t\t\t\tresult += generateIdentifier(variable.name);\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n&nbsp;\n\t\t\t// right-hand side\n\t\t\tif (statement.init.length) {\n\t\t\t\tresult += '=';\n\t\t\t\teach(statement.init, function(init, needsComma) {\n\t\t\t\t\tresult += formatExpression(init);\n\t\t\t\t\tif (needsComma) {\n\t\t\t\t\t\tresult += ',';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n&nbsp;\n\t\t} else if (statementType == 'CallStatement') {\n&nbsp;\n\t\t\tresult = formatExpression(statement.expression);\n&nbsp;\n\t\t} else if (statementType == 'IfStatement') {\n&nbsp;\n\t\t\tresult = joinStatements(\n\t\t\t\t'if',\n\t\t\t\tformatExpression(statement.clauses[0].condition)\n\t\t\t);\n\t\t\tresult = joinStatements(result, 'then');\n\t\t\tresult = joinStatements(\n\t\t\t\tresult,\n\t\t\t\tformatStatementList(statement.clauses[0].body)\n\t\t\t);\n\t\t\teach(statement.clauses.slice(1), function(clause) {\n\t\t\t\tif (clause.condition) {\n\t\t\t\t\tresult = joinStatements(result, 'elseif');\n\t\t\t\t\tresult = joinStatements(result, formatExpression(clause.condition));\n\t\t\t\t\tresult = joinStatements(result, 'then');\n\t\t\t\t} else {\n\t\t\t\t\tresult = joinStatements(result, 'else');\n\t\t\t\t}\n\t\t\t\tresult = joinStatements(result, formatStatementList(clause.body));\n\t\t\t});\n\t\t\tresult = joinStatements(result, 'end');\n&nbsp;\n\t\t} else if (statementType == 'WhileStatement') {\n&nbsp;\n\t\t\tresult = joinStatements('while', formatExpression(statement.condition));\n\t\t\tresult = joinStatements(result, 'do');\n\t\t\tresult = joinStatements(result, formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'end');\n&nbsp;\n\t\t} else if (statementType == 'DoStatement') {\n&nbsp;\n\t\t\tresult = joinStatements('do', formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'end');\n&nbsp;\n\t\t} else if (statementType == 'ReturnStatement') {\n&nbsp;\n\t\t\tresult = 'return';\n&nbsp;\n\t\t\teach(statement.arguments, function(argument, needsComma) {\n\t\t\t\tresult = joinStatements(result, formatExpression(argument));\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n&nbsp;\n\t\t} else if (statementType == 'BreakStatement') {\n&nbsp;\n\t\t\tresult = 'break';\n&nbsp;\n\t\t} else if (statementType == 'RepeatStatement') {\n&nbsp;\n\t\t\tresult = joinStatements('repeat', formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'until');\n\t\t\tresult = joinStatements(result, formatExpression(statement.condition))\n&nbsp;\n\t\t} else if (statementType == 'FunctionDeclaration') {\n&nbsp;\n\t\t\tresult = (statement.isLocal ? 'local ' : '') + 'function ';\n\t\t\tresult += formatExpression(statement.identifier);\n\t\t\tresult += '(';\n&nbsp;\n\t\t\tif (statement.parameters.length) {\n\t\t\t\teach(statement.parameters, function(parameter, needsComma) {\n\t\t\t\t\t// `Identifier`s have a `name`, `VarargLiteral`s have a `value`\n\t\t\t\t\tresult += parameter.name\n\t\t\t\t\t\t? generateIdentifier(parameter.name)\n\t\t\t\t\t\t: parameter.value;\n\t\t\t\t\tif (needsComma) {\n\t\t\t\t\t\tresult += ',';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n&nbsp;\n\t\t\tresult += ')';\n\t\t\tresult = joinStatements(result, formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'end');\n&nbsp;\n\t\t} else if (statementType == 'ForGenericStatement') {\n\t\t\t// see also `ForNumericStatement`\n&nbsp;\n\t\t\tresult = 'for ';\n&nbsp;\n\t\t\teach(statement.variables, function(variable, needsComma) {\n\t\t\t\t// The variables in a `ForGenericStatement` are always local\n\t\t\t\tresult += generateIdentifier(variable.name);\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n&nbsp;\n\t\t\tresult += ' in';\n&nbsp;\n\t\t\teach(statement.iterators, function(iterator, needsComma) {\n\t\t\t\tresult = joinStatements(result, formatExpression(iterator));\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n&nbsp;\n\t\t\tresult = joinStatements(result, 'do');\n\t\t\tresult = joinStatements(result, formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'end');\n&nbsp;\n\t\t} else if (statementType == 'ForNumericStatement') {\n&nbsp;\n\t\t\t// The variables in a `ForNumericStatement` are always local\n\t\t\tresult = 'for ' + generateIdentifier(statement.variable.name) + '=';\n\t\t\tresult += formatExpression(statement.start) + ',' +\n\t\t\t\tformatExpression(statement.end);\n&nbsp;\n\t\t\tif (statement.step) {\n\t\t\t\tresult += ',' + formatExpression(statement.step);\n\t\t\t}\n&nbsp;\n\t\t\tresult = joinStatements(result, 'do');\n\t\t\tresult = joinStatements(result, formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'end');\n&nbsp;\n\t\t} else if (statementType == 'LabelStatement') {\n&nbsp;\n\t\t\t// The identifier names in a `LabelStatement` can safely be renamed\n\t\t\tresult = '::' + generateIdentifier(statement.label.name) + '::';\n&nbsp;\n\t\t} else if (statementType == 'GotoStatement') {\n&nbsp;\n\t\t\t// The identifier names in a `GotoStatement` can safely be renamed\n\t\t\tresult = 'goto ' + generateIdentifier(statement.label.name);\n&nbsp;\n\t\t} else {\n&nbsp;\n\t\t\tthrow TypeError('Unknown statement type: `' + statementType + '`');\n&nbsp;\n\t\t}\n&nbsp;\n\t\treturn result;\n\t};\n&nbsp;\n\tvar minify = function(argument) {\n\t\t// `argument` can be a Lua code snippet (string)\n\t\t// or a luaparse-compatible AST (object)\n\t\tvar ast = typeof argument == 'string'\n\t\t\t? parse(argument)\n\t\t\t: argument;\n&nbsp;\n\t\t// (Re)set temporary identifier values\n\t\tidentifierMap = {};\n\t\tidentifiersInUse = [];\n\t\t// This is a shortcut to help generate the first identifier (`a`) faster\n\t\tcurrentIdentifier = '9';\n&nbsp;\n\t\t// Make sure global variable names aren't renamed\n\t\tif (ast.globals) {\n\t\t\teach(ast.globals, function(object) {\n\t\t\t\tvar name = object.name;\n\t\t\t\tidentifierMap[name] = name;\n\t\t\t\tidentifiersInUse.push(name);\n\t\t\t});\n\t\t} else {\n\t\t\tthrow Error('Missing required AST property: `globals`');\n\t\t}\n&nbsp;\n\t\treturn formatStatementList(ast.body);\n\t};\n&nbsp;\n\t/*--------------------------------------------------------------------------*/\n&nbsp;\n\tvar luamin = {\n\t\t'version': '1.0.0',\n\t\t'minify': minify\n\t};\n&nbsp;\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (\n\t\ttypeof define == 'function' &amp;&amp;\n<span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >\t\ttypeof define.amd == 'object' </span>&amp;&amp;\n<span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >\t\tdefine.amd</span>\n\t) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tdefine(<span class=\"fstat-no\" title=\"function not covered\" >function() {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn luamin;</span>\n\t\t});\n\t}\telse <span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (freeExports &amp;&amp; !freeExports.nodeType) {\n\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = luamin;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\textend(freeExports, luamin);</span>\n\t\t}\n\t} else { // in Rhino or a web browser\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\troot.luamin = luamin;</span>\n\t}\n&nbsp;\n}(this));\n&nbsp;</pre></td></tr>\n</table></pre>\n<div class='push'></div><!-- for sticky footer -->\n</div><!-- /wrapper -->\n<div class='footer quiet pad2 space-top1 center small'>\n  Code coverage\n  generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Fri Feb 05 2016 11:34:14 GMT+0100 (CET)\n</div>\n</div>\n<script src=\"../prettify.js\"></script>\n<script>\nwindow.onload = function () {\n        if (typeof prettyPrint === 'function') {\n            prettyPrint();\n        }\n};\n</script>\n<script src=\"../sorter.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "coverage/prettify.css",
    "content": ".pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}\n"
  },
  {
    "path": "coverage/prettify.js",
    "content": "window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=[\"break,continue,do,else,for,if,return,while\"];var u=[h,\"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile\"];var p=[u,\"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof\"];var l=[p,\"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where\"];var x=[p,\"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient\"];var R=[x,\"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var\"];var r=\"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes\";var w=[p,\"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN\"];var s=\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\";var I=[h,\"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None\"];var f=[h,\"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END\"];var H=[h,\"case,done,elif,esac,eval,fi,function,in,local,set,then,until\"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\\d*)/;var C=\"str\";var z=\"kwd\";var j=\"com\";var O=\"typ\";var G=\"lit\";var L=\"pun\";var F=\"pln\";var m=\"tag\";var E=\"dec\";var J=\"src\";var P=\"atn\";var n=\"atv\";var N=\"nocode\";var M=\"(?:^^\\\\.?|[+-]|\\\\!|\\\\!=|\\\\!==|\\\\#|\\\\%|\\\\%=|&|&&|&&=|&=|\\\\(|\\\\*|\\\\*=|\\\\+=|\\\\,|\\\\-=|\\\\->|\\\\/|\\\\/=|:|::|\\\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\\\?|\\\\@|\\\\[|\\\\^|\\\\^=|\\\\^\\\\^|\\\\^\\\\^=|\\\\{|\\\\||\\\\|=|\\\\|\\\\||\\\\|\\\\|=|\\\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\\\s*\";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\\\u[0-9a-f]{4}|\\\\x[0-9a-f]{2}|\\\\[^ux]/gi,\"\"))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if(\"0\"<=af&&af<=\"7\"){return parseInt(ah.substring(1),8)}else{if(af===\"u\"||af===\"x\"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?\"\\\\x0\":\"\\\\x\")+af.toString(16)}var ag=String.fromCharCode(af);if(ag===\"\\\\\"||ag===\"-\"||ag===\"[\"||ag===\"]\"){ag=\"\\\\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp(\"\\\\\\\\u[0-9A-Fa-f]{4}|\\\\\\\\x[0-9A-Fa-f]{2}|\\\\\\\\[0-3][0-7]{0,2}|\\\\\\\\[0-7]{1,2}|\\\\\\\\[\\\\s\\\\S]|-|[^-\\\\\\\\]\",\"g\"));var ak=[];var af=[];var ao=aq[0]===\"^\";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&\"-\"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=[\"[\"];if(ao){an.push(\"^\")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push(\"-\")}an.push(T(at[1]))}}an.push(\"]\");return an.join(\"\")}function W(al){var aj=al.source.match(new RegExp(\"(?:\\\\[(?:[^\\\\x5C\\\\x5D]|\\\\\\\\[\\\\s\\\\S])*\\\\]|\\\\\\\\u[A-Fa-f0-9]{4}|\\\\\\\\x[A-Fa-f0-9]{2}|\\\\\\\\[0-9]+|\\\\\\\\[^ux0-9]|\\\\(\\\\?[:!=]|[\\\\(\\\\)\\\\^]|[^\\\\x5B\\\\x5C\\\\(\\\\)\\\\^]+)\",\"g\"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag===\"(\"){++am}else{if(\"\\\\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag===\"(\"){++am;if(an[am]===undefined){aj[ak]=\"(?:\"}}else{if(\"\\\\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]=\"\\\\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if(\"^\"===aj[ak]&&\"^\"!==aj[ak+1]){aj[ak]=\"\"}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai===\"[\"){aj[ak]=X(ag)}else{if(ai!==\"\\\\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return\"[\"+String.fromCharCode(ap&~32,ap|32)+\"]\"})}}}}return aj.join(\"\")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(\"\"+ae)}aa.push(\"(?:\"+W(ae)+\")\")}return new RegExp(aa.join(\"|\"),ac?\"gi\":\"g\")}function a(V){var U=/(?:^|\\s)nocode(?:\\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue(\"white-space\")}}var Y=S&&\"pre\"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if(\"BR\"===ad||\"LI\"===ad){X[W]=\"\\n\";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \\t\\r\\n]+/g,\" \")}else{ac=ac.replace(/\\r\\n?/g,\"\\n\")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join(\"\").replace(/\\n$/,\"\"),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=\"\"+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\\0-\\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap===\"string\"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&\"lang-\"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]===\"string\")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\\'\\'\\'(?:[^\\'\\\\]|\\\\[\\s\\S]|\\'{1,2}(?=[^\\']))*(?:\\'\\'\\'|$)|\\\"\\\"\\\"(?:[^\\\"\\\\]|\\\\[\\s\\S]|\\\"{1,2}(?=[^\\\"]))*(?:\\\"\\\"\\\"|$)|\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$))/,null,\"'\\\"\"])}else{if(T.multiLineStrings){W.push([C,/^(?:\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$)|\\`(?:[^\\\\\\`]|\\\\[\\s\\S])*(?:\\`|$))/,null,\"'\\\"`\"])}else{W.push([C,/^(?:\\'(?:[^\\\\\\'\\r\\n]|\\\\.)*(?:\\'|$)|\\\"(?:[^\\\\\\\"\\r\\n]|\\\\.)*(?:\\\"|$))/,null,\"\\\"'\"])}}if(T.verbatimStrings){S.push([C,/^@\\\"(?:[^\\\"]|\\\"\\\")*(?:\\\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,\"#\"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\\b|[^\\r\\n]*)/,null,\"#\"])}S.push([C,/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h|[a-z]\\w*)>/,null])}else{W.push([j,/^#[^\\r\\n]*/,null,\"#\"])}}if(T.cStyleComments){S.push([j,/^\\/\\/[^\\r\\n]*/,null]);S.push([j,/^\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,null])}if(T.regexLiterals){var X=(\"/(?=[^/*])(?:[^/\\\\x5B\\\\x5C]|\\\\x5C[\\\\s\\\\S]|\\\\x5B(?:[^\\\\x5C\\\\x5D]|\\\\x5C[\\\\s\\\\S])*(?:\\\\x5D|$))+/\");S.push([\"lang-regex\",new RegExp(\"^\"+M+\"(\"+X+\")\")])}var V=T.types;if(V){S.push([O,V])}var U=(\"\"+T.keywords).replace(/^ | $/g,\"\");if(U.length){S.push([z,new RegExp(\"^(?:\"+U.replace(/[\\s,]+/g,\"|\")+\")\\\\b\"),null])}W.push([F,/^\\s+/,null,\" \\r\\n\\t\\xA0\"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\\w+_t\\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp(\"^(?:0x[a-f0-9]+|(?:\\\\d(?:_\\\\d+)*\\\\d*(?:\\\\.\\\\d*)?|\\\\.\\\\d\\\\+)(?:e[+\\\\-]?\\\\d+)?)[a-z]*\",\"i\"),null,\"0123456789\"],[F,/^\\\\[\\s\\S]?/,null],[L,/^.[^\\s\\w\\.$@\\'\\\"\\`\\/\\#\\\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\\s)nocode(?:\\s|$)/;var ab=/\\r\\n?|\\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue(\"white-space\")}}var Z=S&&\"pre\"===S.substring(0,3);var af=ac.createElement(\"LI\");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if(\"BR\"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute(\"value\",ag)}var aa=ac.createElement(\"OL\");aa.className=\"linenums\";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className=\"L\"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode(\"\\xA0\"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\\bMSIE\\b/.test(navigator.userAgent);var am=/\\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,\"\\r\")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement(\"SPAN\");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn(\"cannot override language handler %s\",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\\s*</.test(S)?\"default-markup\":\"default-code\"}return t[T]}c(K,[\"default-code\"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\\w[^>]*(?:>|$)/],[j,/^<\\!--[\\s\\S]*?(?:-\\->|$)/],[\"lang-\",/^<\\?([\\s\\S]+?)(?:\\?>|$)/],[\"lang-\",/^<%([\\s\\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],[\"lang-\",/^<xmp\\b[^>]*>([\\s\\S]+?)<\\/xmp\\b[^>]*>/i],[\"lang-js\",/^<script\\b[^>]*>([\\s\\S]*?)(<\\/script\\b[^>]*>)/i],[\"lang-css\",/^<style\\b[^>]*>([\\s\\S]*?)(<\\/style\\b[^>]*>)/i],[\"lang-in.tag\",/^(<\\/?[a-z][^<>]*>)/i]]),[\"default-markup\",\"htm\",\"html\",\"mxml\",\"xhtml\",\"xml\",\"xsl\"]);c(g([[F,/^[\\s]+/,null,\" \\t\\r\\n\"],[n,/^(?:\\\"[^\\\"]*\\\"?|\\'[^\\']*\\'?)/,null,\"\\\"'\"]],[[m,/^^<\\/?[a-z](?:[\\w.:-]*\\w)?|\\/?>$/i],[P,/^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i],[\"lang-uq.val\",/^=\\s*([^>\\'\\\"\\s]*(?:[^>\\'\\\"\\s\\/]|\\/(?=\\s)))/],[L,/^[=<>\\/]+/],[\"lang-js\",/^on\\w+\\s*=\\s*\\\"([^\\\"]+)\\\"/i],[\"lang-js\",/^on\\w+\\s*=\\s*\\'([^\\']+)\\'/i],[\"lang-js\",/^on\\w+\\s*=\\s*([^\\\"\\'>\\s]+)/i],[\"lang-css\",/^style\\s*=\\s*\\\"([^\\\"]+)\\\"/i],[\"lang-css\",/^style\\s*=\\s*\\'([^\\']+)\\'/i],[\"lang-css\",/^style\\s*=\\s*([^\\\"\\'>\\s]+)/i]]),[\"in.tag\"]);c(g([],[[n,/^[\\s\\S]+/]]),[\"uq.val\"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),[\"c\",\"cc\",\"cpp\",\"cxx\",\"cyc\",\"m\"]);c(i({keywords:\"null,true,false\"}),[\"json\"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),[\"cs\"]);c(i({keywords:x,cStyleComments:true}),[\"java\"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),[\"bsh\",\"csh\",\"sh\"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),[\"cv\",\"py\"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),[\"perl\",\"pl\",\"pm\"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),[\"rb\"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),[\"js\"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),[\"coffee\"]);c(g([],[[C,/^[\\s\\S]+/]]),[\"regex\"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if(\"console\" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement(\"PRE\");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y(\"pre\"),Y(\"code\"),Y(\"xmp\")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\\blang(?:uage)?-([\\w.]+)(?!\\S)/;var ae=/\\bprettyprint\\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf(\"prettyprint\")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&\"CODE\"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName===\"pre\"||ak.tagName===\"code\"||ak.tagName===\"xmp\")&&ak.className&&ak.className.indexOf(\"prettyprint\")>=0){al=true;break}}if(!al){var af=aj.className.match(/\\blinenums\\b(?::(\\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\\!--[\\s\\S]*?(?:-\\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],[\"lang-\",/^<\\?([\\s\\S]+?)(?:\\?>|$)/],[\"lang-\",/^<%([\\s\\S]+?)(?:%>|$)/],[\"lang-\",/^<xmp\\b[^>]*>([\\s\\S]+?)<\\/xmp\\b[^>]*>/i],[\"lang-handlebars\",/^<script\\b[^>]*type\\s*=\\s*['\"]?text\\/x-handlebars-template['\"]?\\b[^>]*>([\\s\\S]*?)(<\\/script\\b[^>]*>)/i],[\"lang-js\",/^<script\\b[^>]*>([\\s\\S]*?)(<\\/script\\b[^>]*>)/i],[\"lang-css\",/^<style\\b[^>]*>([\\s\\S]*?)(<\\/style\\b[^>]*>)/i],[\"lang-in.tag\",/^(<\\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\\s*[\\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\\s*[\\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\\s*[\\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),[\"handlebars\",\"hbs\"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \\t\\r\\n\\f]+/,null,\" \\t\\r\\n\\f\"]],[[PR.PR_STRING,/^\\\"(?:[^\\n\\r\\f\\\\\\\"]|\\\\(?:\\r\\n?|\\n|\\f)|\\\\[\\s\\S])*\\\"/,null],[PR.PR_STRING,/^\\'(?:[^\\n\\r\\f\\\\\\']|\\\\(?:\\r\\n?|\\n|\\f)|\\\\[\\s\\S])*\\'/,null],[\"lang-css-str\",/^url\\(([^\\)\\\"\\']*)\\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\\!important|@import|@page|@media|@charset|inherit)(?=[^\\-\\w]|$)/i,null],[\"lang-css-kw\",/^(-?(?:[_a-z]|(?:\\\\[0-9a-f]+ ?))(?:[_a-z0-9\\-]|\\\\(?:\\\\[0-9a-f]+ ?))*)\\s*:/i],[PR.PR_COMMENT,/^\\/\\*[^*]*\\*+(?:[^\\/*][^*]*\\*+)*\\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\\d+|\\d*\\.\\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\\\[\\da-f]+ ?))(?:[_a-z\\d\\-]|\\\\(?:\\\\[\\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\\s\\w\\'\\\"]+/]]),[\"css\"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\\\[\\da-f]+ ?))(?:[_a-z\\d\\-]|\\\\(?:\\\\[\\da-f]+ ?))*/i]]),[\"css-kw\"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\\)\\\"\\']+/]]),[\"css-str\"]);\n"
  },
  {
    "path": "coverage/sorter.js",
    "content": "var addSorting = (function () {\n    \"use strict\";\n    var cols,\n        currentSort = {\n            index: 0,\n            desc: false\n        };\n\n    // returns the summary table element\n    function getTable() { return document.querySelector('.coverage-summary'); }\n    // returns the thead element of the summary table\n    function getTableHeader() { return getTable().querySelector('thead tr'); }\n    // returns the tbody element of the summary table\n    function getTableBody() { return getTable().querySelector('tbody'); }\n    // returns the th element for nth column\n    function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; }\n\n    // loads all columns\n    function loadColumns() {\n        var colNodes = getTableHeader().querySelectorAll('th'),\n            colNode,\n            cols = [],\n            col,\n            i;\n\n        for (i = 0; i < colNodes.length; i += 1) {\n            colNode = colNodes[i];\n            col = {\n                key: colNode.getAttribute('data-col'),\n                sortable: !colNode.getAttribute('data-nosort'),\n                type: colNode.getAttribute('data-type') || 'string'\n            };\n            cols.push(col);\n            if (col.sortable) {\n                col.defaultDescSort = col.type === 'number';\n                colNode.innerHTML = colNode.innerHTML + '<span class=\"sorter\"></span>';\n            }\n        }\n        return cols;\n    }\n    // attaches a data attribute to every tr element with an object\n    // of data values keyed by column name\n    function loadRowData(tableRow) {\n        var tableCols = tableRow.querySelectorAll('td'),\n            colNode,\n            col,\n            data = {},\n            i,\n            val;\n        for (i = 0; i < tableCols.length; i += 1) {\n            colNode = tableCols[i];\n            col = cols[i];\n            val = colNode.getAttribute('data-value');\n            if (col.type === 'number') {\n                val = Number(val);\n            }\n            data[col.key] = val;\n        }\n        return data;\n    }\n    // loads all row data\n    function loadData() {\n        var rows = getTableBody().querySelectorAll('tr'),\n            i;\n\n        for (i = 0; i < rows.length; i += 1) {\n            rows[i].data = loadRowData(rows[i]);\n        }\n    }\n    // sorts the table using the data for the ith column\n    function sortByIndex(index, desc) {\n        var key = cols[index].key,\n            sorter = function (a, b) {\n                a = a.data[key];\n                b = b.data[key];\n                return a < b ? -1 : a > b ? 1 : 0;\n            },\n            finalSorter = sorter,\n            tableBody = document.querySelector('.coverage-summary tbody'),\n            rowNodes = tableBody.querySelectorAll('tr'),\n            rows = [],\n            i;\n\n        if (desc) {\n            finalSorter = function (a, b) {\n                return -1 * sorter(a, b);\n            };\n        }\n\n        for (i = 0; i < rowNodes.length; i += 1) {\n            rows.push(rowNodes[i]);\n            tableBody.removeChild(rowNodes[i]);\n        }\n\n        rows.sort(finalSorter);\n\n        for (i = 0; i < rows.length; i += 1) {\n            tableBody.appendChild(rows[i]);\n        }\n    }\n    // removes sort indicators for current column being sorted\n    function removeSortIndicators() {\n        var col = getNthColumn(currentSort.index),\n            cls = col.className;\n\n        cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');\n        col.className = cls;\n    }\n    // adds sort indicators for current column being sorted\n    function addSortIndicators() {\n        getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted';\n    }\n    // adds event listeners for all sorter widgets\n    function enableUI() {\n        var i,\n            el,\n            ithSorter = function ithSorter(i) {\n                var col = cols[i];\n\n                return function () {\n                    var desc = col.defaultDescSort;\n\n                    if (currentSort.index === i) {\n                        desc = !currentSort.desc;\n                    }\n                    sortByIndex(i, desc);\n                    removeSortIndicators();\n                    currentSort.index = i;\n                    currentSort.desc = desc;\n                    addSortIndicators();\n                };\n            };\n        for (i =0 ; i < cols.length; i += 1) {\n            if (cols[i].sortable) {\n                // add the click event handler on the th so users\n                // dont have to click on those tiny arrows\n                el = getNthColumn(i).querySelector('.sorter').parentElement;\n                if (el.addEventListener) {\n                    el.addEventListener('click', ithSorter(i));\n                } else {\n                    el.attachEvent('onclick', ithSorter(i));\n                }\n            }\n        }\n    }\n    // adds sorting functionality to the UI\n    return function () {\n        if (!getTable()) {\n            return;\n        }\n        cols = loadColumns();\n        loadData(cols);\n        addSortIndicators();\n        enableUI();\n    };\n})();\n\nwindow.addEventListener('load', addSorting);\n"
  },
  {
    "path": "luamin.js",
    "content": "/*! https://mths.be/luamin v1.0.4 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar luaparse = root.luaparse || require('luaparse');\n\tluaparse.defaultOptions.comments = false;\n\tluaparse.defaultOptions.scope = true;\n\tvar parse = luaparse.parse;\n\n\tvar regexAlphaUnderscore = /[a-zA-Z_]/;\n\tvar regexAlphaNumUnderscore = /[a-zA-Z0-9_]/;\n\tvar regexDigits = /[0-9]/;\n\n\t// http://www.lua.org/manual/5.2/manual.html#3.4.7\n\t// http://www.lua.org/source/5.2/lparser.c.html#priority\n\tvar PRECEDENCE = {\n\t\t'or': 1,\n\t\t'and': 2,\n\t\t'<': 3, '>': 3, '<=': 3, '>=': 3, '~=': 3, '==': 3,\n\t\t'..': 5,\n\t\t'+': 6, '-': 6, // binary -\n\t\t'*': 7, '/': 7, '%': 7,\n\t\t'unarynot': 8, 'unary#': 8, 'unary-': 8, // unary -\n\t\t'^': 10\n\t};\n\n\tvar IDENTIFIER_PARTS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a',\n\t\t'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',\n\t\t'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E',\n\t\t'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',\n\t\t'U', 'V', 'W', 'X', 'Y', 'Z', '_'];\n\tvar IDENTIFIER_PARTS_MAX = IDENTIFIER_PARTS.length - 1;\n\n\tvar each = function(array, fn) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\tvar max = length - 1;\n\t\twhile (++index < length) {\n\t\t\tfn(array[index], index < max);\n\t\t}\n\t};\n\n\tvar indexOf = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn index;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar hasOwnProperty = {}.hasOwnProperty;\n\tvar extend = function(destination, source) {\n\t\tvar key;\n\t\tif (source) {\n\t\t\tfor (key in source) {\n\t\t\t\tif (hasOwnProperty.call(source, key)) {\n\t\t\t\t\tdestination[key] = source[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn destination;\n\t};\n\n\tvar generateZeroes = function(length) {\n\t\tvar zero = '0';\n\t\tvar result = '';\n\t\tif (length < 1) {\n\t\t\treturn result;\n\t\t}\n\t\tif (length == 1) {\n\t\t\treturn zero;\n\t\t}\n\t\twhile (length) {\n\t\t\tif (length & 1) {\n\t\t\t\tresult += zero;\n\t\t\t}\n\t\t\tif (length >>= 1) {\n\t\t\t\tzero += zero;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\n\t// http://www.lua.org/manual/5.2/manual.html#3.1\n\tfunction isKeyword(id) {\n\t\tswitch (id.length) {\n\t\t\tcase 2:\n\t\t\t\treturn 'do' == id || 'if' == id || 'in' == id || 'or' == id;\n\t\t\tcase 3:\n\t\t\t\treturn 'and' == id || 'end' == id || 'for' == id || 'nil' == id ||\n\t\t\t\t\t'not' == id;\n\t\t\tcase 4:\n\t\t\t\treturn 'else' == id || 'goto' == id || 'then' == id || 'true' == id;\n\t\t\tcase 5:\n\t\t\t\treturn 'break' == id || 'false' == id || 'local' == id ||\n\t\t\t\t\t'until' == id || 'while' == id;\n\t\t\tcase 6:\n\t\t\t\treturn 'elseif' == id || 'repeat' == id || 'return' == id;\n\t\t\tcase 8:\n\t\t\t\treturn 'function' == id;\n\t\t}\n\t\treturn false;\n\t}\n\n\tvar currentIdentifier;\n\tvar identifierMap;\n\tvar identifiersInUse;\n\tvar generateIdentifier = function(originalName) {\n\t\t// Preserve `self` in methods\n\t\tif (originalName == 'self') {\n\t\t\treturn originalName;\n\t\t}\n\n\t\tif (hasOwnProperty.call(identifierMap, originalName)) {\n\t\t\treturn identifierMap[originalName];\n\t\t}\n\t\tvar length = currentIdentifier.length;\n\t\tvar position = length - 1;\n\t\tvar character;\n\t\tvar index;\n\t\twhile (position >= 0) {\n\t\t\tcharacter = currentIdentifier.charAt(position);\n\t\t\tindex = indexOf(IDENTIFIER_PARTS, character);\n\t\t\tif (index != IDENTIFIER_PARTS_MAX) {\n\t\t\t\tcurrentIdentifier = currentIdentifier.substring(0, position) +\n\t\t\t\t\tIDENTIFIER_PARTS[index + 1] + generateZeroes(length - (position + 1));\n\t\t\t\tif (\n\t\t\t\t\tisKeyword(currentIdentifier) ||\n\t\t\t\t\tindexOf(identifiersInUse, currentIdentifier) > -1\n\t\t\t\t) {\n\t\t\t\t\treturn generateIdentifier(originalName);\n\t\t\t\t}\n\t\t\t\tidentifierMap[originalName] = currentIdentifier;\n\t\t\t\treturn currentIdentifier;\n\t\t\t}\n\t\t\t--position;\n\t\t}\n\t\tcurrentIdentifier = 'a' + generateZeroes(length);\n\t\tif (indexOf(identifiersInUse, currentIdentifier) > -1) {\n\t\t\treturn generateIdentifier(originalName);\n\t\t}\n\t\tidentifierMap[originalName] = currentIdentifier;\n\t\treturn currentIdentifier;\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar joinStatements = function(a, b, separator) {\n\t\tseparator || (separator = ' ');\n\n\t\tvar lastCharA = a.slice(-1);\n\t\tvar firstCharB = b.charAt(0);\n\n\t\tif (lastCharA == '' || firstCharB == '') {\n\t\t\treturn a + b;\n\t\t}\n\t\tif (regexAlphaUnderscore.test(lastCharA)) {\n\t\t\tif (regexAlphaNumUnderscore.test(firstCharB)) {\n\t\t\t\t// e.g. `while` + `1`\n\t\t\t\t// e.g. `local a` + `local b`\n\t\t\t\treturn a + separator + b;\n\t\t\t} else {\n\t\t\t\t// e.g. `not` + `(2>3 or 3<2)`\n\t\t\t\t// e.g. `x` + `^`\n\t\t\t\treturn a + b;\n\t\t\t}\n\t\t}\n\t\tif (regexDigits.test(lastCharA)) {\n\t\t\tif (\n\t\t\t\tfirstCharB == '(' ||\n\t\t\t\t!(firstCharB == '.' ||\n\t\t\t\tregexAlphaUnderscore.test(firstCharB))\n\t\t\t) {\n\t\t\t\t// e.g. `1` + `+`\n\t\t\t\t// e.g. `1` + `==`\n\t\t\t\treturn a + b;\n\t\t\t} else {\n\t\t\t\t// e.g. `1` + `..`\n\t\t\t\t// e.g. `1` + `and`\n\t\t\t\treturn a + separator + b;\n\t\t\t}\n\t\t}\n\t\tif (lastCharA == firstCharB && lastCharA == '-') {\n\t\t\t// e.g. `1-` + `-2`\n\t\t\treturn a + separator + b;\n\t\t}\n\t\tvar secondLastCharA = a.slice(-2, -1);\n\t\tif (lastCharA == '.' && secondLastCharA != '.' && regexAlphaNumUnderscore.test(firstCharB)) {\n\t\t\t// e.g. `1.` + `print`\n\t\t\treturn a + separator + b;\n\t\t}\n\t\treturn a + b;\n\t};\n\n\tvar formatBase = function(base) {\n\t\tvar result = '';\n\t\tvar type = base.type;\n\t\tvar needsParens = base.inParens && (\n\t\t\ttype == 'CallExpression' ||\n\t\t\ttype == 'BinaryExpression' ||\n\t\t\ttype == 'FunctionDeclaration' ||\n\t\t\ttype == 'TableConstructorExpression' ||\n\t\t\ttype == 'LogicalExpression' ||\n\t\t\ttype == 'StringLiteral'\n\t\t);\n\t\tif (needsParens) {\n\t\t\tresult += '(';\n\t\t}\n\t\tresult += formatExpression(base);\n\t\tif (needsParens) {\n\t\t\tresult += ')';\n\t\t}\n\t\treturn result;\n\t};\n\n\tvar formatExpression = function(expression, options) {\n\n\t\toptions = extend({\n\t\t\t'precedence': 0,\n\t\t\t'preserveIdentifiers': false\n\t\t}, options);\n\n\t\tvar result = '';\n\t\tvar currentPrecedence;\n\t\tvar associativity;\n\t\tvar operator;\n\n\t\tvar expressionType = expression.type;\n\n\t\tif (expressionType == 'Identifier') {\n\n\t\t\tresult = expression.isLocal && !options.preserveIdentifiers\n\t\t\t\t? generateIdentifier(expression.name)\n\t\t\t\t: expression.name;\n\n\t\t} else if (\n\t\t\texpressionType == 'StringLiteral' ||\n\t\t\texpressionType == 'NumericLiteral' ||\n\t\t\texpressionType == 'BooleanLiteral' ||\n\t\t\texpressionType == 'NilLiteral' ||\n\t\t\texpressionType == 'VarargLiteral'\n\t\t) {\n\n\t\t\tresult = expression.raw;\n\n\t\t} else if (\n\t\t\texpressionType == 'LogicalExpression' ||\n\t\t\texpressionType == 'BinaryExpression'\n\t\t) {\n\n\t\t\t// If an expression with precedence x\n\t\t\t// contains an expression with precedence < x,\n\t\t\t// the inner expression must be wrapped in parens.\n\t\t\toperator = expression.operator;\n\t\t\tcurrentPrecedence = PRECEDENCE[operator];\n\t\t\tassociativity = 'left';\n\n\t\t\tresult = formatExpression(expression.left, {\n\t\t\t\t'precedence': currentPrecedence,\n\t\t\t\t'direction': 'left',\n\t\t\t\t'parent': operator\n\t\t\t});\n\t\t\tresult = joinStatements(result, operator);\n\t\t\tresult = joinStatements(result, formatExpression(expression.right, {\n\t\t\t\t'precedence': currentPrecedence,\n\t\t\t\t'direction': 'right',\n\t\t\t\t'parent': operator\n\t\t\t}));\n\n\t\t\tif (operator == '^' || operator == '..') {\n\t\t\t\tassociativity = \"right\";\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tcurrentPrecedence < options.precedence ||\n\t\t\t\t(\n\t\t\t\t\tcurrentPrecedence == options.precedence &&\n\t\t\t\t\tassociativity != options.direction &&\n\t\t\t\t\toptions.parent != '+' &&\n\t\t\t\t\t!(options.parent == '*' && (operator == '/' || operator == '*'))\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// The most simple case here is that of\n\t\t\t\t// protecting the parentheses on the RHS of\n\t\t\t\t// `1 - (2 - 3)` but deleting them from `(1 - 2) - 3`.\n\t\t\t\t// This is generally the right thing to do. The\n\t\t\t\t// semantics of `+` are special however: `1 + (2 - 3)`\n\t\t\t\t// == `1 + 2 - 3`. `-` and `+` are the only two operators\n\t\t\t\t// who share their precedence level. `*` also can\n\t\t\t\t// commute in such a way with `/`, but not with `%`\n\t\t\t\t// (all three share a precedence). So we test for\n\t\t\t\t// all of these conditions and avoid emitting\n\t\t\t\t// parentheses in the cases where we don’t have to.\n\t\t\t\tresult = '(' + result + ')';\n\t\t\t}\n\n\t\t} else if (expressionType == 'UnaryExpression') {\n\n\t\t\toperator = expression.operator;\n\t\t\tcurrentPrecedence = PRECEDENCE['unary' + operator];\n\n\t\t\tresult = joinStatements(\n\t\t\t\toperator,\n\t\t\t\tformatExpression(expression.argument, {\n\t\t\t\t\t'precedence': currentPrecedence\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tif (\n\t\t\t\tcurrentPrecedence < options.precedence &&\n\t\t\t\t// In principle, we should parenthesize the RHS of an\n\t\t\t\t// expression like `3^-2`, because `^` has higher precedence\n\t\t\t\t// than unary `-` according to the manual. But that is\n\t\t\t\t// misleading on the RHS of `^`, since the parser will\n\t\t\t\t// always try to find a unary operator regardless of\n\t\t\t\t// precedence.\n\t\t\t\t!(\n\t\t\t\t\t(options.parent == '^') &&\n\t\t\t\t\toptions.direction == 'right'\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tresult = '(' + result + ')';\n\t\t\t}\n\n\t\t} else if (expressionType == 'CallExpression') {\n\n\t\t\tresult = formatBase(expression.base) + '(';\n\n\t\t\teach(expression.arguments, function(argument, needsComma) {\n\t\t\t\tresult += formatExpression(argument);\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n\t\t\tresult += ')';\n\n\t\t} else if (expressionType == 'TableCallExpression') {\n\n\t\t\tresult = formatExpression(expression.base) +\n\t\t\t\tformatExpression(expression.arguments);\n\n\t\t} else if (expressionType == 'StringCallExpression') {\n\n\t\t\tresult = formatExpression(expression.base) +\n\t\t\t\tformatExpression(expression.argument);\n\n\t\t} else if (expressionType == 'IndexExpression') {\n\n\t\t\tresult = formatBase(expression.base) + '[' +\n\t\t\t\tformatExpression(expression.index) + ']';\n\n\t\t} else if (expressionType == 'MemberExpression') {\n\n\t\t\tresult = formatBase(expression.base) + expression.indexer +\n\t\t\t\tformatExpression(expression.identifier, {\n\t\t\t\t\t'preserveIdentifiers': true\n\t\t\t\t});\n\n\t\t} else if (expressionType == 'FunctionDeclaration') {\n\n\t\t\tresult = 'function(';\n\t\t\tif (expression.parameters.length) {\n\t\t\t\teach(expression.parameters, function(parameter, needsComma) {\n\t\t\t\t\t// `Identifier`s have a `name`, `VarargLiteral`s have a `value`\n\t\t\t\t\tresult += parameter.name\n\t\t\t\t\t\t? generateIdentifier(parameter.name)\n\t\t\t\t\t\t: parameter.value;\n\t\t\t\t\tif (needsComma) {\n\t\t\t\t\t\tresult += ',';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tresult += ')';\n\t\t\tresult = joinStatements(result, formatStatementList(expression.body));\n\t\t\tresult = joinStatements(result, 'end');\n\n\t\t} else if (expressionType == 'TableConstructorExpression') {\n\n\t\t\tresult = '{';\n\n\t\t\teach(expression.fields, function(field, needsComma) {\n\t\t\t\tif (field.type == 'TableKey') {\n\t\t\t\t\tresult += '[' + formatExpression(field.key) + ']=' +\n\t\t\t\t\t\tformatExpression(field.value);\n\t\t\t\t} else if (field.type == 'TableValue') {\n\t\t\t\t\tresult += formatExpression(field.value);\n\t\t\t\t} else { // at this point, `field.type == 'TableKeyString'`\n\t\t\t\t\tresult += formatExpression(field.key, {\n\t\t\t\t\t\t// TODO: keep track of nested scopes (#18)\n\t\t\t\t\t\t'preserveIdentifiers': true\n\t\t\t\t\t}) + '=' + formatExpression(field.value);\n\t\t\t\t}\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tresult += '}';\n\n\t\t} else {\n\n\t\t\tthrow TypeError('Unknown expression type: `' + expressionType + '`');\n\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tvar formatStatementList = function(body) {\n\t\tvar result = '';\n\t\teach(body, function(statement) {\n\t\t\tresult = joinStatements(result, formatStatement(statement), ';');\n\t\t});\n\t\treturn result;\n\t};\n\n\tvar formatStatement = function(statement) {\n\t\tvar result = '';\n\t\tvar statementType = statement.type;\n\n\t\tif (statementType == 'AssignmentStatement') {\n\n\t\t\t// left-hand side\n\t\t\teach(statement.variables, function(variable, needsComma) {\n\t\t\t\tresult += formatExpression(variable);\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// right-hand side\n\t\t\tresult += '=';\n\t\t\teach(statement.init, function(init, needsComma) {\n\t\t\t\tresult += formatExpression(init);\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (statementType == 'LocalStatement') {\n\n\t\t\tresult = 'local ';\n\n\t\t\t// left-hand side\n\t\t\teach(statement.variables, function(variable, needsComma) {\n\t\t\t\t// Variables in a `LocalStatement` are always local, duh\n\t\t\t\tresult += generateIdentifier(variable.name);\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// right-hand side\n\t\t\tif (statement.init.length) {\n\t\t\t\tresult += '=';\n\t\t\t\teach(statement.init, function(init, needsComma) {\n\t\t\t\t\tresult += formatExpression(init);\n\t\t\t\t\tif (needsComma) {\n\t\t\t\t\t\tresult += ',';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else if (statementType == 'CallStatement') {\n\n\t\t\tresult = formatExpression(statement.expression);\n\n\t\t} else if (statementType == 'IfStatement') {\n\n\t\t\tresult = joinStatements(\n\t\t\t\t'if',\n\t\t\t\tformatExpression(statement.clauses[0].condition)\n\t\t\t);\n\t\t\tresult = joinStatements(result, 'then');\n\t\t\tresult = joinStatements(\n\t\t\t\tresult,\n\t\t\t\tformatStatementList(statement.clauses[0].body)\n\t\t\t);\n\t\t\teach(statement.clauses.slice(1), function(clause) {\n\t\t\t\tif (clause.condition) {\n\t\t\t\t\tresult = joinStatements(result, 'elseif');\n\t\t\t\t\tresult = joinStatements(result, formatExpression(clause.condition));\n\t\t\t\t\tresult = joinStatements(result, 'then');\n\t\t\t\t} else {\n\t\t\t\t\tresult = joinStatements(result, 'else');\n\t\t\t\t}\n\t\t\t\tresult = joinStatements(result, formatStatementList(clause.body));\n\t\t\t});\n\t\t\tresult = joinStatements(result, 'end');\n\n\t\t} else if (statementType == 'WhileStatement') {\n\n\t\t\tresult = joinStatements('while', formatExpression(statement.condition));\n\t\t\tresult = joinStatements(result, 'do');\n\t\t\tresult = joinStatements(result, formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'end');\n\n\t\t} else if (statementType == 'DoStatement') {\n\n\t\t\tresult = joinStatements('do', formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'end');\n\n\t\t} else if (statementType == 'ReturnStatement') {\n\n\t\t\tresult = 'return';\n\n\t\t\teach(statement.arguments, function(argument, needsComma) {\n\t\t\t\tresult = joinStatements(result, formatExpression(argument));\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (statementType == 'BreakStatement') {\n\n\t\t\tresult = 'break';\n\n\t\t} else if (statementType == 'RepeatStatement') {\n\n\t\t\tresult = joinStatements('repeat', formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'until');\n\t\t\tresult = joinStatements(result, formatExpression(statement.condition))\n\n\t\t} else if (statementType == 'FunctionDeclaration') {\n\n\t\t\tresult = (statement.isLocal ? 'local ' : '') + 'function ';\n\t\t\tresult += formatExpression(statement.identifier);\n\t\t\tresult += '(';\n\n\t\t\tif (statement.parameters.length) {\n\t\t\t\teach(statement.parameters, function(parameter, needsComma) {\n\t\t\t\t\t// `Identifier`s have a `name`, `VarargLiteral`s have a `value`\n\t\t\t\t\tresult += parameter.name\n\t\t\t\t\t\t? generateIdentifier(parameter.name)\n\t\t\t\t\t\t: parameter.value;\n\t\t\t\t\tif (needsComma) {\n\t\t\t\t\t\tresult += ',';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tresult += ')';\n\t\t\tresult = joinStatements(result, formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'end');\n\n\t\t} else if (statementType == 'ForGenericStatement') {\n\t\t\t// see also `ForNumericStatement`\n\n\t\t\tresult = 'for ';\n\n\t\t\teach(statement.variables, function(variable, needsComma) {\n\t\t\t\t// The variables in a `ForGenericStatement` are always local\n\t\t\t\tresult += generateIdentifier(variable.name);\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tresult += ' in';\n\n\t\t\teach(statement.iterators, function(iterator, needsComma) {\n\t\t\t\tresult = joinStatements(result, formatExpression(iterator));\n\t\t\t\tif (needsComma) {\n\t\t\t\t\tresult += ',';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tresult = joinStatements(result, 'do');\n\t\t\tresult = joinStatements(result, formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'end');\n\n\t\t} else if (statementType == 'ForNumericStatement') {\n\n\t\t\t// The variables in a `ForNumericStatement` are always local\n\t\t\tresult = 'for ' + generateIdentifier(statement.variable.name) + '=';\n\t\t\tresult += formatExpression(statement.start) + ',' +\n\t\t\t\tformatExpression(statement.end);\n\n\t\t\tif (statement.step) {\n\t\t\t\tresult += ',' + formatExpression(statement.step);\n\t\t\t}\n\n\t\t\tresult = joinStatements(result, 'do');\n\t\t\tresult = joinStatements(result, formatStatementList(statement.body));\n\t\t\tresult = joinStatements(result, 'end');\n\n\t\t} else if (statementType == 'LabelStatement') {\n\n\t\t\t// The identifier names in a `LabelStatement` can safely be renamed\n\t\t\tresult = '::' + generateIdentifier(statement.label.name) + '::';\n\n\t\t} else if (statementType == 'GotoStatement') {\n\n\t\t\t// The identifier names in a `GotoStatement` can safely be renamed\n\t\t\tresult = 'goto ' + generateIdentifier(statement.label.name);\n\n\t\t} else {\n\n\t\t\tthrow TypeError('Unknown statement type: `' + statementType + '`');\n\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tvar minify = function(argument) {\n\t\t// `argument` can be a Lua code snippet (string)\n\t\t// or a luaparse-compatible AST (object)\n\t\tvar ast = typeof argument == 'string'\n\t\t\t? parse(argument)\n\t\t\t: argument;\n\n\t\t// (Re)set temporary identifier values\n\t\tidentifierMap = {};\n\t\tidentifiersInUse = [];\n\t\t// This is a shortcut to help generate the first identifier (`a`) faster\n\t\tcurrentIdentifier = '9';\n\n\t\t// Make sure global variable names aren't renamed\n\t\tif (ast.globals) {\n\t\t\teach(ast.globals, function(object) {\n\t\t\t\tvar name = object.name;\n\t\t\t\tidentifierMap[name] = name;\n\t\t\t\tidentifiersInUse.push(name);\n\t\t\t});\n\t\t} else {\n\t\t\tthrow Error('Missing required AST property: `globals`');\n\t\t}\n\n\t\treturn formatStatementList(ast.body);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar luamin = {\n\t\t'version': '1.0.4',\n\t\t'minify': minify\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn luamin;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = luamin;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\textend(freeExports, luamin);\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.luamin = luamin;\n\t}\n\n}(this));\n"
  },
  {
    "path": "man/luamin.1",
    "content": ".Dd April 19, 2013\n.Dt luamin 1\n.Sh NAME\n.Nm luamin\n.Nd minify Lua code\n.Sh SYNOPSIS\n.Nm\n.Op Fl c | -code Ar snippet\n.br\n.Op Fl f | -file Ar file\n.br\n.Op Fl a | -ast Ar ast\n.br\n.Op Fl v | -version\n.br\n.Op Fl h | -help\n.Sh DESCRIPTION\n.Nm\nis a Lua minifier written in JavaScript. It can compress Lua code snippets, or even Abstract Syntax Trees that represent Lua programs.\n.Sh OPTIONS\n.Bl -ohang -offset\n.It Sy \"-v, --version\"\nPrint luamin's version.\n.It Sy \"-h, --help\"\nShow the help screen.\n.It Sy \"-c, --code <snippet>\"\nPrint minified version of the given Lua snippet.\n.It Sy \"-f, --file <file>\"\nPrint minified version of the given Lua file.\n.It Sy \"-a, --ast <ast>\"\nPrint minified version of the given Lua AST. The AST must be compatible with\n.Xr luaparse 1\nand must contain a\n.Va globals\nproperty. Such ASTs can be generated using\n.Xr luaparse 1\nby enabling the\n.Va scope\noption.\n.El\n.Sh EXIT STATUS\nThe\n.Nm luamin\nutility exits with one of the following values:\n.Pp\n.Bl -tag -width flag -compact\n.It Li 0\n.Nm\nsuccessfully minified the Lua code and printed the result.\n.It Li 1\n.Nm\nwasn't instructed to minify any code (for example, the\n.Ar --help\nflag was set); or, an error occurred.\n.El\n.Sh EXAMPLES\n.Bl -ohang -offset\n.It Sy \"luamin -c 'a = ((1 + 2) - 3) * (4 / (5 ^ 6))'\"\nPrint a minified version of the given Lua code snippet.\n.It Sy \"luamin -f foo.lua\"\nRead the Lua code in the file\n.Ar foo.lua\nand print a minified version.\n.It Sy echo\\ 'a\\ =\\ \"foo\"\\ ..\\ \"bar\"'\\ |\\ luamin\\ -c\nPrint a minified version of the Lua snippet that gets piped in.\n.It Sy \"luaparse --scope 'a = 42' | luamin -a\"\nPrint a minified version of the Lua code that corresponds to the given Abstract Syntax Tree that gets piped in.\n.El\n.Sh SEE ALSO\n.Xr luaparse 1\n.Sh BUGS\nluamin's bug tracker is located at <https://github.com/mathiasbynens/luamin/issues>.\n.Sh AUTHOR\nMathias Bynens <https://mathiasbynens.be/>\n.Sh WWW\n<https://mths.be/luamin>\n"
  },
  {
    "path": "package.json",
    "content": "{\n\t\"name\": \"luamin\",\n\t\"version\": \"1.0.4\",\n\t\"description\": \"A Lua minifier written in JavaScript\",\n\t\"homepage\": \"https://mths.be/luamin\",\n\t\"main\": \"luamin.js\",\n\t\"bin\": \"bin/luamin\",\n\t\"keywords\": [\n\t\t\"lua\",\n\t\t\"minify\",\n\t\t\"minifier\"\n\t],\n\t\"license\": \"MIT\",\n\t\"author\": {\n\t\t\"name\": \"Mathias Bynens\",\n\t\t\"url\": \"https://mathiasbynens.be/\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/mathiasbynens/luamin.git\"\n\t},\n\t\"bugs\": \"https://github.com/mathiasbynens/luamin/issues\",\n\t\"files\": [\n\t\t\"LICENSE-MIT.txt\",\n\t\t\"luamin.js\",\n\t\t\"bin/\",\n\t\t\"man/\"\n\t],\n\t\"directories\": {\n\t\t\"bin\": \"bin\",\n\t\t\"man\": \"man\",\n\t\t\"test\": \"tests\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"node tests/tests.js\"\n\t},\n\t\"dependencies\": {\n\t\t\"luaparse\": \"^0.2.1\"\n\t},\n\t\"devDependencies\": {\n\t\t\"grunt\": \"^0.4.4\",\n\t\t\"grunt-shell\": \"^1.1.2\",\n\t\t\"istanbul\": \"^0.4.2\",\n\t\t\"qunit-extras\": \"^1.4.5\",\n\t\t\"qunitjs\": \"~1.11.0\",\n\t\t\"requirejs\": \"^2.1.22\"\n\t}\n}\n"
  },
  {
    "path": "tests/index.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>luamin test suite</title>\n\t\t<link rel=\"stylesheet\" href=\"../node_modules/qunitjs/qunit/qunit.css\">\n\t</head>\n\t<body>\n\t\t<div id=\"qunit\"></div>\n\t\t<script src=\"../node_modules/qunitjs/qunit/qunit.js\"></script>\n\t\t<script src=\"../node_modules/luaparse/luaparse.js\"></script>\n\t\t<script src=\"../luamin.js\"></script>\n\t\t<script>\n\t\t\t// populate `QUnit.urlParams`\n\t\t\tQUnit.urlParams.norequire = /[?&]norequire=true(?:&|$)/.test(location.search);\n\n\t\t\t// load tests.js if not using require.js\n\t\t\tdocument.write(QUnit.urlParams.norequire\n\t\t\t\t? '<script src=\"tests.js\"><\\/script>'\n\t\t\t\t: '<script src=\"../node_modules/requirejs/require.js\"><\\/script>'\n\t\t\t);\n\t\t</script>\n\t\t<script>\n\t\t\twindow.require && require({\n\t\t\t\t'baseUrl': '../node_modules/requirejs/',\n\t\t\t\t'urlArgs': 't=' + (+new Date),\n\t\t\t\t'paths': {\n\t\t\t\t\t'luaparse': '../luaparse/luaparse',\n\t\t\t\t\t'luamin': '../../luamin'\n\t\t\t\t}\n\t\t\t},\n\t\t\t['luaparse', 'luamin'], function(luaparse, luamin) {\n\t\t\t\trequire(['tests.js']);\n\t\t\t});\n\t\t</script>\n\t</body>\n</html>\n"
  },
  {
    "path": "tests/tests.js",
    "content": "(function(root) {\n\t'use strict';\n\n\tvar noop = Function.prototype;\n\n\tvar load = (typeof require == 'function' && !(root.define && define.amd)) ?\n\t\trequire :\n\t\t(!root.document && root.java && root.load) || noop;\n\n\tvar QUnit = (function() {\n\t\treturn root.QUnit || (\n\t\t\troot.addEventListener || (root.addEventListener = noop),\n\t\t\troot.setTimeout || (root.setTimeout = noop),\n\t\t\troot.QUnit = load('../node_modules/qunitjs/qunit/qunit.js') || root.QUnit,\n\t\t\taddEventListener === noop && delete root.addEventListener,\n\t\t\troot.QUnit\n\t\t);\n\t}());\n\n\tvar qe = load('../node_modules/qunit-extras/qunit-extras.js');\n\tif (qe) {\n\t\tqe.runInContext(root);\n\t}\n\n\t/** The `luaparse` utility function */\n\tvar luaparse = root.luaparse || (root.luaparse = (\n\t\tluaparse = load('../node_modules/luaparse/luaparse.js') || root.luaparse,\n\t\tluaparse = luaparse.luaparse || luaparse\n\t));\n\n\t/** The `luamin` function to test */\n\tvar luamin = root.luamin || (root.luamin = (\n\t\tluamin = load('../luamin.js') || root.luamin,\n\t\tluamin = luamin.luamin || luamin\n\t));\n\tvar minify = luamin.minify;\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar data = {\n\n\t\t// Assignments\n\t\t'Assignments': [\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a = 1, 2, 3',\n\t\t\t\t'minified': 'a=1,2,3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a, b, c = 1',\n\t\t\t\t'minified': 'a,b,c=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a, b, c = 1, 2, 3',\n\t\t\t\t'minified': 'a,b,c=1,2,3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + MemberExpression',\n\t\t\t\t'original': 'a.b = 1',\n\t\t\t\t'minified': 'a.b=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + MemberExpression',\n\t\t\t\t'original': 'a.b.c = 1',\n\t\t\t\t'minified': 'a.b.c=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression',\n\t\t\t\t'original': 'a[b] = 1',\n\t\t\t\t'minified': 'a[b]=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression',\n\t\t\t\t'original': 'a[b][c] = 1',\n\t\t\t\t'minified': 'a[b][c]=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + MemberExpression + IndexExpression',\n\t\t\t\t'original': 'a.b[c] = 1',\n\t\t\t\t'minified': 'a.b[c]=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression + MemberExpression',\n\t\t\t\t'original': 'a[b].c = 1',\n\t\t\t\t'minified': 'a[b].c=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression',\n\t\t\t\t'original': 'a[b], a[c] = 1',\n\t\t\t\t'minified': 'a[b],a[c]=1'\n\t\t\t}\n\t\t],\n\n\t\t// Comments\n\t\t'Comments': [\n\t\t\t{\n\t\t\t\t'description': 'Comment',\n\t\t\t\t'original': '-- comment',\n\t\t\t\t'minified': ''\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Comment',\n\t\t\t\t'original': '-- comment\\n-- comment',\n\t\t\t\t'minified': ''\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Comment',\n\t\t\t\t'original': '--comment',\n\t\t\t\t'minified': ''\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Comment + line break + BreakStatement',\n\t\t\t\t'original': '-- comment\\nbreak',\n\t\t\t\t'minified': 'break'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'BreakStatement + Comment',\n\t\t\t\t'original': 'break-- comment',\n\t\t\t\t'minified': 'break'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Comment',\n\t\t\t\t'original': '--[[comment]]--',\n\t\t\t\t'minified': ''\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Comment + BreakStatement',\n\t\t\t\t'original': '--[[comment]]--\\nbreak',\n\t\t\t\t'minified': 'break'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Comment + BreakStatement',\n\t\t\t\t'original': '--[=[comment]=]--\\nbreak',\n\t\t\t\t'minified': 'break'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Comment + BreakStatement',\n\t\t\t\t'original': '--[===[comment\\n--[=[sub]=]--\\n]===]--\\nbreak',\n\t\t\t\t'minified': 'break'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Multi-line Comment',\n\t\t\t\t'original': '--[[comment\\nline two]]--',\n\t\t\t\t'minified': ''\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Multi-line Comment',\n\t\t\t\t'original': '--[[\\ncomment\\nline two\\n]]--',\n\t\t\t\t'minified': ''\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Comment + BreakStatement',\n\t\t\t\t'original': '--[==\\nbreak --]]--',\n\t\t\t\t'minified': 'break'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + Comment',\n\t\t\t\t'original': 'if true -- comment\\nthen end',\n\t\t\t\t'minified': 'if true then end'\n\t\t\t}\n\t\t],\n\n\t\t// Conditionals\n\t\t'Conditionals': [\n\t\t\t{\n\t\t\t\t'description': 'IfStatement',\n\t\t\t\t'original': 'if 1 then end',\n\t\t\t\t'minified': 'if 1 then end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + LocalStatement',\n\t\t\t\t'original': 'if 1 then local foo end',\n\t\t\t\t'minified': 'if 1 then local a end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + LocalStatement',\n\t\t\t\t'original': 'if 1 then local foo local bar end',\n\t\t\t\t'minified': 'if 1 then local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + LocalStatement',\n\t\t\t\t'original': 'if 1 then local foo; local bar; end',\n\t\t\t\t'minified': 'if 1 then local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + ElseClause',\n\t\t\t\t'original': 'if 1 then else end',\n\t\t\t\t'minified': 'if 1 then else end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement',\n\t\t\t\t'original': 'if 1 then end',\n\t\t\t\t'minified': 'if 1 then end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + ElseClause + LocalStatement',\n\t\t\t\t'original': 'if 1 then local foo else local bar end',\n\t\t\t\t'minified': 'if 1 then local a else local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + ElseClause + LocalStatement',\n\t\t\t\t'original': 'if 1 then local foo; else local bar; end',\n\t\t\t\t'minified': 'if 1 then local a else local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + ElseifClause + LocalStatement',\n\t\t\t\t'original': 'if 1 then local foo elseif 2 then local bar end',\n\t\t\t\t'minified': 'if 1 then local a elseif 2 then local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + ElseifClause + LocalStatement',\n\t\t\t\t'original': 'if 1 then local foo; elseif 2 then local bar; end',\n\t\t\t\t'minified': 'if 1 then local a elseif 2 then local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + ElseifClause',\n\t\t\t\t'original': 'if 1 then elseif 2 then else end',\n\t\t\t\t'minified': 'if 1 then elseif 2 then else end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Nested IfStatement',\n\t\t\t\t'original': 'if 1 then else if 2 then end end',\n\t\t\t\t'minified': 'if 1 then else if 2 then end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + ReturnStatement',\n\t\t\t\t'original': 'if 1 then return end',\n\t\t\t\t'minified': 'if 1 then return end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IfStatement + IfStatement',\n\t\t\t\t'original': 'if 1 then end; if 1 then end;',\n\t\t\t\t'minified': 'if 1 then end;if 1 then end'\n\t\t\t}\n\t\t],\n\n\t\t// DoStatement\n\t\t'DoStatement': [\n\t\t\t{\n\t\t\t\t'description': 'DoStatement + LocalStatement',\n\t\t\t\t'original': 'do local foo local bar end',\n\t\t\t\t'minified': 'do local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'DoStatement + LocalStatement',\n\t\t\t\t'original': 'do local foo; local bar; end',\n\t\t\t\t'minified': 'do local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'DoStatement + LocalStatement',\n\t\t\t\t'original': 'do local foo = 1 end',\n\t\t\t\t'minified': 'do local a=1 end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'DoStatement + DoStatement',\n\t\t\t\t'original': 'do do end end',\n\t\t\t\t'minified': 'do do end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'DoStatement + DoStatement',\n\t\t\t\t'original': 'do do end; end',\n\t\t\t\t'minified': 'do do end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'DoStatement + DoStatement + DoStatement',\n\t\t\t\t'original': 'do do do end end end',\n\t\t\t\t'minified': 'do do do end end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'DoStatement + DoStatement + DoStatement',\n\t\t\t\t'original': 'do do do end; end; end',\n\t\t\t\t'minified': 'do do do end end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'DoStatement + DoStatement + DoStatement + ReturnStatement',\n\t\t\t\t'original': 'do do do return end end end',\n\t\t\t\t'minified': 'do do do return end end end'\n\t\t\t}\n\t\t],\n\n\t\t// Expressions\n\t\t'Expressions': [\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a = {}',\n\t\t\t\t'minified': 'a={}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a = (a)',\n\t\t\t\t'minified': 'a=a'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a = (nil)',\n\t\t\t\t'minified': 'a=nil'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a = (true)',\n\t\t\t\t'minified': 'a=true'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a = (1)',\n\t\t\t\t'minified': 'a=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a = (\"foo\")',\n\t\t\t\t'minified': 'a=\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a = (\\'foo\\')',\n\t\t\t\t'minified': 'a=\\'foo\\''\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement',\n\t\t\t\t'original': 'a = ([[foo]])',\n\t\t\t\t'minified': 'a=[[foo]]'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + TableConstructorExpression',\n\t\t\t\t'original': 'a = ({})',\n\t\t\t\t'minified': 'a={}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + MemberExpression',\n\t\t\t\t'original': 'a = a.foo',\n\t\t\t\t'minified': 'a=a.foo'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression',\n\t\t\t\t'original': 'a = a[1]',\n\t\t\t\t'minified': 'a=a[1]'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression',\n\t\t\t\t'original': 'a = a[\"foo\"]',\n\t\t\t\t'minified': 'a=a[\"foo\"]'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression',\n\t\t\t\t'original': 'a = a[\\'foo\\']',\n\t\t\t\t'minified': 'a=a[\\'foo\\']'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression + IndexExpression',\n\t\t\t\t'original': 'a = a[b][c]',\n\t\t\t\t'minified': 'a=a[b][c]'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + MemberExpression + IndexExpression',\n\t\t\t\t'original': 'a = a.foo[c]',\n\t\t\t\t'minified': 'a=a.foo[c]'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression + MemberExpression',\n\t\t\t\t'original': 'a = a[b].c',\n\t\t\t\t'minified': 'a=a[b].c'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression',\n\t\t\t\t'original': 'a = (a)[b]',\n\t\t\t\t'minified': 'a=a[b]'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + MemberExpression',\n\t\t\t\t'original': 'a = (a).foo',\n\t\t\t\t'minified': 'a=a.foo'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + MemberExpression + CallExpression',\n\t\t\t\t'original': 'a = a.foo()',\n\t\t\t\t'minified': 'a=a.foo()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression + CallExpression',\n\t\t\t\t'original': 'a = a[b]()',\n\t\t\t\t'minified': 'a=a[b]()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + MemberExpression + CallExpression',\n\t\t\t\t'original': 'a = a:foo()',\n\t\t\t\t'minified': 'a=a:foo()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + CallExpression',\n\t\t\t\t'original': 'a = (a)()',\n\t\t\t\t'minified': 'a=a()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + MemberExpression + CallExpression',\n\t\t\t\t'original': 'a = (a).b()',\n\t\t\t\t'minified': 'a=a.b()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + IndexExpression + CallExpression',\n\t\t\t\t'original': 'a = (a)[b]()',\n\t\t\t\t'minified': 'a=a[b]()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + IndexExpression + BinaryExpression',\n\t\t\t\t'original': 'print((\"a\"..\"b\")[0])',\n\t\t\t\t'minified': 'print((\"a\"..\"b\")[0])'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + MemberExpression + CallExpression',\n\t\t\t\t'original': 'a = (a):b()',\n\t\t\t\t'minified': 'a=a:b()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + StringCallExpression',\n\t\t\t\t'original': 'a = a\"foo\"',\n\t\t\t\t'minified': 'a=a\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + StringCallExpression',\n\t\t\t\t'original': 'a = a\"fo\\\\\\\"o\"',\n\t\t\t\t'minified': 'a=a\"fo\\\\\\\"o\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + StringCallExpression',\n\t\t\t\t'original': 'a = a\\'foo\\'',\n\t\t\t\t'minified': 'a=a\\'foo\\''\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + TableCallExpression',\n\t\t\t\t'original': 'a = a{}',\n\t\t\t\t'minified': 'a=a{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + FunctionDeclaration',\n\t\t\t\t'original': 'a = function() end',\n\t\t\t\t'minified': 'a=function()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + FunctionDeclaration',\n\t\t\t\t'original': 'a = function(p) end',\n\t\t\t\t'minified': 'a=function(b)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + FunctionDeclaration',\n\t\t\t\t'original': 'a = function(p,q,r) end',\n\t\t\t\t'minified': 'a=function(b,c,d)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + FunctionDeclaration',\n\t\t\t\t'original': 'a = function(...) end',\n\t\t\t\t'minified': 'a=function(...)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + FunctionDeclaration',\n\t\t\t\t'original': 'a = function(p, ...) end',\n\t\t\t\t'minified': 'a=function(b,...)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Assignments + FunctionDeclaration',\n\t\t\t\t'original': 'a = function(p, q, r, ...) end',\n\t\t\t\t'minified': 'a=function(b,c,d,...)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + TableConstructorExpression',\n\t\t\t\t'original': 'a = {\\'-\\'}',\n\t\t\t\t'minified': 'a={\\'-\\'}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + TableConstructorExpression',\n\t\t\t\t'original': 'a = {\\'not\\'}',\n\t\t\t\t'minified': 'a={\\'not\\'}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'AssignmentStatement + TableConstructorExpression',\n\t\t\t\t'original': 'a = {not true}',\n\t\t\t\t'minified': 'a={not true}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'MemberExpression on a TableConstructorExpression',\n\t\t\t\t'original': 'x = ({}).y',\n\t\t\t\t'minified': 'x=({}).y'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'MemberExpression + CallExpression on a TableConstructorExpression',\n\t\t\t\t'original': 'x = ({ foo = print }):foo(\"test\")',\n\t\t\t\t'minified': 'x=({foo=print}):foo(\"test\")'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'MemberExpression + CallExpression on a TableConstructorExpression',\n\t\t\t\t'original': 'x = ({ foo = print }).foo(\"test\")',\n\t\t\t\t'minified': 'x=({foo=print}).foo(\"test\")'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LogicalExpression in parenthesis + MemberExpression + CallExpression',\n\t\t\t\t'original': '(x or y):f()',\n\t\t\t\t'minified': '(x or y):f()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'StringLiteral in parenthesis + MemberExpression + CallExpression',\n\t\t\t\t'original': '(\"abc\"):f()',\n\t\t\t\t'minified': '(\"abc\"):f()'\n\t\t\t}\n\t\t],\n\n\t\t// ForGenericStatement\n\t\t'ForGenericStatement': [\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement',\n\t\t\t\t'original': 'for a in b do end',\n\t\t\t\t'minified': 'for a in b do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement + LocalStatement',\n\t\t\t\t'original': 'for a in b do local a local b end',\n\t\t\t\t'minified': 'for a in b do local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement + LocalStatement',\n\t\t\t\t'original': 'for a in b do local a; local b; end',\n\t\t\t\t'minified': 'for a in b do local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement',\n\t\t\t\t'original': 'for a, b, c in p do end',\n\t\t\t\t'minified': 'for a,b,c in p do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement',\n\t\t\t\t'original': 'for a, b, c in p, q, r do end',\n\t\t\t\t'minified': 'for a,b,c in p,q,r do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement',\n\t\t\t\t'original': 'for a in 1 do end',\n\t\t\t\t'minified': 'for a in 1 do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement',\n\t\t\t\t'original': 'for a in true do end',\n\t\t\t\t'minified': 'for a in true do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement',\n\t\t\t\t'original': 'for a in \"foo\" do end',\n\t\t\t\t'minified': 'for a in\"foo\"do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement',\n\t\t\t\t'original': 'for a in b do break end',\n\t\t\t\t'minified': 'for a in b do break end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement + ReturnStatement',\n\t\t\t\t'original': 'for a in b do return end',\n\t\t\t\t'minified': 'for a in b do return end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement + DoStatement',\n\t\t\t\t'original': 'for a in b do do end end',\n\t\t\t\t'minified': 'for a in b do do end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement + DoStatement + BreakStatement',\n\t\t\t\t'original': 'for a in b do do break end end',\n\t\t\t\t'minified': 'for a in b do do break end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForGenericStatement + DoStatement + ReturnStatement',\n\t\t\t\t'original': 'for a in b do do return end end',\n\t\t\t\t'minified': 'for a in b do do return end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement',\n\t\t\t\t'original': 'for a = p, q do end',\n\t\t\t\t'minified': 'for a=p,q do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement',\n\t\t\t\t'original': 'for a = 1, 2 do end',\n\t\t\t\t'minified': 'for a=1,2 do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement + LocalStatement',\n\t\t\t\t'original': 'for a = 1, 2 do local a local b end',\n\t\t\t\t'minified': 'for a=1,2 do local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement + LocalStatement',\n\t\t\t\t'original': 'for a = 1, 2 do local a; local b; end',\n\t\t\t\t'minified': 'for a=1,2 do local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement',\n\t\t\t\t'original': 'for a = p, q, r do end',\n\t\t\t\t'minified': 'for a=p,q,r do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement',\n\t\t\t\t'original': 'for a = 1, 2, 3 do end',\n\t\t\t\t'minified': 'for a=1,2,3 do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement + BreakStatement',\n\t\t\t\t'original': 'for a = p, q do break end',\n\t\t\t\t'minified': 'for a=p,q do break end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement + ReturnStatement',\n\t\t\t\t'original': 'for a = 1, 2 do return end',\n\t\t\t\t'minified': 'for a=1,2 do return end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement + DoStatement',\n\t\t\t\t'original': 'for a = p, q do do end end',\n\t\t\t\t'minified': 'for a=p,q do do end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement + DoStatement + BreakStatement',\n\t\t\t\t'original': 'for a = p, q do do break end end',\n\t\t\t\t'minified': 'for a=p,q do do break end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ForNumericStatement + DoStatement + ReturnStatement',\n\t\t\t\t'original': 'for a = p, q do do return end end',\n\t\t\t\t'minified': 'for a=p,q do do return end end'\n\t\t\t}\n\t\t],\n\n\t\t// Function calls\n\t\t'CallStatement': [\n\t\t\t{\n\t\t\t\t'description': 'CallStatement',\n\t\t\t\t'original': 'a()',\n\t\t\t\t'minified': 'a()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement',\n\t\t\t\t'original': 'a(1)',\n\t\t\t\t'minified': 'a(1)'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement',\n\t\t\t\t'original': 'a(1, 2, 3)',\n\t\t\t\t'minified': 'a(1,2,3)'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'EnclosedCallStatement',\n\t\t\t\t'original': '(select(1, ...))',\n\t\t\t\t'minified': '(select(1,...))'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + CallExpression',\n\t\t\t\t'original': 'a()()',\n\t\t\t\t'minified': 'a()()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression',\n\t\t\t\t'original': 'a.b()',\n\t\t\t\t'minified': 'a.b()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + IndexExpression',\n\t\t\t\t'original': 'a[b]()',\n\t\t\t\t'minified': 'a[b]()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression',\n\t\t\t\t'original': 'a.b.c()',\n\t\t\t\t'minified': 'a.b.c()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + IndexExpression + IndexExpression',\n\t\t\t\t'original': 'a[b][c]()',\n\t\t\t\t'minified': 'a[b][c]()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + IndexExpression + MemberExpression',\n\t\t\t\t'original': 'a[b].c()',\n\t\t\t\t'minified': 'a[b].c()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + IndexExpression',\n\t\t\t\t'original': 'a.b[c]()',\n\t\t\t\t'minified': 'a.b[c]()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression',\n\t\t\t\t'original': 'a:b()',\n\t\t\t\t'minified': 'a:b()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + MemberExpression',\n\t\t\t\t'original': 'a.b:c()',\n\t\t\t\t'minified': 'a.b:c()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + IndexExpression + MemberExpression',\n\t\t\t\t'original': 'a[b]:c()',\n\t\t\t\t'minified': 'a[b]:c()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + MemberExpression',\n\t\t\t\t'original': 'a:b():c()',\n\t\t\t\t'minified': 'a:b():c()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + MemberExpression + IndexExpression + MemberExpression',\n\t\t\t\t'original': 'a:b().c[d]:e()',\n\t\t\t\t'minified': 'a:b().c[d]:e()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + IndexExpression + MemberExpression + MemberExpression + CallExpression',\n\t\t\t\t'original': 'a:b()[c].d:e()',\n\t\t\t\t'minified': 'a:b()[c].d:e()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement',\n\t\t\t\t'original': '(a)()',\n\t\t\t\t'minified': 'a()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement',\n\t\t\t\t'original': '(1)()',\n\t\t\t\t'minified': '1()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement',\n\t\t\t\t'original': '(\"foo\")()',\n\t\t\t\t'minified': '(\"foo\")()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement',\n\t\t\t\t'original': '(true)()',\n\t\t\t\t'minified': 'true()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + CallExpression',\n\t\t\t\t'original': '(a)()()',\n\t\t\t\t'minified': 'a()()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression',\n\t\t\t\t'original': '(a.b)()',\n\t\t\t\t'minified': 'a.b()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + IndexExpression',\n\t\t\t\t'original': '(a[b])()',\n\t\t\t\t'minified': 'a[b]()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression',\n\t\t\t\t'original': '(a).b()',\n\t\t\t\t'minified': 'a.b()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + IndexExpression',\n\t\t\t\t'original': '(a)[b]()',\n\t\t\t\t'minified': 'a[b]()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression',\n\t\t\t\t'original': '(a):b()',\n\t\t\t\t'minified': 'a:b()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + IndexExpression + MemberExpression + CallExpression',\n\t\t\t\t'original': '(a).b[c]:d()',\n\t\t\t\t'minified': 'a.b[c]:d()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + IndexExpression + MemberExpression + MemberExpression',\n\t\t\t\t'original': '(a)[b].c:d()',\n\t\t\t\t'minified': 'a[b].c:d()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + CallExpression + MemberExpression',\n\t\t\t\t'original': '(a):b():c()',\n\t\t\t\t'minified': 'a:b():c()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + CallExpression + MemberExpression + MemberExpression',\n\t\t\t\t'original': '(a):b().c[d]:e()',\n\t\t\t\t'minified': 'a:b().c[d]:e()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + CallExpression + IndexExpression + MemberExpression + MemberExpression',\n\t\t\t\t'original': '(a):b()[c].d:e()',\n\t\t\t\t'minified': 'a:b()[c].d:e()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + StringCallExpression',\n\t\t\t\t'original': 'a\"foo\"',\n\t\t\t\t'minified': 'a\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + StringCallExpression',\n\t\t\t\t'original': 'a[[foo]]',\n\t\t\t\t'minified': 'a[[foo]]'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + StringCallExpression',\n\t\t\t\t'original': 'a.b\"foo\"',\n\t\t\t\t'minified': 'a.b\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + IndexExpression + StringCallExpression',\n\t\t\t\t'original': 'a[b]\"foo\"',\n\t\t\t\t'minified': 'a[b]\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + StringCallExpression',\n\t\t\t\t'original': 'a:b\"foo\"',\n\t\t\t\t'minified': 'a:b\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + TableCallExpression',\n\t\t\t\t'original': 'a{}',\n\t\t\t\t'minified': 'a{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + TableCallExpression',\n\t\t\t\t'original': 'a.b{}',\n\t\t\t\t'minified': 'a.b{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + IndexExpression + TableCallExpression',\n\t\t\t\t'original': 'a[b]{}',\n\t\t\t\t'minified': 'a[b]{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + TableCallExpression',\n\t\t\t\t'original': 'a:b{}',\n\t\t\t\t'minified': 'a:b{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + StringCallExpression',\n\t\t\t\t'original': 'a()\"foo\"',\n\t\t\t\t'minified': 'a()\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + StringCallExpression',\n\t\t\t\t'original': 'a\"foo\"()',\n\t\t\t\t'minified': 'a\"foo\"()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + StringCallExpression + MemberExpression',\n\t\t\t\t'original': 'a\"foo\".b()',\n\t\t\t\t'minified': 'a\"foo\".b()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + StringCallExpression + IndexExpression',\n\t\t\t\t'original': 'a\"foo\"[b]()',\n\t\t\t\t'minified': 'a\"foo\"[b]()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + StringCallExpression + MemberExpression',\n\t\t\t\t'original': 'a\"foo\":c()',\n\t\t\t\t'minified': 'a\"foo\":c()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + StringCallExpression + StringCallExpression',\n\t\t\t\t'original': 'a\"foo\"\"bar\"',\n\t\t\t\t'minified': 'a\"foo\"\"bar\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + StringCallExpression + TableCallExpression',\n\t\t\t\t'original': 'a\"foo\"{}',\n\t\t\t\t'minified': 'a\"foo\"{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + StringCallExpression + MemberExpression + IndexExpression + MemberExpression + StringCallExpression',\n\t\t\t\t'original': '(a):b\"foo\".c[d]:e\"bar\"',\n\t\t\t\t'minified': 'a:b\"foo\".c[d]:e\"bar\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + StringCallExpression + IndexExpression + MemberExpression + MemberExpression + StringCallExpression',\n\t\t\t\t'original': '(a):b\"foo\"[c].d:e\"bar\"',\n\t\t\t\t'minified': 'a:b\"foo\"[c].d:e\"bar\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + TableConstructorExpression',\n\t\t\t\t'original': 'a(){}',\n\t\t\t\t'minified': 'a(){}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + TableConstructorExpression',\n\t\t\t\t'original': 'a{}()',\n\t\t\t\t'minified': 'a{}()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + TableConstructorExpression + MemberExpression',\n\t\t\t\t'original': 'a{}.b()',\n\t\t\t\t'minified': 'a{}.b()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + TableConstructorExpression + IndexExpression',\n\t\t\t\t'original': 'a{}[b]()',\n\t\t\t\t'minified': 'a{}[b]()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + TableConstructorExpression + MemberExpression',\n\t\t\t\t'original': 'a{}:c()',\n\t\t\t\t'minified': 'a{}:c()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + TableConstructorExpression + StringCallExpression',\n\t\t\t\t'original': 'a{}\"foo\"',\n\t\t\t\t'minified': 'a{}\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + TableConstructorExpression + TableConstructorExpression',\n\t\t\t\t'original': 'a{}{}',\n\t\t\t\t'minified': 'a{}{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + TableConstructorExpression + MemberExpression + MemberExpression + MemberExpression + TableConstructorExpression',\n\t\t\t\t'original': '(a):b{}.c[d]:e{}',\n\t\t\t\t'minified': 'a:b{}.c[d]:e{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallStatement + MemberExpression + TableConstructorExpression + IndexExpression + MemberExpression + MemberExpression + TableConstructorExpression',\n\t\t\t\t'original': '(a):b{}[c].d:e{}',\n\t\t\t\t'minified': 'a:b{}[c].d:e{}'\n\t\t\t}\n\t\t],\n\n\t\t// FunctionDeclaration\n\t\t'FunctionDeclaration': [\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration',\n\t\t\t\t'original': 'function a() end',\n\t\t\t\t'minified': 'function a()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration',\n\t\t\t\t'original': 'function a(p) end',\n\t\t\t\t'minified': 'function a(b)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration',\n\t\t\t\t'original': 'function a(p, q, r) end',\n\t\t\t\t'minified': 'function a(b,c,d)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration + ReturnStatement',\n\t\t\t\t'original': 'function a(p) return end',\n\t\t\t\t'minified': 'function a(b)return end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration + DoStatement',\n\t\t\t\t'original': 'function a(p) do end end',\n\t\t\t\t'minified': 'function a(b)do end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration + MemberExpression',\n\t\t\t\t'original': 'function a.b() end',\n\t\t\t\t'minified': 'function a.b()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration + MemberExpression',\n\t\t\t\t'original': 'function a.b.c.d() end',\n\t\t\t\t'minified': 'function a.b.c.d()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration + MemberExpression',\n\t\t\t\t'original': 'function a:b() end',\n\t\t\t\t'minified': 'function a:b()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration + MemberExpression',\n\t\t\t\t'original': 'function a.b.c:d() end',\n\t\t\t\t'minified': 'function a.b.c:d()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration',\n\t\t\t\t'original': 'function a(...) end',\n\t\t\t\t'minified': 'function a(...)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration',\n\t\t\t\t'original': 'function a(p, ...) end',\n\t\t\t\t'minified': 'function a(b,...)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration',\n\t\t\t\t'original': 'function a(p, q, r, ...) end',\n\t\t\t\t'minified': 'function a(b,c,d,...)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration + LocalStatement',\n\t\t\t\t'original': 'function a() local a local b end',\n\t\t\t\t'minified': 'function a()local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration + LocalStatement',\n\t\t\t\t'original': 'function a() local a; local b; end',\n\t\t\t\t'minified': 'function a()local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration + FunctionDeclaration',\n\t\t\t\t'original': 'function a() end; function a() end;',\n\t\t\t\t'minified': 'function a()end;function a()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'FunctionDeclaration + WhileStatement',\n\t\t\t\t'original': 'a = function() while true do end end',\n\t\t\t\t'minified': 'a=function()while true do end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'CallExpression + FunctionDeclaration lambda',\n\t\t\t\t'original': '(function() end)()',\n\t\t\t\t'minified': '(function()end)()'\n\t\t\t}\n\t\t],\n\n\t\t// Literals\n\t\t'Literals': [\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 1',\n\t\t\t\t'minified': 'a=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = .1',\n\t\t\t\t'minified': 'a=.1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 1.',\n\t\t\t\t'minified': 'a=1.'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral + Any Statement',\n\t\t\t\t'original': 'a = 1.;b=2',\n\t\t\t\t'minified': 'a=1.;b=2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 1.1',\n\t\t\t\t'minified': 'a=1.1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 10.1',\n\t\t\t\t'minified': 'a=10.1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 1e1',\n\t\t\t\t'minified': 'a=1e1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 1E1',\n\t\t\t\t'minified': 'a=1E1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 1e+9',\n\t\t\t\t'minified': 'a=1e+9'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 1e-1',\n\t\t\t\t'minified': 'a=1e-1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 0xf',\n\t\t\t\t'minified': 'a=0xf'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 0xf.',\n\t\t\t\t'minified': 'a=0xf.'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 0xf.3',\n\t\t\t\t'minified': 'a=0xf.3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 0xfp1',\n\t\t\t\t'minified': 'a=0xfp1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 0xfp+1',\n\t\t\t\t'minified': 'a=0xfp+1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 0xfp-1',\n\t\t\t\t'minified': 'a=0xfp-1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 0xFP+9',\n\t\t\t\t'minified': 'a=0xFP+9'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral',\n\t\t\t\t'original': 'a = 1 .. 3 .. -2',\n\t\t\t\t'minified': 'a=1 ..3 ..-2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NumericLiteral + StringLiteral',\n\t\t\t\t'original': 'a = 1 .. \"bar\"',\n\t\t\t\t'minified': 'a=1 ..\"bar\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'StringLiteral',\n\t\t\t\t'original': 'a = \\'bar\\'',\n\t\t\t\t'minified': 'a=\\'bar\\''\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'StringLiteral',\n\t\t\t\t'original': 'a = \"bar\"',\n\t\t\t\t'minified': 'a=\"bar\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'StringLiteral',\n\t\t\t\t'original': 'a = [[bar]]',\n\t\t\t\t'minified': 'a=[[bar]]'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'NilLiteral',\n\t\t\t\t'original': 'a = nil',\n\t\t\t\t'minified': 'a=nil'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'BooleanLiteral',\n\t\t\t\t'original': 'a = true',\n\t\t\t\t'minified': 'a=true'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'BooleanLiteral',\n\t\t\t\t'original': 'a = false',\n\t\t\t\t'minified': 'a=false'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'VarargLiteral',\n\t\t\t\t'original': 'a = ...',\n\t\t\t\t'minified': 'a=...'\n\t\t\t}\n\t\t],\n\n\t\t// Escape sequences\n\t\t'Escape sequences': [\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': 'a = \"bar\\\\tbaz\"',\n\t\t\t\t'minified': 'a=\"bar\\\\tbaz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': 'a = \"bar\\\\\\\\tbaz\"',\n\t\t\t\t'minified': 'a=\"bar\\\\\\\\tbaz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': 'a = \"bar\\\\\\\\nbaz\"',\n\t\t\t\t'minified': 'a=\"bar\\\\\\\\nbaz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': 'a = \"bar\\\\\\\\rbaz\"',\n\t\t\t\t'minified': 'a=\"bar\\\\\\\\rbaz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': 'a = \"bar\\\\80baz\"',\n\t\t\t\t'minified': 'a=\"bar\\\\80baz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': 'a = \"bar\\\\800\\\\0baz\"',\n\t\t\t\t'minified': 'a=\"bar\\\\800\\\\0baz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': 'a = \"bar\\\\\\\\z   baz\"',\n\t\t\t\t'minified': 'a=\"bar\\\\\\\\z   baz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': 'a = \"bar\\\\\\\\f\\\\\\\\v\\\\bbaz\"',\n\t\t\t\t'minified': 'a=\"bar\\\\\\\\f\\\\\\\\v\\\\bbaz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': 'a = \"bar\\\\f\\\\v\\\\bbaz\"',\n\t\t\t\t'minified': 'a=\"bar\\\\f\\\\v\\\\bbaz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': 'a = [[bar\\\\f\\\\v\\\\bbaz]]',\n\t\t\t\t'minified': 'a=[[bar\\\\f\\\\v\\\\bbaz]]'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': \"c = '\\\\\\\\'\",\n\t\t\t\t'minified': \"c='\\\\\\\\'\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': \"c = '\\\\\\''\",\n\t\t\t\t'minified': \"c='\\\\\\''\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': \"c = '\\\\123\",\n\t\t\t\t'minified': \"c='\\\\123\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': \"c = '\\\\x23\",\n\t\t\t\t'minified': \"c='\\\\x23\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'String escape sequence',\n\t\t\t\t'original': \"c = '\\\\xx'\",\n\t\t\t\t'minified': \"c='\\\\xx'\"\n\t\t\t}\n\t\t],\n\n\t\t// LocalStatement\n\t\t'LocalStatement': [\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local a',\n\t\t\t\t'minified': 'local a'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local a;',\n\t\t\t\t'minified': 'local a'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local a, b, c',\n\t\t\t\t'minified': 'local a,b,c'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local a; local b local c;',\n\t\t\t\t'minified': 'local a;local b;local c'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local a = 1',\n\t\t\t\t'minified': 'local a=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local a local b = a',\n\t\t\t\t'minified': 'local a;local b=a'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local a, b = 1, 2',\n\t\t\t\t'minified': 'local a,b=1,2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local a, b, c = 1, 2, 3',\n\t\t\t\t'minified': 'local a,b,c=1,2,3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local a, b, c = 1',\n\t\t\t\t'minified': 'local a,b,c=1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local a = 1, 2, 3',\n\t\t\t\t'minified': 'local a=1,2,3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a() end',\n\t\t\t\t'minified': 'local function a()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a(p) end',\n\t\t\t\t'minified': 'local function a(b)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a(p,q,r) end',\n\t\t\t\t'minified': 'local function a(b,c,d)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a(p) return end',\n\t\t\t\t'minified': 'local function a(b)return end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a(p) do end end',\n\t\t\t\t'minified': 'local function a(b)do end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a(...) end',\n\t\t\t\t'minified': 'local function a(...)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a(p,...) end',\n\t\t\t\t'minified': 'local function a(b,...)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a(p,q,r,...) end',\n\t\t\t\t'minified': 'local function a(b,c,d,...)end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a() local a local b end',\n\t\t\t\t'minified': 'local function a()local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a() local a; local b; end',\n\t\t\t\t'minified': 'local function a()local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LocalStatement',\n\t\t\t\t'original': 'local function a() end; local function a() end;',\n\t\t\t\t'minified': 'local function a()end;local function a()end'\n\t\t\t}\n\t\t],\n\n\t\t// Operators\n\t\t'Operators': [\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = -10',\n\t\t\t\t'minified': 'a=-10'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = -\"foo\"',\n\t\t\t\t'minified': 'a=-\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = -a',\n\t\t\t\t'minified': 'a=-a'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = -nil',\n\t\t\t\t'minified': 'a=-nil'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = -true',\n\t\t\t\t'minified': 'a=-true'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = -{}',\n\t\t\t\t'minified': 'a=-{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = -function() end',\n\t\t\t\t'minified': 'a=-function()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = -a()',\n\t\t\t\t'minified': 'a=-a()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = -(a)',\n\t\t\t\t'minified': 'a=-a'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = not 10',\n\t\t\t\t'minified': 'a=not 10'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = not \"foo\"',\n\t\t\t\t'minified': 'a=not\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = not a',\n\t\t\t\t'minified': 'a=not a'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = not nil',\n\t\t\t\t'minified': 'a=not nil'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = not true',\n\t\t\t\t'minified': 'a=not true'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = not {}',\n\t\t\t\t'minified': 'a=not{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = not function() end',\n\t\t\t\t'minified': 'a=not function()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = not a()',\n\t\t\t\t'minified': 'a=not a()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = not (a)',\n\t\t\t\t'minified': 'a=not a'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 + 2; a = 1 - 2',\n\t\t\t\t'minified': 'a=1+2;a=1-2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 * 2; a = 1 / 2',\n\t\t\t\t'minified': 'a=1*2;a=1/2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 ^ 2; a = 1 .. 2',\n\t\t\t\t'minified': 'a=1^2;a=1 ..2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 + -2; a = 1 - -2',\n\t\t\t\t'minified': 'a=1+-2;a=1- -2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 * not 2; a = 1 / not 2',\n\t\t\t\t'minified': 'a=1*not 2;a=1/not 2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 + 2 - 3 * 4 / 5 ^ 6',\n\t\t\t\t'minified': 'a=1+2-3*4/5^6'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = a + b - c',\n\t\t\t\t'minified': 'a=a+b-c'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = \"foo\" + \"bar\"',\n\t\t\t\t'minified': 'a=\"foo\"+\"bar\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = \"foo\"..\"bar\"..\"baz\"',\n\t\t\t\t'minified': 'a=\"foo\"..\"bar\"..\"baz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = (\"foo\"..\"bar\"..\"baz\")',\n\t\t\t\t'minified': 'a=\"foo\"..\"bar\"..\"baz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = ((\"foo\"..\"bar\"..\"baz\"))',\n\t\t\t\t'minified': 'a=\"foo\"..\"bar\"..\"baz\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = true + false - nil',\n\t\t\t\t'minified': 'a=true+false-nil'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = {} * {}',\n\t\t\t\t'minified': 'a={}*{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = function() end / function() end',\n\t\t\t\t'minified': 'a=function()end/function()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = a() ^ b()',\n\t\t\t\t'minified': 'a=a()^b()'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 == 2; a = 1 ~= 2',\n\t\t\t\t'minified': 'a=1==2;a=1~=2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 < 2; a = 1 <= 2',\n\t\t\t\t'minified': 'a=1<2;a=1<=2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 > 2; a = 1 >= 2',\n\t\t\t\t'minified': 'a=1>2;a=1>=2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 < 2 < 3',\n\t\t\t\t'minified': 'a=1<2<3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 >= 2 >= 3',\n\t\t\t\t'minified': 'a=1>=2>=3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = \"foo\" == \"bar\"',\n\t\t\t\t'minified': 'a=\"foo\"==\"bar\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = \"foo\" > \"bar\"',\n\t\t\t\t'minified': 'a=\"foo\">\"bar\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = a ~= b',\n\t\t\t\t'minified': 'a=a~=b'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = true == false',\n\t\t\t\t'minified': 'a=true==false'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 and 2; a = 1 or 2',\n\t\t\t\t'minified': 'a=1 and 2;a=1 or 2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 and 2 and 3',\n\t\t\t\t'minified': 'a=1 and 2 and 3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 or 2 or 3',\n\t\t\t\t'minified': 'a=1 or 2 or 3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 1 and 2 or 3',\n\t\t\t\t'minified': 'a=1 and 2 or 3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = a and b or c',\n\t\t\t\t'minified': 'a=a and b or c'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = a() and (b)() or c.d',\n\t\t\t\t'minified': 'a=a()and b()or c.d'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = \"foo\" and \"bar\"',\n\t\t\t\t'minified': 'a=\"foo\"and\"bar\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = true or false',\n\t\t\t\t'minified': 'a=true or false'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = {} and {} or {}',\n\t\t\t\t'minified': 'a={}and{}or{}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = (1) and (\"foo\") or (nil)',\n\t\t\t\t'minified': 'a=1 and\"foo\"or nil'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = function() end == function() end',\n\t\t\t\t'minified': 'a=function()end==function()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = function() end or function() end',\n\t\t\t\t'minified': 'a=function()end or function()end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = true or false and nil',\n\t\t\t\t'minified': 'a=true or false and nil'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = 2^-2 == 1/4 and -2^- -2 == - - -4',\n\t\t\t\t'minified': 'a=2^-2==1/4 and-2^- -2==- - -4'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operators',\n\t\t\t\t'original': 'a = -3-1-5 == 0+0-9',\n\t\t\t\t'minified': 'a=-3-1-5==0+0-9'\n\t\t\t}\n\t\t],\n\n\t\t// Operator precedence\n\t\t'Operator precedence': [\n\t\t// http://www.lua.org/manual/5.1/manual.html#2.5.6\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (1 + 2) * 3',\n\t\t\t\t'minified': 'a=(1+2)*3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = ((1 + 2) - 3) * (4 / (5 ^ 6))',\n\t\t\t\t'minified': 'a=(1+2-3)*4/5^6'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (1 + (2 - (3 * (4 / (5 ^ ((6)))))))',\n\t\t\t\t'minified': 'a=1+2-3*4/5^6'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (((1 or false) and true) or false) == true',\n\t\t\t\t'minified': 'a=((1 or false)and true or false)==true'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (((nil and true) or false) and true) == false',\n\t\t\t\t'minified': 'a=((nil and true or false)and true)==false'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = not ((true or false) and nil)',\n\t\t\t\t'minified': 'a=not((true or false)and nil)'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = -2^2 == -4 and (-2)^2 == 4 and 2*2-3-1 == 0',\n\t\t\t\t'minified': 'a=-2^2==-4 and(-2)^2==4 and 2*2-3-1==0'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = 2*1+3/3 == 3 and 1+2 .. 3*1 == \"33\"',\n\t\t\t\t'minified': 'a=2*1+3/3==3 and 1+2 ..3*1==\"33\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = not nil and 2 and not(2 > 3 or 3 < 2)',\n\t\t\t\t'minified': 'a=not nil and 2 and not(2>3 or 3<2)'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = not(2+1 > 3*1) and \"a\"..\"b\" > \"a\"',\n\t\t\t\t'minified': 'a=not(2+1>3*1)and\"a\"..\"b\">\"a\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = 2 ^ (3 ^ 2)',\n\t\t\t\t'minified': 'a=2^3^2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (2 ^ 3) * 4',\n\t\t\t\t'minified': 'a=2^3*4'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = 2 ^ (2 ^ 3)',\n\t\t\t\t'minified': 'a=2^2^3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = 2 ^ (2 ^ (3 ^ 4))',\n\t\t\t\t'minified': 'a=2^2^3^4'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = 2 ^ (2 ^ (3 ^ 4)) + 1',\n\t\t\t\t'minified': 'a=2^2^3^4+1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (1 * 2) / 3',\n\t\t\t\t'minified': 'a=1*2/3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = ( 1 + ( 1 * 2 ) ) > 3',\n\t\t\t\t'minified': 'a=1+1*2>3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (1 < 2) and (2 < 1)',\n\t\t\t\t'minified': 'a=1<2 and 2<1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = ((1 / 2) + (4 * 2)) > 8',\n\t\t\t\t'minified': 'a=1/2+4*2>8'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (2 < 1) == true',\n\t\t\t\t'minified': 'a=2<1==true'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (2 < (1 + 1)) == true',\n\t\t\t\t'minified': 'a=2<1+1==true'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (not 1) + 1',\n\t\t\t\t'minified': 'a=not 1+1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (not (not (1)) + 1)',\n\t\t\t\t'minified': 'a=not not 1+1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = 1 + (#1)',\n\t\t\t\t'minified': 'a=1+#1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = - (x ^ 2)',\n\t\t\t\t'minified': 'a=-x^2'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (4 ^ (2 ^ 3))',\n\t\t\t\t'minified': 'a=4^2^3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence: right associativity',\n\t\t\t\t'original': 'a = (((4) ^ 2) ^ 3)',\n\t\t\t\t'minified': 'a=(4^2)^3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence: left associativity',\n\t\t\t\t'original': 'a = 1 - (2 - 3)',\n\t\t\t\t'minified': 'a=1-(2-3)'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence: left associativity with special de-parenthesizing',\n\t\t\t\t'original': 'a = 1 + (2 - 3)',\n\t\t\t\t'minified': 'a=1+2-3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence: left associativity with special de-parenthesizing',\n\t\t\t\t'original': 'a = 1 + (2 + 3)',\n\t\t\t\t'minified': 'a=1+2+3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence: left associativity with special de-parenthesizing',\n\t\t\t\t'original': 'a = 1 * (2 / 3)',\n\t\t\t\t'minified': 'a=1*2/3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence: left associativity with special de-parenthesizing',\n\t\t\t\t'original': 'a = 1 * (2 * 3)',\n\t\t\t\t'minified': 'a=1*2*3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence',\n\t\t\t\t'original': 'a = (\"a\" .. (\"b\" .. \"c\"))',\n\t\t\t\t'minified': 'a=\"a\"..\"b\"..\"c\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence: right associativity',\n\t\t\t\t'original': 'a = (((\"a\") .. \"b\") .. \"c\")',\n\t\t\t\t'minified': 'a=(\"a\"..\"b\")..\"c\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence: RHS parens',\n\t\t\t\t'original': 'a = false and (false or true)',\n\t\t\t\t'minified': 'a=false and(false or true)'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Operator precedence: RHS parens',\n\t\t\t\t'original': 'a = 1 * (2 - 3)',\n\t\t\t\t'minified': 'a=1*(2-3)'\n\t\t\t}\n\t\t],\n\n\t\t// RepeatStatement\n\t\t'RepeatStatement': [\n\t\t\t{\n\t\t\t\t'description': 'RepeatStatement',\n\t\t\t\t'original': 'repeat until 0',\n\t\t\t\t'minified': 'repeat until 0'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'RepeatStatement',\n\t\t\t\t'original': 'repeat until false',\n\t\t\t\t'minified': 'repeat until false'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'RepeatStatement',\n\t\t\t\t'original': 'repeat local a until 1',\n\t\t\t\t'minified': 'repeat local a until 1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'RepeatStatement',\n\t\t\t\t'original': 'repeat local a local b until 0',\n\t\t\t\t'minified': 'repeat local a;local b until 0'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'RepeatStatement',\n\t\t\t\t'original': 'repeat local a; local b; until 0',\n\t\t\t\t'minified': 'repeat local a;local b until 0'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'RepeatStatement',\n\t\t\t\t'original': 'repeat return until 0',\n\t\t\t\t'minified': 'repeat return until 0'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'RepeatStatement',\n\t\t\t\t'original': 'repeat break until 0',\n\t\t\t\t'minified': 'repeat break until 0'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'RepeatStatement',\n\t\t\t\t'original': 'repeat do end until 0',\n\t\t\t\t'minified': 'repeat do end until 0'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'RepeatStatement',\n\t\t\t\t'original': 'repeat do return end until 0',\n\t\t\t\t'minified': 'repeat do return end until 0'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'RepeatStatement',\n\t\t\t\t'original': 'repeat do break end until 0',\n\t\t\t\t'minified': 'repeat do break end until 0'\n\t\t\t}\n\t\t],\n\n\t\t// ReturnStatement\n\t\t'ReturnStatement': [\n\t\t\t{\n\t\t\t\t'description': 'ReturnStatement',\n\t\t\t\t'original': 'return 1',\n\t\t\t\t'minified': 'return 1'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ReturnStatement',\n\t\t\t\t'original': 'return \"foo\"',\n\t\t\t\t'minified': 'return\"foo\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ReturnStatement',\n\t\t\t\t'original': 'return 1, 2, 3',\n\t\t\t\t'minified': 'return 1,2,3'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ReturnStatement',\n\t\t\t\t'original': 'return a, b, c, d',\n\t\t\t\t'minified': 'return a,b,c,d'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'ReturnStatement',\n\t\t\t\t'original': 'return 1, 2;',\n\t\t\t\t'minified': 'return 1,2'\n\t\t\t}\n\t\t],\n\n\t\t// Statements\n\t\t'Statements': [\n\t\t\t{\n\t\t\t\t'description': 'BreakStatement',\n\t\t\t\t'original': 'break',\n\t\t\t\t'minified': 'break'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LabelStatement',\n\t\t\t\t'original': '::foo::',\n\t\t\t\t'minified': '::a::'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'GotoStatement',\n\t\t\t\t'original': 'goto foo',\n\t\t\t\t'minified': 'goto a'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'LabelStatement + GotoStatement',\n\t\t\t\t'original': 'for x = 1, 10 do print(x) goto done end ::done::',\n\t\t\t\t'minified': 'for a=1,10 do print(a)goto b end::b::'\n\t\t\t}\n\t\t],\n\n\t\t// TableConstructorExpressions\n\t\t'TableConstructorExpressions': [\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = {}',\n\t\t\t\t'minified': 'a={}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = {{{}}}',\n\t\t\t\t'minified': 'a={{{}}}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = {{},{},{{}},}',\n\t\t\t\t'minified': 'a={{},{},{{}}}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { 1 }',\n\t\t\t\t'minified': 'a={1}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { 1, }',\n\t\t\t\t'minified': 'a={1}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { 1; }',\n\t\t\t\t'minified': 'a={1}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { 1, 2 }',\n\t\t\t\t'minified': 'a={1,2}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { a, b, c, }',\n\t\t\t\t'minified': 'a={a,b,c}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { true; false, nil; }',\n\t\t\t\t'minified': 'a={true,false,nil}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { a.b, a[b]; a:c(), }',\n\t\t\t\t'minified': 'a={a.b,a[b],a:c()}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { 1 + 2, a > b, \"a\" or \"b\" }',\n\t\t\t\t'minified': 'a={1+2,a>b,\"a\"or\"b\"}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { a = 1, }',\n\t\t\t\t'minified': 'a={a=1}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { a = 1, b = \"foo\", c = nil }',\n\t\t\t\t'minified': 'a={a=1,b=\"foo\",c=nil}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { 1, a = \"foo\"; b = {}, d = true; }',\n\t\t\t\t'minified': 'a={1,a=\"foo\",b={},d=true}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { [\"foo\"] = \"bar\" }',\n\t\t\t\t'minified': 'a={[\"foo\"]=\"bar\"}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { [1] = a, [2] = b, }',\n\t\t\t\t'minified': 'a={[1]=a,[2]=b}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'TableConstructorExpression',\n\t\t\t\t'original': 'a = { true, a = 1; [\"foo\"] = \"bar\", }',\n\t\t\t\t'minified': 'a={true,a=1,[\"foo\"]=\"bar\"}'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'IndexExpression on a TableConstructorExpression',\n\t\t\t\t'original': 'x = ({})[1]',\n\t\t\t\t'minified': 'x=({})[1]'\n\t\t\t}\n\t\t],\n\n\t\t// WhileStatement\n\t\t'WhileStatement': [\n\t\t\t{\n\t\t\t\t'description': 'WhileStatement',\n\t\t\t\t'original': 'while 1 do end',\n\t\t\t\t'minified': 'while 1 do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'WhileStatement',\n\t\t\t\t'original': 'while 1 do local a end',\n\t\t\t\t'minified': 'while 1 do local a end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'WhileStatement',\n\t\t\t\t'original': 'while 1 do local a local b end',\n\t\t\t\t'minified': 'while 1 do local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'WhileStatement',\n\t\t\t\t'original': 'while 1 do local a; local b; end',\n\t\t\t\t'minified': 'while 1 do local a;local b end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'WhileStatement',\n\t\t\t\t'original': 'while true do end',\n\t\t\t\t'minified': 'while true do end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'WhileStatement',\n\t\t\t\t'original': 'while 1 do return end',\n\t\t\t\t'minified': 'while 1 do return end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'WhileStatement',\n\t\t\t\t'original': 'while 1 do do end end',\n\t\t\t\t'minified': 'while 1 do do end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'WhileStatement',\n\t\t\t\t'original': 'while 1 do do return end end',\n\t\t\t\t'minified': 'while 1 do do return end end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'WhileStatement',\n\t\t\t\t'original': 'while 1 do break end',\n\t\t\t\t'minified': 'while 1 do break end'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'WhileStatement',\n\t\t\t\t'original': 'while 1 do do break end end',\n\t\t\t\t'minified': 'while 1 do do break end end'\n\t\t\t}\n\t\t],\n\n\t\t// Rename local variables\n\t\t'Variable name shortening': [\n\t\t\t{\n\t\t\t\t'description': 'Variable shortening should not generate reserved keywords',\n\t\t\t\t'original': 'a, a0 = 1; local b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, _, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH, aI, aJ, aK, aL, aM, aN, aO, aP, aQ, aR, aS, aT, aU, aV, aW, aX, aY, aZ, a_, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl, bm, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bz, bA, bB, bC, bD, bE, bF, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bT, bU, bV, bW, bX, bY, bZ, b_, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf, cg, ch, ci, cj, ck, cl, cm, cn, co, cp, cq, cr, cs, ct, cu, cv, cw, cx, cy, cz, cA, cB, cC, cD, cE, cF, cG, cH, cI, cJ, cK, cL, cM, cN, cO, cP, cQ, cR, cS, cT, cU, cV, cW, cX, cY, cZ, c_, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df, dg, dh, di, dj, dk, dl, dm, dn, dp, dq, dr, ds, dt, du, dv, dw, dx, dy, dz, dA, dB, dC, dD, dE, dF, dG, dH, dI, dJ, dK, dL, dM, dN, dO, dP, dQ, dR, dS, dT, dU, dV, dW, dX, dY, dZ, d_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef, eg, eh, ei, ej, ek, el, em, en, eo, ep, eq, er, es, et, eu, ev, ew, ex, ey, ez, eA, eB, eC, eD, eE, eF, eG, eH, eI, eJ, eK, eL, eM, eN, eO, eP, eQ, eR, eS, eT, eU, eV, eW, eX, eY, eZ, e_, f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl, fm, fn, fo, fp, fq, fr, fs, ft, fu, fv, fw, fx, fy, fz, fA, fB, fC, fD, fE, fF, fG, fH, fI, fJ, fK, fL, fM, fN, fO, fP, fQ, fR, fS, fT, fU, fV, fW, fX, fY, fZ, f_, g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, ga, gb, gc, gd, ge, gf, gg, gh, gi, gj, gk, gl, gm, gn, go, gp, gq, gr, gs, gt, gu, gv, gw, gx, gy, gz, gA, gB, gC, gD, gE, gF, gG, gH, gI, gJ, gK, gL, gM, gN, gO, gP, gQ, gR, gS, gT, gU, gV, gW, gX, gY, gZ, g_, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, ha, hb, hc, hd, he, hf, hg, hh, hi, hj, hk, hl, hm, hn, ho, hp, hq, hr, hs, ht, hu, hv, hw, hx, hy, hz, hA, hB, hC, hD, hE, hF, hG, hH, hI, hJ, hK, hL, hM, hN, hO, hP, hQ, hR, hS, hT, hU, hV, hW, hX, hY, hZ, h_, i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, ia, ib, ic, id, ie, ig, ih, ii, ij, ik, il, im, io, ip, iq, ir, is, it, iu, iv, iw, ix, iy, iz, iA, iB, iC, iD, iE, iF, iG, iH, iI, iJ, iK, iL, iM, iN, iO, iP, iQ, iR, iS, iT, iU, iV, iW, iX, iY, iZ, i_, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, ja, jb, jc, jd, je, jf, jg, jh, ji, jj, jk, jl, jm, jn, jo, jp, jq, jr, js, jt, ju, jv, jw, jx, jy, jz, jA, jB, jC, jD, jE, jF, jG, jH, jI, jJ, jK, jL, jM, jN, jO, jP, jQ, jR, jS, jT, jU, jV, jW, jX, jY, jZ, j_, k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, ka, kb, kc, kd, ke, kf, kg, kh, ki, kj, kk, kl, km, kn, ko, kp, kq, kr, ks, kt, ku, kv, kw, kx, ky, kz, kA, kB, kC, kD, kE, kF, kG, kH, kI, kJ, kK, kL, kM, kN, kO, kP, kQ, kR, kS, kT, kU, kV, kW, kX, kY, kZ, k_, l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, la, lb, lc, ld, le, lf, lg, lh, li, lj, lk, ll, lm, ln, lo, lp, lq, lr, ls, lt, lu, lv, lw, lx, ly, lz, lA, lB, lC, lD, lE, lF, lG, lH, lI, lJ, lK, lL, lM, lN, lO, lP, lQ, lR, lS, lT, lU, lV, lW, lX, lY, lZ, l_, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, ma, mb, mc, md, me, mf, mg, mh, mi, mj, mk, ml, mm, mn, mo, mp, mq, mr, ms, mt, mu, mv, mw, mx, my, mz, mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, mQ, mR, mS, mT, mU, mV, mW, mX, mY, mZ, m_, n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, na, nb, nc, nd, ne, nf, ng, nh, ni, nj, nk, nl, nm, nn, no, np, nq, nr, ns, nt, nu, nv, nw, nx, ny, nz, nA, nB, nC, nD, nE, nF, nG, nH, nI, nJ, nK, nL, nM, nN, nO, nP, nQ, nR, nS, nT, nU, nV, nW, nX, nY, nZ, n_, o0, o1, o2, o3, o4, o5, o6, o7, o8, o9, oa, ob, oc, od, oe, of, og, oh, oi, oj, ok, ol, om, on, oo, op, oq, os, ot, ou, ov, ow, ox, oy, oz, oA, oB, oC, oD, oE, oF, oG, oH, oI, oJ, oK, oL, oM, oN, oO, oP, oQ, oR, oS, oT, oU, oV, oW, oX, oY, oZ, o_, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pa, pb, pc, pd, pe, pf, pg, ph, pi, pj, pk, pl, pm, pn, po, pp, pq, pr, ps, pt, pu, pv, pw, px, py, pz, pA, pB, pC, pD, pE, pF, pG, pH, pI, pJ, pK, pL, pM, pN, pO, pP, pQ, pR, pS, pT, pU, pV, pW, pX, pY, pZ, p_, q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, qa, qb, qc, qd, qe, qf, qg, qh, qi, qj, qk, ql, qm, qn, qo, qp, qq, qr, qs, qt, qu, qv, qw, qx, qy, qz, qA, qB, qC, qD, qE, qF, qG, qH, qI, qJ, qK, qL, qM, qN, qO, qP, qQ, qR, qS, qT, qU, qV, qW, qX, qY, qZ, q_, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn, ro, rp, rq, rr, rs, rt, ru, rv, rw, rx, ry, rz, rA, rB, rC, rD, rE, rF, rG, rH, rI, rJ, rK, rL, rM, rN, rO, rP, rQ, rR, rS, rT, rU, rV, rW, rX, rY, rZ, r_, s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sa, sb, sc, sd, se, sf, sg, sh, si, sj, sk, sl, sm, sn, so, sp, sq, sr, ss, st, su, sv, sw, sx, sy, sz, sA, sB, sC, sD, sE, sF, sG, sH, sI, sJ, sK, sL, sM, sN, sO, sP, sQ, sR, sS, sT, sU, sV, sW, sX, sY, sZ, s_, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, ta, tb, tc, td, te, tf, tg, th, ti, tj, tk, tl, tm, tn, to, tp, tq, tr, ts, tt, tu, tv, tw, tx, ty, tz, tA, tB, tC, tD, tE, tF, tG, tH, tI, tJ, tK, tL, tM, tN, tO, tP, tQ, tR, tS, tT, tU, tV, tW, tX, tY, tZ, t_, u0, u1, u2, u3, u4, u5, u6, u7, u8, u9, ua, ub, uc, ud, ue, uf, ug, uh, ui, uj, uk, ul, um, un, uo, up, uq, ur, us, ut, uu, uv, uw, ux, uy, uz, uA, uB, uC, uD, uE, uF, uG, uH, uI, uJ, uK, uL, uM, uN, uO, uP, uQ, uR, uS, uT, uU, uV, uW, uX, uY, uZ, u_, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, va, vb, vc, vd, ve, vf, vg, vh, vi, vj, vk, vl, vm, vn, vo, vp, vq, vr, vs, vt, vu, vv, vw, vx, vy, vz, vA, vB, vC, vD, vE, vF, vG, vH, vI, vJ, vK, vL, vM, vN, vO, vP, vQ, vR, vS, vT, vU, vV, vW, vX, vY, vZ, v_, w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, wa, wb, wc, wd, we, wf, wg, wh, wi, wj, wk, wl, wm, wn, wo, wp, wq, wr, ws, wt, wu, wv, ww, wx, wy, wz, wA, wB, wC, wD, wE, wF, wG, wH, wI, wJ, wK, wL, wM, wN, wO, wP, wQ, wR, wS, wT, wU, wV, wW, wX, wY, wZ, w_, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, xa, xb, xc, xd, xe, xf, xg, xh, xi, xj, xk, xl, xm, xn, xo, xp, xq, xr, xs, xt, xu, xv, xw, xx, xy, xz, xA, xB, xC, xD, xE, xF, xG, xH, xI, xJ, xK, xL, xM, xN, xO, xP, xQ, xR, xS, xT, xU, xV, xW, xX, xY, xZ, x_, y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, ya, yb, yc, yd, ye, yf, yg, yh, yi, yj, yk, yl, ym, yn, yo, yp, yq, yr, ys, yt, yu, yv, yw, yx, yy, yz, yA, yB, yC, yD, yE, yF, yG, yH, yI, yJ, yK, yL, yM, yN, yO, yP, yQ, yR, yS, yT, yU, yV, yW, yX, yY, yZ, y_, z0, z1, z2, z3, z4, z5, z6, z7, z8, z9, za, zb, zc, zd, ze, zf, zg, zh, zi, zj, zk, zl, zm, zn, zo, zp, zq, zr, zs, zt, zu, zv, zw, zx, zy, zz, zA, zB, zC, zD, zE, zF, zG, zH, zI, zJ, zK, zL, zM, zN, zO, zP, zQ, zR, zS, zT, zU, zV, zW, zX, zY, zZ, z_, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, Aa, Ab, Ac, Ad, Ae, Af, Ag, Ah, Ai, Aj, Ak, Al, Am, An, Ao, Ap, Aq, Ar, As, At, Au, Av, Aw, Ax, Ay, Az, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, A_, B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, Ba, Bb, Bc, Bd, Be, Bf, Bg, Bh, Bi, Bj, Bk, Bl, Bm, Bn, Bo, Bp, Bq, Br, Bs, Bt, Bu, Bv, Bw, Bx, By, Bz, BA, BB, BC, BD, BE, BF, BG, BH, BI, BJ, BK, BL, BM, BN, BO, BP, BQ, BR, BS, BT, BU, BV, BW, BX, BY, BZ, B_, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, Ca, Cb, Cc, Cd, Ce, Cf, Cg, Ch, Ci, Cj, Ck, Cl, Cm, Cn, Co, Cp, Cq, Cr, Cs, Ct, Cu, Cv, Cw, Cx, Cy, Cz, CA, CB, CC, CD, CE, CF, CG, CH, CI, CJ, CK, CL, CM, CN, CO, CP, CQ, CR, CS, CT, CU, CV, CW, CX, CY, CZ, C_, D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, Da, Db, Dc, Dd, De, Df, Dg, Dh, Di, Dj, Dk, Dl, Dm, Dn, Do, Dp, Dq, Dr, Ds, Dt, Du, Dv, Dw, Dx, Dy, Dz, DA, DB, DC, DD, DE, DF, DG, DH, DI, DJ, DK, DL, DM, DN, DO, DP, DQ, DR, DS, DT, DU, DV, DW, DX, DY, DZ, D_, E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, Ea, Eb, Ec, Ed, Ee, Ef, Eg, Eh, Ei, Ej, Ek, El, Em, En, Eo, Ep, Eq, Er, Es, Et, Eu, Ev, Ew, Ex, Ey, Ez, EA, EB, EC, ED, EE, EF, EG, EH, EI, EJ, EK, EL, EM, EN, EO, EP, EQ, ER, ES, ET, EU, EV, EW, EX, EY, EZ, E_, F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, Fa, Fb, Fc, Fd, Fe, Ff, Fg, Fh, Fi, Fj, Fk, Fl, Fm, Fn, Fo, Fp, Fq, Fr, Fs, Ft, Fu, Fv, Fw, Fx, Fy, Fz, FA, FB, FC, FD, FE, FF, FG, FH, FI, FJ, FK, FL, FM, FN, FO, FP, FQ, FR, FS, FT, FU, FV, FW, FX, FY, FZ, F_, G0, G1, G2, G3, G4, G5, G6, G7, G8, G9, Ga, Gb, Gc, Gd, Ge, Gf, Gg, Gh, Gi, Gj, Gk, Gl, Gm, Gn, Go, Gp, Gq, Gr, Gs, Gt, Gu, Gv, Gw, Gx, Gy, Gz, GA, GB, GC, GD, GE, GF, GG, GH, GI, GJ, GK, GL, GM, GN, GO, GP, GQ, GR, GS, GT, GU, GV, GW, GX, GY, GZ, G_, H0, H1, H2, H3, H4, H5, H6, H7, H8, H9, Ha, Hb, Hc, Hd, He, Hf, Hg, Hh, Hi, Hj, Hk, Hl, Hm, Hn, Ho, Hp, Hq, Hr, Hs, Ht, Hu, Hv, Hw, Hx, Hy, Hz, HA, HB, HC, HD, HE, HF, HG, HH, HI, HJ, HK, HL, HM, HN, HO, HP, HQ, HR, HS, HT, HU, HV, HW, HX, HY, HZ, H_, I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, Ia, Ib, Ic, Id, Ie, If, Ig, Ih, Ii, Ij, Ik, Il, Im, In, Io, Ip, Iq, Ir, Is, It, Iu, Iv, Iw, Ix, Iy, Iz, IA, IB, IC, ID, IE, IF, IG, IH, II, IJ, IK, IL, IM, IN, IO, IP, IQ, IR, IS, IT, IU, IV, IW, IX, IY, IZ, I_, J0, J1, J2, J3, J4, J5, J6, J7, J8, J9, Ja, Jb, Jc, Jd, Je, Jf, Jg, Jh, Ji, Jj, Jk, Jl, Jm, Jn, Jo, Jp, Jq, Jr, Js, Jt, Ju, Jv, Jw, Jx, Jy, Jz, JA, JB, JC, JD, JE, JF, JG, JH, JI, JJ, JK, JL, JM, JN, JO, JP, JQ, JR, JS, JT, JU, JV, JW, JX, JY, JZ, J_, K0, K1, K2, K3, K4, K5, K6, K7, K8, K9, Ka, Kb, Kc, Kd, Ke, Kf, Kg, Kh, Ki, Kj, Kk, Kl, Km, Kn, Ko, Kp, Kq, Kr, Ks, Kt, Ku, Kv, Kw, Kx, Ky, Kz, KA, KB, KC, KD, KE, KF, KG, KH, KI, KJ, KK, KL, KM, KN, KO, KP, KQ, KR, KS, KT, KU, KV, KW, KX, KY, KZ, K_, L0, L1, L2, L3, L4, L5, L6, L7, L8, L9, La, Lb, Lc, Ld, Le, Lf, Lg, Lh, Li, Lj, Lk, Ll, Lm, Ln, Lo, Lp, Lq, Lr, Ls, Lt, Lu, Lv, Lw, Lx, Ly, Lz, LA, LB, LC, LD, LE, LF, LG, LH, LI, LJ, LK, LL, LM, LN, LO, LP, LQ, LR, LS, LT, LU, LV, LW, LX, LY, LZ, L_, M0, M1, M2, M3, M4, M5, M6, M7, M8, M9, Ma, Mb, Mc, Md, Me, Mf, Mg, Mh, Mi, Mj, Mk, Ml, Mm, Mn, Mo, Mp, Mq, Mr, Ms, Mt, Mu, Mv, Mw, Mx, My, Mz, MA, MB, MC, MD, ME, MF, MG, MH, MI, MJ, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, M_, N0, N1, N2, N3, N4, N5, N6, N7, N8, N9, Na, Nb, Nc, Nd, Ne, Nf, Ng, Nh, Ni, Nj, Nk, Nl, Nm, Nn, No, Np, Nq, Nr, Ns, Nt, Nu, Nv, Nw, Nx, Ny, Nz, NA, NB, NC, ND, NE, NF, NG, NH, NI, NJ, NK, NL, NM, NN, NO, NP, NQ, NR, NS, NT, NU, NV, NW, NX, NY, NZ, N_, O0, O1, O2, O3, O4, O5, O6, O7, O8, O9, Oa, Ob, Oc, Od, Oe, Of, Og, Oh, Oi, Oj, Ok, Ol, Om, On, Oo, Op, Oq, Or, Os, Ot, Ou, Ov, Ow, Ox, Oy, Oz, OA, OB, OC, OD, OE, OF, OG, OH, OI, OJ, OK, OL, OM, ON, OO, OP, OQ, OR, OS, OT, OU, OV, OW, OX, OY, OZ, O_, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, Pa, Pb, Pc, Pd, Pe, Pf, Pg, Ph, Pi, Pj, Pk, Pl, Pm, Pn, Po, Pp, Pq, Pr, Ps, Pt, Pu, Pv, Pw, Px, Py, Pz, PA, PB, PC, PD, PE, PF, PG, PH, PI, PJ, PK, PL, PM, PN, PO, PP, PQ, PR, PS, PT, PU, PV, PW, PX, PY, PZ, P_, Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Qa, Qb, Qc, Qd, Qe, Qf, Qg, Qh, Qi, Qj, Qk, Ql, Qm, Qn, Qo, Qp, Qq, Qr, Qs, Qt, Qu, Qv, Qw, Qx, Qy, Qz, QA, QB, QC, QD, QE, QF, QG, QH, QI, QJ, QK, QL, QM, QN, QO, QP, QQ, QR, QS, QT, QU, QV, QW, QX, QY, QZ, Q_, R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, Ra, Rb, Rc, Rd, Re, Rf, Rg, Rh, Ri, Rj, Rk, Rl, Rm, Rn, Ro, Rp, Rq, Rr, Rs, Rt, Ru, Rv, Rw, Rx, Ry, Rz, RA, RB, RC, RD, RE, RF, RG, RH, RI, RJ, RK, RL, RM, RN, RO, RP, RQ, RR, RS, RT, RU, RV, RW, RX, RY, RZ, R_, S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, Sa, Sb, Sc, Sd, Se, Sf, Sg, Sh, Si, Sj, Sk, Sl, Sm, Sn, So, Sp, Sq, Sr, Ss, St, Su, Sv, Sw, Sx, Sy, Sz, SA, SB, SC, SD, SE, SF, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SP, SQ, SR, SS, ST, SU, SV, SW, SX, SY, SZ, S_, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ta, Tb, Tc, Td, Te, Tf, Tg, Th, Ti, Tj, Tk, Tl, Tm, Tn, To, Tp, Tq, Tr, Ts, Tt, Tu, Tv, Tw, Tx, Ty, Tz, TA, TB, TC, TD, TE, TF, TG, TH, TI, TJ, TK, TL, TM, TN, TO, TP, TQ, TR, TS, TT, TU, TV, TW, TX, TY, TZ, T_, U0, U1, U2, U3, U4, U5, U6, U7, U8, U9, Ua, Ub, Uc, Ud, Ue, Uf, Ug, Uh, Ui, Uj, Uk, Ul, Um, Un, Uo, Up, Uq, Ur, Us, Ut, Uu, Uv, Uw, Ux, Uy, Uz, UA, UB, UC, UD, UE, UF, UG, UH, UI, UJ, UK, UL, UM, UN, UO, UP, UQ, UR, US, UT, UU, UV, UW, UX, UY, UZ, U_, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, Va, Vb, Vc, Vd, Ve, Vf, Vg, Vh, Vi, Vj, Vk, Vl, Vm, Vn, Vo, Vp, Vq, Vr, Vs, Vt, Vu, Vv, Vw, Vx, Vy, Vz, VA, VB, VC, VD, VE, VF, VG, VH, VI, VJ, VK, VL, VM, VN, VO, VP, VQ, VR, VS, VT, VU, VV, VW, VX, VY, VZ, V_, W0, W1, W2, W3, W4, W5, W6, W7, W8, W9, Wa, Wb, Wc, Wd, We, Wf, Wg, Wh, Wi, Wj, Wk, Wl, Wm, Wn, Wo, Wp, Wq, Wr, Ws, Wt, Wu, Wv, Ww, Wx, Wy, Wz, WA, WB, WC, WD, WE, WF, WG, WH, WI, WJ, WK, WL, WM, WN, WO, WP, WQ, WR, WS, WT, WU, WV, WW, WX, WY, WZ, W_, X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, Xa, Xb, Xc, Xd, Xe, Xf, Xg, Xh, Xi, Xj, Xk, Xl, Xm, Xn, Xo, Xp, Xq, Xr, Xs, Xt, Xu, Xv, Xw, Xx, Xy, Xz, XA, XB, XC, XD, XE, XF, XG, XH, XI, XJ, XK, XL, XM, XN, XO, XP, XQ, XR, XS, XT, XU, XV, XW, XX, XY, XZ, X_, Y0, Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8, Y9, Ya, Yb, Yc, Yd, Ye, Yf, Yg, Yh, Yi, Yj, Yk, Yl, Ym, Yn, Yo, Yp, Yq, Yr, Ys, Yt, Yu, Yv, Yw, Yx, Yy, Yz, YA, YB, YC, YD, YE, YF, YG, YH, YI, YJ, YK, YL, YM, YN, YO, YP, YQ, YR, YS, YT, YU, YV, YW, YX, YY, YZ, Y_, Z0, Z1, Z2, Z3, Z4, Z5, Z6, Z7, Z8, Z9, Za, Zb, Zc, Zd, Ze, Zf, Zg, Zh, Zi, Zj, Zk, Zl, Zm, Zn, Zo, Zp, Zq, Zr, Zs, Zt, Zu, Zv, Zw, Zx, Zy, Zz, ZA, ZB, ZC, ZD, ZE, ZF, ZG, ZH, ZI, ZJ, ZK, ZL, ZM, ZN, ZO, ZP, ZQ, ZR, ZS, ZT, ZU, ZV, ZW, ZX, ZY, ZZ, Z_, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, a00, a01, a02 = 1; print(dontrenameme)',\n\t\t\t\t'minified': 'a,a0=1;local b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,a1,a2,a3,a4,a5,a6,a7,a8,a9,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX,aY,aZ,a_,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,bA,bB,bC,bD,bE,bF,bG,bH,bI,bJ,bK,bL,bM,bN,bO,bP,bQ,bR,bS,bT,bU,bV,bW,bX,bY,bZ,b_,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr,cs,ct,cu,cv,cw,cx,cy,cz,cA,cB,cC,cD,cE,cF,cG,cH,cI,cJ,cK,cL,cM,cN,cO,cP,cQ,cR,cS,cT,cU,cV,cW,cX,cY,cZ,c_,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl,dm,dn,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz,dA,dB,dC,dD,dE,dF,dG,dH,dI,dJ,dK,dL,dM,dN,dO,dP,dQ,dR,dS,dT,dU,dV,dW,dX,dY,dZ,d_,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ey,ez,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV,eW,eX,eY,eZ,e_,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,ft,fu,fv,fw,fx,fy,fz,fA,fB,fC,fD,fE,fF,fG,fH,fI,fJ,fK,fL,fM,fN,fO,fP,fQ,fR,fS,fT,fU,fV,fW,fX,fY,fZ,f_,g0,g1,g2,g3,g4,g5,g6,g7,g8,g9,ga,gb,gc,gd,ge,gf,gg,gh,gi,gj,gk,gl,gm,gn,go,gp,gq,gr,gs,gt,gu,gv,gw,gx,gy,gz,gA,gB,gC,gD,gE,gF,gG,gH,gI,gJ,gK,gL,gM,gN,gO,gP,gQ,gR,gS,gT,gU,gV,gW,gX,gY,gZ,g_,h0,h1,h2,h3,h4,h5,h6,h7,h8,h9,ha,hb,hc,hd,he,hf,hg,hh,hi,hj,hk,hl,hm,hn,ho,hp,hq,hr,hs,ht,hu,hv,hw,hx,hy,hz,hA,hB,hC,hD,hE,hF,hG,hH,hI,hJ,hK,hL,hM,hN,hO,hP,hQ,hR,hS,hT,hU,hV,hW,hX,hY,hZ,h_,i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,ia,ib,ic,id,ie,ig,ih,ii,ij,ik,il,im,io,ip,iq,ir,is,it,iu,iv,iw,ix,iy,iz,iA,iB,iC,iD,iE,iF,iG,iH,iI,iJ,iK,iL,iM,iN,iO,iP,iQ,iR,iS,iT,iU,iV,iW,iX,iY,iZ,i_,j0,j1,j2,j3,j4,j5,j6,j7,j8,j9,ja,jb,jc,jd,je,jf,jg,jh,ji,jj,jk,jl,jm,jn,jo,jp,jq,jr,js,jt,ju,jv,jw,jx,jy,jz,jA,jB,jC,jD,jE,jF,jG,jH,jI,jJ,jK,jL,jM,jN,jO,jP,jQ,jR,jS,jT,jU,jV,jW,jX,jY,jZ,j_,k0,k1,k2,k3,k4,k5,k6,k7,k8,k9,ka,kb,kc,kd,ke,kf,kg,kh,ki,kj,kk,kl,km,kn,ko,kp,kq,kr,ks,kt,ku,kv,kw,kx,ky,kz,kA,kB,kC,kD,kE,kF,kG,kH,kI,kJ,kK,kL,kM,kN,kO,kP,kQ,kR,kS,kT,kU,kV,kW,kX,kY,kZ,k_,l0,l1,l2,l3,l4,l5,l6,l7,l8,l9,la,lb,lc,ld,le,lf,lg,lh,li,lj,lk,ll,lm,ln,lo,lp,lq,lr,ls,lt,lu,lv,lw,lx,ly,lz,lA,lB,lC,lD,lE,lF,lG,lH,lI,lJ,lK,lL,lM,lN,lO,lP,lQ,lR,lS,lT,lU,lV,lW,lX,lY,lZ,l_,m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,ma,mb,mc,md,me,mf,mg,mh,mi,mj,mk,ml,mm,mn,mo,mp,mq,mr,ms,mt,mu,mv,mw,mx,my,mz,mA,mB,mC,mD,mE,mF,mG,mH,mI,mJ,mK,mL,mM,mN,mO,mP,mQ,mR,mS,mT,mU,mV,mW,mX,mY,mZ,m_,n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,na,nb,nc,nd,ne,nf,ng,nh,ni,nj,nk,nl,nm,nn,no,np,nq,nr,ns,nt,nu,nv,nw,nx,ny,nz,nA,nB,nC,nD,nE,nF,nG,nH,nI,nJ,nK,nL,nM,nN,nO,nP,nQ,nR,nS,nT,nU,nV,nW,nX,nY,nZ,n_,o0,o1,o2,o3,o4,o5,o6,o7,o8,o9,oa,ob,oc,od,oe,of,og,oh,oi,oj,ok,ol,om,on,oo,op,oq,os,ot,ou,ov,ow,ox,oy,oz,oA,oB,oC,oD,oE,oF,oG,oH,oI,oJ,oK,oL,oM,oN,oO,oP,oQ,oR,oS,oT,oU,oV,oW,oX,oY,oZ,o_,p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,pa,pb,pc,pd,pe,pf,pg,ph,pi,pj,pk,pl,pm,pn,po,pp,pq,pr,ps,pt,pu,pv,pw,px,py,pz,pA,pB,pC,pD,pE,pF,pG,pH,pI,pJ,pK,pL,pM,pN,pO,pP,pQ,pR,pS,pT,pU,pV,pW,pX,pY,pZ,p_,q0,q1,q2,q3,q4,q5,q6,q7,q8,q9,qa,qb,qc,qd,qe,qf,qg,qh,qi,qj,qk,ql,qm,qn,qo,qp,qq,qr,qs,qt,qu,qv,qw,qx,qy,qz,qA,qB,qC,qD,qE,qF,qG,qH,qI,qJ,qK,qL,qM,qN,qO,qP,qQ,qR,qS,qT,qU,qV,qW,qX,qY,qZ,q_,r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,ra,rb,rc,rd,re,rf,rg,rh,ri,rj,rk,rl,rm,rn,ro,rp,rq,rr,rs,rt,ru,rv,rw,rx,ry,rz,rA,rB,rC,rD,rE,rF,rG,rH,rI,rJ,rK,rL,rM,rN,rO,rP,rQ,rR,rS,rT,rU,rV,rW,rX,rY,rZ,r_,s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,sa,sb,sc,sd,se,sf,sg,sh,si,sj,sk,sl,sm,sn,so,sp,sq,sr,ss,st,su,sv,sw,sx,sy,sz,sA,sB,sC,sD,sE,sF,sG,sH,sI,sJ,sK,sL,sM,sN,sO,sP,sQ,sR,sS,sT,sU,sV,sW,sX,sY,sZ,s_,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc,td,te,tf,tg,th,ti,tj,tk,tl,tm,tn,to,tp,tq,tr,ts,tt,tu,tv,tw,tx,ty,tz,tA,tB,tC,tD,tE,tF,tG,tH,tI,tJ,tK,tL,tM,tN,tO,tP,tQ,tR,tS,tT,tU,tV,tW,tX,tY,tZ,t_,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,ua,ub,uc,ud,ue,uf,ug,uh,ui,uj,uk,ul,um,un,uo,up,uq,ur,us,ut,uu,uv,uw,ux,uy,uz,uA,uB,uC,uD,uE,uF,uG,uH,uI,uJ,uK,uL,uM,uN,uO,uP,uQ,uR,uS,uT,uU,uV,uW,uX,uY,uZ,u_,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9,va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq,vr,vs,vt,vu,vv,vw,vx,vy,vz,vA,vB,vC,vD,vE,vF,vG,vH,vI,vJ,vK,vL,vM,vN,vO,vP,vQ,vR,vS,vT,vU,vV,vW,vX,vY,vZ,v_,w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,wa,wb,wc,wd,we,wf,wg,wh,wi,wj,wk,wl,wm,wn,wo,wp,wq,wr,ws,wt,wu,wv,ww,wx,wy,wz,wA,wB,wC,wD,wE,wF,wG,wH,wI,wJ,wK,wL,wM,wN,wO,wP,wQ,wR,wS,wT,wU,wV,wW,wX,wY,wZ,w_,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,xa,xb,xc,xd,xe,xf,xg,xh,xi,xj,xk,xl,xm,xn,xo,xp,xq,xr,xs,xt,xu,xv,xw,xx,xy,xz,xA,xB,xC,xD,xE,xF,xG,xH,xI,xJ,xK,xL,xM,xN,xO,xP,xQ,xR,xS,xT,xU,xV,xW,xX,xY,xZ,x_,y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,ya,yb,yc,yd,ye,yf,yg,yh,yi,yj,yk,yl,ym,yn,yo,yp,yq,yr,ys,yt,yu,yv,yw,yx,yy,yz,yA,yB,yC,yD,yE,yF,yG,yH,yI,yJ,yK,yL,yM,yN,yO,yP,yQ,yR,yS,yT,yU,yV,yW,yX,yY,yZ,y_,z0,z1,z2,z3,z4,z5,z6,z7,z8,z9,za,zb,zc,zd,ze,zf,zg,zh,zi,zj,zk,zl,zm,zn,zo,zp,zq,zr,zs,zt,zu,zv,zw,zx,zy,zz,zA,zB,zC,zD,zE,zF,zG,zH,zI,zJ,zK,zL,zM,zN,zO,zP,zQ,zR,zS,zT,zU,zV,zW,zX,zY,zZ,z_,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,Aa,Ab,Ac,Ad,Ae,Af,Ag,Ah,Ai,Aj,Ak,Al,Am,An,Ao,Ap,Aq,Ar,As,At,Au,Av,Aw,Ax,Ay,Az,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ,A_,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,Ba,Bb,Bc,Bd,Be,Bf,Bg,Bh,Bi,Bj,Bk,Bl,Bm,Bn,Bo,Bp,Bq,Br,Bs,Bt,Bu,Bv,Bw,Bx,By,Bz,BA,BB,BC,BD,BE,BF,BG,BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,BY,BZ,B_,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,Ca,Cb,Cc,Cd,Ce,Cf,Cg,Ch,Ci,Cj,Ck,Cl,Cm,Cn,Co,Cp,Cq,Cr,Cs,Ct,Cu,Cv,Cw,Cx,Cy,Cz,CA,CB,CC,CD,CE,CF,CG,CH,CI,CJ,CK,CL,CM,CN,CO,CP,CQ,CR,CS,CT,CU,CV,CW,CX,CY,CZ,C_,D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,Da,Db,Dc,Dd,De,Df,Dg,Dh,Di,Dj,Dk,Dl,Dm,Dn,Do,Dp,Dq,Dr,Ds,Dt,Du,Dv,Dw,Dx,Dy,Dz,DA,DB,DC,DD,DE,DF,DG,DH,DI,DJ,DK,DL,DM,DN,DO,DP,DQ,DR,DS,DT,DU,DV,DW,DX,DY,DZ,D_,E0,E1,E2,E3,E4,E5,E6,E7,E8,E9,Ea,Eb,Ec,Ed,Ee,Ef,Eg,Eh,Ei,Ej,Ek,El,Em,En,Eo,Ep,Eq,Er,Es,Et,Eu,Ev,Ew,Ex,Ey,Ez,EA,EB,EC,ED,EE,EF,EG,EH,EI,EJ,EK,EL,EM,EN,EO,EP,EQ,ER,ES,ET,EU,EV,EW,EX,EY,EZ,E_,F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,Fa,Fb,Fc,Fd,Fe,Ff,Fg,Fh,Fi,Fj,Fk,Fl,Fm,Fn,Fo,Fp,Fq,Fr,Fs,Ft,Fu,Fv,Fw,Fx,Fy,Fz,FA,FB,FC,FD,FE,FF,FG,FH,FI,FJ,FK,FL,FM,FN,FO,FP,FQ,FR,FS,FT,FU,FV,FW,FX,FY,FZ,F_,G0,G1,G2,G3,G4,G5,G6,G7,G8,G9,Ga,Gb,Gc,Gd,Ge,Gf,Gg,Gh,Gi,Gj,Gk,Gl,Gm,Gn,Go,Gp,Gq,Gr,Gs,Gt,Gu,Gv,Gw,Gx,Gy,Gz,GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK,GL,GM,GN,GO,GP,GQ,GR,GS,GT,GU,GV,GW,GX,GY,GZ,G_,H0,H1,H2,H3,H4,H5,H6,H7,H8,H9,Ha,Hb,Hc,Hd,He,Hf,Hg,Hh,Hi,Hj,Hk,Hl,Hm,Hn,Ho,Hp,Hq,Hr,Hs,Ht,Hu,Hv,Hw,Hx,Hy,Hz,HA,HB,HC,HD,HE,HF,HG,HH,HI,HJ,HK,HL,HM,HN,HO,HP,HQ,HR,HS,HT,HU,HV,HW,HX,HY,HZ,H_,I0,I1,I2,I3,I4,I5,I6,I7,I8,I9,Ia,Ib,Ic,Id,Ie,If,Ig,Ih,Ii,Ij,Ik,Il,Im,In,Io,Ip,Iq,Ir,Is,It,Iu,Iv,Iw,Ix,Iy,Iz,IA,IB,IC,ID,IE,IF,IG,IH,II,IJ,IK,IL,IM,IN,IO,IP,IQ,IR,IS,IT,IU,IV,IW,IX,IY,IZ,I_,J0,J1,J2,J3,J4,J5,J6,J7,J8,J9,Ja,Jb,Jc,Jd,Je,Jf,Jg,Jh,Ji,Jj,Jk,Jl,Jm,Jn,Jo,Jp,Jq,Jr,Js,Jt,Ju,Jv,Jw,Jx,Jy,Jz,JA,JB,JC,JD,JE,JF,JG,JH,JI,JJ,JK,JL,JM,JN,JO,JP,JQ,JR,JS,JT,JU,JV,JW,JX,JY,JZ,J_,K0,K1,K2,K3,K4,K5,K6,K7,K8,K9,Ka,Kb,Kc,Kd,Ke,Kf,Kg,Kh,Ki,Kj,Kk,Kl,Km,Kn,Ko,Kp,Kq,Kr,Ks,Kt,Ku,Kv,Kw,Kx,Ky,Kz,KA,KB,KC,KD,KE,KF,KG,KH,KI,KJ,KK,KL,KM,KN,KO,KP,KQ,KR,KS,KT,KU,KV,KW,KX,KY,KZ,K_,L0,L1,L2,L3,L4,L5,L6,L7,L8,L9,La,Lb,Lc,Ld,Le,Lf,Lg,Lh,Li,Lj,Lk,Ll,Lm,Ln,Lo,Lp,Lq,Lr,Ls,Lt,Lu,Lv,Lw,Lx,Ly,Lz,LA,LB,LC,LD,LE,LF,LG,LH,LI,LJ,LK,LL,LM,LN,LO,LP,LQ,LR,LS,LT,LU,LV,LW,LX,LY,LZ,L_,M0,M1,M2,M3,M4,M5,M6,M7,M8,M9,Ma,Mb,Mc,Md,Me,Mf,Mg,Mh,Mi,Mj,Mk,Ml,Mm,Mn,Mo,Mp,Mq,Mr,Ms,Mt,Mu,Mv,Mw,Mx,My,Mz,MA,MB,MC,MD,ME,MF,MG,MH,MI,MJ,MK,ML,MM,MN,MO,MP,MQ,MR,MS,MT,MU,MV,MW,MX,MY,MZ,M_,N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,Na,Nb,Nc,Nd,Ne,Nf,Ng,Nh,Ni,Nj,Nk,Nl,Nm,Nn,No,Np,Nq,Nr,Ns,Nt,Nu,Nv,Nw,Nx,Ny,Nz,NA,NB,NC,ND,NE,NF,NG,NH,NI,NJ,NK,NL,NM,NN,NO,NP,NQ,NR,NS,NT,NU,NV,NW,NX,NY,NZ,N_,O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,Oa,Ob,Oc,Od,Oe,Of,Og,Oh,Oi,Oj,Ok,Ol,Om,On,Oo,Op,Oq,Or,Os,Ot,Ou,Ov,Ow,Ox,Oy,Oz,OA,OB,OC,OD,OE,OF,OG,OH,OI,OJ,OK,OL,OM,ON,OO,OP,OQ,OR,OS,OT,OU,OV,OW,OX,OY,OZ,O_,P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,Pa,Pb,Pc,Pd,Pe,Pf,Pg,Ph,Pi,Pj,Pk,Pl,Pm,Pn,Po,Pp,Pq,Pr,Ps,Pt,Pu,Pv,Pw,Px,Py,Pz,PA,PB,PC,PD,PE,PF,PG,PH,PI,PJ,PK,PL,PM,PN,PO,PP,PQ,PR,PS,PT,PU,PV,PW,PX,PY,PZ,P_,Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Qa,Qb,Qc,Qd,Qe,Qf,Qg,Qh,Qi,Qj,Qk,Ql,Qm,Qn,Qo,Qp,Qq,Qr,Qs,Qt,Qu,Qv,Qw,Qx,Qy,Qz,QA,QB,QC,QD,QE,QF,QG,QH,QI,QJ,QK,QL,QM,QN,QO,QP,QQ,QR,QS,QT,QU,QV,QW,QX,QY,QZ,Q_,R0,R1,R2,R3,R4,R5,R6,R7,R8,R9,Ra,Rb,Rc,Rd,Re,Rf,Rg,Rh,Ri,Rj,Rk,Rl,Rm,Rn,Ro,Rp,Rq,Rr,Rs,Rt,Ru,Rv,Rw,Rx,Ry,Rz,RA,RB,RC,RD,RE,RF,RG,RH,RI,RJ,RK,RL,RM,RN,RO,RP,RQ,RR,RS,RT,RU,RV,RW,RX,RY,RZ,R_,S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,Sa,Sb,Sc,Sd,Se,Sf,Sg,Sh,Si,Sj,Sk,Sl,Sm,Sn,So,Sp,Sq,Sr,Ss,St,Su,Sv,Sw,Sx,Sy,Sz,SA,SB,SC,SD,SE,SF,SG,SH,SI,SJ,SK,SL,SM,SN,SO,SP,SQ,SR,SS,ST,SU,SV,SW,SX,SY,SZ,S_,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,Ta,Tb,Tc,Td,Te,Tf,Tg,Th,Ti,Tj,Tk,Tl,Tm,Tn,To,Tp,Tq,Tr,Ts,Tt,Tu,Tv,Tw,Tx,Ty,Tz,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR,TS,TT,TU,TV,TW,TX,TY,TZ,T_,U0,U1,U2,U3,U4,U5,U6,U7,U8,U9,Ua,Ub,Uc,Ud,Ue,Uf,Ug,Uh,Ui,Uj,Uk,Ul,Um,Un,Uo,Up,Uq,Ur,Us,Ut,Uu,Uv,Uw,Ux,Uy,Uz,UA,UB,UC,UD,UE,UF,UG,UH,UI,UJ,UK,UL,UM,UN,UO,UP,UQ,UR,US,UT,UU,UV,UW,UX,UY,UZ,U_,V0,V1,V2,V3,V4,V5,V6,V7,V8,V9,Va,Vb,Vc,Vd,Ve,Vf,Vg,Vh,Vi,Vj,Vk,Vl,Vm,Vn,Vo,Vp,Vq,Vr,Vs,Vt,Vu,Vv,Vw,Vx,Vy,Vz,VA,VB,VC,VD,VE,VF,VG,VH,VI,VJ,VK,VL,VM,VN,VO,VP,VQ,VR,VS,VT,VU,VV,VW,VX,VY,VZ,V_,W0,W1,W2,W3,W4,W5,W6,W7,W8,W9,Wa,Wb,Wc,Wd,We,Wf,Wg,Wh,Wi,Wj,Wk,Wl,Wm,Wn,Wo,Wp,Wq,Wr,Ws,Wt,Wu,Wv,Ww,Wx,Wy,Wz,WA,WB,WC,WD,WE,WF,WG,WH,WI,WJ,WK,WL,WM,WN,WO,WP,WQ,WR,WS,WT,WU,WV,WW,WX,WY,WZ,W_,X0,X1,X2,X3,X4,X5,X6,X7,X8,X9,Xa,Xb,Xc,Xd,Xe,Xf,Xg,Xh,Xi,Xj,Xk,Xl,Xm,Xn,Xo,Xp,Xq,Xr,Xs,Xt,Xu,Xv,Xw,Xx,Xy,Xz,XA,XB,XC,XD,XE,XF,XG,XH,XI,XJ,XK,XL,XM,XN,XO,XP,XQ,XR,XS,XT,XU,XV,XW,XX,XY,XZ,X_,Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8,Y9,Ya,Yb,Yc,Yd,Ye,Yf,Yg,Yh,Yi,Yj,Yk,Yl,Ym,Yn,Yo,Yp,Yq,Yr,Ys,Yt,Yu,Yv,Yw,Yx,Yy,Yz,YA,YB,YC,YD,YE,YF,YG,YH,YI,YJ,YK,YL,YM,YN,YO,YP,YQ,YR,YS,YT,YU,YV,YW,YX,YY,YZ,Y_,Z0,Z1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9,Za,Zb,Zc,Zd,Ze,Zf,Zg,Zh,Zi,Zj,Zk,Zl,Zm,Zn,Zo,Zp,Zq,Zr,Zs,Zt,Zu,Zv,Zw,Zx,Zy,Zz,ZA,ZB,ZC,ZD,ZE,ZF,ZG,ZH,ZI,ZJ,ZK,ZL,ZM,ZN,ZO,ZP,ZQ,ZR,ZS,ZT,ZU,ZV,ZW,ZX,ZY,ZZ,Z_,_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_k,_l,_m,_n,_o,_p,_q,_r,_s,_t,_u,_v,_w,_x,_y,_z,_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N,_O,_P,_Q,_R,_S,_T,_U,_V,_W,_X,_Y,_Z,__,a00,a01,a02=1;print(dontrenameme)'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Identifier in MemberExpression',\n\t\t\t\t'original': 'local x = y() print(x.someProperty)',\n\t\t\t\t'minified': 'local a=y()print(a.someProperty)'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Identifier in MemberExpression',\n\t\t\t\t'original': 'local x = y() print(x[\"someProperty\"])',\n\t\t\t\t'minified': 'local a=y()print(a[\"someProperty\"])'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Identifier in MemberExpression',\n\t\t\t\t'original': 'local x = y() print(x:someProperty())',\n\t\t\t\t'minified': 'local a=y()print(a:someProperty())'\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Variable shortening should not shorten `self` in a function',\n\t\t\t\t'original': 'local t = {num = 2} function t:func() return self.num end',\n\t\t\t\t'minified': 'local a={num=2}function a:func()return self.num end'\n\t\t\t}\n\t\t],\n\n\t\t// TableKey\n\t\t'TableKey': [\n\t\t\t{\n\t\t\t\t'description': 'TableKeyString',\n\t\t\t\t'original': 'function f(x) end function g(y) local h = { x = y } end',\n\t\t\t\t'minified': 'function f(a)end;function g(b)local c={x=b}end',\n\t\t\t}\n\t\t],\n\n\t\t// Miscellaneous\n\t\t'Miscellaneous': [\n\t\t\t{\n\t\t\t\t'description': 'Empty input',\n\t\t\t\t'original': '',\n\t\t\t\t'minified': ''\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Passing an AST',\n\t\t\t\t'original': {'type':'Chunk','body':[{'type':'AssignmentStatement','variables':[{'type':'Identifier','name':'a','isLocal':false}],'init':[{'type':'NumericLiteral','value':42,'raw':'42'}]}],'comments':[],'globals':[{'type':'Identifier','name':'a','isLocal':false}]},\n\t\t\t\t'minified': 'a=42'\n\t\t\t}\n\t\t],\n\n\t\t// Error handling\n\t\t'Error handling': [\n\t\t\t{\n\t\t\t\t'description': 'Unknown statement type: `LolStatement`',\n\t\t\t\t'original': {'type':'Chunk','body':[{'type':'LolStatement','variables':[{'type':'Identifier','name':'a','isLocal':false}],'init':[{'type':'NumericLiteral','value':42,'raw':'42'}]}],'comments':[],'globals':[{'type':'Identifier','name':'a','isLocal':false}]},\n\t\t\t\t'error': TypeError\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Unknown expression type: `LolExpression`',\n\t\t\t\t'original': {'type':'Chunk','body':[{'type':'AssignmentStatement','variables':[{'type':'LolExpression','name':'a','isLocal':false}],'init':[{'type':'NumericLiteral','value':42,'raw':'42'}]}],'comments':[],'globals':[{'type':'Identifier','name':'a','isLocal':false}]},\n\t\t\t\t'error': TypeError\n\t\t\t},\n\t\t\t{\n\t\t\t\t'description': 'Missing required AST property: `globals`',\n\t\t\t\t'original': {'type':'Chunk','body':[{'type':'AssignmentStatement','variables':[{'type':'Identifier','name':'a'}],'init':[{'type':'NumericLiteral','value':42,'raw':'42'}]}],'comments':[]},\n\t\t\t\t'error': Error\n\t\t\t}\n\t\t]\n\t};\n\n\tfunction forEach(array, fn) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tfn(array[index]);\n\t\t}\n\t}\n\n\tfunction forOwn(object, fn) {\n\t\tvar key;\n\t\tfor (key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tfn(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n\n\t// explicitly call `QUnit.module()` instead of `module()`\n\t// in case we are in a CLI environment\n\n\t// `throws` is a reserved word in ES3; alias it to avoid errors\n\tvar raises = QUnit.assert['throws'];\n\n\t// Extend `Object.prototype` to see if luamin can handle it\n\tObject.prototype.preserveIdentifiers = true;\n\n\tQUnit.module('luamin');\n\tforOwn(data, function(items, groupName) {\n\t\ttest(groupName, function() {\n\t\t\tif (groupName == 'Error handling') {\n\t\t\t\tforEach(items, function(item) {\n\t\t\t\t\traises(\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tminify(item.original);\n\t\t\t\t\t\t},\n\t\t\t\t\t\titem.error,\n\t\t\t\t\t\titem.description\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tforEach(items, function(item) {\n\t\t\t\t\tequal(\n\t\t\t\t\t\tminify(item.original),\n\t\t\t\t\t\titem.minified,\n\t\t\t\t\t\titem.description\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\t/*--------------------------------------------------------------------------*/\n\n\t// configure QUnit and call `QUnit.start()` for\n\t// Narwhal, Node.js, PhantomJS, Rhino, and RingoJS\n\tif (!root.document || root.phantom) {\n\t\tQUnit.config.noglobals = true;\n\t\tQUnit.start();\n\t}\n}(typeof global == 'object' && global || this));\n"
  }
]