Ignore:
Timestamp:
03/14/14 12:36:58 (11 years ago)
Author:
hendrikvanantwerpen
Message:

Enable deployment with Grunt.

Location:
Dev/trunk
Files:
75 added
11 deleted
53 edited

Legend:

Unmodified
Added
Removed
  • Dev/trunk

    • Property svn:ignore
      •  

        old new  
        11build
        2 quod-erat.git
  • Dev/trunk/node_modules/grunt-coffeelint/.travis.yml

    r484 r516  
    11language: node_js
    22node_js:
    3   - 0.6
    43  - 0.8
     4before_script:
     5  - npm install -g grunt-cli
  • Dev/trunk/node_modules/grunt-coffeelint/README.md

    r484 r516  
    1414    grunt.loadNpmTasks('grunt-coffeelint');
    1515
     16## Options
     17
     18A few additional options are supported:
     19
     20### force
     21Type: `Boolean`
     22Default value: `false`
     23
     24Set `force` to `true` to report CoffeeLint errors but not fail the task.
    1625
    1726## Configuration
     
    6877````
    6978
    70 For available options see [example configuration] or [coffeelint homepage].
    71 
     79For available options see [coffeelint homepage].
    7280
    7381[CoffeeLint]: http://www.coffeelint.org/
    7482[coffeelint homepage]: http://www.coffeelint.org/
    75 [example configuration]: https://raw.github.com/clutchski/coffeelint/master/examples/coffeelint.json
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/.travis.yml

    r484 r516  
    11language: node_js
    22node_js:
    3   - "0.6"
    43  - "0.8"
    54  - "0.10"
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/bin/coffeelint

    r484 r516  
    11#!/usr/bin/env node
    22
    3 require('../lib/commandline')
     3var path = require("path");
     4var fs   = require("fs");
     5
     6// path.existsSync was moved to fs.existsSync node 0.6 -> 0.8
     7var existsFn = fs.existsSync || path.existsSync;
     8
     9var thisdir = path.dirname(fs.realpathSync(__filename));
     10
     11// This setup allows for VERY fast development. You can clear the lib
     12// directory then run without having to recompile the coffeescript.
     13//
     14// I use this so vim runs the newest code while I work on CoffeeLint. -Asa
     15commandline = path.join(thisdir, '..', "lib", "commandline.js");
     16if (existsFn(commandline)) {
     17    require(commandline);
     18} else {
     19    require('coffee-script');
     20    require('../src/commandline');
     21}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/coffeelint.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.coffeelint=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
     2module.exports={
     3  "name": "coffeelint",
     4  "description": "Lint your CoffeeScript",
     5  "version": "1.0.8",
     6  "homepage": "http://www.coffeelint.org",
     7  "keywords": [
     8    "lint",
     9    "coffeescript",
     10    "coffee-script"
     11  ],
     12  "author": "Matthew Perpick <clutchski@gmail.com>",
     13  "main": "./lib/coffeelint.js",
     14  "engines": {
     15    "node": ">=0.8.0"
     16  },
     17  "repository": {
     18    "type": "git",
     19    "url": "git://github.com/clutchski/coffeelint.git"
     20  },
     21  "bin": {
     22    "coffeelint": "./bin/coffeelint"
     23  },
     24  "dependencies": {
     25    "optimist": ">=0.2.8",
     26    "coffee-script": "1.6.x",
     27    "glob": ">=3.1.9"
     28  },
     29  "devDependencies": {
     30    "vows": ">=0.6.0",
     31    "underscore": ">=1.4.4"
     32  },
     33  "licenses": [
     34    {
     35      "type": "MIT",
     36      "url": "http://github.com/clutchski/coffeelint/raw/master/LICENSE"
     37    }
     38  ],
     39  "scripts": {
     40    "pretest": "cake compile",
     41    "test": "vows --spec test/*.coffee test/*.litcoffee",
     42    "posttest": "npm run lint",
     43    "prepublish": "cake prepublish",
     44    "publish": "cake publish",
     45    "lint": "cake compile && ./bin/coffeelint -f coffeelint.json src/*.coffee test/*.coffee test/*.litcoffee",
     46    "lint-csv": "cake compile && ./bin/coffeelint --csv -f coffeelint.json src/*.coffee test/*.coffee",
     47    "lint-jslint": "cake compile && ./bin/coffeelint --jslint -f coffeelint.json src/*.coffee test/*.coffee",
     48    "compile": "cake compile"
     49  }
     50}
     51},{}],2:[function(_dereq_,module,exports){
     52var ASTApi, ASTLinter, BaseLinter,
     53  __hasProp = {}.hasOwnProperty,
     54  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
     55
     56BaseLinter = _dereq_('./base_linter.coffee');
     57
     58ASTApi = (function() {
     59  function ASTApi(config) {
     60    this.config = config;
     61  }
     62
     63  return ASTApi;
     64
     65})();
     66
     67module.exports = ASTLinter = (function(_super) {
     68  __extends(ASTLinter, _super);
     69
     70  function ASTLinter(source, config, rules, CoffeeScript) {
     71    this.CoffeeScript = CoffeeScript;
     72    ASTLinter.__super__.constructor.call(this, source, config, rules);
     73    this.astApi = new ASTApi(this.config);
     74  }
     75
     76  ASTLinter.prototype.acceptRule = function(rule) {
     77    return typeof rule.lintAST === 'function';
     78  };
     79
     80  ASTLinter.prototype.lint = function() {
     81    var coffeeError, err, errors, rule, v, _i, _len, _ref;
     82    errors = [];
     83    try {
     84      this.node = this.CoffeeScript.nodes(this.source);
     85    } catch (_error) {
     86      coffeeError = _error;
     87      err = this._parseCoffeeScriptError(coffeeError);
     88      if (err != null) {
     89        errors.push(err);
     90      }
     91      return errors;
     92    }
     93    _ref = this.rules;
     94    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     95      rule = _ref[_i];
     96      this.astApi.createError = (function(_this) {
     97        return function(attrs) {
     98          if (attrs == null) {
     99            attrs = {};
     100          }
     101          return _this.createError(rule.rule.name, attrs);
     102        };
     103      })(this);
     104      rule.errors = errors;
     105      v = this.normalizeResult(rule, rule.lintAST(this.node, this.astApi));
     106      if (v != null) {
     107        return v;
     108      }
     109    }
     110    return errors;
     111  };
     112
     113  ASTLinter.prototype._parseCoffeeScriptError = function(coffeeError) {
     114    var attrs, lineNumber, match, message, rule;
     115    rule = this.config['coffeescript_error'];
     116    message = coffeeError.toString();
     117    lineNumber = -1;
     118    if (coffeeError.location != null) {
     119      lineNumber = coffeeError.location.first_line + 1;
     120    } else {
     121      match = /line (\d+)/.exec(message);
     122      if ((match != null ? match.length : void 0) > 1) {
     123        lineNumber = parseInt(match[1], 10);
     124      }
     125    }
     126    attrs = {
     127      message: message,
     128      level: rule.level,
     129      lineNumber: lineNumber
     130    };
     131    return this.createError('coffeescript_error', attrs);
     132  };
     133
     134  return ASTLinter;
     135
     136})(BaseLinter);
     137
     138
     139},{"./base_linter.coffee":3}],3:[function(_dereq_,module,exports){
     140var BaseLinter, defaults, extend,
     141  __slice = [].slice;
     142
     143extend = function() {
     144  var destination, k, source, sources, v, _i, _len;
     145  destination = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
     146  for (_i = 0, _len = sources.length; _i < _len; _i++) {
     147    source = sources[_i];
     148    for (k in source) {
     149      v = source[k];
     150      destination[k] = v;
     151    }
     152  }
     153  return destination;
     154};
     155
     156defaults = function(source, defaults) {
     157  return extend({}, defaults, source);
     158};
     159
     160module.exports = BaseLinter = (function() {
     161  function BaseLinter(source, config, rules) {
     162    this.source = source;
     163    this.config = config;
     164    this.setupRules(rules);
     165  }
     166
     167  BaseLinter.prototype.isObject = function(obj) {
     168    return obj === Object(obj);
     169  };
     170
     171  BaseLinter.prototype.createError = function(ruleName, attrs) {
     172    var level;
     173    if (attrs == null) {
     174      attrs = {};
     175    }
     176    if (attrs.level == null) {
     177      attrs.level = this.config[ruleName].level;
     178    }
     179    level = attrs.level;
     180    if (level !== 'ignore' && level !== 'warn' && level !== 'error') {
     181      throw new Error("unknown level " + level);
     182    }
     183    if (level === 'error' || level === 'warn') {
     184      attrs.rule = ruleName;
     185      return defaults(attrs, this.config[ruleName]);
     186    } else {
     187      return null;
     188    }
     189  };
     190
     191  BaseLinter.prototype.acceptRule = function(rule) {
     192    throw new Error("acceptRule needs to be overridden in the subclass");
     193  };
     194
     195  BaseLinter.prototype.setupRules = function(rules) {
     196    var RuleConstructor, level, name, rule, _results;
     197    this.rules = [];
     198    _results = [];
     199    for (name in rules) {
     200      RuleConstructor = rules[name];
     201      level = this.config[name].level;
     202      if (level === 'error' || level === 'warn') {
     203        rule = new RuleConstructor(this, this.config);
     204        if (this.acceptRule(rule)) {
     205          _results.push(this.rules.push(rule));
     206        } else {
     207          _results.push(void 0);
     208        }
     209      } else if (level !== 'ignore') {
     210        throw new Error("unknown level " + level);
     211      } else {
     212        _results.push(void 0);
     213      }
     214    }
     215    return _results;
     216  };
     217
     218  BaseLinter.prototype.normalizeResult = function(p, result) {
     219    if (result === true) {
     220      return this.createError(p.rule.name);
     221    }
     222    if (this.isObject(result)) {
     223      return this.createError(p.rule.name, result);
     224    }
     225  };
     226
     227  return BaseLinter;
     228
     229})();
     230
     231
     232},{}],4:[function(_dereq_,module,exports){
     233
    2234/*
    3235CoffeeLint
     
    5237Copyright (c) 2011 Matthew Perpick.
    6238CoffeeLint is freely distributable under the MIT license.
    7 */
    8 
    9 
    10 (function() {
    11   var ASTLinter, CoffeeScript, ERROR, IGNORE, LexicalLinter, LineLinter, RULES, WARN, block_config, coffeelint, createError, defaults, extend, mergeDefaultConfig, regexes,
    12     __slice = [].slice,
    13     __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
    14 
    15   coffeelint = {};
    16 
    17   if (typeof exports !== "undefined" && exports !== null) {
    18     coffeelint = exports;
    19     CoffeeScript = require('coffee-script');
     239 */
     240var ASTLinter, CoffeeScript, ERROR, IGNORE, LexicalLinter, LineLinter, RULES, WARN, coffeelint, cs, defaults, difference, extend, hasSyntaxError, mergeDefaultConfig, packageJSON, _rules,
     241  __slice = [].slice,
     242  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
     243
     244coffeelint = exports;
     245
     246if (typeof window !== "undefined" && window !== null) {
     247  CoffeeScript = window.CoffeeScript;
     248} else {
     249  cs = 'coffee-script';
     250  CoffeeScript = _dereq_(cs);
     251}
     252
     253packageJSON = _dereq_('./../package.json');
     254
     255coffeelint.VERSION = packageJSON.version;
     256
     257ERROR = 'error';
     258
     259WARN = 'warn';
     260
     261IGNORE = 'ignore';
     262
     263coffeelint.RULES = RULES = _dereq_('./rules.coffee');
     264
     265extend = function() {
     266  var destination, k, source, sources, v, _i, _len;
     267  destination = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
     268  for (_i = 0, _len = sources.length; _i < _len; _i++) {
     269    source = sources[_i];
     270    for (k in source) {
     271      v = source[k];
     272      destination[k] = v;
     273    }
     274  }
     275  return destination;
     276};
     277
     278defaults = function(source, defaults) {
     279  return extend({}, defaults, source);
     280};
     281
     282difference = function(a, b) {
     283  var j, _ref, _results;
     284  j = 0;
     285  _results = [];
     286  while (j < a.length) {
     287    if (_ref = a[j], __indexOf.call(b, _ref) >= 0) {
     288      _results.push(a.splice(j, 1));
     289    } else {
     290      _results.push(j++);
     291    }
     292  }
     293  return _results;
     294};
     295
     296LineLinter = _dereq_('./line_linter.coffee');
     297
     298LexicalLinter = _dereq_('./lexical_linter.coffee');
     299
     300ASTLinter = _dereq_('./ast_linter.coffee');
     301
     302mergeDefaultConfig = function(userConfig) {
     303  var config, rule, ruleConfig;
     304  config = {};
     305  for (rule in RULES) {
     306    ruleConfig = RULES[rule];
     307    config[rule] = defaults(userConfig[rule], ruleConfig);
     308  }
     309  return config;
     310};
     311
     312coffeelint.invertLiterate = function(source) {
     313  var line, newSource, _i, _len, _ref;
     314  source = CoffeeScript.helpers.invertLiterate(source);
     315  newSource = "";
     316  _ref = source.split("\n");
     317  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     318    line = _ref[_i];
     319    if (line.match(/^#/)) {
     320      line = line.replace(/\s*$/, '');
     321    }
     322    line = line.replace(/^\s{4}/g, '');
     323    newSource += "" + line + "\n";
     324  }
     325  return newSource;
     326};
     327
     328_rules = {};
     329
     330coffeelint.registerRule = function(RuleConstructor, ruleName) {
     331  var e, name, p, _ref, _ref1;
     332  if (ruleName == null) {
     333    ruleName = void 0;
     334  }
     335  p = new RuleConstructor;
     336  name = (p != null ? (_ref = p.rule) != null ? _ref.name : void 0 : void 0) || "(unknown)";
     337  e = function(msg) {
     338    throw new Error("Invalid rule: " + name + " " + msg);
     339  };
     340  if (p.rule == null) {
     341    e("Rules must provide rule attribute with a default configuration.");
     342  }
     343  if (p.rule.name == null) {
     344    e("Rule defaults require a name");
     345  }
     346  if ((ruleName != null) && ruleName !== p.rule.name) {
     347    e("Mismatched rule name: " + ruleName);
     348  }
     349  if (p.rule.message == null) {
     350    e("Rule defaults require a message");
     351  }
     352  if (p.rule.description == null) {
     353    e("Rule defaults require a description");
     354  }
     355  if ((_ref1 = p.rule.level) !== 'ignore' && _ref1 !== 'warn' && _ref1 !== 'error') {
     356    e("Default level must be 'ignore', 'warn', or 'error'");
     357  }
     358  if (typeof p.lintToken === 'function') {
     359    if (!p.tokens) {
     360      e("'tokens' is required for 'lintToken'");
     361    }
     362  } else if (typeof p.lintLine !== 'function' && typeof p.lintAST !== 'function') {
     363    e("Rules must implement lintToken, lintLine, or lintAST");
     364  }
     365  RULES[p.rule.name] = p.rule;
     366  return _rules[p.rule.name] = RuleConstructor;
     367};
     368
     369coffeelint.registerRule(_dereq_('./rules/arrow_spacing.coffee'));
     370
     371coffeelint.registerRule(_dereq_('./rules/no_tabs.coffee'));
     372
     373coffeelint.registerRule(_dereq_('./rules/no_trailing_whitespace.coffee'));
     374
     375coffeelint.registerRule(_dereq_('./rules/max_line_length.coffee'));
     376
     377coffeelint.registerRule(_dereq_('./rules/line_endings.coffee'));
     378
     379coffeelint.registerRule(_dereq_('./rules/no_trailing_semicolons.coffee'));
     380
     381coffeelint.registerRule(_dereq_('./rules/indentation.coffee'));
     382
     383coffeelint.registerRule(_dereq_('./rules/camel_case_classes.coffee'));
     384
     385coffeelint.registerRule(_dereq_('./rules/colon_assignment_spacing.coffee'));
     386
     387coffeelint.registerRule(_dereq_('./rules/no_implicit_braces.coffee'));
     388
     389coffeelint.registerRule(_dereq_('./rules/no_plusplus.coffee'));
     390
     391coffeelint.registerRule(_dereq_('./rules/no_throwing_strings.coffee'));
     392
     393coffeelint.registerRule(_dereq_('./rules/no_backticks.coffee'));
     394
     395coffeelint.registerRule(_dereq_('./rules/no_implicit_parens.coffee'));
     396
     397coffeelint.registerRule(_dereq_('./rules/no_empty_param_list.coffee'));
     398
     399coffeelint.registerRule(_dereq_('./rules/no_stand_alone_at.coffee'));
     400
     401coffeelint.registerRule(_dereq_('./rules/space_operators.coffee'));
     402
     403coffeelint.registerRule(_dereq_('./rules/duplicate_key.coffee'));
     404
     405coffeelint.registerRule(_dereq_('./rules/empty_constructor_needs_parens.coffee'));
     406
     407coffeelint.registerRule(_dereq_('./rules/cyclomatic_complexity.coffee'));
     408
     409coffeelint.registerRule(_dereq_('./rules/newlines_after_classes.coffee'));
     410
     411coffeelint.registerRule(_dereq_('./rules/no_unnecessary_fat_arrows.coffee'));
     412
     413coffeelint.registerRule(_dereq_('./rules/missing_fat_arrows.coffee'));
     414
     415coffeelint.registerRule(_dereq_('./rules/non_empty_constructor_needs_parens.coffee'));
     416
     417hasSyntaxError = function(source) {
     418  try {
     419    CoffeeScript.tokens(source);
     420    return false;
     421  } catch (_error) {}
     422  return true;
     423};
     424
     425coffeelint.lint = function(source, userConfig, literate) {
     426  var all_errors, astErrors, block_config, cmd, config, disabled, disabled_initially, e, errors, i, l, lexErrors, lexicalLinter, lineErrors, lineLinter, next_line, r, rules, s, tokensByLine, _i, _j, _k, _len, _len1, _ref, _ref1, _ref2, _ref3, _ref4;
     427  if (userConfig == null) {
     428    userConfig = {};
     429  }
     430  if (literate == null) {
     431    literate = false;
     432  }
     433  if (literate) {
     434    source = this.invertLiterate(source);
     435  }
     436  config = mergeDefaultConfig(userConfig);
     437  disabled_initially = [];
     438  _ref = source.split('\n');
     439  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     440    l = _ref[_i];
     441    s = LineLinter.configStatement.exec(l);
     442    if ((s != null ? s.length : void 0) > 2 && __indexOf.call(s, 'enable') >= 0) {
     443      _ref1 = s.slice(1);
     444      for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
     445        r = _ref1[_j];
     446        if (r !== 'enable' && r !== 'disable') {
     447          if (!(r in config && ((_ref2 = config[r].level) === 'warn' || _ref2 === 'error'))) {
     448            disabled_initially.push(r);
     449            config[r] = {
     450              level: 'error'
     451            };
     452          }
     453        }
     454      }
     455    }
     456  }
     457  astErrors = new ASTLinter(source, config, _rules, CoffeeScript).lint();
     458  errors = [].concat(astErrors);
     459  if (!hasSyntaxError(source)) {
     460    lexicalLinter = new LexicalLinter(source, config, _rules, CoffeeScript);
     461    lexErrors = lexicalLinter.lint();
     462    errors = errors.concat(lexErrors);
     463    tokensByLine = lexicalLinter.tokensByLine;
     464    lineLinter = new LineLinter(source, config, _rules, tokensByLine, literate);
     465    lineErrors = lineLinter.lint();
     466    errors = errors.concat(lineErrors);
     467    block_config = lineLinter.block_config;
    20468  } else {
    21     this.coffeelint = coffeelint;
    22     CoffeeScript = this.CoffeeScript;
    23   }
    24 
    25   coffeelint.VERSION = "0.5.7";
    26 
    27   ERROR = 'error';
    28 
    29   WARN = 'warn';
    30 
    31   IGNORE = 'ignore';
    32 
    33   coffeelint.RULES = RULES = {
    34     no_tabs: {
    35       level: ERROR,
    36       message: 'Line contains tab indentation',
    37       description: "This rule forbids tabs in indentation. Enough said. It is enabled by\ndefault."
    38     },
    39     no_trailing_whitespace: {
    40       level: ERROR,
    41       message: 'Line ends with trailing whitespace',
    42       allowed_in_comments: false,
    43       description: "This rule forbids trailing whitespace in your code, since it is\nneedless cruft. It is enabled by default."
    44     },
    45     max_line_length: {
    46       value: 80,
    47       level: ERROR,
    48       message: 'Line exceeds maximum allowed length',
    49       description: "This rule imposes a maximum line length on your code. <a\nhref=\"http://www.python.org/dev/peps/pep-0008/\">Python's style\nguide</a> does a good job explaining why you might want to limit the\nlength of your lines, though this is a matter of taste.\n\nLines can be no longer than eighty characters by default."
    50     },
    51     camel_case_classes: {
    52       level: ERROR,
    53       message: 'Class names should be camel cased',
    54       description: "This rule mandates that all class names are camel cased. Camel\ncasing class names is a generally accepted way of distinguishing\nconstructor functions - which require the 'new' prefix to behave\nproperly - from plain old functions.\n<pre>\n<code># Good!\nclass BoaConstrictor\n\n# Bad!\nclass boaConstrictor\n</code>\n</pre>\nThis rule is enabled by default."
    55     },
    56     indentation: {
    57       value: 2,
    58       level: ERROR,
    59       message: 'Line contains inconsistent indentation',
    60       description: "This rule imposes a standard number of spaces to be used for\nindentation. Since whitespace is significant in CoffeeScript, it's\ncritical that a project chooses a standard indentation format and\nstays consistent. Other roads lead to darkness. <pre> <code>#\nEnabling this option will prevent this ugly\n# but otherwise valid CoffeeScript.\ntwoSpaces = () ->\n  fourSpaces = () ->\n      eightSpaces = () ->\n            'this is valid CoffeeScript'\n\n</code>\n</pre>\nTwo space indentation is enabled by default."
    61     },
    62     no_implicit_braces: {
    63       level: IGNORE,
    64       message: 'Implicit braces are forbidden',
    65       description: "This rule prohibits implicit braces when declaring object literals.\nImplicit braces can make code more difficult to understand,\nespecially when used in combination with optional parenthesis.\n<pre>\n<code># Do you find this code ambiguous? Is it a\n# function call with three arguments or four?\nmyFunction a, b, 1:2, 3:4\n\n# While the same code written in a more\n# explicit manner has no ambiguity.\nmyFunction(a, b, {1:2, 3:4})\n</code>\n</pre>\nImplicit braces are permitted by default, since their use is\nidiomatic CoffeeScript."
    66     },
    67     no_trailing_semicolons: {
    68       level: ERROR,
    69       message: 'Line contains a trailing semicolon',
    70       description: "This rule prohibits trailing semicolons, since they are needless\ncruft in CoffeeScript.\n<pre>\n<code># This semicolon is meaningful.\nx = '1234'; console.log(x)\n\n# This semicolon is redundant.\nalert('end of line');\n</code>\n</pre>\nTrailing semicolons are forbidden by default."
    71     },
    72     no_plusplus: {
    73       level: IGNORE,
    74       message: 'The increment and decrement operators are forbidden',
    75       description: "This rule forbids the increment and decrement arithmetic operators.\nSome people believe the <tt>++</tt> and <tt>--</tt> to be cryptic\nand the cause of bugs due to misunderstandings of their precedence\nrules.\nThis rule is disabled by default."
    76     },
    77     no_throwing_strings: {
    78       level: ERROR,
    79       message: 'Throwing strings is forbidden',
    80       description: "This rule forbids throwing string literals or interpolations. While\nJavaScript (and CoffeeScript by extension) allow any expression to\nbe thrown, it is best to only throw <a\nhref=\"https://developer.mozilla.org\n/en/JavaScript/Reference/Global_Objects/Error\"> Error</a> objects,\nbecause they contain valuable debugging information like the stack\ntrace. Because of JavaScript's dynamic nature, CoffeeLint cannot\nensure you are always throwing instances of <tt>Error</tt>. It will\nonly catch the simple but real case of throwing literal strings.\n<pre>\n<code># CoffeeLint will catch this:\nthrow \"i made a boo boo\"\n\n# ... but not this:\nthrow getSomeString()\n</code>\n</pre>\nThis rule is enabled by default."
    81     },
    82     cyclomatic_complexity: {
    83       value: 10,
    84       level: IGNORE,
    85       message: 'The cyclomatic complexity is too damn high'
    86     },
    87     no_backticks: {
    88       level: ERROR,
    89       message: 'Backticks are forbidden',
    90       description: "Backticks allow snippets of JavaScript to be embedded in\nCoffeeScript. While some folks consider backticks useful in a few\nniche circumstances, they should be avoided because so none of\nJavaScript's \"bad parts\", like <tt>with</tt> and <tt>eval</tt>,\nsneak into CoffeeScript.\nThis rule is enabled by default."
    91     },
    92     line_endings: {
    93       level: IGNORE,
    94       value: 'unix',
    95       message: 'Line contains incorrect line endings',
    96       description: "This rule ensures your project uses only <tt>windows</tt> or\n<tt>unix</tt> line endings. This rule is disabled by default."
    97     },
    98     no_implicit_parens: {
    99       level: IGNORE,
    100       message: 'Implicit parens are forbidden',
    101       description: "This rule prohibits implicit parens on function calls.\n<pre>\n<code># Some folks don't like this style of coding.\nmyFunction a, b, c\n\n# And would rather it always be written like this:\nmyFunction(a, b, c)\n</code>\n</pre>\nImplicit parens are permitted by default, since their use is\nidiomatic CoffeeScript."
    102     },
    103     empty_constructor_needs_parens: {
    104       level: IGNORE,
    105       message: 'Invoking a constructor without parens and without arguments'
    106     },
    107     non_empty_constructor_needs_parens: {
    108       level: IGNORE,
    109       message: 'Invoking a constructor without parens and with arguments'
    110     },
    111     no_empty_param_list: {
    112       level: IGNORE,
    113       message: 'Empty parameter list is forbidden',
    114       description: "This rule prohibits empty parameter lists in function definitions.\n<pre>\n<code># The empty parameter list in here is unnecessary:\nmyFunction = () -&gt;\n\n# We might favor this instead:\nmyFunction = -&gt;\n</code>\n</pre>\nEmpty parameter lists are permitted by default."
    115     },
    116     space_operators: {
    117       level: IGNORE,
    118       message: 'Operators must be spaced properly'
    119     },
    120     duplicate_key: {
    121       level: ERROR,
    122       message: 'Duplicate key defined in object or class'
    123     },
    124     newlines_after_classes: {
    125       value: 3,
    126       level: IGNORE,
    127       message: 'Wrong count of newlines between a class and other code'
    128     },
    129     no_stand_alone_at: {
    130       level: IGNORE,
    131       message: '@ must not be used stand alone',
    132       description: "This rule checks that no stand alone @ are in use, they are\ndiscouraged. Further information in CoffeScript issue <a\nhref=\"https://github.com/jashkenas/coffee-script/issues/1601\">\n#1601</a>"
    133     },
    134     arrow_spacing: {
    135       level: IGNORE,
    136       message: 'Function arrow (->) must be spaced properly',
    137       description: "<p>This rule checks to see that there is spacing before and after\nthe arrow operator that declares a function. This rule is disabled\nby default.</p> <p>Note that if arrow_spacing is enabled, and you\npass an empty function as a parameter, arrow_spacing will accept\neither a space or no space in-between the arrow operator and the\nparenthesis</p>\n<pre><code># Both of this will not trigger an error,\n# even with arrow_spacing enabled.\nx(-> 3)\nx( -> 3)\n\n# However, this will trigger an error\nx((a,b)-> 3)\n</code>\n</pre>"
    138     },
    139     coffeescript_error: {
    140       level: ERROR,
    141       message: ''
    142     }
    143   };
    144 
    145   regexes = {
    146     trailingWhitespace: /[^\s]+[\t ]+\r?$/,
    147     lineHasComment: /^\s*[^\#]*\#/,
    148     indentation: /\S/,
    149     longUrlComment: /^\s*\#\s*http[^\s]+$/,
    150     camelCase: /^[A-Z][a-zA-Z\d]*$/,
    151     trailingSemicolon: /;\r?$/,
    152     configStatement: /coffeelint:\s*(disable|enable)(?:=([\w\s,]*))?/
    153   };
    154 
    155   extend = function() {
    156     var destination, k, source, sources, v, _i, _len;
    157 
    158     destination = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
    159     for (_i = 0, _len = sources.length; _i < _len; _i++) {
    160       source = sources[_i];
    161       for (k in source) {
    162         v = source[k];
    163         destination[k] = v;
    164       }
    165     }
    166     return destination;
    167   };
    168 
    169   defaults = function(source, defaults) {
    170     return extend({}, defaults, source);
    171   };
    172 
    173   createError = function(rule, attrs) {
    174     var level;
    175 
     469    block_config = {
     470      enable: {},
     471      disable: {}
     472    };
     473  }
     474  errors.sort(function(a, b) {
     475    return a.lineNumber - b.lineNumber;
     476  });
     477  all_errors = errors;
     478  errors = [];
     479  disabled = disabled_initially;
     480  next_line = 0;
     481  for (i = _k = 0, _ref3 = source.split('\n').length; 0 <= _ref3 ? _k < _ref3 : _k > _ref3; i = 0 <= _ref3 ? ++_k : --_k) {
     482    for (cmd in block_config) {
     483      rules = block_config[cmd][i];
     484      if (rules != null) {
     485        ({
     486          'disable': function() {
     487            return disabled = disabled.concat(rules);
     488          },
     489          'enable': function() {
     490            difference(disabled, rules);
     491            if (rules.length === 0) {
     492              return disabled = disabled_initially;
     493            }
     494          }
     495        })[cmd]();
     496      }
     497    }
     498    while (next_line === i && all_errors.length > 0) {
     499      next_line = all_errors[0].lineNumber - 1;
     500      e = all_errors[0];
     501      if (e.lineNumber === i + 1 || (e.lineNumber == null)) {
     502        e = all_errors.shift();
     503        if (_ref4 = e.rule, __indexOf.call(disabled, _ref4) < 0) {
     504          errors.push(e);
     505        }
     506      }
     507    }
     508  }
     509  return errors;
     510};
     511
     512
     513},{"./../package.json":1,"./ast_linter.coffee":2,"./lexical_linter.coffee":5,"./line_linter.coffee":6,"./rules.coffee":7,"./rules/arrow_spacing.coffee":8,"./rules/camel_case_classes.coffee":9,"./rules/colon_assignment_spacing.coffee":10,"./rules/cyclomatic_complexity.coffee":11,"./rules/duplicate_key.coffee":12,"./rules/empty_constructor_needs_parens.coffee":13,"./rules/indentation.coffee":14,"./rules/line_endings.coffee":15,"./rules/max_line_length.coffee":16,"./rules/missing_fat_arrows.coffee":17,"./rules/newlines_after_classes.coffee":18,"./rules/no_backticks.coffee":19,"./rules/no_empty_param_list.coffee":20,"./rules/no_implicit_braces.coffee":21,"./rules/no_implicit_parens.coffee":22,"./rules/no_plusplus.coffee":23,"./rules/no_stand_alone_at.coffee":24,"./rules/no_tabs.coffee":25,"./rules/no_throwing_strings.coffee":26,"./rules/no_trailing_semicolons.coffee":27,"./rules/no_trailing_whitespace.coffee":28,"./rules/no_unnecessary_fat_arrows.coffee":29,"./rules/non_empty_constructor_needs_parens.coffee":30,"./rules/space_operators.coffee":31}],5:[function(_dereq_,module,exports){
     514var BaseLinter, LexicalLinter, TokenApi,
     515  __hasProp = {}.hasOwnProperty,
     516  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
     517  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
     518
     519TokenApi = (function() {
     520  function TokenApi(CoffeeScript, source, config, tokensByLine) {
     521    this.config = config;
     522    this.tokensByLine = tokensByLine;
     523    this.tokens = CoffeeScript.tokens(source);
     524    this.lines = source.split('\n');
     525    this.tokensByLine = {};
     526  }
     527
     528  TokenApi.prototype.i = 0;
     529
     530  TokenApi.prototype.peek = function(n) {
     531    if (n == null) {
     532      n = 1;
     533    }
     534    return this.tokens[this.i + n] || null;
     535  };
     536
     537  return TokenApi;
     538
     539})();
     540
     541BaseLinter = _dereq_('./base_linter.coffee');
     542
     543module.exports = LexicalLinter = (function(_super) {
     544  __extends(LexicalLinter, _super);
     545
     546  function LexicalLinter(source, config, rules, CoffeeScript) {
     547    LexicalLinter.__super__.constructor.call(this, source, config, rules);
     548    this.tokenApi = new TokenApi(CoffeeScript, source, this.config, this.tokensByLine);
     549    this.tokensByLine = this.tokenApi.tokensByLine;
     550  }
     551
     552  LexicalLinter.prototype.acceptRule = function(rule) {
     553    return typeof rule.lintToken === 'function';
     554  };
     555
     556  LexicalLinter.prototype.lint = function() {
     557    var error, errors, i, token, _i, _j, _len, _len1, _ref, _ref1;
     558    errors = [];
     559    _ref = this.tokenApi.tokens;
     560    for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
     561      token = _ref[i];
     562      this.tokenApi.i = i;
     563      _ref1 = this.lintToken(token);
     564      for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
     565        error = _ref1[_j];
     566        errors.push(error);
     567      }
     568    }
     569    return errors;
     570  };
     571
     572  LexicalLinter.prototype.lintToken = function(token) {
     573    var errors, lineNumber, rule, type, v, value, _base, _i, _len, _ref, _ref1;
     574    type = token[0], value = token[1], lineNumber = token[2];
     575    if (typeof lineNumber === "object") {
     576      if (type === 'OUTDENT' || type === 'INDENT') {
     577        lineNumber = lineNumber.last_line;
     578      } else {
     579        lineNumber = lineNumber.first_line;
     580      }
     581    }
     582    if ((_base = this.tokensByLine)[lineNumber] == null) {
     583      _base[lineNumber] = [];
     584    }
     585    this.tokensByLine[lineNumber].push(token);
     586    this.lineNumber = lineNumber || this.lineNumber || 0;
     587    this.tokenApi.lineNumber = this.lineNumber;
     588    errors = [];
     589    _ref = this.rules;
     590    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     591      rule = _ref[_i];
     592      if (!(_ref1 = token[0], __indexOf.call(rule.tokens, _ref1) >= 0)) {
     593        continue;
     594      }
     595      v = this.normalizeResult(rule, rule.lintToken(token, this.tokenApi));
     596      if (v != null) {
     597        errors.push(v);
     598      }
     599    }
     600    return errors;
     601  };
     602
     603  LexicalLinter.prototype.createError = function(ruleName, attrs) {
    176604    if (attrs == null) {
    177605      attrs = {};
    178606    }
    179     level = attrs.level;
    180     if (level !== IGNORE && level !== WARN && level !== ERROR) {
    181       throw new Error("unknown level " + level);
    182     }
    183     if (level === ERROR || level === WARN) {
    184       attrs.rule = rule;
    185       return defaults(attrs, RULES[rule]);
     607    attrs.lineNumber = this.lineNumber + 1;
     608    attrs.line = this.tokenApi.lines[this.lineNumber];
     609    return LexicalLinter.__super__.createError.call(this, ruleName, attrs);
     610  };
     611
     612  return LexicalLinter;
     613
     614})(BaseLinter);
     615
     616
     617},{"./base_linter.coffee":3}],6:[function(_dereq_,module,exports){
     618var BaseLinter, LineApi, LineLinter, configStatement,
     619  __hasProp = {}.hasOwnProperty,
     620  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
     621
     622LineApi = (function() {
     623  function LineApi(source, config, tokensByLine, literate) {
     624    this.config = config;
     625    this.tokensByLine = tokensByLine;
     626    this.literate = literate;
     627    this.line = null;
     628    this.lines = source.split('\n');
     629    this.lineCount = this.lines.length;
     630    this.context = {
     631      "class": {
     632        inClass: false,
     633        lastUnemptyLineInClass: null,
     634        classIndents: null
     635      }
     636    };
     637  }
     638
     639  LineApi.prototype.lineNumber = 0;
     640
     641  LineApi.prototype.isLiterate = function() {
     642    return this.literate;
     643  };
     644
     645  LineApi.prototype.maintainClassContext = function(line) {
     646    if (this.context["class"].inClass) {
     647      if (this.lineHasToken('INDENT')) {
     648        this.context["class"].classIndents++;
     649      } else if (this.lineHasToken('OUTDENT')) {
     650        this.context["class"].classIndents--;
     651        if (this.context["class"].classIndents === 0) {
     652          this.context["class"].inClass = false;
     653          this.context["class"].classIndents = null;
     654        }
     655      }
     656      if (this.context["class"].inClass && !line.match(/^\s*$/)) {
     657        this.context["class"].lastUnemptyLineInClass = this.lineNumber;
     658      }
     659    } else {
     660      if (!line.match(/\\s*/)) {
     661        this.context["class"].lastUnemptyLineInClass = null;
     662      }
     663      if (this.lineHasToken('CLASS')) {
     664        this.context["class"].inClass = true;
     665        this.context["class"].lastUnemptyLineInClass = this.lineNumber;
     666        this.context["class"].classIndents = 0;
     667      }
     668    }
     669    return null;
     670  };
     671
     672  LineApi.prototype.isLastLine = function() {
     673    return this.lineNumber === this.lineCount - 1;
     674  };
     675
     676  LineApi.prototype.lineHasToken = function(tokenType, lineNumber) {
     677    var token, tokens, _i, _len;
     678    if (tokenType == null) {
     679      tokenType = null;
     680    }
     681    if (lineNumber == null) {
     682      lineNumber = null;
     683    }
     684    lineNumber = lineNumber != null ? lineNumber : this.lineNumber;
     685    if (tokenType == null) {
     686      return this.tokensByLine[lineNumber] != null;
     687    } else {
     688      tokens = this.tokensByLine[lineNumber];
     689      if (tokens == null) {
     690        return null;
     691      }
     692      for (_i = 0, _len = tokens.length; _i < _len; _i++) {
     693        token = tokens[_i];
     694        if (token[0] === tokenType) {
     695          return true;
     696        }
     697      }
     698      return false;
     699    }
     700  };
     701
     702  LineApi.prototype.getLineTokens = function() {
     703    return this.tokensByLine[this.lineNumber] || [];
     704  };
     705
     706  return LineApi;
     707
     708})();
     709
     710BaseLinter = _dereq_('./base_linter.coffee');
     711
     712configStatement = /coffeelint:\s*(disable|enable)(?:=([\w\s,]*))?/;
     713
     714module.exports = LineLinter = (function(_super) {
     715  __extends(LineLinter, _super);
     716
     717  LineLinter.configStatement = configStatement;
     718
     719  function LineLinter(source, config, rules, tokensByLine, literate) {
     720    if (literate == null) {
     721      literate = false;
     722    }
     723    LineLinter.__super__.constructor.call(this, source, config, rules);
     724    this.lineApi = new LineApi(source, config, tokensByLine, literate);
     725    this.block_config = {
     726      enable: {},
     727      disable: {}
     728    };
     729  }
     730
     731  LineLinter.prototype.acceptRule = function(rule) {
     732    return typeof rule.lintLine === 'function';
     733  };
     734
     735  LineLinter.prototype.lint = function() {
     736    var error, errors, line, lineNumber, _i, _j, _len, _len1, _ref, _ref1;
     737    errors = [];
     738    _ref = this.lineApi.lines;
     739    for (lineNumber = _i = 0, _len = _ref.length; _i < _len; lineNumber = ++_i) {
     740      line = _ref[lineNumber];
     741      this.lineApi.lineNumber = this.lineNumber = lineNumber;
     742      this.lineApi.maintainClassContext(line);
     743      this.collectInlineConfig(line);
     744      _ref1 = this.lintLine(line);
     745      for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
     746        error = _ref1[_j];
     747        errors.push(error);
     748      }
     749    }
     750    return errors;
     751  };
     752
     753  LineLinter.prototype.lintLine = function(line) {
     754    var errors, rule, v, _i, _len, _ref;
     755    errors = [];
     756    _ref = this.rules;
     757    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     758      rule = _ref[_i];
     759      v = this.normalizeResult(rule, rule.lintLine(line, this.lineApi));
     760      if (v != null) {
     761        errors.push(v);
     762      }
     763    }
     764    return errors;
     765  };
     766
     767  LineLinter.prototype.collectInlineConfig = function(line) {
     768    var cmd, r, result, rules, _i, _len, _ref;
     769    result = configStatement.exec(line);
     770    if (result != null) {
     771      cmd = result[1];
     772      rules = [];
     773      if (result[2] != null) {
     774        _ref = result[2].split(',');
     775        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     776          r = _ref[_i];
     777          rules.push(r.replace(/^\s+|\s+$/g, ""));
     778        }
     779      }
     780      this.block_config[cmd][this.lineNumber] = rules;
     781    }
     782    return null;
     783  };
     784
     785  LineLinter.prototype.createError = function(rule, attrs) {
     786    var _ref;
     787    if (attrs == null) {
     788      attrs = {};
     789    }
     790    attrs.lineNumber = this.lineNumber + 1;
     791    attrs.level = (_ref = this.config[rule]) != null ? _ref.level : void 0;
     792    return LineLinter.__super__.createError.call(this, rule, attrs);
     793  };
     794
     795  return LineLinter;
     796
     797})(BaseLinter);
     798
     799
     800},{"./base_linter.coffee":3}],7:[function(_dereq_,module,exports){
     801var ERROR, IGNORE, WARN;
     802
     803ERROR = 'error';
     804
     805WARN = 'warn';
     806
     807IGNORE = 'ignore';
     808
     809module.exports = {
     810  coffeescript_error: {
     811    level: ERROR,
     812    message: ''
     813  }
     814};
     815
     816
     817},{}],8:[function(_dereq_,module,exports){
     818var ArrowSpacing;
     819
     820module.exports = ArrowSpacing = (function() {
     821  function ArrowSpacing() {}
     822
     823  ArrowSpacing.prototype.rule = {
     824    name: 'arrow_spacing',
     825    level: 'ignore',
     826    message: 'Function arrow (->) must be spaced properly',
     827    description: "<p>This rule checks to see that there is spacing before and after\nthe arrow operator that declares a function. This rule is disabled\nby default.</p> <p>Note that if arrow_spacing is enabled, and you\npass an empty function as a parameter, arrow_spacing will accept\neither a space or no space in-between the arrow operator and the\nparenthesis</p>\n<pre><code># Both of this will not trigger an error,\n# even with arrow_spacing enabled.\nx(-> 3)\nx( -> 3)\n\n# However, this will trigger an error\nx((a,b)-> 3)\n</code>\n</pre>"
     828  };
     829
     830  ArrowSpacing.prototype.tokens = ['->'];
     831
     832  ArrowSpacing.prototype.lintToken = function(token, tokenApi) {
     833    var pp;
     834    pp = tokenApi.peek(-1);
     835    if (!(((token.spaced != null) || (token.newLine != null) || this.atEof(tokenApi)) && (((pp.spaced != null) || pp[0] === 'TERMINATOR') || (pp.generated != null) || pp[0] === "INDENT" || (pp[1] === "(" && (pp.generated == null))))) {
     836      return true;
    186837    } else {
    187838      return null;
     
    189840  };
    190841
    191   block_config = {
    192     enable: {},
    193     disable: {}
    194   };
    195 
    196   LineLinter = (function() {
    197     function LineLinter(source, config, tokensByLine) {
    198       this.source = source;
    199       this.config = config;
    200       this.line = null;
    201       this.lineNumber = 0;
    202       this.tokensByLine = tokensByLine;
    203       this.lines = this.source.split('\n');
    204       this.lineCount = this.lines.length;
    205       this.context = {
    206         "class": {
    207           inClass: false,
    208           lastUnemptyLineInClass: null,
    209           classIndents: null
    210         }
     842  ArrowSpacing.prototype.atEof = function(tokenApi) {
     843    var i, token, tokens, _i, _len, _ref, _ref1;
     844    tokens = tokenApi.tokens, i = tokenApi.i;
     845    _ref = tokens.slice(i + 1);
     846    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     847      token = _ref[_i];
     848      if (!(token.generated || ((_ref1 = token[0]) === 'OUTDENT' || _ref1 === 'TERMINATOR'))) {
     849        return false;
     850      }
     851    }
     852    return true;
     853  };
     854
     855  return ArrowSpacing;
     856
     857})();
     858
     859
     860},{}],9:[function(_dereq_,module,exports){
     861var CamelCaseClasses, regexes;
     862
     863regexes = {
     864  camelCase: /^[A-Z][a-zA-Z\d]*$/
     865};
     866
     867module.exports = CamelCaseClasses = (function() {
     868  function CamelCaseClasses() {}
     869
     870  CamelCaseClasses.prototype.rule = {
     871    name: 'camel_case_classes',
     872    level: 'error',
     873    message: 'Class names should be camel cased',
     874    description: "This rule mandates that all class names are CamelCased. Camel\ncasing class names is a generally accepted way of distinguishing\nconstructor functions - which require the 'new' prefix to behave\nproperly - from plain old functions.\n<pre>\n<code># Good!\nclass BoaConstrictor\n\n# Bad!\nclass boaConstrictor\n</code>\n</pre>\nThis rule is enabled by default."
     875  };
     876
     877  CamelCaseClasses.prototype.tokens = ['CLASS'];
     878
     879  CamelCaseClasses.prototype.lintToken = function(token, tokenApi) {
     880    var className, offset, _ref, _ref1, _ref2;
     881    if ((token.newLine != null) || ((_ref = tokenApi.peek()[0]) === 'INDENT' || _ref === 'EXTENDS')) {
     882      return null;
     883    }
     884    className = null;
     885    offset = 1;
     886    while (!className) {
     887      if (((_ref1 = tokenApi.peek(offset + 1)) != null ? _ref1[0] : void 0) === '.') {
     888        offset += 2;
     889      } else if (((_ref2 = tokenApi.peek(offset)) != null ? _ref2[0] : void 0) === '@') {
     890        offset += 1;
     891      } else {
     892        className = tokenApi.peek(offset)[1];
     893      }
     894    }
     895    if (!regexes.camelCase.test(className)) {
     896      return {
     897        context: "class name: " + className
    211898      };
    212899    }
    213 
    214     LineLinter.prototype.lint = function() {
    215       var error, errors, line, lineNumber, _i, _len, _ref;
    216 
    217       errors = [];
    218       _ref = this.lines;
    219       for (lineNumber = _i = 0, _len = _ref.length; _i < _len; lineNumber = ++_i) {
    220         line = _ref[lineNumber];
    221         this.lineNumber = lineNumber;
    222         this.line = line;
    223         this.maintainClassContext();
    224         error = this.lintLine();
    225         if (error) {
    226           errors.push(error);
    227         }
    228       }
    229       return errors;
     900  };
     901
     902  return CamelCaseClasses;
     903
     904})();
     905
     906
     907},{}],10:[function(_dereq_,module,exports){
     908var ColonAssignmentSpacing;
     909
     910module.exports = ColonAssignmentSpacing = (function() {
     911  function ColonAssignmentSpacing() {}
     912
     913  ColonAssignmentSpacing.prototype.rule = {
     914    name: 'colon_assignment_spacing',
     915    level: 'ignore',
     916    message: 'Colon assignment without proper spacing',
     917    spacing: {
     918      left: 0,
     919      right: 0
     920    },
     921    description: "<p>This rule checks to see that there is spacing before and\nafter the colon in a colon assignment (i.e., classes, objects).\nThe spacing amount is specified by\nspacing.left and spacing.right, respectively.\nA zero value means no spacing required.\n</p>\n<pre><code>\n#\n# If spacing.left and spacing.right is 1\n#\n\n# Good\nobject = {spacing : true}\nclass Dog\n  canBark : true\n\n# Bad\nobject = {spacing: true}\nclass Cat\n  canBark: false\n</code></pre>"
     922  };
     923
     924  ColonAssignmentSpacing.prototype.tokens = [':'];
     925
     926  ColonAssignmentSpacing.prototype.lintToken = function(token, tokenApi) {
     927    var checkSpacing, getSpaceFromToken, isLeftSpaced, isRightSpaced, leftSpacing, nextToken, previousToken, rightSpacing, spacingAllowances, _ref, _ref1;
     928    spacingAllowances = tokenApi.config[this.rule.name].spacing;
     929    previousToken = tokenApi.peek(-1);
     930    nextToken = tokenApi.peek(1);
     931    getSpaceFromToken = function(direction) {
     932      switch (direction) {
     933        case 'left':
     934          return token[2].first_column - previousToken[2].last_column - 1;
     935        case 'right':
     936          return nextToken[2].first_column - token[2].first_column - 1;
     937      }
    230938    };
    231 
    232     LineLinter.prototype.lintLine = function() {
    233       return this.checkTabs() || this.checkTrailingWhitespace() || this.checkLineLength() || this.checkTrailingSemicolon() || this.checkLineEndings() || this.checkComments() || this.checkNewlinesAfterClasses();
     939    checkSpacing = function(direction) {
     940      var isSpaced, spacing;
     941      spacing = getSpaceFromToken(direction);
     942      isSpaced = spacing < 0 ? true : spacing === parseInt(spacingAllowances[direction]);
     943      return [isSpaced, spacing];
    234944    };
    235 
    236     LineLinter.prototype.checkTabs = function() {
    237       var indentation;
    238 
    239       indentation = this.line.split(regexes.indentation)[0];
    240       if (this.lineHasToken() && __indexOf.call(indentation, '\t') >= 0) {
    241         return this.createLineError('no_tabs');
    242       } else {
    243         return null;
    244       }
    245     };
    246 
    247     LineLinter.prototype.checkTrailingWhitespace = function() {
    248       var line, str, token, tokens, _i, _len, _ref, _ref1;
    249 
    250       if (regexes.trailingWhitespace.test(this.line)) {
    251         if (!((_ref = this.config['no_trailing_whitespace']) != null ? _ref.allowed_in_comments : void 0)) {
    252           return this.createLineError('no_trailing_whitespace');
    253         }
    254         line = this.line;
    255         tokens = this.tokensByLine[this.lineNumber];
    256         if (!tokens) {
    257           return null;
    258         }
    259         _ref1 = (function() {
    260           var _j, _len, _results;
    261 
    262           _results = [];
    263           for (_j = 0, _len = tokens.length; _j < _len; _j++) {
    264             token = tokens[_j];
    265             if (token[0] === 'STRING') {
    266               _results.push(token[1]);
    267             }
    268           }
    269           return _results;
    270         })();
    271         for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
    272           str = _ref1[_i];
    273           line = line.replace(str, 'STRING');
    274         }
    275         if (!regexes.lineHasComment.test(line)) {
    276           return this.createLineError('no_trailing_whitespace');
    277         } else {
    278           return null;
    279         }
    280       } else {
    281         return null;
    282       }
    283     };
    284 
    285     LineLinter.prototype.checkLineLength = function() {
    286       var attrs, max, rule, _ref;
    287 
    288       rule = 'max_line_length';
    289       max = (_ref = this.config[rule]) != null ? _ref.value : void 0;
    290       if (max && max < this.line.length && !regexes.longUrlComment.test(this.line)) {
    291         attrs = {
    292           context: "Length is " + this.line.length + ", max is " + max
    293         };
    294         return this.createLineError(rule, attrs);
    295       } else {
    296         return null;
    297       }
    298     };
    299 
    300     LineLinter.prototype.checkTrailingSemicolon = function() {
    301       var first, hasNewLine, hasSemicolon, last, _i, _ref;
    302 
    303       hasSemicolon = regexes.trailingSemicolon.test(this.line);
    304       _ref = this.getLineTokens(), first = 2 <= _ref.length ? __slice.call(_ref, 0, _i = _ref.length - 1) : (_i = 0, []), last = _ref[_i++];
    305       hasNewLine = last && (last.newLine != null);
    306       if (hasSemicolon && !hasNewLine && this.lineHasToken()) {
    307         return this.createLineError('no_trailing_semicolons');
    308       } else {
    309         return null;
    310       }
    311     };
    312 
    313     LineLinter.prototype.checkLineEndings = function() {
    314       var ending, lastChar, rule, valid, _ref;
    315 
    316       rule = 'line_endings';
    317       ending = (_ref = this.config[rule]) != null ? _ref.value : void 0;
    318       if (!ending || this.isLastLine() || !this.line) {
    319         return null;
    320       }
    321       lastChar = this.line[this.line.length - 1];
    322       valid = (function() {
    323         if (ending === 'windows') {
    324           return lastChar === '\r';
    325         } else if (ending === 'unix') {
    326           return lastChar !== '\r';
    327         } else {
    328           throw new Error("unknown line ending type: " + ending);
    329         }
    330       })();
    331       if (!valid) {
    332         return this.createLineError(rule, {
    333           context: "Expected " + ending
    334         });
    335       } else {
    336         return null;
    337       }
    338     };
    339 
    340     LineLinter.prototype.checkComments = function() {
    341       var cmd, r, result, rules, _i, _len, _ref;
    342 
    343       result = regexes.configStatement.exec(this.line);
    344       if (result != null) {
    345         cmd = result[1];
    346         rules = [];
    347         if (result[2] != null) {
    348           _ref = result[2].split(',');
    349           for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    350             r = _ref[_i];
    351             rules.push(r.replace(/^\s+|\s+$/g, ""));
    352           }
    353         }
    354         block_config[cmd][this.lineNumber] = rules;
    355       }
     945    _ref = checkSpacing('left'), isLeftSpaced = _ref[0], leftSpacing = _ref[1];
     946    _ref1 = checkSpacing('right'), isRightSpaced = _ref1[0], rightSpacing = _ref1[1];
     947    if (isLeftSpaced && isRightSpaced) {
    356948      return null;
    357     };
    358 
    359     LineLinter.prototype.checkNewlinesAfterClasses = function() {
    360       var ending, got, rule;
    361 
    362       rule = 'newlines_after_classes';
    363       ending = this.config[rule].value;
    364       if (!ending || this.isLastLine()) {
    365         return null;
    366       }
    367       if (!this.context["class"].inClass && (this.context["class"].lastUnemptyLineInClass != null) && ((this.lineNumber - 1) - this.context["class"].lastUnemptyLineInClass) !== ending) {
    368         got = (this.lineNumber - 1) - this.context["class"].lastUnemptyLineInClass;
    369         return this.createLineError(rule, {
    370           context: "Expected " + ending + " got " + got
    371         });
    372       }
    373       return null;
    374     };
    375 
    376     LineLinter.prototype.createLineError = function(rule, attrs) {
    377       var _ref;
    378 
    379       if (attrs == null) {
    380         attrs = {};
    381       }
    382       attrs.lineNumber = this.lineNumber + 1;
    383       attrs.level = (_ref = this.config[rule]) != null ? _ref.level : void 0;
    384       return createError(rule, attrs);
    385     };
    386 
    387     LineLinter.prototype.isLastLine = function() {
    388       return this.lineNumber === this.lineCount - 1;
    389     };
    390 
    391     LineLinter.prototype.lineHasToken = function(tokenType, lineNumber) {
    392       var token, tokens, _i, _len;
    393 
    394       if (tokenType == null) {
    395         tokenType = null;
    396       }
    397       if (lineNumber == null) {
    398         lineNumber = null;
    399       }
    400       lineNumber = lineNumber != null ? lineNumber : this.lineNumber;
    401       if (tokenType == null) {
    402         return this.tokensByLine[lineNumber] != null;
    403       } else {
    404         tokens = this.tokensByLine[lineNumber];
    405         if (tokens == null) {
    406           return null;
    407         }
    408         for (_i = 0, _len = tokens.length; _i < _len; _i++) {
    409           token = tokens[_i];
    410           if (token[0] === tokenType) {
    411             return true;
    412           }
    413         }
    414         return false;
    415       }
    416     };
    417 
    418     LineLinter.prototype.getLineTokens = function() {
    419       return this.tokensByLine[this.lineNumber] || [];
    420     };
    421 
    422     LineLinter.prototype.maintainClassContext = function() {
    423       if (this.context["class"].inClass) {
    424         if (this.lineHasToken('INDENT')) {
    425           this.context["class"].classIndents++;
    426         } else if (this.lineHasToken('OUTDENT')) {
    427           this.context["class"].classIndents--;
    428           if (this.context["class"].classIndents === 0) {
    429             this.context["class"].inClass = false;
    430             this.context["class"].classIndents = null;
    431           }
    432         }
    433         if (this.context["class"].inClass && !this.line.match(/^\s*$/)) {
    434           this.context["class"].lastUnemptyLineInClass = this.lineNumber;
    435         }
    436       } else {
    437         if (!this.line.match(/\\s*/)) {
    438           this.context["class"].lastUnemptyLineInClass = null;
    439         }
    440         if (this.lineHasToken('CLASS')) {
    441           this.context["class"].inClass = true;
    442           this.context["class"].lastUnemptyLineInClass = this.lineNumber;
    443           this.context["class"].classIndents = 0;
    444         }
    445       }
    446       return null;
    447     };
    448 
    449     return LineLinter;
    450 
    451   })();
    452 
    453   LexicalLinter = (function() {
    454     function LexicalLinter(source, config) {
    455       this.source = source;
    456       this.tokens = CoffeeScript.tokens(source);
    457       this.config = config;
    458       this.i = 0;
    459       this.tokensByLine = {};
    460       this.arrayTokens = [];
    461       this.parenTokens = [];
    462       this.callTokens = [];
    463       this.lines = source.split('\n');
    464       this.braceScopes = [];
    465     }
    466 
    467     LexicalLinter.prototype.lint = function() {
    468       var error, errors, i, token, _i, _len, _ref;
    469 
    470       errors = [];
    471       _ref = this.tokens;
    472       for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
    473         token = _ref[i];
    474         this.i = i;
    475         error = this.lintToken(token);
    476         if (error) {
    477           errors.push(error);
    478         }
    479       }
    480       return errors;
    481     };
    482 
    483     LexicalLinter.prototype.lintToken = function(token) {
    484       var lineNumber, type, value, _base, _ref;
    485 
    486       type = token[0], value = token[1], lineNumber = token[2];
    487       if (typeof lineNumber === "object") {
    488         if (type === 'OUTDENT' || type === 'INDENT') {
    489           lineNumber = lineNumber.last_line;
    490         } else {
    491           lineNumber = lineNumber.first_line;
    492         }
    493       }
    494       if ((_ref = (_base = this.tokensByLine)[lineNumber]) == null) {
    495         _base[lineNumber] = [];
    496       }
    497       this.tokensByLine[lineNumber].push(token);
    498       this.lineNumber = lineNumber || this.lineNumber || 0;
    499       switch (type) {
    500         case "->":
    501           return this.lintArrowSpacing(token);
    502         case "INDENT":
    503           return this.lintIndentation(token);
    504         case "CLASS":
    505           return this.lintClass(token);
    506         case "UNARY":
    507           return this.lintUnary(token);
    508         case "{":
    509         case "}":
    510           return this.lintBrace(token);
    511         case "IDENTIFIER":
    512           return this.lintIdentifier(token);
    513         case "++":
    514         case "--":
    515           return this.lintIncrement(token);
    516         case "THROW":
    517           return this.lintThrow(token);
    518         case "[":
    519         case "]":
    520           return this.lintArray(token);
    521         case "(":
    522         case ")":
    523           return this.lintParens(token);
    524         case "JS":
    525           return this.lintJavascript(token);
    526         case "CALL_START":
    527         case "CALL_END":
    528           return this.lintCall(token);
    529         case "PARAM_START":
    530           return this.lintParam(token);
    531         case "@":
    532           return this.lintStandaloneAt(token);
    533         case "+":
    534         case "-":
    535           return this.lintPlus(token);
    536         case "=":
    537         case "MATH":
    538         case "COMPARE":
    539         case "LOGIC":
    540         case "COMPOUND_ASSIGN":
    541           return this.lintMath(token);
    542         default:
    543           return null;
    544       }
    545     };
    546 
    547     LexicalLinter.prototype.lintUnary = function(token) {
    548       var expectedCallStart, expectedIdentifier, identifierIndex;
    549 
    550       if (token[1] === 'new') {
    551         identifierIndex = 1;
    552         while (true) {
    553           expectedIdentifier = this.peek(identifierIndex);
    554           expectedCallStart = this.peek(identifierIndex + 1);
    555           if ((expectedIdentifier != null ? expectedIdentifier[0] : void 0) === 'IDENTIFIER') {
    556             if ((expectedCallStart != null ? expectedCallStart[0] : void 0) === '.') {
    557               identifierIndex += 2;
    558               continue;
    559             }
    560           }
    561           break;
    562         }
    563         if ((expectedIdentifier != null ? expectedIdentifier[0] : void 0) === 'IDENTIFIER' && (expectedCallStart != null)) {
    564           if (expectedCallStart[0] === 'CALL_START') {
    565             if (expectedCallStart.generated) {
    566               return this.createLexError('non_empty_constructor_needs_parens');
    567             }
    568           } else {
    569             return this.createLexError('empty_constructor_needs_parens');
    570           }
    571         }
    572       }
    573     };
    574 
    575     LexicalLinter.prototype.lintArray = function(token) {
    576       if (token[0] === '[') {
    577         this.arrayTokens.push(token);
    578       } else if (token[0] === ']') {
    579         this.arrayTokens.pop();
    580       }
    581       return null;
    582     };
    583 
    584     LexicalLinter.prototype.lintParens = function(token) {
    585       var i, n1, n2, p1;
    586 
    587       if (token[0] === '(') {
    588         p1 = this.peek(-1);
    589         n1 = this.peek(1);
    590         n2 = this.peek(2);
    591         i = n1 && n2 && n1[0] === 'STRING' && n2[0] === '+';
    592         token.isInterpolation = i;
    593         this.parenTokens.push(token);
    594       } else {
    595         this.parenTokens.pop();
    596       }
    597       return null;
    598     };
    599 
    600     LexicalLinter.prototype.isInInterpolation = function() {
    601       var t, _i, _len, _ref;
    602 
    603       _ref = this.parenTokens;
    604       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    605         t = _ref[_i];
    606         if (t.isInterpolation) {
    607           return true;
    608         }
    609       }
    610       return false;
    611     };
    612 
    613     LexicalLinter.prototype.isInExtendedRegex = function() {
    614       var t, _i, _len, _ref;
    615 
    616       _ref = this.callTokens;
    617       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    618         t = _ref[_i];
    619         if (t.isRegex) {
    620           return true;
    621         }
    622       }
    623       return false;
    624     };
    625 
    626     LexicalLinter.prototype.lintPlus = function(token) {
    627       var isUnary, p, unaries, _ref;
    628 
    629       if (this.isInInterpolation() || this.isInExtendedRegex()) {
    630         return null;
    631       }
    632       p = this.peek(-1);
    633       unaries = ['TERMINATOR', '(', '=', '-', '+', ',', 'CALL_START', 'INDEX_START', '..', '...', 'COMPARE', 'IF', 'THROW', 'LOGIC', 'POST_IF', ':', '[', 'INDENT', 'COMPOUND_ASSIGN', 'RETURN', 'MATH'];
    634       isUnary = !p ? false : (_ref = p[0], __indexOf.call(unaries, _ref) >= 0);
    635       if ((isUnary && token.spaced) || (!isUnary && !token.spaced && !token.newLine)) {
    636         return this.createLexError('space_operators', {
    637           context: token[1]
    638         });
    639       } else {
    640         return null;
    641       }
    642     };
    643 
    644     LexicalLinter.prototype.lintMath = function(token) {
    645       if (!token.spaced && !token.newLine) {
    646         return this.createLexError('space_operators', {
    647           context: token[1]
    648         });
    649       } else {
    650         return null;
    651       }
    652     };
    653 
    654     LexicalLinter.prototype.lintCall = function(token) {
    655       var p;
    656 
    657       if (token[0] === 'CALL_START') {
    658         p = this.peek(-1);
    659         token.isRegex = p && p[0] === 'IDENTIFIER' && p[1] === 'RegExp';
    660         this.callTokens.push(token);
    661         if (token.generated) {
    662           return this.createLexError('no_implicit_parens');
    663         } else {
    664           return null;
    665         }
    666       } else {
    667         this.callTokens.pop();
    668         return null;
    669       }
    670     };
    671 
    672     LexicalLinter.prototype.lintParam = function(token) {
    673       var nextType;
    674 
    675       nextType = this.peek()[0];
    676       if (nextType === 'PARAM_END') {
    677         return this.createLexError('no_empty_param_list');
    678       } else {
    679         return null;
    680       }
    681     };
    682 
    683     LexicalLinter.prototype.lintIdentifier = function(token) {
    684       var key, nextToken, previousToken;
    685 
    686       key = token[1];
    687       if (this.currentScope == null) {
    688         return null;
    689       }
    690       nextToken = this.peek(1);
    691       if (nextToken[1] !== ':') {
    692         return null;
    693       }
    694       previousToken = this.peek(-1);
    695       if (previousToken[0] === '@') {
    696         key = "@" + key;
    697       }
    698       key = "identifier-" + key;
    699       if (this.currentScope[key]) {
    700         return this.createLexError('duplicate_key');
    701       } else {
    702         this.currentScope[key] = token;
    703         return null;
    704       }
    705     };
    706 
    707     LexicalLinter.prototype.lintBrace = function(token) {
    708       var i, t;
    709 
    710       if (token[0] === '{') {
    711         if (this.currentScope != null) {
    712           this.braceScopes.push(this.currentScope);
    713         }
    714         this.currentScope = {};
    715       } else {
    716         this.currentScope = this.braceScopes.pop();
    717       }
    718       if (token.generated && token[0] === '{') {
    719         i = -1;
    720         while (true) {
    721           t = this.peek(i);
    722           if ((t == null) || t[0] === 'TERMINATOR') {
    723             return this.createLexError('no_implicit_braces');
    724           }
    725           if (t[0] === 'CLASS') {
    726             return null;
    727           }
    728           i -= 1;
    729         }
    730       } else {
    731         return null;
    732       }
    733     };
    734 
    735     LexicalLinter.prototype.lintJavascript = function(token) {
    736       return this.createLexError('no_backticks');
    737     };
    738 
    739     LexicalLinter.prototype.lintThrow = function(token) {
    740       var n1, n2, nextIsString, _ref;
    741 
    742       _ref = [this.peek(), this.peek(2)], n1 = _ref[0], n2 = _ref[1];
    743       nextIsString = n1[0] === 'STRING' || (n1[0] === '(' && n2[0] === 'STRING');
    744       if (nextIsString) {
    745         return this.createLexError('no_throwing_strings');
    746       }
    747     };
    748 
    749     LexicalLinter.prototype.lintIncrement = function(token) {
    750       var attrs;
    751 
    752       attrs = {
    753         context: "found '" + token[0] + "'"
     949    } else {
     950      return {
     951        context: "Incorrect spacing around column " + token[2].first_column + ".\nExpected left: " + spacingAllowances.left + ", right: " + spacingAllowances.right + ".\nGot left: " + leftSpacing + ", right: " + rightSpacing + "."
    754952      };
    755       return this.createLexError('no_plusplus', attrs);
    756     };
    757 
    758     LexicalLinter.prototype.lintStandaloneAt = function(token) {
    759       var isDot, isIdentifier, isIndexStart, isValidProtoProperty, nextToken, protoProperty, spaced;
    760 
    761       nextToken = this.peek();
    762       spaced = token.spaced;
    763       isIdentifier = nextToken[0] === 'IDENTIFIER';
    764       isIndexStart = nextToken[0] === 'INDEX_START';
    765       isDot = nextToken[0] === '.';
    766       if (nextToken[0] === '::') {
    767         protoProperty = this.peek(2);
    768         isValidProtoProperty = protoProperty[0] === 'IDENTIFIER';
    769       }
    770       if (spaced || (!isIdentifier && !isIndexStart && !isDot && !isValidProtoProperty)) {
    771         return this.createLexError('no_stand_alone_at');
    772       }
    773     };
    774 
    775     LexicalLinter.prototype.lintIndentation = function(token) {
    776       var context, currentLine, expected, ignoreIndent, isArrayIndent, isInterpIndent, isMultiline, lineNumber, numIndents, prevNum, previous, previousIndentation, previousLine, previousSymbol, type, _ref;
    777 
    778       type = token[0], numIndents = token[1], lineNumber = token[2];
    779       if (token.generated != null) {
    780         return null;
    781       }
    782       previous = this.peek(-2);
    783       isInterpIndent = previous && previous[0] === '+';
    784       previous = this.peek(-1);
    785       isArrayIndent = this.inArray() && (previous != null ? previous.newLine : void 0);
    786       previousSymbol = (_ref = this.peek(-1)) != null ? _ref[0] : void 0;
    787       isMultiline = previousSymbol === '=' || previousSymbol === ',';
    788       ignoreIndent = isInterpIndent || isArrayIndent || isMultiline;
    789       if (this.isChainedCall()) {
    790         currentLine = this.lines[this.lineNumber];
    791         prevNum = 1;
    792         while (/^\s*(#|$)/.test(this.lines[this.lineNumber - prevNum])) {
    793           prevNum += 1;
    794         }
    795         previousLine = this.lines[this.lineNumber - prevNum];
    796         previousIndentation = previousLine.match(/^(\s*)/)[1].length;
    797         numIndents = currentLine.match(/^(\s*)/)[1].length;
    798         numIndents -= previousIndentation;
    799       }
    800       expected = this.config['indentation'].value;
    801       if (!ignoreIndent && numIndents !== expected) {
    802         context = ("Expected " + expected + " ") + ("got " + numIndents);
    803         return this.createLexError('indentation', {
    804           context: context
    805         });
    806       } else {
    807         return null;
    808       }
    809     };
    810 
    811     LexicalLinter.prototype.lintClass = function(token) {
    812       var attrs, className, offset, _ref, _ref1, _ref2;
    813 
    814       if ((token.newLine != null) || ((_ref = this.peek()[0]) === 'INDENT' || _ref === 'EXTENDS')) {
    815         return null;
    816       }
    817       className = null;
    818       offset = 1;
    819       while (!className) {
    820         if (((_ref1 = this.peek(offset + 1)) != null ? _ref1[0] : void 0) === '.') {
    821           offset += 2;
    822         } else if (((_ref2 = this.peek(offset)) != null ? _ref2[0] : void 0) === '@') {
    823           offset += 1;
    824         } else {
    825           className = this.peek(offset)[1];
    826         }
    827       }
    828       if (!regexes.camelCase.test(className)) {
    829         attrs = {
    830           context: "class name: " + className
    831         };
    832         return this.createLexError('camel_case_classes', attrs);
    833       } else {
    834         return null;
    835       }
    836     };
    837 
    838     LexicalLinter.prototype.lintArrowSpacing = function(token) {
    839       var pp;
    840 
    841       pp = this.peek(-1);
    842       if (!(((token.spaced != null) || (token.newLine != null) || this.atEof()) && (((pp.spaced != null) || pp[0] === 'TERMINATOR') || (pp.generated != null) || pp[0] === "INDENT" || (pp[1] === "(" && (pp.generated == null))))) {
    843         return this.createLexError('arrow_spacing');
    844       } else {
    845         return null;
    846       }
    847     };
    848 
    849     LexicalLinter.prototype.createLexError = function(rule, attrs) {
    850       if (attrs == null) {
    851         attrs = {};
    852       }
    853       attrs.lineNumber = this.lineNumber + 1;
    854       attrs.level = this.config[rule].level;
    855       attrs.line = this.lines[this.lineNumber];
    856       return createError(rule, attrs);
    857     };
    858 
    859     LexicalLinter.prototype.peek = function(n) {
    860       if (n == null) {
    861         n = 1;
    862       }
    863       return this.tokens[this.i + n] || null;
    864     };
    865 
    866     LexicalLinter.prototype.inArray = function() {
    867       return this.arrayTokens.length > 0;
    868     };
    869 
    870     LexicalLinter.prototype.atEof = function() {
    871       var token, _i, _len, _ref, _ref1;
    872 
    873       _ref = this.tokens.slice(this.i + 1);
    874       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    875         token = _ref[_i];
    876         if (!(token.generated || ((_ref1 = token[0]) === 'OUTDENT' || _ref1 === 'TERMINATOR'))) {
    877           return false;
    878         }
    879       }
    880       return true;
    881     };
    882 
    883     LexicalLinter.prototype.isChainedCall = function() {
    884       var i, lastNewLineIndex, lines, t, token, tokens;
    885 
    886       lines = (function() {
    887         var _i, _len, _ref, _results;
    888 
    889         _ref = this.tokens.slice(0, +this.i + 1 || 9e9);
    890         _results = [];
    891         for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
    892           token = _ref[i];
    893           if (token.newLine != null) {
    894             _results.push(i);
    895           }
    896         }
    897         return _results;
    898       }).call(this);
    899       lastNewLineIndex = lines ? lines[lines.length - 2] : null;
    900       if (lastNewLineIndex == null) {
    901         return false;
    902       }
    903       tokens = [this.tokens[lastNewLineIndex], this.tokens[lastNewLineIndex + 1]];
    904       return !!((function() {
    905         var _i, _len, _results;
    906 
    907         _results = [];
    908         for (_i = 0, _len = tokens.length; _i < _len; _i++) {
    909           t = tokens[_i];
    910           if (t && t[0] === '.') {
    911             _results.push(t);
    912           }
    913         }
    914         return _results;
    915       })()).length;
    916     };
    917 
    918     return LexicalLinter;
    919 
    920   })();
    921 
    922   ASTLinter = (function() {
    923     function ASTLinter(source, config) {
    924       this.source = source;
    925       this.config = config;
    926       this.errors = [];
    927     }
    928 
    929     ASTLinter.prototype.lint = function() {
    930       var coffeeError;
    931 
    932       try {
    933         this.node = CoffeeScript.nodes(this.source);
    934       } catch (_error) {
    935         coffeeError = _error;
    936         this.errors.push(this._parseCoffeeScriptError(coffeeError));
    937         return this.errors;
    938       }
    939       this.lintNode(this.node);
    940       return this.errors;
    941     };
    942 
    943     ASTLinter.prototype.getComplexity = function(node) {
    944       var complexity, name, _ref;
    945 
    946       name = node.constructor.name;
    947       complexity = name === 'If' || name === 'While' || name === 'For' || name === 'Try' ? 1 : name === 'Op' && ((_ref = node.operator) === '&&' || _ref === '||') ? 1 : name === 'Switch' ? node.cases.length : 0;
    948       return complexity;
    949     };
    950 
    951     ASTLinter.prototype.lintNode = function(node, line) {
    952       var attrs, complexity, error, name, rule,
    953         _this = this;
    954 
    955       name = node.constructor.name;
    956       complexity = this.getComplexity(node);
    957       node.eachChild(function(childNode) {
     953    }
     954  };
     955
     956  return ColonAssignmentSpacing;
     957
     958})();
     959
     960
     961},{}],11:[function(_dereq_,module,exports){
     962var NoTabs;
     963
     964module.exports = NoTabs = (function() {
     965  function NoTabs() {}
     966
     967  NoTabs.prototype.rule = {
     968    name: 'cyclomatic_complexity',
     969    value: 10,
     970    level: 'ignore',
     971    message: 'The cyclomatic complexity is too damn high',
     972    description: 'Examine the complexity of your application.'
     973  };
     974
     975  NoTabs.prototype.getComplexity = function(node) {
     976    var complexity, name, _ref;
     977    name = node.constructor.name;
     978    complexity = name === 'If' || name === 'While' || name === 'For' || name === 'Try' ? 1 : name === 'Op' && ((_ref = node.operator) === '&&' || _ref === '||') ? 1 : name === 'Switch' ? node.cases.length : 0;
     979    return complexity;
     980  };
     981
     982  NoTabs.prototype.lintAST = function(node, astApi) {
     983    this.astApi = astApi;
     984    this.lintNode(node);
     985    return void 0;
     986  };
     987
     988  NoTabs.prototype.lintNode = function(node, line) {
     989    var complexity, error, name, rule;
     990    name = node.constructor.name;
     991    complexity = this.getComplexity(node);
     992    node.eachChild((function(_this) {
     993      return function(childNode) {
    958994        var nodeLine;
    959 
    960995        nodeLine = childNode.locationData.first_line;
    961996        if (childNode) {
    962997          return complexity += _this.lintNode(childNode, nodeLine);
    963998        }
     999      };
     1000    })(this));
     1001    rule = this.astApi.config[this.rule.name];
     1002    if (name === 'Code' && complexity >= rule.value) {
     1003      error = this.astApi.createError({
     1004        context: complexity + 1,
     1005        lineNumber: line + 1,
     1006        lineNumberEnd: node.locationData.last_line + 1
    9641007      });
    965       rule = this.config.cyclomatic_complexity;
    966       if (name === 'Code' && complexity >= rule.value) {
    967         attrs = {
    968           context: complexity + 1,
    969           level: rule.level,
    970           lineNumber: line + 1,
    971           lineNumberEnd: node.locationData.last_line + 1
    972         };
    973         error = createError('cyclomatic_complexity', attrs);
    974         if (error) {
    975           this.errors.push(error);
    976         }
    977       }
    978       return complexity;
    979     };
    980 
    981     ASTLinter.prototype._parseCoffeeScriptError = function(coffeeError) {
    982       var attrs, lineNumber, match, message, rule;
    983 
    984       rule = RULES['coffeescript_error'];
    985       message = coffeeError.toString();
    986       lineNumber = -1;
    987       if (coffeeError.location != null) {
    988         lineNumber = coffeeError.location.first_line + 1;
    989       } else {
    990         match = /line (\d+)/.exec(message);
    991         if ((match != null ? match.length : void 0) > 1) {
    992           lineNumber = parseInt(match[1], 10);
    993         }
    994       }
    995       attrs = {
    996         message: message,
    997         level: rule.level,
    998         lineNumber: lineNumber
    999       };
    1000       return createError('coffeescript_error', attrs);
    1001     };
    1002 
    1003     return ASTLinter;
    1004 
    1005   })();
    1006 
    1007   mergeDefaultConfig = function(userConfig) {
    1008     var config, rule, ruleConfig;
    1009 
    1010     config = {};
    1011     for (rule in RULES) {
    1012       ruleConfig = RULES[rule];
    1013       config[rule] = defaults(userConfig[rule], ruleConfig);
    1014     }
    1015     return config;
    1016   };
    1017 
    1018   coffeelint.invertLiterate = function(source) {
    1019     var line, newSource, _i, _len, _ref;
    1020 
    1021     source = CoffeeScript.helpers.invertLiterate(source);
    1022     newSource = "";
    1023     _ref = source.split("\n");
    1024     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    1025       line = _ref[_i];
    1026       if (line.match(/^#/)) {
    1027         line = line.replace(/\s*$/, '');
    1028       }
    1029       line = line.replace(/^\s{4}/g, '');
    1030       newSource += "" + line + "\n";
    1031     }
    1032     return newSource;
    1033   };
    1034 
    1035   coffeelint.lint = function(source, userConfig, literate) {
    1036     var all_errors, astErrors, cmd, config, difference, disabled, disabled_initially, e, errors, i, l, lexErrors, lexicalLinter, lineErrors, lineLinter, next_line, r, rules, s, tokensByLine, _i, _j, _k, _len, _len1, _ref, _ref1, _ref2, _ref3, _ref4;
    1037 
    1038     if (userConfig == null) {
    1039       userConfig = {};
    1040     }
    1041     if (literate == null) {
    1042       literate = false;
    1043     }
    1044     if (literate) {
    1045       source = this.invertLiterate(source);
    1046     }
    1047     config = mergeDefaultConfig(userConfig);
    1048     disabled_initially = [];
    1049     _ref = source.split('\n');
    1050     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    1051       l = _ref[_i];
    1052       s = regexes.configStatement.exec(l);
    1053       if ((s != null ? s.length : void 0) > 2 && __indexOf.call(s, 'enable') >= 0) {
    1054         _ref1 = s.slice(1);
    1055         for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
    1056           r = _ref1[_j];
    1057           if (r !== 'enable' && r !== 'disable') {
    1058             if (!(r in config && ((_ref2 = config[r].level) === 'warn' || _ref2 === 'error'))) {
    1059               disabled_initially.push(r);
    1060               config[r] = {
    1061                 level: 'error'
    1062               };
    1063             }
     1008      if (error) {
     1009        this.errors.push(error);
     1010      }
     1011    }
     1012    return complexity;
     1013  };
     1014
     1015  return NoTabs;
     1016
     1017})();
     1018
     1019
     1020},{}],12:[function(_dereq_,module,exports){
     1021var DuplicateKey;
     1022
     1023module.exports = DuplicateKey = (function() {
     1024  DuplicateKey.prototype.rule = {
     1025    name: 'duplicate_key',
     1026    level: 'error',
     1027    message: 'Duplicate key defined in object or class',
     1028    description: "Prevents defining duplicate keys in object literals and classes"
     1029  };
     1030
     1031  DuplicateKey.prototype.tokens = ['IDENTIFIER', "{", "}"];
     1032
     1033  function DuplicateKey() {
     1034    this.braceScopes = [];
     1035  }
     1036
     1037  DuplicateKey.prototype.lintToken = function(_arg, tokenApi) {
     1038    var type;
     1039    type = _arg[0];
     1040    if (type === "{" || type === "}") {
     1041      this.lintBrace.apply(this, arguments);
     1042      return void 0;
     1043    }
     1044    if (type === "IDENTIFIER") {
     1045      return this.lintIdentifier.apply(this, arguments);
     1046    }
     1047  };
     1048
     1049  DuplicateKey.prototype.lintIdentifier = function(token, tokenApi) {
     1050    var key, nextToken, previousToken;
     1051    key = token[1];
     1052    if (this.currentScope == null) {
     1053      return null;
     1054    }
     1055    nextToken = tokenApi.peek(1);
     1056    if (nextToken[1] !== ':') {
     1057      return null;
     1058    }
     1059    previousToken = tokenApi.peek(-1);
     1060    if (previousToken[0] === '@') {
     1061      key = "@" + key;
     1062    }
     1063    key = "identifier-" + key;
     1064    if (this.currentScope[key]) {
     1065      return true;
     1066    } else {
     1067      this.currentScope[key] = token;
     1068      return null;
     1069    }
     1070  };
     1071
     1072  DuplicateKey.prototype.lintBrace = function(token) {
     1073    if (token[0] === '{') {
     1074      if (this.currentScope != null) {
     1075        this.braceScopes.push(this.currentScope);
     1076      }
     1077      this.currentScope = {};
     1078    } else {
     1079      this.currentScope = this.braceScopes.pop();
     1080    }
     1081    return null;
     1082  };
     1083
     1084  return DuplicateKey;
     1085
     1086})();
     1087
     1088
     1089},{}],13:[function(_dereq_,module,exports){
     1090var EmptyConstructorNeedsParens;
     1091
     1092module.exports = EmptyConstructorNeedsParens = (function() {
     1093  function EmptyConstructorNeedsParens() {}
     1094
     1095  EmptyConstructorNeedsParens.prototype.rule = {
     1096    name: 'empty_constructor_needs_parens',
     1097    level: 'ignore',
     1098    message: 'Invoking a constructor without parens and without arguments',
     1099    description: "Requires constructors with no parameters to include the parens"
     1100  };
     1101
     1102  EmptyConstructorNeedsParens.prototype.tokens = ['UNARY'];
     1103
     1104  EmptyConstructorNeedsParens.prototype.lintToken = function(token, tokenApi) {
     1105    var expectedCallStart, expectedIdentifier, identifierIndex;
     1106    if (token[1] === 'new') {
     1107      identifierIndex = 1;
     1108      while (true) {
     1109        expectedIdentifier = tokenApi.peek(identifierIndex);
     1110        expectedCallStart = tokenApi.peek(identifierIndex + 1);
     1111        if ((expectedIdentifier != null ? expectedIdentifier[0] : void 0) === 'IDENTIFIER') {
     1112          if ((expectedCallStart != null ? expectedCallStart[0] : void 0) === '.') {
     1113            identifierIndex += 2;
     1114            continue;
    10641115          }
    10651116        }
    1066       }
    1067     }
    1068     astErrors = new ASTLinter(source, config).lint();
    1069     lexicalLinter = new LexicalLinter(source, config);
    1070     lexErrors = lexicalLinter.lint();
    1071     tokensByLine = lexicalLinter.tokensByLine;
    1072     lineLinter = new LineLinter(source, config, tokensByLine);
    1073     lineErrors = lineLinter.lint();
    1074     errors = lexErrors.concat(lineErrors, astErrors);
    1075     errors.sort(function(a, b) {
    1076       return a.lineNumber - b.lineNumber;
    1077     });
    1078     difference = function(a, b) {
    1079       var j, _ref3, _results;
    1080 
    1081       j = 0;
     1117        break;
     1118      }
     1119      if ((expectedIdentifier != null ? expectedIdentifier[0] : void 0) === 'IDENTIFIER' && (expectedCallStart != null)) {
     1120        return this.handleExpectedCallStart(expectedCallStart);
     1121      }
     1122    }
     1123  };
     1124
     1125  EmptyConstructorNeedsParens.prototype.handleExpectedCallStart = function(expectedCallStart) {
     1126    if (expectedCallStart[0] !== 'CALL_START') {
     1127      return true;
     1128    }
     1129  };
     1130
     1131  return EmptyConstructorNeedsParens;
     1132
     1133})();
     1134
     1135
     1136},{}],14:[function(_dereq_,module,exports){
     1137var Indentation;
     1138
     1139module.exports = Indentation = (function() {
     1140  Indentation.prototype.rule = {
     1141    name: 'indentation',
     1142    value: 2,
     1143    level: 'error',
     1144    message: 'Line contains inconsistent indentation',
     1145    description: "This rule imposes a standard number of spaces to be used for\nindentation. Since whitespace is significant in CoffeeScript, it's\ncritical that a project chooses a standard indentation format and\nstays consistent. Other roads lead to darkness. <pre> <code>#\nEnabling this option will prevent this ugly\n# but otherwise valid CoffeeScript.\ntwoSpaces = () ->\n  fourSpaces = () ->\n      eightSpaces = () ->\n            'this is valid CoffeeScript'\n\n</code>\n</pre>\nTwo space indentation is enabled by default."
     1146  };
     1147
     1148  Indentation.prototype.tokens = ['INDENT', "[", "]"];
     1149
     1150  function Indentation() {
     1151    this.arrayTokens = [];
     1152  }
     1153
     1154  Indentation.prototype.lintToken = function(token, tokenApi) {
     1155    var currentLine, expected, ignoreIndent, isArrayIndent, isInterpIndent, isMultiline, lineNumber, lines, numIndents, prevNum, previous, previousIndentation, previousLine, previousSymbol, type, _ref;
     1156    type = token[0], numIndents = token[1], lineNumber = token[2];
     1157    if (type === "[" || type === "]") {
     1158      this.lintArray(token);
     1159      return void 0;
     1160    }
     1161    if (token.generated != null) {
     1162      return null;
     1163    }
     1164    previous = tokenApi.peek(-2);
     1165    isInterpIndent = previous && previous[0] === '+';
     1166    previous = tokenApi.peek(-1);
     1167    isArrayIndent = this.inArray() && (previous != null ? previous.newLine : void 0);
     1168    previousSymbol = (_ref = tokenApi.peek(-1)) != null ? _ref[0] : void 0;
     1169    isMultiline = previousSymbol === '=' || previousSymbol === ',';
     1170    ignoreIndent = isInterpIndent || isArrayIndent || isMultiline;
     1171    if (this.isChainedCall(tokenApi)) {
     1172      lines = tokenApi.lines, lineNumber = tokenApi.lineNumber;
     1173      currentLine = lines[lineNumber];
     1174      prevNum = 1;
     1175      while (/^\s*(#|$)/.test(lines[lineNumber - prevNum])) {
     1176        prevNum += 1;
     1177      }
     1178      previousLine = lines[lineNumber - prevNum];
     1179      previousIndentation = previousLine.match(/^(\s*)/)[1].length;
     1180      numIndents = currentLine.match(/^(\s*)/)[1].length;
     1181      numIndents -= previousIndentation;
     1182    }
     1183    expected = tokenApi.config[this.rule.name].value;
     1184    if (!ignoreIndent && numIndents !== expected) {
     1185      return {
     1186        context: "Expected " + expected + " got " + numIndents
     1187      };
     1188    }
     1189  };
     1190
     1191  Indentation.prototype.inArray = function() {
     1192    return this.arrayTokens.length > 0;
     1193  };
     1194
     1195  Indentation.prototype.lintArray = function(token) {
     1196    if (token[0] === '[') {
     1197      this.arrayTokens.push(token);
     1198    } else if (token[0] === ']') {
     1199      this.arrayTokens.pop();
     1200    }
     1201    return null;
     1202  };
     1203
     1204  Indentation.prototype.isChainedCall = function(tokenApi) {
     1205    var i, lastNewLineIndex, lines, t, token, tokens;
     1206    tokens = tokenApi.tokens, i = tokenApi.i;
     1207    lines = (function() {
     1208      var _i, _len, _ref, _results;
     1209      _ref = tokens.slice(0, +i + 1 || 9e9);
    10821210      _results = [];
    1083       while (j < a.length) {
    1084         if (_ref3 = a[j], __indexOf.call(b, _ref3) >= 0) {
    1085           _results.push(a.splice(j, 1));
    1086         } else {
    1087           _results.push(j++);
     1211      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
     1212        token = _ref[i];
     1213        if (token.newLine != null) {
     1214          _results.push(i);
    10881215        }
    10891216      }
    10901217      return _results;
     1218    })();
     1219    lastNewLineIndex = lines ? lines[lines.length - 2] : null;
     1220    if (lastNewLineIndex == null) {
     1221      return false;
     1222    }
     1223    tokens = [tokens[lastNewLineIndex], tokens[lastNewLineIndex + 1]];
     1224    return !!((function() {
     1225      var _i, _len, _results;
     1226      _results = [];
     1227      for (_i = 0, _len = tokens.length; _i < _len; _i++) {
     1228        t = tokens[_i];
     1229        if (t && t[0] === '.') {
     1230          _results.push(t);
     1231        }
     1232      }
     1233      return _results;
     1234    })()).length;
     1235  };
     1236
     1237  return Indentation;
     1238
     1239})();
     1240
     1241
     1242},{}],15:[function(_dereq_,module,exports){
     1243var LineEndings;
     1244
     1245module.exports = LineEndings = (function() {
     1246  function LineEndings() {}
     1247
     1248  LineEndings.prototype.rule = {
     1249    name: 'line_endings',
     1250    level: 'ignore',
     1251    value: 'unix',
     1252    message: 'Line contains incorrect line endings',
     1253    description: "This rule ensures your project uses only <tt>windows</tt> or\n<tt>unix</tt> line endings. This rule is disabled by default."
     1254  };
     1255
     1256  LineEndings.prototype.lintLine = function(line, lineApi) {
     1257    var ending, lastChar, valid, _ref;
     1258    ending = (_ref = lineApi.config[this.rule.name]) != null ? _ref.value : void 0;
     1259    if (!ending || lineApi.isLastLine() || !line) {
     1260      return null;
     1261    }
     1262    lastChar = line[line.length - 1];
     1263    valid = (function() {
     1264      if (ending === 'windows') {
     1265        return lastChar === '\r';
     1266      } else if (ending === 'unix') {
     1267        return lastChar !== '\r';
     1268      } else {
     1269        throw new Error("unknown line ending type: " + ending);
     1270      }
     1271    })();
     1272    if (!valid) {
     1273      return {
     1274        context: "Expected " + ending
     1275      };
     1276    } else {
     1277      return null;
     1278    }
     1279  };
     1280
     1281  return LineEndings;
     1282
     1283})();
     1284
     1285
     1286},{}],16:[function(_dereq_,module,exports){
     1287var MaxLineLength, regexes;
     1288
     1289regexes = {
     1290  literateComment: /^\#\s/,
     1291  longUrlComment: /^\s*\#\s*http[^\s]+$/
     1292};
     1293
     1294module.exports = MaxLineLength = (function() {
     1295  function MaxLineLength() {}
     1296
     1297  MaxLineLength.prototype.rule = {
     1298    name: 'max_line_length',
     1299    value: 80,
     1300    level: 'error',
     1301    limitComments: true,
     1302    message: 'Line exceeds maximum allowed length',
     1303    description: "This rule imposes a maximum line length on your code. <a\nhref=\"http://www.python.org/dev/peps/pep-0008/\">Python's style\nguide</a> does a good job explaining why you might want to limit the\nlength of your lines, though this is a matter of taste.\n\nLines can be no longer than eighty characters by default."
     1304  };
     1305
     1306  MaxLineLength.prototype.lintLine = function(line, lineApi) {
     1307    var limitComments, lineLength, max, _ref, _ref1;
     1308    max = (_ref = lineApi.config[this.rule.name]) != null ? _ref.value : void 0;
     1309    limitComments = (_ref1 = lineApi.config[this.rule.name]) != null ? _ref1.limitComments : void 0;
     1310    lineLength = line.length;
     1311    if (lineApi.isLiterate() && regexes.literateComment.test(line)) {
     1312      lineLength -= 2;
     1313    }
     1314    if (max && max < lineLength && !regexes.longUrlComment.test(line)) {
     1315      if (!limitComments) {
     1316        if (lineApi.getLineTokens().length === 0) {
     1317          return;
     1318        }
     1319      }
     1320      return {
     1321        context: "Length is " + lineLength + ", max is " + max
     1322      };
     1323    }
     1324  };
     1325
     1326  return MaxLineLength;
     1327
     1328})();
     1329
     1330
     1331},{}],17:[function(_dereq_,module,exports){
     1332var MissingFatArrows, any, isClass, isCode, isFatArrowCode, isObject, isThis, isValue, methodsOfClass, needsFatArrow,
     1333  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
     1334
     1335isCode = function(node) {
     1336  return (node != null ? node.constructor.name : void 0) === 'Code';
     1337};
     1338
     1339isClass = function(node) {
     1340  return node.constructor.name === 'Class';
     1341};
     1342
     1343isValue = function(node) {
     1344  return node.constructor.name === 'Value';
     1345};
     1346
     1347isObject = function(node) {
     1348  return node.constructor.name === 'Obj';
     1349};
     1350
     1351isThis = function(node) {
     1352  return isValue(node) && node.base.value === 'this';
     1353};
     1354
     1355isFatArrowCode = function(node) {
     1356  return isCode(node) && node.bound;
     1357};
     1358
     1359any = function(arr, test) {
     1360  return arr.reduce((function(res, elt) {
     1361    return res || test(elt);
     1362  }), false);
     1363};
     1364
     1365needsFatArrow = function(node) {
     1366  return isCode(node) && (any(node.params, function(param) {
     1367    return param.contains(isThis) != null;
     1368  }) || (node.body.contains(isThis) != null));
     1369};
     1370
     1371methodsOfClass = function(classNode) {
     1372  var bodyNodes, returnNode;
     1373  bodyNodes = classNode.body.expressions;
     1374  returnNode = bodyNodes[bodyNodes.length - 1];
     1375  if ((returnNode != null) && isValue(returnNode) && isObject(returnNode.base)) {
     1376    return returnNode.base.properties.map(function(assignNode) {
     1377      return assignNode.value;
     1378    }).filter(isCode);
     1379  } else {
     1380    return [];
     1381  }
     1382};
     1383
     1384module.exports = MissingFatArrows = (function() {
     1385  function MissingFatArrows() {}
     1386
     1387  MissingFatArrows.prototype.rule = {
     1388    name: 'missing_fat_arrows',
     1389    level: 'ignore',
     1390    message: 'Used `this` in a function without a fat arrow',
     1391    description: "Warns when you use `this` inside a function that wasn't defined\nwith a fat arrow. This rule does not apply to methods defined in a\nclass, since they have `this` bound to the class instance (or the\nclass itself, for class methods).\n\nIt is impossible to statically determine whether a function using\n`this` will be bound with the correct `this` value due to language\nfeatures like `Function.prototype.call` and\n`Function.prototype.bind`, so this rule may produce false positives."
     1392  };
     1393
     1394  MissingFatArrows.prototype.lintAST = function(node, astApi) {
     1395    this.lintNode(node, astApi);
     1396    return void 0;
     1397  };
     1398
     1399  MissingFatArrows.prototype.lintNode = function(node, astApi, methods) {
     1400    var error;
     1401    if (methods == null) {
     1402      methods = [];
     1403    }
     1404    if ((!isFatArrowCode(node)) && (__indexOf.call(methods, node) < 0) && (needsFatArrow(node))) {
     1405      error = astApi.createError({
     1406        lineNumber: node.locationData.first_line + 1
     1407      });
     1408      this.errors.push(error);
     1409    }
     1410    return node.eachChild((function(_this) {
     1411      return function(child) {
     1412        return _this.lintNode(child, astApi, (function() {
     1413          switch (false) {
     1414            case !isClass(node):
     1415              return methodsOfClass(node);
     1416            case !isCode(node):
     1417              return [];
     1418            default:
     1419              return methods;
     1420          }
     1421        })());
     1422      };
     1423    })(this));
     1424  };
     1425
     1426  return MissingFatArrows;
     1427
     1428})();
     1429
     1430
     1431},{}],18:[function(_dereq_,module,exports){
     1432var NewlinesAfterClasses;
     1433
     1434module.exports = NewlinesAfterClasses = (function() {
     1435  function NewlinesAfterClasses() {}
     1436
     1437  NewlinesAfterClasses.prototype.rule = {
     1438    name: 'newlines_after_classes',
     1439    value: 3,
     1440    level: 'ignore',
     1441    message: 'Wrong count of newlines between a class and other code',
     1442    description: "Checks the number of newlines between classes and other code"
     1443  };
     1444
     1445  NewlinesAfterClasses.prototype.lintLine = function(line, lineApi) {
     1446    var context, ending, got, lineNumber;
     1447    ending = lineApi.config[this.rule.name].value;
     1448    if (!ending || lineApi.isLastLine()) {
     1449      return null;
     1450    }
     1451    lineNumber = lineApi.lineNumber, context = lineApi.context;
     1452    if (!context["class"].inClass && (context["class"].lastUnemptyLineInClass != null) && (lineNumber - context["class"].lastUnemptyLineInClass) !== ending) {
     1453      got = lineNumber - context["class"].lastUnemptyLineInClass;
     1454      return {
     1455        context: "Expected " + ending + " got " + got
     1456      };
     1457    }
     1458    return null;
     1459  };
     1460
     1461  return NewlinesAfterClasses;
     1462
     1463})();
     1464
     1465
     1466},{}],19:[function(_dereq_,module,exports){
     1467var NoBackticks;
     1468
     1469module.exports = NoBackticks = (function() {
     1470  function NoBackticks() {}
     1471
     1472  NoBackticks.prototype.rule = {
     1473    name: 'no_backticks',
     1474    level: 'error',
     1475    message: 'Backticks are forbidden',
     1476    description: "Backticks allow snippets of JavaScript to be embedded in\nCoffeeScript. While some folks consider backticks useful in a few\nniche circumstances, they should be avoided because so none of\nJavaScript's \"bad parts\", like <tt>with</tt> and <tt>eval</tt>,\nsneak into CoffeeScript.\nThis rule is enabled by default."
     1477  };
     1478
     1479  NoBackticks.prototype.tokens = ["JS"];
     1480
     1481  NoBackticks.prototype.lintToken = function(token, tokenApi) {
     1482    return true;
     1483  };
     1484
     1485  return NoBackticks;
     1486
     1487})();
     1488
     1489
     1490},{}],20:[function(_dereq_,module,exports){
     1491var NoEmptyParamList;
     1492
     1493module.exports = NoEmptyParamList = (function() {
     1494  function NoEmptyParamList() {}
     1495
     1496  NoEmptyParamList.prototype.rule = {
     1497    name: 'no_empty_param_list',
     1498    level: 'ignore',
     1499    message: 'Empty parameter list is forbidden',
     1500    description: "This rule prohibits empty parameter lists in function definitions.\n<pre>\n<code># The empty parameter list in here is unnecessary:\nmyFunction = () -&gt;\n\n# We might favor this instead:\nmyFunction = -&gt;\n</code>\n</pre>\nEmpty parameter lists are permitted by default."
     1501  };
     1502
     1503  NoEmptyParamList.prototype.tokens = ["PARAM_START"];
     1504
     1505  NoEmptyParamList.prototype.lintToken = function(token, tokenApi) {
     1506    var nextType;
     1507    nextType = tokenApi.peek()[0];
     1508    return nextType === 'PARAM_END';
     1509  };
     1510
     1511  return NoEmptyParamList;
     1512
     1513})();
     1514
     1515
     1516},{}],21:[function(_dereq_,module,exports){
     1517var NoImplicitBraces;
     1518
     1519module.exports = NoImplicitBraces = (function() {
     1520  function NoImplicitBraces() {}
     1521
     1522  NoImplicitBraces.prototype.rule = {
     1523    name: 'no_implicit_braces',
     1524    level: 'ignore',
     1525    message: 'Implicit braces are forbidden',
     1526    strict: true,
     1527    description: "This rule prohibits implicit braces when declaring object literals.\nImplicit braces can make code more difficult to understand,\nespecially when used in combination with optional parenthesis.\n<pre>\n<code># Do you find this code ambiguous? Is it a\n# function call with three arguments or four?\nmyFunction a, b, 1:2, 3:4\n\n# While the same code written in a more\n# explicit manner has no ambiguity.\nmyFunction(a, b, {1:2, 3:4})\n</code>\n</pre>\nImplicit braces are permitted by default, since their use is\nidiomatic CoffeeScript."
     1528  };
     1529
     1530  NoImplicitBraces.prototype.tokens = ["{"];
     1531
     1532  NoImplicitBraces.prototype.lintToken = function(token, tokenApi) {
     1533    var previousToken;
     1534    if (token.generated) {
     1535      if (!tokenApi.config[this.rule.name].strict) {
     1536        previousToken = tokenApi.peek(-1)[0];
     1537        if (previousToken === 'INDENT') {
     1538          return;
     1539        }
     1540      }
     1541      return this.isPartOfClass(tokenApi);
     1542    }
     1543  };
     1544
     1545  NoImplicitBraces.prototype.isPartOfClass = function(tokenApi) {
     1546    var i, t;
     1547    i = -1;
     1548    while (true) {
     1549      t = tokenApi.peek(i);
     1550      if ((t == null) || t[0] === 'TERMINATOR') {
     1551        return true;
     1552      }
     1553      if (t[0] === 'CLASS') {
     1554        return null;
     1555      }
     1556      i -= 1;
     1557    }
     1558  };
     1559
     1560  return NoImplicitBraces;
     1561
     1562})();
     1563
     1564
     1565},{}],22:[function(_dereq_,module,exports){
     1566var NoImplicitParens;
     1567
     1568module.exports = NoImplicitParens = (function() {
     1569  function NoImplicitParens() {}
     1570
     1571  NoImplicitParens.prototype.rule = {
     1572    name: 'no_implicit_parens',
     1573    level: 'ignore',
     1574    message: 'Implicit parens are forbidden',
     1575    description: "This rule prohibits implicit parens on function calls.\n<pre>\n<code># Some folks don't like this style of coding.\nmyFunction a, b, c\n\n# And would rather it always be written like this:\nmyFunction(a, b, c)\n</code>\n</pre>\nImplicit parens are permitted by default, since their use is\nidiomatic CoffeeScript."
     1576  };
     1577
     1578  NoImplicitParens.prototype.tokens = ["CALL_START"];
     1579
     1580  NoImplicitParens.prototype.lintToken = function(token, tokenApi) {
     1581    return token.generated;
     1582  };
     1583
     1584  return NoImplicitParens;
     1585
     1586})();
     1587
     1588
     1589},{}],23:[function(_dereq_,module,exports){
     1590var NoPlusPlus;
     1591
     1592module.exports = NoPlusPlus = (function() {
     1593  function NoPlusPlus() {}
     1594
     1595  NoPlusPlus.prototype.rule = {
     1596    name: 'no_plusplus',
     1597    level: 'ignore',
     1598    message: 'The increment and decrement operators are forbidden',
     1599    description: "This rule forbids the increment and decrement arithmetic operators.\nSome people believe the <tt>++</tt> and <tt>--</tt> to be cryptic\nand the cause of bugs due to misunderstandings of their precedence\nrules.\nThis rule is disabled by default."
     1600  };
     1601
     1602  NoPlusPlus.prototype.tokens = ["++", "--"];
     1603
     1604  NoPlusPlus.prototype.lintToken = function(token, tokenApi) {
     1605    return {
     1606      context: "found '" + token[0] + "'"
    10911607    };
    1092     all_errors = errors;
    1093     errors = [];
    1094     disabled = disabled_initially;
    1095     next_line = 0;
    1096     for (i = _k = 0, _ref3 = source.split('\n').length; 0 <= _ref3 ? _k < _ref3 : _k > _ref3; i = 0 <= _ref3 ? ++_k : --_k) {
    1097       for (cmd in block_config) {
    1098         rules = block_config[cmd][i];
    1099         if (rules != null) {
    1100           ({
    1101             'disable': function() {
    1102               return disabled = disabled.concat(rules);
    1103             },
    1104             'enable': function() {
    1105               difference(disabled, rules);
    1106               if (rules.length === 0) {
    1107                 return disabled = disabled_initially;
    1108               }
    1109             }
    1110           })[cmd]();
    1111         }
    1112       }
    1113       while (next_line === i && all_errors.length > 0) {
    1114         next_line = all_errors[0].lineNumber - 1;
    1115         e = all_errors[0];
    1116         if (e.lineNumber === i + 1 || (e.lineNumber == null)) {
    1117           e = all_errors.shift();
    1118           if (_ref4 = e.rule, __indexOf.call(disabled, _ref4) < 0) {
    1119             errors.push(e);
     1608  };
     1609
     1610  return NoPlusPlus;
     1611
     1612})();
     1613
     1614
     1615},{}],24:[function(_dereq_,module,exports){
     1616var NoStandAloneAt;
     1617
     1618module.exports = NoStandAloneAt = (function() {
     1619  function NoStandAloneAt() {}
     1620
     1621  NoStandAloneAt.prototype.rule = {
     1622    name: 'no_stand_alone_at',
     1623    level: 'ignore',
     1624    message: '@ must not be used stand alone',
     1625    description: "This rule checks that no stand alone @ are in use, they are\ndiscouraged. Further information in CoffeScript issue <a\nhref=\"https://github.com/jashkenas/coffee-script/issues/1601\">\n#1601</a>"
     1626  };
     1627
     1628  NoStandAloneAt.prototype.tokens = ["@"];
     1629
     1630  NoStandAloneAt.prototype.lintToken = function(token, tokenApi) {
     1631    var isDot, isIdentifier, isIndexStart, isValidProtoProperty, nextToken, protoProperty, spaced;
     1632    nextToken = tokenApi.peek();
     1633    spaced = token.spaced;
     1634    isIdentifier = nextToken[0] === 'IDENTIFIER';
     1635    isIndexStart = nextToken[0] === 'INDEX_START';
     1636    isDot = nextToken[0] === '.';
     1637    if (nextToken[0] === '::') {
     1638      protoProperty = tokenApi.peek(2);
     1639      isValidProtoProperty = protoProperty[0] === 'IDENTIFIER';
     1640    }
     1641    if (spaced || (!isIdentifier && !isIndexStart && !isDot && !isValidProtoProperty)) {
     1642      return true;
     1643    }
     1644  };
     1645
     1646  return NoStandAloneAt;
     1647
     1648})();
     1649
     1650
     1651},{}],25:[function(_dereq_,module,exports){
     1652var NoTabs, indentationRegex,
     1653  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
     1654
     1655indentationRegex = /\S/;
     1656
     1657module.exports = NoTabs = (function() {
     1658  function NoTabs() {}
     1659
     1660  NoTabs.prototype.rule = {
     1661    name: 'no_tabs',
     1662    level: 'error',
     1663    message: 'Line contains tab indentation',
     1664    description: "This rule forbids tabs in indentation. Enough said. It is enabled by\ndefault."
     1665  };
     1666
     1667  NoTabs.prototype.lintLine = function(line, lineApi) {
     1668    var indentation;
     1669    indentation = line.split(indentationRegex)[0];
     1670    if (lineApi.lineHasToken() && __indexOf.call(indentation, '\t') >= 0) {
     1671      return true;
     1672    } else {
     1673      return null;
     1674    }
     1675  };
     1676
     1677  return NoTabs;
     1678
     1679})();
     1680
     1681
     1682},{}],26:[function(_dereq_,module,exports){
     1683var NoThrowingStrings;
     1684
     1685module.exports = NoThrowingStrings = (function() {
     1686  function NoThrowingStrings() {}
     1687
     1688  NoThrowingStrings.prototype.rule = {
     1689    name: 'no_throwing_strings',
     1690    level: 'error',
     1691    message: 'Throwing strings is forbidden',
     1692    description: "This rule forbids throwing string literals or interpolations. While\nJavaScript (and CoffeeScript by extension) allow any expression to\nbe thrown, it is best to only throw <a\nhref=\"https://developer.mozilla.org\n/en/JavaScript/Reference/Global_Objects/Error\"> Error</a> objects,\nbecause they contain valuable debugging information like the stack\ntrace. Because of JavaScript's dynamic nature, CoffeeLint cannot\nensure you are always throwing instances of <tt>Error</tt>. It will\nonly catch the simple but real case of throwing literal strings.\n<pre>\n<code># CoffeeLint will catch this:\nthrow \"i made a boo boo\"\n\n# ... but not this:\nthrow getSomeString()\n</code>\n</pre>\nThis rule is enabled by default."
     1693  };
     1694
     1695  NoThrowingStrings.prototype.tokens = ["THROW"];
     1696
     1697  NoThrowingStrings.prototype.lintToken = function(token, tokenApi) {
     1698    var n1, n2, nextIsString, _ref;
     1699    _ref = [tokenApi.peek(), tokenApi.peek(2)], n1 = _ref[0], n2 = _ref[1];
     1700    nextIsString = n1[0] === 'STRING' || (n1[0] === '(' && n2[0] === 'STRING');
     1701    return nextIsString;
     1702  };
     1703
     1704  return NoThrowingStrings;
     1705
     1706})();
     1707
     1708
     1709},{}],27:[function(_dereq_,module,exports){
     1710var NoTrailingSemicolons, regexes,
     1711  __slice = [].slice;
     1712
     1713regexes = {
     1714  trailingSemicolon: /;\r?$/
     1715};
     1716
     1717module.exports = NoTrailingSemicolons = (function() {
     1718  function NoTrailingSemicolons() {}
     1719
     1720  NoTrailingSemicolons.prototype.rule = {
     1721    name: 'no_trailing_semicolons',
     1722    level: 'error',
     1723    message: 'Line contains a trailing semicolon',
     1724    description: "This rule prohibits trailing semicolons, since they are needless\ncruft in CoffeeScript.\n<pre>\n<code># This semicolon is meaningful.\nx = '1234'; console.log(x)\n\n# This semicolon is redundant.\nalert('end of line');\n</code>\n</pre>\nTrailing semicolons are forbidden by default."
     1725  };
     1726
     1727  NoTrailingSemicolons.prototype.lintLine = function(line, lineApi) {
     1728    var first, hasNewLine, hasSemicolon, last, lineTokens, _i, _ref;
     1729    lineTokens = lineApi.getLineTokens();
     1730    if (lineTokens.length === 1 && lineTokens[0][0] === 'TERMINATOR') {
     1731      return;
     1732    }
     1733    hasSemicolon = regexes.trailingSemicolon.test(line);
     1734    _ref = lineApi.getLineTokens(), first = 2 <= _ref.length ? __slice.call(_ref, 0, _i = _ref.length - 1) : (_i = 0, []), last = _ref[_i++];
     1735    hasNewLine = last && (last.newLine != null);
     1736    if (hasSemicolon && !hasNewLine && lineApi.lineHasToken() && last[0] !== 'STRING') {
     1737      return true;
     1738    }
     1739  };
     1740
     1741  return NoTrailingSemicolons;
     1742
     1743})();
     1744
     1745
     1746},{}],28:[function(_dereq_,module,exports){
     1747var NoTrailingWhitespace, regexes;
     1748
     1749regexes = {
     1750  trailingWhitespace: /[^\s]+[\t ]+\r?$/,
     1751  onlySpaces: /^[\t ]+\r?$/,
     1752  lineHasComment: /^\s*[^\#]*\#/
     1753};
     1754
     1755module.exports = NoTrailingWhitespace = (function() {
     1756  function NoTrailingWhitespace() {}
     1757
     1758  NoTrailingWhitespace.prototype.rule = {
     1759    name: 'no_trailing_whitespace',
     1760    level: 'error',
     1761    message: 'Line ends with trailing whitespace',
     1762    allowed_in_comments: false,
     1763    allowed_in_empty_lines: true,
     1764    description: "This rule forbids trailing whitespace in your code, since it is\nneedless cruft. It is enabled by default."
     1765  };
     1766
     1767  NoTrailingWhitespace.prototype.lintLine = function(line, lineApi) {
     1768    var str, token, tokens, _i, _len, _ref, _ref1, _ref2;
     1769    if (!((_ref = lineApi.config['no_trailing_whitespace']) != null ? _ref.allowed_in_empty_lines : void 0)) {
     1770      if (regexes.onlySpaces.test(line)) {
     1771        return true;
     1772      }
     1773    }
     1774    if (regexes.trailingWhitespace.test(line)) {
     1775      if (!((_ref1 = lineApi.config['no_trailing_whitespace']) != null ? _ref1.allowed_in_comments : void 0)) {
     1776        return true;
     1777      }
     1778      line = line;
     1779      tokens = lineApi.tokensByLine[lineApi.lineNumber];
     1780      if (!tokens) {
     1781        return null;
     1782      }
     1783      _ref2 = (function() {
     1784        var _j, _len, _results;
     1785        _results = [];
     1786        for (_j = 0, _len = tokens.length; _j < _len; _j++) {
     1787          token = tokens[_j];
     1788          if (token[0] === 'STRING') {
     1789            _results.push(token[1]);
    11201790          }
    11211791        }
    1122       }
    1123     }
    1124     block_config = {
    1125       'enable': {},
    1126       'disable': {}
    1127     };
    1128     return errors;
    1129   };
    1130 
    1131 }).call(this);
     1792        return _results;
     1793      })();
     1794      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
     1795        str = _ref2[_i];
     1796        line = line.replace(str, 'STRING');
     1797      }
     1798      if (!regexes.lineHasComment.test(line)) {
     1799        return true;
     1800      }
     1801    }
     1802  };
     1803
     1804  return NoTrailingWhitespace;
     1805
     1806})();
     1807
     1808
     1809},{}],29:[function(_dereq_,module,exports){
     1810var NoUnnecessaryFatArrows, any, isCode, isFatArrowCode, isThis, needsFatArrow;
     1811
     1812isCode = function(node) {
     1813  return node.constructor.name === 'Code';
     1814};
     1815
     1816isFatArrowCode = function(node) {
     1817  return isCode(node) && node.bound;
     1818};
     1819
     1820isThis = function(node) {
     1821  return node.constructor.name === 'Value' && node.base.value === 'this';
     1822};
     1823
     1824any = function(arr, test) {
     1825  return arr.reduce((function(res, elt) {
     1826    return res || test(elt);
     1827  }), false);
     1828};
     1829
     1830needsFatArrow = function(node) {
     1831  return isCode(node) && (any(node.params, function(param) {
     1832    return param.contains(isThis) != null;
     1833  }) || (node.body.contains(isThis) != null) || (node.body.contains(function(child) {
     1834    return isFatArrowCode(child) && needsFatArrow(child);
     1835  }) != null));
     1836};
     1837
     1838module.exports = NoUnnecessaryFatArrows = (function() {
     1839  function NoUnnecessaryFatArrows() {}
     1840
     1841  NoUnnecessaryFatArrows.prototype.rule = {
     1842    name: 'no_unnecessary_fat_arrows',
     1843    level: 'warn',
     1844    message: 'Unnecessary fat arrow',
     1845    description: "Disallows defining functions with fat arrows when `this`\nis not used within the function."
     1846  };
     1847
     1848  NoUnnecessaryFatArrows.prototype.lintAST = function(node, astApi) {
     1849    this.lintNode(node, astApi);
     1850    return void 0;
     1851  };
     1852
     1853  NoUnnecessaryFatArrows.prototype.lintNode = function(node, astApi) {
     1854    var error;
     1855    if ((isFatArrowCode(node)) && (!needsFatArrow(node))) {
     1856      error = astApi.createError({
     1857        lineNumber: node.locationData.first_line + 1
     1858      });
     1859      this.errors.push(error);
     1860    }
     1861    return node.eachChild((function(_this) {
     1862      return function(child) {
     1863        return _this.lintNode(child, astApi);
     1864      };
     1865    })(this));
     1866  };
     1867
     1868  return NoUnnecessaryFatArrows;
     1869
     1870})();
     1871
     1872
     1873},{}],30:[function(_dereq_,module,exports){
     1874var NonEmptyConstructorNeedsParens, ParentClass,
     1875  __hasProp = {}.hasOwnProperty,
     1876  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
     1877
     1878ParentClass = _dereq_('./empty_constructor_needs_parens.coffee');
     1879
     1880module.exports = NonEmptyConstructorNeedsParens = (function(_super) {
     1881  __extends(NonEmptyConstructorNeedsParens, _super);
     1882
     1883  function NonEmptyConstructorNeedsParens() {
     1884    return NonEmptyConstructorNeedsParens.__super__.constructor.apply(this, arguments);
     1885  }
     1886
     1887  NonEmptyConstructorNeedsParens.prototype.rule = {
     1888    name: 'non_empty_constructor_needs_parens',
     1889    level: 'ignore',
     1890    message: 'Invoking a constructor without parens and with arguments',
     1891    description: "Requires constructors with parameters to include the parens"
     1892  };
     1893
     1894  NonEmptyConstructorNeedsParens.prototype.handleExpectedCallStart = function(expectedCallStart) {
     1895    if (expectedCallStart[0] === 'CALL_START' && expectedCallStart.generated) {
     1896      return true;
     1897    }
     1898  };
     1899
     1900  return NonEmptyConstructorNeedsParens;
     1901
     1902})(ParentClass);
     1903
     1904
     1905},{"./empty_constructor_needs_parens.coffee":13}],31:[function(_dereq_,module,exports){
     1906var SpaceOperators,
     1907  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
     1908
     1909module.exports = SpaceOperators = (function() {
     1910  SpaceOperators.prototype.rule = {
     1911    name: 'space_operators',
     1912    level: 'ignore',
     1913    message: 'Operators must be spaced properly',
     1914    description: "This rule enforces that operators have space around them."
     1915  };
     1916
     1917  SpaceOperators.prototype.tokens = ["+", "-", "=", "MATH", "COMPARE", "LOGIC", "COMPOUND_ASSIGN", "(", ")", "CALL_START", "CALL_END"];
     1918
     1919  function SpaceOperators() {
     1920    this.callTokens = [];
     1921    this.parenTokens = [];
     1922  }
     1923
     1924  SpaceOperators.prototype.lintToken = function(_arg, tokenApi) {
     1925    var type;
     1926    type = _arg[0];
     1927    if (type === "CALL_START" || type === "CALL_END") {
     1928      this.lintCall.apply(this, arguments);
     1929      return void 0;
     1930    }
     1931    if (type === "(" || type === ")") {
     1932      this.lintParens.apply(this, arguments);
     1933      return void 0;
     1934    }
     1935    if (type === "+" || type === "-") {
     1936      return this.lintPlus.apply(this, arguments);
     1937    } else {
     1938      return this.lintMath.apply(this, arguments);
     1939    }
     1940  };
     1941
     1942  SpaceOperators.prototype.lintPlus = function(token, tokenApi) {
     1943    var isUnary, p, unaries, _ref;
     1944    if (this.isInInterpolation() || this.isInExtendedRegex()) {
     1945      return null;
     1946    }
     1947    p = tokenApi.peek(-1);
     1948    unaries = ['TERMINATOR', '(', '=', '-', '+', ',', 'CALL_START', 'INDEX_START', '..', '...', 'COMPARE', 'IF', 'THROW', 'LOGIC', 'POST_IF', ':', '[', 'INDENT', 'COMPOUND_ASSIGN', 'RETURN', 'MATH', 'BY', 'LEADING_WHEN'];
     1949    isUnary = !p ? false : (_ref = p[0], __indexOf.call(unaries, _ref) >= 0);
     1950    if ((isUnary && token.spaced) || (!isUnary && !token.spaced && !token.newLine)) {
     1951      return {
     1952        context: token[1]
     1953      };
     1954    } else {
     1955      return null;
     1956    }
     1957  };
     1958
     1959  SpaceOperators.prototype.lintMath = function(token, tokenApi) {
     1960    if (!token.spaced && !token.newLine) {
     1961      return {
     1962        context: token[1]
     1963      };
     1964    } else {
     1965      return null;
     1966    }
     1967  };
     1968
     1969  SpaceOperators.prototype.isInExtendedRegex = function() {
     1970    var t, _i, _len, _ref;
     1971    _ref = this.callTokens;
     1972    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     1973      t = _ref[_i];
     1974      if (t.isRegex) {
     1975        return true;
     1976      }
     1977    }
     1978    return false;
     1979  };
     1980
     1981  SpaceOperators.prototype.lintCall = function(token, tokenApi) {
     1982    var p;
     1983    if (token[0] === 'CALL_START') {
     1984      p = tokenApi.peek(-1);
     1985      token.isRegex = p && p[0] === 'IDENTIFIER' && p[1] === 'RegExp';
     1986      this.callTokens.push(token);
     1987    } else {
     1988      this.callTokens.pop();
     1989    }
     1990    return null;
     1991  };
     1992
     1993  SpaceOperators.prototype.isInInterpolation = function() {
     1994    var t, _i, _len, _ref;
     1995    _ref = this.parenTokens;
     1996    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     1997      t = _ref[_i];
     1998      if (t.isInterpolation) {
     1999        return true;
     2000      }
     2001    }
     2002    return false;
     2003  };
     2004
     2005  SpaceOperators.prototype.lintParens = function(token, tokenApi) {
     2006    var i, n1, n2, p1;
     2007    if (token[0] === '(') {
     2008      p1 = tokenApi.peek(-1);
     2009      n1 = tokenApi.peek(1);
     2010      n2 = tokenApi.peek(2);
     2011      i = n1 && n2 && n1[0] === 'STRING' && n2[0] === '+';
     2012      token.isInterpolation = i;
     2013      this.parenTokens.push(token);
     2014    } else {
     2015      this.parenTokens.pop();
     2016    }
     2017    return null;
     2018  };
     2019
     2020  return SpaceOperators;
     2021
     2022})();
     2023
     2024
     2025},{}]},{},[4])
     2026(4)
     2027});
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/commandline.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
    21/*
    32CoffeeLint
     
    98
    109(function() {
    11   var CSVReporter, CoffeeScript, ErrorReport, JSLintReporter, Reporter, coffeelint, config, data, errorReport, existsFn, findCoffeeScripts, fs, glob, lintFiles, lintSource, optimist, options, path, paths, read, reportAndExit, scripts, stdin, thisdir, _ref, _ref1, _ref2,
     10  var CSVReporter, CheckstyleReporter, CoffeeScript, ErrorReport, JSLintReporter, Reporter, coffeelint, config, configfinder, data, errorReport, findCoffeeScripts, fs, getFallbackConfig, glob, lintFiles, lintSource, loadRules, optimist, options, path, paths, read, reportAndExit, scripts, stdin, thisdir, _ref, _ref1, _ref2,
    1211    __slice = [].slice,
    1312    __hasProp = {}.hasOwnProperty,
     
    2423  thisdir = path.dirname(fs.realpathSync(__filename));
    2524
    26   coffeelint = require(path.join(thisdir, "..", "lib", "coffeelint"));
     25  coffeelint = require(path.join(thisdir, "coffeelint"));
     26
     27  configfinder = require(path.join(thisdir, "configfinder"));
    2728
    2829  CoffeeScript = require('coffee-script');
     
    3031  read = function(path) {
    3132    var realPath;
    32 
    3333    realPath = fs.realpathSync(path);
    3434    return fs.readFileSync(realPath).toString();
     
    3737  findCoffeeScripts = function(paths) {
    3838    var files, p, _i, _len;
    39 
    4039    files = [];
    4140    for (_i = 0, _len = paths.length; _i < _len; _i++) {
     
    6665    ErrorReport.prototype.getSummary = function() {
    6766      var error, errorCount, errors, pathCount, warningCount, _i, _len, _ref;
    68 
    6967      pathCount = errorCount = warningCount = 0;
    7068      _ref = this.paths;
     
    112110    ErrorReport.prototype._hasLevel = function(path, level) {
    113111      var error, _i, _len, _ref;
    114 
    115112      _ref = this.paths[path];
    116113      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     
    141138    Reporter.prototype.stylize = function() {
    142139      var map, message, styles;
    143 
    144140      message = arguments[0], styles = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
    145141      if (!this.colorize) {
     
    159155    Reporter.prototype.publish = function() {
    160156      var errors, paths, report;
    161 
    162157      paths = this.errorReport.paths;
    163158      report = "";
     
    176171    Reporter.prototype.reportSummary = function(s) {
    177172      var e, err, file, msg, p, start, w, warn;
    178 
    179173      start = s.errorCount > 0 ? "" + this.err + " " + (this.stylize("Lint!", 'red', 'bold')) : s.warningCount > 0 ? "" + this.warn + " " + (this.stylize("Warning!", 'yellow', 'bold')) : "" + this.ok + " " + (this.stylize("Ok!", 'green', 'bold'));
    180174      e = s.errorCount;
     
    190184    Reporter.prototype.reportPath = function(path, errors) {
    191185      var color, e, hasError, hasWarning, lineEnd, o, output, overall, pathReport, _i, _len, _ref;
    192 
    193186      _ref = (hasError = this.errorReport.pathHasError(path)) ? [this.err, 'red'] : (hasWarning = this.errorReport.pathHasWarning(path)) ? [this.warn, 'yellow'] : [this.ok, 'green'], overall = _ref[0], color = _ref[1];
    194187      pathReport = "";
     
    242235    CSVReporter.prototype.publish = function() {
    243236      var e, errors, f, header, _ref1, _results;
    244 
    245237      header = ["path", "lineNumber", "lineNumberEnd", "level", "message"];
    246238      this.print(header.join(","));
     
    251243        _results.push((function() {
    252244          var _i, _len, _ref2, _results1;
    253 
    254245          _results1 = [];
    255246          for (_i = 0, _len = errors.length; _i < _len; _i++) {
    256247            e = errors[_i];
     248            if (e.context) {
     249              e.message += " " + e.context + ".";
     250            }
    257251            f = [path, e.lineNumber, (_ref2 = e.lineNumberEnd) != null ? _ref2 : e.lineNumberEnd, e.level, e.message];
    258252            _results1.push(this.print(f.join(",")));
     
    278272    JSLintReporter.prototype.publish = function() {
    279273      var e, errors, _i, _len, _ref2, _ref3;
    280 
    281274      this.print("<?xml version=\"1.0\" encoding=\"utf-8\"?><jslint>");
    282275      _ref2 = this.errorReport.paths;
     
    287280          for (_i = 0, _len = errors.length; _i < _len; _i++) {
    288281            e = errors[_i];
    289             this.print("<issue line=\"" + e.lineNumber + "\"\n        lineEnd=" + ((_ref3 = e.lineNumberEnd) != null ? _ref3 : e.lineNumberEnd) + "\n        reason=\"[" + (this.escape(e.level)) + "] " + (this.escape(e.message)) + "\"\n        evidence=\"" + (this.escape(e.context)) + "\"/>");
     282            this.print("<issue line=\"" + e.lineNumber + "\"\n        lineEnd=\"" + ((_ref3 = e.lineNumberEnd) != null ? _ref3 : e.lineNumber) + "\"\n        reason=\"[" + (this.escape(e.level)) + "] " + (this.escape(e.message)) + "\"\n        evidence=\"" + (this.escape(e.context)) + "\"/>");
    290283          }
    291284          this.print("</file>");
     
    297290    JSLintReporter.prototype.escape = function(msg) {
    298291      var r, replacements, _i, _len;
    299 
    300292      msg = "" + msg;
    301293      if (!msg) {
     
    314306  })(Reporter);
    315307
    316   lintFiles = function(paths, config) {
    317     var errorReport, literate, source, _i, _len;
    318 
     308  CheckstyleReporter = (function(_super) {
     309    __extends(CheckstyleReporter, _super);
     310
     311    function CheckstyleReporter() {
     312      _ref2 = CheckstyleReporter.__super__.constructor.apply(this, arguments);
     313      return _ref2;
     314    }
     315
     316    CheckstyleReporter.prototype.publish = function() {
     317      var context, e, errors, level, _i, _len, _ref3, _ref4;
     318      this.print("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
     319      this.print("<checkstyle version=\"4.3\">");
     320      _ref3 = this.errorReport.paths;
     321      for (path in _ref3) {
     322        errors = _ref3[path];
     323        if (errors.length) {
     324          this.print("<file name=\"" + path + "\">");
     325          for (_i = 0, _len = errors.length; _i < _len; _i++) {
     326            e = errors[_i];
     327            level = e.level;
     328            if (level === 'warn') {
     329              level = 'warning';
     330            }
     331            context = (_ref4 = e.context) != null ? _ref4 : "";
     332            this.print("<error line=\"" + e.lineNumber + "\"\n    severity=\"" + (this.escape(level)) + "\"\n    message=\"" + (this.escape(e.message + '; context: ' + context)) + "\"\n    source=\"coffeelint\"/>");
     333          }
     334          this.print("</file>");
     335        }
     336      }
     337      return this.print("</checkstyle>");
     338    };
     339
     340    return CheckstyleReporter;
     341
     342  })(JSLintReporter);
     343
     344  lintFiles = function(files, config) {
     345    var data, errorReport, file, fileConfig, literate, ruleName, source, _i, _len;
    319346    errorReport = new ErrorReport();
    320     for (_i = 0, _len = paths.length; _i < _len; _i++) {
    321       path = paths[_i];
    322       source = read(path);
    323       literate = CoffeeScript.helpers.isLiterate(path);
    324       errorReport.paths[path] = coffeelint.lint(source, config, literate);
     347    for (_i = 0, _len = files.length; _i < _len; _i++) {
     348      file = files[_i];
     349      source = read(file);
     350      literate = CoffeeScript.helpers.isLiterate(file);
     351      fileConfig = config ? config : getFallbackConfig(file);
     352      for (ruleName in fileConfig) {
     353        data = fileConfig[ruleName];
     354        if (data.module != null) {
     355          loadRules(data.module, ruleName);
     356        }
     357      }
     358      errorReport.paths[file] = coffeelint.lint(source, fileConfig, literate);
    325359    }
    326360    return errorReport;
     
    328362
    329363  lintSource = function(source, config, literate) {
    330     var errorReport;
    331 
     364    var data, errorReport, ruleName;
    332365    if (literate == null) {
    333366      literate = false;
    334367    }
    335368    errorReport = new ErrorReport();
     369    config || (config = getFallbackConfig());
     370    for (ruleName in config) {
     371      data = config[ruleName];
     372      if (data.module != null) {
     373        loadRules(data.module, ruleName);
     374      }
     375    }
    336376    errorReport.paths["stdin"] = coffeelint.lint(source, config, literate);
    337377    return errorReport;
    338378  };
    339379
     380  getFallbackConfig = function(filename) {
     381    if (filename == null) {
     382      filename = null;
     383    }
     384    if (!options.argv.noconfig) {
     385      return configfinder.getConfig(filename);
     386    }
     387  };
     388
     389  loadRules = function(moduleName, ruleName) {
     390    var e, rule, ruleModule, _i, _len, _results;
     391    if (ruleName == null) {
     392      ruleName = void 0;
     393    }
     394    try {
     395      try {
     396        ruleModule = require(moduleName);
     397      } catch (_error) {
     398        e = _error;
     399        ruleModule = require(path.resolve(process.cwd(), moduleName));
     400      }
     401      if (typeof ruleModule === 'function') {
     402        return coffeelint.registerRule(ruleModule, ruleName);
     403      } else {
     404        _results = [];
     405        for (_i = 0, _len = ruleModule.length; _i < _len; _i++) {
     406          rule = ruleModule[_i];
     407          _results.push(coffeelint.registerRule(rule));
     408        }
     409        return _results;
     410      }
     411    } catch (_error) {
     412      e = _error;
     413      console.error("Error loading " + moduleName);
     414      throw e;
     415    }
     416  };
     417
    340418  reportAndExit = function(errorReport, options) {
    341419    var colorize, reporter;
    342 
    343     reporter = options.argv.jslint ? new JSLintReporter(errorReport) : options.argv.csv ? new CSVReporter(errorReport) : (colorize = !options.argv.nocolor, new Reporter(errorReport, colorize));
     420    reporter = options.argv.jslint ? new JSLintReporter(errorReport) : options.argv.csv ? new CSVReporter(errorReport) : options.argv.checkstyle ? new CheckstyleReporter(errorReport) : (colorize = !options.argv.nocolor, new Reporter(errorReport, colorize));
    344421    reporter.publish();
    345422    return process.on('exit', function() {
     
    348425  };
    349426
    350   options = optimist.usage("Usage: coffeelint [options] source [...]").alias("f", "file").alias("h", "help").alias("v", "version").alias("s", "stdin").alias("q", "quiet").describe("f", "Specify a custom configuration file.").describe("makeconfig", "Prints a default config file").describe("noconfig", "Ignores the environment variable COFFEELINT_CONFIG.").describe("h", "Print help information.").describe("v", "Print current version number.").describe("r", "Recursively lint .coffee files in subdirectories.").describe("csv", "Use the csv reporter.").describe("jslint", "Use the JSLint XML reporter.").describe("nocolor", "Don't colorize the output").describe("s", "Lint the source from stdin").describe("q", "Only print errors.").describe("literate", "Used with --stdin to process as Literate CoffeeScript").boolean("csv").boolean("jslint").boolean("nocolor").boolean("noconfig").boolean("makeconfig").boolean("literate").boolean("r").boolean("s").boolean("q", "Print errors only.");
     427  options = optimist.usage("Usage: coffeelint [options] source [...]").alias("f", "file").alias("h", "help").alias("v", "version").alias("s", "stdin").alias("q", "quiet").describe("f", "Specify a custom configuration file.").describe("rules", "Specify a custom rule or directory of rules.").describe("makeconfig", "Prints a default config file").describe("noconfig", "Ignores the environment variable COFFEELINT_CONFIG.").describe("h", "Print help information.").describe("v", "Print current version number.").describe("r", "(not used, but left for backward compatibility)").describe("csv", "Use the csv reporter.").describe("jslint", "Use the JSLint XML reporter.").describe("checkstyle", "Use the checkstyle XML reporter.").describe("nocolor", "Don't colorize the output").describe("s", "Lint the source from stdin").describe("q", "Only print errors.").describe("literate", "Used with --stdin to process as Literate CoffeeScript").boolean("csv").boolean("jslint").boolean("checkstyle").boolean("nocolor").boolean("noconfig").boolean("makeconfig").boolean("literate").boolean("r").boolean("s").boolean("q", "Print errors only.");
    351428
    352429  if (options.argv.v) {
     
    366443    process.exit(1);
    367444  } else {
    368     config = {};
     445    config = null;
    369446    if (!options.argv.noconfig) {
    370       existsFn = (_ref2 = fs.existsSync) != null ? _ref2 : path.existsSync;
    371447      if (options.argv.f) {
    372448        config = JSON.parse(read(options.argv.f));
    373       } else if (process.env.COFFEELINT_CONFIG && existsFn(process.env.COFFEELINT_CONFIG)) {
     449      } else if (process.env.COFFEELINT_CONFIG && fs.existsSync(process.env.COFFEELINT_CONFIG)) {
    374450        config = JSON.parse(read(process.env.COFFEELINT_CONFIG));
    375451      }
     452    }
     453    if (options.argv.rules) {
     454      loadRules(options.argv.rules);
    376455    }
    377456    if (options.argv.s) {
     
    385464      stdin.on('end', function() {
    386465        var errorReport;
    387 
    388466        errorReport = lintSource(data, config, options.argv.literate);
    389467        return reportAndExit(errorReport, options);
     
    391469    } else {
    392470      paths = options.argv._;
    393       scripts = options.argv.r ? findCoffeeScripts(paths) : paths;
     471      scripts = findCoffeeScripts(paths);
    394472      errorReport = lintFiles(scripts, config, options.argv.literate);
    395473      reportAndExit(errorReport, options);
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/browser.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    33  var CoffeeScript, compile, runScripts,
     
    1111
    1212  CoffeeScript["eval"] = function(code, options) {
    13     var _ref;
    14 
    1513    if (options == null) {
    1614      options = {};
    1715    }
    18     if ((_ref = options.bare) == null) {
     16    if (options.bare == null) {
    1917      options.bare = true;
    2018    }
     
    2725    }
    2826    options.bare = true;
     27    options.shiftLine = true;
    2928    return Function(compile(code, options))();
    3029  };
     
    3433  }
    3534
    36   if ((typeof btoa !== "undefined" && btoa !== null) && (typeof JSON !== "undefined" && JSON !== null)) {
     35  if ((typeof btoa !== "undefined" && btoa !== null) && (typeof JSON !== "undefined" && JSON !== null) && (typeof unescape !== "undefined" && unescape !== null) && (typeof encodeURIComponent !== "undefined" && encodeURIComponent !== null)) {
    3736    compile = function(code, options) {
    3837      var js, v3SourceMap, _ref;
    39 
    4038      if (options == null) {
    4139        options = {};
     
    4442      options.inline = true;
    4543      _ref = CoffeeScript.compile(code, options), js = _ref.js, v3SourceMap = _ref.v3SourceMap;
    46       return "" + js + "\n//@ sourceMappingURL=data:application/json;base64," + (btoa(v3SourceMap)) + "\n//@ sourceURL=coffeescript";
     44      return "" + js + "\n//@ sourceMappingURL=data:application/json;base64," + (btoa(unescape(encodeURIComponent(v3SourceMap)))) + "\n//@ sourceURL=coffeescript";
    4745    };
    4846  }
     
    5048  CoffeeScript.load = function(url, callback, options) {
    5149    var xhr;
    52 
    5350    if (options == null) {
    5451      options = {};
    5552    }
    5653    options.sourceFiles = [url];
    57     xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
     54    xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new window.XMLHttpRequest();
    5855    xhr.open('GET', url, true);
    5956    if ('overrideMimeType' in xhr) {
     
    6259    xhr.onreadystatechange = function() {
    6360      var _ref;
    64 
    6561      if (xhr.readyState === 4) {
    6662        if ((_ref = xhr.status) === 0 || _ref === 200) {
     
    7975  runScripts = function() {
    8076    var coffees, coffeetypes, execute, index, length, s, scripts;
    81 
    82     scripts = document.getElementsByTagName('script');
     77    scripts = window.document.getElementsByTagName('script');
    8378    coffeetypes = ['text/coffeescript', 'text/literate-coffeescript'];
    8479    coffees = (function() {
    8580      var _i, _len, _ref, _results;
    86 
    8781      _results = [];
    8882      for (_i = 0, _len = scripts.length; _i < _len; _i++) {
     
    9892    (execute = function() {
    9993      var mediatype, options, script;
    100 
    10194      script = coffees[index++];
    10295      mediatype = script != null ? script.type : void 0;
     
    118111
    119112  if (window.addEventListener) {
    120     addEventListener('DOMContentLoaded', runScripts, false);
     113    window.addEventListener('DOMContentLoaded', runScripts, false);
    121114  } else {
    122     attachEvent('onload', runScripts);
     115    window.attachEvent('onload', runScripts);
    123116  }
    124117
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/cake.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    33  var CoffeeScript, cakefileDirectory, existsSync, fatalError, fs, helpers, missingTask, oparse, options, optparse, path, printTasks, switches, tasks;
     
    2626    task: function(name, description, action) {
    2727      var _ref;
    28 
    2928      if (!action) {
    3029        _ref = [description, action], action = _ref[0], description = _ref[1];
     
    4948  exports.run = function() {
    5049    var arg, args, e, _i, _len, _ref, _results;
    51 
    5250    global.__originalDirname = fs.realpathSync('.');
    5351    process.chdir(cakefileDirectory(__originalDirname));
     
    7775  printTasks = function() {
    7876    var cakefilePath, desc, name, relative, spaces, task;
    79 
    8077    relative = path.relative || path.resolve;
    8178    cakefilePath = path.join(relative(__originalDirname, process.cwd()), 'Cakefile');
     
    105102  cakefileDirectory = function(dir) {
    106103    var parent;
    107 
    108104    if (existsSync(path.join(dir, 'Cakefile'))) {
    109105      return dir;
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/coffee-script.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    3   var Lexer, child_process, compile, ext, fork, formatSourcePosition, fs, helpers, lexer, loadFile, parser, patchStackTrace, patched, path, sourcemap, vm, _i, _len, _ref,
     3  var Lexer, Module, SourceMap, child_process, compile, ext, findExtension, fork, formatSourcePosition, fs, helpers, lexer, loadFile, parser, patchStackTrace, patched, path, sourceMaps, vm, _i, _len, _ref,
    44    __hasProp = {}.hasOwnProperty;
    55
     
    1818  helpers = require('./helpers');
    1919
    20   sourcemap = require('./sourcemap');
    21 
    22   exports.VERSION = '1.6.2';
     20  SourceMap = require('./sourcemap');
     21
     22  exports.VERSION = '1.6.3';
    2323
    2424  exports.helpers = helpers;
    2525
    2626  exports.compile = compile = function(code, options) {
    27     var answer, currentColumn, currentLine, fragment, fragments, header, js, merge, newLines, sourceMap, _i, _len;
    28 
     27    var answer, currentColumn, currentLine, fragment, fragments, header, js, map, merge, newLines, _i, _len;
    2928    if (options == null) {
    3029      options = {};
    3130    }
    32     merge = exports.helpers.merge;
     31    merge = helpers.merge;
    3332    if (options.sourceMap) {
    34       sourceMap = new sourcemap.SourceMap();
    35     }
    36     fragments = (parser.parse(lexer.tokenize(code, options))).compileToFragments(options);
     33      map = new SourceMap;
     34    }
     35    fragments = parser.parse(lexer.tokenize(code, options)).compileToFragments(options);
    3736    currentLine = 0;
    38     if (options.header || options.inline) {
     37    if (options.header) {
     38      currentLine += 1;
     39    }
     40    if (options.shiftLine) {
    3941      currentLine += 1;
    4042    }
     
    4345    for (_i = 0, _len = fragments.length; _i < _len; _i++) {
    4446      fragment = fragments[_i];
    45       if (sourceMap) {
     47      if (options.sourceMap) {
    4648        if (fragment.locationData) {
    47           sourceMap.addMapping([fragment.locationData.first_line, fragment.locationData.first_column], [currentLine, currentColumn], {
     49          map.add([fragment.locationData.first_line, fragment.locationData.first_column], [currentLine, currentColumn], {
    4850            noReplace: true
    4951          });
     
    6365        js: js
    6466      };
    65       if (sourceMap) {
    66         answer.sourceMap = sourceMap;
    67         answer.v3SourceMap = sourcemap.generateV3SourceMap(sourceMap, options, code);
    68       }
     67      answer.sourceMap = map;
     68      answer.v3SourceMap = map.generate(options, code);
    6969      return answer;
    7070    } else {
     
    8686
    8787  exports.run = function(code, options) {
    88     var answer, mainModule, _ref;
    89 
     88    var answer, mainModule;
    9089    if (options == null) {
    9190      options = {};
    9291    }
    9392    mainModule = require.main;
    94     if ((_ref = options.sourceMap) == null) {
     93    if (options.sourceMap == null) {
    9594      options.sourceMap = true;
    9695    }
     
    101100      answer = compile(code, options);
    102101      patchStackTrace();
    103       mainModule._sourceMaps[mainModule.filename] = answer.sourceMap;
     102      sourceMaps[mainModule.filename] = answer.sourceMap;
    104103      return mainModule._compile(answer.js, mainModule.filename);
    105104    } else {
     
    110109  exports["eval"] = function(code, options) {
    111110    var Module, Script, js, k, o, r, sandbox, v, _i, _len, _module, _ref, _ref1, _require;
    112 
    113111    if (options == null) {
    114112      options = {};
     
    173171
    174172  loadFile = function(module, filename) {
    175     var raw, stripped;
    176 
     173    var answer, raw, stripped;
    177174    raw = fs.readFileSync(filename, 'utf8');
    178175    stripped = raw.charCodeAt(0) === 0xFEFF ? raw.substring(1) : raw;
    179     return module._compile(compile(stripped, {
     176    answer = compile(stripped, {
    180177      filename: filename,
     178      sourceMap: true,
    181179      literate: helpers.isLiterate(filename)
    182     }), filename);
     180    });
     181    sourceMaps[filename] = answer.sourceMap;
     182    return module._compile(answer.js, filename);
    183183  };
    184184
     
    189189      require.extensions[ext] = loadFile;
    190190    }
     191    Module = require('module');
     192    findExtension = function(filename) {
     193      var curExtension, extensions;
     194      extensions = path.basename(filename).split('.');
     195      if (extensions[0] === '') {
     196        extensions.shift();
     197      }
     198      while (extensions.shift()) {
     199        curExtension = '.' + extensions.join('.');
     200        if (Module._extensions[curExtension]) {
     201          return curExtension;
     202        }
     203      }
     204      return '.js';
     205    };
     206    Module.prototype.load = function(filename) {
     207      var extension;
     208      this.filename = filename;
     209      this.paths = Module._nodeModulePaths(path.dirname(filename));
     210      extension = findExtension(filename);
     211      Module._extensions[extension](this, filename);
     212      return this.loaded = true;
     213    };
    191214  }
    192215
     
    195218    child_process.fork = function(path, args, options) {
    196219      var execPath;
    197 
    198220      if (args == null) {
    199221        args = [];
     
    217239    lex: function() {
    218240      var tag, token;
    219 
    220241      token = this.tokens[this.pos++];
    221242      if (token) {
     
    240261  parser.yy.parseError = function(message, _arg) {
    241262    var token;
    242 
    243263    token = _arg.token;
    244264    message = "unexpected " + (token === 1 ? 'end of input' : token);
     
    248268  patched = false;
    249269
     270  sourceMaps = {};
     271
    250272  patchStackTrace = function() {
    251273    var mainModule;
    252 
    253274    if (patched) {
    254275      return;
     
    256277    patched = true;
    257278    mainModule = require.main;
    258     mainModule._sourceMaps = {};
    259279    return Error.prepareStackTrace = function(err, stack) {
    260280      var frame, frames, getSourceMapping, sourceFiles, _ref1;
    261 
    262281      sourceFiles = {};
    263282      getSourceMapping = function(filename, line, column) {
    264283        var answer, sourceMap;
    265 
    266         sourceMap = mainModule._sourceMaps[filename];
     284        sourceMap = sourceMaps[filename];
    267285        if (sourceMap) {
    268           answer = sourceMap.getSourcePosition([line - 1, column - 1]);
     286          answer = sourceMap.sourceLocation([line - 1, column - 1]);
    269287        }
    270288        if (answer) {
     
    276294      frames = (function() {
    277295        var _j, _len1, _results;
    278 
    279296        _results = [];
    280297        for (_j = 0, _len1 = stack.length; _j < _len1; _j++) {
     
    293310  formatSourcePosition = function(frame, getSourceMapping) {
    294311    var as, column, fileLocation, fileName, functionName, isConstructor, isMethodCall, line, methodName, source, tp, typeName;
    295 
    296312    fileName = void 0;
    297313    fileLocation = '';
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/command.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    3   var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, exists, forkNode, fs, helpers, hidden, joinTimeout, lint, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, version, wait, watch, watchDir, watchers, writeJs, _ref;
     3  var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, exists, forkNode, fs, helpers, hidden, joinTimeout, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, useWinPathSep, version, wait, watch, watchDir, watchers, writeJs, _ref;
    44
    55  fs = require('fs');
     
    1818
    1919  exists = fs.exists || path.exists;
     20
     21  useWinPathSep = path.sep === '\\';
    2022
    2123  helpers.extend(CoffeeScript, new EventEmitter);
     
    3537  BANNER = 'Usage: coffee [options] path/to/script.coffee -- [args]\n\nIf called without options, `coffee` will run your script.';
    3638
    37   SWITCHES = [['-b', '--bare', 'compile without a top-level function wrapper'], ['-c', '--compile', 'compile to JavaScript and save as .js files'], ['-e', '--eval', 'pass a string from the command line as input'], ['-h', '--help', 'display this help message'], ['-i', '--interactive', 'run an interactive CoffeeScript REPL'], ['-j', '--join [FILE]', 'concatenate the source CoffeeScript before compiling'], ['-l', '--lint', 'pipe the compiled JavaScript through JavaScript Lint'], ['-m', '--map', 'generate source map and save as .map files'], ['-n', '--nodes', 'print out the parse tree that the parser produces'], ['--nodejs [ARGS]', 'pass options directly to the "node" binary'], ['-o', '--output [DIR]', 'set the output directory for compiled JavaScript'], ['-p', '--print', 'print out the compiled JavaScript'], ['-s', '--stdio', 'listen for and compile scripts over stdio'], ['-t', '--tokens', 'print out the tokens that the lexer/rewriter produce'], ['-v', '--version', 'display the version number'], ['-w', '--watch', 'watch scripts for changes and rerun commands']];
     39  SWITCHES = [['-b', '--bare', 'compile without a top-level function wrapper'], ['-c', '--compile', 'compile to JavaScript and save as .js files'], ['-e', '--eval', 'pass a string from the command line as input'], ['-h', '--help', 'display this help message'], ['-i', '--interactive', 'run an interactive CoffeeScript REPL'], ['-j', '--join [FILE]', 'concatenate the source CoffeeScript before compiling'], ['-m', '--map', 'generate source map and save as .map files'], ['-n', '--nodes', 'print out the parse tree that the parser produces'], ['--nodejs [ARGS]', 'pass options directly to the "node" binary'], ['-o', '--output [DIR]', 'set the output directory for compiled JavaScript'], ['-p', '--print', 'print out the compiled JavaScript'], ['-s', '--stdio', 'listen for and compile scripts over stdio'], ['-l', '--literate', 'treat stdio as literate style coffee-script'], ['-t', '--tokens', 'print out the tokens that the lexer/rewriter produce'], ['-v', '--version', 'display the version number'], ['-w', '--watch', 'watch scripts for changes and rerun commands']];
    3840
    3941  opts = {};
     
    5153  exports.run = function() {
    5254    var literals, source, _i, _len, _results;
    53 
    5455    parseOptions();
    5556    if (opts.nodejs) {
     
    103104        return fs.readdir(source, function(err, files) {
    104105          var file, index, _ref1, _ref2;
    105 
    106106          if (err && err.code !== 'ENOENT') {
    107107            throw err;
     
    116116          [].splice.apply(sources, [index, index - index + 1].concat(_ref1 = (function() {
    117117            var _i, _len, _results;
    118 
    119118            _results = [];
    120119            for (_i = 0, _len = files.length; _i < _len; _i++) {
     
    153152  compileScript = function(file, input, base) {
    154153    var compiled, err, message, o, options, t, task, useColors;
    155 
    156154    if (base == null) {
    157155      base = null;
     
    190188        } else if (o.compile || o.map) {
    191189          return writeJs(base, t.file, t.output, options.jsPath, t.sourceMap);
    192         } else if (o.lint) {
    193           return lint(t.file, t.output);
    194190        }
    195191      }
     
    213209  compileStdio = function() {
    214210    var code, stdin;
    215 
    216211    code = '';
    217212    stdin = process.openStdin();
     
    244239  watch = function(source, base) {
    245240    var compile, compileTimeout, e, prevStats, rewatch, watchErr, watcher;
    246 
    247241    prevStats = null;
    248242    compileTimeout = null;
     
    301295  watchDir = function(source, base) {
    302296    var e, readdirTimeout, watcher;
    303 
    304297    readdirTimeout = null;
    305298    try {
     
    309302          return fs.readdir(source, function(err, files) {
    310303            var file, _i, _len, _results;
    311 
    312304            if (err) {
    313305              if (err.code !== 'ENOENT') {
     
    347339  unwatchDir = function(source, base) {
    348340    var file, prevSources, toRemove, _i, _len;
    349 
    350341    prevSources = sources.slice(0);
    351342    toRemove = (function() {
    352343      var _i, _len, _results;
    353 
    354344      _results = [];
    355345      for (_i = 0, _len = sources.length; _i < _len; _i++) {
     
    375365  removeSource = function(source, base, removeJs) {
    376366    var index, jsPath;
    377 
    378367    index = sources.indexOf(source);
    379368    sources.splice(index, 1);
     
    396385  outputPath = function(source, base, extension) {
    397386    var baseDir, basename, dir, srcDir;
    398 
    399387    if (extension == null) {
    400388      extension = ".js";
    401389    }
    402     basename = helpers.baseFileName(source, true, path.sep);
     390    basename = helpers.baseFileName(source, true, useWinPathSep);
    403391    srcDir = path.dirname(source);
    404392    baseDir = base === '.' ? srcDir : srcDir.substring(base.length);
     
    409397  writeJs = function(base, sourcePath, js, jsPath, generatedSourceMap) {
    410398    var compile, jsDir, sourceMapPath;
    411 
    412399    if (generatedSourceMap == null) {
    413400      generatedSourceMap = null;
     
    421408        }
    422409        if (generatedSourceMap) {
    423           js = "" + js + "\n/*\n//@ sourceMappingURL=" + (helpers.baseFileName(sourceMapPath, false, path.sep)) + "\n*/\n";
     410          js = "" + js + "\n/*\n//@ sourceMappingURL=" + (helpers.baseFileName(sourceMapPath, false, useWinPathSep)) + "\n*/\n";
    424411        }
    425412        fs.writeFile(jsPath, js, function(err) {
     
    456443  };
    457444
    458   lint = function(file, js) {
    459     var conf, jsl, printIt;
    460 
    461     printIt = function(buffer) {
    462       return printLine(file + ':\t' + buffer.toString().trim());
    463     };
    464     conf = __dirname + '/../../extras/jsl.conf';
    465     jsl = spawn('jsl', ['-nologo', '-stdin', '-conf', conf]);
    466     jsl.stdout.on('data', printIt);
    467     jsl.stderr.on('data', printIt);
    468     jsl.stdin.write(js);
    469     return jsl.stdin.end();
    470   };
    471 
    472445  printTokens = function(tokens) {
    473446    var strings, tag, token, value;
    474 
    475447    strings = (function() {
    476448      var _i, _len, _results;
    477 
    478449      _results = [];
    479450      for (_i = 0, _len = tokens.length; _i < _len; _i++) {
     
    490461  parseOptions = function() {
    491462    var i, o, source, _i, _len;
    492 
    493463    optionParser = new optparse.OptionParser(SWITCHES, BANNER);
    494464    o = opts = optionParser.parse(process.argv.slice(2));
    495465    o.compile || (o.compile = !!o.output);
    496     o.run = !(o.compile || o.print || o.lint || o.map);
     466    o.run = !(o.compile || o.print || o.map);
    497467    o.print = !!(o.print || (o["eval"] || o.stdio && o.compile));
    498468    sources = o["arguments"];
     
    505475  compileOptions = function(filename, base) {
    506476    var answer, cwd, jsDir, jsPath;
    507 
    508477    answer = {
    509478      filename: filename,
    510       literate: helpers.isLiterate(filename),
     479      literate: opts.literate || helpers.isLiterate(filename),
    511480      bare: opts.bare,
    512481      header: opts.compile,
     
    522491          sourceRoot: path.relative(jsDir, cwd),
    523492          sourceFiles: [path.relative(cwd, filename)],
    524           generatedFile: helpers.baseFileName(jsPath, false, path.sep)
     493          generatedFile: helpers.baseFileName(jsPath, false, useWinPathSep)
    525494        });
    526495      } else {
    527496        answer = helpers.merge(answer, {
    528497          sourceRoot: "",
    529           sourceFiles: [helpers.baseFileName(filename, false, path.sep)],
    530           generatedFile: helpers.baseFileName(filename, true, path.sep) + ".js"
     498          sourceFiles: [helpers.baseFileName(filename, false, useWinPathSep)],
     499          generatedFile: helpers.baseFileName(filename, true, useWinPathSep) + ".js"
    531500        });
    532501      }
     
    537506  forkNode = function() {
    538507    var args, nodeArgs;
    539 
    540508    nodeArgs = opts.nodejs.split(/\s+/);
    541509    args = process.argv.slice(1);
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/grammar.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    33  var Parser, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap;
     
    99  o = function(patternString, action, options) {
    1010    var addLocationDataFn, match, patternCount;
    11 
    1211    patternString = patternString.replace(/\s{2,}/g, ' ');
    1312    patternCount = patternString.split(' ').length;
     
    352351      }), o('CATCH Object Block', function() {
    353352        return [LOC(2)(new Value($2)), $3];
     353      }), o('CATCH Block', function() {
     354        return [null, $2];
    354355      })
    355356    ],
     
    596597    grammar[name] = (function() {
    597598      var _i, _j, _len, _len1, _ref, _results;
    598 
    599599      _results = [];
    600600      for (_i = 0, _len = alternatives.length; _i < _len; _i++) {
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/helpers.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    33  var buildLocationData, extend, flatten, last, repeat, _ref;
     
    99  exports.ends = function(string, literal, back) {
    1010    var len;
    11 
    1211    len = literal.length;
    1312    return literal === string.substr(string.length - len - (back || 0), len);
     
    1615  exports.repeat = repeat = function(str, n) {
    1716    var res;
    18 
    1917    res = '';
    2018    while (n > 0) {
     
    3028  exports.compact = function(array) {
    3129    var item, _i, _len, _results;
    32 
    3330    _results = [];
    3431    for (_i = 0, _len = array.length; _i < _len; _i++) {
     
    4340  exports.count = function(string, substr) {
    4441    var num, pos;
    45 
    4642    num = pos = 0;
    4743    if (!substr.length) {
     
    6056  extend = exports.extend = function(object, properties) {
    6157    var key, val;
    62 
    6358    for (key in properties) {
    6459      val = properties[key];
     
    7065  exports.flatten = flatten = function(array) {
    7166    var element, flattened, _i, _len;
    72 
    7367    flattened = [];
    7468    for (_i = 0, _len = array.length; _i < _len; _i++) {
     
    8579  exports.del = function(obj, key) {
    8680    var val;
    87 
    8881    val = obj[key];
    8982    delete obj[key];
     
    9790  exports.some = (_ref = Array.prototype.some) != null ? _ref : function(fn) {
    9891    var e, _i, _len;
    99 
    10092    for (_i = 0, _len = this.length; _i < _len; _i++) {
    10193      e = this[_i];
     
    109101  exports.invertLiterate = function(code) {
    110102    var line, lines, maybe_code;
    111 
    112103    maybe_code = true;
    113104    lines = (function() {
    114105      var _i, _len, _ref1, _results;
    115 
    116106      _ref1 = code.split('\n');
    117107      _results = [];
     
    155145  exports.locationDataToString = function(obj) {
    156146    var locationData;
    157 
    158147    if (("2" in obj) && ("first_line" in obj[2])) {
    159148      locationData = obj[2];
     
    168157  };
    169158
    170   exports.baseFileName = function(file, stripExt, pathSep) {
    171     var parts;
    172 
     159  exports.baseFileName = function(file, stripExt, useWinPathSep) {
     160    var parts, pathSep;
    173161    if (stripExt == null) {
    174162      stripExt = false;
    175163    }
    176     if (pathSep == null) {
    177       pathSep = '/';
    178     }
     164    if (useWinPathSep == null) {
     165      useWinPathSep = false;
     166    }
     167    pathSep = useWinPathSep ? /\\|\// : /\//;
    179168    parts = file.split(pathSep);
    180169    file = parts[parts.length - 1];
     
    199188
    200189  exports.throwSyntaxError = function(message, location) {
    201     var error, _ref1, _ref2;
    202 
    203     if ((_ref1 = location.last_line) == null) {
     190    var error;
     191    if (location.last_line == null) {
    204192      location.last_line = location.first_line;
    205193    }
    206     if ((_ref2 = location.last_column) == null) {
     194    if (location.last_column == null) {
    207195      location.last_column = location.first_column;
    208196    }
     
    214202  exports.prettyErrorMessage = function(error, fileName, code, useColors) {
    215203    var codeLine, colorize, end, first_column, first_line, last_column, last_line, marker, message, start, _ref1;
    216 
    217204    if (!error.location) {
    218205      return error.stack || ("" + error);
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/index.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    33  var key, val, _ref;
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/lexer.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    3   var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, invertLiterate, key, last, locationDataToString, starts, throwSyntaxError, _ref, _ref1,
     3  var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, invertLiterate, key, last, locationDataToString, repeat, starts, throwSyntaxError, _ref, _ref1,
    44    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
    55
    66  _ref = require('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES;
    77
    8   _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, invertLiterate = _ref1.invertLiterate, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;
     8  _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, repeat = _ref1.repeat, invertLiterate = _ref1.invertLiterate, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;
    99
    1010  exports.Lexer = Lexer = (function() {
     
    1313    Lexer.prototype.tokenize = function(code, opts) {
    1414      var consumed, i, tag, _ref2;
    15 
    1615      if (opts == null) {
    1716        opts = {};
     
    6059    Lexer.prototype.identifierToken = function() {
    6160      var colon, colonOffset, forcedIdentifier, id, idLength, input, match, poppedToken, prev, tag, tagToken, _ref2, _ref3, _ref4;
    62 
    6361      if (!(match = IDENTIFIER.exec(this.chunk))) {
    6462        return 0;
     
    143141    Lexer.prototype.numberToken = function() {
    144142      var binaryLiteral, lexedLength, match, number, octalLiteral;
    145 
    146143      if (!(match = NUMBER.exec(this.chunk))) {
    147144        return 0;
     
    159156      lexedLength = number.length;
    160157      if (octalLiteral = /^0o([0-7]+)/.exec(number)) {
    161         number = '0x' + (parseInt(octalLiteral[1], 8)).toString(16);
     158        number = '0x' + parseInt(octalLiteral[1], 8).toString(16);
    162159      }
    163160      if (binaryLiteral = /^0b([01]+)/.exec(number)) {
    164         number = '0x' + (parseInt(binaryLiteral[1], 2)).toString(16);
     161        number = '0x' + parseInt(binaryLiteral[1], 2).toString(16);
    165162      }
    166163      this.token('NUMBER', number, 0, lexedLength);
     
    170167    Lexer.prototype.stringToken = function() {
    171168      var match, octalEsc, string;
    172 
    173169      switch (this.chunk.charAt(0)) {
    174170        case "'":
     
    203199    Lexer.prototype.heredocToken = function() {
    204200      var doc, heredoc, match, quote;
    205 
    206201      if (!(match = HEREDOC.exec(this.chunk))) {
    207202        return 0;
     
    227222    Lexer.prototype.commentToken = function() {
    228223      var comment, here, match;
    229 
    230224      if (!(match = this.chunk.match(COMMENT))) {
    231225        return 0;
     
    235229        this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
    236230          herecomment: true,
    237           indent: Array(this.indent + 1).join(' ')
     231          indent: repeat(' ', this.indent)
    238232        }), 0, comment.length);
    239233      }
     
    243237    Lexer.prototype.jsToken = function() {
    244238      var match, script;
    245 
    246239      if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
    247240        return 0;
     
    253246    Lexer.prototype.regexToken = function() {
    254247      var flags, length, match, prev, regex, _ref2, _ref3;
    255 
    256248      if (this.chunk.charAt(0) !== '/') {
    257249        return 0;
     
    281273    Lexer.prototype.heregexToken = function(match) {
    282274      var body, flags, flagsOffset, heregex, plusToken, prev, re, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
    283 
    284275      heregex = match[0], body = match[1], flags = match[2];
    285276      if (0 > body.indexOf('#{')) {
     
    335326    Lexer.prototype.lineToken = function() {
    336327      var diff, indent, match, noNewlines, size;
    337 
    338328      if (!(match = MULTI_DENT.exec(this.chunk))) {
    339329        return 0;
     
    372362    Lexer.prototype.outdentToken = function(moveOut, noNewlines, outdentLength) {
    373363      var dent, len;
    374 
    375364      while (moveOut > 0) {
    376365        len = this.indents.length - 1;
     
    405394    Lexer.prototype.whitespaceToken = function() {
    406395      var match, nline, prev;
    407 
    408396      if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) {
    409397        return 0;
     
    439427    Lexer.prototype.literalToken = function() {
    440428      var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
    441 
    442429      if (match = OPERATOR.exec(this.chunk)) {
    443430        value = match[0];
     
    506493    Lexer.prototype.sanitizeHeredoc = function(doc, options) {
    507494      var attempt, herecomment, indent, match, _ref2;
    508 
    509495      indent = options.indent, herecomment = options.herecomment;
    510496      if (herecomment) {
     
    534520    Lexer.prototype.tagParameters = function() {
    535521      var i, stack, tok, tokens;
    536 
    537522      if (this.tag() !== ')') {
    538523        return this;
     
    568553    Lexer.prototype.balancedString = function(str, end) {
    569554      var continueCount, i, letter, match, prev, stack, _i, _ref2;
    570 
    571555      continueCount = 0;
    572556      stack = [end];
     
    604588    Lexer.prototype.interpolateString = function(str, options) {
    605589      var column, expr, heredoc, i, inner, interpolated, len, letter, lexedLength, line, locationToken, nested, offsetInChunk, pi, plusToken, popped, regex, rparen, strOffset, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
    606 
    607590      if (options == null) {
    608591        options = {};
     
    703686    Lexer.prototype.pair = function(tag) {
    704687      var size, wanted;
    705 
    706688      if (tag !== (wanted = last(this.ends))) {
    707689        if ('OUTDENT' !== wanted) {
     
    717699    Lexer.prototype.getLineAndColumnFromChunk = function(offset) {
    718700      var column, lineCount, lines, string;
    719 
    720701      if (offset === 0) {
    721702        return [this.chunkLine, this.chunkColumn];
     
    730711      if (lineCount > 0) {
    731712        lines = string.split('\n');
    732         column = (last(lines)).length;
     713        column = last(lines).length;
    733714      } else {
    734715        column += string.length;
     
    739720    Lexer.prototype.makeToken = function(tag, value, offsetInChunk, length) {
    740721      var lastCharacter, locationData, token, _ref2, _ref3;
    741 
    742722      if (offsetInChunk == null) {
    743723        offsetInChunk = 0;
     
    756736    Lexer.prototype.token = function(tag, value, offsetInChunk, length) {
    757737      var token;
    758 
    759738      token = this.makeToken(tag, value, offsetInChunk, length);
    760739      this.tokens.push(token);
     
    764743    Lexer.prototype.tag = function(index, tag) {
    765744      var tok;
    766 
    767745      return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]);
    768746    };
     
    770748    Lexer.prototype.value = function(index, val) {
    771749      var tok;
    772 
    773750      return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]);
    774751    };
     
    776753    Lexer.prototype.unfinished = function() {
    777754      var _ref2;
    778 
    779755      return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === '?::' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS');
    780756    };
     
    828804  COFFEE_ALIASES = (function() {
    829805    var _results;
    830 
    831806    _results = [];
    832807    for (key in COFFEE_ALIAS_MAP) {
     
    902877  BOOL = ['TRUE', 'FALSE'];
    903878
    904   NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--', ']'];
    905 
    906   NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING');
     879  NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--'];
     880
     881  NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING', ']');
    907882
    908883  CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/nodes.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    33  var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, CodeFragment, Comment, Existence, Extends, For, IDENTIFIER, IDENTIFIER_STR, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, addLocationDataFn, compact, del, ends, extend, flatten, fragmentsToText, last, locationDataToString, merge, multident, some, starts, throwSyntaxError, unfoldSoak, utility, _ref, _ref1, _ref2, _ref3,
     
    3939    function CodeFragment(parent, code) {
    4040      var _ref2;
    41 
    4241      this.code = "" + code;
    4342      this.locationData = parent != null ? parent.locationData : void 0;
     
    4645
    4746    CodeFragment.prototype.toString = function() {
    48       return "" + this.code + [this.locationData ? ": " + locationDataToString(this.locationData) : void 0];
     47      return "" + this.code + (this.locationData ? ": " + locationDataToString(this.locationData) : '');
    4948    };
    5049
     
    5554  fragmentsToText = function(fragments) {
    5655    var fragment;
    57 
    5856    return ((function() {
    5957      var _i, _len, _results;
    60 
    6158      _results = [];
    6259      for (_i = 0, _len = fragments.length; _i < _len; _i++) {
     
    7774    Base.prototype.compileToFragments = function(o, lvl) {
    7875      var node;
    79 
    8076      o = extend({}, o);
    8177      if (lvl) {
     
    9389    Base.prototype.compileClosure = function(o) {
    9490      var jumpNode;
    95 
    9691      if (jumpNode = this.jumps()) {
    9792        jumpNode.error('cannot use a pure statement in an expression');
     
    10398    Base.prototype.cache = function(o, level, reused) {
    10499      var ref, sub;
    105 
    106100      if (!this.isComplex()) {
    107101        ref = level ? this.compileToFragments(o, level) : this;
     
    124118    Base.prototype.makeReturn = function(res) {
    125119      var me;
    126 
    127120      me = this.unwrapAll();
    128121      if (res) {
     
    135128    Base.prototype.contains = function(pred) {
    136129      var node;
    137 
    138130      node = void 0;
    139131      this.traverseChildren(false, function(n) {
     
    148140    Base.prototype.lastNonComment = function(list) {
    149141      var i;
    150 
    151142      i = list.length;
    152143      while (i--) {
     
    160151    Base.prototype.toString = function(idt, name) {
    161152      var tree;
    162 
    163153      if (idt == null) {
    164154        idt = '';
     
    179169    Base.prototype.eachChild = function(func) {
    180170      var attr, child, _i, _j, _len, _len1, _ref2, _ref3;
    181 
    182171      if (!this.children) {
    183172        return this;
     
    201190    Base.prototype.traverseChildren = function(crossScope, func) {
    202191      return this.eachChild(function(child) {
    203         if (func(child) === false) {
    204           return false;
    205         }
    206         return child.traverseChildren(crossScope, func);
     192        var recur;
     193        recur = func(child);
     194        if (recur !== false) {
     195          return child.traverseChildren(crossScope, func);
     196        }
    207197      });
    208198    };
     
    214204    Base.prototype.unwrapAll = function() {
    215205      var node;
    216 
    217206      node = this;
    218207      while (node !== (node = node.unwrap())) {
     
    261250    Base.prototype.joinFragmentArrays = function(fragmentsList, joinStr) {
    262251      var answer, fragments, i, _i, _len;
    263 
    264252      answer = [];
    265253      for (i = _i = 0, _len = fragmentsList.length; _i < _len; i = ++_i) {
     
    314302    Block.prototype.isStatement = function(o) {
    315303      var exp, _i, _len, _ref2;
    316 
    317304      _ref2 = this.expressions;
    318305      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
     
    327314    Block.prototype.jumps = function(o) {
    328315      var exp, _i, _len, _ref2;
    329 
    330316      _ref2 = this.expressions;
    331317      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
     
    339325    Block.prototype.makeReturn = function(res) {
    340326      var expr, len;
    341 
    342327      len = this.expressions.length;
    343328      while (len--) {
     
    367352    Block.prototype.compileNode = function(o) {
    368353      var answer, compiledNodes, fragments, index, node, top, _i, _len, _ref2;
    369 
    370354      this.tab = o.indent;
    371355      top = o.level === LEVEL_TOP;
     
    411395    Block.prototype.compileRoot = function(o) {
    412396      var exp, fragments, i, name, prelude, preludeExps, rest, _i, _len, _ref2;
    413 
    414397      o.indent = o.bare ? '' : TAB;
    415398      o.level = LEVEL_TOP;
     
    425408        preludeExps = (function() {
    426409          var _j, _len1, _ref3, _results;
    427 
    428410          _ref3 = this.expressions;
    429411          _results = [];
     
    456438    Block.prototype.compileWithDeclarations = function(o) {
    457439      var assigns, declars, exp, fragments, i, post, rest, scope, spaced, _i, _len, _ref2, _ref3, _ref4;
    458 
    459440      fragments = [];
    460441      post = [];
     
    495476            fragments.push(this.makeCode(scope.assignedVariables().join(",\n" + (this.tab + TAB))));
    496477          }
    497           fragments.push(this.makeCode(';\n\n'));
     478          fragments.push(this.makeCode(";\n" + (this.spaced ? '\n' : '')));
     479        } else if (fragments.length && post.length) {
     480          fragments.push(this.makeCode("\n"));
    498481        }
    499482      }
     
    533516    Literal.prototype.isStatement = function() {
    534517      var _ref2;
    535 
    536518      return (_ref2 = this.value) === 'break' || _ref2 === 'continue' || _ref2 === 'debugger';
    537519    };
     
    554536    Literal.prototype.compileNode = function(o) {
    555537      var answer, code, _ref2;
    556 
    557538      code = this.value === 'this' ? ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0) ? o.scope.method.context : this.value : this.value.reserved ? "\"" + this.value + "\"" : this.value;
    558539      answer = this.isStatement() ? "" + this.tab + code + ";" : code;
     
    646627    Return.prototype.compileToFragments = function(o, level) {
    647628      var expr, _ref4;
    648 
    649629      expr = (_ref4 = this.expression) != null ? _ref4.makeReturn() : void 0;
    650630      if (expr && !(expr instanceof Return)) {
     
    657637    Return.prototype.compileNode = function(o) {
    658638      var answer;
    659 
    660639      answer = [];
    661       answer.push(this.makeCode(this.tab + ("return" + [this.expression ? " " : void 0])));
     640      answer.push(this.makeCode(this.tab + ("return" + (this.expression ? " " : ""))));
    662641      if (this.expression) {
    663642        answer = answer.concat(this.expression.compileToFragments(o, LEVEL_PAREN));
     
    719698    Value.prototype.isAtomic = function() {
    720699      var node, _i, _len, _ref4;
    721 
    722700      _ref4 = this.properties.concat(this.base);
    723701      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
     
    763741    Value.prototype.cacheReference = function(o) {
    764742      var base, bref, name, nref;
    765 
    766743      name = last(this.properties);
    767744      if (this.properties.length < 2 && !this.base.isComplex() && !(name != null ? name.isComplex() : void 0)) {
     
    786763    Value.prototype.compileNode = function(o) {
    787764      var fragments, prop, props, _i, _len;
    788 
    789765      this.base.front = this.front;
    790766      props = this.properties;
     
    801777
    802778    Value.prototype.unfoldSoak = function(o) {
    803       var _ref4,
    804         _this = this;
    805 
    806       return (_ref4 = this.unfoldedSoak) != null ? _ref4 : this.unfoldedSoak = (function() {
    807         var fst, i, ifn, prop, ref, snd, _i, _len, _ref5, _ref6;
    808 
     779      var _this = this;
     780      return this.unfoldedSoak != null ? this.unfoldedSoak : this.unfoldedSoak = (function() {
     781        var fst, i, ifn, prop, ref, snd, _i, _len, _ref4, _ref5;
    809782        if (ifn = _this.base.unfoldSoak(o)) {
    810           (_ref5 = ifn.body.properties).push.apply(_ref5, _this.properties);
     783          (_ref4 = ifn.body.properties).push.apply(_ref4, _this.properties);
    811784          return ifn;
    812785        }
    813         _ref6 = _this.properties;
    814         for (i = _i = 0, _len = _ref6.length; _i < _len; i = ++_i) {
    815           prop = _ref6[i];
     786        _ref5 = _this.properties;
     787        for (i = _i = 0, _len = _ref5.length; _i < _len; i = ++_i) {
     788          prop = _ref5[i];
    816789          if (!prop.soak) {
    817790            continue;
     
    850823    Comment.prototype.compileNode = function(o, level) {
    851824      var code;
    852 
    853       code = '/*' + multident(this.comment, this.tab) + ("\n" + this.tab + "*/\n");
     825      code = "/*" + (multident(this.comment, this.tab)) + (__indexOf.call(this.comment, '\n') >= 0 ? "\n" + this.tab : '') + "*/\n";
    854826      if ((level || o.level) === LEVEL_TOP) {
    855827        code = o.indent + code;
     
    877849    Call.prototype.newInstance = function() {
    878850      var base, _ref4;
    879 
    880851      base = ((_ref4 = this.variable) != null ? _ref4.base : void 0) || this.variable;
    881852      if (base instanceof Call && !base.isNew) {
     
    889860    Call.prototype.superReference = function(o) {
    890861      var accesses, method;
    891 
    892862      method = o.scope.namedMethod();
    893863      if (method != null ? method.klass : void 0) {
     
    907877    Call.prototype.superThis = function(o) {
    908878      var method;
    909 
    910879      method = o.scope.method;
    911880      return (method && !method.klass && method.context) || "this";
     
    914883    Call.prototype.unfoldSoak = function(o) {
    915884      var call, ifn, left, list, rite, _i, _len, _ref4, _ref5;
    916 
    917885      if (this.soak) {
    918886        if (this.variable) {
     
    965933    Call.prototype.compileNode = function(o) {
    966934      var arg, argIndex, compiledArgs, compiledArray, fragments, preface, _i, _len, _ref4, _ref5;
    967 
    968935      if ((_ref4 = this.variable) != null) {
    969936        _ref4.front = this.front;
     
    1003970    Call.prototype.compileSplat = function(o, splatArgs) {
    1004971      var answer, base, fun, idt, name, ref;
    1005 
    1006972      if (this.isSuper) {
    1007973        return [].concat(this.makeCode("" + (this.superReference(o)) + ".apply(" + (this.superThis(o)) + ", "), splatArgs, this.makeCode(")"));
     
    10671033    Access.prototype.compileToFragments = function(o) {
    10681034      var name;
    1069 
    10701035      name = this.name.compileToFragments(o);
    10711036      if (IDENTIFIER.test(fragmentsToText(name))) {
     
    11191084    Range.prototype.compileVariables = function(o) {
    11201085      var step, _ref4, _ref5, _ref6, _ref7;
    1121 
    11221086      o = merge(o, {
    11231087        top: true
     
    11361100    Range.prototype.compileNode = function(o) {
    11371101      var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, stepPart, to, varPart, _ref4, _ref5;
    1138 
    11391102      if (!this.fromVar) {
    11401103        this.compileVariables(o);
     
    11681131    Range.prototype.compileArray = function(o) {
    11691132      var args, body, cond, hasArgs, i, idt, post, pre, range, result, vars, _i, _ref4, _ref5, _results;
    1170 
    11711133      if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) {
    11721134        range = (function() {
     
    12201182    Slice.prototype.compileNode = function(o) {
    12211183      var compiled, compiledText, from, fromCompiled, to, toStr, _ref4;
    1222 
    12231184      _ref4 = this.range, to = _ref4.to, from = _ref4.from;
    12241185      fromCompiled = from && from.compileToFragments(o, LEVEL_PAREN) || [this.makeCode('0')];
     
    12491210    Obj.prototype.compileNode = function(o) {
    12501211      var answer, i, idt, indent, join, lastNoncom, node, prop, props, _i, _j, _len, _len1;
    1251 
    12521212      props = this.properties;
    12531213      if (!props.length) {
     
    12701230        indent = prop instanceof Comment ? '' : idt;
    12711231        if (prop instanceof Assign && prop.variable instanceof Value && prop.variable.hasProperties()) {
    1272           throw new SyntaxError('Invalid object key');
     1232          prop.variable.error('Invalid object key');
    12731233        }
    12741234        if (prop instanceof Value && prop["this"]) {
     
    13001260    Obj.prototype.assigns = function(name) {
    13011261      var prop, _i, _len, _ref4;
    1302 
    13031262      _ref4 = this.properties;
    13041263      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
     
    13261285    Arr.prototype.compileNode = function(o) {
    13271286      var answer, compiledObjs, fragments, index, obj, _i, _len;
    1328 
    13291287      if (!this.objects.length) {
    13301288        return [this.makeCode('[]')];
     
    13381296      compiledObjs = (function() {
    13391297        var _i, _len, _ref4, _results;
    1340 
    13411298        _ref4 = this.objects;
    13421299        _results = [];
     
    13541311        answer.push.apply(answer, fragments);
    13551312      }
    1356       if ((fragmentsToText(answer)).indexOf('\n') >= 0) {
     1313      if (fragmentsToText(answer).indexOf('\n') >= 0) {
    13571314        answer.unshift(this.makeCode("[\n" + o.indent));
    13581315        answer.push(this.makeCode("\n" + this.tab + "]"));
     
    13661323    Arr.prototype.assigns = function(name) {
    13671324      var obj, _i, _len, _ref4;
    1368 
    13691325      _ref4 = this.objects;
    13701326      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
     
    13961352    Class.prototype.determineName = function() {
    13971353      var decl, tail;
    1398 
    13991354      if (!this.variable) {
    14001355        return null;
     
    14251380    Class.prototype.addBoundFunctions = function(o) {
    14261381      var bvar, lhs, _i, _len, _ref4;
    1427 
    14281382      _ref4 = this.boundFuncs;
    14291383      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
     
    14361390    Class.prototype.addProperties = function(node, name, o) {
    14371391      var assign, base, exprs, func, props;
    1438 
    14391392      props = node.base.properties.slice(0);
    14401393      exprs = (function() {
    14411394        var _results;
    1442 
    14431395        _results = [];
    14441396        while (assign = props.shift()) {
     
    14841436    Class.prototype.walkBody = function(name, o) {
    14851437      var _this = this;
    1486 
    14871438      return this.traverseChildren(false, function(child) {
    14881439        var cont, exps, i, node, _i, _len, _ref4;
    1489 
    14901440        cont = true;
    14911441        if (child instanceof Class) {
     
    15091459    Class.prototype.hoistDirectivePrologue = function() {
    15101460      var expressions, index, node;
    1511 
    15121461      index = 0;
    15131462      expressions = this.body.expressions;
     
    15201469    Class.prototype.ensureConstructor = function(name, o) {
    15211470      var missing, ref, superCall;
    1522 
    15231471      missing = !this.ctor;
    15241472      this.ctor || (this.ctor = new Code);
     
    15501498    Class.prototype.compileNode = function(o) {
    15511499      var call, decl, klass, lname, name, params, _ref4;
    1552 
    15531500      decl = this.determineName();
    15541501      name = decl || '_Class';
     
    15911538    function Assign(variable, value, context, options) {
    15921539      var forbidden, name, _ref4;
    1593 
    15941540      this.variable = variable;
    15951541      this.value = value;
     
    16191565    Assign.prototype.compileNode = function(o) {
    16201566      var answer, compiledName, isValue, match, name, val, varBase, _ref4, _ref5, _ref6, _ref7;
    1621 
    16221567      if (isValue = this.variable instanceof Value) {
    16231568        if (this.variable.isArray() || this.variable.isObject()) {
     
    16661611    Assign.prototype.compilePatternMatch = function(o) {
    16671612      var acc, assigns, code, fragments, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, vvarText, _i, _len, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
    1668 
    16691613      top = o.level === LEVEL_TOP;
    16701614      value = this.value;
     
    17641708    Assign.prototype.compileConditional = function(o) {
    17651709      var left, right, _ref4;
    1766 
    17671710      _ref4 = this.variable.cacheReference(o), left = _ref4[0], right = _ref4[1];
    17681711      if (!left.properties.length && left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) {
     
    17771720    Assign.prototype.compileSplice = function(o) {
    17781721      var answer, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref4, _ref5, _ref6;
    1779 
    17801722      _ref4 = this.variable.properties.pop().range, from = _ref4.from, to = _ref4.to, exclusive = _ref4.exclusive;
    17811723      name = this.variable.compile(o);
     
    18351777    Code.prototype.compileNode = function(o) {
    18361778      var answer, code, exprs, i, idt, lit, p, param, params, ref, splats, uniqs, val, wasEmpty, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref4, _ref5, _ref6, _ref7, _ref8;
    1837 
    18381779      o.scope = new Scope(o.scope, this.body, this);
    18391780      o.scope.shared = del(o, 'sharedScope');
     
    18661807        splats = new Assign(new Value(new Arr((function() {
    18671808          var _k, _len2, _ref6, _results;
    1868 
    18691809          _ref6 = this.params;
    18701810          _results = [];
     
    19601900    Code.prototype.eachParamName = function(iterator) {
    19611901      var param, _i, _len, _ref4, _results;
    1962 
    19631902      _ref4 = this.params;
    19641903      _results = [];
     
    19851924    function Param(name, value, splat) {
    19861925      var _ref4;
    1987 
    19881926      this.name = name;
    19891927      this.value = value;
     
    20021940    Param.prototype.asReference = function(o) {
    20031941      var node;
    2004 
    20051942      if (this.reference) {
    20061943        return this.reference;
     
    20281965    Param.prototype.eachName = function(iterator, name) {
    20291966      var atParam, node, obj, _i, _len, _ref4;
    2030 
    20311967      if (name == null) {
    20321968        name = this.name;
     
    20341970      atParam = function(obj) {
    20351971        var node;
    2036 
    20371972        node = obj.properties[0].name;
    20381973        if (!node.value.reserved) {
     
    20972032    Splat.compileSplattedArray = function(o, list, apply) {
    20982033      var args, base, compiledNode, concatPart, fragments, i, index, node, _i, _len;
    2099 
    21002034      index = -1;
    21012035      while ((node = list[++index]) && !(node instanceof Splat)) {
     
    21262060      base = (function() {
    21272061        var _j, _len1, _ref4, _results;
    2128 
    21292062        _ref4 = list.slice(0, index);
    21302063        _results = [];
     
    21742107    While.prototype.jumps = function() {
    21752108      var expressions, node, _i, _len;
    2176 
    21772109      expressions = this.body.expressions;
    21782110      if (!expressions.length) {
     
    21922124    While.prototype.compileNode = function(o) {
    21932125      var answer, body, rvar, set;
    2194 
    21952126      o.indent += TAB;
    21962127      set = '';
    21972128      body = this.body;
    21982129      if (body.isEmpty()) {
    2199         body = '';
     2130        body = this.makeCode('');
    22002131      } else {
    22012132        if (this.returns) {
     
    22732204    Op.prototype.isComplex = function() {
    22742205      var _ref4;
    2275 
    22762206      return !(this.isUnary() && ((_ref4 = this.operator) === '+' || _ref4 === '-')) || this.first.isComplex();
    22772207    };
     
    22792209    Op.prototype.isChainable = function() {
    22802210      var _ref4;
    2281 
    22822211      return (_ref4 = this.operator) === '<' || _ref4 === '>' || _ref4 === '>=' || _ref4 === '<=' || _ref4 === '===' || _ref4 === '!==';
    22832212    };
     
    22852214    Op.prototype.invert = function() {
    22862215      var allInvertable, curr, fst, op, _ref4;
    2287 
    22882216      if (this.isChainable() && this.first.isChainable()) {
    22892217        allInvertable = true;
     
    23202248    Op.prototype.unfoldSoak = function(o) {
    23212249      var _ref4;
    2322 
    23232250      return ((_ref4 = this.operator) === '++' || _ref4 === '--' || _ref4 === 'delete') && unfoldSoak(o, this, 'first');
    23242251    };
     
    23262253    Op.prototype.generateDo = function(exp) {
    23272254      var call, func, param, passedParams, ref, _i, _len, _ref4;
    2328 
    23292255      passedParams = [];
    23302256      func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp;
     
    23462272    Op.prototype.compileNode = function(o) {
    23472273      var answer, isChain, _ref4, _ref5;
    2348 
    23492274      isChain = this.isChainable() && this.first.isChainable();
    23502275      if (!isChain) {
     
    23762301    Op.prototype.compileChain = function(o) {
    23772302      var fragments, fst, shared, _ref4;
    2378 
    23792303      _ref4 = this.first.second.cache(o), this.first.second = _ref4[0], shared = _ref4[1];
    23802304      fst = this.first.compileToFragments(o, LEVEL_OP);
     
    23852309    Op.prototype.compileExistence = function(o) {
    23862310      var fst, ref;
    2387 
    2388       if (this.first.isComplex()) {
     2311      if (!o.isExistentialEquals && this.first.isComplex()) {
    23892312        ref = new Literal(o.scope.freeVariable('ref'));
    23902313        fst = new Parens(new Assign(ref, this.first));
     
    24002323    Op.prototype.compileUnary = function(o) {
    24012324      var op, parts, plusMinus;
    2402 
    24032325      parts = [];
    24042326      op = this.operator;
     
    24472369    In.prototype.compileNode = function(o) {
    24482370      var hasSplat, obj, _i, _len, _ref4;
    2449 
    24502371      if (this.array instanceof Value && this.array.isArray()) {
    24512372        _ref4 = this.array.base.objects;
     
    24672388    In.prototype.compileOrTest = function(o) {
    24682389      var cmp, cnj, i, item, ref, sub, tests, _i, _len, _ref4, _ref5, _ref6;
    2469 
    24702390      if (this.array.base.objects.length === 0) {
    24712391        return [this.makeCode("" + (!!this.negated))];
     
    24912411    In.prototype.compileLoopTest = function(o) {
    24922412      var fragments, ref, sub, _ref4;
    2493 
    24942413      _ref4 = this.object.cache(o, LEVEL_LIST), sub = _ref4[0], ref = _ref4[1];
    24952414      fragments = [].concat(this.makeCode(utility('indexOf') + ".call("), this.array.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), ref, this.makeCode(") " + (this.negated ? '< 0' : '>= 0')));
    2496       if ((fragmentsToText(sub)) === (fragmentsToText(ref))) {
     2415      if (fragmentsToText(sub) === fragmentsToText(ref)) {
    24972416        return fragments;
    24982417      }
     
    25292448    Try.prototype.jumps = function(o) {
    25302449      var _ref4;
    2531 
    25322450      return this.attempt.jumps(o) || ((_ref4 = this.recovery) != null ? _ref4.jumps(o) : void 0);
    25332451    };
     
    25442462
    25452463    Try.prototype.compileNode = function(o) {
    2546       var catchPart, ensurePart, placeholder, tryPart, _ref4;
    2547 
     2464      var catchPart, ensurePart, placeholder, tryPart;
    25482465      o.indent += TAB;
    25492466      tryPart = this.attempt.compileToFragments(o, LEVEL_TOP);
    2550       catchPart = this.recovery ? (placeholder = new Literal('_error'), this.recovery.unshift(new Assign(this.errorVariable, placeholder)), this.errorVariable = placeholder, (_ref4 = this.errorVariable.value, __indexOf.call(STRICT_PROSCRIBED, _ref4) >= 0) ? this.errorVariable.error("catch variable may not be \"" + this.errorVariable.value + "\"") : void 0, [].concat(this.makeCode(" catch ("), this.errorVariable.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"))) : !(this.ensure || this.recovery) ? [this.makeCode(' catch (_error) {}')] : [];
     2467      catchPart = this.recovery ? (placeholder = new Literal('_error'), this.errorVariable ? this.recovery.unshift(new Assign(this.errorVariable, placeholder)) : void 0, [].concat(this.makeCode(" catch ("), placeholder.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"))) : !(this.ensure || this.recovery) ? [this.makeCode(' catch (_error) {}')] : [];
    25512468      ensurePart = this.ensure ? [].concat(this.makeCode(" finally {\n"), this.ensure.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}")) : [];
    25522469      return [].concat(this.makeCode("" + this.tab + "try {\n"), tryPart, this.makeCode("\n" + this.tab + "}"), catchPart, ensurePart);
     
    25932510    Existence.prototype.compileNode = function(o) {
    25942511      var cmp, cnj, code, _ref4;
    2595 
    25962512      this.expression.front = this.front;
    25972513      code = this.expression.compile(o, LEVEL_OP);
     
    26282544    Parens.prototype.compileNode = function(o) {
    26292545      var bare, expr, fragments;
    2630 
    26312546      expr = this.body.unwrap();
    26322547      if (expr instanceof Value && expr.isAtomic()) {
     
    26522567    function For(body, source) {
    26532568      var _ref4;
    2654 
    26552569      this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index;
    26562570      this.body = Block.wrap([body]);
     
    26712585        this.name.error('cannot pattern match over range loops');
    26722586      }
     2587      if (this.own && !this.object) {
     2588        this.index.error('cannot use own with for-in');
     2589      }
    26732590      this.returns = false;
    26742591    }
     
    26782595    For.prototype.compileNode = function(o) {
    26792596      var body, bodyFragments, compare, compareDown, declare, declareDown, defPart, defPartFragments, down, forPartFragments, guardPart, idt1, increment, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, step, stepNum, stepVar, svar, varPart, _ref4, _ref5;
    2680 
    26812597      body = Block.wrap([this.body]);
    26822598      lastJumps = (_ref4 = last(body.expressions)) != null ? _ref4.jumps() : void 0;
     
    27922708    For.prototype.pluckDirectCall = function(o, body) {
    27932709      var base, defs, expr, fn, idx, ref, val, _i, _len, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
    2794 
    27952710      defs = [];
    27962711      _ref4 = body.expressions;
     
    28362751    Switch.prototype.jumps = function(o) {
    28372752      var block, conds, _i, _len, _ref4, _ref5, _ref6;
    2838 
    28392753      if (o == null) {
    28402754        o = {
     
    28542768    Switch.prototype.makeReturn = function(res) {
    28552769      var pair, _i, _len, _ref4, _ref5;
    2856 
    28572770      _ref4 = this.cases;
    28582771      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
     
    28712784    Switch.prototype.compileNode = function(o) {
    28722785      var block, body, cond, conditions, expr, fragments, i, idt1, idt2, _i, _j, _len, _len1, _ref4, _ref5, _ref6;
    2873 
    28742786      idt1 = o.indent + TAB;
    28752787      idt2 = o.indent = idt1 + TAB;
     
    29272839    If.prototype.bodyNode = function() {
    29282840      var _ref4;
    2929 
    29302841      return (_ref4 = this.body) != null ? _ref4.unwrap() : void 0;
    29312842    };
     
    29332844    If.prototype.elseBodyNode = function() {
    29342845      var _ref4;
    2935 
    29362846      return (_ref4 = this.elseBody) != null ? _ref4.unwrap() : void 0;
    29372847    };
     
    29492859    If.prototype.isStatement = function(o) {
    29502860      var _ref4;
    2951 
    29522861      return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref4 = this.elseBodyNode()) != null ? _ref4.isStatement(o) : void 0);
    29532862    };
     
    29552864    If.prototype.jumps = function(o) {
    29562865      var _ref4;
    2957 
    29582866      return this.body.jumps(o) || ((_ref4 = this.elseBody) != null ? _ref4.jumps(o) : void 0);
    29592867    };
     
    29862894    If.prototype.compileStatement = function(o) {
    29872895      var answer, body, child, cond, exeq, ifPart, indent;
    2988 
    29892896      child = del(o, 'chainChild');
    29902897      exeq = del(o, 'isExistentialEquals');
     
    30202927    If.prototype.compileExpression = function(o) {
    30212928      var alt, body, cond, fragments;
    3022 
    30232929      cond = this.condition.compileToFragments(o, LEVEL_COND);
    30242930      body = this.bodyNode().compileToFragments(o, LEVEL_LIST);
     
    30432949    wrap: function(expressions, statement, noReturn) {
    30442950      var args, argumentsNode, call, func, meth;
    3045 
    30462951      if (expressions.jumps()) {
    30472952        return expressions;
     
    30792984  unfoldSoak = function(o, parent, name) {
    30802985    var ifn;
    3081 
    30822986    if (!(ifn = parent[name].unfoldSoak(o))) {
    30832987      return;
     
    31323036  utility = function(name) {
    31333037    var ref;
    3134 
    31353038    ref = "__" + name;
    31363039    Scope.root.assign(ref, UTILITIES[name]());
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/optparse.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    3   var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments;
     3  var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments, repeat;
     4
     5  repeat = require('./helpers').repeat;
    46
    57  exports.OptionParser = OptionParser = (function() {
     
    1113    OptionParser.prototype.parse = function(args) {
    1214      var arg, i, isOption, matchedRule, options, originalArgs, pos, rule, seenNonOptionArg, skippingArgument, value, _i, _j, _len, _len1, _ref;
    13 
    1415      options = {
    1516        "arguments": []
     
    6061    OptionParser.prototype.help = function() {
    6162      var letPart, lines, rule, spaces, _i, _len, _ref;
    62 
    6363      lines = [];
    6464      if (this.banner) {
     
    6969        rule = _ref[_i];
    7070        spaces = 15 - rule.longFlag.length;
    71         spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
     71        spaces = spaces > 0 ? repeat(' ', spaces) : '';
    7272        letPart = rule.shortFlag ? rule.shortFlag + ', ' : '    ';
    7373        lines.push('  ' + letPart + rule.longFlag + spaces + rule.description);
     
    9090  buildRules = function(rules) {
    9191    var tuple, _i, _len, _results;
    92 
    9392    _results = [];
    9493    for (_i = 0, _len = rules.length; _i < _len; _i++) {
     
    104103  buildRule = function(shortFlag, longFlag, description, options) {
    105104    var match;
    106 
    107105    if (options == null) {
    108106      options = {};
     
    122120  normalizeArguments = function(args) {
    123121    var arg, l, match, result, _i, _j, _len, _len1, _ref;
    124 
    125122    args = args.slice(0);
    126123    result = [];
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/parser.js

    r484 r516  
    55symbols_: {"error":2,"Root":3,"Body":4,"Block":5,"TERMINATOR":6,"Line":7,"Expression":8,"Statement":9,"Return":10,"Comment":11,"STATEMENT":12,"Value":13,"Invocation":14,"Code":15,"Operation":16,"Assign":17,"If":18,"Try":19,"While":20,"For":21,"Switch":22,"Class":23,"Throw":24,"INDENT":25,"OUTDENT":26,"Identifier":27,"IDENTIFIER":28,"AlphaNumeric":29,"NUMBER":30,"STRING":31,"Literal":32,"JS":33,"REGEX":34,"DEBUGGER":35,"UNDEFINED":36,"NULL":37,"BOOL":38,"Assignable":39,"=":40,"AssignObj":41,"ObjAssignable":42,":":43,"ThisProperty":44,"RETURN":45,"HERECOMMENT":46,"PARAM_START":47,"ParamList":48,"PARAM_END":49,"FuncGlyph":50,"->":51,"=>":52,"OptComma":53,",":54,"Param":55,"ParamVar":56,"...":57,"Array":58,"Object":59,"Splat":60,"SimpleAssignable":61,"Accessor":62,"Parenthetical":63,"Range":64,"This":65,".":66,"?.":67,"::":68,"?::":69,"Index":70,"INDEX_START":71,"IndexValue":72,"INDEX_END":73,"INDEX_SOAK":74,"Slice":75,"{":76,"AssignList":77,"}":78,"CLASS":79,"EXTENDS":80,"OptFuncExist":81,"Arguments":82,"SUPER":83,"FUNC_EXIST":84,"CALL_START":85,"CALL_END":86,"ArgList":87,"THIS":88,"@":89,"[":90,"]":91,"RangeDots":92,"..":93,"Arg":94,"SimpleArgs":95,"TRY":96,"Catch":97,"FINALLY":98,"CATCH":99,"THROW":100,"(":101,")":102,"WhileSource":103,"WHILE":104,"WHEN":105,"UNTIL":106,"Loop":107,"LOOP":108,"ForBody":109,"FOR":110,"ForStart":111,"ForSource":112,"ForVariables":113,"OWN":114,"ForValue":115,"FORIN":116,"FOROF":117,"BY":118,"SWITCH":119,"Whens":120,"ELSE":121,"When":122,"LEADING_WHEN":123,"IfBlock":124,"IF":125,"POST_IF":126,"UNARY":127,"-":128,"+":129,"--":130,"++":131,"?":132,"MATH":133,"SHIFT":134,"COMPARE":135,"LOGIC":136,"RELATION":137,"COMPOUND_ASSIGN":138,"$accept":0,"$end":1},
    66terminals_: {2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",69:"?::",71:"INDEX_START",73:"INDEX_END",74:"INDEX_SOAK",76:"{",78:"}",79:"CLASS",80:"EXTENDS",83:"SUPER",84:"FUNC_EXIST",85:"CALL_START",86:"CALL_END",88:"THIS",89:"@",90:"[",91:"]",93:"..",96:"TRY",98:"FINALLY",99:"CATCH",100:"THROW",101:"(",102:")",104:"WHILE",105:"WHEN",106:"UNTIL",108:"LOOP",110:"FOR",114:"OWN",116:"FORIN",117:"FOROF",118:"BY",119:"SWITCH",121:"ELSE",123:"LEADING_WHEN",125:"IF",126:"POST_IF",127:"UNARY",128:"-",129:"+",130:"--",131:"++",132:"?",133:"MATH",134:"SHIFT",135:"COMPARE",136:"LOGIC",137:"RELATION",138:"COMPOUND_ASSIGN"},
    7 productions_: [0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,2],[62,1],[62,1],[70,3],[70,2],[72,1],[72,1],[59,4],[77,0],[77,1],[77,3],[77,4],[77,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[81,0],[81,1],[82,2],[82,4],[65,1],[65,1],[44,2],[58,2],[58,4],[92,1],[92,1],[64,5],[75,3],[75,2],[75,2],[75,1],[87,1],[87,3],[87,4],[87,4],[87,6],[94,1],[94,1],[95,1],[95,3],[19,2],[19,3],[19,4],[19,5],[97,3],[97,3],[24,2],[63,3],[63,5],[103,2],[103,4],[103,2],[103,4],[20,2],[20,2],[20,2],[20,1],[107,2],[107,2],[21,2],[21,2],[21,2],[109,2],[109,2],[111,2],[111,3],[115,1],[115,1],[115,1],[115,1],[113,1],[113,3],[112,2],[112,2],[112,4],[112,4],[112,4],[112,6],[112,6],[22,5],[22,7],[22,4],[22,6],[120,1],[120,2],[122,3],[122,4],[124,3],[124,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,4],[16,3]],
     7productions_: [0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,2],[62,1],[62,1],[70,3],[70,2],[72,1],[72,1],[59,4],[77,0],[77,1],[77,3],[77,4],[77,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[81,0],[81,1],[82,2],[82,4],[65,1],[65,1],[44,2],[58,2],[58,4],[92,1],[92,1],[64,5],[75,3],[75,2],[75,2],[75,1],[87,1],[87,3],[87,4],[87,4],[87,6],[94,1],[94,1],[95,1],[95,3],[19,2],[19,3],[19,4],[19,5],[97,3],[97,3],[97,2],[24,2],[63,3],[63,5],[103,2],[103,4],[103,2],[103,4],[20,2],[20,2],[20,2],[20,1],[107,2],[107,2],[21,2],[21,2],[21,2],[109,2],[109,2],[111,2],[111,3],[115,1],[115,1],[115,1],[115,1],[113,1],[113,3],[112,2],[112,2],[112,4],[112,4],[112,4],[112,6],[112,6],[22,5],[22,7],[22,4],[22,6],[120,1],[120,2],[122,3],[122,4],[124,3],[124,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,4],[16,3]],
    88performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
    99
     
    288288case 138:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Value($$[$0-1])), $$[$0]]);
    289289break;
    290 case 139:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0]));
    291 break;
    292 case 140:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1]));
    293 break;
    294 case 141:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2]));
    295 break;
    296 case 142:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0]));
    297 break;
    298 case 143:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
     290case 139:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([null, $$[$0]]);
     291break;
     292case 140:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0]));
     293break;
     294case 141:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1]));
     295break;
     296case 142:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2]));
     297break;
     298case 143:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0]));
     299break;
     300case 144:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
    299301          guard: $$[$0]
    300302        }));
    301303break;
    302 case 144:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], {
     304case 145:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], {
    303305          invert: true
    304306        }));
    305307break;
    306 case 145:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
     308case 146:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
    307309          invert: true,
    308310          guard: $$[$0]
    309311        }));
    310312break;
    311 case 146:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0]));
    312 break;
    313 case 147:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
     313case 147:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0]));
    314314break;
    315315case 148:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
    316316break;
    317 case 149:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]);
    318 break;
    319 case 150:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody($$[$0]));
    320 break;
    321 case 151:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]]))));
    322 break;
    323 case 152:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
     317case 149:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
     318break;
     319case 150:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]);
     320break;
     321case 151:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody($$[$0]));
     322break;
     323case 152:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]]))));
    324324break;
    325325case 153:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
    326326break;
    327 case 154:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1]));
    328 break;
    329 case 155:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
     327case 154:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
     328break;
     329case 155:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1]));
     330break;
     331case 156:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
    330332          source: yy.addLocationDataFn(_$[$0])(new yy.Value($$[$0]))
    331333        });
    332334break;
    333 case 156:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () {
     335case 157:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () {
    334336        $$[$0].own = $$[$0-1].own;
    335337        $$[$0].name = $$[$0-1][0];
     
    338340      }()));
    339341break;
    340 case 157:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]);
    341 break;
    342 case 158:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
     342case 158:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]);
     343break;
     344case 159:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
    343345        $$[$0].own = true;
    344346        return $$[$0];
    345347      }()));
    346348break;
    347 case 159:this.$ = $$[$0];
    348 break;
    349349case 160:this.$ = $$[$0];
    350350break;
    351 case 161:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
     351case 161:this.$ = $$[$0];
    352352break;
    353353case 162:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
    354354break;
    355 case 163:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
    356 break;
    357 case 164:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]);
    358 break;
    359 case 165:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
     355case 163:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
     356break;
     357case 164:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
     358break;
     359case 165:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]);
     360break;
     361case 166:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
    360362          source: $$[$0]
    361363        });
    362364break;
    363 case 166:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
     365case 167:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
    364366          source: $$[$0],
    365367          object: true
    366368        });
    367369break;
    368 case 167:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
     370case 168:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
    369371          source: $$[$0-2],
    370372          guard: $$[$0]
    371373        });
    372374break;
    373 case 168:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
     375case 169:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
    374376          source: $$[$0-2],
    375377          guard: $$[$0],
     
    377379        });
    378380break;
    379 case 169:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
     381case 170:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
    380382          source: $$[$0-2],
    381383          step: $$[$0]
    382384        });
    383385break;
    384 case 170:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
     386case 171:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
    385387          source: $$[$0-4],
    386388          guard: $$[$0-2],
     
    388390        });
    389391break;
    390 case 171:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
     392case 172:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
    391393          source: $$[$0-4],
    392394          step: $$[$0-2],
     
    394396        });
    395397break;
    396 case 172:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1]));
    397 break;
    398 case 173:this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]));
    399 break;
    400 case 174:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1]));
    401 break;
    402 case 175:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1]));
    403 break;
    404 case 176:this.$ = $$[$0];
    405 break;
    406 case 177:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0]));
    407 break;
    408 case 178:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]);
    409 break;
    410 case 179:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]);
    411 break;
    412 case 180:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {
     398case 173:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1]));
     399break;
     400case 174:this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]));
     401break;
     402case 175:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1]));
     403break;
     404case 176:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1]));
     405break;
     406case 177:this.$ = $$[$0];
     407break;
     408case 178:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0]));
     409break;
     410case 179:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]);
     411break;
     412case 180:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]);
     413break;
     414case 181:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {
    413415          type: $$[$0-2]
    414416        }));
    415417break;
    416 case 181:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
     418case 182:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
    417419          type: $$[$0-2]
    418420        })));
    419421break;
    420 case 182:this.$ = $$[$0];
    421 break;
    422 case 183:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0]));
    423 break;
    424 case 184:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
    425           type: $$[$0-1],
    426           statement: true
    427         }));
     422case 183:this.$ = $$[$0];
     423break;
     424case 184:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0]));
    428425break;
    429426case 185:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
     
    432429        }));
    433430break;
    434 case 186:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0]));
    435 break;
    436 case 187:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('-', $$[$0]));
    437 break;
    438 case 188:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('+', $$[$0]));
    439 break;
    440 case 189:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0]));
    441 break;
    442 case 190:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0]));
    443 break;
    444 case 191:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0-1], null, true));
    445 break;
    446 case 192:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0-1], null, true));
    447 break;
    448 case 193:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1]));
    449 break;
    450 case 194:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('+', $$[$0-2], $$[$0]));
    451 break;
    452 case 195:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('-', $$[$0-2], $$[$0]));
    453 break;
    454 case 196:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
     431case 186:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
     432          type: $$[$0-1],
     433          statement: true
     434        }));
     435break;
     436case 187:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0]));
     437break;
     438case 188:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('-', $$[$0]));
     439break;
     440case 189:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('+', $$[$0]));
     441break;
     442case 190:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0]));
     443break;
     444case 191:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0]));
     445break;
     446case 192:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0-1], null, true));
     447break;
     448case 193:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0-1], null, true));
     449break;
     450case 194:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1]));
     451break;
     452case 195:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('+', $$[$0-2], $$[$0]));
     453break;
     454case 196:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('-', $$[$0-2], $$[$0]));
    455455break;
    456456case 197:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
     
    460460case 199:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
    461461break;
    462 case 200:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
     462case 200:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
     463break;
     464case 201:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
    463465        if ($$[$0-1].charAt(0) === '!') {
    464466          return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert();
     
    468470      }()));
    469471break;
    470 case 201:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1]));
    471 break;
    472 case 202:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]));
    473 break;
    474 case 203:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2]));
    475 break;
    476 case 204:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0]));
     472case 202:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1]));
     473break;
     474case 203:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]));
     475break;
     476case 204:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2]));
     477break;
     478case 205:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0]));
    477479break;
    478480}
    479481},
    480 table: [{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],102:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,7],6:[2,7],26:[2,7],102:[2,7],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,8],6:[2,8],26:[2,8],102:[2,8],103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,12],74:[1,101],78:[2,12],81:92,84:[1,94],85:[2,108],86:[2,12],91:[2,12],93:[2,12],102:[2,12],104:[2,12],105:[2,12],106:[2,12],110:[2,12],118:[2,12],126:[2,12],128:[2,12],129:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12],137:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,13],74:[1,101],78:[2,13],81:102,84:[1,94],85:[2,108],86:[2,13],91:[2,13],93:[2,13],102:[2,13],104:[2,13],105:[2,13],106:[2,13],110:[2,13],118:[2,13],126:[2,13],128:[2,13],129:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13],137:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],73:[2,14],78:[2,14],86:[2,14],91:[2,14],93:[2,14],102:[2,14],104:[2,14],105:[2,14],106:[2,14],110:[2,14],118:[2,14],126:[2,14],128:[2,14],129:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14],137:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],73:[2,15],78:[2,15],86:[2,15],91:[2,15],93:[2,15],102:[2,15],104:[2,15],105:[2,15],106:[2,15],110:[2,15],118:[2,15],126:[2,15],128:[2,15],129:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15],137:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],73:[2,16],78:[2,16],86:[2,16],91:[2,16],93:[2,16],102:[2,16],104:[2,16],105:[2,16],106:[2,16],110:[2,16],118:[2,16],126:[2,16],128:[2,16],129:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16],137:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],73:[2,17],78:[2,17],86:[2,17],91:[2,17],93:[2,17],102:[2,17],104:[2,17],105:[2,17],106:[2,17],110:[2,17],118:[2,17],126:[2,17],128:[2,17],129:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17],137:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],73:[2,18],78:[2,18],86:[2,18],91:[2,18],93:[2,18],102:[2,18],104:[2,18],105:[2,18],106:[2,18],110:[2,18],118:[2,18],126:[2,18],128:[2,18],129:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18],137:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],73:[2,19],78:[2,19],86:[2,19],91:[2,19],93:[2,19],102:[2,19],104:[2,19],105:[2,19],106:[2,19],110:[2,19],118:[2,19],126:[2,19],128:[2,19],129:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19],137:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],73:[2,20],78:[2,20],86:[2,20],91:[2,20],93:[2,20],102:[2,20],104:[2,20],105:[2,20],106:[2,20],110:[2,20],118:[2,20],126:[2,20],128:[2,20],129:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20],137:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],73:[2,21],78:[2,21],86:[2,21],91:[2,21],93:[2,21],102:[2,21],104:[2,21],105:[2,21],106:[2,21],110:[2,21],118:[2,21],126:[2,21],128:[2,21],129:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21],137:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],73:[2,22],78:[2,22],86:[2,22],91:[2,22],93:[2,22],102:[2,22],104:[2,22],105:[2,22],106:[2,22],110:[2,22],118:[2,22],126:[2,22],128:[2,22],129:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22],137:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],73:[2,23],78:[2,23],86:[2,23],91:[2,23],93:[2,23],102:[2,23],104:[2,23],105:[2,23],106:[2,23],110:[2,23],118:[2,23],126:[2,23],128:[2,23],129:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23],137:[2,23]},{1:[2,9],6:[2,9],26:[2,9],102:[2,9],104:[2,9],106:[2,9],110:[2,9],126:[2,9]},{1:[2,10],6:[2,10],26:[2,10],102:[2,10],104:[2,10],106:[2,10],110:[2,10],126:[2,10]},{1:[2,11],6:[2,11],26:[2,11],102:[2,11],104:[2,11],106:[2,11],110:[2,11],126:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,104],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],73:[2,75],74:[2,75],78:[2,75],84:[2,75],85:[2,75],86:[2,75],91:[2,75],93:[2,75],102:[2,75],104:[2,75],105:[2,75],106:[2,75],110:[2,75],118:[2,75],126:[2,75],128:[2,75],129:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],69:[2,76],71:[2,76],73:[2,76],74:[2,76],78:[2,76],84:[2,76],85:[2,76],86:[2,76],91:[2,76],93:[2,76],102:[2,76],104:[2,76],105:[2,76],106:[2,76],110:[2,76],118:[2,76],126:[2,76],128:[2,76],129:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76],137:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],69:[2,77],71:[2,77],73:[2,77],74:[2,77],78:[2,77],84:[2,77],85:[2,77],86:[2,77],91:[2,77],93:[2,77],102:[2,77],104:[2,77],105:[2,77],106:[2,77],110:[2,77],118:[2,77],126:[2,77],128:[2,77],129:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77],137:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],69:[2,78],71:[2,78],73:[2,78],74:[2,78],78:[2,78],84:[2,78],85:[2,78],86:[2,78],91:[2,78],93:[2,78],102:[2,78],104:[2,78],105:[2,78],106:[2,78],110:[2,78],118:[2,78],126:[2,78],128:[2,78],129:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78],137:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],69:[2,79],71:[2,79],73:[2,79],74:[2,79],78:[2,79],84:[2,79],85:[2,79],86:[2,79],91:[2,79],93:[2,79],102:[2,79],104:[2,79],105:[2,79],106:[2,79],110:[2,79],118:[2,79],126:[2,79],128:[2,79],129:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79],137:[2,79]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],69:[2,106],71:[2,106],73:[2,106],74:[2,106],78:[2,106],82:105,84:[2,106],85:[1,106],86:[2,106],91:[2,106],93:[2,106],102:[2,106],104:[2,106],105:[2,106],106:[2,106],110:[2,106],118:[2,106],126:[2,106],128:[2,106],129:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106],137:[2,106]},{6:[2,55],25:[2,55],27:110,28:[1,73],44:111,48:107,49:[2,55],54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{5:116,25:[1,5]},{8:117,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:119,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:120,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:121,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:125,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,72],74:[2,72],78:[2,72],80:[1,129],84:[2,72],85:[2,72],86:[2,72],91:[2,72],93:[2,72],102:[2,72],104:[2,72],105:[2,72],106:[2,72],110:[2,72],118:[2,72],126:[2,72],128:[2,72],129:[2,72],130:[1,126],131:[1,127],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72],138:[1,128]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],73:[2,182],78:[2,182],86:[2,182],91:[2,182],93:[2,182],102:[2,182],104:[2,182],105:[2,182],106:[2,182],110:[2,182],118:[2,182],121:[1,130],126:[2,182],128:[2,182],129:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182],137:[2,182]},{5:131,25:[1,5]},{5:132,25:[1,5]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],73:[2,149],78:[2,149],86:[2,149],91:[2,149],93:[2,149],102:[2,149],104:[2,149],105:[2,149],106:[2,149],110:[2,149],118:[2,149],126:[2,149],128:[2,149],129:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149],137:[2,149]},{5:133,25:[1,5]},{8:134,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,135],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,96],5:136,6:[2,96],13:122,14:123,25:[1,5],26:[2,96],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,49:[2,96],54:[2,96],57:[2,96],58:47,59:48,61:138,63:25,64:26,65:27,73:[2,96],76:[1,70],78:[2,96],80:[1,137],83:[1,28],86:[2,96],88:[1,58],89:[1,59],90:[1,57],91:[2,96],93:[2,96],101:[1,56],102:[2,96],104:[2,96],105:[2,96],106:[2,96],110:[2,96],118:[2,96],126:[2,96],128:[2,96],129:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96],137:[2,96]},{8:139,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,47],6:[2,47],8:140,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,47],103:39,104:[2,47],106:[2,47],107:40,108:[1,67],109:41,110:[2,47],111:69,119:[1,42],124:37,125:[1,64],126:[2,47],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],78:[2,48],102:[2,48],104:[2,48],106:[2,48],110:[2,48],126:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],69:[2,73],71:[2,73],73:[2,73],74:[2,73],78:[2,73],84:[2,73],85:[2,73],86:[2,73],91:[2,73],93:[2,73],102:[2,73],104:[2,73],105:[2,73],106:[2,73],110:[2,73],118:[2,73],126:[2,73],128:[2,73],129:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],73:[2,74],74:[2,74],78:[2,74],84:[2,74],85:[2,74],86:[2,74],91:[2,74],93:[2,74],102:[2,74],104:[2,74],105:[2,74],106:[2,74],110:[2,74],118:[2,74],126:[2,74],128:[2,74],129:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],69:[2,29],71:[2,29],73:[2,29],74:[2,29],78:[2,29],84:[2,29],85:[2,29],86:[2,29],91:[2,29],93:[2,29],102:[2,29],104:[2,29],105:[2,29],106:[2,29],110:[2,29],118:[2,29],126:[2,29],128:[2,29],129:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],69:[2,30],71:[2,30],73:[2,30],74:[2,30],78:[2,30],84:[2,30],85:[2,30],86:[2,30],91:[2,30],93:[2,30],102:[2,30],104:[2,30],105:[2,30],106:[2,30],110:[2,30],118:[2,30],126:[2,30],128:[2,30],129:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30],137:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],69:[2,31],71:[2,31],73:[2,31],74:[2,31],78:[2,31],84:[2,31],85:[2,31],86:[2,31],91:[2,31],93:[2,31],102:[2,31],104:[2,31],105:[2,31],106:[2,31],110:[2,31],118:[2,31],126:[2,31],128:[2,31],129:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31],137:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],69:[2,32],71:[2,32],73:[2,32],74:[2,32],78:[2,32],84:[2,32],85:[2,32],86:[2,32],91:[2,32],93:[2,32],102:[2,32],104:[2,32],105:[2,32],106:[2,32],110:[2,32],118:[2,32],126:[2,32],128:[2,32],129:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32],137:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],69:[2,33],71:[2,33],73:[2,33],74:[2,33],78:[2,33],84:[2,33],85:[2,33],86:[2,33],91:[2,33],93:[2,33],102:[2,33],104:[2,33],105:[2,33],106:[2,33],110:[2,33],118:[2,33],126:[2,33],128:[2,33],129:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33],137:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],69:[2,34],71:[2,34],73:[2,34],74:[2,34],78:[2,34],84:[2,34],85:[2,34],86:[2,34],91:[2,34],93:[2,34],102:[2,34],104:[2,34],105:[2,34],106:[2,34],110:[2,34],118:[2,34],126:[2,34],128:[2,34],129:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34],137:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],69:[2,35],71:[2,35],73:[2,35],74:[2,35],78:[2,35],84:[2,35],85:[2,35],86:[2,35],91:[2,35],93:[2,35],102:[2,35],104:[2,35],105:[2,35],106:[2,35],110:[2,35],118:[2,35],126:[2,35],128:[2,35],129:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35],137:[2,35]},{4:141,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,142],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:143,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],69:[2,112],71:[2,112],73:[2,112],74:[2,112],78:[2,112],84:[2,112],85:[2,112],86:[2,112],91:[2,112],93:[2,112],102:[2,112],104:[2,112],105:[2,112],106:[2,112],110:[2,112],118:[2,112],126:[2,112],128:[2,112],129:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112],137:[2,112]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],27:149,28:[1,73],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],69:[2,113],71:[2,113],73:[2,113],74:[2,113],78:[2,113],84:[2,113],85:[2,113],86:[2,113],91:[2,113],93:[2,113],102:[2,113],104:[2,113],105:[2,113],106:[2,113],110:[2,113],118:[2,113],126:[2,113],128:[2,113],129:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],69:[2,68],71:[2,68],73:[2,68],74:[2,68],78:[2,68],80:[2,68],84:[2,68],85:[2,68],86:[2,68],91:[2,68],93:[2,68],102:[2,68],104:[2,68],105:[2,68],106:[2,68],110:[2,68],118:[2,68],126:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68],138:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,71],74:[2,71],78:[2,71],80:[2,71],84:[2,71],85:[2,71],86:[2,71],91:[2,71],93:[2,71],102:[2,71],104:[2,71],105:[2,71],106:[2,71],110:[2,71],118:[2,71],126:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71],138:[2,71]},{8:150,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:151,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:152,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:153,8:154,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{27:159,28:[1,73],44:160,58:161,59:162,64:155,76:[1,70],89:[1,114],90:[1,57],113:156,114:[1,157],115:158},{112:163,116:[1,164],117:[1,165]},{6:[2,91],11:169,25:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:166,78:[2,91],89:[1,114]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],69:[2,27],71:[2,27],73:[2,27],74:[2,27],78:[2,27],84:[2,27],85:[2,27],86:[2,27],91:[2,27],93:[2,27],102:[2,27],104:[2,27],105:[2,27],106:[2,27],110:[2,27],118:[2,27],126:[2,27],128:[2,27],129:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27],137:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],69:[2,28],71:[2,28],73:[2,28],74:[2,28],78:[2,28],84:[2,28],85:[2,28],86:[2,28],91:[2,28],93:[2,28],102:[2,28],104:[2,28],105:[2,28],106:[2,28],110:[2,28],118:[2,28],126:[2,28],128:[2,28],129:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28],137:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],69:[2,26],71:[2,26],73:[2,26],74:[2,26],78:[2,26],80:[2,26],84:[2,26],85:[2,26],86:[2,26],91:[2,26],93:[2,26],102:[2,26],104:[2,26],105:[2,26],106:[2,26],110:[2,26],116:[2,26],117:[2,26],118:[2,26],126:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26],138:[2,26]},{1:[2,6],6:[2,6],7:173,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,6],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],73:[2,24],78:[2,24],86:[2,24],91:[2,24],93:[2,24],98:[2,24],99:[2,24],102:[2,24],104:[2,24],105:[2,24],106:[2,24],110:[2,24],118:[2,24],121:[2,24],123:[2,24],126:[2,24],128:[2,24],129:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24],137:[2,24]},{6:[1,74],26:[1,174]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],73:[2,193],78:[2,193],86:[2,193],91:[2,193],93:[2,193],102:[2,193],104:[2,193],105:[2,193],106:[2,193],110:[2,193],118:[2,193],126:[2,193],128:[2,193],129:[2,193],132:[2,193],133:[2,193],134:[2,193],135:[2,193],136:[2,193],137:[2,193]},{8:175,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:176,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:177,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:178,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:179,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:180,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:181,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:182,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],73:[2,148],78:[2,148],86:[2,148],91:[2,148],93:[2,148],102:[2,148],104:[2,148],105:[2,148],106:[2,148],110:[2,148],118:[2,148],126:[2,148],128:[2,148],129:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148],137:[2,148]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],73:[2,153],78:[2,153],86:[2,153],91:[2,153],93:[2,153],102:[2,153],104:[2,153],105:[2,153],106:[2,153],110:[2,153],118:[2,153],126:[2,153],128:[2,153],129:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153],137:[2,153]},{8:183,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],73:[2,147],78:[2,147],86:[2,147],91:[2,147],93:[2,147],102:[2,147],104:[2,147],105:[2,147],106:[2,147],110:[2,147],118:[2,147],126:[2,147],128:[2,147],129:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147],137:[2,147]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],73:[2,152],78:[2,152],86:[2,152],91:[2,152],93:[2,152],102:[2,152],104:[2,152],105:[2,152],106:[2,152],110:[2,152],118:[2,152],126:[2,152],128:[2,152],129:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152],137:[2,152]},{82:184,85:[1,106]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],69:[2,69],71:[2,69],73:[2,69],74:[2,69],78:[2,69],80:[2,69],84:[2,69],85:[2,69],86:[2,69],91:[2,69],93:[2,69],102:[2,69],104:[2,69],105:[2,69],106:[2,69],110:[2,69],118:[2,69],126:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69],138:[2,69]},{85:[2,109]},{27:185,28:[1,73]},{27:186,28:[1,73]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],27:187,28:[1,73],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],69:[2,84],71:[2,84],73:[2,84],74:[2,84],78:[2,84],80:[2,84],84:[2,84],85:[2,84],86:[2,84],91:[2,84],93:[2,84],102:[2,84],104:[2,84],105:[2,84],106:[2,84],110:[2,84],118:[2,84],126:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84]},{27:188,28:[1,73]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],69:[2,85],71:[2,85],73:[2,85],74:[2,85],78:[2,85],80:[2,85],84:[2,85],85:[2,85],86:[2,85],91:[2,85],93:[2,85],102:[2,85],104:[2,85],105:[2,85],106:[2,85],110:[2,85],118:[2,85],126:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85]},{8:190,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,194],58:47,59:48,61:36,63:25,64:26,65:27,72:189,75:191,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],92:192,93:[1,193],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{70:195,71:[1,100],74:[1,101]},{82:196,85:[1,106]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],69:[2,70],71:[2,70],73:[2,70],74:[2,70],78:[2,70],80:[2,70],84:[2,70],85:[2,70],86:[2,70],91:[2,70],93:[2,70],102:[2,70],104:[2,70],105:[2,70],106:[2,70],110:[2,70],118:[2,70],126:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70],138:[2,70]},{6:[1,198],8:197,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,199],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],49:[2,107],54:[2,107],57:[2,107],66:[2,107],67:[2,107],68:[2,107],69:[2,107],71:[2,107],73:[2,107],74:[2,107],78:[2,107],84:[2,107],85:[2,107],86:[2,107],91:[2,107],93:[2,107],102:[2,107],104:[2,107],105:[2,107],106:[2,107],110:[2,107],118:[2,107],126:[2,107],128:[2,107],129:[2,107],132:[2,107],133:[2,107],134:[2,107],135:[2,107],136:[2,107],137:[2,107]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[1,200],87:201,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],49:[1,203],53:205,54:[1,204]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,207],49:[2,60],54:[2,60],57:[1,206]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:149,28:[1,73]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],73:[2,50],78:[2,50],86:[2,50],91:[2,50],93:[2,50],102:[2,50],104:[2,50],105:[2,50],106:[2,50],110:[2,50],118:[2,50],126:[2,50],128:[2,50],129:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50],137:[2,50]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],73:[2,186],78:[2,186],86:[2,186],91:[2,186],93:[2,186],102:[2,186],103:87,104:[2,186],105:[2,186],106:[2,186],109:88,110:[2,186],111:69,118:[2,186],126:[2,186],128:[2,186],129:[2,186],132:[1,78],133:[2,186],134:[2,186],135:[2,186],136:[2,186],137:[2,186]},{103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],73:[2,187],78:[2,187],86:[2,187],91:[2,187],93:[2,187],102:[2,187],103:87,104:[2,187],105:[2,187],106:[2,187],109:88,110:[2,187],111:69,118:[2,187],126:[2,187],128:[2,187],129:[2,187],132:[1,78],133:[2,187],134:[2,187],135:[2,187],136:[2,187],137:[2,187]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],73:[2,188],78:[2,188],86:[2,188],91:[2,188],93:[2,188],102:[2,188],103:87,104:[2,188],105:[2,188],106:[2,188],109:88,110:[2,188],111:69,118:[2,188],126:[2,188],128:[2,188],129:[2,188],132:[1,78],133:[2,188],134:[2,188],135:[2,188],136:[2,188],137:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,189],74:[2,72],78:[2,189],84:[2,72],85:[2,72],86:[2,189],91:[2,189],93:[2,189],102:[2,189],104:[2,189],105:[2,189],106:[2,189],110:[2,189],118:[2,189],126:[2,189],128:[2,189],129:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189],137:[2,189]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:92,84:[1,94],85:[2,108]},{62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:102,84:[1,94],85:[2,108]},{66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],74:[2,75],84:[2,75],85:[2,75]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,190],74:[2,72],78:[2,190],84:[2,72],85:[2,72],86:[2,190],91:[2,190],93:[2,190],102:[2,190],104:[2,190],105:[2,190],106:[2,190],110:[2,190],118:[2,190],126:[2,190],128:[2,190],129:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190],137:[2,190]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],73:[2,191],78:[2,191],86:[2,191],91:[2,191],93:[2,191],102:[2,191],104:[2,191],105:[2,191],106:[2,191],110:[2,191],118:[2,191],126:[2,191],128:[2,191],129:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191],137:[2,191]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],73:[2,192],78:[2,192],86:[2,192],91:[2,192],93:[2,192],102:[2,192],104:[2,192],105:[2,192],106:[2,192],110:[2,192],118:[2,192],126:[2,192],128:[2,192],129:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192],137:[2,192]},{6:[1,210],8:208,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,209],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:211,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:212,25:[1,5],125:[1,213]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],73:[2,133],78:[2,133],86:[2,133],91:[2,133],93:[2,133],97:214,98:[1,215],99:[1,216],102:[2,133],104:[2,133],105:[2,133],106:[2,133],110:[2,133],118:[2,133],126:[2,133],128:[2,133],129:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133],137:[2,133]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],73:[2,146],78:[2,146],86:[2,146],91:[2,146],93:[2,146],102:[2,146],104:[2,146],105:[2,146],106:[2,146],110:[2,146],118:[2,146],126:[2,146],128:[2,146],129:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146],137:[2,146]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],73:[2,154],78:[2,154],86:[2,154],91:[2,154],93:[2,154],102:[2,154],104:[2,154],105:[2,154],106:[2,154],110:[2,154],118:[2,154],126:[2,154],128:[2,154],129:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154],137:[2,154]},{25:[1,217],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{120:218,122:219,123:[1,220]},{1:[2,97],6:[2,97],25:[2,97],26:[2,97],49:[2,97],54:[2,97],57:[2,97],73:[2,97],78:[2,97],86:[2,97],91:[2,97],93:[2,97],102:[2,97],104:[2,97],105:[2,97],106:[2,97],110:[2,97],118:[2,97],126:[2,97],128:[2,97],129:[2,97],132:[2,97],133:[2,97],134:[2,97],135:[2,97],136:[2,97],137:[2,97]},{8:221,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,100],5:222,6:[2,100],25:[1,5],26:[2,100],49:[2,100],54:[2,100],57:[2,100],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,100],74:[2,72],78:[2,100],80:[1,223],84:[2,72],85:[2,72],86:[2,100],91:[2,100],93:[2,100],102:[2,100],104:[2,100],105:[2,100],106:[2,100],110:[2,100],118:[2,100],126:[2,100],128:[2,100],129:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100],137:[2,100]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],73:[2,139],78:[2,139],86:[2,139],91:[2,139],93:[2,139],102:[2,139],103:87,104:[2,139],105:[2,139],106:[2,139],109:88,110:[2,139],111:69,118:[2,139],126:[2,139],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,46],6:[2,46],26:[2,46],102:[2,46],103:87,104:[2,46],106:[2,46],109:88,110:[2,46],111:69,126:[2,46],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,74],102:[1,224]},{4:225,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,129],25:[2,129],54:[2,129],57:[1,227],91:[2,129],92:226,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],69:[2,115],71:[2,115],73:[2,115],74:[2,115],78:[2,115],84:[2,115],85:[2,115],86:[2,115],91:[2,115],93:[2,115],102:[2,115],104:[2,115],105:[2,115],106:[2,115],110:[2,115],116:[2,115],117:[2,115],118:[2,115],126:[2,115],128:[2,115],129:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115],137:[2,115]},{6:[2,53],25:[2,53],53:228,54:[1,229],91:[2,53]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],86:[2,124],91:[2,124]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:230,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,130],25:[2,130],26:[2,130],54:[2,130],86:[2,130],91:[2,130]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],43:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],69:[2,114],71:[2,114],73:[2,114],74:[2,114],78:[2,114],80:[2,114],84:[2,114],85:[2,114],86:[2,114],91:[2,114],93:[2,114],102:[2,114],104:[2,114],105:[2,114],106:[2,114],110:[2,114],116:[2,114],117:[2,114],118:[2,114],126:[2,114],128:[2,114],129:[2,114],130:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114],137:[2,114],138:[2,114]},{5:231,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],73:[2,142],78:[2,142],86:[2,142],91:[2,142],93:[2,142],102:[2,142],103:87,104:[1,65],105:[1,232],106:[1,66],109:88,110:[1,68],111:69,118:[2,142],126:[2,142],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],73:[2,144],78:[2,144],86:[2,144],91:[2,144],93:[2,144],102:[2,144],103:87,104:[1,65],105:[1,233],106:[1,66],109:88,110:[1,68],111:69,118:[2,144],126:[2,144],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],73:[2,150],78:[2,150],86:[2,150],91:[2,150],93:[2,150],102:[2,150],104:[2,150],105:[2,150],106:[2,150],110:[2,150],118:[2,150],126:[2,150],128:[2,150],129:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150],137:[2,150]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],73:[2,151],78:[2,151],86:[2,151],91:[2,151],93:[2,151],102:[2,151],103:87,104:[1,65],105:[2,151],106:[1,66],109:88,110:[1,68],111:69,118:[2,151],126:[2,151],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],73:[2,155],78:[2,155],86:[2,155],91:[2,155],93:[2,155],102:[2,155],104:[2,155],105:[2,155],106:[2,155],110:[2,155],118:[2,155],126:[2,155],128:[2,155],129:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155],137:[2,155]},{116:[2,157],117:[2,157]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],113:234,115:158},{54:[1,235],116:[2,163],117:[2,163]},{54:[2,159],116:[2,159],117:[2,159]},{54:[2,160],116:[2,160],117:[2,160]},{54:[2,161],116:[2,161],117:[2,161]},{54:[2,162],116:[2,162],117:[2,162]},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],49:[2,156],54:[2,156],57:[2,156],73:[2,156],78:[2,156],86:[2,156],91:[2,156],93:[2,156],102:[2,156],104:[2,156],105:[2,156],106:[2,156],110:[2,156],118:[2,156],126:[2,156],128:[2,156],129:[2,156],132:[2,156],133:[2,156],134:[2,156],135:[2,156],136:[2,156],137:[2,156]},{8:236,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:237,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],53:238,54:[1,239],78:[2,53]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],78:[2,92]},{6:[2,39],25:[2,39],26:[2,39],43:[1,240],54:[2,39],78:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],78:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],78:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],78:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],78:[2,45]},{1:[2,5],6:[2,5],26:[2,5],102:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],73:[2,25],78:[2,25],86:[2,25],91:[2,25],93:[2,25],98:[2,25],99:[2,25],102:[2,25],104:[2,25],105:[2,25],106:[2,25],110:[2,25],118:[2,25],121:[2,25],123:[2,25],126:[2,25],128:[2,25],129:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25],137:[2,25]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],73:[2,194],78:[2,194],86:[2,194],91:[2,194],93:[2,194],102:[2,194],103:87,104:[2,194],105:[2,194],106:[2,194],109:88,110:[2,194],111:69,118:[2,194],126:[2,194],128:[2,194],129:[2,194],132:[1,78],133:[1,81],134:[2,194],135:[2,194],136:[2,194],137:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],73:[2,195],78:[2,195],86:[2,195],91:[2,195],93:[2,195],102:[2,195],103:87,104:[2,195],105:[2,195],106:[2,195],109:88,110:[2,195],111:69,118:[2,195],126:[2,195],128:[2,195],129:[2,195],132:[1,78],133:[1,81],134:[2,195],135:[2,195],136:[2,195],137:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],73:[2,196],78:[2,196],86:[2,196],91:[2,196],93:[2,196],102:[2,196],103:87,104:[2,196],105:[2,196],106:[2,196],109:88,110:[2,196],111:69,118:[2,196],126:[2,196],128:[2,196],129:[2,196],132:[1,78],133:[2,196],134:[2,196],135:[2,196],136:[2,196],137:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],73:[2,197],78:[2,197],86:[2,197],91:[2,197],93:[2,197],102:[2,197],103:87,104:[2,197],105:[2,197],106:[2,197],109:88,110:[2,197],111:69,118:[2,197],126:[2,197],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[2,197],135:[2,197],136:[2,197],137:[2,197]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],73:[2,198],78:[2,198],86:[2,198],91:[2,198],93:[2,198],102:[2,198],103:87,104:[2,198],105:[2,198],106:[2,198],109:88,110:[2,198],111:69,118:[2,198],126:[2,198],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,198],136:[2,198],137:[1,85]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],73:[2,199],78:[2,199],86:[2,199],91:[2,199],93:[2,199],102:[2,199],103:87,104:[2,199],105:[2,199],106:[2,199],109:88,110:[2,199],111:69,118:[2,199],126:[2,199],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[2,199],137:[1,85]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],73:[2,200],78:[2,200],86:[2,200],91:[2,200],93:[2,200],102:[2,200],103:87,104:[2,200],105:[2,200],106:[2,200],109:88,110:[2,200],111:69,118:[2,200],126:[2,200],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,200],136:[2,200],137:[2,200]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],73:[2,185],78:[2,185],86:[2,185],91:[2,185],93:[2,185],102:[2,185],103:87,104:[1,65],105:[2,185],106:[1,66],109:88,110:[1,68],111:69,118:[2,185],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],73:[2,184],78:[2,184],86:[2,184],91:[2,184],93:[2,184],102:[2,184],103:87,104:[1,65],105:[2,184],106:[1,66],109:88,110:[1,68],111:69,118:[2,184],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],69:[2,104],71:[2,104],73:[2,104],74:[2,104],78:[2,104],84:[2,104],85:[2,104],86:[2,104],91:[2,104],93:[2,104],102:[2,104],104:[2,104],105:[2,104],106:[2,104],110:[2,104],118:[2,104],126:[2,104],128:[2,104],129:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104],137:[2,104]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],69:[2,80],71:[2,80],73:[2,80],74:[2,80],78:[2,80],80:[2,80],84:[2,80],85:[2,80],86:[2,80],91:[2,80],93:[2,80],102:[2,80],104:[2,80],105:[2,80],106:[2,80],110:[2,80],118:[2,80],126:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80],138:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],69:[2,81],71:[2,81],73:[2,81],74:[2,81],78:[2,81],80:[2,81],84:[2,81],85:[2,81],86:[2,81],91:[2,81],93:[2,81],102:[2,81],104:[2,81],105:[2,81],106:[2,81],110:[2,81],118:[2,81],126:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81],138:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],69:[2,82],71:[2,82],73:[2,82],74:[2,82],78:[2,82],80:[2,82],84:[2,82],85:[2,82],86:[2,82],91:[2,82],93:[2,82],102:[2,82],104:[2,82],105:[2,82],106:[2,82],110:[2,82],118:[2,82],126:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82],138:[2,82]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],69:[2,83],71:[2,83],73:[2,83],74:[2,83],78:[2,83],80:[2,83],84:[2,83],85:[2,83],86:[2,83],91:[2,83],93:[2,83],102:[2,83],104:[2,83],105:[2,83],106:[2,83],110:[2,83],118:[2,83],126:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83],138:[2,83]},{73:[1,241]},{57:[1,194],73:[2,88],92:242,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{73:[2,89]},{8:243,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,123],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],73:[2,117],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{12:[2,118],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],73:[2,118],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{1:[2,87],6:[2,87],25:[2,87],26:[2,87],40:[2,87],49:[2,87],54:[2,87],57:[2,87],66:[2,87],67:[2,87],68:[2,87],69:[2,87],71:[2,87],73:[2,87],74:[2,87],78:[2,87],80:[2,87],84:[2,87],85:[2,87],86:[2,87],91:[2,87],93:[2,87],102:[2,87],104:[2,87],105:[2,87],106:[2,87],110:[2,87],118:[2,87],126:[2,87],128:[2,87],129:[2,87],130:[2,87],131:[2,87],132:[2,87],133:[2,87],134:[2,87],135:[2,87],136:[2,87],137:[2,87],138:[2,87]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],69:[2,105],71:[2,105],73:[2,105],74:[2,105],78:[2,105],84:[2,105],85:[2,105],86:[2,105],91:[2,105],93:[2,105],102:[2,105],104:[2,105],105:[2,105],106:[2,105],110:[2,105],118:[2,105],126:[2,105],128:[2,105],129:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105],137:[2,105]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],73:[2,36],78:[2,36],86:[2,36],91:[2,36],93:[2,36],102:[2,36],103:87,104:[2,36],105:[2,36],106:[2,36],109:88,110:[2,36],111:69,118:[2,36],126:[2,36],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:244,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:245,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],69:[2,110],71:[2,110],73:[2,110],74:[2,110],78:[2,110],84:[2,110],85:[2,110],86:[2,110],91:[2,110],93:[2,110],102:[2,110],104:[2,110],105:[2,110],106:[2,110],110:[2,110],118:[2,110],126:[2,110],128:[2,110],129:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110],137:[2,110]},{6:[2,53],25:[2,53],53:246,54:[1,229],86:[2,53]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],57:[1,247],86:[2,129],91:[2,129],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{50:248,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:110,28:[1,73],44:111,55:249,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[1,250],25:[1,251]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:252,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],73:[2,201],78:[2,201],86:[2,201],91:[2,201],93:[2,201],102:[2,201],103:87,104:[2,201],105:[2,201],106:[2,201],109:88,110:[2,201],111:69,118:[2,201],126:[2,201],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:253,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:254,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,204],6:[2,204],25:[2,204],26:[2,204],49:[2,204],54:[2,204],57:[2,204],73:[2,204],78:[2,204],86:[2,204],91:[2,204],93:[2,204],102:[2,204],103:87,104:[2,204],105:[2,204],106:[2,204],109:88,110:[2,204],111:69,118:[2,204],126:[2,204],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],73:[2,183],78:[2,183],86:[2,183],91:[2,183],93:[2,183],102:[2,183],104:[2,183],105:[2,183],106:[2,183],110:[2,183],118:[2,183],126:[2,183],128:[2,183],129:[2,183],132:[2,183],133:[2,183],134:[2,183],135:[2,183],136:[2,183],137:[2,183]},{8:255,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],73:[2,134],78:[2,134],86:[2,134],91:[2,134],93:[2,134],98:[1,256],102:[2,134],104:[2,134],105:[2,134],106:[2,134],110:[2,134],118:[2,134],126:[2,134],128:[2,134],129:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134],137:[2,134]},{5:257,25:[1,5]},{27:258,28:[1,73],59:259,76:[1,70]},{120:260,122:219,123:[1,220]},{26:[1,261],121:[1,262],122:263,123:[1,220]},{26:[2,176],121:[2,176],123:[2,176]},{8:265,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],95:264,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,98],5:266,6:[2,98],25:[1,5],26:[2,98],49:[2,98],54:[2,98],57:[2,98],73:[2,98],78:[2,98],86:[2,98],91:[2,98],93:[2,98],102:[2,98],103:87,104:[1,65],105:[2,98],106:[1,66],109:88,110:[1,68],111:69,118:[2,98],126:[2,98],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],49:[2,101],54:[2,101],57:[2,101],73:[2,101],78:[2,101],86:[2,101],91:[2,101],93:[2,101],102:[2,101],104:[2,101],105:[2,101],106:[2,101],110:[2,101],118:[2,101],126:[2,101],128:[2,101],129:[2,101],132:[2,101],133:[2,101],134:[2,101],135:[2,101],136:[2,101],137:[2,101]},{8:267,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],66:[2,140],67:[2,140],68:[2,140],69:[2,140],71:[2,140],73:[2,140],74:[2,140],78:[2,140],84:[2,140],85:[2,140],86:[2,140],91:[2,140],93:[2,140],102:[2,140],104:[2,140],105:[2,140],106:[2,140],110:[2,140],118:[2,140],126:[2,140],128:[2,140],129:[2,140],132:[2,140],133:[2,140],134:[2,140],135:[2,140],136:[2,140],137:[2,140]},{6:[1,74],26:[1,268]},{8:269,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,67],12:[2,118],25:[2,67],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],54:[2,67],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],91:[2,67],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{6:[1,271],25:[1,272],91:[1,270]},{6:[2,54],8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[2,54],88:[1,58],89:[1,59],90:[1,57],91:[2,54],94:273,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:274,54:[1,229]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],73:[2,180],78:[2,180],86:[2,180],91:[2,180],93:[2,180],102:[2,180],104:[2,180],105:[2,180],106:[2,180],110:[2,180],118:[2,180],121:[2,180],126:[2,180],128:[2,180],129:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180],137:[2,180]},{8:275,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:276,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{116:[2,158],117:[2,158]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],115:277},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],73:[2,165],78:[2,165],86:[2,165],91:[2,165],93:[2,165],102:[2,165],103:87,104:[2,165],105:[1,278],106:[2,165],109:88,110:[2,165],111:69,118:[1,279],126:[2,165],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],73:[2,166],78:[2,166],86:[2,166],91:[2,166],93:[2,166],102:[2,166],103:87,104:[2,166],105:[1,280],106:[2,166],109:88,110:[2,166],111:69,118:[2,166],126:[2,166],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,282],25:[1,283],78:[1,281]},{6:[2,54],11:169,25:[2,54],26:[2,54],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:284,42:168,44:172,46:[1,46],78:[2,54],89:[1,114]},{8:285,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,286],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],69:[2,86],71:[2,86],73:[2,86],74:[2,86],78:[2,86],80:[2,86],84:[2,86],85:[2,86],86:[2,86],91:[2,86],93:[2,86],102:[2,86],104:[2,86],105:[2,86],106:[2,86],110:[2,86],118:[2,86],126:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86]},{8:287,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,121],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,122],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],73:[2,37],78:[2,37],86:[2,37],91:[2,37],93:[2,37],102:[2,37],103:87,104:[2,37],105:[2,37],106:[2,37],109:88,110:[2,37],111:69,118:[2,37],126:[2,37],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,288],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,271],25:[1,272],86:[1,289]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],86:[2,67],91:[2,67]},{5:290,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:110,28:[1,73],44:111,55:291,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,55],25:[2,55],26:[2,55],27:110,28:[1,73],44:111,48:292,54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,293],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],73:[2,203],78:[2,203],86:[2,203],91:[2,203],93:[2,203],102:[2,203],103:87,104:[2,203],105:[2,203],106:[2,203],109:88,110:[2,203],111:69,118:[2,203],126:[2,203],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:294,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:295,25:[1,5]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],73:[2,135],78:[2,135],86:[2,135],91:[2,135],93:[2,135],102:[2,135],104:[2,135],105:[2,135],106:[2,135],110:[2,135],118:[2,135],126:[2,135],128:[2,135],129:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135],137:[2,135]},{5:296,25:[1,5]},{5:297,25:[1,5]},{26:[1,298],121:[1,299],122:263,123:[1,220]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],73:[2,174],78:[2,174],86:[2,174],91:[2,174],93:[2,174],102:[2,174],104:[2,174],105:[2,174],106:[2,174],110:[2,174],118:[2,174],126:[2,174],128:[2,174],129:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174],137:[2,174]},{5:300,25:[1,5]},{26:[2,177],121:[2,177],123:[2,177]},{5:301,25:[1,5],54:[1,302]},{25:[2,131],54:[2,131],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],49:[2,99],54:[2,99],57:[2,99],73:[2,99],78:[2,99],86:[2,99],91:[2,99],93:[2,99],102:[2,99],104:[2,99],105:[2,99],106:[2,99],110:[2,99],118:[2,99],126:[2,99],128:[2,99],129:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99],137:[2,99]},{1:[2,102],5:303,6:[2,102],25:[1,5],26:[2,102],49:[2,102],54:[2,102],57:[2,102],73:[2,102],78:[2,102],86:[2,102],91:[2,102],93:[2,102],102:[2,102],103:87,104:[1,65],105:[2,102],106:[1,66],109:88,110:[1,68],111:69,118:[2,102],126:[2,102],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{102:[1,304]},{91:[1,305],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,116],6:[2,116],25:[2,116],26:[2,116],40:[2,116],49:[2,116],54:[2,116],57:[2,116],66:[2,116],67:[2,116],68:[2,116],69:[2,116],71:[2,116],73:[2,116],74:[2,116],78:[2,116],84:[2,116],85:[2,116],86:[2,116],91:[2,116],93:[2,116],102:[2,116],104:[2,116],105:[2,116],106:[2,116],110:[2,116],116:[2,116],117:[2,116],118:[2,116],126:[2,116],128:[2,116],129:[2,116],132:[2,116],133:[2,116],134:[2,116],135:[2,116],136:[2,116],137:[2,116]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],94:306,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:307,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],86:[2,125],91:[2,125]},{6:[1,271],25:[1,272],26:[1,308]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],73:[2,143],78:[2,143],86:[2,143],91:[2,143],93:[2,143],102:[2,143],103:87,104:[1,65],105:[2,143],106:[1,66],109:88,110:[1,68],111:69,118:[2,143],126:[2,143],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],73:[2,145],78:[2,145],86:[2,145],91:[2,145],93:[2,145],102:[2,145],103:87,104:[1,65],105:[2,145],106:[1,66],109:88,110:[1,68],111:69,118:[2,145],126:[2,145],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{116:[2,164],117:[2,164]},{8:309,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:310,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:311,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,90],6:[2,90],25:[2,90],26:[2,90],40:[2,90],49:[2,90],54:[2,90],57:[2,90],66:[2,90],67:[2,90],68:[2,90],69:[2,90],71:[2,90],73:[2,90],74:[2,90],78:[2,90],84:[2,90],85:[2,90],86:[2,90],91:[2,90],93:[2,90],102:[2,90],104:[2,90],105:[2,90],106:[2,90],110:[2,90],116:[2,90],117:[2,90],118:[2,90],126:[2,90],128:[2,90],129:[2,90],132:[2,90],133:[2,90],134:[2,90],135:[2,90],136:[2,90],137:[2,90]},{11:169,27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:312,42:168,44:172,46:[1,46],89:[1,114]},{6:[2,91],11:169,25:[2,91],26:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:313,89:[1,114]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],78:[2,93]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],78:[2,40],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:314,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,120],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],73:[2,38],78:[2,38],86:[2,38],91:[2,38],93:[2,38],102:[2,38],104:[2,38],105:[2,38],106:[2,38],110:[2,38],118:[2,38],126:[2,38],128:[2,38],129:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38],137:[2,38]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],69:[2,111],71:[2,111],73:[2,111],74:[2,111],78:[2,111],84:[2,111],85:[2,111],86:[2,111],91:[2,111],93:[2,111],102:[2,111],104:[2,111],105:[2,111],106:[2,111],110:[2,111],118:[2,111],126:[2,111],128:[2,111],129:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111],137:[2,111]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],73:[2,49],78:[2,49],86:[2,49],91:[2,49],93:[2,49],102:[2,49],104:[2,49],105:[2,49],106:[2,49],110:[2,49],118:[2,49],126:[2,49],128:[2,49],129:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49],137:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:315,54:[1,204]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],73:[2,202],78:[2,202],86:[2,202],91:[2,202],93:[2,202],102:[2,202],104:[2,202],105:[2,202],106:[2,202],110:[2,202],118:[2,202],126:[2,202],128:[2,202],129:[2,202],132:[2,202],133:[2,202],134:[2,202],135:[2,202],136:[2,202],137:[2,202]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],73:[2,181],78:[2,181],86:[2,181],91:[2,181],93:[2,181],102:[2,181],104:[2,181],105:[2,181],106:[2,181],110:[2,181],118:[2,181],121:[2,181],126:[2,181],128:[2,181],129:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181],137:[2,181]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],73:[2,136],78:[2,136],86:[2,136],91:[2,136],93:[2,136],102:[2,136],104:[2,136],105:[2,136],106:[2,136],110:[2,136],118:[2,136],126:[2,136],128:[2,136],129:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136],137:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],73:[2,137],78:[2,137],86:[2,137],91:[2,137],93:[2,137],98:[2,137],102:[2,137],104:[2,137],105:[2,137],106:[2,137],110:[2,137],118:[2,137],126:[2,137],128:[2,137],129:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137],137:[2,137]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],73:[2,138],78:[2,138],86:[2,138],91:[2,138],93:[2,138],98:[2,138],102:[2,138],104:[2,138],105:[2,138],106:[2,138],110:[2,138],118:[2,138],126:[2,138],128:[2,138],129:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138],137:[2,138]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],73:[2,172],78:[2,172],86:[2,172],91:[2,172],93:[2,172],102:[2,172],104:[2,172],105:[2,172],106:[2,172],110:[2,172],118:[2,172],126:[2,172],128:[2,172],129:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172],137:[2,172]},{5:316,25:[1,5]},{26:[1,317]},{6:[1,318],26:[2,178],121:[2,178],123:[2,178]},{8:319,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],73:[2,103],78:[2,103],86:[2,103],91:[2,103],93:[2,103],102:[2,103],104:[2,103],105:[2,103],106:[2,103],110:[2,103],118:[2,103],126:[2,103],128:[2,103],129:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103],137:[2,103]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],66:[2,141],67:[2,141],68:[2,141],69:[2,141],71:[2,141],73:[2,141],74:[2,141],78:[2,141],84:[2,141],85:[2,141],86:[2,141],91:[2,141],93:[2,141],102:[2,141],104:[2,141],105:[2,141],106:[2,141],110:[2,141],118:[2,141],126:[2,141],128:[2,141],129:[2,141],132:[2,141],133:[2,141],134:[2,141],135:[2,141],136:[2,141],137:[2,141]},{1:[2,119],6:[2,119],25:[2,119],26:[2,119],49:[2,119],54:[2,119],57:[2,119],66:[2,119],67:[2,119],68:[2,119],69:[2,119],71:[2,119],73:[2,119],74:[2,119],78:[2,119],84:[2,119],85:[2,119],86:[2,119],91:[2,119],93:[2,119],102:[2,119],104:[2,119],105:[2,119],106:[2,119],110:[2,119],118:[2,119],126:[2,119],128:[2,119],129:[2,119],132:[2,119],133:[2,119],134:[2,119],135:[2,119],136:[2,119],137:[2,119]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],86:[2,126],91:[2,126]},{6:[2,53],25:[2,53],26:[2,53],53:320,54:[1,229]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],86:[2,127],91:[2,127]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],73:[2,167],78:[2,167],86:[2,167],91:[2,167],93:[2,167],102:[2,167],103:87,104:[2,167],105:[2,167],106:[2,167],109:88,110:[2,167],111:69,118:[1,321],126:[2,167],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],73:[2,169],78:[2,169],86:[2,169],91:[2,169],93:[2,169],102:[2,169],103:87,104:[2,169],105:[1,322],106:[2,169],109:88,110:[2,169],111:69,118:[2,169],126:[2,169],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],73:[2,168],78:[2,168],86:[2,168],91:[2,168],93:[2,168],102:[2,168],103:87,104:[2,168],105:[2,168],106:[2,168],109:88,110:[2,168],111:69,118:[2,168],126:[2,168],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],78:[2,94]},{6:[2,53],25:[2,53],26:[2,53],53:323,54:[1,239]},{26:[1,324],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,250],25:[1,251],26:[1,325]},{26:[1,326]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],49:[2,175],54:[2,175],57:[2,175],73:[2,175],78:[2,175],86:[2,175],91:[2,175],93:[2,175],102:[2,175],104:[2,175],105:[2,175],106:[2,175],110:[2,175],118:[2,175],126:[2,175],128:[2,175],129:[2,175],132:[2,175],133:[2,175],134:[2,175],135:[2,175],136:[2,175],137:[2,175]},{26:[2,179],121:[2,179],123:[2,179]},{25:[2,132],54:[2,132],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,271],25:[1,272],26:[1,327]},{8:328,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:329,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[1,282],25:[1,283],26:[1,330]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],78:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],73:[2,173],78:[2,173],86:[2,173],91:[2,173],93:[2,173],102:[2,173],104:[2,173],105:[2,173],106:[2,173],110:[2,173],118:[2,173],126:[2,173],128:[2,173],129:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173],137:[2,173]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],86:[2,128],91:[2,128]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],73:[2,170],78:[2,170],86:[2,170],91:[2,170],93:[2,170],102:[2,170],103:87,104:[2,170],105:[2,170],106:[2,170],109:88,110:[2,170],111:69,118:[2,170],126:[2,170],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],73:[2,171],78:[2,171],86:[2,171],91:[2,171],93:[2,171],102:[2,171],103:87,104:[2,171],105:[2,171],106:[2,171],109:88,110:[2,171],111:69,118:[2,171],126:[2,171],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,95],25:[2,95],26:[2,95],54:[2,95],78:[2,95]}],
     482table: [{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],102:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,7],6:[2,7],26:[2,7],102:[2,7],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,8],6:[2,8],26:[2,8],102:[2,8],103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,12],74:[1,101],78:[2,12],81:92,84:[1,94],85:[2,108],86:[2,12],91:[2,12],93:[2,12],102:[2,12],104:[2,12],105:[2,12],106:[2,12],110:[2,12],118:[2,12],126:[2,12],128:[2,12],129:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12],137:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,13],74:[1,101],78:[2,13],81:102,84:[1,94],85:[2,108],86:[2,13],91:[2,13],93:[2,13],102:[2,13],104:[2,13],105:[2,13],106:[2,13],110:[2,13],118:[2,13],126:[2,13],128:[2,13],129:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13],137:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],73:[2,14],78:[2,14],86:[2,14],91:[2,14],93:[2,14],102:[2,14],104:[2,14],105:[2,14],106:[2,14],110:[2,14],118:[2,14],126:[2,14],128:[2,14],129:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14],137:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],73:[2,15],78:[2,15],86:[2,15],91:[2,15],93:[2,15],102:[2,15],104:[2,15],105:[2,15],106:[2,15],110:[2,15],118:[2,15],126:[2,15],128:[2,15],129:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15],137:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],73:[2,16],78:[2,16],86:[2,16],91:[2,16],93:[2,16],102:[2,16],104:[2,16],105:[2,16],106:[2,16],110:[2,16],118:[2,16],126:[2,16],128:[2,16],129:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16],137:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],73:[2,17],78:[2,17],86:[2,17],91:[2,17],93:[2,17],102:[2,17],104:[2,17],105:[2,17],106:[2,17],110:[2,17],118:[2,17],126:[2,17],128:[2,17],129:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17],137:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],73:[2,18],78:[2,18],86:[2,18],91:[2,18],93:[2,18],102:[2,18],104:[2,18],105:[2,18],106:[2,18],110:[2,18],118:[2,18],126:[2,18],128:[2,18],129:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18],137:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],73:[2,19],78:[2,19],86:[2,19],91:[2,19],93:[2,19],102:[2,19],104:[2,19],105:[2,19],106:[2,19],110:[2,19],118:[2,19],126:[2,19],128:[2,19],129:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19],137:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],73:[2,20],78:[2,20],86:[2,20],91:[2,20],93:[2,20],102:[2,20],104:[2,20],105:[2,20],106:[2,20],110:[2,20],118:[2,20],126:[2,20],128:[2,20],129:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20],137:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],73:[2,21],78:[2,21],86:[2,21],91:[2,21],93:[2,21],102:[2,21],104:[2,21],105:[2,21],106:[2,21],110:[2,21],118:[2,21],126:[2,21],128:[2,21],129:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21],137:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],73:[2,22],78:[2,22],86:[2,22],91:[2,22],93:[2,22],102:[2,22],104:[2,22],105:[2,22],106:[2,22],110:[2,22],118:[2,22],126:[2,22],128:[2,22],129:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22],137:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],73:[2,23],78:[2,23],86:[2,23],91:[2,23],93:[2,23],102:[2,23],104:[2,23],105:[2,23],106:[2,23],110:[2,23],118:[2,23],126:[2,23],128:[2,23],129:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23],137:[2,23]},{1:[2,9],6:[2,9],26:[2,9],102:[2,9],104:[2,9],106:[2,9],110:[2,9],126:[2,9]},{1:[2,10],6:[2,10],26:[2,10],102:[2,10],104:[2,10],106:[2,10],110:[2,10],126:[2,10]},{1:[2,11],6:[2,11],26:[2,11],102:[2,11],104:[2,11],106:[2,11],110:[2,11],126:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,104],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],73:[2,75],74:[2,75],78:[2,75],84:[2,75],85:[2,75],86:[2,75],91:[2,75],93:[2,75],102:[2,75],104:[2,75],105:[2,75],106:[2,75],110:[2,75],118:[2,75],126:[2,75],128:[2,75],129:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],69:[2,76],71:[2,76],73:[2,76],74:[2,76],78:[2,76],84:[2,76],85:[2,76],86:[2,76],91:[2,76],93:[2,76],102:[2,76],104:[2,76],105:[2,76],106:[2,76],110:[2,76],118:[2,76],126:[2,76],128:[2,76],129:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76],137:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],69:[2,77],71:[2,77],73:[2,77],74:[2,77],78:[2,77],84:[2,77],85:[2,77],86:[2,77],91:[2,77],93:[2,77],102:[2,77],104:[2,77],105:[2,77],106:[2,77],110:[2,77],118:[2,77],126:[2,77],128:[2,77],129:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77],137:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],69:[2,78],71:[2,78],73:[2,78],74:[2,78],78:[2,78],84:[2,78],85:[2,78],86:[2,78],91:[2,78],93:[2,78],102:[2,78],104:[2,78],105:[2,78],106:[2,78],110:[2,78],118:[2,78],126:[2,78],128:[2,78],129:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78],137:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],69:[2,79],71:[2,79],73:[2,79],74:[2,79],78:[2,79],84:[2,79],85:[2,79],86:[2,79],91:[2,79],93:[2,79],102:[2,79],104:[2,79],105:[2,79],106:[2,79],110:[2,79],118:[2,79],126:[2,79],128:[2,79],129:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79],137:[2,79]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],69:[2,106],71:[2,106],73:[2,106],74:[2,106],78:[2,106],82:105,84:[2,106],85:[1,106],86:[2,106],91:[2,106],93:[2,106],102:[2,106],104:[2,106],105:[2,106],106:[2,106],110:[2,106],118:[2,106],126:[2,106],128:[2,106],129:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106],137:[2,106]},{6:[2,55],25:[2,55],27:110,28:[1,73],44:111,48:107,49:[2,55],54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{5:116,25:[1,5]},{8:117,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:119,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:120,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:121,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:125,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,72],74:[2,72],78:[2,72],80:[1,129],84:[2,72],85:[2,72],86:[2,72],91:[2,72],93:[2,72],102:[2,72],104:[2,72],105:[2,72],106:[2,72],110:[2,72],118:[2,72],126:[2,72],128:[2,72],129:[2,72],130:[1,126],131:[1,127],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72],138:[1,128]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],73:[2,183],78:[2,183],86:[2,183],91:[2,183],93:[2,183],102:[2,183],104:[2,183],105:[2,183],106:[2,183],110:[2,183],118:[2,183],121:[1,130],126:[2,183],128:[2,183],129:[2,183],132:[2,183],133:[2,183],134:[2,183],135:[2,183],136:[2,183],137:[2,183]},{5:131,25:[1,5]},{5:132,25:[1,5]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],73:[2,150],78:[2,150],86:[2,150],91:[2,150],93:[2,150],102:[2,150],104:[2,150],105:[2,150],106:[2,150],110:[2,150],118:[2,150],126:[2,150],128:[2,150],129:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150],137:[2,150]},{5:133,25:[1,5]},{8:134,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,135],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,96],5:136,6:[2,96],13:122,14:123,25:[1,5],26:[2,96],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,49:[2,96],54:[2,96],57:[2,96],58:47,59:48,61:138,63:25,64:26,65:27,73:[2,96],76:[1,70],78:[2,96],80:[1,137],83:[1,28],86:[2,96],88:[1,58],89:[1,59],90:[1,57],91:[2,96],93:[2,96],101:[1,56],102:[2,96],104:[2,96],105:[2,96],106:[2,96],110:[2,96],118:[2,96],126:[2,96],128:[2,96],129:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96],137:[2,96]},{8:139,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,47],6:[2,47],8:140,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,47],103:39,104:[2,47],106:[2,47],107:40,108:[1,67],109:41,110:[2,47],111:69,119:[1,42],124:37,125:[1,64],126:[2,47],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],78:[2,48],102:[2,48],104:[2,48],106:[2,48],110:[2,48],126:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],69:[2,73],71:[2,73],73:[2,73],74:[2,73],78:[2,73],84:[2,73],85:[2,73],86:[2,73],91:[2,73],93:[2,73],102:[2,73],104:[2,73],105:[2,73],106:[2,73],110:[2,73],118:[2,73],126:[2,73],128:[2,73],129:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],73:[2,74],74:[2,74],78:[2,74],84:[2,74],85:[2,74],86:[2,74],91:[2,74],93:[2,74],102:[2,74],104:[2,74],105:[2,74],106:[2,74],110:[2,74],118:[2,74],126:[2,74],128:[2,74],129:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],69:[2,29],71:[2,29],73:[2,29],74:[2,29],78:[2,29],84:[2,29],85:[2,29],86:[2,29],91:[2,29],93:[2,29],102:[2,29],104:[2,29],105:[2,29],106:[2,29],110:[2,29],118:[2,29],126:[2,29],128:[2,29],129:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],69:[2,30],71:[2,30],73:[2,30],74:[2,30],78:[2,30],84:[2,30],85:[2,30],86:[2,30],91:[2,30],93:[2,30],102:[2,30],104:[2,30],105:[2,30],106:[2,30],110:[2,30],118:[2,30],126:[2,30],128:[2,30],129:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30],137:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],69:[2,31],71:[2,31],73:[2,31],74:[2,31],78:[2,31],84:[2,31],85:[2,31],86:[2,31],91:[2,31],93:[2,31],102:[2,31],104:[2,31],105:[2,31],106:[2,31],110:[2,31],118:[2,31],126:[2,31],128:[2,31],129:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31],137:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],69:[2,32],71:[2,32],73:[2,32],74:[2,32],78:[2,32],84:[2,32],85:[2,32],86:[2,32],91:[2,32],93:[2,32],102:[2,32],104:[2,32],105:[2,32],106:[2,32],110:[2,32],118:[2,32],126:[2,32],128:[2,32],129:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32],137:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],69:[2,33],71:[2,33],73:[2,33],74:[2,33],78:[2,33],84:[2,33],85:[2,33],86:[2,33],91:[2,33],93:[2,33],102:[2,33],104:[2,33],105:[2,33],106:[2,33],110:[2,33],118:[2,33],126:[2,33],128:[2,33],129:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33],137:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],69:[2,34],71:[2,34],73:[2,34],74:[2,34],78:[2,34],84:[2,34],85:[2,34],86:[2,34],91:[2,34],93:[2,34],102:[2,34],104:[2,34],105:[2,34],106:[2,34],110:[2,34],118:[2,34],126:[2,34],128:[2,34],129:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34],137:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],69:[2,35],71:[2,35],73:[2,35],74:[2,35],78:[2,35],84:[2,35],85:[2,35],86:[2,35],91:[2,35],93:[2,35],102:[2,35],104:[2,35],105:[2,35],106:[2,35],110:[2,35],118:[2,35],126:[2,35],128:[2,35],129:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35],137:[2,35]},{4:141,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,142],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:143,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],69:[2,112],71:[2,112],73:[2,112],74:[2,112],78:[2,112],84:[2,112],85:[2,112],86:[2,112],91:[2,112],93:[2,112],102:[2,112],104:[2,112],105:[2,112],106:[2,112],110:[2,112],118:[2,112],126:[2,112],128:[2,112],129:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112],137:[2,112]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],27:149,28:[1,73],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],69:[2,113],71:[2,113],73:[2,113],74:[2,113],78:[2,113],84:[2,113],85:[2,113],86:[2,113],91:[2,113],93:[2,113],102:[2,113],104:[2,113],105:[2,113],106:[2,113],110:[2,113],118:[2,113],126:[2,113],128:[2,113],129:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],69:[2,68],71:[2,68],73:[2,68],74:[2,68],78:[2,68],80:[2,68],84:[2,68],85:[2,68],86:[2,68],91:[2,68],93:[2,68],102:[2,68],104:[2,68],105:[2,68],106:[2,68],110:[2,68],118:[2,68],126:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68],138:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,71],74:[2,71],78:[2,71],80:[2,71],84:[2,71],85:[2,71],86:[2,71],91:[2,71],93:[2,71],102:[2,71],104:[2,71],105:[2,71],106:[2,71],110:[2,71],118:[2,71],126:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71],138:[2,71]},{8:150,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:151,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:152,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:153,8:154,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{27:159,28:[1,73],44:160,58:161,59:162,64:155,76:[1,70],89:[1,114],90:[1,57],113:156,114:[1,157],115:158},{112:163,116:[1,164],117:[1,165]},{6:[2,91],11:169,25:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:166,78:[2,91],89:[1,114]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],69:[2,27],71:[2,27],73:[2,27],74:[2,27],78:[2,27],84:[2,27],85:[2,27],86:[2,27],91:[2,27],93:[2,27],102:[2,27],104:[2,27],105:[2,27],106:[2,27],110:[2,27],118:[2,27],126:[2,27],128:[2,27],129:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27],137:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],69:[2,28],71:[2,28],73:[2,28],74:[2,28],78:[2,28],84:[2,28],85:[2,28],86:[2,28],91:[2,28],93:[2,28],102:[2,28],104:[2,28],105:[2,28],106:[2,28],110:[2,28],118:[2,28],126:[2,28],128:[2,28],129:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28],137:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],69:[2,26],71:[2,26],73:[2,26],74:[2,26],78:[2,26],80:[2,26],84:[2,26],85:[2,26],86:[2,26],91:[2,26],93:[2,26],102:[2,26],104:[2,26],105:[2,26],106:[2,26],110:[2,26],116:[2,26],117:[2,26],118:[2,26],126:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26],138:[2,26]},{1:[2,6],6:[2,6],7:173,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,6],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],73:[2,24],78:[2,24],86:[2,24],91:[2,24],93:[2,24],98:[2,24],99:[2,24],102:[2,24],104:[2,24],105:[2,24],106:[2,24],110:[2,24],118:[2,24],121:[2,24],123:[2,24],126:[2,24],128:[2,24],129:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24],137:[2,24]},{6:[1,74],26:[1,174]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],73:[2,194],78:[2,194],86:[2,194],91:[2,194],93:[2,194],102:[2,194],104:[2,194],105:[2,194],106:[2,194],110:[2,194],118:[2,194],126:[2,194],128:[2,194],129:[2,194],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194],137:[2,194]},{8:175,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:176,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:177,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:178,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:179,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:180,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:181,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:182,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],73:[2,149],78:[2,149],86:[2,149],91:[2,149],93:[2,149],102:[2,149],104:[2,149],105:[2,149],106:[2,149],110:[2,149],118:[2,149],126:[2,149],128:[2,149],129:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149],137:[2,149]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],73:[2,154],78:[2,154],86:[2,154],91:[2,154],93:[2,154],102:[2,154],104:[2,154],105:[2,154],106:[2,154],110:[2,154],118:[2,154],126:[2,154],128:[2,154],129:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154],137:[2,154]},{8:183,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],73:[2,148],78:[2,148],86:[2,148],91:[2,148],93:[2,148],102:[2,148],104:[2,148],105:[2,148],106:[2,148],110:[2,148],118:[2,148],126:[2,148],128:[2,148],129:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148],137:[2,148]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],73:[2,153],78:[2,153],86:[2,153],91:[2,153],93:[2,153],102:[2,153],104:[2,153],105:[2,153],106:[2,153],110:[2,153],118:[2,153],126:[2,153],128:[2,153],129:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153],137:[2,153]},{82:184,85:[1,106]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],69:[2,69],71:[2,69],73:[2,69],74:[2,69],78:[2,69],80:[2,69],84:[2,69],85:[2,69],86:[2,69],91:[2,69],93:[2,69],102:[2,69],104:[2,69],105:[2,69],106:[2,69],110:[2,69],118:[2,69],126:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69],138:[2,69]},{85:[2,109]},{27:185,28:[1,73]},{27:186,28:[1,73]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],27:187,28:[1,73],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],69:[2,84],71:[2,84],73:[2,84],74:[2,84],78:[2,84],80:[2,84],84:[2,84],85:[2,84],86:[2,84],91:[2,84],93:[2,84],102:[2,84],104:[2,84],105:[2,84],106:[2,84],110:[2,84],118:[2,84],126:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84]},{27:188,28:[1,73]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],69:[2,85],71:[2,85],73:[2,85],74:[2,85],78:[2,85],80:[2,85],84:[2,85],85:[2,85],86:[2,85],91:[2,85],93:[2,85],102:[2,85],104:[2,85],105:[2,85],106:[2,85],110:[2,85],118:[2,85],126:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85]},{8:190,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,194],58:47,59:48,61:36,63:25,64:26,65:27,72:189,75:191,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],92:192,93:[1,193],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{70:195,71:[1,100],74:[1,101]},{82:196,85:[1,106]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],69:[2,70],71:[2,70],73:[2,70],74:[2,70],78:[2,70],80:[2,70],84:[2,70],85:[2,70],86:[2,70],91:[2,70],93:[2,70],102:[2,70],104:[2,70],105:[2,70],106:[2,70],110:[2,70],118:[2,70],126:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70],138:[2,70]},{6:[1,198],8:197,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,199],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],49:[2,107],54:[2,107],57:[2,107],66:[2,107],67:[2,107],68:[2,107],69:[2,107],71:[2,107],73:[2,107],74:[2,107],78:[2,107],84:[2,107],85:[2,107],86:[2,107],91:[2,107],93:[2,107],102:[2,107],104:[2,107],105:[2,107],106:[2,107],110:[2,107],118:[2,107],126:[2,107],128:[2,107],129:[2,107],132:[2,107],133:[2,107],134:[2,107],135:[2,107],136:[2,107],137:[2,107]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[1,200],87:201,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],49:[1,203],53:205,54:[1,204]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,207],49:[2,60],54:[2,60],57:[1,206]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:149,28:[1,73]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],73:[2,50],78:[2,50],86:[2,50],91:[2,50],93:[2,50],102:[2,50],104:[2,50],105:[2,50],106:[2,50],110:[2,50],118:[2,50],126:[2,50],128:[2,50],129:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50],137:[2,50]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],73:[2,187],78:[2,187],86:[2,187],91:[2,187],93:[2,187],102:[2,187],103:87,104:[2,187],105:[2,187],106:[2,187],109:88,110:[2,187],111:69,118:[2,187],126:[2,187],128:[2,187],129:[2,187],132:[1,78],133:[2,187],134:[2,187],135:[2,187],136:[2,187],137:[2,187]},{103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],73:[2,188],78:[2,188],86:[2,188],91:[2,188],93:[2,188],102:[2,188],103:87,104:[2,188],105:[2,188],106:[2,188],109:88,110:[2,188],111:69,118:[2,188],126:[2,188],128:[2,188],129:[2,188],132:[1,78],133:[2,188],134:[2,188],135:[2,188],136:[2,188],137:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],73:[2,189],78:[2,189],86:[2,189],91:[2,189],93:[2,189],102:[2,189],103:87,104:[2,189],105:[2,189],106:[2,189],109:88,110:[2,189],111:69,118:[2,189],126:[2,189],128:[2,189],129:[2,189],132:[1,78],133:[2,189],134:[2,189],135:[2,189],136:[2,189],137:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,190],74:[2,72],78:[2,190],84:[2,72],85:[2,72],86:[2,190],91:[2,190],93:[2,190],102:[2,190],104:[2,190],105:[2,190],106:[2,190],110:[2,190],118:[2,190],126:[2,190],128:[2,190],129:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190],137:[2,190]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:92,84:[1,94],85:[2,108]},{62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:102,84:[1,94],85:[2,108]},{66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],74:[2,75],84:[2,75],85:[2,75]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,191],74:[2,72],78:[2,191],84:[2,72],85:[2,72],86:[2,191],91:[2,191],93:[2,191],102:[2,191],104:[2,191],105:[2,191],106:[2,191],110:[2,191],118:[2,191],126:[2,191],128:[2,191],129:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191],137:[2,191]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],73:[2,192],78:[2,192],86:[2,192],91:[2,192],93:[2,192],102:[2,192],104:[2,192],105:[2,192],106:[2,192],110:[2,192],118:[2,192],126:[2,192],128:[2,192],129:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192],137:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],73:[2,193],78:[2,193],86:[2,193],91:[2,193],93:[2,193],102:[2,193],104:[2,193],105:[2,193],106:[2,193],110:[2,193],118:[2,193],126:[2,193],128:[2,193],129:[2,193],132:[2,193],133:[2,193],134:[2,193],135:[2,193],136:[2,193],137:[2,193]},{6:[1,210],8:208,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,209],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:211,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:212,25:[1,5],125:[1,213]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],73:[2,133],78:[2,133],86:[2,133],91:[2,133],93:[2,133],97:214,98:[1,215],99:[1,216],102:[2,133],104:[2,133],105:[2,133],106:[2,133],110:[2,133],118:[2,133],126:[2,133],128:[2,133],129:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133],137:[2,133]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],73:[2,147],78:[2,147],86:[2,147],91:[2,147],93:[2,147],102:[2,147],104:[2,147],105:[2,147],106:[2,147],110:[2,147],118:[2,147],126:[2,147],128:[2,147],129:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147],137:[2,147]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],73:[2,155],78:[2,155],86:[2,155],91:[2,155],93:[2,155],102:[2,155],104:[2,155],105:[2,155],106:[2,155],110:[2,155],118:[2,155],126:[2,155],128:[2,155],129:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155],137:[2,155]},{25:[1,217],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{120:218,122:219,123:[1,220]},{1:[2,97],6:[2,97],25:[2,97],26:[2,97],49:[2,97],54:[2,97],57:[2,97],73:[2,97],78:[2,97],86:[2,97],91:[2,97],93:[2,97],102:[2,97],104:[2,97],105:[2,97],106:[2,97],110:[2,97],118:[2,97],126:[2,97],128:[2,97],129:[2,97],132:[2,97],133:[2,97],134:[2,97],135:[2,97],136:[2,97],137:[2,97]},{8:221,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,100],5:222,6:[2,100],25:[1,5],26:[2,100],49:[2,100],54:[2,100],57:[2,100],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,100],74:[2,72],78:[2,100],80:[1,223],84:[2,72],85:[2,72],86:[2,100],91:[2,100],93:[2,100],102:[2,100],104:[2,100],105:[2,100],106:[2,100],110:[2,100],118:[2,100],126:[2,100],128:[2,100],129:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100],137:[2,100]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],73:[2,140],78:[2,140],86:[2,140],91:[2,140],93:[2,140],102:[2,140],103:87,104:[2,140],105:[2,140],106:[2,140],109:88,110:[2,140],111:69,118:[2,140],126:[2,140],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,46],6:[2,46],26:[2,46],102:[2,46],103:87,104:[2,46],106:[2,46],109:88,110:[2,46],111:69,126:[2,46],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,74],102:[1,224]},{4:225,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,129],25:[2,129],54:[2,129],57:[1,227],91:[2,129],92:226,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],69:[2,115],71:[2,115],73:[2,115],74:[2,115],78:[2,115],84:[2,115],85:[2,115],86:[2,115],91:[2,115],93:[2,115],102:[2,115],104:[2,115],105:[2,115],106:[2,115],110:[2,115],116:[2,115],117:[2,115],118:[2,115],126:[2,115],128:[2,115],129:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115],137:[2,115]},{6:[2,53],25:[2,53],53:228,54:[1,229],91:[2,53]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],86:[2,124],91:[2,124]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:230,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,130],25:[2,130],26:[2,130],54:[2,130],86:[2,130],91:[2,130]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],43:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],69:[2,114],71:[2,114],73:[2,114],74:[2,114],78:[2,114],80:[2,114],84:[2,114],85:[2,114],86:[2,114],91:[2,114],93:[2,114],102:[2,114],104:[2,114],105:[2,114],106:[2,114],110:[2,114],116:[2,114],117:[2,114],118:[2,114],126:[2,114],128:[2,114],129:[2,114],130:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114],137:[2,114],138:[2,114]},{5:231,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],73:[2,143],78:[2,143],86:[2,143],91:[2,143],93:[2,143],102:[2,143],103:87,104:[1,65],105:[1,232],106:[1,66],109:88,110:[1,68],111:69,118:[2,143],126:[2,143],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],73:[2,145],78:[2,145],86:[2,145],91:[2,145],93:[2,145],102:[2,145],103:87,104:[1,65],105:[1,233],106:[1,66],109:88,110:[1,68],111:69,118:[2,145],126:[2,145],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],73:[2,151],78:[2,151],86:[2,151],91:[2,151],93:[2,151],102:[2,151],104:[2,151],105:[2,151],106:[2,151],110:[2,151],118:[2,151],126:[2,151],128:[2,151],129:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151],137:[2,151]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],73:[2,152],78:[2,152],86:[2,152],91:[2,152],93:[2,152],102:[2,152],103:87,104:[1,65],105:[2,152],106:[1,66],109:88,110:[1,68],111:69,118:[2,152],126:[2,152],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],49:[2,156],54:[2,156],57:[2,156],73:[2,156],78:[2,156],86:[2,156],91:[2,156],93:[2,156],102:[2,156],104:[2,156],105:[2,156],106:[2,156],110:[2,156],118:[2,156],126:[2,156],128:[2,156],129:[2,156],132:[2,156],133:[2,156],134:[2,156],135:[2,156],136:[2,156],137:[2,156]},{116:[2,158],117:[2,158]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],113:234,115:158},{54:[1,235],116:[2,164],117:[2,164]},{54:[2,160],116:[2,160],117:[2,160]},{54:[2,161],116:[2,161],117:[2,161]},{54:[2,162],116:[2,162],117:[2,162]},{54:[2,163],116:[2,163],117:[2,163]},{1:[2,157],6:[2,157],25:[2,157],26:[2,157],49:[2,157],54:[2,157],57:[2,157],73:[2,157],78:[2,157],86:[2,157],91:[2,157],93:[2,157],102:[2,157],104:[2,157],105:[2,157],106:[2,157],110:[2,157],118:[2,157],126:[2,157],128:[2,157],129:[2,157],132:[2,157],133:[2,157],134:[2,157],135:[2,157],136:[2,157],137:[2,157]},{8:236,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:237,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],53:238,54:[1,239],78:[2,53]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],78:[2,92]},{6:[2,39],25:[2,39],26:[2,39],43:[1,240],54:[2,39],78:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],78:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],78:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],78:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],78:[2,45]},{1:[2,5],6:[2,5],26:[2,5],102:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],73:[2,25],78:[2,25],86:[2,25],91:[2,25],93:[2,25],98:[2,25],99:[2,25],102:[2,25],104:[2,25],105:[2,25],106:[2,25],110:[2,25],118:[2,25],121:[2,25],123:[2,25],126:[2,25],128:[2,25],129:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25],137:[2,25]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],73:[2,195],78:[2,195],86:[2,195],91:[2,195],93:[2,195],102:[2,195],103:87,104:[2,195],105:[2,195],106:[2,195],109:88,110:[2,195],111:69,118:[2,195],126:[2,195],128:[2,195],129:[2,195],132:[1,78],133:[1,81],134:[2,195],135:[2,195],136:[2,195],137:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],73:[2,196],78:[2,196],86:[2,196],91:[2,196],93:[2,196],102:[2,196],103:87,104:[2,196],105:[2,196],106:[2,196],109:88,110:[2,196],111:69,118:[2,196],126:[2,196],128:[2,196],129:[2,196],132:[1,78],133:[1,81],134:[2,196],135:[2,196],136:[2,196],137:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],73:[2,197],78:[2,197],86:[2,197],91:[2,197],93:[2,197],102:[2,197],103:87,104:[2,197],105:[2,197],106:[2,197],109:88,110:[2,197],111:69,118:[2,197],126:[2,197],128:[2,197],129:[2,197],132:[1,78],133:[2,197],134:[2,197],135:[2,197],136:[2,197],137:[2,197]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],73:[2,198],78:[2,198],86:[2,198],91:[2,198],93:[2,198],102:[2,198],103:87,104:[2,198],105:[2,198],106:[2,198],109:88,110:[2,198],111:69,118:[2,198],126:[2,198],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[2,198],135:[2,198],136:[2,198],137:[2,198]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],73:[2,199],78:[2,199],86:[2,199],91:[2,199],93:[2,199],102:[2,199],103:87,104:[2,199],105:[2,199],106:[2,199],109:88,110:[2,199],111:69,118:[2,199],126:[2,199],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,199],136:[2,199],137:[1,85]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],73:[2,200],78:[2,200],86:[2,200],91:[2,200],93:[2,200],102:[2,200],103:87,104:[2,200],105:[2,200],106:[2,200],109:88,110:[2,200],111:69,118:[2,200],126:[2,200],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[2,200],137:[1,85]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],73:[2,201],78:[2,201],86:[2,201],91:[2,201],93:[2,201],102:[2,201],103:87,104:[2,201],105:[2,201],106:[2,201],109:88,110:[2,201],111:69,118:[2,201],126:[2,201],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,201],136:[2,201],137:[2,201]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],73:[2,186],78:[2,186],86:[2,186],91:[2,186],93:[2,186],102:[2,186],103:87,104:[1,65],105:[2,186],106:[1,66],109:88,110:[1,68],111:69,118:[2,186],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],73:[2,185],78:[2,185],86:[2,185],91:[2,185],93:[2,185],102:[2,185],103:87,104:[1,65],105:[2,185],106:[1,66],109:88,110:[1,68],111:69,118:[2,185],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],69:[2,104],71:[2,104],73:[2,104],74:[2,104],78:[2,104],84:[2,104],85:[2,104],86:[2,104],91:[2,104],93:[2,104],102:[2,104],104:[2,104],105:[2,104],106:[2,104],110:[2,104],118:[2,104],126:[2,104],128:[2,104],129:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104],137:[2,104]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],69:[2,80],71:[2,80],73:[2,80],74:[2,80],78:[2,80],80:[2,80],84:[2,80],85:[2,80],86:[2,80],91:[2,80],93:[2,80],102:[2,80],104:[2,80],105:[2,80],106:[2,80],110:[2,80],118:[2,80],126:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80],138:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],69:[2,81],71:[2,81],73:[2,81],74:[2,81],78:[2,81],80:[2,81],84:[2,81],85:[2,81],86:[2,81],91:[2,81],93:[2,81],102:[2,81],104:[2,81],105:[2,81],106:[2,81],110:[2,81],118:[2,81],126:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81],138:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],69:[2,82],71:[2,82],73:[2,82],74:[2,82],78:[2,82],80:[2,82],84:[2,82],85:[2,82],86:[2,82],91:[2,82],93:[2,82],102:[2,82],104:[2,82],105:[2,82],106:[2,82],110:[2,82],118:[2,82],126:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82],138:[2,82]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],69:[2,83],71:[2,83],73:[2,83],74:[2,83],78:[2,83],80:[2,83],84:[2,83],85:[2,83],86:[2,83],91:[2,83],93:[2,83],102:[2,83],104:[2,83],105:[2,83],106:[2,83],110:[2,83],118:[2,83],126:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83],138:[2,83]},{73:[1,241]},{57:[1,194],73:[2,88],92:242,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{73:[2,89]},{8:243,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,123],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],73:[2,117],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{12:[2,118],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],73:[2,118],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{1:[2,87],6:[2,87],25:[2,87],26:[2,87],40:[2,87],49:[2,87],54:[2,87],57:[2,87],66:[2,87],67:[2,87],68:[2,87],69:[2,87],71:[2,87],73:[2,87],74:[2,87],78:[2,87],80:[2,87],84:[2,87],85:[2,87],86:[2,87],91:[2,87],93:[2,87],102:[2,87],104:[2,87],105:[2,87],106:[2,87],110:[2,87],118:[2,87],126:[2,87],128:[2,87],129:[2,87],130:[2,87],131:[2,87],132:[2,87],133:[2,87],134:[2,87],135:[2,87],136:[2,87],137:[2,87],138:[2,87]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],69:[2,105],71:[2,105],73:[2,105],74:[2,105],78:[2,105],84:[2,105],85:[2,105],86:[2,105],91:[2,105],93:[2,105],102:[2,105],104:[2,105],105:[2,105],106:[2,105],110:[2,105],118:[2,105],126:[2,105],128:[2,105],129:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105],137:[2,105]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],73:[2,36],78:[2,36],86:[2,36],91:[2,36],93:[2,36],102:[2,36],103:87,104:[2,36],105:[2,36],106:[2,36],109:88,110:[2,36],111:69,118:[2,36],126:[2,36],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:244,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:245,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],69:[2,110],71:[2,110],73:[2,110],74:[2,110],78:[2,110],84:[2,110],85:[2,110],86:[2,110],91:[2,110],93:[2,110],102:[2,110],104:[2,110],105:[2,110],106:[2,110],110:[2,110],118:[2,110],126:[2,110],128:[2,110],129:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110],137:[2,110]},{6:[2,53],25:[2,53],53:246,54:[1,229],86:[2,53]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],57:[1,247],86:[2,129],91:[2,129],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{50:248,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:110,28:[1,73],44:111,55:249,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[1,250],25:[1,251]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:252,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],73:[2,202],78:[2,202],86:[2,202],91:[2,202],93:[2,202],102:[2,202],103:87,104:[2,202],105:[2,202],106:[2,202],109:88,110:[2,202],111:69,118:[2,202],126:[2,202],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:253,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:254,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,205],6:[2,205],25:[2,205],26:[2,205],49:[2,205],54:[2,205],57:[2,205],73:[2,205],78:[2,205],86:[2,205],91:[2,205],93:[2,205],102:[2,205],103:87,104:[2,205],105:[2,205],106:[2,205],109:88,110:[2,205],111:69,118:[2,205],126:[2,205],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],73:[2,184],78:[2,184],86:[2,184],91:[2,184],93:[2,184],102:[2,184],104:[2,184],105:[2,184],106:[2,184],110:[2,184],118:[2,184],126:[2,184],128:[2,184],129:[2,184],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184],137:[2,184]},{8:255,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],73:[2,134],78:[2,134],86:[2,134],91:[2,134],93:[2,134],98:[1,256],102:[2,134],104:[2,134],105:[2,134],106:[2,134],110:[2,134],118:[2,134],126:[2,134],128:[2,134],129:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134],137:[2,134]},{5:257,25:[1,5]},{5:260,25:[1,5],27:258,28:[1,73],59:259,76:[1,70]},{120:261,122:219,123:[1,220]},{26:[1,262],121:[1,263],122:264,123:[1,220]},{26:[2,177],121:[2,177],123:[2,177]},{8:266,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],95:265,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,98],5:267,6:[2,98],25:[1,5],26:[2,98],49:[2,98],54:[2,98],57:[2,98],73:[2,98],78:[2,98],86:[2,98],91:[2,98],93:[2,98],102:[2,98],103:87,104:[1,65],105:[2,98],106:[1,66],109:88,110:[1,68],111:69,118:[2,98],126:[2,98],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],49:[2,101],54:[2,101],57:[2,101],73:[2,101],78:[2,101],86:[2,101],91:[2,101],93:[2,101],102:[2,101],104:[2,101],105:[2,101],106:[2,101],110:[2,101],118:[2,101],126:[2,101],128:[2,101],129:[2,101],132:[2,101],133:[2,101],134:[2,101],135:[2,101],136:[2,101],137:[2,101]},{8:268,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],66:[2,141],67:[2,141],68:[2,141],69:[2,141],71:[2,141],73:[2,141],74:[2,141],78:[2,141],84:[2,141],85:[2,141],86:[2,141],91:[2,141],93:[2,141],102:[2,141],104:[2,141],105:[2,141],106:[2,141],110:[2,141],118:[2,141],126:[2,141],128:[2,141],129:[2,141],132:[2,141],133:[2,141],134:[2,141],135:[2,141],136:[2,141],137:[2,141]},{6:[1,74],26:[1,269]},{8:270,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,67],12:[2,118],25:[2,67],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],54:[2,67],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],91:[2,67],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{6:[1,272],25:[1,273],91:[1,271]},{6:[2,54],8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[2,54],88:[1,58],89:[1,59],90:[1,57],91:[2,54],94:274,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:275,54:[1,229]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],73:[2,181],78:[2,181],86:[2,181],91:[2,181],93:[2,181],102:[2,181],104:[2,181],105:[2,181],106:[2,181],110:[2,181],118:[2,181],121:[2,181],126:[2,181],128:[2,181],129:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181],137:[2,181]},{8:276,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:277,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{116:[2,159],117:[2,159]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],115:278},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],73:[2,166],78:[2,166],86:[2,166],91:[2,166],93:[2,166],102:[2,166],103:87,104:[2,166],105:[1,279],106:[2,166],109:88,110:[2,166],111:69,118:[1,280],126:[2,166],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],73:[2,167],78:[2,167],86:[2,167],91:[2,167],93:[2,167],102:[2,167],103:87,104:[2,167],105:[1,281],106:[2,167],109:88,110:[2,167],111:69,118:[2,167],126:[2,167],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,283],25:[1,284],78:[1,282]},{6:[2,54],11:169,25:[2,54],26:[2,54],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:285,42:168,44:172,46:[1,46],78:[2,54],89:[1,114]},{8:286,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,287],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],69:[2,86],71:[2,86],73:[2,86],74:[2,86],78:[2,86],80:[2,86],84:[2,86],85:[2,86],86:[2,86],91:[2,86],93:[2,86],102:[2,86],104:[2,86],105:[2,86],106:[2,86],110:[2,86],118:[2,86],126:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86]},{8:288,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,121],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,122],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],73:[2,37],78:[2,37],86:[2,37],91:[2,37],93:[2,37],102:[2,37],103:87,104:[2,37],105:[2,37],106:[2,37],109:88,110:[2,37],111:69,118:[2,37],126:[2,37],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,289],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,272],25:[1,273],86:[1,290]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],86:[2,67],91:[2,67]},{5:291,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:110,28:[1,73],44:111,55:292,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,55],25:[2,55],26:[2,55],27:110,28:[1,73],44:111,48:293,54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,294],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,204],6:[2,204],25:[2,204],26:[2,204],49:[2,204],54:[2,204],57:[2,204],73:[2,204],78:[2,204],86:[2,204],91:[2,204],93:[2,204],102:[2,204],103:87,104:[2,204],105:[2,204],106:[2,204],109:88,110:[2,204],111:69,118:[2,204],126:[2,204],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:295,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:296,25:[1,5]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],73:[2,135],78:[2,135],86:[2,135],91:[2,135],93:[2,135],102:[2,135],104:[2,135],105:[2,135],106:[2,135],110:[2,135],118:[2,135],126:[2,135],128:[2,135],129:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135],137:[2,135]},{5:297,25:[1,5]},{5:298,25:[1,5]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],73:[2,139],78:[2,139],86:[2,139],91:[2,139],93:[2,139],98:[2,139],102:[2,139],104:[2,139],105:[2,139],106:[2,139],110:[2,139],118:[2,139],126:[2,139],128:[2,139],129:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139],137:[2,139]},{26:[1,299],121:[1,300],122:264,123:[1,220]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],49:[2,175],54:[2,175],57:[2,175],73:[2,175],78:[2,175],86:[2,175],91:[2,175],93:[2,175],102:[2,175],104:[2,175],105:[2,175],106:[2,175],110:[2,175],118:[2,175],126:[2,175],128:[2,175],129:[2,175],132:[2,175],133:[2,175],134:[2,175],135:[2,175],136:[2,175],137:[2,175]},{5:301,25:[1,5]},{26:[2,178],121:[2,178],123:[2,178]},{5:302,25:[1,5],54:[1,303]},{25:[2,131],54:[2,131],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],49:[2,99],54:[2,99],57:[2,99],73:[2,99],78:[2,99],86:[2,99],91:[2,99],93:[2,99],102:[2,99],104:[2,99],105:[2,99],106:[2,99],110:[2,99],118:[2,99],126:[2,99],128:[2,99],129:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99],137:[2,99]},{1:[2,102],5:304,6:[2,102],25:[1,5],26:[2,102],49:[2,102],54:[2,102],57:[2,102],73:[2,102],78:[2,102],86:[2,102],91:[2,102],93:[2,102],102:[2,102],103:87,104:[1,65],105:[2,102],106:[1,66],109:88,110:[1,68],111:69,118:[2,102],126:[2,102],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{102:[1,305]},{91:[1,306],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,116],6:[2,116],25:[2,116],26:[2,116],40:[2,116],49:[2,116],54:[2,116],57:[2,116],66:[2,116],67:[2,116],68:[2,116],69:[2,116],71:[2,116],73:[2,116],74:[2,116],78:[2,116],84:[2,116],85:[2,116],86:[2,116],91:[2,116],93:[2,116],102:[2,116],104:[2,116],105:[2,116],106:[2,116],110:[2,116],116:[2,116],117:[2,116],118:[2,116],126:[2,116],128:[2,116],129:[2,116],132:[2,116],133:[2,116],134:[2,116],135:[2,116],136:[2,116],137:[2,116]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],94:307,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:308,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],86:[2,125],91:[2,125]},{6:[1,272],25:[1,273],26:[1,309]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],73:[2,144],78:[2,144],86:[2,144],91:[2,144],93:[2,144],102:[2,144],103:87,104:[1,65],105:[2,144],106:[1,66],109:88,110:[1,68],111:69,118:[2,144],126:[2,144],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],73:[2,146],78:[2,146],86:[2,146],91:[2,146],93:[2,146],102:[2,146],103:87,104:[1,65],105:[2,146],106:[1,66],109:88,110:[1,68],111:69,118:[2,146],126:[2,146],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{116:[2,165],117:[2,165]},{8:310,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:311,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:312,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,90],6:[2,90],25:[2,90],26:[2,90],40:[2,90],49:[2,90],54:[2,90],57:[2,90],66:[2,90],67:[2,90],68:[2,90],69:[2,90],71:[2,90],73:[2,90],74:[2,90],78:[2,90],84:[2,90],85:[2,90],86:[2,90],91:[2,90],93:[2,90],102:[2,90],104:[2,90],105:[2,90],106:[2,90],110:[2,90],116:[2,90],117:[2,90],118:[2,90],126:[2,90],128:[2,90],129:[2,90],132:[2,90],133:[2,90],134:[2,90],135:[2,90],136:[2,90],137:[2,90]},{11:169,27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:313,42:168,44:172,46:[1,46],89:[1,114]},{6:[2,91],11:169,25:[2,91],26:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:314,89:[1,114]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],78:[2,93]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],78:[2,40],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:315,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,120],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],73:[2,38],78:[2,38],86:[2,38],91:[2,38],93:[2,38],102:[2,38],104:[2,38],105:[2,38],106:[2,38],110:[2,38],118:[2,38],126:[2,38],128:[2,38],129:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38],137:[2,38]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],69:[2,111],71:[2,111],73:[2,111],74:[2,111],78:[2,111],84:[2,111],85:[2,111],86:[2,111],91:[2,111],93:[2,111],102:[2,111],104:[2,111],105:[2,111],106:[2,111],110:[2,111],118:[2,111],126:[2,111],128:[2,111],129:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111],137:[2,111]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],73:[2,49],78:[2,49],86:[2,49],91:[2,49],93:[2,49],102:[2,49],104:[2,49],105:[2,49],106:[2,49],110:[2,49],118:[2,49],126:[2,49],128:[2,49],129:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49],137:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:316,54:[1,204]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],73:[2,203],78:[2,203],86:[2,203],91:[2,203],93:[2,203],102:[2,203],104:[2,203],105:[2,203],106:[2,203],110:[2,203],118:[2,203],126:[2,203],128:[2,203],129:[2,203],132:[2,203],133:[2,203],134:[2,203],135:[2,203],136:[2,203],137:[2,203]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],73:[2,182],78:[2,182],86:[2,182],91:[2,182],93:[2,182],102:[2,182],104:[2,182],105:[2,182],106:[2,182],110:[2,182],118:[2,182],121:[2,182],126:[2,182],128:[2,182],129:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182],137:[2,182]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],73:[2,136],78:[2,136],86:[2,136],91:[2,136],93:[2,136],102:[2,136],104:[2,136],105:[2,136],106:[2,136],110:[2,136],118:[2,136],126:[2,136],128:[2,136],129:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136],137:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],73:[2,137],78:[2,137],86:[2,137],91:[2,137],93:[2,137],98:[2,137],102:[2,137],104:[2,137],105:[2,137],106:[2,137],110:[2,137],118:[2,137],126:[2,137],128:[2,137],129:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137],137:[2,137]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],73:[2,138],78:[2,138],86:[2,138],91:[2,138],93:[2,138],98:[2,138],102:[2,138],104:[2,138],105:[2,138],106:[2,138],110:[2,138],118:[2,138],126:[2,138],128:[2,138],129:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138],137:[2,138]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],73:[2,173],78:[2,173],86:[2,173],91:[2,173],93:[2,173],102:[2,173],104:[2,173],105:[2,173],106:[2,173],110:[2,173],118:[2,173],126:[2,173],128:[2,173],129:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173],137:[2,173]},{5:317,25:[1,5]},{26:[1,318]},{6:[1,319],26:[2,179],121:[2,179],123:[2,179]},{8:320,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],73:[2,103],78:[2,103],86:[2,103],91:[2,103],93:[2,103],102:[2,103],104:[2,103],105:[2,103],106:[2,103],110:[2,103],118:[2,103],126:[2,103],128:[2,103],129:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103],137:[2,103]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],66:[2,142],67:[2,142],68:[2,142],69:[2,142],71:[2,142],73:[2,142],74:[2,142],78:[2,142],84:[2,142],85:[2,142],86:[2,142],91:[2,142],93:[2,142],102:[2,142],104:[2,142],105:[2,142],106:[2,142],110:[2,142],118:[2,142],126:[2,142],128:[2,142],129:[2,142],132:[2,142],133:[2,142],134:[2,142],135:[2,142],136:[2,142],137:[2,142]},{1:[2,119],6:[2,119],25:[2,119],26:[2,119],49:[2,119],54:[2,119],57:[2,119],66:[2,119],67:[2,119],68:[2,119],69:[2,119],71:[2,119],73:[2,119],74:[2,119],78:[2,119],84:[2,119],85:[2,119],86:[2,119],91:[2,119],93:[2,119],102:[2,119],104:[2,119],105:[2,119],106:[2,119],110:[2,119],118:[2,119],126:[2,119],128:[2,119],129:[2,119],132:[2,119],133:[2,119],134:[2,119],135:[2,119],136:[2,119],137:[2,119]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],86:[2,126],91:[2,126]},{6:[2,53],25:[2,53],26:[2,53],53:321,54:[1,229]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],86:[2,127],91:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],73:[2,168],78:[2,168],86:[2,168],91:[2,168],93:[2,168],102:[2,168],103:87,104:[2,168],105:[2,168],106:[2,168],109:88,110:[2,168],111:69,118:[1,322],126:[2,168],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],73:[2,170],78:[2,170],86:[2,170],91:[2,170],93:[2,170],102:[2,170],103:87,104:[2,170],105:[1,323],106:[2,170],109:88,110:[2,170],111:69,118:[2,170],126:[2,170],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],73:[2,169],78:[2,169],86:[2,169],91:[2,169],93:[2,169],102:[2,169],103:87,104:[2,169],105:[2,169],106:[2,169],109:88,110:[2,169],111:69,118:[2,169],126:[2,169],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],78:[2,94]},{6:[2,53],25:[2,53],26:[2,53],53:324,54:[1,239]},{26:[1,325],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,250],25:[1,251],26:[1,326]},{26:[1,327]},{1:[2,176],6:[2,176],25:[2,176],26:[2,176],49:[2,176],54:[2,176],57:[2,176],73:[2,176],78:[2,176],86:[2,176],91:[2,176],93:[2,176],102:[2,176],104:[2,176],105:[2,176],106:[2,176],110:[2,176],118:[2,176],126:[2,176],128:[2,176],129:[2,176],132:[2,176],133:[2,176],134:[2,176],135:[2,176],136:[2,176],137:[2,176]},{26:[2,180],121:[2,180],123:[2,180]},{25:[2,132],54:[2,132],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,272],25:[1,273],26:[1,328]},{8:329,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:330,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[1,283],25:[1,284],26:[1,331]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],78:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],73:[2,174],78:[2,174],86:[2,174],91:[2,174],93:[2,174],102:[2,174],104:[2,174],105:[2,174],106:[2,174],110:[2,174],118:[2,174],126:[2,174],128:[2,174],129:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174],137:[2,174]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],86:[2,128],91:[2,128]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],73:[2,171],78:[2,171],86:[2,171],91:[2,171],93:[2,171],102:[2,171],103:87,104:[2,171],105:[2,171],106:[2,171],109:88,110:[2,171],111:69,118:[2,171],126:[2,171],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],73:[2,172],78:[2,172],86:[2,172],91:[2,172],93:[2,172],102:[2,172],103:87,104:[2,172],105:[2,172],106:[2,172],109:88,110:[2,172],111:69,118:[2,172],126:[2,172],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,95],25:[2,95],26:[2,95],54:[2,95],78:[2,95]}],
    481483defaultActions: {60:[2,51],61:[2,52],75:[2,3],94:[2,109],191:[2,89]},
    482484parseError: function parseError(str, hash) {
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/repl.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    3   var CoffeeScript, addMultilineHandler, merge, nodeREPL, prettyErrorMessage, replDefaults, vm, _ref;
     3  var CoffeeScript, addHistory, addMultilineHandler, fs, merge, nodeREPL, path, prettyErrorMessage, replDefaults, vm, _ref;
     4
     5  fs = require('fs');
     6
     7  path = require('path');
    48
    59  vm = require('vm');
     
    1317  replDefaults = {
    1418    prompt: 'coffee> ',
     19    historyFile: process.env.HOME ? path.join(process.env.HOME, '.coffee_history') : void 0,
     20    historyMaxInputSize: 10240,
    1521    "eval": function(input, context, filename, cb) {
    1622      var Assign, Block, Literal, Value, ast, err, js, _ref1;
    17 
    1823      input = input.replace(/\uFF00/g, '\n');
    1924      input = input.replace(/^\(([\s\S]*)\n\)$/m, '$1');
     
    3641  addMultilineHandler = function(repl) {
    3742    var inputStream, multiline, nodeLineListener, outputStream, rli;
    38 
    3943    rli = repl.rli, inputStream = repl.inputStream, outputStream = repl.outputStream;
    4044    multiline = {
     
    8993  };
    9094
     95  addHistory = function(repl, filename, maxSize) {
     96    var buffer, fd, lastLine, readFd, size, stat;
     97    lastLine = null;
     98    try {
     99      stat = fs.statSync(filename);
     100      size = Math.min(maxSize, stat.size);
     101      readFd = fs.openSync(filename, 'r');
     102      buffer = new Buffer(size);
     103      fs.readSync(readFd, buffer, 0, size, stat.size - size);
     104      repl.rli.history = buffer.toString().split('\n').reverse();
     105      if (stat.size > maxSize) {
     106        repl.rli.history.pop();
     107      }
     108      if (repl.rli.history[0] === '') {
     109        repl.rli.history.shift();
     110      }
     111      repl.rli.historyIndex = -1;
     112      lastLine = repl.rli.history[0];
     113    } catch (_error) {}
     114    fd = fs.openSync(filename, 'a');
     115    repl.rli.addListener('line', function(code) {
     116      if (code && code.length && code !== '.history' && lastLine !== code) {
     117        fs.write(fd, "" + code + "\n");
     118        return lastLine = code;
     119      }
     120    });
     121    repl.rli.on('exit', function() {
     122      return fs.close(fd);
     123    });
     124    return repl.commands['.history'] = {
     125      help: 'Show command history',
     126      action: function() {
     127        repl.outputStream.write("" + (repl.rli.history.slice(0).reverse().join('\n')) + "\n");
     128        return repl.displayPrompt();
     129      }
     130    };
     131  };
     132
    91133  module.exports = {
    92134    start: function(opts) {
    93135      var build, major, minor, repl, _ref1;
    94 
    95136      if (opts == null) {
    96137        opts = {};
     
    109150      });
    110151      addMultilineHandler(repl);
     152      if (opts.historyFile) {
     153        addHistory(repl, opts.historyFile, opts.historyMaxInputSize);
     154      }
    111155      return repl;
    112156    }
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/rewriter.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    3   var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_BLOCK, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, generate, left, rite, _i, _len, _ref,
     3  var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, generate, left, rite, _i, _len, _ref,
    44    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
    55    __slice = [].slice;
     
    77  generate = function(tag, value) {
    88    var tok;
    9 
    109    tok = [tag, value];
    1110    tok.generated = true;
     
    3130    Rewriter.prototype.scanTokens = function(block) {
    3231      var i, token, tokens;
    33 
    3432      tokens = this.tokens;
    3533      i = 0;
     
    4240    Rewriter.prototype.detectEnd = function(i, condition, action) {
    4341      var levels, token, tokens, _ref, _ref1;
    44 
    4542      tokens = this.tokens;
    4643      levels = 0;
     
    6461    Rewriter.prototype.removeLeadingNewlines = function() {
    6562      var i, tag, _i, _len, _ref;
    66 
    6763      _ref = this.tokens;
    6864      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
     
    8076      return this.scanTokens(function(token, i, tokens) {
    8177        var _ref;
    82 
    8378        if (!(token[0] === 'TERMINATOR' && (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0))) {
    8479          return 1;
     
    9186    Rewriter.prototype.closeOpenCalls = function() {
    9287      var action, condition;
    93 
    9488      condition = function(token, i) {
    9589        var _ref;
    96 
    9790        return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
    9891      };
     
    110103    Rewriter.prototype.closeOpenIndexes = function() {
    111104      var action, condition;
    112 
    113105      condition = function(token, i) {
    114106        var _ref;
    115 
    116107        return (_ref = token[0]) === ']' || _ref === 'INDEX_END';
    117108      };
     
    129120    Rewriter.prototype.matchTags = function() {
    130121      var fuzz, i, j, pattern, _i, _ref, _ref1;
    131 
    132122      i = arguments[0], pattern = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
    133123      fuzz = 0;
     
    155145    Rewriter.prototype.findTagsBackwards = function(i, tags) {
    156146      var backStack, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
    157 
    158147      backStack = [];
    159148      while (i >= 0 && (backStack.length || (_ref2 = this.tag(i), __indexOf.call(tags, _ref2) < 0) && ((_ref3 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref3) < 0) || this.tokens[i].generated) && (_ref4 = this.tag(i), __indexOf.call(LINEBREAKS, _ref4) < 0))) {
     
    171160    Rewriter.prototype.addImplicitBracesAndParens = function() {
    172161      var stack;
    173 
    174162      stack = [];
    175163      return this.scanTokens(function(token, i, tokens) {
    176164        var endImplicitCall, endImplicitObject, forward, inImplicit, inImplicitCall, inImplicitControl, inImplicitObject, nextTag, offset, prevTag, s, sameLine, stackIdx, stackTag, stackTop, startIdx, startImplicitCall, startImplicitObject, startsLine, tag, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
    177 
    178165        tag = token[0];
    179166        prevTag = (i > 0 ? tokens[i - 1] : [])[0];
     
    188175        inImplicit = function() {
    189176          var _ref, _ref1;
    190 
    191177          return (_ref = stackTop()) != null ? (_ref1 = _ref[2]) != null ? _ref1.ours : void 0 : void 0;
    192178        };
    193179        inImplicitCall = function() {
    194180          var _ref;
    195 
    196181          return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '(';
    197182        };
    198183        inImplicitObject = function() {
    199184          var _ref;
    200 
    201185          return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '{';
    202186        };
    203187        inImplicitControl = function() {
    204188          var _ref;
    205 
    206189          return inImplicit && ((_ref = stackTop()) != null ? _ref[0] : void 0) === 'CONTROL';
    207190        };
    208191        startImplicitCall = function(j) {
    209192          var idx;
    210 
    211193          idx = j != null ? j : i;
    212194          stack.push([
     
    227209        startImplicitObject = function(j, startsLine) {
    228210          var idx;
    229 
    230211          if (startsLine == null) {
    231212            startsLine = true;
     
    293274          return forward(2);
    294275        }
    295         if (this.matchTags(i, IMPLICIT_FUNC, 'INDENT', null, ':') && !this.findTagsBackwards(i, ['CLASS', 'EXTENDS', 'IF', 'CATCH', 'SWITCH', 'LEADING_WHEN', 'FOR', 'WHILE', 'UNTIL'])) {
     276        if (__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && this.matchTags(i + 1, 'INDENT', null, ':') && !this.findTagsBackwards(i, ['CLASS', 'EXTENDS', 'IF', 'CATCH', 'SWITCH', 'LEADING_WHEN', 'FOR', 'WHILE', 'UNTIL'])) {
    296277          startImplicitCall(i + 1);
    297278          stack.push(['INDENT', i + 2]);
     
    351332      return this.scanTokens(function(token, i, tokens) {
    352333        var column, line, nextLocation, prevLocation, _ref, _ref1;
    353 
    354334        if (token[2]) {
    355335          return 1;
     
    377357    Rewriter.prototype.addImplicitIndentation = function() {
    378358      var action, condition, indent, outdent, starter;
    379 
    380359      starter = indent = outdent = null;
    381360      condition = function(token, i) {
    382         var _ref;
    383 
    384         return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'ELSE' && (starter !== 'IF' && starter !== 'THEN'));
     361        var _ref, _ref1;
     362        return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'ELSE' && starter !== 'THEN') && !(((_ref1 = token[0]) === 'CATCH' || _ref1 === 'FINALLY') && (starter === '->' || starter === '=>'));
    385363      };
    386364      action = function(token, i) {
     
    388366      };
    389367      return this.scanTokens(function(token, i, tokens) {
    390         var tag, _ref, _ref1;
    391 
     368        var j, tag, _i, _ref, _ref1;
    392369        tag = token[0];
    393370        if (tag === 'TERMINATOR' && this.tag(i + 1) === 'THEN') {
     
    399376          return 2;
    400377        }
    401         if (tag === 'CATCH' && ((_ref = this.tag(i + 2)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
    402           tokens.splice.apply(tokens, [i + 2, 0].concat(__slice.call(this.indentation())));
    403           return 4;
     378        if (tag === 'CATCH') {
     379          for (j = _i = 1; _i <= 2; j = ++_i) {
     380            if (!((_ref = this.tag(i + j)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
     381              continue;
     382            }
     383            tokens.splice.apply(tokens, [i + j, 0].concat(__slice.call(this.indentation())));
     384            return 2 + j;
     385          }
    404386        }
    405387        if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
     
    422404    Rewriter.prototype.tagPostfixConditionals = function() {
    423405      var action, condition, original;
    424 
    425406      original = null;
    426407      condition = function(token, i) {
    427408        var prevTag, tag;
    428 
    429409        tag = token[0];
    430410        prevTag = this.tokens[i - 1][0];
     
    448428    Rewriter.prototype.indentation = function(implicit) {
    449429      var indent, outdent;
    450 
    451430      if (implicit == null) {
    452431        implicit = false;
     
    467446    Rewriter.prototype.tag = function(i) {
    468447      var _ref;
    469 
    470448      return (_ref = this.tokens[i]) != null ? _ref[0] : void 0;
    471449    };
     
    497475  IMPLICIT_UNSPACED_CALL = ['+', '-'];
    498476
    499   IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
    500 
    501477  IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR'];
    502478
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/scope.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    33  var Scope, extend, last, _ref;
     
    4040    Scope.prototype.namedMethod = function() {
    4141      var _ref1;
    42 
    4342      if (((_ref1 = this.method) != null ? _ref1.name : void 0) || !this.parent) {
    4443        return this.method;
     
    6463    Scope.prototype.check = function(name) {
    6564      var _ref1;
    66 
    6765      return !!(this.type(name) || ((_ref1 = this.parent) != null ? _ref1.check(name) : void 0));
    6866    };
     
    7876    Scope.prototype.type = function(name) {
    7977      var v, _i, _len, _ref1;
    80 
    8178      _ref1 = this.variables;
    8279      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
     
    9188    Scope.prototype.freeVariable = function(name, reserve) {
    9289      var index, temp;
    93 
    9490      if (reserve == null) {
    9591        reserve = true;
     
    119115    Scope.prototype.declaredVariables = function() {
    120116      var realVars, tempVars, v, _i, _len, _ref1;
    121 
    122117      realVars = [];
    123118      tempVars = [];
     
    134129    Scope.prototype.assignedVariables = function() {
    135130      var v, _i, _len, _ref1, _results;
    136 
    137131      _ref1 = this.variables;
    138132      _results = [];
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/sourcemap.js

    r484 r516  
    1 // Generated by CoffeeScript 1.6.2
     1// Generated by CoffeeScript 1.6.3
    22(function() {
    3   var BASE64_CHARS, LineMapping, MAX_BASE64_VALUE, VLQ_CONTINUATION_BIT, VLQ_SHIFT, VLQ_VALUE_MASK, decodeBase64Char, encodeBase64Char;
     3  var LineMap, SourceMap;
    44
    5   LineMapping = (function() {
    6     function LineMapping(generatedLine) {
    7       this.generatedLine = generatedLine;
    8       this.columnMap = {};
    9       this.columnMappings = [];
     5  LineMap = (function() {
     6    function LineMap(line) {
     7      this.line = line;
     8      this.columns = [];
    109    }
    1110
    12     LineMapping.prototype.addMapping = function(generatedColumn, _arg, options) {
     11    LineMap.prototype.add = function(column, _arg, options) {
    1312      var sourceColumn, sourceLine;
    14 
    1513      sourceLine = _arg[0], sourceColumn = _arg[1];
    1614      if (options == null) {
    1715        options = {};
    1816      }
    19       if (this.columnMap[generatedColumn] && options.noReplace) {
     17      if (this.columns[column] && options.noReplace) {
    2018        return;
    2119      }
    22       this.columnMap[generatedColumn] = {
    23         generatedLine: this.generatedLine,
    24         generatedColumn: generatedColumn,
     20      return this.columns[column] = {
     21        line: this.line,
     22        column: column,
    2523        sourceLine: sourceLine,
    2624        sourceColumn: sourceColumn
    2725      };
    28       this.columnMappings.push(this.columnMap[generatedColumn]);
    29       return this.columnMappings.sort(function(a, b) {
    30         return a.generatedColumn - b.generatedColumn;
    31       });
    3226    };
    3327
    34     LineMapping.prototype.getSourcePosition = function(generatedColumn) {
    35       var answer, columnMapping, lastColumnMapping, _i, _len, _ref;
    36 
    37       answer = null;
    38       lastColumnMapping = null;
    39       _ref = this.columnMappings;
    40       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    41         columnMapping = _ref[_i];
    42         if (columnMapping.generatedColumn > generatedColumn) {
    43           break;
    44         } else {
    45           lastColumnMapping = columnMapping;
    46         }
     28    LineMap.prototype.sourceLocation = function(column) {
     29      var mapping;
     30      while (!((mapping = this.columns[column]) || (column <= 0))) {
     31        column--;
    4732      }
    48       if (lastColumnMapping) {
    49         return answer = [lastColumnMapping.sourceLine, lastColumnMapping.sourceColumn];
    50       }
     33      return mapping && [mapping.sourceLine, mapping.sourceColumn];
    5134    };
    5235
    53     return LineMapping;
     36    return LineMap;
    5437
    5538  })();
    5639
    57   exports.SourceMap = (function() {
     40  SourceMap = (function() {
     41    var BASE64_CHARS, VLQ_CONTINUATION_BIT, VLQ_SHIFT, VLQ_VALUE_MASK;
     42
    5843    function SourceMap() {
    59       this.generatedLines = [];
     44      this.lines = [];
    6045    }
    6146
    62     SourceMap.prototype.addMapping = function(sourceLocation, generatedLocation, options) {
    63       var generatedColumn, generatedLine, lineMapping;
    64 
     47    SourceMap.prototype.add = function(sourceLocation, generatedLocation, options) {
     48      var column, line, lineMap, _base;
    6549      if (options == null) {
    6650        options = {};
    6751      }
    68       generatedLine = generatedLocation[0], generatedColumn = generatedLocation[1];
    69       lineMapping = this.generatedLines[generatedLine];
    70       if (!lineMapping) {
    71         lineMapping = this.generatedLines[generatedLine] = new LineMapping(generatedLine);
    72       }
    73       return lineMapping.addMapping(generatedColumn, sourceLocation, options);
     52      line = generatedLocation[0], column = generatedLocation[1];
     53      lineMap = ((_base = this.lines)[line] || (_base[line] = new LineMap(line)));
     54      return lineMap.add(column, sourceLocation, options);
    7455    };
    7556
    76     SourceMap.prototype.getSourcePosition = function(_arg) {
    77       var answer, generatedColumn, generatedLine, lineMapping;
     57    SourceMap.prototype.sourceLocation = function(_arg) {
     58      var column, line, lineMap;
     59      line = _arg[0], column = _arg[1];
     60      while (!((lineMap = this.lines[line]) || (line <= 0))) {
     61        line--;
     62      }
     63      return lineMap && lineMap.sourceLocation(column);
     64    };
    7865
    79       generatedLine = _arg[0], generatedColumn = _arg[1];
    80       answer = null;
    81       lineMapping = this.generatedLines[generatedLine];
    82       if (!lineMapping) {
     66    SourceMap.prototype.generate = function(options, code) {
     67      var buffer, lastColumn, lastSourceColumn, lastSourceLine, lineMap, lineNumber, mapping, needComma, v3, writingline, _i, _j, _len, _len1, _ref, _ref1;
     68      if (options == null) {
     69        options = {};
     70      }
     71      if (code == null) {
     72        code = null;
     73      }
     74      writingline = 0;
     75      lastColumn = 0;
     76      lastSourceLine = 0;
     77      lastSourceColumn = 0;
     78      needComma = false;
     79      buffer = "";
     80      _ref = this.lines;
     81      for (lineNumber = _i = 0, _len = _ref.length; _i < _len; lineNumber = ++_i) {
     82        lineMap = _ref[lineNumber];
     83        if (lineMap) {
     84          _ref1 = lineMap.columns;
     85          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
     86            mapping = _ref1[_j];
     87            if (!(mapping)) {
     88              continue;
     89            }
     90            while (writingline < mapping.line) {
     91              lastColumn = 0;
     92              needComma = false;
     93              buffer += ";";
     94              writingline++;
     95            }
     96            if (needComma) {
     97              buffer += ",";
     98              needComma = false;
     99            }
     100            buffer += this.encodeVlq(mapping.column - lastColumn);
     101            lastColumn = mapping.column;
     102            buffer += this.encodeVlq(0);
     103            buffer += this.encodeVlq(mapping.sourceLine - lastSourceLine);
     104            lastSourceLine = mapping.sourceLine;
     105            buffer += this.encodeVlq(mapping.sourceColumn - lastSourceColumn);
     106            lastSourceColumn = mapping.sourceColumn;
     107            needComma = true;
     108          }
     109        }
     110      }
     111      v3 = {
     112        version: 3,
     113        file: options.generatedFile || '',
     114        sourceRoot: options.sourceRoot || '',
     115        sources: options.sourceFiles || [''],
     116        names: [],
     117        mappings: buffer
     118      };
     119      if (options.inline) {
     120        v3.sourcesContent = [code];
     121      }
     122      return JSON.stringify(v3, null, 2);
     123    };
    83124
    84       } else {
    85         answer = lineMapping.getSourcePosition(generatedColumn);
     125    VLQ_SHIFT = 5;
     126
     127    VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;
     128
     129    VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;
     130
     131    SourceMap.prototype.encodeVlq = function(value) {
     132      var answer, nextChunk, signBit, valueToEncode;
     133      answer = '';
     134      signBit = value < 0 ? 1 : 0;
     135      valueToEncode = (Math.abs(value) << 1) + signBit;
     136      while (valueToEncode || !answer) {
     137        nextChunk = valueToEncode & VLQ_VALUE_MASK;
     138        valueToEncode = valueToEncode >> VLQ_SHIFT;
     139        if (valueToEncode) {
     140          nextChunk |= VLQ_CONTINUATION_BIT;
     141        }
     142        answer += this.encodeBase64(nextChunk);
    86143      }
    87144      return answer;
    88145    };
    89146
    90     SourceMap.prototype.forEachMapping = function(fn) {
    91       var columnMapping, generatedLineNumber, lineMapping, _i, _len, _ref, _results;
     147    BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    92148
    93       _ref = this.generatedLines;
    94       _results = [];
    95       for (generatedLineNumber = _i = 0, _len = _ref.length; _i < _len; generatedLineNumber = ++_i) {
    96         lineMapping = _ref[generatedLineNumber];
    97         if (lineMapping) {
    98           _results.push((function() {
    99             var _j, _len1, _ref1, _results1;
    100 
    101             _ref1 = lineMapping.columnMappings;
    102             _results1 = [];
    103             for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
    104               columnMapping = _ref1[_j];
    105               _results1.push(fn(columnMapping));
    106             }
    107             return _results1;
    108           })());
    109         } else {
    110           _results.push(void 0);
    111         }
    112       }
    113       return _results;
     149    SourceMap.prototype.encodeBase64 = function(value) {
     150      return BASE64_CHARS[value] || (function() {
     151        throw new Error("Cannot Base64 encode value: " + value);
     152      })();
    114153    };
    115154
     
    118157  })();
    119158
    120   exports.generateV3SourceMap = function(sourceMap, options, code) {
    121     var answer, generatedFile, lastGeneratedColumnWritten, lastSourceColumnWritten, lastSourceLineWritten, mappings, needComma, sourceFiles, sourceRoot, writingGeneratedLine;
    122 
    123     if (options == null) {
    124       options = {};
    125     }
    126     sourceRoot = options.sourceRoot || "";
    127     sourceFiles = options.sourceFiles || [""];
    128     generatedFile = options.generatedFile || "";
    129     writingGeneratedLine = 0;
    130     lastGeneratedColumnWritten = 0;
    131     lastSourceLineWritten = 0;
    132     lastSourceColumnWritten = 0;
    133     needComma = false;
    134     mappings = "";
    135     sourceMap.forEachMapping(function(mapping) {
    136       while (writingGeneratedLine < mapping.generatedLine) {
    137         lastGeneratedColumnWritten = 0;
    138         needComma = false;
    139         mappings += ";";
    140         writingGeneratedLine++;
    141       }
    142       if (needComma) {
    143         mappings += ",";
    144         needComma = false;
    145       }
    146       mappings += exports.vlqEncodeValue(mapping.generatedColumn - lastGeneratedColumnWritten);
    147       lastGeneratedColumnWritten = mapping.generatedColumn;
    148       mappings += exports.vlqEncodeValue(0);
    149       mappings += exports.vlqEncodeValue(mapping.sourceLine - lastSourceLineWritten);
    150       lastSourceLineWritten = mapping.sourceLine;
    151       mappings += exports.vlqEncodeValue(mapping.sourceColumn - lastSourceColumnWritten);
    152       lastSourceColumnWritten = mapping.sourceColumn;
    153       return needComma = true;
    154     });
    155     answer = {
    156       version: 3,
    157       file: generatedFile,
    158       sourceRoot: sourceRoot,
    159       sources: sourceFiles,
    160       names: [],
    161       mappings: mappings
    162     };
    163     if (options.inline) {
    164       answer.sourcesContent = [code];
    165     }
    166     return JSON.stringify(answer, null, 2);
    167   };
    168 
    169   exports.loadV3SourceMap = function(sourceMap) {
    170     return todo();
    171   };
    172 
    173   BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    174 
    175   MAX_BASE64_VALUE = BASE64_CHARS.length - 1;
    176 
    177   encodeBase64Char = function(value) {
    178     if (value > MAX_BASE64_VALUE) {
    179       throw new Error("Cannot encode value " + value + " > " + MAX_BASE64_VALUE);
    180     } else if (value < 0) {
    181       throw new Error("Cannot encode value " + value + " < 0");
    182     }
    183     return BASE64_CHARS[value];
    184   };
    185 
    186   decodeBase64Char = function(char) {
    187     var value;
    188 
    189     value = BASE64_CHARS.indexOf(char);
    190     if (value === -1) {
    191       throw new Error("Invalid Base 64 character: " + char);
    192     }
    193     return value;
    194   };
    195 
    196   VLQ_SHIFT = 5;
    197 
    198   VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;
    199 
    200   VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;
    201 
    202   exports.vlqEncodeValue = function(value) {
    203     var answer, nextVlqChunk, signBit, valueToEncode;
    204 
    205     signBit = value < 0 ? 1 : 0;
    206     valueToEncode = (Math.abs(value) << 1) + signBit;
    207     answer = "";
    208     while (valueToEncode || !answer) {
    209       nextVlqChunk = valueToEncode & VLQ_VALUE_MASK;
    210       valueToEncode = valueToEncode >> VLQ_SHIFT;
    211       if (valueToEncode) {
    212         nextVlqChunk |= VLQ_CONTINUATION_BIT;
    213       }
    214       answer += encodeBase64Char(nextVlqChunk);
    215     }
    216     return answer;
    217   };
    218 
    219   exports.vlqDecodeValue = function(str, offset) {
    220     var consumed, continuationShift, done, nextChunkValue, nextVlqChunk, position, signBit, value;
    221 
    222     if (offset == null) {
    223       offset = 0;
    224     }
    225     position = offset;
    226     done = false;
    227     value = 0;
    228     continuationShift = 0;
    229     while (!done) {
    230       nextVlqChunk = decodeBase64Char(str[position]);
    231       position += 1;
    232       nextChunkValue = nextVlqChunk & VLQ_VALUE_MASK;
    233       value += nextChunkValue << continuationShift;
    234       if (!(nextVlqChunk & VLQ_CONTINUATION_BIT)) {
    235         done = true;
    236       }
    237       continuationShift += VLQ_SHIFT;
    238     }
    239     consumed = position - offset;
    240     signBit = value & 1;
    241     value = value >> 1;
    242     if (signBit) {
    243       value = -value;
    244     }
    245     return [value, consumed];
    246   };
     159  module.exports = SourceMap;
    247160
    248161}).call(this);
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/package.json

    r484 r516  
    1111    "name": "Jeremy Ashkenas"
    1212  },
    13   "version": "1.6.2",
     13  "version": "1.6.3",
    1414  "licenses": [
    1515    {
     
    4646  "readme": "\n            {\n         }   }   {\n        {   {  }  }\n         }   }{  {\n        {  }{  }  }                    _____       __  __\n       ( }{ }{  { )                   / ____|     / _|/ _|\n     .- { { }  { }} -.               | |     ___ | |_| |_ ___  ___\n    (  ( } { } { } }  )              | |    / _ \\|  _|  _/ _ \\/ _ \\\n    |`-..________ ..-'|              | |___| (_) | | | ||  __/  __/\n    |                 |               \\_____\\___/|_| |_| \\___|\\___|\n    |                 ;--.\n    |                (__  \\            _____           _       _\n    |                 | )  )          / ____|         (_)     | |\n    |                 |/  /          | (___   ___ _ __ _ _ __ | |_\n    |                 (  /            \\___ \\ / __| '__| | '_ \\| __|\n    |                 |/              ____) | (__| |  | | |_) | |_\n    |                 |              |_____/ \\___|_|  |_| .__/ \\__|\n     `-.._________..-'                                  | |\n                                                        |_|\n\n\n  CoffeeScript is a little language that compiles into JavaScript.\n\n  Install Node.js, and then the CoffeeScript compiler:\n  sudo bin/cake install\n\n  Or, if you have the Node Package Manager installed:\n  npm install -g coffee-script\n  (Leave off the -g if you don't wish to install globally.)\n\n  Execute a script:\n  coffee /path/to/script.coffee\n\n  Compile a script:\n  coffee -c /path/to/script.coffee\n\n  For documentation, usage, and examples, see:\n  http://coffeescript.org/\n\n  To suggest a feature, report a bug, or general discussion:\n  http://github.com/jashkenas/coffee-script/issues/\n\n  If you'd like to chat, drop by #coffeescript on Freenode IRC,\n  or on webchat.freenode.net.\n\n  The source repository:\n  git://github.com/jashkenas/coffee-script.git\n\n  All contributors are listed here:\n  http://github.com/jashkenas/coffee-script/contributors\n",
    4747  "readmeFilename": "README",
    48   "_id": "coffee-script@1.6.2",
    49   "dist": {
    50     "shasum": "800f724d18d1103902711ce5345000261f2a2c3b"
    51   },
    52   "_from": "coffee-script@1.6.2",
    53   "_resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.2.tgz"
     48  "_id": "coffee-script@1.6.3",
     49  "_from": "coffee-script@1.6.x"
    5450}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/README.md

    r484 r516  
    11# Glob
     2
     3Match files using the patterns the shell uses, like stars and stuff.
    24
    35This is a glob implementation in JavaScript.  It uses the `minimatch`
     
    5860Perform an asynchronous glob search.
    5961
    60 ## glob.sync(pattern, [options]
     62## glob.sync(pattern, [options])
    6163
    6264* `pattern` {String} Pattern to be matched
     
    98100  is no way at this time to continue a glob search after aborting, but
    99101  you can re-use the statCache to avoid having to duplicate syscalls.
     102* `statCache` Collection of all the stat results the glob search
     103  performed.
     104* `cache` Convenience object.  Each field has the following possible
     105  values:
     106  * `false` - Path does not exist
     107  * `true` - Path exists
     108  * `1` - Path exists, and is not a directory
     109  * `2` - Path exists, and is a directory
     110  * `[file, entries, ...]` - Path exists, is a directory, and the
     111    array value is the results of `fs.readdir`
    100112
    101113### Events
     
    129141  onto.  Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
    130142  systems, and `C:\` or some such on Windows.)
     143* `dot` Include `.dot` files in normal matches and `globstar` matches.
     144  Note that an explicit dot in a portion of the pattern will always
     145  match dot files.
    131146* `nomount` By default, a pattern starting with a forward-slash will be
    132147  "mounted" onto the root setting, so that a valid filesystem path is
     
    147162  in search of other matches.  Set the `strict` option to raise an error
    148163  in these cases.
     164* `cache` See `cache` property above.  Pass in a previously generated
     165  cache object to save some fs calls.
    149166* `statCache` A cache of results of filesystem information, to prevent
    150167  unnecessary stat calls.  While it should not normally be necessary to
     
    187204and bash 4.1, where `**` only has special significance if it is the only
    188205thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
    189 `a/**b` will not.  **Note that this is different from the way that `**` is
    190 handled by ruby's `Dir` class.**
     206`a/**b` will not.
    191207
    192208If an escaped pattern has no matches, and the `nonull` flag is set,
     
    227243and readdir calls that it makes, in order to cut down on system
    228244overhead.  However, this also makes it even more susceptible to races,
    229 especially if the statCache object is reused between glob calls.
    230 
    231 Users are thus advised not to use a glob result as a
    232 guarantee of filesystem state in the face of rapid changes.
    233 For the vast majority of operations, this is never a problem.
     245especially if the cache or statCache objects are reused between glob
     246calls.
     247
     248Users are thus advised not to use a glob result as a guarantee of
     249filesystem state in the face of rapid changes.  For the vast majority
     250of operations, this is never a problem.
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/glob.js

    r484 r516  
    2323//   else // not globstar
    2424//     for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
    25 //       Test ENTRY against pattern[n+1]
     25//       Test ENTRY against pattern[n]
    2626//       If fails, continue
    2727//       If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
     
    3737module.exports = glob
    3838
    39 var fs = require("graceful-fs")
     39var fs = require("fs")
    4040, minimatch = require("minimatch")
    4141, Minimatch = minimatch.Minimatch
     
    7777}
    7878
     79this._processingEmitQueue = false
    7980
    8081glob.Glob = Glob
     
    8586  }
    8687
     88  if (typeof options === "function") {
     89    cb = options
     90    options = null
     91  }
     92
    8793  if (typeof cb === "function") {
    8894    this.on("error", cb)
    8995    this.on("end", function (matches) {
    90       // console.error("cb with matches", matches)
    9196      cb(null, matches)
    9297    })
     
    95100  options = options || {}
    96101
     102  this._endEmitted = false
    97103  this.EOF = {}
    98104  this._emitQueue = []
    99105
     106  this.paused = false
     107  this._processingEmitQueue = false
     108
    100109  this.maxDepth = options.maxDepth || 1000
    101110  this.maxLength = options.maxLength || Infinity
     111  this.cache = options.cache || {}
    102112  this.statCache = options.statCache || {}
    103113
     
    112122  this.root = options.root || path.resolve(this.cwd, "/")
    113123  this.root = path.resolve(this.root)
     124  if (process.platform === "win32")
     125    this.root = this.root.replace(/\\/g, "/")
    114126
    115127  this.nomount = !!options.nomount
     
    127139  }
    128140
     141  this.strict = options.strict !== false
    129142  this.dot = !!options.dot
    130143  this.mark = !!options.mark
     
    135148  this.nocase = !!options.nocase
    136149  this.stat = !!options.stat
     150
    137151  this.debug = !!options.debug || !!options.globDebug
     152  if (this.debug)
     153    this.log = console.error
     154
    138155  this.silent = !!options.silent
    139156
     
    144161  this.error = null
    145162  this.aborted = false
     163
     164  // list of all the patterns that ** has resolved do, so
     165  // we can avoid visiting multiple times.
     166  this._globstars = {}
    146167
    147168  EE.call(this)
     
    165186}
    166187
     188Glob.prototype.log = function () {}
     189
    167190Glob.prototype._finish = function () {
    168191  assert(this instanceof Glob)
     
    173196  for (var i = 0, l = this.matches.length; i < l; i ++) {
    174197    var matches = this.matches[i]
    175     if (this.debug) console.error("matches[%d] =", i, matches)
     198    this.log("matches[%d] =", i, matches)
    176199    // do like the shell, and spit out the literal glob
    177200    if (!matches) {
     
    199222  if (this.mark) {
    200223    // at *some* point we statted all of these
    201     all = all.map(function (m) {
    202       var sc = this.statCache[m]
    203       if (!sc)
    204         return m
    205       var isDir = (Array.isArray(sc) || sc === 2)
    206       if (isDir && m.slice(-1) !== "/") {
    207         return m + "/"
    208       }
    209       if (!isDir && m.slice(-1) === "/") {
    210         return m.replace(/\/+$/, "")
    211       }
    212       return m
    213     }, this)
    214   }
    215 
    216   if (this.debug) console.error("emitting end", all)
     224    all = all.map(this._mark, this)
     225  }
     226
     227  this.log("emitting end", all)
    217228
    218229  this.EOF = this.found = all
     
    228239function alphasort (a, b) {
    229240  return a > b ? 1 : a < b ? -1 : 0
     241}
     242
     243Glob.prototype._mark = function (p) {
     244  var c = this.cache[p]
     245  var m = p
     246  if (c) {
     247    var isDir = c === 2 || Array.isArray(c)
     248    var slash = p.slice(-1) === '/'
     249
     250    if (isDir && !slash)
     251      m += '/'
     252    else if (!isDir && slash)
     253      m = m.slice(0, -1)
     254
     255    if (m !== p) {
     256      this.statCache[m] = this.statCache[p]
     257      this.cache[m] = this.cache[p]
     258    }
     259  }
     260
     261  return m
    230262}
    231263
     
    254286
    255287Glob.prototype.emitMatch = function (m) {
     288  this.log('emitMatch', m)
    256289  this._emitQueue.push(m)
    257290  this._processEmitQueue()
     
    259292
    260293Glob.prototype._processEmitQueue = function (m) {
     294  this.log("pEQ paused=%j processing=%j m=%j", this.paused,
     295           this._processingEmitQueue, m)
     296  var done = false
    261297  while (!this._processingEmitQueue &&
    262298         !this.paused) {
    263299    this._processingEmitQueue = true
    264300    var m = this._emitQueue.shift()
     301    this.log(">processEmitQueue", m === this.EOF ? ":EOF:" : m)
    265302    if (!m) {
     303      this.log(">processEmitQueue, falsey m")
    266304      this._processingEmitQueue = false
    267305      break
    268306    }
    269     if (this.debug) {
    270       console.error('emit!', m === this.EOF ? "end" : "match")
    271     }
    272     this.emit(m === this.EOF ? "end" : "match", m)
    273     this._processingEmitQueue = false
    274   }
     307
     308    if (m === this.EOF || !(this.mark && !this.stat)) {
     309      this.log("peq: unmarked, or eof")
     310      next.call(this, 0, false)
     311    } else if (this.statCache[m]) {
     312      var sc = this.statCache[m]
     313      var exists
     314      if (sc)
     315        exists = sc.isDirectory() ? 2 : 1
     316      this.log("peq: stat cached")
     317      next.call(this, exists, exists === 2)
     318    } else {
     319      this.log("peq: _stat, then next")
     320      this._stat(m, next)
     321    }
     322
     323    function next(exists, isDir) {
     324      this.log("next", m, exists, isDir)
     325      var ev = m === this.EOF ? "end" : "match"
     326
     327      // "end" can only happen once.
     328      assert(!this._endEmitted)
     329      if (ev === "end")
     330        this._endEmitted = true
     331
     332      if (exists) {
     333        // Doesn't mean it necessarily doesn't exist, it's possible
     334        // we just didn't check because we don't care that much, or
     335        // this is EOF anyway.
     336        if (isDir && !m.match(/\/$/)) {
     337          m = m + "/"
     338        } else if (!isDir && m.match(/\/$/)) {
     339          m = m.replace(/\/+$/, "")
     340        }
     341      }
     342      this.log("emit", ev, m)
     343      this.emit(ev, m)
     344      this._processingEmitQueue = false
     345      if (done && m !== this.EOF && !this.paused)
     346        this._processEmitQueue()
     347    }
     348  }
     349  done = true
    275350}
    276351
     
    316391        // nothing more to do, either way.
    317392        if (exists) {
    318           if (prefix.charAt(0) === "/" && !this.nomount) {
    319             prefix = path.join(this.root, prefix)
     393          if (prefix && isAbsolute(prefix) && !this.nomount) {
     394            if (prefix.charAt(0) === "/") {
     395              prefix = path.join(this.root, prefix)
     396            } else {
     397              prefix = path.resolve(this.root, prefix)
     398            }
    320399          }
     400
     401          if (process.platform === "win32")
     402            prefix = prefix.replace(/\\/g, "/")
     403
    321404          this.matches[index] = this.matches[index] || {}
    322405          this.matches[index][prefix] = true
     
    345428  var read
    346429  if (prefix === null) read = "."
    347   else if (isAbsolute(prefix)) {
    348     read = prefix = path.resolve("/", prefix)
    349     if (this.debug) console.error('absolute: ', prefix, this.root, pattern)
    350   } else read = prefix
    351 
    352   if (this.debug) console.error('readdir(%j)', read, this.cwd, this.root)
     430  else if (isAbsolute(prefix) || isAbsolute(pattern.join("/"))) {
     431    if (!prefix || !isAbsolute(prefix)) {
     432      prefix = path.join("/", prefix)
     433    }
     434    read = prefix = path.resolve(prefix)
     435
     436    // if (process.platform === "win32")
     437    //   read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/")
     438
     439    this.log('absolute: ', prefix, this.root, pattern, read)
     440  } else {
     441    read = prefix
     442  }
     443
     444  this.log('readdir(%j)', read, this.cwd, this.root)
     445
    353446  return this._readdir(read, function (er, entries) {
    354447    if (er) {
     
    371464      }, this)
    372465
     466      s = s.filter(function (pattern) {
     467        var key = gsKey(pattern)
     468        var seen = !this._globstars[key]
     469        this._globstars[key] = true
     470        return seen
     471      }, this)
     472
     473      if (!s.length)
     474        return cb()
     475
    373476      // now asyncForEach over this
    374477      var l = s.length
     
    389492    // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
    390493    var pn = pattern[n]
    391     if (typeof pn === "string") {
    392       var found = entries.indexOf(pn) !== -1
    393       entries = found ? entries[pn] : []
    394     } else {
    395       var rawGlob = pattern[n]._glob
    396       , dotOk = this.dot || rawGlob.charAt(0) === "."
    397 
    398       entries = entries.filter(function (e) {
    399         return (e.charAt(0) !== "." || dotOk) &&
    400                (typeof pattern[n] === "string" && e === pattern[n] ||
    401                 e.match(pattern[n]))
    402       })
    403     }
     494    var rawGlob = pattern[n]._glob
     495    , dotOk = this.dot || rawGlob.charAt(0) === "."
     496
     497    entries = entries.filter(function (e) {
     498      return (e.charAt(0) !== "." || dotOk) &&
     499             e.match(pattern[n])
     500    })
    404501
    405502    // If n === pattern.length - 1, then there's no need for the extra stat
     
    418515        }
    419516
     517        if (process.platform === "win32")
     518          e = e.replace(/\\/g, "/")
     519
    420520        this.matches[index] = this.matches[index] || {}
    421521        this.matches[index][e] = true
     
    443543}
    444544
     545function gsKey (pattern) {
     546  return '**' + pattern.map(function (p) {
     547    return (p === minimatch.GLOBSTAR) ? '**' : (''+p)
     548  }).join('/')
     549}
     550
    445551Glob.prototype._stat = function (f, cb) {
    446552  assert(this instanceof Glob)
     
    451557    abs = path.resolve(this.cwd, f)
    452558  }
    453   if (this.debug) console.error('stat', [this.cwd, f, '=', abs])
     559
    454560  if (f.length > this.maxLength) {
    455561    var er = new Error("Path name too long")
     
    459565  }
    460566
    461   if (this.statCache.hasOwnProperty(f)) {
    462     var exists = this.statCache[f]
     567  this.log('stat', [this.cwd, f, '=', abs])
     568
     569  if (!this.stat && this.cache.hasOwnProperty(f)) {
     570    var exists = this.cache[f]
    463571    , isDir = exists && (Array.isArray(exists) || exists === 2)
    464572    if (this.sync) return cb.call(this, !!exists, isDir)
     
    466574  }
    467575
    468   if (this.sync) {
    469     var er, stat
     576  var stat = this.statCache[abs]
     577  if (this.sync || stat) {
     578    var er
    470579    try {
    471580      stat = fs.statSync(abs)
     
    482591  var exists
    483592  assert(this instanceof Glob)
     593
     594  if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) {
     595    this.log("should be ENOTDIR, fake it")
     596
     597    er = new Error("ENOTDIR, not a directory '" + abs + "'")
     598    er.path = abs
     599    er.code = "ENOTDIR"
     600    stat = null
     601  }
     602
     603  var emit = !this.statCache[abs]
     604  this.statCache[abs] = stat
     605
    484606  if (er || !stat) {
    485607    exists = false
    486608  } else {
    487609    exists = stat.isDirectory() ? 2 : 1
    488   }
    489   this.statCache[f] = this.statCache[f] || exists
     610    if (emit)
     611      this.emit('stat', f, stat)
     612  }
     613  this.cache[f] = this.cache[f] || exists
    490614  cb.call(this, !!exists, exists === 2)
    491615}
     
    502626  }
    503627
    504   if (this.debug) console.error('readdir', [this.cwd, f, abs])
    505628  if (f.length > this.maxLength) {
    506629    var er = new Error("Path name too long")
     
    510633  }
    511634
    512   if (this.statCache.hasOwnProperty(f)) {
    513     var c = this.statCache[f]
     635  this.log('readdir', [this.cwd, f, abs])
     636  if (this.cache.hasOwnProperty(f)) {
     637    var c = this.cache[f]
    514638    if (Array.isArray(c)) {
    515639      if (this.sync) return cb.call(this, null, c)
     
    523647      er.path = f
    524648      er.code = code
    525       if (this.debug) console.error(f, er)
     649      this.log(f, er)
    526650      if (this.sync) return cb.call(this, er)
    527651      return process.nextTick(cb.bind(this, er))
     
    549673  assert(this instanceof Glob)
    550674  if (entries && !er) {
    551     this.statCache[f] = entries
     675    this.cache[f] = entries
    552676    // if we haven't asked to stat everything for suresies, then just
    553677    // assume that everything in there exists, so we can avoid
     
    558682        if (f === "/") e = f + e
    559683        else e = f + "/" + e
    560         this.statCache[e] = true
     684        this.cache[e] = true
    561685      }, this)
    562686    }
     
    568692  if (er) switch (er.code) {
    569693    case "ENOTDIR": // totally normal. means it *does* exist.
    570       this.statCache[f] = 1
     694      this.cache[f] = 1
    571695      return cb.call(this, er)
    572696    case "ENOENT": // not terribly unusual
     
    574698    case "ENAMETOOLONG":
    575699    case "UNKNOWN":
    576       this.statCache[f] = false
     700      this.cache[f] = false
    577701      return cb.call(this, er)
    578702    default: // some unusual error.  Treat as failure.
    579       this.statCache[f] = false
     703      this.cache[f] = false
    580704      if (this.strict) this.emit("error", er)
    581705      if (!this.silent) console.error("glob error", er)
     
    591715  // from node's lib/path.js
    592716  var splitDeviceRe =
    593         /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/
     717      /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/
    594718    , result = splitDeviceRe.exec(p)
    595719    , device = result[1] || ''
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/README.md

    r484 r516  
    1 A dead simple way to do inheritance in JS.
     1Browser-friendly inheritance fully compatible with standard node.js
     2[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).
    23
    3     var inherits = require("inherits")
     4This package exports standard `inherits` from node.js `util` module in
     5node environment, but also provides alternative browser-friendly
     6implementation through [browser
     7field](https://gist.github.com/shtylman/4339901). Alternative
     8implementation is a literal copy of standard one located in standalone
     9module to avoid requiring of `util`. It also has a shim for old
     10browsers with no `Object.create` support.
    411
    5     function Animal () {
    6       this.alive = true
    7     }
    8     Animal.prototype.say = function (what) {
    9       console.log(what)
    10     }
     12While keeping you sure you are using standard `inherits`
     13implementation in node.js environment, it allows bundlers such as
     14[browserify](https://github.com/substack/node-browserify) to not
     15include full `util` package to your client code if all you need is
     16just `inherits` function. It worth, because browser shim for `util`
     17package is large and `inherits` is often the single function you need
     18from it.
    1119
    12     inherits(Dog, Animal)
    13     function Dog () {
    14       Dog.super.apply(this)
    15     }
    16     Dog.prototype.sniff = function () {
    17       this.say("sniff sniff")
    18     }
    19     Dog.prototype.bark = function () {
    20       this.say("woof woof")
    21     }
     20It's recommended to use this package instead of
     21`require('util').inherits` for any code that has chances to be used
     22not only in node.js but in browser too.
    2223
    23     inherits(Chihuahua, Dog)
    24     function Chihuahua () {
    25       Chihuahua.super.apply(this)
    26     }
    27     Chihuahua.prototype.bark = function () {
    28       this.say("yip yip")
    29     }
     24## usage
    3025
    31     // also works
    32     function Cat () {
    33       Cat.super.apply(this)
    34     }
    35     Cat.prototype.hiss = function () {
    36       this.say("CHSKKSS!!")
    37     }
    38     inherits(Cat, Animal, {
    39       meow: function () { this.say("miao miao") }
    40     })
    41     Cat.prototype.purr = function () {
    42       this.say("purr purr")
    43     }
     26```js
     27var inherits = require('inherits');
     28// then use exactly as the standard one
     29```
    4430
     31## note on version ~1.0
    4532
    46     var c = new Chihuahua
    47     assert(c instanceof Chihuahua)
    48     assert(c instanceof Dog)
    49     assert(c instanceof Animal)
     33Version ~1.0 had completely different motivation and is not compatible
     34neither with 2.0 nor with standard node.js `inherits`.
    5035
    51 The actual function is laughably small.  10-lines small.
     36If you are using version ~1.0 and planning to switch to ~2.0, be
     37careful:
     38
     39* new version uses `super_` instead of `super` for referencing
     40  superclass
     41* new version overwrites current prototype while old one preserves any
     42  existing fields on it
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/inherits.js

    r484 r516  
    1 module.exports = inherits
    2 
    3 function inherits (c, p, proto) {
    4   proto = proto || {}
    5   var e = {}
    6   ;[c.prototype, proto].forEach(function (s) {
    7     Object.getOwnPropertyNames(s).forEach(function (k) {
    8       e[k] = Object.getOwnPropertyDescriptor(s, k)
    9     })
    10   })
    11   c.prototype = Object.create(p.prototype, e)
    12   c.super = p
    13 }
    14 
    15 //function Child () {
    16 //  Child.super.call(this)
    17 //  console.error([this
    18 //                ,this.constructor
    19 //                ,this.constructor === Child
    20 //                ,this.constructor.super === Parent
    21 //                ,Object.getPrototypeOf(this) === Child.prototype
    22 //                ,Object.getPrototypeOf(Object.getPrototypeOf(this))
    23 //                 === Parent.prototype
    24 //                ,this instanceof Child
    25 //                ,this instanceof Parent])
    26 //}
    27 //function Parent () {}
    28 //inherits(Child, Parent)
    29 //new Child
     1module.exports = require('util').inherits
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/package.json

    r484 r516  
    11{
    22  "name": "inherits",
    3   "description": "A tiny simple way to do classic inheritance in js",
    4   "version": "1.0.0",
     3  "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
     4  "version": "2.0.1",
    55  "keywords": [
    66    "inheritance",
     
    88    "klass",
    99    "oop",
    10     "object-oriented"
     10    "object-oriented",
     11    "inherits",
     12    "browser",
     13    "browserify"
    1114  ],
    1215  "main": "./inherits.js",
     16  "browser": "./inherits_browser.js",
    1317  "repository": {
    1418    "type": "git",
    15     "url": "https://github.com/isaacs/inherits"
     19    "url": "git://github.com/isaacs/inherits"
    1620  },
    17   "author": {
    18     "name": "Isaac Z. Schlueter",
    19     "email": "i@izs.me",
    20     "url": "http://blog.izs.me/"
     21  "license": "ISC",
     22  "scripts": {
     23    "test": "node test"
    2124  },
    22   "readme": "A dead simple way to do inheritance in JS.\n\n    var inherits = require(\"inherits\")\n\n    function Animal () {\n      this.alive = true\n    }\n    Animal.prototype.say = function (what) {\n      console.log(what)\n    }\n\n    inherits(Dog, Animal)\n    function Dog () {\n      Dog.super.apply(this)\n    }\n    Dog.prototype.sniff = function () {\n      this.say(\"sniff sniff\")\n    }\n    Dog.prototype.bark = function () {\n      this.say(\"woof woof\")\n    }\n\n    inherits(Chihuahua, Dog)\n    function Chihuahua () {\n      Chihuahua.super.apply(this)\n    }\n    Chihuahua.prototype.bark = function () {\n      this.say(\"yip yip\")\n    }\n\n    // also works\n    function Cat () {\n      Cat.super.apply(this)\n    }\n    Cat.prototype.hiss = function () {\n      this.say(\"CHSKKSS!!\")\n    }\n    inherits(Cat, Animal, {\n      meow: function () { this.say(\"miao miao\") }\n    })\n    Cat.prototype.purr = function () {\n      this.say(\"purr purr\")\n    }\n\n\n    var c = new Chihuahua\n    assert(c instanceof Chihuahua)\n    assert(c instanceof Dog)\n    assert(c instanceof Animal)\n\nThe actual function is laughably small.  10-lines small.\n",
     25  "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n  superclass\n* new version overwrites current prototype while old one preserves any\n  existing fields on it\n",
    2326  "readmeFilename": "README.md",
    2427  "bugs": {
     
    2629  },
    2730  "homepage": "https://github.com/isaacs/inherits",
    28   "_id": "inherits@1.0.0",
    29   "dist": {
    30     "shasum": "26467026b3b86de1c6f72f00d9a31b1c97077a92"
    31   },
    32   "_from": "inherits@1",
    33   "_resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz"
     31  "_id": "inherits@2.0.1",
     32  "_from": "inherits@2"
    3433}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/README.md

    r484 r516  
    2020minimatch("bar.foo", "*.foo") // true!
    2121minimatch("bar.foo", "*.bar") // false!
     22minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy!
    2223```
    2324
     
    3637* `man 3 fnmatch`
    3738* `man 5 gitignore`
    38 
    39 ### Comparisons to other fnmatch/glob implementations
    40 
    41 While strict compliance with the existing standards is a worthwhile
    42 goal, some discrepancies exist between minimatch and other
    43 implementations, and are intentional.
    44 
    45 If the pattern starts with a `!` character, then it is negated.  Set the
    46 `nonegate` flag to suppress this behavior, and treat leading `!`
    47 characters normally.  This is perhaps relevant if you wish to start the
    48 pattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`
    49 characters at the start of a pattern will negate the pattern multiple
    50 times.
    51 
    52 If a pattern starts with `#`, then it is treated as a comment, and
    53 will not match anything.  Use `\#` to match a literal `#` at the
    54 start of a line, or set the `nocomment` flag to suppress this behavior.
    55 
    56 The double-star character `**` is supported by default, unless the
    57 `noglobstar` flag is set.  This is supported in the manner of bsdglob
    58 and bash 4.1, where `**` only has special significance if it is the only
    59 thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
    60 `a/**b` will not.  **Note that this is different from the way that `**` is
    61 handled by ruby's `Dir` class.**
    62 
    63 If an escaped pattern has no matches, and the `nonull` flag is set,
    64 then minimatch.match returns the pattern as-provided, rather than
    65 interpreting the character escapes.  For example,
    66 `minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
    67 `"*a?"`.  This is akin to setting the `nullglob` option in bash, except
    68 that it does not resolve escaped pattern characters.
    69 
    70 If brace expansion is not disabled, then it is performed before any
    71 other interpretation of the glob pattern.  Thus, a pattern like
    72 `+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
    73 **first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
    74 checked for validity.  Since those two are valid, matching proceeds.
    75 
    7639
    7740## Minimatch Class
     
    217180Returns from negate expressions the same as if they were not negated.
    218181(Ie, true on a hit, false on a miss.)
     182
     183
     184## Comparisons to other fnmatch/glob implementations
     185
     186While strict compliance with the existing standards is a worthwhile
     187goal, some discrepancies exist between minimatch and other
     188implementations, and are intentional.
     189
     190If the pattern starts with a `!` character, then it is negated.  Set the
     191`nonegate` flag to suppress this behavior, and treat leading `!`
     192characters normally.  This is perhaps relevant if you wish to start the
     193pattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`
     194characters at the start of a pattern will negate the pattern multiple
     195times.
     196
     197If a pattern starts with `#`, then it is treated as a comment, and
     198will not match anything.  Use `\#` to match a literal `#` at the
     199start of a line, or set the `nocomment` flag to suppress this behavior.
     200
     201The double-star character `**` is supported by default, unless the
     202`noglobstar` flag is set.  This is supported in the manner of bsdglob
     203and bash 4.1, where `**` only has special significance if it is the only
     204thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
     205`a/**b` will not.
     206
     207If an escaped pattern has no matches, and the `nonull` flag is set,
     208then minimatch.match returns the pattern as-provided, rather than
     209interpreting the character escapes.  For example,
     210`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
     211`"*a?"`.  This is akin to setting the `nullglob` option in bash, except
     212that it does not resolve escaped pattern characters.
     213
     214If brace expansion is not disabled, then it is performed before any
     215other interpretation of the glob pattern.  Thus, a pattern like
     216`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
     217**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
     218checked for validity.  Since those two are valid, matching proceeds.
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/minimatch.js

    r484 r516  
    6969var slashSplit = /\/+/
    7070
    71 minimatch.monkeyPatch = monkeyPatch
    72 function monkeyPatch () {
    73   var desc = Object.getOwnPropertyDescriptor(String.prototype, "match")
    74   var orig = desc.value
    75   desc.value = function (p) {
    76     if (p instanceof Minimatch) return p.match(this)
    77     return orig.call(this, p)
    78   }
    79   Object.defineProperty(String.prototype, desc)
    80 }
    81 
    8271minimatch.filter = filter
    8372function filter (pattern, options) {
     
    179168}
    180169
     170Minimatch.prototype.debug = function() {}
     171
    181172Minimatch.prototype.make = make
    182173function make () {
     
    203194  var set = this.globSet = this.braceExpand()
    204195
    205   if (options.debug) console.error(this.pattern, set)
     196  if (options.debug) this.debug = console.error
     197
     198  this.debug(this.pattern, set)
    206199
    207200  // step 3: now we have a set, so turn each one into a series of path-portion
     
    214207  })
    215208
    216   if (options.debug) console.error(this.pattern, set)
     209  this.debug(this.pattern, set)
    217210
    218211  // glob --> regexps
     
    221214  }, this)
    222215
    223   if (options.debug) console.error(this.pattern, set)
     216  this.debug(this.pattern, set)
    224217
    225218  // filter out everything that didn't compile properly.
     
    228221  })
    229222
    230   if (options.debug) console.error(this.pattern, set)
     223  this.debug(this.pattern, set)
    231224
    232225  this.set = set
     
    303296  // and then prepend it to everything we find.
    304297  if (pattern.charAt(0) !== "{") {
    305     // console.error(pattern)
     298    this.debug(pattern)
    306299    var prefix = null
    307300    for (var i = 0, l = pattern.length; i < l; i ++) {
    308301      var c = pattern.charAt(i)
    309       // console.error(i, c)
     302      this.debug(i, c)
    310303      if (c === "\\") {
    311304        escaping = !escaping
     
    318311    // actually no sets, all { were escaped.
    319312    if (prefix === null) {
    320       // console.error("no sets")
     313      this.debug("no sets")
    321314      return [pattern]
    322315    }
    323316
    324     var tail = braceExpand(pattern.substr(i), options)
     317   var tail = braceExpand.call(this, pattern.substr(i), options)
    325318    return tail.map(function (t) {
    326319      return prefix + t
     
    337330  var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/)
    338331  if (numset) {
    339     // console.error("numset", numset[1], numset[2])
    340     var suf = braceExpand(pattern.substr(numset[0].length), options)
     332    this.debug("numset", numset[1], numset[2])
     333    var suf = braceExpand.call(this, pattern.substr(numset[0].length), options)
    341334      , start = +numset[1]
    342335      , end = +numset[2]
     
    370363  }
    371364
    372   // console.error("Entering for")
     365  this.debug("Entering for")
    373366  FOR: for (i = 1, l = pattern.length; i < l; i ++) {
    374367    var c = pattern.charAt(i)
    375     // console.error("", i, c)
     368    this.debug("", i, c)
    376369
    377370    if (escaping) {
     
    421414  // and need to escape the leading brace
    422415  if (depth !== 0) {
    423     // console.error("didn't close", pattern)
    424     return braceExpand("\\" + pattern, options)
     416    this.debug("didn't close", pattern)
     417    return braceExpand.call(this, "\\" + pattern, options)
    425418  }
    426419
    427420  // x{y,z} -> ["xy", "xz"]
    428   // console.error("set", set)
    429   // console.error("suffix", pattern.substr(i))
    430   var suf = braceExpand(pattern.substr(i), options)
     421  this.debug("set", set)
     422  this.debug("suffix", pattern.substr(i))
     423  var suf = braceExpand.call(this, pattern.substr(i), options)
    431424  // ["b", "c{d,e}","{f,g}h"] ->
    432425  //   [["b"], ["cd", "ce"], ["fh", "gh"]]
    433426  var addBraces = set.length === 1
    434   // console.error("set pre-expanded", set)
     427  this.debug("set pre-expanded", set)
    435428  set = set.map(function (p) {
    436     return braceExpand(p, options)
    437   })
    438   // console.error("set expanded", set)
     429    return braceExpand.call(this, p, options)
     430  }, this)
     431  this.debug("set expanded", set)
    439432
    440433
     
    482475
    483476  var re = ""
    484     , hasMagic = false
     477    , hasMagic = !!options.nocase
    485478    , escaping = false
    486479    // ? => one single character
     
    497490      : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))"
    498491      : "(?!\\.)"
     492    , self = this
    499493
    500494  function clearStateChar () {
     
    515509          break
    516510      }
     511      self.debug('clearStateChar %j %j', stateChar, re)
    517512      stateChar = false
    518513    }
     
    523518      ; i ++ ) {
    524519
    525     if (options.debug) {
    526       console.error("%s\t%s %s %j", pattern, i, re, c)
    527     }
     520    this.debug("%s\t%s %s %j", pattern, i, re, c)
    528521
    529522    // skip over any that are escaped.
     
    552545      case "@":
    553546      case "!":
    554         if (options.debug) {
    555           console.error("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
    556         }
     547        this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
    557548
    558549        // all of those are literals inside a class, except that
    559550        // the glob [!a] means [^a] in regexp
    560551        if (inClass) {
     552          this.debug('  in class')
    561553          if (c === "!" && i === classStart + 1) c = "^"
    562554          re += c
     
    567559        // that there was something like ** or +? in there.
    568560        // Handle the stateChar, then proceed with this one.
     561        self.debug('call clearStateChar %j', stateChar)
    569562        clearStateChar()
    570563        stateChar = c
     
    592585        // negation is (?:(?!js)[^/]*)
    593586        re += stateChar === "!" ? "(?:(?!" : "(?:"
     587        this.debug('plType %j %j', stateChar, re)
    594588        stateChar = false
    595589        continue
     
    601595        }
    602596
     597        clearStateChar()
    603598        hasMagic = true
    604599        re += ")"
     
    624619        }
    625620
     621        clearStateChar()
    626622        re += "|"
    627623        continue
     
    716712    })
    717713
    718     // console.error("tail=%j\n   %s", tail, tail)
     714    this.debug("tail=%j\n   %s", tail, tail)
    719715    var t = pl.type === "*" ? star
    720716          : pl.type === "?" ? qmark
     
    805801  // must match entire pattern
    806802  // ending in a * or ** will make it less strict.
    807   re = "^" + re + "$"
     803  re = "^(?:" + re + ")$"
    808804
    809805  // can match anything, as long as it's not this.
     
    830826Minimatch.prototype.match = match
    831827function match (f, partial) {
    832   // console.error("match", f, this.pattern)
     828  this.debug("match", f, this.pattern)
    833829  // short-circuit in the case of busted things.
    834830  // comments, etc.
     
    848844  // treat the test path as a set of pathparts.
    849845  f = f.split(slashSplit)
    850   if (options.debug) {
    851     console.error(this.pattern, "split", f)
    852   }
     846  this.debug(this.pattern, "split", f)
    853847
    854848  // just ONE of the pattern sets in this.set needs to match
     
    858852
    859853  var set = this.set
    860   // console.error(this.pattern, "set", set)
     854  this.debug(this.pattern, "set", set)
     855
     856  var splitFile = path.basename(f.join("/")).split("/")
    861857
    862858  for (var i = 0, l = set.length; i < l; i ++) {
    863     var pattern = set[i]
    864     var hit = this.matchOne(f, pattern, partial)
     859    var pattern = set[i], file = f
     860    if (options.matchBase && pattern.length === 1) {
     861      file = splitFile
     862    }
     863    var hit = this.matchOne(file, pattern, partial)
    865864    if (hit) {
    866865      if (options.flipNegate) return true
     
    883882  var options = this.options
    884883
    885   if (options.debug) {
    886     console.error("matchOne",
    887                   { "this": this
    888                   , file: file
    889                   , pattern: pattern })
    890   }
    891 
    892   if (options.matchBase && pattern.length === 1) {
    893     file = path.basename(file.join("/")).split("/")
    894   }
    895 
    896   if (options.debug) {
    897     console.error("matchOne", file.length, pattern.length)
    898   }
     884  this.debug("matchOne",
     885              { "this": this
     886              , file: file
     887              , pattern: pattern })
     888
     889  this.debug("matchOne", file.length, pattern.length)
    899890
    900891  for ( var fi = 0
     
    905896      ; fi ++, pi ++ ) {
    906897
    907     if (options.debug) {
    908       console.error("matchOne loop")
    909     }
     898    this.debug("matchOne loop")
    910899    var p = pattern[pi]
    911900      , f = file[fi]
    912901
    913     if (options.debug) {
    914       console.error(pattern, p, f)
    915     }
     902    this.debug(pattern, p, f)
    916903
    917904    // should be impossible.
     
    920907
    921908    if (p === GLOBSTAR) {
    922       if (options.debug)
    923         console.error('GLOBSTAR', [pattern, p, f])
     909      this.debug('GLOBSTAR', [pattern, p, f])
    924910
    925911      // "**"
     
    948934        , pr = pi + 1
    949935      if (pr === pl) {
    950         if (options.debug)
    951           console.error('** at the end')
     936        this.debug('** at the end')
    952937        // a ** at the end will just swallow the rest.
    953938        // We have found a match.
     
    967952        var swallowee = file[fr]
    968953
    969         if (options.debug) {
    970           console.error('\nglobstar while',
    971                         file, fr, pattern, pr, swallowee)
    972         }
     954        this.debug('\nglobstar while',
     955                    file, fr, pattern, pr, swallowee)
    973956
    974957        // XXX remove this slice.  Just pass the start index.
    975958        if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
    976           if (options.debug)
    977             console.error('globstar found match!', fr, fl, swallowee)
     959          this.debug('globstar found match!', fr, fl, swallowee)
    978960          // found a match.
    979961          return true
     
    983965          if (swallowee === "." || swallowee === ".." ||
    984966              (!options.dot && swallowee.charAt(0) === ".")) {
    985             if (options.debug)
    986               console.error("dot detected!", file, fr, pattern, pr)
     967            this.debug("dot detected!", file, fr, pattern, pr)
    987968            break WHILE
    988969          }
    989970
    990971          // ** swallows a segment, and continue.
    991           if (options.debug)
    992             console.error('globstar swallow a segment, and continue')
     972          this.debug('globstar swallow a segment, and continue')
    993973          fr ++
    994974        }
     
    999979      if (partial) {
    1000980        // ran out of file
    1001         // console.error("\n>>> no match, partial?", file, fr, pattern, pr)
     981        this.debug("\n>>> no match, partial?", file, fr, pattern, pr)
    1002982        if (fr === fl) return true
    1003983      }
     
    1015995        hit = f === p
    1016996      }
    1017       if (options.debug) {
    1018         console.error("string match", p, f, hit)
    1019       }
     997      this.debug("string match", p, f, hit)
    1020998    } else {
    1021999      hit = f.match(p)
    1022       if (options.debug) {
    1023         console.error("pattern match", p, f, hit)
    1024       }
     1000      this.debug("pattern match", p, f, hit)
    10251001    }
    10261002
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md

    r484 r516  
    2727## Options
    2828
    29 * `max` The maximum number of items.  Not setting this is kind of
     29* `max` The maximum size of the cache, checked by applying the length
     30  function to all values in the cache.  Not setting this is kind of
    3031  silly, since that's the whole purpose of this lib, but it defaults
    3132  to `Infinity`.
     
    4546  to immediately put it back in, you'll have to do that in a
    4647  `nextTick` or `setTimeout` callback or it won't do anything.
     48* `stale` By default, if you set a `maxAge`, it'll only actually pull
     49  stale items out of the cache when you `get(key)`.  (That is, it's
     50  not pre-emptively doing a `setTimeout` or anything.)  If you set
     51  `stale:true`, it'll return the stale value before deleting it.  If
     52  you don't set this, then it'll return `undefined` when you try to
     53  get a stale entry, as if it had already been deleted.
     54
     55## API
     56
     57* `set(key, value)`
     58* `get(key) => value`
     59
     60    Both of these will update the "recently used"-ness of the key.
     61    They do what you think.
     62
     63* `peek(key)`
     64
     65    Returns the key value (or `undefined` if not found) without
     66    updating the "recently used"-ness of the key.
     67
     68    (If you find yourself using this a lot, you *might* be using the
     69    wrong sort of data structure, but there are some use cases where
     70    it's handy.)
     71
     72* `del(key)`
     73
     74    Deletes a key out of the cache.
     75
     76* `reset()`
     77
     78    Clear the cache entirely, throwing away all values.
     79
     80* `has(key)`
     81
     82    Check if a key is in the cache, without updating the recent-ness
     83    or deleting it for being stale.
     84
     85* `forEach(function(value,key,cache), [thisp])`
     86
     87    Just like `Array.prototype.forEach`.  Iterates over all the keys
     88    in the cache, in order of recent-ness.  (Ie, more recently used
     89    items are iterated over first.)
     90
     91* `keys()`
     92
     93    Return an array of the keys in the cache.
     94
     95* `values()`
     96
     97    Return an array of the values in the cache.
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js

    r484 r516  
    1515
    1616function LRUCache (options) {
    17   if (!(this instanceof LRUCache)) {
     17  if (!(this instanceof LRUCache))
    1818    return new LRUCache(options)
    19   }
    20 
    21   var max
    22   if (typeof options === 'number') {
    23     max = options
    24     options = { max: max }
    25   }
    26   max = options.max
    27 
    28   if (!options) options = {}
    29 
    30   var lengthCalculator = options.length || naiveLength
    31 
    32   if (typeof lengthCalculator !== "function") {
    33     lengthCalculator = naiveLength
    34   }
    35   if (!max || !(typeof max === "number") || max <= 0 ) {
    36     // a little bit silly.  maybe this should throw?
    37     max = Infinity
    38   }
    39 
    40   var maxAge = options.maxAge || null
    41 
    42   var dispose = options.dispose
    43 
    44   var cache = Object.create(null) // hash of items by key
    45     , lruList = Object.create(null) // list of items in order of use recency
    46     , mru = 0 // most recently used
    47     , length = 0 // number of items in the list
    48     , itemCount = 0
    49 
    50 
    51   // resize the cache when the max changes.
    52   Object.defineProperty(this, "max",
    53     { set : function (mL) {
    54         if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity
    55         max = mL
    56         // if it gets above double max, trim right away.
    57         // otherwise, do it whenever it's convenient.
    58         if (length > max) trim()
     19
     20  if (typeof options === 'number')
     21    options = { max: options }
     22
     23  if (!options)
     24    options = {}
     25
     26  this._max = options.max
     27  // Kind of weird to have a default max of Infinity, but oh well.
     28  if (!this._max || !(typeof this._max === "number") || this._max <= 0 )
     29    this._max = Infinity
     30
     31  this._lengthCalculator = options.length || naiveLength
     32  if (typeof this._lengthCalculator !== "function")
     33    this._lengthCalculator = naiveLength
     34
     35  this._allowStale = options.stale || false
     36  this._maxAge = options.maxAge || null
     37  this._dispose = options.dispose
     38  this.reset()
     39}
     40
     41// resize the cache when the max changes.
     42Object.defineProperty(LRUCache.prototype, "max",
     43  { set : function (mL) {
     44      if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity
     45      this._max = mL
     46      if (this._length > this._max) trim(this)
     47    }
     48  , get : function () { return this._max }
     49  , enumerable : true
     50  })
     51
     52// resize the cache when the lengthCalculator changes.
     53Object.defineProperty(LRUCache.prototype, "lengthCalculator",
     54  { set : function (lC) {
     55      if (typeof lC !== "function") {
     56        this._lengthCalculator = naiveLength
     57        this._length = this._itemCount
     58        for (var key in this._cache) {
     59          this._cache[key].length = 1
     60        }
     61      } else {
     62        this._lengthCalculator = lC
     63        this._length = 0
     64        for (var key in this._cache) {
     65          this._cache[key].length = this._lengthCalculator(this._cache[key].value)
     66          this._length += this._cache[key].length
     67        }
    5968      }
    60     , get : function () { return max }
    61     , enumerable : true
    62     })
    63 
    64   // resize the cache when the lengthCalculator changes.
    65   Object.defineProperty(this, "lengthCalculator",
    66     { set : function (lC) {
    67         if (typeof lC !== "function") {
    68           lengthCalculator = naiveLength
    69           length = itemCount
    70           for (var key in cache) {
    71             cache[key].length = 1
    72           }
    73         } else {
    74           lengthCalculator = lC
    75           length = 0
    76           for (var key in cache) {
    77             cache[key].length = lengthCalculator(cache[key].value)
    78             length += cache[key].length
    79           }
    80         }
    81 
    82         if (length > max) trim()
    83       }
    84     , get : function () { return lengthCalculator }
    85     , enumerable : true
    86     })
    87 
    88   Object.defineProperty(this, "length",
    89     { get : function () { return length }
    90     , enumerable : true
    91     })
    92 
    93 
    94   Object.defineProperty(this, "itemCount",
    95     { get : function () { return itemCount }
    96     , enumerable : true
    97     })
    98 
    99   this.reset = function () {
    100     if (dispose) {
    101       for (var k in cache) {
    102         dispose(k, cache[k].value)
    103       }
    104     }
    105     cache = {}
    106     lruList = {}
    107     mru = 0
    108     length = 0
    109     itemCount = 0
    110   }
    111 
    112   // Provided for debugging/dev purposes only. No promises whatsoever that
    113   // this API stays stable.
    114   this.dump = function () {
    115     return cache
    116   }
    117 
    118   this.set = function (key, value) {
    119     if (hOP(cache, key)) {
    120       // dispose of the old one before overwriting
    121       if (dispose) dispose(key, cache[key].value)
    122       if (maxAge) cache[key].now = Date.now()
    123       cache[key].value = value
    124       this.get(key)
    125       return true
    126     }
    127 
    128     var len = lengthCalculator(value)
    129     var age = maxAge ? Date.now() : 0
    130     var hit = new Entry(key, value, mru++, len, age)
    131 
    132     // oversized objects fall out of cache automatically.
    133     if (hit.length > max) {
    134       if (dispose) dispose(key, value)
    135       return false
    136     }
    137 
    138     length += hit.length
    139     lruList[hit.lu] = cache[key] = hit
    140     itemCount ++
    141 
    142     if (length > max) trim()
     69
     70      if (this._length > this._max) trim(this)
     71    }
     72  , get : function () { return this._lengthCalculator }
     73  , enumerable : true
     74  })
     75
     76Object.defineProperty(LRUCache.prototype, "length",
     77  { get : function () { return this._length }
     78  , enumerable : true
     79  })
     80
     81
     82Object.defineProperty(LRUCache.prototype, "itemCount",
     83  { get : function () { return this._itemCount }
     84  , enumerable : true
     85  })
     86
     87LRUCache.prototype.forEach = function (fn, thisp) {
     88  thisp = thisp || this
     89  var i = 0;
     90  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
     91    i++
     92    var hit = this._lruList[k]
     93    if (this._maxAge && (Date.now() - hit.now > this._maxAge)) {
     94      del(this, hit)
     95      if (!this._allowStale) hit = undefined
     96    }
     97    if (hit) {
     98      fn.call(thisp, hit.value, hit.key, this)
     99    }
     100  }
     101}
     102
     103LRUCache.prototype.keys = function () {
     104  var keys = new Array(this._itemCount)
     105  var i = 0
     106  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
     107    var hit = this._lruList[k]
     108    keys[i++] = hit.key
     109  }
     110  return keys
     111}
     112
     113LRUCache.prototype.values = function () {
     114  var values = new Array(this._itemCount)
     115  var i = 0
     116  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
     117    var hit = this._lruList[k]
     118    values[i++] = hit.value
     119  }
     120  return values
     121}
     122
     123LRUCache.prototype.reset = function () {
     124  if (this._dispose && this._cache) {
     125    for (var k in this._cache) {
     126      this._dispose(k, this._cache[k].value)
     127    }
     128  }
     129
     130  this._cache = Object.create(null) // hash of items by key
     131  this._lruList = Object.create(null) // list of items in order of use recency
     132  this._mru = 0 // most recently used
     133  this._lru = 0 // least recently used
     134  this._length = 0 // number of items in the list
     135  this._itemCount = 0
     136}
     137
     138// Provided for debugging/dev purposes only. No promises whatsoever that
     139// this API stays stable.
     140LRUCache.prototype.dump = function () {
     141  return this._cache
     142}
     143
     144LRUCache.prototype.dumpLru = function () {
     145  return this._lruList
     146}
     147
     148LRUCache.prototype.set = function (key, value) {
     149  if (hOP(this._cache, key)) {
     150    // dispose of the old one before overwriting
     151    if (this._dispose) this._dispose(key, this._cache[key].value)
     152    if (this._maxAge) this._cache[key].now = Date.now()
     153    this._cache[key].value = value
     154    this.get(key)
    143155    return true
    144156  }
    145157
    146   this.get = function (key) {
    147     if (!hOP(cache, key)) return
    148     var hit = cache[key]
    149     if (maxAge && (Date.now() - hit.now > maxAge)) {
    150       this.del(key)
    151       return
    152     }
    153     delete lruList[hit.lu]
    154     hit.lu = mru ++
    155     lruList[hit.lu] = hit
    156     return hit.value
    157   }
    158 
    159   this.del = function (key) {
    160     if (!hOP(cache, key)) return
    161     var hit = cache[key]
    162     if (dispose) dispose(key, hit.value)
    163     delete cache[key]
    164     delete lruList[hit.lu]
    165     length -= hit.length
    166     itemCount --
    167   }
    168 
    169   function trim () {
    170     if (length <= max) return
    171     for (var k in lruList) {
    172       if (length <= max) break;
    173       var hit = lruList[k]
    174       if (dispose) dispose(hit.key, hit.value)
    175       length -= hit.length
    176       delete cache[ hit.key ]
    177       delete lruList[k]
    178     }
     158  var len = this._lengthCalculator(value)
     159  var age = this._maxAge ? Date.now() : 0
     160  var hit = new Entry(key, value, this._mru++, len, age)
     161
     162  // oversized objects fall out of cache automatically.
     163  if (hit.length > this._max) {
     164    if (this._dispose) this._dispose(key, value)
     165    return false
     166  }
     167
     168  this._length += hit.length
     169  this._lruList[hit.lu] = this._cache[key] = hit
     170  this._itemCount ++
     171
     172  if (this._length > this._max) trim(this)
     173  return true
     174}
     175
     176LRUCache.prototype.has = function (key) {
     177  if (!hOP(this._cache, key)) return false
     178  var hit = this._cache[key]
     179  if (this._maxAge && (Date.now() - hit.now > this._maxAge)) {
     180    return false
     181  }
     182  return true
     183}
     184
     185LRUCache.prototype.get = function (key) {
     186  return get(this, key, true)
     187}
     188
     189LRUCache.prototype.peek = function (key) {
     190  return get(this, key, false)
     191}
     192
     193LRUCache.prototype.pop = function () {
     194  var hit = this._lruList[this._lru]
     195  del(this, hit)
     196  return hit || null
     197}
     198
     199LRUCache.prototype.del = function (key) {
     200  del(this, this._cache[key])
     201}
     202
     203function get (self, key, doUse) {
     204  var hit = self._cache[key]
     205  if (hit) {
     206    if (self._maxAge && (Date.now() - hit.now > self._maxAge)) {
     207      del(self, hit)
     208      if (!self._allowStale) hit = undefined
     209    } else {
     210      if (doUse) use(self, hit)
     211    }
     212    if (hit) hit = hit.value
     213  }
     214  return hit
     215}
     216
     217function use (self, hit) {
     218  shiftLU(self, hit)
     219  hit.lu = self._mru ++
     220  self._lruList[hit.lu] = hit
     221}
     222
     223function trim (self) {
     224  while (self._lru < self._mru && self._length > self._max)
     225    del(self, self._lruList[self._lru])
     226}
     227
     228function shiftLU (self, hit) {
     229  delete self._lruList[ hit.lu ]
     230  while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++
     231}
     232
     233function del (self, hit) {
     234  if (hit) {
     235    if (self._dispose) self._dispose(hit.key, hit.value)
     236    self._length -= hit.length
     237    self._itemCount --
     238    delete self._cache[ hit.key ]
     239    shiftLU(self, hit)
    179240  }
    180241}
    181242
    182243// classy, since V8 prefers predictable objects.
    183 function Entry (key, value, mru, len, age) {
     244function Entry (key, value, lu, length, now) {
    184245  this.key = key
    185246  this.value = value
    186   this.lu = mru
    187   this.length = len
    188   this.now = age
     247  this.lu = lu
     248  this.length = length
     249  this.now = now
    189250}
    190251
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json

    r484 r516  
    22  "name": "lru-cache",
    33  "description": "A cache object that deletes the least-recently-used items.",
    4   "version": "2.0.4",
     4  "version": "2.5.0",
    55  "author": {
    66    "name": "Isaac Z. Schlueter",
     
    88  },
    99  "scripts": {
    10     "test": "tap test"
     10    "test": "tap test --gc"
    1111  },
    1212  "main": "lib/lru-cache.js",
     
    1616  },
    1717  "devDependencies": {
    18     "tap": ""
     18    "tap": "",
     19    "weak": ""
    1920  },
    2021  "license": {
     
    2223    "url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE"
    2324  },
    24   "contributors": [
    25     {
    26       "name": "Isaac Z. Schlueter",
    27       "email": "i@izs.me"
    28     },
    29     {
    30       "name": "Carlos Brito Lage",
    31       "email": "carlos@carloslage.net"
    32     },
    33     {
    34       "name": "Marko Mikulicic",
    35       "email": "marko.mikulicic@isti.cnr.it"
    36     },
    37     {
    38       "name": "Trent Mick",
    39       "email": "trentm@gmail.com"
    40     },
    41     {
    42       "name": "Kevin O'Hara",
    43       "email": "kevinohara80@gmail.com"
    44     },
    45     {
    46       "name": "Marco Rogers",
    47       "email": "marco.rogers@gmail.com"
    48     },
    49     {
    50       "name": "Jesse Dailey",
    51       "email": "jesse.dailey@gmail.com"
    52     }
    53   ],
    54   "readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n  , options = { max: 500\n              , length: function (n) { return n * 2 }\n              , dispose: function (key, n) { n.close() }\n              , maxAge: 1000 * 60 * 60 }\n  , cache = LRU(options)\n  , otherCache = LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\ncache.reset()    // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum number of items.  Not setting this is kind of\n  silly, since that's the whole purpose of this lib, but it defaults\n  to `Infinity`.\n* `maxAge` Maximum age in ms.  Items are not pro-actively pruned out\n  as they age, but if you try to get an item that is too old, it'll\n  drop it and return undefined instead of giving it to you.\n* `length` Function that is used to calculate the length of stored\n  items.  If you're storing strings or buffers, then you probably want\n  to do something like `function(n){return n.length}`.  The default is\n  `function(n){return 1}`, which is fine if you want to store `n`\n  like-sized things.\n* `dispose` Function that is called on items when they are dropped\n  from the cache.  This can be handy if you want to close file\n  descriptors or do other cleanup tasks when items are no longer\n  accessible.  Called with `key, value`.  It's called *before*\n  actually removing the item from the internal cache, so if you want\n  to immediately put it back in, you'll have to do that in a\n  `nextTick` or `setTimeout` callback or it won't do anything.\n",
     25  "readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n  , options = { max: 500\n              , length: function (n) { return n * 2 }\n              , dispose: function (key, n) { n.close() }\n              , maxAge: 1000 * 60 * 60 }\n  , cache = LRU(options)\n  , otherCache = LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\ncache.reset()    // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum size of the cache, checked by applying the length\n  function to all values in the cache.  Not setting this is kind of\n  silly, since that's the whole purpose of this lib, but it defaults\n  to `Infinity`.\n* `maxAge` Maximum age in ms.  Items are not pro-actively pruned out\n  as they age, but if you try to get an item that is too old, it'll\n  drop it and return undefined instead of giving it to you.\n* `length` Function that is used to calculate the length of stored\n  items.  If you're storing strings or buffers, then you probably want\n  to do something like `function(n){return n.length}`.  The default is\n  `function(n){return 1}`, which is fine if you want to store `n`\n  like-sized things.\n* `dispose` Function that is called on items when they are dropped\n  from the cache.  This can be handy if you want to close file\n  descriptors or do other cleanup tasks when items are no longer\n  accessible.  Called with `key, value`.  It's called *before*\n  actually removing the item from the internal cache, so if you want\n  to immediately put it back in, you'll have to do that in a\n  `nextTick` or `setTimeout` callback or it won't do anything.\n* `stale` By default, if you set a `maxAge`, it'll only actually pull\n  stale items out of the cache when you `get(key)`.  (That is, it's\n  not pre-emptively doing a `setTimeout` or anything.)  If you set\n  `stale:true`, it'll return the stale value before deleting it.  If\n  you don't set this, then it'll return `undefined` when you try to\n  get a stale entry, as if it had already been deleted.\n\n## API\n\n* `set(key, value)`\n* `get(key) => value`\n\n    Both of these will update the \"recently used\"-ness of the key.\n    They do what you think.\n\n* `peek(key)`\n\n    Returns the key value (or `undefined` if not found) without\n    updating the \"recently used\"-ness of the key.\n\n    (If you find yourself using this a lot, you *might* be using the\n    wrong sort of data structure, but there are some use cases where\n    it's handy.)\n\n* `del(key)`\n\n    Deletes a key out of the cache.\n\n* `reset()`\n\n    Clear the cache entirely, throwing away all values.\n\n* `has(key)`\n\n    Check if a key is in the cache, without updating the recent-ness\n    or deleting it for being stale.\n\n* `forEach(function(value,key,cache), [thisp])`\n\n    Just like `Array.prototype.forEach`.  Iterates over all the keys\n    in the cache, in order of recent-ness.  (Ie, more recently used\n    items are iterated over first.)\n\n* `keys()`\n\n    Return an array of the keys in the cache.\n\n* `values()`\n\n    Return an array of the values in the cache.\n",
    5526  "readmeFilename": "README.md",
    5627  "bugs": {
     
    5829  },
    5930  "homepage": "https://github.com/isaacs/node-lru-cache",
    60   "_id": "lru-cache@2.0.4",
    61   "dist": {
    62     "shasum": "65a440a9ccba331dd1a4cabc937c22dba39bb105"
    63   },
    64   "_from": "lru-cache@2.0.4",
    65   "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.0.4.tgz"
     31  "_id": "lru-cache@2.5.0",
     32  "_from": "lru-cache@2"
    6633}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js

    r484 r516  
    266266  t.end()
    267267})
     268
     269test("has()", function(t) {
     270  var cache = new LRU({
     271    max: 1,
     272    maxAge: 10
     273  })
     274
     275  cache.set('foo', 'bar')
     276  t.equal(cache.has('foo'), true)
     277  cache.set('blu', 'baz')
     278  t.equal(cache.has('foo'), false)
     279  t.equal(cache.has('blu'), true)
     280  setTimeout(function() {
     281    t.equal(cache.has('blu'), false)
     282    t.end()
     283  }, 15)
     284})
     285
     286test("stale", function(t) {
     287  var cache = new LRU({
     288    maxAge: 10,
     289    stale: true
     290  })
     291
     292  cache.set('foo', 'bar')
     293  t.equal(cache.get('foo'), 'bar')
     294  t.equal(cache.has('foo'), true)
     295  setTimeout(function() {
     296    t.equal(cache.has('foo'), false)
     297    t.equal(cache.get('foo'), 'bar')
     298    t.equal(cache.get('foo'), undefined)
     299    t.end()
     300  }, 15)
     301})
     302
     303test("lru update via set", function(t) {
     304  var cache = LRU({ max: 2 });
     305
     306  cache.set('foo', 1);
     307  cache.set('bar', 2);
     308  cache.del('bar');
     309  cache.set('baz', 3);
     310  cache.set('qux', 4);
     311
     312  t.equal(cache.get('foo'), undefined)
     313  t.equal(cache.get('bar'), undefined)
     314  t.equal(cache.get('baz'), 3)
     315  t.equal(cache.get('qux'), 4)
     316  t.end()
     317})
     318
     319test("least recently set w/ peek", function (t) {
     320  var cache = new LRU(2)
     321  cache.set("a", "A")
     322  cache.set("b", "B")
     323  t.equal(cache.peek("a"), "A")
     324  cache.set("c", "C")
     325  t.equal(cache.get("c"), "C")
     326  t.equal(cache.get("b"), "B")
     327  t.equal(cache.get("a"), undefined)
     328  t.end()
     329})
     330
     331test("pop the least used item", function (t) {
     332  var cache = new LRU(3)
     333  , last
     334
     335  cache.set("a", "A")
     336  cache.set("b", "B")
     337  cache.set("c", "C")
     338
     339  t.equal(cache.length, 3)
     340  t.equal(cache.max, 3)
     341
     342  // Ensure we pop a, c, b
     343  cache.get("b", "B")
     344
     345  last = cache.pop()
     346  t.equal(last.key, "a")
     347  t.equal(last.value, "A")
     348  t.equal(cache.length, 2)
     349  t.equal(cache.max, 3)
     350
     351  last = cache.pop()
     352  t.equal(last.key, "c")
     353  t.equal(last.value, "C")
     354  t.equal(cache.length, 1)
     355  t.equal(cache.max, 3)
     356
     357  last = cache.pop()
     358  t.equal(last.key, "b")
     359  t.equal(last.value, "B")
     360  t.equal(cache.length, 0)
     361  t.equal(cache.max, 3)
     362
     363  last = cache.pop()
     364  t.equal(last, null)
     365  t.equal(cache.length, 0)
     366  t.equal(cache.max, 3)
     367
     368  t.end()
     369})
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json

    r484 r516  
    3939  "homepage": "https://github.com/isaacs/sigmund",
    4040  "_id": "sigmund@1.0.0",
    41   "_from": "sigmund@1.0.0",
    42   "dist": {
    43     "shasum": "4d1a782fdcf140509fd8ea166574e0665819b881"
    44   },
    45   "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
     41  "_from": "sigmund@~1.0.0"
    4642}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/package.json

    r484 r516  
    77  "name": "minimatch",
    88  "description": "a glob matcher in javascript",
    9   "version": "0.2.9",
     9  "version": "0.2.14",
    1010  "repository": {
    1111    "type": "git",
     
    1414  "main": "minimatch.js",
    1515  "scripts": {
    16     "test": "tap test"
     16    "test": "tap test/*.js"
    1717  },
    1818  "engines": {
     
    2020  },
    2121  "dependencies": {
    22     "lru-cache": "~2.0.0",
     22    "lru-cache": "2",
    2323    "sigmund": "~1.0.0"
    2424  },
     
    3030    "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
    3131  },
    32   "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n### Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated.  Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally.  This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything.  Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set.  This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.  **Note that this is different from the way that `**` is\nhandled by ruby's `Dir` class.**\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes.  For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`.  This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern.  Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity.  Since those two are valid, matching proceeds.\n\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n  Each row in the\n  array corresponds to a brace-expanded pattern.  Each item in the row\n  corresponds to a single path-part.  For example, the pattern\n  `{a,b/c}/d` would expand to a set of patterns like:\n\n        [ [ a, d ]\n        , [ b, c, d ] ]\n\n    If a portion of the pattern doesn't have any \"magic\" in it\n    (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n    will be left as a string rather than converted to a regular\n    expression.\n\n* `regexp` Created by the `makeRe` method.  A single regular expression\n  expressing the entire pattern.  This is useful in cases where you wish\n  to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n  Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n  false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n  filename, and match it against a single row in the `regExpSet`.  This\n  method is mainly for internal use, but is exposed so that it can be\n  used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items.  So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export.  Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`.  Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob.  If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself.  When set, an empty list is returned if there are\nno matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes.  For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n",
     32  "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+(bar|foo)\", { debug: true }) // true, and noisy!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n  Each row in the\n  array corresponds to a brace-expanded pattern.  Each item in the row\n  corresponds to a single path-part.  For example, the pattern\n  `{a,b/c}/d` would expand to a set of patterns like:\n\n        [ [ a, d ]\n        , [ b, c, d ] ]\n\n    If a portion of the pattern doesn't have any \"magic\" in it\n    (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n    will be left as a string rather than converted to a regular\n    expression.\n\n* `regexp` Created by the `makeRe` method.  A single regular expression\n  expressing the entire pattern.  This is useful in cases where you wish\n  to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n  Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n  false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n  filename, and match it against a single row in the `regExpSet`.  This\n  method is mainly for internal use, but is exposed so that it can be\n  used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items.  So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export.  Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`.  Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob.  If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself.  When set, an empty list is returned if there are\nno matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes.  For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated.  Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally.  This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything.  Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set.  This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes.  For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`.  This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern.  Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity.  Since those two are valid, matching proceeds.\n",
    3333  "readmeFilename": "README.md",
    3434  "bugs": {
     
    3636  },
    3737  "homepage": "https://github.com/isaacs/minimatch",
    38   "_id": "minimatch@0.2.9",
    39   "dist": {
    40     "shasum": "451806a2fb9fdc263b5a2d340bda92d62590b4f4"
    41   },
    42   "_from": "minimatch@0.2.9",
    43   "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.9.tgz"
     38  "_id": "minimatch@0.2.14",
     39  "_from": "minimatch@~0.2.11"
    4440}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/test/basic.js

    r484 r516  
    1414                        , ".x", ".y" ])
    1515
     16
     17var patterns =
     18  [ "http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test"
     19  , ["a*", ["a", "abc", "abd", "abe"]]
     20  , ["X*", ["X*"], {nonull: true}]
     21
     22  // allow null glob expansion
     23  , ["X*", []]
     24
     25  // isaacs: Slightly different than bash/sh/ksh
     26  // \\* is not un-escaped to literal "*" in a failed match,
     27  // but it does make it get treated as a literal star
     28  , ["\\*", ["\\*"], {nonull: true}]
     29  , ["\\**", ["\\**"], {nonull: true}]
     30  , ["\\*\\*", ["\\*\\*"], {nonull: true}]
     31
     32  , ["b*/", ["bdir/"]]
     33  , ["c*", ["c", "ca", "cb"]]
     34  , ["**", files]
     35
     36  , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}]
     37  , ["s/\\..*//", ["s/\\..*//"], {nonull: true}]
     38
     39  , "legendary larry crashes bashes"
     40  , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"
     41    , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}]
     42  , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"
     43    , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}]
     44
     45  , "character classes"
     46  , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]]
     47  , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd",
     48     "bdir/", "ca", "cb", "dd", "de"]]
     49  , ["a*[^c]", ["abd", "abe"]]
     50  , function () { files.push("a-b", "aXb") }
     51  , ["a[X-]b", ["a-b", "aXb"]]
     52  , function () { files.push(".x", ".y") }
     53  , ["[^a-c]*", ["d", "dd", "de"]]
     54  , function () { files.push("a*b/", "a*b/ooo") }
     55  , ["a\\*b/*", ["a*b/ooo"]]
     56  , ["a\\*?/*", ["a*b/ooo"]]
     57  , ["*\\\\!*", [], {null: true}, ["echo !7"]]
     58  , ["*\\!*", ["echo !7"], null, ["echo !7"]]
     59  , ["*.\\*", ["r.*"], null, ["r.*"]]
     60  , ["a[b]c", ["abc"]]
     61  , ["a[\\b]c", ["abc"]]
     62  , ["a?c", ["abc"]]
     63  , ["a\\*c", [], {null: true}, ["abc"]]
     64  , ["", [""], { null: true }, [""]]
     65
     66  , "http://www.opensource.apple.com/source/bash/bash-23/" +
     67    "bash/tests/glob-test"
     68  , function () { files.push("man/", "man/man1/", "man/man1/bash.1") }
     69  , ["*/man*/bash.*", ["man/man1/bash.1"]]
     70  , ["man/man1/bash.1", ["man/man1/bash.1"]]
     71  , ["a***c", ["abc"], null, ["abc"]]
     72  , ["a*****?c", ["abc"], null, ["abc"]]
     73  , ["?*****??", ["abc"], null, ["abc"]]
     74  , ["*****??", ["abc"], null, ["abc"]]
     75  , ["?*****?c", ["abc"], null, ["abc"]]
     76  , ["?***?****c", ["abc"], null, ["abc"]]
     77  , ["?***?****?", ["abc"], null, ["abc"]]
     78  , ["?***?****", ["abc"], null, ["abc"]]
     79  , ["*******c", ["abc"], null, ["abc"]]
     80  , ["*******?", ["abc"], null, ["abc"]]
     81  , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
     82  , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
     83  , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]]
     84  , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
     85  , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]]
     86  , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]]
     87  , ["[-abc]", ["-"], null, ["-"]]
     88  , ["[abc-]", ["-"], null, ["-"]]
     89  , ["\\", ["\\"], null, ["\\"]]
     90  , ["[\\\\]", ["\\"], null, ["\\"]]
     91  , ["[[]", ["["], null, ["["]]
     92  , ["[", ["["], null, ["["]]
     93  , ["[*", ["[abc"], null, ["[abc"]]
     94  , "a right bracket shall lose its special meaning and\n" +
     95    "represent itself in a bracket expression if it occurs\n" +
     96    "first in the list.  -- POSIX.2 2.8.3.2"
     97  , ["[]]", ["]"], null, ["]"]]
     98  , ["[]-]", ["]"], null, ["]"]]
     99  , ["[a-\z]", ["p"], null, ["p"]]
     100  , ["??**********?****?", [], { null: true }, ["abc"]]
     101  , ["??**********?****c", [], { null: true }, ["abc"]]
     102  , ["?************c****?****", [], { null: true }, ["abc"]]
     103  , ["*c*?**", [], { null: true }, ["abc"]]
     104  , ["a*****c*?**", [], { null: true }, ["abc"]]
     105  , ["a********???*******", [], { null: true }, ["abc"]]
     106  , ["[]", [], { null: true }, ["a"]]
     107  , ["[abc", [], { null: true }, ["["]]
     108
     109  , "nocase tests"
     110  , ["XYZ", ["xYz"], { nocase: true, null: true }
     111    , ["xYz", "ABC", "IjK"]]
     112  , ["ab*", ["ABC"], { nocase: true, null: true }
     113    , ["xYz", "ABC", "IjK"]]
     114  , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true }
     115    , ["xYz", "ABC", "IjK"]]
     116
     117  // [ pattern, [matches], MM opts, files, TAP opts]
     118  , "onestar/twostar"
     119  , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]]
     120  , ["{/?,*}", ["/a", "bb"], {null: true}
     121    , ["/a", "/b/b", "/a/b/c", "bb"]]
     122
     123  , "dots should not match unless requested"
     124  , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]]
     125
     126  // .. and . can only match patterns starting with .,
     127  // even when options.dot is set.
     128  , function () {
     129      files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"]
     130    }
     131  , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}]
     132  , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}]
     133  , ["a/*/b", ["a/c/b"], {dot:false}]
     134  , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}]
     135
     136
     137  // this also tests that changing the options needs
     138  // to change the cache key, even if the pattern is
     139  // the same!
     140  , ["**", ["a/b","a/.d",".a/.d"], { dot: true }
     141    , [ ".a/.d", "a/.d", "a/b"]]
     142
     143  , "paren sets cannot contain slashes"
     144  , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]]
     145
     146  // brace sets trump all else.
     147  //
     148  // invalid glob pattern.  fails on bash4 and bsdglob.
     149  // however, in this implementation, it's easier just
     150  // to do the intuitive thing, and let brace-expansion
     151  // actually come before parsing any extglob patterns,
     152  // like the documentation seems to say.
     153  //
     154  // XXX: if anyone complains about this, either fix it
     155  // or tell them to grow up and stop complaining.
     156  //
     157  // bash/bsdglob says this:
     158  // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]]
     159  // but we do this instead:
     160  , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]]
     161
     162  // test partial parsing in the presence of comment/negation chars
     163  , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]]
     164  , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]]
     165
     166  // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped.
     167  , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g"
     168    , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"]
     169    , {}
     170    , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]]
     171
     172
     173  // crazy nested {,,} and *(||) tests.
     174  , function () {
     175      files = [ "a", "b", "c", "d"
     176              , "ab", "ac", "ad"
     177              , "bc", "cb"
     178              , "bc,d", "c,db", "c,d"
     179              , "d)", "(b|c", "*(b|c"
     180              , "b|c", "b|cc", "cb|c"
     181              , "x(a|b|c)", "x(a|c)"
     182              , "(a|b|c)", "(a|c)"]
     183    }
     184  , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]]
     185  , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]]
     186  // a
     187  // *(b|c)
     188  // *(b|d)
     189  , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]]
     190  , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]]
     191
     192
     193  // test various flag settings.
     194  , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"]
     195    , { noext: true } ]
     196  , ["a?b", ["x/y/acb", "acb/"], {matchBase: true}
     197    , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ]
     198  , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]]
     199
     200
     201  // begin channelling Boole and deMorgan...
     202  , "negation tests"
     203  , function () {
     204      files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"]
     205    }
     206
     207  // anything that is NOT a* matches.
     208  , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]]
     209
     210  // anything that IS !a* matches.
     211  , ["!a*", ["!ab", "!abc"], {nonegate: true}]
     212
     213  // anything that IS a* matches
     214  , ["!!a*", ["a!b"]]
     215
     216  // anything that is NOT !a* matches
     217  , ["!\\!a*", ["a!b", "d", "e", "\\!a"]]
     218
     219  // negation nestled within a pattern
     220  , function () {
     221      files = [ "foo.js"
     222              , "foo.bar"
     223              // can't match this one without negative lookbehind.
     224              , "foo.js.js"
     225              , "blar.js"
     226              , "foo."
     227              , "boo.js.boo" ]
     228    }
     229  , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ]
     230
     231  // https://github.com/isaacs/minimatch/issues/5
     232  , function () {
     233      files = [ 'a/b/.x/c'
     234              , 'a/b/.x/c/d'
     235              , 'a/b/.x/c/d/e'
     236              , 'a/b/.x'
     237              , 'a/b/.x/'
     238              , 'a/.x/b'
     239              , '.x'
     240              , '.x/'
     241              , '.x/a'
     242              , '.x/a/b'
     243              , 'a/.x/b/.x/c'
     244              , '.x/.x' ]
     245  }
     246  , ["**/.x/**", [ '.x/'
     247                 , '.x/a'
     248                 , '.x/a/b'
     249                 , 'a/.x/b'
     250                 , 'a/b/.x/'
     251                 , 'a/b/.x/c'
     252                 , 'a/b/.x/c/d'
     253                 , 'a/b/.x/c/d/e' ] ]
     254
     255  ]
     256
     257var regexps =
     258  [ '/^(?:(?=.)a[^/]*?)$/',
     259    '/^(?:(?=.)X[^/]*?)$/',
     260    '/^(?:(?=.)X[^/]*?)$/',
     261    '/^(?:\\*)$/',
     262    '/^(?:(?=.)\\*[^/]*?)$/',
     263    '/^(?:\\*\\*)$/',
     264    '/^(?:(?=.)b[^/]*?\\/)$/',
     265    '/^(?:(?=.)c[^/]*?)$/',
     266    '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/',
     267    '/^(?:\\.\\.\\/(?!\\.)(?=.)[^/]*?\\/)$/',
     268    '/^(?:s\\/(?=.)\\.\\.[^/]*?\\/)$/',
     269    '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/1\\/)$/',
     270    '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/\u0001\\/)$/',
     271    '/^(?:(?!\\.)(?=.)[a-c]b[^/]*?)$/',
     272    '/^(?:(?!\\.)(?=.)[a-y][^/]*?[^c])$/',
     273    '/^(?:(?=.)a[^/]*?[^c])$/',
     274    '/^(?:(?=.)a[X-]b)$/',
     275    '/^(?:(?!\\.)(?=.)[^a-c][^/]*?)$/',
     276    '/^(?:a\\*b\\/(?!\\.)(?=.)[^/]*?)$/',
     277    '/^(?:(?=.)a\\*[^/]\\/(?!\\.)(?=.)[^/]*?)$/',
     278    '/^(?:(?!\\.)(?=.)[^/]*?\\\\\\![^/]*?)$/',
     279    '/^(?:(?!\\.)(?=.)[^/]*?\\![^/]*?)$/',
     280    '/^(?:(?!\\.)(?=.)[^/]*?\\.\\*)$/',
     281    '/^(?:(?=.)a[b]c)$/',
     282    '/^(?:(?=.)a[b]c)$/',
     283    '/^(?:(?=.)a[^/]c)$/',
     284    '/^(?:a\\*c)$/',
     285    'false',
     286    '/^(?:(?!\\.)(?=.)[^/]*?\\/(?=.)man[^/]*?\\/(?=.)bash\\.[^/]*?)$/',
     287    '/^(?:man\\/man1\\/bash\\.1)$/',
     288    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?c)$/',
     289    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/',
     290    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/',
     291    '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/',
     292    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/',
     293    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/',
     294    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
     295    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/',
     296    '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c)$/',
     297    '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
     298    '/^(?:(?=.)a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/',
     299    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/',
     300    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?)$/',
     301    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k)$/',
     302    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?)$/',
     303    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/',
     304    '/^(?:(?!\\.)(?=.)[-abc])$/',
     305    '/^(?:(?!\\.)(?=.)[abc-])$/',
     306    '/^(?:\\\\)$/',
     307    '/^(?:(?!\\.)(?=.)[\\\\])$/',
     308    '/^(?:(?!\\.)(?=.)[\\[])$/',
     309    '/^(?:\\[)$/',
     310    '/^(?:(?=.)\\[(?!\\.)(?=.)[^/]*?)$/',
     311    '/^(?:(?!\\.)(?=.)[\\]])$/',
     312    '/^(?:(?!\\.)(?=.)[\\]-])$/',
     313    '/^(?:(?!\\.)(?=.)[a-z])$/',
     314    '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
     315    '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/',
     316    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/',
     317    '/^(?:(?!\\.)(?=.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/',
     318    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/',
     319    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/',
     320    '/^(?:\\[\\])$/',
     321    '/^(?:\\[abc)$/',
     322    '/^(?:(?=.)XYZ)$/i',
     323    '/^(?:(?=.)ab[^/]*?)$/i',
     324    '/^(?:(?!\\.)(?=.)[ia][^/][ck])$/i',
     325    '/^(?:\\/(?!\\.)(?=.)[^/]*?|(?!\\.)(?=.)[^/]*?)$/',
     326    '/^(?:\\/(?!\\.)(?=.)[^/]|(?!\\.)(?=.)[^/]*?)$/',
     327    '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/',
     328    '/^(?:a\\/(?!(?:^|\\/)\\.{1,2}(?:$|\\/))(?=.)[^/]*?\\/b)$/',
     329    '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/',
     330    '/^(?:a\\/(?!\\.)(?=.)[^/]*?\\/b)$/',
     331    '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/',
     332    '/^(?:(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?)$/',
     333    '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\/b\\))$/',
     334    '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/',
     335    '/^(?:(?=.)\\[(?=.)\\!a[^/]*?)$/',
     336    '/^(?:(?=.)\\[(?=.)#a[^/]*?)$/',
     337    '/^(?:(?=.)\\+\\(a\\|[^/]*?\\|c\\\\\\\\\\|d\\\\\\\\\\|e\\\\\\\\\\\\\\\\\\|f\\\\\\\\\\\\\\\\\\|g)$/',
     338    '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/',
     339    '/^(?:a|(?!\\.)(?=.)[^/]*?\\(b\\|c|d\\))$/',
     340    '/^(?:a|(?!\\.)(?=.)(?:b|c)*|(?!\\.)(?=.)(?:b|d)*)$/',
     341    '/^(?:(?!\\.)(?=.)(?:a|b|c)*|(?!\\.)(?=.)(?:a|c)*)$/',
     342    '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\|b\\|c\\)|(?!\\.)(?=.)[^/]*?\\(a\\|c\\))$/',
     343    '/^(?:(?=.)a[^/]b)$/',
     344    '/^(?:(?=.)#[^/]*?)$/',
     345    '/^(?!^(?:(?=.)a[^/]*?)$).*$/',
     346    '/^(?:(?=.)\\!a[^/]*?)$/',
     347    '/^(?:(?=.)a[^/]*?)$/',
     348    '/^(?!^(?:(?=.)\\!a[^/]*?)$).*$/',
     349    '/^(?:(?!\\.)(?=.)[^/]*?\\.(?:(?!js)[^/]*?))$/',
     350    '/^(?:(?:(?!(?:\\/|^)\\.).)*?\\/\\.x\\/(?:(?!(?:\\/|^)\\.).)*?)$/' ]
     351var re = 0;
     352
    16353tap.test("basic tests", function (t) {
    17354  var start = Date.now()
    18355
    19356  // [ pattern, [matches], MM opts, files, TAP opts]
    20   ; [ "http://www.bashcookbook.com/bashinfo" +
    21       "/source/bash-1.14.7/tests/glob-test"
    22     , ["a*", ["a", "abc", "abd", "abe"]]
    23     , ["X*", ["X*"], {nonull: true}]
    24 
    25     // allow null glob expansion
    26     , ["X*", []]
    27 
    28     // isaacs: Slightly different than bash/sh/ksh
    29     // \\* is not un-escaped to literal "*" in a failed match,
    30     // but it does make it get treated as a literal star
    31     , ["\\*", ["\\*"], {nonull: true}]
    32     , ["\\**", ["\\**"], {nonull: true}]
    33     , ["\\*\\*", ["\\*\\*"], {nonull: true}]
    34 
    35     , ["b*/", ["bdir/"]]
    36     , ["c*", ["c", "ca", "cb"]]
    37     , ["**", files]
    38 
    39     , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}]
    40     , ["s/\\..*//", ["s/\\..*//"], {nonull: true}]
    41 
    42     , "legendary larry crashes bashes"
    43     , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"
    44       , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}]
    45     , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"
    46       , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}]
    47 
    48     , "character classes"
    49     , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]]
    50     , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd",
    51        "bdir/", "ca", "cb", "dd", "de"]]
    52     , ["a*[^c]", ["abd", "abe"]]
    53     , function () { files.push("a-b", "aXb") }
    54     , ["a[X-]b", ["a-b", "aXb"]]
    55     , function () { files.push(".x", ".y") }
    56     , ["[^a-c]*", ["d", "dd", "de"]]
    57     , function () { files.push("a*b/", "a*b/ooo") }
    58     , ["a\\*b/*", ["a*b/ooo"]]
    59     , ["a\\*?/*", ["a*b/ooo"]]
    60     , ["*\\\\!*", [], {null: true}, ["echo !7"]]
    61     , ["*\\!*", ["echo !7"], null, ["echo !7"]]
    62     , ["*.\\*", ["r.*"], null, ["r.*"]]
    63     , ["a[b]c", ["abc"]]
    64     , ["a[\\b]c", ["abc"]]
    65     , ["a?c", ["abc"]]
    66     , ["a\\*c", [], {null: true}, ["abc"]]
    67     , ["", [""], { null: true }, [""]]
    68 
    69     , "http://www.opensource.apple.com/source/bash/bash-23/" +
    70       "bash/tests/glob-test"
    71     , function () { files.push("man/", "man/man1/", "man/man1/bash.1") }
    72     , ["*/man*/bash.*", ["man/man1/bash.1"]]
    73     , ["man/man1/bash.1", ["man/man1/bash.1"]]
    74     , ["a***c", ["abc"], null, ["abc"]]
    75     , ["a*****?c", ["abc"], null, ["abc"]]
    76     , ["?*****??", ["abc"], null, ["abc"]]
    77     , ["*****??", ["abc"], null, ["abc"]]
    78     , ["?*****?c", ["abc"], null, ["abc"]]
    79     , ["?***?****c", ["abc"], null, ["abc"]]
    80     , ["?***?****?", ["abc"], null, ["abc"]]
    81     , ["?***?****", ["abc"], null, ["abc"]]
    82     , ["*******c", ["abc"], null, ["abc"]]
    83     , ["*******?", ["abc"], null, ["abc"]]
    84     , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
    85     , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
    86     , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]]
    87     , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
    88     , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]]
    89     , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]]
    90     , ["[-abc]", ["-"], null, ["-"]]
    91     , ["[abc-]", ["-"], null, ["-"]]
    92     , ["\\", ["\\"], null, ["\\"]]
    93     , ["[\\\\]", ["\\"], null, ["\\"]]
    94     , ["[[]", ["["], null, ["["]]
    95     , ["[", ["["], null, ["["]]
    96     , ["[*", ["[abc"], null, ["[abc"]]
    97     , "a right bracket shall lose its special meaning and\n" +
    98       "represent itself in a bracket expression if it occurs\n" +
    99       "first in the list.  -- POSIX.2 2.8.3.2"
    100     , ["[]]", ["]"], null, ["]"]]
    101     , ["[]-]", ["]"], null, ["]"]]
    102     , ["[a-\z]", ["p"], null, ["p"]]
    103     , ["??**********?****?", [], { null: true }, ["abc"]]
    104     , ["??**********?****c", [], { null: true }, ["abc"]]
    105     , ["?************c****?****", [], { null: true }, ["abc"]]
    106     , ["*c*?**", [], { null: true }, ["abc"]]
    107     , ["a*****c*?**", [], { null: true }, ["abc"]]
    108     , ["a********???*******", [], { null: true }, ["abc"]]
    109     , ["[]", [], { null: true }, ["a"]]
    110     , ["[abc", [], { null: true }, ["["]]
    111 
    112     , "nocase tests"
    113     , ["XYZ", ["xYz"], { nocase: true, null: true }
    114       , ["xYz", "ABC", "IjK"]]
    115     , ["ab*", ["ABC"], { nocase: true, null: true }
    116       , ["xYz", "ABC", "IjK"]]
    117     , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true }
    118       , ["xYz", "ABC", "IjK"]]
    119 
    120     // [ pattern, [matches], MM opts, files, TAP opts]
    121     , "onestar/twostar"
    122     , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]]
    123     , ["{/?,*}", ["/a", "bb"], {null: true}
    124       , ["/a", "/b/b", "/a/b/c", "bb"]]
    125 
    126     , "dots should not match unless requested"
    127     , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]]
    128 
    129     // .. and . can only match patterns starting with .,
    130     // even when options.dot is set.
    131     , function () {
    132         files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"]
    133       }
    134     , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}]
    135     , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}]
    136     , ["a/*/b", ["a/c/b"], {dot:false}]
    137     , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}]
    138 
    139 
    140     // this also tests that changing the options needs
    141     // to change the cache key, even if the pattern is
    142     // the same!
    143     , ["**", ["a/b","a/.d",".a/.d"], { dot: true }
    144       , [ ".a/.d", "a/.d", "a/b"]]
    145 
    146     , "paren sets cannot contain slashes"
    147     , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]]
    148 
    149     // brace sets trump all else.
    150     //
    151     // invalid glob pattern.  fails on bash4 and bsdglob.
    152     // however, in this implementation, it's easier just
    153     // to do the intuitive thing, and let brace-expansion
    154     // actually come before parsing any extglob patterns,
    155     // like the documentation seems to say.
    156     //
    157     // XXX: if anyone complains about this, either fix it
    158     // or tell them to grow up and stop complaining.
    159     //
    160     // bash/bsdglob says this:
    161     // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]]
    162     // but we do this instead:
    163     , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]]
    164 
    165     // test partial parsing in the presence of comment/negation chars
    166     , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]]
    167     , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]]
    168 
    169     // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped.
    170     , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g"
    171       , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"]
    172       , {}
    173       , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]]
    174 
    175 
    176     // crazy nested {,,} and *(||) tests.
    177     , function () {
    178         files = [ "a", "b", "c", "d"
    179                 , "ab", "ac", "ad"
    180                 , "bc", "cb"
    181                 , "bc,d", "c,db", "c,d"
    182                 , "d)", "(b|c", "*(b|c"
    183                 , "b|c", "b|cc", "cb|c"
    184                 , "x(a|b|c)", "x(a|c)"
    185                 , "(a|b|c)", "(a|c)"]
    186       }
    187     , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]]
    188     , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]]
    189     // a
    190     // *(b|c)
    191     // *(b|d)
    192     , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]]
    193     , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]]
    194 
    195 
    196     // test various flag settings.
    197     , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"]
    198       , { noext: true } ]
    199     , ["a?b", ["x/y/acb", "acb/"], {matchBase: true}
    200       , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ]
    201     , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]]
    202 
    203 
    204     // begin channelling Boole and deMorgan...
    205     , "negation tests"
    206     , function () {
    207         files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"]
    208       }
    209 
    210     // anything that is NOT a* matches.
    211     , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]]
    212 
    213     // anything that IS !a* matches.
    214     , ["!a*", ["!ab", "!abc"], {nonegate: true}]
    215 
    216     // anything that IS a* matches
    217     , ["!!a*", ["a!b"]]
    218 
    219     // anything that is NOT !a* matches
    220     , ["!\\!a*", ["a!b", "d", "e", "\\!a"]]
    221 
    222     // negation nestled within a pattern
    223     , function () {
    224         files = [ "foo.js"
    225                 , "foo.bar"
    226                 // can't match this one without negative lookbehind.
    227                 , "foo.js.js"
    228                 , "blar.js"
    229                 , "foo."
    230                 , "boo.js.boo" ]
    231       }
    232     , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ]
    233 
    234     // https://github.com/isaacs/minimatch/issues/5
    235     , function () {
    236         files = [ 'a/b/.x/c'
    237                 , 'a/b/.x/c/d'
    238                 , 'a/b/.x/c/d/e'
    239                 , 'a/b/.x'
    240                 , 'a/b/.x/'
    241                 , 'a/.x/b'
    242                 , '.x'
    243                 , '.x/'
    244                 , '.x/a'
    245                 , '.x/a/b'
    246                 , 'a/.x/b/.x/c'
    247                 , '.x/.x' ]
    248     }
    249     , ["**/.x/**", [ '.x/'
    250                    , '.x/a'
    251                    , '.x/a/b'
    252                    , 'a/.x/b'
    253                    , 'a/b/.x/'
    254                    , 'a/b/.x/c'
    255                    , 'a/b/.x/c/d'
    256                    , 'a/b/.x/c/d/e' ] ]
    257 
    258     ].forEach(function (c) {
    259       if (typeof c === "function") return c()
    260       if (typeof c === "string") return t.comment(c)
    261 
    262       var pattern = c[0]
    263         , expect = c[1].sort(alpha)
    264         , options = c[2] || {}
    265         , f = c[3] || files
    266         , tapOpts = c[4] || {}
    267 
    268       // options.debug = true
    269       var m = new mm.Minimatch(pattern, options)
    270       var r = m.makeRe()
    271       tapOpts.re = String(r) || JSON.stringify(r)
    272       tapOpts.files = JSON.stringify(f)
    273       tapOpts.pattern = pattern
    274       tapOpts.set = m.set
    275       tapOpts.negated = m.negate
    276 
    277       var actual = mm.match(f, pattern, options)
    278       actual.sort(alpha)
    279 
    280       t.equivalent( actual, expect
    281                   , JSON.stringify(pattern) + " " + JSON.stringify(expect)
    282                   , tapOpts )
    283     })
     357  patterns.forEach(function (c) {
     358    if (typeof c === "function") return c()
     359    if (typeof c === "string") return t.comment(c)
     360
     361    var pattern = c[0]
     362      , expect = c[1].sort(alpha)
     363      , options = c[2] || {}
     364      , f = c[3] || files
     365      , tapOpts = c[4] || {}
     366
     367    // options.debug = true
     368    var m = new mm.Minimatch(pattern, options)
     369    var r = m.makeRe()
     370    var expectRe = regexps[re++]
     371    tapOpts.re = String(r) || JSON.stringify(r)
     372    tapOpts.files = JSON.stringify(f)
     373    tapOpts.pattern = pattern
     374    tapOpts.set = m.set
     375    tapOpts.negated = m.negate
     376
     377    var actual = mm.match(f, pattern, options)
     378    actual.sort(alpha)
     379
     380    t.equivalent( actual, expect
     381                , JSON.stringify(pattern) + " " + JSON.stringify(expect)
     382                , tapOpts )
     383
     384    t.equal(tapOpts.re, expectRe, tapOpts)
     385  })
    284386
    285387  t.comment("time=" + (Date.now() - start) + "ms")
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/package.json

    r484 r516  
    77  "name": "glob",
    88  "description": "a little globber",
    9   "version": "3.1.14",
     9  "version": "3.2.9",
    1010  "repository": {
    1111    "type": "git",
     
    1717  },
    1818  "dependencies": {
    19     "minimatch": "0.2",
    20     "graceful-fs": "~1.1.2",
    21     "inherits": "1"
     19    "minimatch": "~0.2.11",
     20    "inherits": "2"
    2221  },
    2322  "devDependencies": {
    24     "tap": "~0.3",
     23    "tap": "~0.4.0",
    2524    "mkdirp": "0",
    2625    "rimraf": "1"
    2726  },
    2827  "scripts": {
    29     "test": "tap test/*.js"
     28    "test": "tap test/*.js",
     29    "test-regen": "TEST_REGEN=1 node test/00-setup.js"
    3030  },
    3131  "license": "BSD",
    32   "readme": "# Glob\n\nThis is a glob implementation in JavaScript.  It uses the `minimatch`\nlibrary to do its matching.\n\n## Attention: node-glob users!\n\nThe API has changed dramatically between 2.x and 3.x. This library is\nnow 100% JavaScript, and the integer flags have been replaced with an\noptions object.\n\nAlso, there's an event emitter class, proper tests, and all the other\nthings you've come to expect from node modules.\n\nAnd best of all, no compilation!\n\n## Usage\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n  // files is an array of filenames.\n  // If the `nonull` option is set, and nothing\n  // was found, then files is [\"**/*.js\"]\n  // er is an error object or null.\n})\n```\n\n## Features\n\nPlease see the [minimatch\ndocumentation](https://github.com/isaacs/minimatch) for more details.\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob(pattern, [options], cb)\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* `cb` {Function}\n  * `err` {Error | null}\n  * `matches` {Array<String>} filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options]\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* return: {Array<String>} filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instanting the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` {String} pattern to search for\n* `options` {Object}\n* `cb` {Function} Called when an error occurs, or matches are found\n  * `err` {Error | null}\n  * `matches` {Array<String>} filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `error` The error encountered.  When an error is encountered, the\n  glob object is in an undefined state, and should be discarded.\n* `aborted` Boolean which is set to true when calling `abort()`.  There\n  is no way at this time to continue a glob search after aborting, but\n  you can re-use the statCache to avoid having to duplicate syscalls.\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n  matches found.  If the `nonull` option is set, and no match was found,\n  then the `matches` list contains the original pattern.  The matches\n  are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the matched.\n* `error` Emitted when an unexpected error is encountered, or whenever\n  any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `abort` Stop the search.\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior.  Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the glob object, as well.\n\n* `cwd` The current working directory in which to search.  Defaults\n  to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n  onto.  Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n  systems, and `C:\\` or some such on Windows.)\n* `nomount` By default, a pattern starting with a forward-slash will be\n  \"mounted\" onto the root setting, so that a valid filesystem path is\n  returned.  Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches.  Note that this\n  requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results.  This reduces performance\n  somewhat, and is completely unnecessary, unless `readdir` is presumed\n  to be an untrustworthy indicator of file existence.  It will cause\n  ELOOP to be triggered one level sooner in the case of cyclical\n  symbolic links.\n* `silent` When an unusual error is encountered\n  when attempting to read a directory, a warning will be printed to\n  stderr.  Set the `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered\n  when attempting to read a directory, the process will just continue on\n  in search of other matches.  Set the `strict` option to raise an error\n  in these cases.\n* `statCache` A cache of results of filesystem information, to prevent\n  unnecessary stat calls.  While it should not normally be necessary to\n  set this, you may pass the statCache from one glob() call to the\n  options object of another, if you know that the filesystem will not\n  change between calls.  (See \"Race Conditions\" below.)\n* `sync` Perform a synchronous glob search.\n* `nounique` In some cases, brace-expanded patterns can result in the\n  same file showing up multiple times in the result set.  By default,\n  this implementation prevents duplicates in the result set.\n  Set this flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n  containing the pattern itself.  This is the default in glob(3).\n* `nocase` Perform a case-insensitive match.  Note that case-insensitive\n  filesystems will sometimes result in glob returning results that are\n  case-insensitively matched anyway, since readdir and stat will not\n  raise an error.\n* `debug` Set to enable debug logging in minimatch and glob.\n* `globDebug` Set to enable debug logging in glob, but not minimatch.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated.  Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally.  This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything.  Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set.  This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.  **Note that this is different from the way that `**` is\nhandled by ruby's `Dir` class.**\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes.  For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`.  This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern.  Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity.  Since those two are valid, matching proceeds.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation.  You must use\nforward-slashes **only** in glob expressions.  Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`.  On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead.  However, this also makes it even more susceptible to races,\nespecially if the statCache object is reused between glob calls.\n\nUsers are thus advised not to use a glob result as a\nguarantee of filesystem state in the face of rapid changes.\nFor the vast majority of operations, this is never a problem.\n",
     32  "readme": "# Glob\n\nMatch files using the patterns the shell uses, like stars and stuff.\n\nThis is a glob implementation in JavaScript.  It uses the `minimatch`\nlibrary to do its matching.\n\n## Attention: node-glob users!\n\nThe API has changed dramatically between 2.x and 3.x. This library is\nnow 100% JavaScript, and the integer flags have been replaced with an\noptions object.\n\nAlso, there's an event emitter class, proper tests, and all the other\nthings you've come to expect from node modules.\n\nAnd best of all, no compilation!\n\n## Usage\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n  // files is an array of filenames.\n  // If the `nonull` option is set, and nothing\n  // was found, then files is [\"**/*.js\"]\n  // er is an error object or null.\n})\n```\n\n## Features\n\nPlease see the [minimatch\ndocumentation](https://github.com/isaacs/minimatch) for more details.\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob(pattern, [options], cb)\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* `cb` {Function}\n  * `err` {Error | null}\n  * `matches` {Array<String>} filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options])\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* return: {Array<String>} filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instanting the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` {String} pattern to search for\n* `options` {Object}\n* `cb` {Function} Called when an error occurs, or matches are found\n  * `err` {Error | null}\n  * `matches` {Array<String>} filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `error` The error encountered.  When an error is encountered, the\n  glob object is in an undefined state, and should be discarded.\n* `aborted` Boolean which is set to true when calling `abort()`.  There\n  is no way at this time to continue a glob search after aborting, but\n  you can re-use the statCache to avoid having to duplicate syscalls.\n* `statCache` Collection of all the stat results the glob search\n  performed.\n* `cache` Convenience object.  Each field has the following possible\n  values:\n  * `false` - Path does not exist\n  * `true` - Path exists\n  * `1` - Path exists, and is not a directory\n  * `2` - Path exists, and is a directory\n  * `[file, entries, ...]` - Path exists, is a directory, and the\n    array value is the results of `fs.readdir`\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n  matches found.  If the `nonull` option is set, and no match was found,\n  then the `matches` list contains the original pattern.  The matches\n  are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the matched.\n* `error` Emitted when an unexpected error is encountered, or whenever\n  any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `abort` Stop the search.\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior.  Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the glob object, as well.\n\n* `cwd` The current working directory in which to search.  Defaults\n  to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n  onto.  Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n  systems, and `C:\\` or some such on Windows.)\n* `dot` Include `.dot` files in normal matches and `globstar` matches.\n  Note that an explicit dot in a portion of the pattern will always\n  match dot files.\n* `nomount` By default, a pattern starting with a forward-slash will be\n  \"mounted\" onto the root setting, so that a valid filesystem path is\n  returned.  Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches.  Note that this\n  requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results.  This reduces performance\n  somewhat, and is completely unnecessary, unless `readdir` is presumed\n  to be an untrustworthy indicator of file existence.  It will cause\n  ELOOP to be triggered one level sooner in the case of cyclical\n  symbolic links.\n* `silent` When an unusual error is encountered\n  when attempting to read a directory, a warning will be printed to\n  stderr.  Set the `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered\n  when attempting to read a directory, the process will just continue on\n  in search of other matches.  Set the `strict` option to raise an error\n  in these cases.\n* `cache` See `cache` property above.  Pass in a previously generated\n  cache object to save some fs calls.\n* `statCache` A cache of results of filesystem information, to prevent\n  unnecessary stat calls.  While it should not normally be necessary to\n  set this, you may pass the statCache from one glob() call to the\n  options object of another, if you know that the filesystem will not\n  change between calls.  (See \"Race Conditions\" below.)\n* `sync` Perform a synchronous glob search.\n* `nounique` In some cases, brace-expanded patterns can result in the\n  same file showing up multiple times in the result set.  By default,\n  this implementation prevents duplicates in the result set.\n  Set this flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n  containing the pattern itself.  This is the default in glob(3).\n* `nocase` Perform a case-insensitive match.  Note that case-insensitive\n  filesystems will sometimes result in glob returning results that are\n  case-insensitively matched anyway, since readdir and stat will not\n  raise an error.\n* `debug` Set to enable debug logging in minimatch and glob.\n* `globDebug` Set to enable debug logging in glob, but not minimatch.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated.  Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally.  This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything.  Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set.  This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes.  For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`.  This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern.  Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity.  Since those two are valid, matching proceeds.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation.  You must use\nforward-slashes **only** in glob expressions.  Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`.  On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead.  However, this also makes it even more susceptible to races,\nespecially if the cache or statCache objects are reused between glob\ncalls.\n\nUsers are thus advised not to use a glob result as a guarantee of\nfilesystem state in the face of rapid changes.  For the vast majority\nof operations, this is never a problem.\n",
    3333  "readmeFilename": "README.md",
    3434  "bugs": {
     
    3636  },
    3737  "homepage": "https://github.com/isaacs/node-glob",
    38   "_id": "glob@3.1.14",
    39   "dist": {
    40     "shasum": "d76e8de8f257e1f7409dac971bfd2436b0e444dd"
    41   },
    42   "_from": "glob@3.1.14",
    43   "_resolved": "https://registry.npmjs.org/glob/-/glob-3.1.14.tgz"
     38  "_id": "glob@3.2.9",
     39  "_from": "glob@>=3.1.9"
    4440}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/00-setup.js

    r484 r516  
    4949})
    5050
    51 tap.test("symlinky", function (t) {
    52   var d = path.dirname(symlinkTo)
    53   console.error("mkdirp", d)
    54   mkdirp(d, 0755, function (er) {
    55     t.ifError(er)
    56     fs.symlink(symlinkFrom, symlinkTo, function (er) {
    57       t.ifError(er, "make symlink")
     51if (process.platform !== "win32") {
     52  tap.test("symlinky", function (t) {
     53    var d = path.dirname(symlinkTo)
     54    console.error("mkdirp", d)
     55    mkdirp(d, 0755, function (er) {
     56      t.ifError(er)
     57      fs.symlink(symlinkFrom, symlinkTo, "dir", function (er) {
     58        t.ifError(er, "make symlink")
     59        t.end()
     60      })
     61    })
     62  })
     63}
     64
     65;["foo","bar","baz","asdf","quux","qwer","rewq"].forEach(function (w) {
     66  w = "/tmp/glob-test/" + w
     67  tap.test("create " + w, function (t) {
     68    mkdirp(w, function (er) {
     69      if (er)
     70        throw er
     71      t.pass(w)
    5872      t.end()
    5973    })
    6074  })
    6175})
     76
     77
     78// generate the bash pattern test-fixtures if possible
     79if (process.platform === "win32" || !process.env.TEST_REGEN) {
     80  console.error("Windows, or TEST_REGEN unset.  Using cached fixtures.")
     81  return
     82}
     83
     84var spawn = require("child_process").spawn;
     85var globs =
     86  // put more patterns here.
     87  // anything that would be directly in / should be in /tmp/glob-test
     88  ["test/a/*/+(c|g)/./d"
     89  ,"test/a/**/[cg]/../[cg]"
     90  ,"test/a/{b,c,d,e,f}/**/g"
     91  ,"test/a/b/**"
     92  ,"test/**/g"
     93  ,"test/a/abc{fed,def}/g/h"
     94  ,"test/a/abc{fed/g,def}/**/"
     95  ,"test/a/abc{fed/g,def}/**///**/"
     96  ,"test/**/a/**/"
     97  ,"test/+(a|b|c)/a{/,bc*}/**"
     98  ,"test/*/*/*/f"
     99  ,"test/**/f"
     100  ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**"
     101  ,"{./*/*,/tmp/glob-test/*}"
     102  ,"{/tmp/glob-test/*,*}" // evil owl face!  how you taunt me!
     103  ,"test/a/!(symlink)/**"
     104  ]
     105var bashOutput = {}
     106var fs = require("fs")
     107
     108globs.forEach(function (pattern) {
     109  tap.test("generate fixture " + pattern, function (t) {
     110    var cmd = "shopt -s globstar && " +
     111              "shopt -s extglob && " +
     112              "shopt -s nullglob && " +
     113              // "shopt >&2; " +
     114              "eval \'for i in " + pattern + "; do echo $i; done\'"
     115    var cp = spawn("bash", ["-c", cmd], { cwd: path.dirname(__dirname) })
     116    var out = []
     117    cp.stdout.on("data", function (c) {
     118      out.push(c)
     119    })
     120    cp.stderr.pipe(process.stderr)
     121    cp.on("close", function (code) {
     122      out = flatten(out)
     123      if (!out)
     124        out = []
     125      else
     126        out = cleanResults(out.split(/\r*\n/))
     127
     128      bashOutput[pattern] = out
     129      t.notOk(code, "bash test should finish nicely")
     130      t.end()
     131    })
     132  })
     133})
     134
     135tap.test("save fixtures", function (t) {
     136  var fname = path.resolve(__dirname, "bash-results.json")
     137  var data = JSON.stringify(bashOutput, null, 2) + "\n"
     138  fs.writeFile(fname, data, function (er) {
     139    t.ifError(er)
     140    t.end()
     141  })
     142})
     143
     144function cleanResults (m) {
     145  // normalize discrepancies in ordering, duplication,
     146  // and ending slashes.
     147  return m.map(function (m) {
     148    return m.replace(/\/+/g, "/").replace(/\/$/, "")
     149  }).sort(alphasort).reduce(function (set, f) {
     150    if (f !== set[set.length - 1]) set.push(f)
     151    return set
     152  }, []).sort(alphasort).map(function (f) {
     153    // de-windows
     154    return (process.platform !== 'win32') ? f
     155           : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/')
     156  })
     157}
     158
     159function flatten (chunks) {
     160  var s = 0
     161  chunks.forEach(function (c) { s += c.length })
     162  var out = new Buffer(s)
     163  s = 0
     164  chunks.forEach(function (c) {
     165    c.copy(out, s)
     166    s += c.length
     167  })
     168
     169  return out.toString().trim()
     170}
     171
     172function alphasort (a, b) {
     173  a = a.toLowerCase()
     174  b = b.toLowerCase()
     175  return a > b ? 1 : a < b ? -1 : 0
     176}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/bash-comparison.js

    r484 r516  
    33var tap = require("tap")
    44, child_process = require("child_process")
    5 
    6 // put more patterns here.
    7 , globs =
    8   ["test/a/*/+(c|g)/./d"
    9   ,"test/a/**/[cg]/../[cg]"
    10   ,"test/a/{b,c,d,e,f}/**/g"
    11   ,"test/a/b/**"
    12   ,"test/**/g"
    13   ,"test/a/abc{fed,def}/g/h"
    14   ,"test/a/abc{fed/g,def}/**/"
    15   ,"test/a/abc{fed/g,def}/**///**/"
    16   ,"test/**/a/**/"
    17   ,"test/+(a|b|c)/a{/,bc*}/**"
    18   ,"test/*/*/*/f"
    19   ,"test/**/f"
    20   ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**"
    21   ,"{./*/*,/usr/local/*}"
    22   ,"{/*,*}" // evil owl face!  how you taunt me!
    23   ]
     5, bashResults = require("./bash-results.json")
     6, globs = Object.keys(bashResults)
    247, glob = require("../")
    258, path = require("path")
     
    3619
    3720globs.forEach(function (pattern) {
    38   var echoOutput
     21  var expect = bashResults[pattern]
     22  // anything regarding the symlink thing will fail on windows, so just skip it
     23  if (process.platform === "win32" &&
     24      expect.some(function (m) {
     25        return /\/symlink\//.test(m)
     26      }))
     27    return
     28
    3929  tap.test(pattern, function (t) {
    40     var bashPattern = pattern
    41     , cmd = "shopt -s globstar && " +
    42             "shopt -s extglob && " +
    43             "shopt -s nullglob && " +
    44             // "shopt >&2; " +
    45             "eval \'for i in " + bashPattern + "; do echo $i; done\'"
    46     , cp = child_process.spawn("bash", ["-c",cmd])
    47     , out = []
    48     , globResult
    49     cp.stdout.on("data", function (c) {
    50       out.push(c)
     30    glob(pattern, function (er, matches) {
     31      if (er)
     32        throw er
     33
     34      // sort and unmark, just to match the shell results
     35      matches = cleanResults(matches)
     36
     37      t.deepEqual(matches, expect, pattern)
     38      t.end()
    5139    })
    52     cp.stderr.on("data", function (c) {
    53       process.stderr.write(c)
    54     })
    55     cp.on("close", function () {
    56       echoOutput = flatten(out)
    57       if (!echoOutput) echoOutput = []
    58       else {
    59         echoOutput = echoOutput.split(/\r*\n/).map(function (m) {
    60           // Bash is a oddly inconsistent with slashes in the
    61           // the results.  This implementation is a bit more
    62           // normalized.  Account for this in the test results.
    63           return m.replace(/\/+/g, "/").replace(/\/$/, "")
    64         }).sort(alphasort).reduce(function (set, f) {
    65           if (f !== set[set.length - 1]) set.push(f)
    66           return set
    67         }, []).sort(alphasort)
    68       }
    69       next()
    70     })
    71 
    72     glob(pattern, function (er, matches) {
    73       // sort and unpark, just to match the shell results
    74       matches = matches.map(function (m) {
    75         return m.replace(/\/+/g, "/").replace(/\/$/, "")
    76       }).sort(alphasort).reduce(function (set, f) {
    77         if (f !== set[set.length - 1]) set.push(f)
    78         return set
    79       }, []).sort(alphasort)
    80 
    81       t.ifError(er, pattern + " should not error")
    82       globResult = matches
    83       next()
    84     })
    85 
    86     function next () {
    87       if (!echoOutput || !globResult) return
    88 
    89       t.deepEqual(globResult, echoOutput, "should match shell")
    90       t.end()
    91     }
    9240  })
    9341
    9442  tap.test(pattern + " sync", function (t) {
    95     var matches = glob.sync(pattern).map(function (m) {
    96         return m.replace(/\/+/g, "/").replace(/\/$/, "")
    97       }).sort(alphasort).reduce(function (set, f) {
    98         if (f !== set[set.length - 1]) set.push(f)
    99         return set
    100       }, []).sort(alphasort)
     43    var matches = cleanResults(glob.sync(pattern))
    10144
    102     t.deepEqual(matches, echoOutput, "should match shell")
     45    t.deepEqual(matches, expect, "should match shell")
    10346    t.end()
    10447  })
    10548})
    10649
    107 function flatten (chunks) {
    108   var s = 0
    109   chunks.forEach(function (c) { s += c.length })
    110   var out = new Buffer(s)
    111   s = 0
    112   chunks.forEach(function (c) {
    113     c.copy(out, s)
    114     s += c.length
     50function cleanResults (m) {
     51  // normalize discrepancies in ordering, duplication,
     52  // and ending slashes.
     53  return m.map(function (m) {
     54    return m.replace(/\/+/g, "/").replace(/\/$/, "")
     55  }).sort(alphasort).reduce(function (set, f) {
     56    if (f !== set[set.length - 1]) set.push(f)
     57    return set
     58  }, []).sort(alphasort).map(function (f) {
     59    // de-windows
     60    return (process.platform !== 'win32') ? f
     61           : f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/')
    11562  })
    116 
    117   return out.toString().trim()
    11863}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/mark.js

    r484 r516  
    22var glob = require('../')
    33process.chdir(__dirname)
     4
     5// expose timing issues
     6var lag = 5
     7glob.Glob.prototype._stat = function(o) { return function(f, cb) {
     8  var args = arguments
     9  setTimeout(function() {
     10    o.call(this, f, cb)
     11  }.bind(this), lag += 5)
     12}}(glob.Glob.prototype._stat)
     13
     14
     15test("mark, with **", function (t) {
     16  glob("a/*b*/**", {mark: true}, function (er, results) {
     17    if (er)
     18      throw er
     19    var expect =
     20      [ 'a/abcdef/',
     21        'a/abcdef/g/',
     22        'a/abcdef/g/h',
     23        'a/abcfed/',
     24        'a/abcfed/g/',
     25        'a/abcfed/g/h',
     26        'a/b/',
     27        'a/b/c/',
     28        'a/b/c/d',
     29        'a/bc/',
     30        'a/bc/e/',
     31        'a/bc/e/f',
     32        'a/cb/',
     33        'a/cb/e/',
     34        'a/cb/e/f' ]
     35
     36    t.same(results, expect)
     37    t.end()
     38  })
     39})
    440
    541test("mark, no / on pattern", function (t) {
     
    743    if (er)
    844      throw er
    9     t.same(results, [ 'a/abcdef/',
    10                       'a/abcfed/',
    11                       'a/b/',
    12                       'a/bc/',
    13                       'a/c/',
    14                       'a/cb/',
    15                       'a/symlink/' ])
     45    var expect = [ 'a/abcdef/',
     46                   'a/abcfed/',
     47                   'a/b/',
     48                   'a/bc/',
     49                   'a/c/',
     50                   'a/cb/' ]
     51
     52    if (process.platform !== "win32")
     53      expect.push('a/symlink/')
     54
     55    t.same(results, expect)
    1656    t.end()
     57  }).on('match', function(m) {
     58    t.similar(m, /\/$/)
    1759  })
    1860})
     
    2264    if (er)
    2365      throw er
    24     t.same(results, [ 'a/abcdef',
    25                       'a/abcfed',
    26                       'a/b',
    27                       'a/bc',
    28                       'a/c',
    29                       'a/cb',
    30                       'a/symlink' ])
     66    var expect = [ 'a/abcdef',
     67                   'a/abcfed',
     68                   'a/b',
     69                   'a/bc',
     70                   'a/c',
     71                   'a/cb' ]
     72
     73    if (process.platform !== "win32")
     74      expect.push('a/symlink')
     75    t.same(results, expect)
    3176    t.end()
     77  }).on('match', function(m) {
     78    t.similar(m, /[^\/]$/)
    3279  })
    3380})
     
    3784    if (er)
    3885      throw er
    39     t.same(results, [ 'a/abcdef/',
    40                       'a/abcfed/',
    41                       'a/b/',
    42                       'a/bc/',
    43                       'a/c/',
    44                       'a/cb/',
    45                       'a/symlink/' ])
     86    var expect = [ 'a/abcdef/',
     87                    'a/abcfed/',
     88                    'a/b/',
     89                    'a/bc/',
     90                    'a/c/',
     91                    'a/cb/' ]
     92    if (process.platform !== "win32")
     93      expect.push('a/symlink/')
     94    t.same(results, expect)
    4695    t.end()
     96  }).on('match', function(m) {
     97    t.similar(m, /\/$/)
    4798  })
    4899})
     
    52103    if (er)
    53104      throw er
    54     t.same(results, [ 'a/abcdef/',
    55                       'a/abcfed/',
    56                       'a/b/',
    57                       'a/bc/',
    58                       'a/c/',
    59                       'a/cb/',
    60                       'a/symlink/' ])
     105    var expect = [ 'a/abcdef/',
     106                   'a/abcfed/',
     107                   'a/b/',
     108                   'a/bc/',
     109                   'a/c/',
     110                   'a/cb/' ]
     111    if (process.platform !== "win32")
     112      expect.push('a/symlink/')
     113    t.same(results, expect)
    61114    t.end()
     115  }).on('match', function(m) {
     116    t.similar(m, /\/$/)
    62117  })
    63118})
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/pause-resume.js

    r484 r516  
    44// just some gnarly pattern with lots of matches
    55, pattern = "test/a/!(symlink)/**"
     6, bashResults = require("./bash-results.json")
     7, patterns = Object.keys(bashResults)
    68, glob = require("../")
    79, Glob = glob.Glob
     
    2628    if (f !== set[set.length - 1]) set.push(f)
    2729    return set
    28   }, []).sort(alphasort)
     30  }, []).sort(alphasort).map(function (f) {
     31    // de-windows
     32    return (process.platform !== 'win32') ? f
     33           : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/')
     34  })
    2935}
    30 
    31 function flatten (chunks) {
    32   var s = 0
    33   chunks.forEach(function (c) { s += c.length })
    34   var out = new Buffer(s)
    35   s = 0
    36   chunks.forEach(function (c) {
    37     c.copy(out, s)
    38     s += c.length
    39   })
    40 
    41   return out.toString().trim()
    42 }
    43 var bashResults
    44 tap.test("get bash output", function (t) {
    45   var bashPattern = pattern
    46   , cmd = "shopt -s globstar && " +
    47           "shopt -s extglob && " +
    48           "shopt -s nullglob && " +
    49           // "shopt >&2; " +
    50           "eval \'for i in " + bashPattern + "; do echo $i; done\'"
    51   , cp = child_process.spawn("bash", ["-c",cmd])
    52   , out = []
    53   , globResult
    54   cp.stdout.on("data", function (c) {
    55     out.push(c)
    56   })
    57   cp.stderr.on("data", function (c) {
    58     process.stderr.write(c)
    59   })
    60   cp.on("close", function () {
    61     bashResults = flatten(out)
    62     if (!bashResults) return t.fail("Didn't get results from bash")
    63     else {
    64       bashResults = cleanResults(bashResults.split(/\r*\n/))
    65     }
    66     t.ok(bashResults.length, "got some results")
    67     t.end()
    68   })
    69 })
    7036
    7137var globResults = []
     
    7440  , paused = false
    7541  , res = []
     42  , expect = bashResults[pattern]
    7643
    7744  g.on("pause", function () {
     
    9865      "end event matches should be the same as match events")
    9966
    100     t.deepEqual(matches, bashResults,
     67    t.deepEqual(matches, expect,
    10168      "glob matches should be the same as bash results")
    10269
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/root.js

    r484 r516  
    1 var tap = require("tap")
     1var t = require("tap")
    22
    33var origCwd = process.cwd()
    44process.chdir(__dirname)
    55
    6 tap.test("changing root and searching for /b*/**", function (t) {
    7   var glob = require('../')
    8   var path = require('path')
    9   t.test('.', function (t) {
    10     glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) {
    11       t.ifError(er)
    12       t.like(matches, [])
    13       t.end()
    14     })
    15   })
     6var glob = require('../')
     7var path = require('path')
    168
    17   t.test('a', function (t) {
    18     glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) {
    19       t.ifError(er)
    20       t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) {
    21         return path.join(path.resolve('a'), m)
    22       }))
    23       t.end()
    24     })
    25   })
    26 
    27   t.test('root=a, cwd=a/b', function (t) {
    28     glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) {
    29       t.ifError(er)
    30       t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) {
    31         return path.join(path.resolve('a'), m)
    32       }))
    33       t.end()
    34     })
    35   })
    36 
    37   t.test('cd -', function (t) {
    38     process.chdir(origCwd)
     9t.test('.', function (t) {
     10  glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) {
     11    t.ifError(er)
     12    t.like(matches, [])
    3913    t.end()
    4014  })
     15})
    4116
     17
     18t.test('a', function (t) {
     19  console.error("root=" + path.resolve('a'))
     20  glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) {
     21    t.ifError(er)
     22    var wanted = [
     23        '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f'
     24      ].map(function (m) {
     25        return path.join(path.resolve('a'), m).replace(/\\/g, '/')
     26      })
     27
     28    t.like(matches, wanted)
     29    t.end()
     30  })
     31})
     32
     33t.test('root=a, cwd=a/b', function (t) {
     34  glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) {
     35    t.ifError(er)
     36    t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) {
     37      return path.join(path.resolve('a'), m).replace(/\\/g, '/')
     38    }))
     39    t.end()
     40  })
     41})
     42
     43t.test('cd -', function (t) {
     44  process.chdir(origCwd)
    4245  t.end()
    4346})
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/.travis.yml

    r484 r516  
    11language: node_js
    22node_js:
    3   - 0.6
    4   - 0.8
     3  - "0.8"
     4  - "0.10"
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/index.js

    r484 r516  
    11var path = require('path');
     2var minimist = require('minimist');
    23var wordwrap = require('wordwrap');
    34
     
    1819
    1920var exports = module.exports = Argv;
    20 function Argv (args, cwd) {
     21function Argv (processArgs, cwd) {
    2122    var self = {};
    2223    if (!cwd) cwd = process.cwd();
     
    3233    ;
    3334   
    34     if (process.argv[1] == process.env._) {
     35    if (process.env._ != undefined && process.argv[1] == process.env._) {
    3536        self.$0 = process.env._.replace(
    3637            path.dirname(process.execPath) + '/', ''
     
    3839    }
    3940   
    40     var flags = { bools : {}, strings : {} };
     41    var options = {
     42        boolean: [],
     43        string: [],
     44        alias: {},
     45        default: []
     46    };
    4147   
    4248    self.boolean = function (bools) {
    43         if (!Array.isArray(bools)) {
    44             bools = [].slice.call(arguments);
    45         }
    46        
    47         bools.forEach(function (name) {
    48             flags.bools[name] = true;
    49         });
    50        
     49        options.boolean.push.apply(options.boolean, [].concat(bools));
    5150        return self;
    5251    };
    5352   
    5453    self.string = function (strings) {
    55         if (!Array.isArray(strings)) {
    56             strings = [].slice.call(arguments);
    57         }
    58        
    59         strings.forEach(function (name) {
    60             flags.strings[name] = true;
    61         });
    62        
    63         return self;
    64     };
    65    
    66     var aliases = {};
     54        options.string.push.apply(options.string, [].concat(strings));
     55        return self;
     56    };
     57   
     58    self.default = function (key, value) {
     59        if (typeof key === 'object') {
     60            Object.keys(key).forEach(function (k) {
     61                self.default(k, key[k]);
     62            });
     63        }
     64        else {
     65            options.default[key] = value;
     66        }
     67        return self;
     68    };
     69   
    6770    self.alias = function (x, y) {
    6871        if (typeof x === 'object') {
     
    7174            });
    7275        }
    73         else if (Array.isArray(y)) {
    74             y.forEach(function (yy) {
    75                 self.alias(x, yy);
    76             });
    77         }
    78         else {
    79             var zs = (aliases[x] || []).concat(aliases[y] || []).concat(x, y);
    80             aliases[x] = zs.filter(function (z) { return z != x });
    81             aliases[y] = zs.filter(function (z) { return z != y });
    82         }
    83        
     76        else {
     77            options.alias[x] = (options.alias[x] || []).concat(y);
     78        }
    8479        return self;
    8580    };
     
    129124    };
    130125   
    131     var defaults = {};
    132     self.default = function (key, value) {
    133         if (typeof key === 'object') {
    134             Object.keys(key).forEach(function (k) {
    135                 self.default(k, key[k]);
    136             });
    137         }
    138         else {
    139             defaults[key] = value;
    140         }
    141        
    142         return self;
    143     };
    144    
    145126    var descriptions = {};
    146127    self.describe = function (key, desc) {
     
    157138   
    158139    self.parse = function (args) {
    159         return Argv(args).argv;
     140        return parseArgs(args);
    160141    };
    161142   
     
    204185            Object.keys(descriptions)
    205186            .concat(Object.keys(demanded))
    206             .concat(Object.keys(defaults))
     187            .concat(Object.keys(options.default))
    207188            .reduce(function (acc, key) {
    208189                if (key !== '_') acc[key] = true;
     
    218199       
    219200        var switches = keys.reduce(function (acc, key) {
    220             acc[key] = [ key ].concat(aliases[key] || [])
     201            acc[key] = [ key ].concat(options.alias[key] || [])
    221202                .map(function (sw) {
    222203                    return (sw.length > 1 ? '--' : '-') + sw
     
    255236            var type = null;
    256237           
    257             if (flags.bools[key]) type = '[boolean]';
    258             if (flags.strings[key]) type = '[string]';
     238            if (options.boolean[key]) type = '[boolean]';
     239            if (options.string[key]) type = '[string]';
    259240           
    260241            if (!wrap && dpadding.length > 0) {
     
    269250                    : null
    270251                ,
    271                 defaults[key] !== undefined
    272                     ? '[default: ' + JSON.stringify(defaults[key]) + ']'
     252                options.default[key] !== undefined
     253                    ? '[default: ' + JSON.stringify(options.default[key]) + ']'
    273254                    : null
    274255                ,
     
    299280   
    300281    Object.defineProperty(self, 'argv', {
    301         get : parseArgs,
     282        get : function () { return parseArgs(processArgs) },
    302283        enumerable : true,
    303284    });
    304285   
    305     function parseArgs () {
    306         var argv = { _ : [], $0 : self.$0 };
    307         Object.keys(flags.bools).forEach(function (key) {
    308             setArg(key, defaults[key] || false);
    309         });
    310        
    311         function setArg (key, val) {
    312             var num = Number(val);
    313             var value = typeof val !== 'string' || isNaN(num) ? val : num;
    314             if (flags.strings[key]) value = val;
    315            
    316             setKey(argv, key.split('.'), value);
    317            
    318             (aliases[key] || []).forEach(function (x) {
    319                 argv[x] = argv[key];
    320             });
    321         }
    322        
    323         for (var i = 0; i < args.length; i++) {
    324             var arg = args[i];
    325            
    326             if (arg === '--') {
    327                 argv._.push.apply(argv._, args.slice(i + 1));
    328                 break;
    329             }
    330             else if (arg.match(/^--.+=/)) {
    331                 var m = arg.match(/^--([^=]+)=(.*)/);
    332                 setArg(m[1], m[2]);
    333             }
    334             else if (arg.match(/^--no-.+/)) {
    335                 var key = arg.match(/^--no-(.+)/)[1];
    336                 setArg(key, false);
    337             }
    338             else if (arg.match(/^--.+/)) {
    339                 var key = arg.match(/^--(.+)/)[1];
    340                 var next = args[i + 1];
    341                 if (next !== undefined && !next.match(/^-/)
    342                 && !flags.bools[key]
    343                 && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
    344                     setArg(key, next);
    345                     i++;
    346                 }
    347                 else if (/^(true|false)$/.test(next)) {
    348                     setArg(key, next === 'true');
    349                     i++;
    350                 }
    351                 else {
    352                     setArg(key, true);
    353                 }
    354             }
    355             else if (arg.match(/^-[^-]+/)) {
    356                 var letters = arg.slice(1,-1).split('');
    357                
    358                 var broken = false;
    359                 for (var j = 0; j < letters.length; j++) {
    360                     if (letters[j+1] && letters[j+1].match(/\W/)) {
    361                         setArg(letters[j], arg.slice(j+2));
    362                         broken = true;
    363                         break;
    364                     }
    365                     else {
    366                         setArg(letters[j], true);
    367                     }
    368                 }
    369                
    370                 if (!broken) {
    371                     var key = arg.slice(-1)[0];
    372                    
    373                     if (args[i+1] && !args[i+1].match(/^-/)
    374                     && !flags.bools[key]
    375                     && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
    376                         setArg(key, args[i+1]);
    377                         i++;
    378                     }
    379                     else if (args[i+1] && /true|false/.test(args[i+1])) {
    380                         setArg(key, args[i+1] === 'true');
    381                         i++;
    382                     }
    383                     else {
    384                         setArg(key, true);
    385                     }
    386                 }
    387             }
    388             else {
    389                 var n = Number(arg);
    390                 argv._.push(flags.strings['_'] || isNaN(n) ? arg : n);
    391             }
    392         }
    393        
    394         Object.keys(defaults).forEach(function (key) {
    395             if (!(key in argv)) {
    396                 argv[key] = defaults[key];
    397                 if (key in aliases) {
    398                     argv[aliases[key]] = defaults[key];
    399                 }
    400             }
    401         });
     286    function parseArgs (args) {
     287        var argv = minimist(args, options);
     288        argv.$0 = self.$0;
    402289       
    403290        if (demanded._ && argv._.length < demanded._) {
     
    455342    return p.match(/^[.\/]/) ? p : './' + p;
    456343};
    457 
    458 function setKey (obj, keys, value) {
    459     var o = obj;
    460     keys.slice(0,-1).forEach(function (key) {
    461         if (o[key] === undefined) o[key] = {};
    462         o = o[key];
    463     });
    464    
    465     var key = keys[keys.length - 1];
    466     if (o[key] === undefined || typeof o[key] === 'boolean') {
    467         o[key] = value;
    468     }
    469     else if (Array.isArray(o[key])) {
    470         o[key].push(value);
    471     }
    472     else {
    473         o[key] = [ o[key], value ];
    474     }
    475 }
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/wordwrap/package.json

    r484 r516  
    4242  "homepage": "https://github.com/substack/node-wordwrap",
    4343  "_id": "wordwrap@0.0.2",
    44   "dist": {
    45     "shasum": "0e59bfdfda36959a4255195af71166e90abb9a7f"
    46   },
    47   "_from": "wordwrap@0.0.2",
    48   "_resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
     44  "_from": "wordwrap@~0.0.2"
    4945}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/package.json

    r484 r516  
    11{
    22  "name": "optimist",
    3   "version": "0.3.5",
     3  "version": "0.6.1",
    44  "description": "Light-weight option parsing with an argv hash. No optstrings attached.",
    55  "main": "./index.js",
    6   "directories": {
    7     "lib": ".",
    8     "test": "test",
    9     "example": "example"
    10   },
    116  "dependencies": {
    12     "wordwrap": "~0.0.2"
     7    "wordwrap": "~0.0.2",
     8    "minimist": "~0.0.1"
    139  },
    1410  "devDependencies": {
    1511    "hashish": "~0.0.4",
    16     "tap": "~0.2.4"
     12    "tap": "~0.4.0"
    1713  },
    1814  "scripts": {
     
    4137    "node": ">=0.4"
    4238  },
    43   "readme": "optimist\n========\n\nOptimist is a node.js library for option parsing for people who hate option\nparsing. More specifically, this module is for people who like all the --bells\nand -whistlz of program usage but think optstrings are a waste of time.\n\nWith optimist, option parsing doesn't have to suck (as much).\n\n[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist)\n\nexamples\n========\n\nWith Optimist, the options are just a hash! No optstrings attached.\n-------------------------------------------------------------------\n\nxup.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\n\nif (argv.rif - 5 * argv.xup > 7.138) {\n    console.log('Buy more riffiwobbles');\n}\nelse {\n    console.log('Sell the xupptumblers');\n}\n````\n\n***\n\n    $ ./xup.js --rif=55 --xup=9.52\n    Buy more riffiwobbles\n    \n    $ ./xup.js --rif 12 --xup 8.1\n    Sell the xupptumblers\n\n![This one's optimistic.](http://substack.net/images/optimistic.png)\n\nBut wait! There's more! You can do short options:\n-------------------------------------------------\n \nshort.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\n````\n\n***\n\n    $ ./short.js -x 10 -y 21\n    (10,21)\n\nAnd booleans, both long and short (and grouped):\n----------------------------------\n\nbool.js:\n\n````javascript\n#!/usr/bin/env node\nvar util = require('util');\nvar argv = require('optimist').argv;\n\nif (argv.s) {\n    util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');\n}\nconsole.log(\n    (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')\n);\n````\n\n***\n\n    $ ./bool.js -s\n    The cat says: meow\n    \n    $ ./bool.js -sp\n    The cat says: meow.\n\n    $ ./bool.js -sp --fr\n    Le chat dit: miaou.\n\nAnd non-hypenated options too! Just use `argv._`!\n-------------------------------------------------\n \nnonopt.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\nconsole.log(argv._);\n````\n\n***\n\n    $ ./nonopt.js -x 6.82 -y 3.35 moo\n    (6.82,3.35)\n    [ 'moo' ]\n    \n    $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz\n    (0.54,1.12)\n    [ 'foo', 'bar', 'baz' ]\n\nPlus, Optimist comes with .usage() and .demand()!\n-------------------------------------------------\n\ndivide.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .usage('Usage: $0 -x [num] -y [num]')\n    .demand(['x','y'])\n    .argv;\n\nconsole.log(argv.x / argv.y);\n````\n\n***\n \n    $ ./divide.js -x 55 -y 11\n    5\n    \n    $ node ./divide.js -x 4.91 -z 2.51\n    Usage: node ./divide.js -x [num] -y [num]\n\n    Options:\n      -x  [required]\n      -y  [required]\n\n    Missing required arguments: y\n\nEVEN MORE HOLY COW\n------------------\n\ndefault_singles.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .default('x', 10)\n    .default('y', 10)\n    .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n    $ ./default_singles.js -x 5\n    15\n\ndefault_hash.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .default({ x : 10, y : 10 })\n    .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n    $ ./default_hash.js -y 7\n    17\n\nAnd if you really want to get all descriptive about it...\n---------------------------------------------------------\n\nboolean_single.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .boolean('v')\n    .argv\n;\nconsole.dir(argv);\n````\n\n***\n\n    $ ./boolean_single.js -v foo bar baz\n    true\n    [ 'bar', 'baz', 'foo' ]\n\nboolean_double.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .boolean(['x','y','z'])\n    .argv\n;\nconsole.dir([ argv.x, argv.y, argv.z ]);\nconsole.dir(argv._);\n````\n\n***\n\n    $ ./boolean_double.js -x -z one two three\n    [ true, false, true ]\n    [ 'one', 'two', 'three' ]\n\nOptimist is here to help...\n---------------------------\n\nYou can describe parameters for help messages and set aliases. Optimist figures\nout how to format a handy help string automatically.\n\nline_count.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .usage('Count the lines in a file.\\nUsage: $0')\n    .demand('f')\n    .alias('f', 'file')\n    .describe('f', 'Load a file')\n    .argv\n;\n\nvar fs = require('fs');\nvar s = fs.createReadStream(argv.file);\n\nvar lines = 0;\ns.on('data', function (buf) {\n    lines += buf.toString().match(/\\n/g).length;\n});\n\ns.on('end', function () {\n    console.log(lines);\n});\n````\n\n***\n\n    $ node line_count.js\n    Count the lines in a file.\n    Usage: node ./line_count.js\n\n    Options:\n      -f, --file  Load a file  [required]\n\n    Missing required arguments: f\n\n    $ node line_count.js --file line_count.js \n    20\n    \n    $ node line_count.js -f line_count.js \n    20\n\nmethods\n=======\n\nBy itself,\n\n````javascript\nrequire('optimist').argv\n`````\n\nwill use `process.argv` array to construct the `argv` object.\n\nYou can pass in the `process.argv` yourself:\n\n````javascript\nrequire('optimist')([ '-x', '1', '-y', '2' ]).argv\n````\n\nor use .parse() to do the same thing:\n\n````javascript\nrequire('optimist').parse([ '-x', '1', '-y', '2' ])\n````\n\nThe rest of these methods below come in just before the terminating `.argv`.\n\n.alias(key, alias)\n------------------\n\nSet key names as equivalent such that updates to a key will propagate to aliases\nand vice-versa.\n\nOptionally `.alias()` can take an object that maps keys to aliases.\n\n.default(key, value)\n--------------------\n\nSet `argv[key]` to `value` if no option was specified on `process.argv`.\n\nOptionally `.default()` can take an object that maps keys to default values.\n\n.demand(key)\n------------\n\nIf `key` is a string, show the usage information and exit if `key` wasn't\nspecified in `process.argv`.\n\nIf `key` is a number, demand at least as many non-option arguments, which show\nup in `argv._`.\n\nIf `key` is an Array, demand each element.\n\n.describe(key, desc)\n--------------------\n\nDescribe a `key` for the generated usage information.\n\nOptionally `.describe()` can take an object that maps keys to descriptions.\n\n.options(key, opt)\n------------------\n\nInstead of chaining together `.alias().demand().default()`, you can specify\nkeys in `opt` for each of the chainable methods.\n\nFor example:\n\n````javascript\nvar argv = require('optimist')\n    .options('f', {\n        alias : 'file',\n        default : '/etc/passwd',\n    })\n    .argv\n;\n````\n\nis the same as\n\n````javascript\nvar argv = require('optimist')\n    .alias('f', 'file')\n    .default('f', '/etc/passwd')\n    .argv\n;\n````\n\nOptionally `.options()` can take an object that maps keys to `opt` parameters.\n\n.usage(message)\n---------------\n\nSet a usage message to show which commands to use. Inside `message`, the string\n`$0` will get interpolated to the current script name or node command for the\npresent script similar to how `$0` works in bash or perl.\n\n.check(fn)\n----------\n\nCheck that certain conditions are met in the provided arguments.\n\nIf `fn` throws or returns `false`, show the thrown error, usage information, and\nexit.\n\n.boolean(key)\n-------------\n\nInterpret `key` as a boolean. If a non-flag option follows `key` in\n`process.argv`, that string won't get set as the value of `key`.\n\nIf `key` never shows up as a flag in `process.arguments`, `argv[key]` will be\n`false`.\n\nIf `key` is an Array, interpret all the elements as booleans.\n\n.string(key)\n------------\n\nTell the parser logic not to interpret `key` as a number or boolean.\nThis can be useful if you need to preserve leading zeros in an input.\n\nIf `key` is an Array, interpret all the elements as strings.\n\n.wrap(columns)\n--------------\n\nFormat usage output to wrap at `columns` many columns.\n\n.help()\n-------\n\nReturn the generated usage string.\n\n.showHelp(fn=console.error)\n---------------------------\n\nPrint the usage data using `fn` for printing.\n\n.parse(args)\n------------\n\nParse `args` instead of `process.argv`. Returns the `argv` object.\n\n.argv\n-----\n\nGet the arguments as a plain old object.\n\nArguments without a corresponding flag show up in the `argv._` array.\n\nThe script name or node command is available at `argv.$0` similarly to how `$0`\nworks in bash or perl.\n\nparsing tricks\n==============\n\nstop parsing\n------------\n\nUse `--` to stop parsing flags and stuff the remainder into `argv._`.\n\n    $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4\n    { _: [ '-c', '3', '-d', '4' ],\n      '$0': 'node ./examples/reflect.js',\n      a: 1,\n      b: 2 }\n\nnegate fields\n-------------\n\nIf you want to explicity set a field to false instead of just leaving it\nundefined or to override a default you can do `--no-key`.\n\n    $ node examples/reflect.js -a --no-b\n    { _: [],\n      '$0': 'node ./examples/reflect.js',\n      a: true,\n      b: false }\n\nnumbers\n-------\n\nEvery argument that looks like a number (`!isNaN(Number(arg))`) is converted to\none. This way you can just `net.createConnection(argv.port)` and you can add\nnumbers out of `argv` with `+` without having that mean concatenation,\nwhich is super frustrating.\n\nduplicates\n----------\n\nIf you specify a flag multiple times it will get turned into an array containing\nall the values in order.\n\n    $ node examples/reflect.js -x 5 -x 8 -x 0\n    { _: [],\n      '$0': 'node ./examples/reflect.js',\n        x: [ 5, 8, 0 ] }\n\ndot notation\n------------\n\nWhen you use dots (`.`s) in argument names, an implicit object path is assumed.\nThis lets you organize arguments into nested objects.\n\n     $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5\n     { _: [],\n       '$0': 'node ./examples/reflect.js',\n         foo: { bar: { baz: 33 }, quux: 5 } }\n\ninstallation\n============\n\nWith [npm](http://github.com/isaacs/npm), just do:\n    npm install optimist\n \nor clone this project on github:\n\n    git clone http://github.com/substack/node-optimist.git\n\nTo run the tests with [expresso](http://github.com/visionmedia/expresso),\njust do:\n    \n    expresso\n\ninspired By\n===========\n\nThis module is loosely inspired by Perl's\n[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).\n",
    44   "readmeFilename": "README.markdown",
     39  "readme": "# DEPRECATION NOTICE\n\nI don't want to maintain this module anymore since I just use\n[minimist](https://npmjs.org/package/minimist), the argument parsing engine,\ndirectly instead nowadays.\n\nSee [yargs](https://github.com/chevex/yargs) for the modern, pirate-themed\nsuccessor to optimist.\n\n[![yarrrrrrrgs!](http://i.imgur.com/4WFGVJ9.png)](https://github.com/chevex/yargs)\n\nYou should also consider [nomnom](https://github.com/harthur/nomnom).\n\noptimist\n========\n\nOptimist is a node.js library for option parsing for people who hate option\nparsing. More specifically, this module is for people who like all the --bells\nand -whistlz of program usage but think optstrings are a waste of time.\n\nWith optimist, option parsing doesn't have to suck (as much).\n\n[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist)\n\nexamples\n========\n\nWith Optimist, the options are just a hash! No optstrings attached.\n-------------------------------------------------------------------\n\nxup.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\n\nif (argv.rif - 5 * argv.xup > 7.138) {\n    console.log('Buy more riffiwobbles');\n}\nelse {\n    console.log('Sell the xupptumblers');\n}\n````\n\n***\n\n    $ ./xup.js --rif=55 --xup=9.52\n    Buy more riffiwobbles\n    \n    $ ./xup.js --rif 12 --xup 8.1\n    Sell the xupptumblers\n\n![This one's optimistic.](http://substack.net/images/optimistic.png)\n\nBut wait! There's more! You can do short options:\n-------------------------------------------------\n \nshort.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\n````\n\n***\n\n    $ ./short.js -x 10 -y 21\n    (10,21)\n\nAnd booleans, both long and short (and grouped):\n----------------------------------\n\nbool.js:\n\n````javascript\n#!/usr/bin/env node\nvar util = require('util');\nvar argv = require('optimist').argv;\n\nif (argv.s) {\n    util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');\n}\nconsole.log(\n    (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')\n);\n````\n\n***\n\n    $ ./bool.js -s\n    The cat says: meow\n    \n    $ ./bool.js -sp\n    The cat says: meow.\n\n    $ ./bool.js -sp --fr\n    Le chat dit: miaou.\n\nAnd non-hypenated options too! Just use `argv._`!\n-------------------------------------------------\n \nnonopt.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\nconsole.log(argv._);\n````\n\n***\n\n    $ ./nonopt.js -x 6.82 -y 3.35 moo\n    (6.82,3.35)\n    [ 'moo' ]\n    \n    $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz\n    (0.54,1.12)\n    [ 'foo', 'bar', 'baz' ]\n\nPlus, Optimist comes with .usage() and .demand()!\n-------------------------------------------------\n\ndivide.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .usage('Usage: $0 -x [num] -y [num]')\n    .demand(['x','y'])\n    .argv;\n\nconsole.log(argv.x / argv.y);\n````\n\n***\n \n    $ ./divide.js -x 55 -y 11\n    5\n    \n    $ node ./divide.js -x 4.91 -z 2.51\n    Usage: node ./divide.js -x [num] -y [num]\n\n    Options:\n      -x  [required]\n      -y  [required]\n\n    Missing required arguments: y\n\nEVEN MORE HOLY COW\n------------------\n\ndefault_singles.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .default('x', 10)\n    .default('y', 10)\n    .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n    $ ./default_singles.js -x 5\n    15\n\ndefault_hash.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .default({ x : 10, y : 10 })\n    .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n    $ ./default_hash.js -y 7\n    17\n\nAnd if you really want to get all descriptive about it...\n---------------------------------------------------------\n\nboolean_single.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .boolean('v')\n    .argv\n;\nconsole.dir(argv);\n````\n\n***\n\n    $ ./boolean_single.js -v foo bar baz\n    true\n    [ 'bar', 'baz', 'foo' ]\n\nboolean_double.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .boolean(['x','y','z'])\n    .argv\n;\nconsole.dir([ argv.x, argv.y, argv.z ]);\nconsole.dir(argv._);\n````\n\n***\n\n    $ ./boolean_double.js -x -z one two three\n    [ true, false, true ]\n    [ 'one', 'two', 'three' ]\n\nOptimist is here to help...\n---------------------------\n\nYou can describe parameters for help messages and set aliases. Optimist figures\nout how to format a handy help string automatically.\n\nline_count.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .usage('Count the lines in a file.\\nUsage: $0')\n    .demand('f')\n    .alias('f', 'file')\n    .describe('f', 'Load a file')\n    .argv\n;\n\nvar fs = require('fs');\nvar s = fs.createReadStream(argv.file);\n\nvar lines = 0;\ns.on('data', function (buf) {\n    lines += buf.toString().match(/\\n/g).length;\n});\n\ns.on('end', function () {\n    console.log(lines);\n});\n````\n\n***\n\n    $ node line_count.js\n    Count the lines in a file.\n    Usage: node ./line_count.js\n\n    Options:\n      -f, --file  Load a file  [required]\n\n    Missing required arguments: f\n\n    $ node line_count.js --file line_count.js \n    20\n    \n    $ node line_count.js -f line_count.js \n    20\n\nmethods\n=======\n\nBy itself,\n\n````javascript\nrequire('optimist').argv\n`````\n\nwill use `process.argv` array to construct the `argv` object.\n\nYou can pass in the `process.argv` yourself:\n\n````javascript\nrequire('optimist')([ '-x', '1', '-y', '2' ]).argv\n````\n\nor use .parse() to do the same thing:\n\n````javascript\nrequire('optimist').parse([ '-x', '1', '-y', '2' ])\n````\n\nThe rest of these methods below come in just before the terminating `.argv`.\n\n.alias(key, alias)\n------------------\n\nSet key names as equivalent such that updates to a key will propagate to aliases\nand vice-versa.\n\nOptionally `.alias()` can take an object that maps keys to aliases.\n\n.default(key, value)\n--------------------\n\nSet `argv[key]` to `value` if no option was specified on `process.argv`.\n\nOptionally `.default()` can take an object that maps keys to default values.\n\n.demand(key)\n------------\n\nIf `key` is a string, show the usage information and exit if `key` wasn't\nspecified in `process.argv`.\n\nIf `key` is a number, demand at least as many non-option arguments, which show\nup in `argv._`.\n\nIf `key` is an Array, demand each element.\n\n.describe(key, desc)\n--------------------\n\nDescribe a `key` for the generated usage information.\n\nOptionally `.describe()` can take an object that maps keys to descriptions.\n\n.options(key, opt)\n------------------\n\nInstead of chaining together `.alias().demand().default()`, you can specify\nkeys in `opt` for each of the chainable methods.\n\nFor example:\n\n````javascript\nvar argv = require('optimist')\n    .options('f', {\n        alias : 'file',\n        default : '/etc/passwd',\n    })\n    .argv\n;\n````\n\nis the same as\n\n````javascript\nvar argv = require('optimist')\n    .alias('f', 'file')\n    .default('f', '/etc/passwd')\n    .argv\n;\n````\n\nOptionally `.options()` can take an object that maps keys to `opt` parameters.\n\n.usage(message)\n---------------\n\nSet a usage message to show which commands to use. Inside `message`, the string\n`$0` will get interpolated to the current script name or node command for the\npresent script similar to how `$0` works in bash or perl.\n\n.check(fn)\n----------\n\nCheck that certain conditions are met in the provided arguments.\n\nIf `fn` throws or returns `false`, show the thrown error, usage information, and\nexit.\n\n.boolean(key)\n-------------\n\nInterpret `key` as a boolean. If a non-flag option follows `key` in\n`process.argv`, that string won't get set as the value of `key`.\n\nIf `key` never shows up as a flag in `process.arguments`, `argv[key]` will be\n`false`.\n\nIf `key` is an Array, interpret all the elements as booleans.\n\n.string(key)\n------------\n\nTell the parser logic not to interpret `key` as a number or boolean.\nThis can be useful if you need to preserve leading zeros in an input.\n\nIf `key` is an Array, interpret all the elements as strings.\n\n.wrap(columns)\n--------------\n\nFormat usage output to wrap at `columns` many columns.\n\n.help()\n-------\n\nReturn the generated usage string.\n\n.showHelp(fn=console.error)\n---------------------------\n\nPrint the usage data using `fn` for printing.\n\n.parse(args)\n------------\n\nParse `args` instead of `process.argv`. Returns the `argv` object.\n\n.argv\n-----\n\nGet the arguments as a plain old object.\n\nArguments without a corresponding flag show up in the `argv._` array.\n\nThe script name or node command is available at `argv.$0` similarly to how `$0`\nworks in bash or perl.\n\nparsing tricks\n==============\n\nstop parsing\n------------\n\nUse `--` to stop parsing flags and stuff the remainder into `argv._`.\n\n    $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4\n    { _: [ '-c', '3', '-d', '4' ],\n      '$0': 'node ./examples/reflect.js',\n      a: 1,\n      b: 2 }\n\nnegate fields\n-------------\n\nIf you want to explicity set a field to false instead of just leaving it\nundefined or to override a default you can do `--no-key`.\n\n    $ node examples/reflect.js -a --no-b\n    { _: [],\n      '$0': 'node ./examples/reflect.js',\n      a: true,\n      b: false }\n\nnumbers\n-------\n\nEvery argument that looks like a number (`!isNaN(Number(arg))`) is converted to\none. This way you can just `net.createConnection(argv.port)` and you can add\nnumbers out of `argv` with `+` without having that mean concatenation,\nwhich is super frustrating.\n\nduplicates\n----------\n\nIf you specify a flag multiple times it will get turned into an array containing\nall the values in order.\n\n    $ node examples/reflect.js -x 5 -x 8 -x 0\n    { _: [],\n      '$0': 'node ./examples/reflect.js',\n        x: [ 5, 8, 0 ] }\n\ndot notation\n------------\n\nWhen you use dots (`.`s) in argument names, an implicit object path is assumed.\nThis lets you organize arguments into nested objects.\n\n     $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5\n     { _: [],\n       '$0': 'node ./examples/reflect.js',\n         foo: { bar: { baz: 33 }, quux: 5 } }\n\nshort numbers\n-------------\n\nShort numeric `head -n5` style argument work too:\n\n    $ node reflect.js -n123 -m456\n    { '3': true,\n      '6': true,\n      _: [],\n      '$0': 'node ./reflect.js',\n      n: 123,\n      m: 456 }\n\ninstallation\n============\n\nWith [npm](http://github.com/isaacs/npm), just do:\n    npm install optimist\n \nor clone this project on github:\n\n    git clone http://github.com/substack/node-optimist.git\n\nTo run the tests with [expresso](http://github.com/visionmedia/expresso),\njust do:\n    \n    expresso\n\ninspired By\n===========\n\nThis module is loosely inspired by Perl's\n[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).\n",
     40  "readmeFilename": "readme.markdown",
    4541  "bugs": {
    4642    "url": "https://github.com/substack/node-optimist/issues"
    4743  },
    4844  "homepage": "https://github.com/substack/node-optimist",
    49   "_id": "optimist@0.3.5",
     45  "_id": "optimist@0.6.1",
    5046  "dist": {
    51     "shasum": "4a95a366d4f292cb5930c16e82ef690885770fa2"
     47    "shasum": "6ae855b9e52eb22c5af7b5e570013807be575bc3"
    5248  },
    53   "_from": "optimist@0.3.5",
    54   "_resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.5.tgz"
     49  "_from": "optimist@>=0.2.8",
     50  "_resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz"
    5551}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/parse.js

    r484 r516  
    245245});
    246246
     247test('newlines in params' , function (t) {
     248    var args = optimist.parse([ '-s', "X\nX" ])
     249    t.same(args, { _ : [], s : "X\nX", $0 : $0 });
     250
     251    // reproduce in bash:
     252    // VALUE="new
     253    // line"
     254    // node program.js --s="$VALUE"
     255    args = optimist.parse([ "--s=X\nX" ])
     256    t.same(args, { _ : [], s : "X\nX", $0 : $0 });
     257    t.end();
     258});
     259
    247260test('strings' , function (t) {
    248261    var s = optimist([ '-s', '0001234' ]).string('s').argv.s;
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/package.json

    r484 r516  
    22  "name": "coffeelint",
    33  "description": "Lint your CoffeeScript",
    4   "version": "0.5.7",
     4  "version": "1.0.8",
    55  "homepage": "http://www.coffeelint.org",
    66  "keywords": [
     
    1414  },
    1515  "main": "./lib/coffeelint.js",
     16  "engines": {
     17    "node": ">=0.8.0"
     18  },
    1619  "repository": {
    1720    "type": "git",
     
    2326  "dependencies": {
    2427    "optimist": ">=0.2.8",
    25     "coffee-script": ">=1.6.0",
     28    "coffee-script": "1.6.x",
    2629    "glob": ">=3.1.9"
    2730  },
     
    3740  ],
    3841  "scripts": {
    39     "pretest": "npm run compile",
     42    "pretest": "cake compile",
    4043    "test": "vows --spec test/*.coffee test/*.litcoffee",
    4144    "posttest": "npm run lint",
    42     "prepublish": "npm run compile",
    43     "install": "[ -e lib/commandline.js ] || npm run compile",
    44     "lint": "npm run compile && ./bin/coffeelint -f test/fixtures/coffeelint.json src/*.coffee test/*.coffee test/*.litcoffee",
    45     "lint-csv": "npm run compile && ./bin/coffeelint --csv -f test/fixtures/coffeelint.json src/*.coffee test/*.coffee",
    46     "lint-jslint": "npm run compile && ./bin/coffeelint --jslint -f test/fixtures/coffeelint.json src/*.coffee test/*.coffee",
    47     "compile": "coffee -c -o lib src"
     45    "prepublish": "cake prepublish",
     46    "publish": "cake publish",
     47    "lint": "cake compile && ./bin/coffeelint -f coffeelint.json src/*.coffee test/*.coffee test/*.litcoffee",
     48    "lint-csv": "cake compile && ./bin/coffeelint --csv -f coffeelint.json src/*.coffee test/*.coffee",
     49    "lint-jslint": "cake compile && ./bin/coffeelint --jslint -f coffeelint.json src/*.coffee test/*.coffee",
     50    "compile": "cake compile"
    4851  },
    4952  "readme": "CoffeeLint\n==========\n\nCoffeeLint is a style checker that helps keep CoffeeScript code\nclean and consistent.\n\nFor guides on installing, using and configuring CoffeeLint, head over\n[here](http://www.coffeelint.org).\n\nTo suggest a feature, report a bug, or general discussion, head over\n[here](http://github.com/clutchski/coffeelint/issues/).\n\n[![Build Status](https://secure.travis-ci.org/clutchski/coffeelint.png)](http://travis-ci.org/clutchski/coffeelint)\n",
     
    5255    "url": "https://github.com/clutchski/coffeelint/issues"
    5356  },
    54   "_id": "coffeelint@0.5.7",
     57  "_id": "coffeelint@1.0.8",
    5558  "dist": {
    56     "shasum": "4464b58e383f9fd3cd1da521b404301bdbc39e05"
     59    "shasum": "24f415956f9b6dc01d1ee428f2bbe2d200eee9a7"
    5760  },
    58   "_from": "coffeelint@~0.5",
    59   "_resolved": "https://registry.npmjs.org/coffeelint/-/coffeelint-0.5.7.tgz"
     61  "_from": "coffeelint@~1.0",
     62  "_resolved": "https://registry.npmjs.org/coffeelint/-/coffeelint-1.0.8.tgz"
    6063}
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/coffeelint.coffee

    r484 r516  
    88
    99# Coffeelint's namespace.
    10 coffeelint = {}
    11 
    12 if exports?
    13     # If we're running in node, export our module and
    14     # load dependencies.
    15     coffeelint = exports
    16     CoffeeScript = require 'coffee-script'
     10# Browserify wrapps this file in a UMD that will set window.coffeelint to
     11# exports
     12coffeelint = exports
     13
     14if window?
     15    # If we're in the browser assume CoffeeScript is already loaded.
     16    CoffeeScript = window.CoffeeScript
    1717else
    18     # If we're in the browser, export out module to
    19     # global scope. Assume CoffeeScript is already
    20     # loaded.
    21     this.coffeelint = coffeelint
    22     CoffeeScript = this.CoffeeScript
    23 
     18    # By storing this in a variable it prevents browserify from finding this
     19    # dependency. If it isn't hidden there is an error attempting to inline
     20    # CoffeeScript.  if browserify uses `-i` to ignore the dependency it
     21    # creates an empty shim which breaks NodeJS
     22    # https://github.com/substack/node-browserify/issues/471
     23    cs = 'coffee-script'
     24    CoffeeScript = require cs
     25
     26# Browserify will inline the file at compile time.
     27packageJSON = require('./../package.json')
    2428
    2529# The current version of Coffeelint.
    26 coffeelint.VERSION = "0.5.7"
     30coffeelint.VERSION = packageJSON.version
    2731
    2832
     
    3236IGNORE  = 'ignore'
    3337
    34 
    35 # CoffeeLint's default rule configuration.
    36 coffeelint.RULES = RULES =
    37 
    38     no_tabs :
    39         level : ERROR
    40         message : 'Line contains tab indentation'
    41         description: """
    42             This rule forbids tabs in indentation. Enough said. It is enabled by
    43             default.
    44             """
    45 
    46     no_trailing_whitespace :
    47         level : ERROR
    48         message : 'Line ends with trailing whitespace'
    49         allowed_in_comments : false
    50         description: """
    51             This rule forbids trailing whitespace in your code, since it is
    52             needless cruft. It is enabled by default.
    53             """
    54 
    55     max_line_length :
    56         value: 80
    57         level : ERROR
    58         message : 'Line exceeds maximum allowed length'
    59         description: """
    60             This rule imposes a maximum line length on your code. <a
    61             href="http://www.python.org/dev/peps/pep-0008/">Python's style
    62             guide</a> does a good job explaining why you might want to limit the
    63             length of your lines, though this is a matter of taste.
    64 
    65             Lines can be no longer than eighty characters by default.
    66             """
    67 
    68     camel_case_classes :
    69         level : ERROR
    70         message : 'Class names should be camel cased'
    71         description: """
    72             This rule mandates that all class names are camel cased. Camel
    73             casing class names is a generally accepted way of distinguishing
    74             constructor functions - which require the 'new' prefix to behave
    75             properly - from plain old functions.
    76             <pre>
    77             <code># Good!
    78             class BoaConstrictor
    79 
    80             # Bad!
    81             class boaConstrictor
    82             </code>
    83             </pre>
    84             This rule is enabled by default.
    85             """
    86     indentation :
    87         value : 2
    88         level : ERROR
    89         message : 'Line contains inconsistent indentation'
    90         description: """
    91             This rule imposes a standard number of spaces to be used for
    92             indentation. Since whitespace is significant in CoffeeScript, it's
    93             critical that a project chooses a standard indentation format and
    94             stays consistent. Other roads lead to darkness. <pre> <code>#
    95             Enabling this option will prevent this ugly
    96             # but otherwise valid CoffeeScript.
    97             twoSpaces = () ->
    98               fourSpaces = () ->
    99                   eightSpaces = () ->
    100                         'this is valid CoffeeScript'
    101 
    102             </code>
    103             </pre>
    104             Two space indentation is enabled by default.
    105             """
    106 
    107     no_implicit_braces :
    108         level : IGNORE
    109         message : 'Implicit braces are forbidden'
    110         description: """
    111             This rule prohibits implicit braces when declaring object literals.
    112             Implicit braces can make code more difficult to understand,
    113             especially when used in combination with optional parenthesis.
    114             <pre>
    115             <code># Do you find this code ambiguous? Is it a
    116             # function call with three arguments or four?
    117             myFunction a, b, 1:2, 3:4
    118 
    119             # While the same code written in a more
    120             # explicit manner has no ambiguity.
    121             myFunction(a, b, {1:2, 3:4})
    122             </code>
    123             </pre>
    124             Implicit braces are permitted by default, since their use is
    125             idiomatic CoffeeScript.
    126             """
    127 
    128     no_trailing_semicolons:
    129         level : ERROR
    130         message : 'Line contains a trailing semicolon'
    131         description: """
    132             This rule prohibits trailing semicolons, since they are needless
    133             cruft in CoffeeScript.
    134             <pre>
    135             <code># This semicolon is meaningful.
    136             x = '1234'; console.log(x)
    137 
    138             # This semicolon is redundant.
    139             alert('end of line');
    140             </code>
    141             </pre>
    142             Trailing semicolons are forbidden by default.
    143             """
    144 
    145     no_plusplus:
    146         level : IGNORE
    147         message : 'The increment and decrement operators are forbidden'
    148         description: """
    149             This rule forbids the increment and decrement arithmetic operators.
    150             Some people believe the <tt>++</tt> and <tt>--</tt> to be cryptic
    151             and the cause of bugs due to misunderstandings of their precedence
    152             rules.
    153             This rule is disabled by default.
    154             """
    155 
    156     no_throwing_strings:
    157         level : ERROR
    158         message : 'Throwing strings is forbidden'
    159         description: """
    160             This rule forbids throwing string literals or interpolations. While
    161             JavaScript (and CoffeeScript by extension) allow any expression to
    162             be thrown, it is best to only throw <a
    163             href="https://developer.mozilla.org
    164             /en/JavaScript/Reference/Global_Objects/Error"> Error</a> objects,
    165             because they contain valuable debugging information like the stack
    166             trace. Because of JavaScript's dynamic nature, CoffeeLint cannot
    167             ensure you are always throwing instances of <tt>Error</tt>. It will
    168             only catch the simple but real case of throwing literal strings.
    169             <pre>
    170             <code># CoffeeLint will catch this:
    171             throw "i made a boo boo"
    172 
    173             # ... but not this:
    174             throw getSomeString()
    175             </code>
    176             </pre>
    177             This rule is enabled by default.
    178             """
    179 
    180     cyclomatic_complexity:
    181         value : 10
    182         level : IGNORE
    183         message : 'The cyclomatic complexity is too damn high'
    184 
    185     no_backticks:
    186         level : ERROR
    187         message : 'Backticks are forbidden'
    188         description: """
    189             Backticks allow snippets of JavaScript to be embedded in
    190             CoffeeScript. While some folks consider backticks useful in a few
    191             niche circumstances, they should be avoided because so none of
    192             JavaScript's "bad parts", like <tt>with</tt> and <tt>eval</tt>,
    193             sneak into CoffeeScript.
    194             This rule is enabled by default.
    195             """
    196 
    197     line_endings:
    198         level : IGNORE
    199         value : 'unix' # or 'windows'
    200         message : 'Line contains incorrect line endings'
    201         description: """
    202             This rule ensures your project uses only <tt>windows</tt> or
    203             <tt>unix</tt> line endings. This rule is disabled by default.
    204             """
    205     no_implicit_parens :
    206         level : IGNORE
    207         message : 'Implicit parens are forbidden'
    208         description: """
    209             This rule prohibits implicit parens on function calls.
    210             <pre>
    211             <code># Some folks don't like this style of coding.
    212             myFunction a, b, c
    213 
    214             # And would rather it always be written like this:
    215             myFunction(a, b, c)
    216             </code>
    217             </pre>
    218             Implicit parens are permitted by default, since their use is
    219             idiomatic CoffeeScript.
    220             """
    221 
    222     empty_constructor_needs_parens :
    223         level : IGNORE
    224         message : 'Invoking a constructor without parens and without arguments'
    225 
    226     non_empty_constructor_needs_parens :
    227         level : IGNORE
    228         message : 'Invoking a constructor without parens and with arguments'
    229 
    230     no_empty_param_list :
    231         level : IGNORE
    232         message : 'Empty parameter list is forbidden'
    233         description: """
    234             This rule prohibits empty parameter lists in function definitions.
    235             <pre>
    236             <code># The empty parameter list in here is unnecessary:
    237             myFunction = () -&gt;
    238 
    239             # We might favor this instead:
    240             myFunction = -&gt;
    241             </code>
    242             </pre>
    243             Empty parameter lists are permitted by default.
    244             """
    245 
    246 
    247     space_operators :
    248         level : IGNORE
    249         message : 'Operators must be spaced properly'
    250 
    251     # I don't know of any legitimate reason to define duplicate keys in an
    252     # object. It seems to always be a mistake, it's also a syntax error in
    253     # strict mode.
    254     # See http://jslinterrors.com/duplicate-key-a/
    255     duplicate_key :
    256         level : ERROR
    257         message : 'Duplicate key defined in object or class'
    258 
    259     newlines_after_classes :
    260         value : 3
    261         level : IGNORE
    262         message : 'Wrong count of newlines between a class and other code'
    263 
    264     no_stand_alone_at :
    265         level : IGNORE
    266         message : '@ must not be used stand alone'
    267         description: """
    268             This rule checks that no stand alone @ are in use, they are
    269             discouraged. Further information in CoffeScript issue <a
    270             href="https://github.com/jashkenas/coffee-script/issues/1601">
    271             #1601</a>
    272             """
    273 
    274     arrow_spacing :
    275         level : IGNORE
    276         message : 'Function arrow (->) must be spaced properly'
    277         description: """
    278             <p>This rule checks to see that there is spacing before and after
    279             the arrow operator that declares a function. This rule is disabled
    280             by default.</p> <p>Note that if arrow_spacing is enabled, and you
    281             pass an empty function as a parameter, arrow_spacing will accept
    282             either a space or no space in-between the arrow operator and the
    283             parenthesis</p>
    284             <pre><code># Both of this will not trigger an error,
    285             # even with arrow_spacing enabled.
    286             x(-> 3)
    287             x( -> 3)
    288 
    289             # However, this will trigger an error
    290             x((a,b)-> 3)
    291             </code>
    292             </pre>
    293              """
    294 
    295     coffeescript_error :
    296         level : ERROR
    297         message : '' # The default coffeescript error is fine.
    298 
    299 
    300 # Some repeatedly used regular expressions.
    301 regexes =
    302     trailingWhitespace : /[^\s]+[\t ]+\r?$/
    303     lineHasComment : /^\s*[^\#]*\#/
    304     indentation: /\S/
    305     longUrlComment: ///
    306       ^\s*\# # indentation, up to comment
    307       \s*
    308       http[^\s]+$ # Link that takes up the rest of the line without spaces.
    309     ///
    310     camelCase: /^[A-Z][a-zA-Z\d]*$/
    311     trailingSemicolon: /;\r?$/
    312     configStatement: /coffeelint:\s*(disable|enable)(?:=([\w\s,]*))?/
    313 
     38coffeelint.RULES = RULES = require './rules.coffee'
    31439
    31540# Patch the source properties onto the destination.
     
    32348    extend({}, defaults, source)
    32449
    325 
    326 # Create an error object for the given rule with the given
    327 # attributes.
    328 createError = (rule, attrs = {}) ->
    329     level = attrs.level
    330     if level not in [IGNORE, WARN, ERROR]
    331         throw new Error("unknown level #{level}")
    332 
    333     if level in [ERROR, WARN]
    334         attrs.rule = rule
    335         return defaults(attrs, RULES[rule])
    336     else
    337         null
    338 
    339 # Store suppressions in the form of { line #: type }
    340 block_config =
    341     enable: {}
    342     disable: {}
    343 
    344 #
    345 # A class that performs regex checks on each line of the source.
    346 #
    347 class LineLinter
    348 
    349     constructor : (source, config, tokensByLine) ->
    350         @source = source
    351         @config = config
    352         @line = null
    353         @lineNumber = 0
    354         @tokensByLine = tokensByLine
    355         @lines = @source.split('\n')
    356         @lineCount = @lines.length
    357 
    358         # maintains some contextual information
    359         #   inClass: bool; in class or not
    360         #   lastUnemptyLineInClass: null or lineNumber, if the last not-empty
    361         #                     line was in a class it holds its number
    362         #   classIndents: the number of indents within a class
    363         @context = {
    364             class: {
    365                 inClass: false
    366                 lastUnemptyLineInClass: null
    367                 classIndents: null
    368             }
    369         }
    370 
    371     lint : () ->
    372         errors = []
    373         for line, lineNumber in @lines
    374             @lineNumber = lineNumber
    375             @line = line
    376             @maintainClassContext()
    377             error = @lintLine()
    378             errors.push(error) if error
    379         errors
    380 
    381     # Return an error if the line contained failed a rule, null otherwise.
    382     lintLine : () ->
    383         return @checkTabs() or
    384                @checkTrailingWhitespace() or
    385                @checkLineLength() or
    386                @checkTrailingSemicolon() or
    387                @checkLineEndings() or
    388                @checkComments() or
    389                @checkNewlinesAfterClasses()
    390 
    391     checkTabs : () ->
    392         # Only check lines that have compiled tokens. This helps
    393         # us ignore tabs in the middle of multi line strings, heredocs, etc.
    394         # since they are all reduced to a single token whose line number
    395         # is the start of the expression.
    396         indentation = @line.split(regexes.indentation)[0]
    397         if @lineHasToken() and '\t' in indentation
    398             @createLineError('no_tabs')
     50# Helper to remove rules from disabled list
     51difference = (a, b) ->
     52    j = 0
     53    while j < a.length
     54        if a[j] in b
     55            a.splice(j, 1)
    39956        else
    400             null
    401 
    402     checkTrailingWhitespace : () ->
    403         if regexes.trailingWhitespace.test(@line)
    404             # By default only the regex above is needed.
    405             if !@config['no_trailing_whitespace']?.allowed_in_comments
    406                 return @createLineError('no_trailing_whitespace')
    407 
    408             line = @line
    409             tokens = @tokensByLine[@lineNumber]
    410 
    411             # If we're in a block comment there won't be any tokens on this
    412             # line. Some previous line holds the token spanning multiple lines.
    413             if !tokens
    414                 return null
    415 
    416             # To avoid confusion when a string might contain a "#", every string
    417             # on this line will be removed. before checking for a comment
    418             for str in (token[1] for token in tokens when token[0] == 'STRING')
    419                 line = line.replace(str, 'STRING')
    420 
    421             if !regexes.lineHasComment.test(line)
    422                 return @createLineError('no_trailing_whitespace')
    423             else
    424                 return null
    425         else
    426             return null
    427 
    428     checkLineLength : () ->
    429         rule = 'max_line_length'
    430         max = @config[rule]?.value
    431         if max and max < @line.length and not regexes.longUrlComment.test(@line)
    432             attrs =
    433                 context: "Length is #{@line.length}, max is #{max}"
    434             @createLineError(rule, attrs)
    435         else
    436             null
    437 
    438     checkTrailingSemicolon : () ->
    439         hasSemicolon = regexes.trailingSemicolon.test(@line)
    440         [first..., last] = @getLineTokens()
    441         hasNewLine = last and last.newLine?
    442         # Don't throw errors when the contents of  multiline strings,
    443         # regexes and the like end in ";"
    444         if hasSemicolon and not hasNewLine and @lineHasToken()
    445             @createLineError('no_trailing_semicolons')
    446         else
    447             return null
    448 
    449     checkLineEndings : () ->
    450         rule = 'line_endings'
    451         ending = @config[rule]?.value
    452 
    453         return null if not ending or @isLastLine() or not @line
    454 
    455         lastChar = @line[@line.length - 1]
    456         valid = if ending == 'windows'
    457             lastChar == '\r'
    458         else if ending == 'unix'
    459             lastChar != '\r'
    460         else
    461             throw new Error("unknown line ending type: #{ending}")
    462         if not valid
    463             return @createLineError(rule, {context:"Expected #{ending}"})
    464         else
    465             return null
    466 
    467     checkComments : () ->
    468         # Check for block config statements enable and disable
    469         result = regexes.configStatement.exec(@line)
    470         if result?
    471             cmd = result[1]
    472             rules = []
    473             if result[2]?
    474                 for r in result[2].split(',')
    475                     rules.push r.replace(/^\s+|\s+$/g, "")
    476             block_config[cmd][@lineNumber] = rules
    477         return null
    478 
    479     checkNewlinesAfterClasses : () ->
    480         rule = 'newlines_after_classes'
    481         ending = @config[rule].value
    482 
    483         return null if not ending or @isLastLine()
    484 
    485         if not @context.class.inClass and
    486                 @context.class.lastUnemptyLineInClass? and
    487                 ((@lineNumber - 1) - @context.class.lastUnemptyLineInClass) isnt
    488                 ending
    489             got = (@lineNumber - 1) - @context.class.lastUnemptyLineInClass
    490             return @createLineError( rule, {
    491                 context: "Expected #{ending} got #{got}"
    492             } )
    493 
    494         null
    495 
    496     createLineError : (rule, attrs = {}) ->
    497         attrs.lineNumber = @lineNumber + 1 # Lines are indexed by zero.
    498         attrs.level = @config[rule]?.level
    499         createError(rule, attrs)
    500 
    501     isLastLine : () ->
    502         return @lineNumber == @lineCount - 1
    503 
    504     # Return true if the given line actually has tokens.
    505     # Optional parameter to check for a specific token type and line number.
    506     lineHasToken : (tokenType = null, lineNumber = null) ->
    507         lineNumber = lineNumber ? @lineNumber
    508         unless tokenType?
    509             return @tokensByLine[lineNumber]?
    510         else
    511             tokens = @tokensByLine[lineNumber]
    512             return null unless tokens?
    513             for token in tokens
    514                 return true if token[0] == tokenType
    515             return false
    516 
    517     # Return tokens for the given line number.
    518     getLineTokens : () ->
    519         @tokensByLine[@lineNumber] || []
    520 
    521     # maintain the contextual information for class-related stuff
    522     maintainClassContext: () ->
    523         if @context.class.inClass
    524             if @lineHasToken 'INDENT'
    525                 @context.class.classIndents++
    526             else if @lineHasToken 'OUTDENT'
    527                 @context.class.classIndents--
    528                 if @context.class.classIndents is 0
    529                     @context.class.inClass = false
    530                     @context.class.classIndents = null
    531 
    532             if @context.class.inClass and not @line.match( /^\s*$/ )
    533                 @context.class.lastUnemptyLineInClass = @lineNumber
    534         else
    535             unless @line.match(/\\s*/)
    536                 @context.class.lastUnemptyLineInClass = null
    537 
    538             if @lineHasToken 'CLASS'
    539                 @context.class.inClass = true
    540                 @context.class.lastUnemptyLineInClass = @lineNumber
    541                 @context.class.classIndents = 0
    542 
    543         null
    544 
    545 #
    546 # A class that performs checks on the output of CoffeeScript's lexer.
    547 #
    548 class LexicalLinter
    549 
    550     constructor : (source, config) ->
    551         @source = source
    552         @tokens = CoffeeScript.tokens(source)
    553         @config = config
    554         @i = 0              # The index of the current token we're linting.
    555         @tokensByLine = {}  # A map of tokens by line.
    556         @arrayTokens = []   # A stack tracking the array token pairs.
    557         @parenTokens = []   # A stack tracking the parens token pairs.
    558         @callTokens = []    # A stack tracking the call token pairs.
    559         @lines = source.split('\n')
    560         @braceScopes = []   # A stack tracking keys defined in nexted scopes.
    561 
    562     # Return a list of errors encountered in the given source.
    563     lint : () ->
    564         errors = []
    565 
    566         for token, i in @tokens
    567             @i = i
    568             error = @lintToken(token)
    569             errors.push(error) if error
    570         errors
    571 
    572     # Return an error if the given token fails a lint check, false otherwise.
    573     lintToken : (token) ->
    574         [type, value, lineNumber] = token
    575 
    576         if typeof lineNumber == "object"
    577             if type == 'OUTDENT' or type == 'INDENT'
    578                 lineNumber = lineNumber.last_line
    579             else
    580                 lineNumber = lineNumber.first_line
    581         @tokensByLine[lineNumber] ?= []
    582         @tokensByLine[lineNumber].push(token)
    583         # CoffeeScript loses line numbers of interpolations and multi-line
    584         # regexes, so fake it by using the last line number we know.
    585         @lineNumber = lineNumber or @lineNumber or 0
    586         # Now lint it.
    587         switch type
    588             when "->"                     then @lintArrowSpacing(token)
    589             when "INDENT"                 then @lintIndentation(token)
    590             when "CLASS"                  then @lintClass(token)
    591             when "UNARY"                  then @lintUnary(token)
    592             when "{","}"                  then @lintBrace(token)
    593             when "IDENTIFIER"             then @lintIdentifier(token)
    594             when "++", "--"               then @lintIncrement(token)
    595             when "THROW"                  then @lintThrow(token)
    596             when "[", "]"                 then @lintArray(token)
    597             when "(", ")"                 then @lintParens(token)
    598             when "JS"                     then @lintJavascript(token)
    599             when "CALL_START", "CALL_END" then @lintCall(token)
    600             when "PARAM_START"            then @lintParam(token)
    601             when "@"                      then @lintStandaloneAt(token)
    602             when "+", "-"                 then @lintPlus(token)
    603             when "=", "MATH", "COMPARE", "LOGIC", "COMPOUND_ASSIGN"
    604                 @lintMath(token)
    605             else null
    606 
    607     lintUnary: (token) ->
    608         if token[1] is 'new'
    609             # Find the last chained identifier, e.g. Bar in new foo.bar.Bar().
    610             identifierIndex = 1
    611             loop
    612                 expectedIdentifier = @peek(identifierIndex)
    613                 expectedCallStart  = @peek(identifierIndex + 1)
    614                 if expectedIdentifier?[0] is 'IDENTIFIER'
    615                     if expectedCallStart?[0] is '.'
    616                         identifierIndex += 2
    617                         continue
    618                 break
    619 
    620             # The callStart is generated if your parameters are all on the same
    621             # line with implicit parens, and if your parameters start on the
    622             # next line, but is missing if there are no params and no parens.
    623             if expectedIdentifier?[0] is 'IDENTIFIER' and expectedCallStart?
    624                 if expectedCallStart[0] is 'CALL_START'
    625                     if expectedCallStart.generated
    626                         @createLexError('non_empty_constructor_needs_parens')
    627                 else
    628                     @createLexError('empty_constructor_needs_parens')
    629 
    630     # Lint the given array token.
    631     lintArray : (token) ->
    632         # Track the array token pairs
    633         if token[0] == '['
    634             @arrayTokens.push(token)
    635         else if token[0] == ']'
    636             @arrayTokens.pop()
    637         # Return null, since we're not really linting
    638         # anything here.
    639         null
    640 
    641     lintParens : (token) ->
    642         if token[0] == '('
    643             p1 = @peek(-1)
    644             n1 = @peek(1)
    645             n2 = @peek(2)
    646             # String interpolations start with '' + so start the type co-ercion,
    647             # so track if we're inside of one. This is most definitely not
    648             # 100% true but what else can we do?
    649             i = n1 and n2 and n1[0] == 'STRING' and n2[0] == '+'
    650             token.isInterpolation = i
    651             @parenTokens.push(token)
    652         else
    653             @parenTokens.pop()
    654         # We're not linting, just tracking interpolations.
    655         null
    656 
    657     isInInterpolation : () ->
    658         for t in @parenTokens
    659             return true if t.isInterpolation
    660         return false
    661 
    662     isInExtendedRegex : () ->
    663         for t in @callTokens
    664             return true if t.isRegex
    665         return false
    666 
    667     lintPlus : (token) ->
    668         # We can't check this inside of interpolations right now, because the
    669         # plusses used for the string type co-ercion are marked not spaced.
    670         return null if @isInInterpolation() or @isInExtendedRegex()
    671 
    672         p = @peek(-1)
    673         unaries = ['TERMINATOR', '(', '=', '-', '+', ',', 'CALL_START',
    674                     'INDEX_START', '..', '...', 'COMPARE', 'IF',
    675                     'THROW', 'LOGIC', 'POST_IF', ':', '[', 'INDENT',
    676                     'COMPOUND_ASSIGN', 'RETURN', 'MATH']
    677         isUnary = if not p then false else p[0] in unaries
    678         if (isUnary and token.spaced) or
    679                     (not isUnary and not token.spaced and not token.newLine)
    680             @createLexError('space_operators', {context: token[1]})
    681         else
    682             null
    683 
    684     lintMath: (token) ->
    685         if not token.spaced and not token.newLine
    686             @createLexError('space_operators', {context: token[1]})
    687         else
    688             null
    689 
    690     lintCall : (token) ->
    691         if token[0] == 'CALL_START'
    692             p = @peek(-1)
    693             # Track regex calls, to know (approximately) if we're in an
    694             # extended regex.
    695             token.isRegex = p and p[0] == 'IDENTIFIER' and p[1] == 'RegExp'
    696             @callTokens.push(token)
    697             if token.generated
    698                 return @createLexError('no_implicit_parens')
    699             else
    700                 return null
    701         else
    702             @callTokens.pop()
    703             return null
    704 
    705     lintParam : (token) ->
    706         nextType = @peek()[0]
    707         if nextType == 'PARAM_END'
    708             @createLexError('no_empty_param_list')
    709         else
    710             null
    711 
    712     lintIdentifier: (token) ->
    713         key = token[1]
    714 
    715         # Class names might not be in a scope
    716         return null if not @currentScope?
    717         nextToken = @peek(1)
    718 
    719         # Exit if this identifier isn't being assigned. A and B
    720         # are identifiers, but only A should be examined:
    721         # A = B
    722         return null if nextToken[1] isnt ':'
    723         previousToken = @peek(-1)
    724 
    725         # Assigning "@something" and "something" are not the same thing
    726         key = "@#{key}" if previousToken[0] == '@'
    727 
    728         # Added a prefix to not interfere with things like "constructor".
    729         key = "identifier-#{key}"
    730         if @currentScope[key]
    731             @createLexError('duplicate_key')
    732         else
    733             @currentScope[key] = token
    734             null
    735 
    736     lintBrace : (token) ->
    737         if token[0] == '{'
    738             @braceScopes.push @currentScope if @currentScope?
    739             @currentScope = {}
    740         else
    741             @currentScope = @braceScopes.pop()
    742 
    743         if token.generated and token[0] == '{'
    744             # Peek back to the last line break. If there is a class
    745             # definition, ignore the generated brace.
    746             i = -1
    747             loop
    748                 t = @peek(i)
    749                 if not t? or t[0] == 'TERMINATOR'
    750                     return @createLexError('no_implicit_braces')
    751                 if t[0] == 'CLASS'
    752                     return null
    753                 i -= 1
    754         else
    755             return null
    756 
    757     lintJavascript :(token) ->
    758         @createLexError('no_backticks')
    759 
    760     lintThrow : (token) ->
    761         [n1, n2] = [@peek(), @peek(2)]
    762         # Catch literals and string interpolations, which are wrapped in
    763         # parens.
    764         nextIsString = n1[0] == 'STRING' or (n1[0] == '(' and n2[0] == 'STRING')
    765         @createLexError('no_throwing_strings') if nextIsString
    766 
    767     lintIncrement : (token) ->
    768         attrs = {context : "found '#{token[0]}'"}
    769         @createLexError('no_plusplus', attrs)
    770 
    771     lintStandaloneAt: (token) ->
    772         nextToken = @peek()
    773         spaced = token.spaced
    774         isIdentifier = nextToken[0] == 'IDENTIFIER'
    775         isIndexStart = nextToken[0] == 'INDEX_START'
    776         isDot = nextToken[0] == '.'
    777 
    778         # https://github.com/jashkenas/coffee-script/issues/1601
    779         # @::foo is valid, but @:: behaves inconsistently and is planned for
    780         # removal. Technically @:: is a stand alone ::, but I think it makes
    781         # sense to group it into no_stand_alone_at
    782         if nextToken[0] == '::'
    783             protoProperty = @peek(2)
    784             isValidProtoProperty = protoProperty[0] == 'IDENTIFIER'
    785 
    786         if spaced or (not isIdentifier and not isIndexStart and
    787         not isDot and not isValidProtoProperty)
    788             @createLexError('no_stand_alone_at')
    789 
    790 
    791     # Return an error if the given indentation token is not correct.
    792     lintIndentation : (token) ->
    793         [type, numIndents, lineNumber] = token
    794 
    795         return null if token.generated?
    796 
    797         # HACK: CoffeeScript's lexer insert indentation in string
    798         # interpolations that start with spaces e.g. "#{ 123 }"
    799         # so ignore such cases. Are there other times an indentation
    800         # could possibly follow a '+'?
    801         previous = @peek(-2)
    802         isInterpIndent = previous and previous[0] == '+'
    803 
    804         # Ignore the indentation inside of an array, so that
    805         # we can allow things like:
    806         #   x = ["foo",
    807         #             "bar"]
    808         previous = @peek(-1)
    809         isArrayIndent = @inArray() and previous?.newLine
    810 
    811         # Ignore indents used to for formatting on multi-line expressions, so
    812         # we can allow things like:
    813         #   a = b =
    814         #     c = d
    815         previousSymbol = @peek(-1)?[0]
    816         isMultiline = previousSymbol in ['=', ',']
    817 
    818         # Summarize the indentation conditions we'd like to ignore
    819         ignoreIndent = isInterpIndent or isArrayIndent or isMultiline
    820 
    821         # Compensate for indentation in function invocations that span multiple
    822         # lines, which can be ignored.
    823         if @isChainedCall()
    824             currentLine = @lines[@lineNumber]
    825             prevNum = 1
    826 
    827             # keep going back until we are not at a comment or a blank line
    828             prevNum += 1 while (/^\s*(#|$)/.test(@lines[@lineNumber - prevNum]))
    829             previousLine = @lines[@lineNumber - prevNum]
    830 
    831             previousIndentation = previousLine.match(/^(\s*)/)[1].length
    832             # I don't know why, but when inside a function, you make a chained
    833             # call and define an inline callback as a parameter, the body of
    834             # that callback gets the indentation reported higher than it really
    835             # is. See issue #88
    836             # NOTE: Adding this line moved the cyclomatic complexity over the
    837             # limit, I'm not sure why
    838             numIndents = currentLine.match(/^(\s*)/)[1].length
    839             numIndents -= previousIndentation
    840 
    841 
    842         # Now check the indentation.
    843         expected = @config['indentation'].value
    844         if not ignoreIndent and numIndents != expected
    845             context = "Expected #{expected} " +
    846                       "got #{numIndents}"
    847             @createLexError('indentation', {context})
    848         else
    849             null
    850 
    851     lintClass : (token) ->
    852         # TODO: you can do some crazy shit in CoffeeScript, like
    853         # class func().ClassName. Don't allow that.
    854 
    855         # Don't try to lint the names of anonymous classes.
    856         return null if token.newLine? or @peek()[0] in ['INDENT', 'EXTENDS']
    857 
    858         # It's common to assign a class to a global namespace, e.g.
    859         # exports.MyClassName, so loop through the next tokens until
    860         # we find the real identifier.
    861         className = null
    862         offset = 1
    863         until className
    864             if @peek(offset + 1)?[0] == '.'
    865                 offset += 2
    866             else if @peek(offset)?[0] == '@'
    867                 offset += 1
    868             else
    869                 className = @peek(offset)[1]
    870 
    871         # Now check for the error.
    872         if not regexes.camelCase.test(className)
    873             attrs = {context: "class name: #{className}"}
    874             @createLexError('camel_case_classes', attrs)
    875         else
    876             null
    877 
    878     lintArrowSpacing : (token) ->
    879         # Throw error unless the following happens.
    880         #
    881         # We will take a look at the previous token to see
    882         # 1. That the token is properly spaced
    883         # 2. Wasn't generated by the CoffeeScript compiler
    884         # 3. That it is just indentation
    885         # 4. If the function declaration has no parameters
    886         # e.g. x(-> 3)
    887         #      x( -> 3)
    888         #
    889         # or a statement is wrapped in parentheses
    890         # e.g. (-> true)()
    891         #
    892         # we will accept either having a space or not having a space there.
    893 
    894         pp = @peek(-1)
    895         unless (token.spaced? or token.newLine? or @atEof()) and
    896                # Throw error unless the previous token...
    897                ((pp.spaced? or pp[0] is 'TERMINATOR') or #1
    898                 pp.generated? or #2
    899                 pp[0] is "INDENT" or #3
    900                 (pp[1] is "(" and not pp.generated?)) #4
    901             @createLexError('arrow_spacing')
    902         else
    903             null
    904 
    905     createLexError : (rule, attrs = {}) ->
    906         attrs.lineNumber = @lineNumber + 1
    907         attrs.level = @config[rule].level
    908         attrs.line = @lines[@lineNumber]
    909         createError(rule, attrs)
    910 
    911     # Return the token n places away from the current token.
    912     peek : (n = 1) ->
    913         @tokens[@i + n] || null
    914 
    915     # Return true if the current token is inside of an array.
    916     inArray : () ->
    917         return @arrayTokens.length > 0
    918 
    919     # Are there any more meaningful tokens following the current one?
    920     atEof: ->
    921         for token in @tokens.slice(@i + 1)
    922             unless token.generated or token[0] in ['OUTDENT', 'TERMINATOR']
    923                 return false
    924         true
    925 
    926     # Return true if the current token is part of a property access
    927     # that is split across lines, for example:
    928     #   $('body')
    929     #       .addClass('foo')
    930     #       .removeClass('bar')
    931     isChainedCall : () ->
    932         # Get the index of the second most recent new line.
    933         lines = (i for token, i in @tokens[..@i] when token.newLine?)
    934 
    935         lastNewLineIndex = if lines then lines[lines.length - 2] else null
    936 
    937         # Bail out if there is no such token.
    938         return false if not lastNewLineIndex?
    939 
    940         # Otherwise, figure out if that token or the next is an attribute
    941         # look-up.
    942         tokens = [@tokens[lastNewLineIndex], @tokens[lastNewLineIndex + 1]]
    943 
    944         return !!(t for t in tokens when t and t[0] == '.').length
    945 
    946 
    947 # A class that performs static analysis of the abstract
    948 # syntax tree.
    949 class ASTLinter
    950 
    951     constructor : (source, config) ->
    952         @source = source
    953         @config = config
    954         @errors = []
    955 
    956     lint : () ->
    957         try
    958             @node = CoffeeScript.nodes(@source)
    959         catch coffeeError
    960             @errors.push @_parseCoffeeScriptError(coffeeError)
    961             return @errors
    962         @lintNode(@node)
    963         @errors
    964 
    965     # returns the "complexity" value of the current node.
    966     getComplexity : (node) ->
    967         name = node.constructor.name
    968         complexity = if name in ['If', 'While', 'For', 'Try']
    969             1
    970         else if name == 'Op' and node.operator in ['&&', '||']
    971             1
    972         else if name == 'Switch'
    973             node.cases.length
    974         else
    975             0
    976         return complexity
    977 
    978     # Lint the AST node and return it's cyclomatic complexity.
    979     lintNode : (node, line) ->
    980 
    981         # Get the complexity of the current node.
    982         name = node.constructor.name
    983         complexity = @getComplexity(node)
    984 
    985         # Add the complexity of all child's nodes to this one.
    986         node.eachChild (childNode) =>
    987             nodeLine = childNode.locationData.first_line
    988             complexity += @lintNode(childNode, nodeLine) if childNode
    989 
    990         # If the current node is a function, and it's over our limit, add an
    991         # error to the list.
    992         rule = @config.cyclomatic_complexity
    993 
    994         if name == 'Code' and complexity >= rule.value
    995             attrs = {
    996                 context: complexity + 1
    997                 level: rule.level
    998                 lineNumber: line + 1
    999                 lineNumberEnd: node.locationData.last_line + 1
    1000             }
    1001             error = createError 'cyclomatic_complexity', attrs
    1002             @errors.push error if error
    1003 
    1004         # Return the complexity for the benefit of parent nodes.
    1005         return complexity
    1006 
    1007     _parseCoffeeScriptError : (coffeeError) ->
    1008         rule = RULES['coffeescript_error']
    1009 
    1010         message = coffeeError.toString()
    1011 
    1012         # Parse the line number
    1013         lineNumber = -1
    1014         if coffeeError.location?
    1015             lineNumber = coffeeError.location.first_line + 1
    1016         else
    1017             match = /line (\d+)/.exec message
    1018             lineNumber = parseInt match[1], 10 if match?.length > 1
    1019         attrs = {
    1020             message: message
    1021             level: rule.level
    1022             lineNumber: lineNumber
    1023         }
    1024         return  createError 'coffeescript_error', attrs
    1025 
    1026 
     57            j++
     58
     59LineLinter = require './line_linter.coffee'
     60LexicalLinter = require './lexical_linter.coffee'
     61ASTLinter = require './ast_linter.coffee'
    102762
    102863# Merge default and user configuration.
     
    103166    for rule, ruleConfig of RULES
    103267        config[rule] = defaults(userConfig[rule], ruleConfig)
     68
     69
    103370    return config
    103471
     
    105087    newSource
    105188
     89_rules = {}
     90coffeelint.registerRule = (RuleConstructor, ruleName = undefined) ->
     91    p = new RuleConstructor
     92
     93    name = p?.rule?.name or "(unknown)"
     94    e = (msg) -> throw new Error "Invalid rule: #{name} #{msg}"
     95    unless p.rule?
     96        e "Rules must provide rule attribute with a default configuration."
     97
     98    e "Rule defaults require a name" unless p.rule.name?
     99
     100    if ruleName? and ruleName isnt p.rule.name
     101        e "Mismatched rule name: #{ruleName}"
     102
     103    e "Rule defaults require a message" unless p.rule.message?
     104    e "Rule defaults require a description" unless p.rule.description?
     105    unless p.rule.level in [ 'ignore', 'warn', 'error' ]
     106        e "Default level must be 'ignore', 'warn', or 'error'"
     107
     108    if typeof p.lintToken is 'function'
     109        e "'tokens' is required for 'lintToken'" unless p.tokens
     110    else if typeof p.lintLine  isnt 'function' and
     111            typeof p.lintAST isnt 'function'
     112        e "Rules must implement lintToken, lintLine, or lintAST"
     113
     114    # Capture the default options for the new rule.
     115    RULES[p.rule.name] = p.rule
     116    _rules[p.rule.name] = RuleConstructor
     117
     118# These all need to be explicitly listed so they get picked up by browserify.
     119coffeelint.registerRule require './rules/arrow_spacing.coffee'
     120coffeelint.registerRule require './rules/no_tabs.coffee'
     121coffeelint.registerRule require './rules/no_trailing_whitespace.coffee'
     122coffeelint.registerRule require './rules/max_line_length.coffee'
     123coffeelint.registerRule require './rules/line_endings.coffee'
     124coffeelint.registerRule require './rules/no_trailing_semicolons.coffee'
     125coffeelint.registerRule require './rules/indentation.coffee'
     126coffeelint.registerRule require './rules/camel_case_classes.coffee'
     127coffeelint.registerRule require './rules/colon_assignment_spacing.coffee'
     128coffeelint.registerRule require './rules/no_implicit_braces.coffee'
     129coffeelint.registerRule require './rules/no_plusplus.coffee'
     130coffeelint.registerRule require './rules/no_throwing_strings.coffee'
     131coffeelint.registerRule require './rules/no_backticks.coffee'
     132coffeelint.registerRule require './rules/no_implicit_parens.coffee'
     133coffeelint.registerRule require './rules/no_empty_param_list.coffee'
     134coffeelint.registerRule require './rules/no_stand_alone_at.coffee'
     135coffeelint.registerRule require './rules/space_operators.coffee'
     136coffeelint.registerRule require './rules/duplicate_key.coffee'
     137coffeelint.registerRule require './rules/empty_constructor_needs_parens.coffee'
     138coffeelint.registerRule require './rules/cyclomatic_complexity.coffee'
     139coffeelint.registerRule require './rules/newlines_after_classes.coffee'
     140coffeelint.registerRule require './rules/no_unnecessary_fat_arrows.coffee'
     141coffeelint.registerRule require './rules/missing_fat_arrows.coffee'
     142coffeelint.registerRule(
     143    require './rules/non_empty_constructor_needs_parens.coffee'
     144)
     145
     146hasSyntaxError = (source) ->
     147    try
     148        # If there are syntax errors this will abort the lexical and line
     149        # linters.
     150        CoffeeScript.tokens(source)
     151        return false
     152    return true
     153
    1052154# Check the source against the given configuration and return an array
    1053155# of any errors found. An error is an object with the following
     
    1070172    disabled_initially = []
    1071173    for l in source.split('\n')
    1072         s = regexes.configStatement.exec(l)
     174        s = LineLinter.configStatement.exec(l)
    1073175        if s?.length > 2 and 'enable' in s
    1074176            for r in s[1..]
     
    1079181
    1080182    # Do AST linting first so all compile errors are caught.
    1081     astErrors = new ASTLinter(source, config).lint()
    1082 
    1083     # Do lexical linting.
    1084     lexicalLinter = new LexicalLinter(source, config)
    1085     lexErrors = lexicalLinter.lint()
    1086 
    1087     # Do line linting.
    1088     tokensByLine = lexicalLinter.tokensByLine
    1089     lineLinter = new LineLinter(source, config, tokensByLine)
    1090     lineErrors = lineLinter.lint()
     183    astErrors = new ASTLinter(source, config, _rules, CoffeeScript).lint()
     184    errors = [].concat(astErrors)
     185
     186    # only do further checks if the syntax is okay, otherwise they just fail
     187    # with syntax error exceptions
     188    unless hasSyntaxError(source)
     189        # Do lexical linting.
     190        lexicalLinter = new LexicalLinter(source, config, _rules, CoffeeScript)
     191        lexErrors = lexicalLinter.lint()
     192        errors = errors.concat(lexErrors)
     193
     194        # Do line linting.
     195        tokensByLine = lexicalLinter.tokensByLine
     196        lineLinter = new LineLinter(source, config, _rules, tokensByLine,
     197            literate)
     198        lineErrors = lineLinter.lint()
     199        errors = errors.concat(lineErrors)
     200        block_config = lineLinter.block_config
     201    else
     202        # default this so it knows what to do
     203        block_config =
     204            enable : {}
     205            disable : {}
    1091206
    1092207    # Sort by line number and return.
    1093     errors = lexErrors.concat(lineErrors, astErrors)
    1094208    errors.sort((a, b) -> a.lineNumber - b.lineNumber)
    1095 
    1096     # Helper to remove rules from disabled list
    1097     difference = (a, b) ->
    1098         j = 0
    1099         while j < a.length
    1100             if a[j] in b
    1101                 a.splice(j, 1)
    1102             else
    1103                 j++
    1104209
    1105210    # Disable/enable rules for inline blocks
     
    1126231                errors.push e unless e.rule in disabled
    1127232
    1128     block_config =
    1129       'enable': {}
    1130       'disable': {}
    1131 
    1132233    errors
  • Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/commandline.coffee

    r484 r516  
    1212optimist = require("optimist")
    1313thisdir = path.dirname(fs.realpathSync(__filename))
    14 coffeelint = require(path.join(thisdir, "..", "lib", "coffeelint"))
     14coffeelint = require(path.join(thisdir, "coffeelint"))
     15configfinder = require(path.join(thisdir, "configfinder"))
    1516CoffeeScript = require 'coffee-script'
    1617
     
    160161        for path, errors of @errorReport.paths
    161162            for e in errors
     163                # Having the context is useful for the cyclomatic_complexity
     164                # rule and critical for the undefined_variables rule.
     165                e.message += " #{e.context}." if e.context
    162166                f = [
    163167                    path
     
    181185                    @print """
    182186                    <issue line="#{e.lineNumber}"
    183                             lineEnd=#{e.lineNumberEnd ? e.lineNumberEnd}
     187                            lineEnd="#{e.lineNumberEnd ? e.lineNumber}"
    184188                            reason="[#{@escape(e.level)}] #{@escape(e.message)}"
    185189                            evidence="#{@escape(e.context)}"/>
     
    209213        msg
    210214
     215class CheckstyleReporter extends JSLintReporter
     216
     217    publish : () ->
     218        @print "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
     219        @print "<checkstyle version=\"4.3\">"
     220
     221        for path, errors of @errorReport.paths
     222            if errors.length
     223                @print "<file name=\"#{path}\">"
     224
     225                for e in errors
     226                    level = e.level
     227                    level = 'warning' if level is 'warn'
     228
     229                    # context is optional, this avoids generating the string
     230                    # "context: undefined"
     231                    context = e.context ? ""
     232                    @print """
     233                    <error line="#{e.lineNumber}"
     234                        severity="#{@escape(level)}"
     235                        message="#{@escape(e.message+'; context: '+context)}"
     236                        source="coffeelint"/>
     237                    """
     238                @print "</file>"
     239
     240        @print "</checkstyle>"
     241
    211242# Return an error report from linting the given paths.
    212 lintFiles = (paths, config) ->
     243lintFiles = (files, config) ->
    213244    errorReport = new ErrorReport()
    214     for path in paths
    215         source = read(path)
    216         literate = CoffeeScript.helpers.isLiterate path
    217 
    218         errorReport.paths[path] = coffeelint.lint(source, config, literate)
     245    for file in files
     246        source = read(file)
     247        literate = CoffeeScript.helpers.isLiterate file
     248
     249        fileConfig = if config then config else getFallbackConfig(file)
     250
     251        for ruleName, data of fileConfig
     252            if data.module?
     253                loadRules(data.module, ruleName)
     254
     255        errorReport.paths[file] = coffeelint.lint(source, fileConfig, literate)
    219256    return errorReport
    220257
     
    222259lintSource = (source, config, literate = false) ->
    223260    errorReport = new ErrorReport()
     261    config or= getFallbackConfig()
     262
     263    for ruleName, data of config
     264        if data.module?
     265            loadRules(data.module, ruleName)
     266
    224267    errorReport.paths["stdin"] = coffeelint.lint(source, config, literate)
    225268    return errorReport
     269
     270# Get fallback configuration. With the -F flag found configs in standard places
     271# will be used for each file being linted. Standard places are package.json or
     272# coffeelint.json in a project's root folder or the user's home folder.
     273getFallbackConfig = (filename = null) ->
     274    unless options.argv.noconfig
     275        configfinder.getConfig(filename)
     276
     277# moduleName is a NodeJS module, or a path to a module NodeJS can load.
     278loadRules = (moduleName, ruleName = undefined) ->
     279    try
     280        try
     281            ruleModule = require moduleName
     282        catch e
     283            # Maybe the user used a relative path from the command line. This
     284            # doesn't make much sense from a config file, but seems natural
     285            # with the --rules option.
     286            ruleModule = require path.resolve(process.cwd(), moduleName)
     287
     288        # Most rules can export as a single constructor function
     289        if typeof ruleModule is 'function'
     290            coffeelint.registerRule ruleModule, ruleName
     291        else
     292            # Or it can export an array of rules to load.
     293            for rule in ruleModule
     294                coffeelint.registerRule rule
     295    catch e
     296        console.error "Error loading #{moduleName}"
     297        throw e
    226298
    227299# Publish the error report and exit with the appropriate status.
     
    231303    else if options.argv.csv
    232304        new CSVReporter(errorReport)
     305    else if options.argv.checkstyle
     306        new CheckstyleReporter(errorReport)
    233307    else
    234308        colorize = not options.argv.nocolor
     
    248322            .alias("q", "quiet")
    249323            .describe("f", "Specify a custom configuration file.")
     324            .describe("rules", "Specify a custom rule or directory of rules.")
    250325            .describe("makeconfig", "Prints a default config file")
    251326            .describe("noconfig",
     
    253328            .describe("h", "Print help information.")
    254329            .describe("v", "Print current version number.")
    255             .describe("r", "Recursively lint .coffee files in subdirectories.")
     330            .describe("r", "(not used, but left for backward compatibility)")
    256331            .describe("csv", "Use the csv reporter.")
    257332            .describe("jslint", "Use the JSLint XML reporter.")
     333            .describe("checkstyle", "Use the checkstyle XML reporter.")
    258334            .describe("nocolor", "Don't colorize the output")
    259335            .describe("s", "Lint the source from stdin")
     
    263339            .boolean("csv")
    264340            .boolean("jslint")
     341            .boolean("checkstyle")
    265342            .boolean("nocolor")
    266343            .boolean("noconfig")
     
    286363else
    287364    # Load configuration.
    288     config = {}
     365    config = null
    289366    unless options.argv.noconfig
    290         # path.existsSync was moved to fs.existsSync node 0.6 -> 0.8
    291         existsFn = fs.existsSync ? path.existsSync
    292367        if options.argv.f
    293368            config = JSON.parse read options.argv.f
    294369        else if (process.env.COFFEELINT_CONFIG and
    295         existsFn process.env.COFFEELINT_CONFIG)
     370        fs.existsSync(process.env.COFFEELINT_CONFIG))
    296371            config = JSON.parse(read(process.env.COFFEELINT_CONFIG))
     372
     373    loadRules(options.argv.rules) if options.argv.rules
    297374
    298375    if options.argv.s
     
    308385        # Find scripts to lint.
    309386        paths = options.argv._
    310         scripts = if options.argv.r then findCoffeeScripts(paths) else paths
     387        scripts = findCoffeeScripts(paths)
    311388
    312389        # Lint the code.
  • Dev/trunk/node_modules/grunt-coffeelint/package.json

    r484 r516  
    22  "name": "grunt-coffeelint",
    33  "description": "Lint your Coffee",
    4   "version": "0.0.7",
     4  "version": "0.0.8",
    55  "homepage": "https://github.com/vojtajina/grunt-coffeelint",
    66  "author": {
     
    4040  },
    4141  "scripts": {
    42     "test": "grunt test"
     42    "test": "grunt default"
    4343  },
    4444  "peerDependencies": {
     
    4646  },
    4747  "dependencies": {
    48     "coffeelint": "~0.5"
     48    "coffeelint": "~1.0"
    4949  },
    5050  "devDependencies": {
     
    5656    "gruntplugin"
    5757  ],
    58   "readme": "[![build status](https://secure.travis-ci.org/vojtajina/grunt-coffeelint.png)](http://travis-ci.org/vojtajina/grunt-coffeelint)\n# grunt-coffeelint\n\n**Lint your CoffeeScript by [CoffeeLint].**\n\n## Installation\n\nInstall npm package, next to your project's `Gruntfile.js` file:\n\n    npm install grunt-coffeelint\n\nAdd this line to your project's `Gruntfile.js`:\n\n    grunt.loadNpmTasks('grunt-coffeelint');\n\n\n## Configuration\n\n`coffeelint` is a multitask, so you can use it similary to `lint`, `watch` etc...\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      app: ['app/*.coffee', 'scripts/*.coffee']\n      }\n    },\n    ...\n});\n````\n\n### Options per target\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      app: ['app/*.coffee', 'scripts/*.coffee'],\n      tests: {\n        files: {\n          src: ['tests/*.coffee']\n        },\n        options: {\n          'no_trailing_whitespace': {\n            'level': 'error'\n          }\n        }\n      }\n    },\n    ...\n});\n````\n\n### Global - default options\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      options: {\n        'no_trailing_whitespace': {\n          'level': 'error'\n        }\n      }\n    },\n    ...\n});\n````\n\nFor available options see [example configuration] or [coffeelint homepage].\n\n\n[CoffeeLint]: http://www.coffeelint.org/\n[coffeelint homepage]: http://www.coffeelint.org/\n[example configuration]: https://raw.github.com/clutchski/coffeelint/master/examples/coffeelint.json\n",
     58  "readme": "[![build status](https://secure.travis-ci.org/vojtajina/grunt-coffeelint.png)](http://travis-ci.org/vojtajina/grunt-coffeelint)\n# grunt-coffeelint\n\n**Lint your CoffeeScript by [CoffeeLint].**\n\n## Installation\n\nInstall npm package, next to your project's `Gruntfile.js` file:\n\n    npm install grunt-coffeelint\n\nAdd this line to your project's `Gruntfile.js`:\n\n    grunt.loadNpmTasks('grunt-coffeelint');\n\n## Options\n\nA few additional options are supported:\n\n### force\nType: `Boolean`\nDefault value: `false`\n\nSet `force` to `true` to report CoffeeLint errors but not fail the task.\n\n## Configuration\n\n`coffeelint` is a multitask, so you can use it similary to `lint`, `watch` etc...\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      app: ['app/*.coffee', 'scripts/*.coffee']\n      }\n    },\n    ...\n});\n````\n\n### Options per target\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      app: ['app/*.coffee', 'scripts/*.coffee'],\n      tests: {\n        files: {\n          src: ['tests/*.coffee']\n        },\n        options: {\n          'no_trailing_whitespace': {\n            'level': 'error'\n          }\n        }\n      }\n    },\n    ...\n});\n````\n\n### Global - default options\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      options: {\n        'no_trailing_whitespace': {\n          'level': 'error'\n        }\n      }\n    },\n    ...\n});\n````\n\nFor available options see [coffeelint homepage].\n\n[CoffeeLint]: http://www.coffeelint.org/\n[coffeelint homepage]: http://www.coffeelint.org/\n",
    5959  "readmeFilename": "README.md",
    60   "_id": "grunt-coffeelint@0.0.7",
     60  "_id": "grunt-coffeelint@0.0.8",
    6161  "dist": {
    62     "shasum": "b782bf05aeb462dce2e566116849d369a1f19f4f"
     62    "shasum": "149d6c5e8dd78b88a513b94daa274d5e6736fa52"
    6363  },
    64   "_from": "grunt-coffeelint@0.0.7",
    65   "_resolved": "https://registry.npmjs.org/grunt-coffeelint/-/grunt-coffeelint-0.0.7.tgz"
     64  "_from": "grunt-coffeelint@0.0.8",
     65  "_resolved": "https://registry.npmjs.org/grunt-coffeelint/-/grunt-coffeelint-0.0.8.tgz"
    6666}
  • Dev/trunk/node_modules/grunt-coffeelint/tasks/coffeelint.js

    r484 r516  
    44  grunt.registerMultiTask('coffeelint', 'Validate files with CoffeeLint', function() {
    55
     6    var errorCount = 0;
     7    var warnCount = 0;
    68    var files = this.filesSrc;
    79    var options = this.options();
    8     var errorCount = 0;
    9     var warnCount = 0;
     10
     11    if (options.configFile != undefined) {
     12      var config = grunt.file.readJSON(options.configFile);
     13      options.configFile = undefined;
     14      for (var key in options) {
     15          config[key] = options[key];
     16      }
     17      options = config;
     18    }
    1019
    1120    files.forEach(function(file) {
    1221      grunt.verbose.writeln('Linting ' + file + '...');
    1322
    14       var errors = coffeelint.lint(grunt.file.read(file), options);
     23      var literate = !!file.match(/\.(litcoffee|coffee\.md)$/i);
     24      var errors = coffeelint.lint(grunt.file.read(file), options, literate);
    1525
    1626      if (!errors.length) {
     
    4050    });
    4151
    42     if (errorCount) {
     52    if (errorCount && !options.force) {
    4353      return false;
    4454    }
    4555
    46     if (!warnCount) {
    47       grunt.log.ok(files.length + ' file' + (files.length === 1 ? '' : 's') +
    48           ' lint free.');
     56    if (!warnCount && !errorCount) {
     57      grunt.log.ok(files.length + ' file' + (files.length === 1 ? '' : 's') + ' lint free.');
    4958    }
    5059  });
Note: See TracChangeset for help on using the changeset viewer.