commit c728c8e1e124592bf473167bf5a6b84e769ac324 Author: wehub-resource-sync Date: Mon Jul 13 12:48:55 2026 +0800 chore: import upstream snapshot with attribution diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..537f81f --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +ignore-scripts=true \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..6288a87 --- /dev/null +++ b/README.md @@ -0,0 +1,1063 @@ +
+ +
compromise
+ +
modest natural language processing
+
npm install compromise
+
+ + by + Spencer Kelly and + + many contributors + + +
+ +
+ +
+
+ + + + + + + + + + +
+
+ + frenchgermanitalianspanish + +
+
+ + + + +
+don't you find it strange, +
+ +
+ + + + +
+ compromise tries its best to turn text into data. +
+ it makes limited and sensible decisions. +
+ + it's not as smart as you'd think. + + + + + +
+ + +```js +import nlp from 'compromise' + +let doc = nlp('she sells seashells by the seashore.') +doc.verbs().toPastTense() +doc.text() +// 'she sold seashells by the seashore.' +``` + + + + +
+don't be fancy, at all: +
+ +```js +if (doc.has('simon says #Verb')) { + return true +} +``` + + + +
+ +
+ +
+grab parts of the text: +
+ +```js +let doc = nlp(entireNovel) +doc.match('the #Adjective of times').text() +// "the blurst of times?" +``` + +
+ match docs +
+
+ +
+ + + +and get data: + +```js +import plg from 'compromise-speech' +nlp.extend(plg) + +let doc = nlp('Milwaukee has certainly had its share of visitors..') +doc.compute('syllables') +doc.places().json() +/* +[{ + "text": "Milwaukee", + "terms": [{ + "normal": "milwaukee", + "syllables": ["mil", "wau", "kee"] + }] +}] +*/ +``` + +
+ json docs +
+
+ +
+ + + + +avoid the problems of brittle parsers: + +```js +let doc = nlp("we're not gonna take it..") + +doc.has('gonna') // true +doc.has('going to') // true (implicit) + +// transform +doc.contractions().expand() +doc.text() +// 'we are not going to take it..' +``` + +
+ contraction docs +
+
+ +
+ + + +and whip stuff around like it's data: + +```js +let doc = nlp('ninety five thousand and fifty two') +doc.numbers().add(20) +doc.text() +// 'ninety five thousand and seventy two' +``` + +
+ number docs +
+ +
+ +
+ + + +-because it actually is- + +```js +let doc = nlp('the purple dinosaur') +doc.nouns().toPlural() +doc.text() +// 'the purple dinosaurs' +``` + +
+ noun docs +
+
+ +
+ + + + +Use it on the client-side: + +```html + + +``` + +or likewise: + +```typescript +import nlp from 'compromise' + +var doc = nlp('London is calling') +doc.verbs().toNegative() +// 'London is not calling' +``` + + + + + + + +compromise is **~250kb** (minified): + +
+ + + + +
+ +it's pretty fast. It can run on keypress: + +
+ + + +
+ +it works mainly by conjugating all forms of a basic word list. + +The final lexicon is ~14,000 words: + +
+ +
+ +you can read more about how it works, [here](https://observablehq.com/@spencermountain/compromise-internals). it's weird. + + + + + +

+ okay - +

+ compromise/one +

+

A tokenizer of words, sentences, and punctuation.

+ +

+ +```js +import nlp from 'compromise/one' + +let doc = nlp("Wayne's World, party time") +let data = doc.json() +/* [{ + normal:"wayne's world party time", + terms:[{ text: "Wayne's", normal: "wayne" }, + ... + ] + }] +*/ +``` + +

+ tokenizer docs +
+ +compromise/one splits your text up, wraps it in a handy API, + + + + + +/one is quick - most sentences take a 10th of a millisecond. + +It can do ~1mb of text a second - or 10 wikipedia pages. + +Infinite jest takes 3s. + +
+ You can also parallelize, or stream text to it with compromise-speed. +
+ + + + + +

+

+ compromise/two +

+

A part-of-speech tagger, and grammar-interpreter.

+ +

+ +```js +import nlp from 'compromise/two' + +let doc = nlp("Wayne's World, party time") +let str = doc.match('#Possessive #Noun').text() +// "Wayne's World" +``` + +

+ tagger docs +
+ +

+ +

+compromise/two automatically calculates the very basic grammar of each word. + +this is more useful than people sometimes realize. + +Light grammar helps you write cleaner templates, and get closer to the information. + + + + + +compromise has 83 tags, arranged in a handsome graph. + +#FirstName#Person#ProperNoun#Noun + +you can see the grammar of each word by running `doc.debug()` + +you can see the reasoning for each tag with `nlp.verbose('tagger')`. + +if you prefer Penn tags, you can derive them with: + +```js +let doc = nlp('welcome thrillho') +doc.compute('penn') +doc.json() +``` + + + + +

+

+ compromise/three +

+

Phrase and sentence tooling.

+ +

+ +```js +import nlp from 'compromise/three' + +let doc = nlp("Wayne's World, party time") +let str = doc.people().normalize().text() +// "wayne" +``` + +

+ selection docs +
+ +compromise/three is a set of tooling to zoom into and operate on parts of a text. + +`.numbers()` grabs all the numbers in a document, for example - and extends it with new methods, like `.subtract()`. + +When you have a phrase, or group of words, you can see additional metadata about it with `.json()` + +```js +let doc = nlp('four out of five dentists') +console.log(doc.fractions().json()) +/*[{ + text: 'four out of five', + terms: [ [Object], [Object], [Object], [Object] ], + fraction: { numerator: 4, denominator: 5, decimal: 0.8 } + } +]*/ +``` + +```js +let doc = nlp('$4.09CAD') +doc.money().json() +/*[{ + text: '$4.09CAD', + terms: [ [Object] ], + number: { prefix: '$', num: 4.09, suffix: 'cad'} + } +]*/ +``` + + + +## API + +### Compromise/one + +##### Output + +- **[.text()](https://observablehq.com/@spencermountain/compromise-text)** - return the document as text +- **[.json()](https://observablehq.com/@spencermountain/compromise-json)** - return the document as data +- **[.debug()](https://observablehq.com/@spencermountain/compromise-output)** - pretty-print the interpreted document +- **[.out()](https://observablehq.com/@spencermountain/compromise-output)** - a named or custom output +- **[.html({})](https://observablehq.com/@spencermountain/compromise-html)** - output custom html tags for matches +- **[.wrap({})](https://observablehq.com/@spencermountain/compromise-output)** - produce custom output for document matches + +##### Utils + +- **[.found](https://observablehq.com/@spencermountain/compromise-utils)** _[getter]_ - is this document empty? +- **[.docs](https://observablehq.com/@spencermountain/compromise-utils)** _[getter]_ get term objects as json +- **[.length](https://observablehq.com/@spencermountain/compromise-utils)** _[getter]_ - count the # of characters in the document (string length) +- **[.isView](https://observablehq.com/@spencermountain/compromise-utils)** _[getter]_ - identify a compromise object +- **[.compute()](https://observablehq.com/@spencermountain/compromise-compute)** - run a named analysis on the document +- **[.clone()](https://observablehq.com/@spencermountain/compromise-utils)** - deep-copy the document, so that no references remain +- **[.termList()](https://observablehq.com/@spencermountain/compromise-accessors)** - return a flat list of all Term objects in match +- **[.cache({})](https://observablehq.com/@spencermountain/compromise-cache)** - freeze the current state of the document, for speed-purposes +- **[.uncache()](https://observablehq.com/@spencermountain/compromise-cache)** - un-freezes the current state of the document, so it may be transformed +- **[.freeze({})](https://observablehq.com/@spencermountain/compromise-freeze)** - prevent any tags from being removed, in these terms +- **[.unfreeze({})](https://observablehq.com/@spencermountain/compromise-freeze)** - allow tags to change again, as default + +##### Accessors + +- **[.all()](https://observablehq.com/@spencermountain/compromise-utils)** - return the whole original document ('zoom out') +- **[.terms()](https://observablehq.com/@spencermountain/compromise-selections)** - split-up results by each individual term +- **[.first(n)](https://observablehq.com/@spencermountain/compromise-accessors)** - use only the first result(s) +- **[.last(n)](https://observablehq.com/@spencermountain/compromise-accessors)** - use only the last result(s) +- **[.slice(n,n)](https://observablehq.com/@spencermountain/compromise-accessors)** - grab a subset of the results +- **[.eq(n)](https://observablehq.com/@spencermountain/compromise-accessors)** - use only the nth result +- **[.firstTerms()](https://observablehq.com/@spencermountain/compromise-accessors)** - get the first word in each match +- **[.lastTerms()](https://observablehq.com/@spencermountain/compromise-accessors)** - get the end word in each match +- **[.fullSentences()](https://observablehq.com/@spencermountain/compromise-accessors)** - get the whole sentence for each match +- **[.groups()](https://observablehq.com/@spencermountain/compromise-accessors)** - grab any named capture-groups from a match +- **[.wordCount()](https://observablehq.com/@spencermountain/compromise-utils)** - count the # of terms in the document +- **[.confidence()](https://observablehq.com/@spencermountain/compromise-utils)** - an average score for pos tag interpretations + +##### Match + +_(match methods use the [match-syntax](https://docs.compromise.cool/compromise-match-syntax).)_ + +- **[.match('')](https://observablehq.com/@spencermountain/compromise-match)** - return a new Doc, with this one as a parent +- **[.not('')](https://observablehq.com/@spencermountain/compromise-match)** - return all results except for this +- **[.matchOne('')](https://observablehq.com/@spencermountain/compromise-match)** - return only the first match +- **[.if('')](https://observablehq.com/@spencermountain/compromise-match)** - return each current phrase, only if it contains this match ('only') +- **[.ifNo('')](https://observablehq.com/@spencermountain/compromise-match)** - Filter-out any current phrases that have this match ('notIf') +- **[.has('')](https://observablehq.com/@spencermountain/compromise-match)** - Return a boolean if this match exists +- **[.before('')](https://observablehq.com/@spencermountain/compromise-match)** - return all terms before a match, in each phrase +- **[.after('')](https://observablehq.com/@spencermountain/compromise-match)** - return all terms after a match, in each phrase +- **[.union()](https://observablehq.com/@spencermountain/compromise-set)** - return combined matches without duplicates +- **[.intersection()](https://observablehq.com/@spencermountain/compromise-set)** - return only duplicate matches +- **[.complement()](https://observablehq.com/@spencermountain/compromise-set)** - get everything not in another match +- **[.settle()](https://observablehq.com/@spencermountain/compromise-set)** - remove overlaps from matches +- **[.growRight('')](https://observablehq.com/@spencermountain/compromise-match)** - add any matching terms immediately after each match +- **[.growLeft('')](https://observablehq.com/@spencermountain/compromise-match)** - add any matching terms immediately before each match +- **[.grow('')](https://observablehq.com/@spencermountain/compromise-match)** - add any matching terms before or after each match +- **[.sweep(net)](https://observablehq.com/@spencermountain/compromise-sweep)** - apply a series of match objects to the document +- **[.splitOn('')](https://observablehq.com/@spencermountain/compromise-split)** - return a Document with three parts for every match ('splitOn') +- **[.splitBefore('')](https://observablehq.com/@spencermountain/compromise-split)** - partition a phrase before each matching segment +- **[.splitAfter('')](https://observablehq.com/@spencermountain/compromise-split)** - partition a phrase after each matching segment +- **[.join()](https://observablehq.com/@spencermountain/compromise-split)** - merge any neighbouring terms in each match +- **[.joinIf(leftMatch, rightMatch)](https://observablehq.com/@spencermountain/compromise-split)** - merge any neighbouring terms under given conditions +- **[.lookup([])](https://observablehq.com/@spencermountain/compromise-match)** - quick find for an array of string matches +- **[.autoFill()](https://observablehq.com/@spencermountain/compromise-typeahead)** - create type-ahead assumptions on the document + +##### Tag + +- **[.tag('')](https://observablehq.com/@spencermountain/compromise-tagger)** - Give all terms the given tag +- **[.tagSafe('')](https://observablehq.com/@spencermountain/compromise-tagger)** - Only apply tag to terms if it is consistent with current tags +- **[.unTag('')](https://observablehq.com/@spencermountain/compromise-tagger)** - Remove this term from the given terms +- **[.canBe('')](https://observablehq.com/@spencermountain/compromise-tagger)** - return only the terms that can be this tag + +##### Case + +- **[.toLowerCase()](https://observablehq.com/@spencermountain/compromise-case)** - turn every letter of every term to lower-cse +- **[.toUpperCase()](https://observablehq.com/@spencermountain/compromise-case)** - turn every letter of every term to upper case +- **[.toTitleCase()](https://observablehq.com/@spencermountain/compromise-case)** - upper-case the first letter of each term +- **[.toCamelCase()](https://observablehq.com/@spencermountain/compromise-case)** - remove whitespace and title-case each term + +##### Whitespace + +- **[.pre('')](https://observablehq.com/@spencermountain/compromise-whitespace)** - add this punctuation or whitespace before each match +- **[.post('')](https://observablehq.com/@spencermountain/compromise-whitespace)** - add this punctuation or whitespace after each match +- **[.trim()](https://observablehq.com/@spencermountain/compromise-whitespace)** - remove start and end whitespace +- **[.hyphenate()](https://observablehq.com/@spencermountain/compromise-whitespace)** - connect words with hyphen, and remove whitespace +- **[.dehyphenate()](https://observablehq.com/@spencermountain/compromise-whitespace)** - remove hyphens between words, and set whitespace +- **[.toQuotations()](https://observablehq.com/@spencermountain/compromise-whitespace)** - add quotation marks around these matches +- **[.toParentheses()](https://observablehq.com/@spencermountain/compromise-whitespace)** - add brackets around these matches + +##### Loops + +- **[.map(fn)](https://observablehq.com/@spencermountain/compromise-loops)** - run each phrase through a function, and create a new document +- **[.forEach(fn)](https://observablehq.com/@spencermountain/compromise-loops)** - run a function on each phrase, as an individual document +- **[.filter(fn)](https://observablehq.com/@spencermountain/compromise-loops)** - return only the phrases that return true +- **[.find(fn)](https://observablehq.com/@spencermountain/compromise-loops)** - return a document with only the first phrase that matches +- **[.some(fn)](https://observablehq.com/@spencermountain/compromise-loops)** - return true or false if there is one matching phrase +- **[.random(fn)](https://observablehq.com/@spencermountain/compromise-loops)** - sample a subset of the results + +##### Insert + +- **[.replace(match, replace)](https://observablehq.com/@spencermountain/compromise-insert)** - search and replace match with new content +- **[.replaceWith(replace)](https://observablehq.com/@spencermountain/compromise-insert)** - substitute-in new text +- **[.remove()](https://observablehq.com/@spencermountain/compromise-insert)** - fully remove these terms from the document +- **[.insertBefore(str)](https://observablehq.com/@spencermountain/compromise-insert)** - add these new terms to the front of each match (prepend) +- **[.insertAfter(str)](https://observablehq.com/@spencermountain/compromise-insert)** - add these new terms to the end of each match (append) +- **[.concat()](https://observablehq.com/@spencermountain/compromise-insert)** - add these new things to the end +- **[.swap(fromLemma, toLemma)](https://observablehq.com/@spencermountain/compromise-root)** - smart replace of root-words,using proper conjugation + +##### Transform + +- **[.sort('method')](https://observablehq.com/@spencermountain/compromise-sorting)** - re-arrange the order of the matches (in place) +- **[.reverse()](https://observablehq.com/@spencermountain/compromise-sorting)** - reverse the order of the matches, but not the words +- **[.unique()](https://observablehq.com/@spencermountain/compromise-sorting)** - remove any duplicate matches + +##### Lib + +_(these methods are on the main `nlp` object)_ + +- **[nlp.tokenize(str)](https://observablehq.com/@spencermountain/compromise-tokenization)** - parse text without running POS-tagging +- **[nlp.lazy(str, match)](https://observablehq.com/@spencermountain/compromise-performance)** - scan through a text with minimal analysis +- **[nlp.plugin({})](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - mix in a compromise-plugin +- **[nlp.parseMatch(str)](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - pre-parse any match statements into json +- **[nlp.world()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - grab or change library internals +- **[nlp.model()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - grab all current linguistic data +- **[nlp.methods()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - grab or change internal methods +- **[nlp.hooks()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - see which compute methods run automatically +- **[nlp.verbose(mode)](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - log our decision-making for debugging +- **[nlp.version](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - current semver version of the library + +- **[nlp.addWords(obj, isFrozen?)](https://observablehq.com/@spencermountain/compromise-plugin)** - add new words to the lexicon +- **[nlp.addTags(obj)](https://observablehq.com/@spencermountain/compromise-plugin)** - add new tags to the tagSet +- **[nlp.typeahead(arr)](https://observablehq.com/@spencermountain/compromise-typeahead)** - add words to the auto-fill dictionary +- **[nlp.buildTrie(arr)](https://observablehq.com/@spencermountain/compromise-lookup)** - compile a list of words into a fast lookup form +- **[nlp.buildNet(arr)](https://observablehq.com/@spencermountain/compromise-sweep)** - compile a list of matches into a fast match form + + + + +### compromise/two: + +##### Contractions + +- **[.contractions()](https://observablehq.com/@spencermountain/compromise-contractions)** - things like "didn't" +- **[.contractions().expand()](https://observablehq.com/@spencermountain/compromise-contractions)** - things like "didn't" +- **[.contract()](https://observablehq.com/@spencermountain/compromise-contractions)** - things like "didn't" + + + + +### compromise/three: + +- **[.normalize({})](https://observablehq.com/@spencermountain/compromise-normalization)** - clean-up the text in various ways + +##### Nouns + +- **[.nouns()](https://observablehq.com/@spencermountain/nouns)** - return any subsequent terms tagged as a Noun + - **[.nouns().json()](https://observablehq.com/@spencermountain/nouns)** - overloaded output with noun metadata + - **[.nouns().parse()](https://observablehq.com/@spencermountain/nouns)** - get tokenized noun-phrase + - **[.nouns().isPlural()](https://observablehq.com/@spencermountain/nouns)** - return only plural nouns + - **[.nouns().isSingular()](https://observablehq.com/@spencermountain/nouns)** - return only singular nouns + - **[.nouns().toPlural()](https://observablehq.com/@spencermountain/nouns)** - `'football captain' → 'football captains'` + - **[.nouns().toSingular()](https://observablehq.com/@spencermountain/nouns)** - `'turnovers' → 'turnover'` + - **[.nouns().adjectives()](https://observablehq.com/@spencermountain/nouns)** - get any adjectives describing this noun + +##### Verbs + +- **[.verbs()](https://observablehq.com/@spencermountain/verbs)** - return any subsequent terms tagged as a Verb + - **[.verbs().json()](https://observablehq.com/@spencermountain/verbs)** - overloaded output with verb metadata + - **[.verbs().parse()](https://observablehq.com/@spencermountain/verbs)** - get tokenized verb-phrase + - **[.verbs().subjects()](https://observablehq.com/@spencermountain/verbs)** - what is doing the verb action + - **[.verbs().adverbs()](https://observablehq.com/@spencermountain/verbs)** - return the adverbs describing this verb. + - **[.verbs().isSingular()](https://observablehq.com/@spencermountain/verbs)** - return singular verbs like 'spencer walks' + - **[.verbs().isPlural()](https://observablehq.com/@spencermountain/verbs)** - return plural verbs like 'we walk' + - **[.verbs().isImperative()](https://observablehq.com/@spencermountain/verbs)** - only instruction verbs like 'eat it!' + - **[.verbs().toPastTense()](https://observablehq.com/@spencermountain/verbs)** - `'will go' → 'went'` + - **[.verbs().toPresentTense()](https://observablehq.com/@spencermountain/verbs)** - `'walked' → 'walks'` + - **[.verbs().toFutureTense()](https://observablehq.com/@spencermountain/verbs)** - `'walked' → 'will walk'` + - **[.verbs().toInfinitive()](https://observablehq.com/@spencermountain/verbs)** - `'walks' → 'walk'` + - **[.verbs().toGerund()](https://observablehq.com/@spencermountain/verbs)** - `'walks' → 'walking'` + - **[.verbs().toPastParticiple()](https://observablehq.com/@spencermountain/verbs)** - `'drive' → 'had driven'` + - **[.verbs().conjugate()](https://observablehq.com/@spencermountain/verbs)** - return all conjugations of these verbs + - **[.verbs().isNegative()](https://observablehq.com/@spencermountain/verbs)** - return verbs with 'not', 'never' or 'no' + - **[.verbs().isPositive()](https://observablehq.com/@spencermountain/verbs)** - only verbs without 'not', 'never' or 'no' + - **[.verbs().toNegative()](https://observablehq.com/@spencermountain/verbs)** - `'went' → 'did not go'` + - **[.verbs().toPositive()](https://observablehq.com/@spencermountain/verbs)** - `"didn't study" → 'studied'` + +##### Numbers + +- **[.numbers()](https://observablehq.com/@spencermountain/compromise-values)** - grab all written and numeric values + - **[.numbers().parse()](https://observablehq.com/@spencermountain/compromise-values)** - get tokenized number phrase + - **[.numbers().get()](https://observablehq.com/@spencermountain/compromise-values)** - get a simple javascript number + - **[.numbers().json()](https://observablehq.com/@spencermountain/compromise-values)** - overloaded output with number metadata + - **[.numbers().toNumber()](https://observablehq.com/@spencermountain/compromise-values)** - convert 'five' to `5` + - **[.numbers().toLocaleString()](https://observablehq.com/@spencermountain/compromise-values)** - add commas, or nicer formatting for numbers + - **[.numbers().toText()](https://observablehq.com/@spencermountain/compromise-values)** - convert '5' to `five` + - **[.numbers().toOrdinal()](https://observablehq.com/@spencermountain/compromise-values)** - convert 'five' to `fifth` or `5th` + - **[.numbers().toCardinal()](https://observablehq.com/@spencermountain/compromise-values)** - convert 'fifth' to `five` or `5` + - **[.numbers().isOrdinal()](https://observablehq.com/@spencermountain/compromise-values)** - return only ordinal numbers + - **[.numbers().isCardinal()](https://observablehq.com/@spencermountain/compromise-values)** - return only cardinal numbers + - **[.numbers().isEqual(n)](https://observablehq.com/@spencermountain/compromise-values)** - return numbers with this value + - **[.numbers().greaterThan(min)](https://observablehq.com/@spencermountain/compromise-values)** - return numbers bigger than n + - **[.numbers().lessThan(max)](https://observablehq.com/@spencermountain/compromise-values)** - return numbers smaller than n + - **[.numbers().between(min, max)](https://observablehq.com/@spencermountain/compromise-values)** - return numbers between min and max + - **[.numbers().isUnit(unit)](https://observablehq.com/@spencermountain/compromise-values)** - return only numbers in the given unit, like 'km' + - **[.numbers().set(n)](https://observablehq.com/@spencermountain/compromise-values)** - set number to n + - **[.numbers().add(n)](https://observablehq.com/@spencermountain/compromise-values)** - increase number by n + - **[.numbers().subtract(n)](https://observablehq.com/@spencermountain/compromise-values)** - decrease number by n + - **[.numbers().increment()](https://observablehq.com/@spencermountain/compromise-values)** - increase number by 1 + - **[.numbers().decrement()](https://observablehq.com/@spencermountain/compromise-values)** - decrease number by 1 +- **[.money()](https://observablehq.com/@spencermountain/compromise-values)** - things like `'$2.50'` + - **[.money().get()](https://observablehq.com/@spencermountain/compromise-values)** - retrieve the parsed amount(s) of money + - **[.money().json()](https://observablehq.com/@spencermountain/compromise-values)** - currency + number info + - **[.money().currency()](https://observablehq.com/@spencermountain/compromise-values)** - which currency the money is in +- **[.fractions()](https://observablehq.com/@spencermountain/compromise-values)** - like '2/3rds' or 'one out of five' + - **[.fractions().parse()](https://observablehq.com/@spencermountain/compromise-values)** - get tokenized fraction + - **[.fractions().get()](https://observablehq.com/@spencermountain/compromise-values)** - simple numerator, denominator data + - **[.fractions().json()](https://observablehq.com/@spencermountain/compromise-values)** - json method overloaded with fractions data + - **[.fractions().toDecimal()](https://observablehq.com/@spencermountain/compromise-values)** - '2/3' -> '0.66' + - **[.fractions().normalize()](https://observablehq.com/@spencermountain/compromise-values)** - 'four out of 10' -> '4/10' + - **[.fractions().toText()](https://observablehq.com/@spencermountain/compromise-values)** - '4/10' -> 'four tenths' + - **[.fractions().toPercentage()](https://observablehq.com/@spencermountain/compromise-values)** - '4/10' -> '40%' +- **[.percentages()](https://observablehq.com/@spencermountain/compromise-values)** - like '2.5%' + - **[.percentages().get()](https://observablehq.com/@spencermountain/compromise-values)** - return the percentage number / 100 + - **[.percentages().json()](https://observablehq.com/@spencermountain/compromise-values)** - json overloaded with percentage information + - **[.percentages().toFraction()](https://observablehq.com/@spencermountain/compromise-values)** - '80%' -> '8/10' + +##### Sentences + +- **[.sentences()](https://observablehq.com/@spencermountain/compromise-sentences)** - return a sentence class with additional methods + - **[.sentences().json()](https://observablehq.com/@spencermountain/compromise-sentences)** - overloaded output with sentence metadata + + - **[.sentences().toPastTense()](https://observablehq.com/@spencermountain/compromise-sentences)** - `he walks` -> `he walked` + - **[.sentences().toPresentTense()](https://observablehq.com/@spencermountain/compromise-sentences)** - `he walked` -> `he walks` + - **[.sentences().toFutureTense()](https://observablehq.com/@spencermountain/compromise-sentences)** -- `he walks` -> `he will walk` + - **[.sentences().toInfinitive()](https://observablehq.com/@spencermountain/compromise-sentences)** -- verb root-form `he walks` -> `he walk` + - **[.sentences().toNegative()](https://observablehq.com/@spencermountain/compromise-sentences)** - - `he walks` -> `he didn't walk` + - **[.sentences().isQuestion()](https://observablehq.com/@spencermountain/compromise-sentences)** - return questions with a `?` + - **[.sentences().isExclamation()](https://observablehq.com/@spencermountain/compromise-sentences)** - return sentences with a `!` + - **[.sentences().isStatement()](https://observablehq.com/@spencermountain/compromise-sentences)** - return sentences without `?` or `!` + +##### Adjectives + +- **[.adjectives()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'quick'` + - **[.adjectives().json()](https://observablehq.com/@spencermountain/compromise-selections)** - get adjective metadata + - **[.adjectives().conjugate()](https://observablehq.com/@spencermountain/compromise-selections)** - return all inflections of these adjectives + - **[.adjectives().adverbs()](https://observablehq.com/@spencermountain/compromise-selections)** - get adverbs describing this adjective + - **[.adjectives().toComparative()](https://observablehq.com/@spencermountain/compromise-selections)** - 'quick' -> 'quicker' + - **[.adjectives().toSuperlative()](https://observablehq.com/@spencermountain/compromise-selections)** - 'quick' -> 'quickest' + - **[.adjectives().toAdverb()](https://observablehq.com/@spencermountain/compromise-selections)** - 'quick' -> 'quickly' + - **[.adjectives().toNoun()](https://observablehq.com/@spencermountain/compromise-selections)** - 'quick' -> 'quickness' + +##### Misc selections + +- **[.clauses()](https://observablehq.com/@spencermountain/compromise-selections)** - split-up sentences into multi-term phrases +- **[.chunks()](https://observablehq.com/@spencermountain/compromise-selections)** - split-up sentences noun-phrases and verb-phrases +- **[.hyphenated()](https://observablehq.com/@spencermountain/compromise-selections)** - all terms connected with a hyphen or dash like `'wash-out'` +- **[.phoneNumbers()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'(939) 555-0113'` +- **[.hashTags()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'#nlp'` +- **[.emails()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'hi@compromise.cool'` +- **[.emoticons()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `:)` +- **[.emojis()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `💋` +- **[.atMentions()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'@nlp_compromise'` +- **[.urls()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'compromise.cool'` +- **[.pronouns()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'he'` +- **[.conjunctions()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'but'` +- **[.prepositions()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'of'` +- **[.abbreviations()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'Mrs.'` +- **[.people()](https://observablehq.com/@spencermountain/topics-named-entity-recognition)** - names like 'John F. Kennedy' + - **[.people().json()](https://observablehq.com/@spencermountain/topics-named-entity-recognition)** - get person-name metadata + - **[.people().parse()](https://observablehq.com/@spencermountain/topics-named-entity-recognition)** - get person-name interpretation +- **[.places()](https://observablehq.com/@spencermountain/topics-named-entity-recognition)** - like 'Paris, France' +- **[.organizations()](https://observablehq.com/@spencermountain/topics-named-entity-recognition)** - like 'Google, Inc' +- **[.topics()](https://observablehq.com/@spencermountain/topics-named-entity-recognition)** - `people()` + `places()` + `organizations()` +- **[.adverbs()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'quickly'` + - **[.adverbs().json()](https://observablehq.com/@spencermountain/compromise-selections)** - get adverb metadata +- **[.acronyms()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'FBI'` + - **[.acronyms().strip()](https://observablehq.com/@spencermountain/compromise-selections)** - remove periods from acronyms + - **[.acronyms().addPeriods()](https://observablehq.com/@spencermountain/compromise-selections)** - add periods to acronyms +- **[.parentheses()](https://observablehq.com/@spencermountain/compromise-selections)** - return anything inside (parentheses) + - **[.parentheses().strip()](https://observablehq.com/@spencermountain/compromise-selections)** - remove brackets +- **[.possessives()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `"Spencer's"` + - **[.possessives().strip()](https://observablehq.com/@spencermountain/compromise-selections)** - "Spencer's" -> "Spencer" +- **[.quotations()](https://observablehq.com/@spencermountain/compromise-selections)** - return any terms inside paired quotation marks + - **[.quotations().strip()](https://observablehq.com/@spencermountain/compromise-selections)** - remove quotation marks +- **[.slashes()](https://observablehq.com/@spencermountain/compromise-selections)** - return any terms grouped by slashes + - **[.slashes().split()](https://observablehq.com/@spencermountain/compromise-selections)** - turn 'love/hate' into 'love hate' + +

+ +

+ +
+ +
+ +### .extend(): + +This library comes with a considerate, common-sense baseline for english grammar. + +You're free to change, or lay-waste to any settings - which is the fun part actually. + +the easiest part is just to suggest tags for any given words: + +```js +let myWords = { + kermit: 'FirstName', + fozzie: 'FirstName', +} +let doc = nlp(muppetText, myWords) +``` + +or make heavier changes with a [compromise-plugin](https://observablehq.com/@spencermountain/compromise-plugins). + +```js +import nlp from 'compromise' +nlp.extend({ + // add new tags + tags: { + Character: { + isA: 'Person', + notA: 'Adjective', + }, + }, + // add or change words in the lexicon + words: { + kermit: 'Character', + gonzo: 'Character', + }, + // change inflections + irregulars: { + get: { + pastTense: 'gotten', + gerund: 'gettin', + }, + }, + // add new methods to compromise + api: View => { + View.prototype.kermitVoice = function () { + this.sentences().prepend('well,') + this.match('i [(am|was)]').prepend('um,') + return this + } + }, +}) +``` + +
+ .plugin() docs +
+
+ +
+ + +
+ +
+ +### Docs: + +##### gentle introduction: + +- **[#1) Input → output](https://docs.compromise.cool/tutorial-1)** +- **[#2) Match & transform](https://docs.compromise.cool/compromise-tutorial-2)** +- **[#3) Making a chat-bot](https://docs.compromise.cool/compromise-making-a-bot)** + + +
+ +
+ +##### Documentation: + +| Concepts | API | Plugins | +| ------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------: | -------------------------------------------------------------------------------------: | +| [Accuracy](https://observablehq.com/@spencermountain/compromise-accuracy) | [Accessors](https://observablehq.com/@spencermountain/compromise-accessors) | [Adjectives](https://observablehq.com/@spencermountain/compromise-adjectives) | +| [Caching](https://observablehq.com/@spencermountain/compromise-cache) | [Constructor-methods](https://observablehq.com/@spencermountain/compromise-constructor-methods) | [Dates](https://observablehq.com/@spencermountain/compromise-dates) | +| [Case](https://observablehq.com/@spencermountain/compromise-case) | [Contractions](https://observablehq.com/@spencermountain/compromise-contractions) | [Export](https://observablehq.com/@spencermountain/compromise-export) | +| [Filesize](https://observablehq.com/@spencermountain/compromise-filesize) | [Insert](https://observablehq.com/@spencermountain/compromise-insert) | [Hash](https://observablehq.com/@spencermountain/compromise-hash) | +| [Internals](https://observablehq.com/@spencermountain/compromise-internals) | [Json](https://observablehq.com/@spencermountain/compromise-json) | [Html](https://observablehq.com/@spencermountain/compromise-html) | +| [Justification](https://observablehq.com/@spencermountain/compromise-justification) | [Character Offsets](https://observablehq.com/@spencermountain/compromise-offsets) | [Keypress](https://observablehq.com/@spencermountain/compromise-keypress) | +| [Lexicon](https://observablehq.com/@spencermountain/compromise-lexicon) | [Loops](https://observablehq.com/@spencermountain/compromise-loops) | [Ngrams](https://observablehq.com/@spencermountain/compromise-ngram) | +| [Match-syntax](https://observablehq.com/@spencermountain/compromise-match-syntax) | [Match](https://observablehq.com/@spencermountain/compromise-match) | [Numbers](https://observablehq.com/@spencermountain/compromise-values) | +| [Performance](https://observablehq.com/@spencermountain/compromise-performance) | [Nouns](https://observablehq.com/@spencermountain/nouns) | [Paragraphs](https://observablehq.com/@spencermountain/compromise-paragraphs) | +| [Plugins](https://observablehq.com/@spencermountain/compromise-plugins) | [Output](https://observablehq.com/@spencermountain/compromise-output) | [Scan](https://observablehq.com/@spencermountain/compromise-scan) | +| [Projects](https://observablehq.com/@spencermountain/compromise-projects) | [Selections](https://observablehq.com/@spencermountain/compromise-selections) | [Sentences](https://observablehq.com/@spencermountain/compromise-sentences) | +| [Tagger](https://observablehq.com/@spencermountain/compromise-tagger) | [Sorting](https://observablehq.com/@spencermountain/compromise-sorting) | [Syllables](https://observablehq.com/@spencermountain/compromise-syllables) | +| [Tags](https://observablehq.com/@spencermountain/compromise-tags) | [Split](https://observablehq.com/@spencermountain/compromise-split) | [Pronounce](https://observablehq.com/@spencermountain/compromise-pronounce) | +| [Tokenization](https://observablehq.com/@spencermountain/compromise-tokenization) | [Text](https://observablehq.com/@spencermountain/compromise-text) | [Strict](https://observablehq.com/@spencermountain/compromise-strict) | +| [Named-Entities](https://observablehq.com/@spencermountain/topics-named-entity-recognition) | [Utils](https://observablehq.com/@spencermountain/compromise-utils) | [Penn-tags](https://observablehq.com/@spencermountain/compromise-penn-tags) | +| [Whitespace](https://observablehq.com/@spencermountain/compromise-whitespace) | [Verbs](https://observablehq.com/@spencermountain/verbs) | [Typeahead](https://observablehq.com/@spencermountain/compromise/compromise-typeahead) | +| [World data](https://observablehq.com/@spencermountain/compromise-world) | [Normalization](https://observablehq.com/@spencermountain/compromise-normalization) | [Sweep](https://observablehq.com/@spencermountain/compromise-sweep) | +| [Fuzzy-matching](https://observablehq.com/@spencermountain/compromise-fuzzy-matching) | [Typescript](https://observablehq.com/@spencermountain/compromise-typescript) | [Mutation](https://observablehq.com/@spencermountain/compromise-mutation) | +| [Root-forms](https://observablehq.com/@spencermountain/compromise-root) | + +
+ +
+ +##### Talks: + +- **[Language as an Interface](https://www.youtube.com/watch?v=WuPVS2tCg8s)** - by Spencer Kelly +- **[Coding Chat Bots](https://www.youtube.com/watch?v=c_hmwFwvO0U)** - by KahWee Teng +- **[On Typing and data](https://vimeo.com/496095722)** - by Spencer Kelly + +##### Articles: + +- **[Geocoding Social Conversations with NLP and JavaScript](http://compromise.cool)** - by Microsoft +- **[Microservice Recipe](https://eventn.com/recipes/text-parsing-with-nlp-compromise)** - by Eventn +- **[Adventure Game Sentence Parsing with Compromise](https://killalldefects.com/2020/02/20/adventure-game-sentence-parsing-with-compromise/)** +- **[Building Text-Based Games](https://killalldefects.com/2019/09/24/building-text-based-games-with-compromise-nlp/)** - by Matt Eland +- **[Fun with javascript in BigQuery](https://medium.com/@hoffa/new-in-bigquery-persistent-udfs-c9ea4100fd83#6e09)** - by Felipe Hoffa +- **[Natural Language Processing... in the Browser?](https://dev.to/charlesdlandau/natural-language-processing-in-the-browser-52hj)** - by Charles Landau + +##### Some fun Applications: + +- **[Automated Bechdel Test](https://github.com/guardian/bechdel-test)** - by The Guardian +- **[Story generation framework](https://perchance.org/welcome)** - by Jose Phrocca +- **[Tumbler blog of lists](https://leanstooneside.tumblr.com/)** - horse-ebooks-like lists - by Michael Paulukonis +- **[Video Editing from Transcription](https://newtheory.io/)** - by New Theory +- **[Browser extension Fact-checking](https://github.com/AlexanderKidd/FactoidL)** - by Alexander Kidd +- **[Siri shortcut](https://routinehub.co/shortcut/3260)** - by Michael Byrns +- **[Amazon skill](https://github.com/tajddin/voiceplay)** - by Tajddin Maghni +- **[Tasking Slack-bot](https://github.com/kevinsuh/toki)** - by Kevin Suh + [[see more]](https://observablehq.com/@spencermountain/compromise-projects) + +##### Comparisons + +- [Compromise and Spacy](https://observablehq.com/@spencermountain/compromise-and-spacy) +- [Compromise and NLTK](https://observablehq.com/@spencermountain/compromise-and-nltk) + + +
+ +
+
+
+ +
+ + + +### Plugins: + +These are some helpful extensions: + +##### Dates + +`npm install compromise-dates` + +- **[.dates()](https://observablehq.com/@spencermountain/compromise-dates)** - find dates like `June 8th` or `03/03/18` + - **[.dates().get()](https://observablehq.com/@spencermountain/compromise-dates)** - simple start/end json result + - **[.dates().json()](https://observablehq.com/@spencermountain/compromise-dates)** - overloaded output with date metadata + - **[.dates().format('')](https://observablehq.com/@spencermountain/compromise-dates)** - convert the dates to specific formats + - **[.dates().toShortForm()](https://observablehq.com/@spencermountain/compromise-dates)** - convert 'Wednesday' to 'Wed', etc + - **[.dates().toLongForm()](https://observablehq.com/@spencermountain/compromise-dates)** - convert 'Feb' to 'February', etc +- **[.durations()](https://observablehq.com/@spencermountain/compromise-dates)** - `2 weeks` or `5mins` + - **[.durations().get()](https://observablehq.com/@spencermountain/compromise-dates)** - return simple json for duration + - **[.durations().json()](https://observablehq.com/@spencermountain/compromise-dates)** - overloaded output with duration metadata +- **[.times()](https://observablehq.com/@spencermountain/compromise-dates)** - `4:30pm` or `half past five` + - **[.times().get()](https://observablehq.com/@spencermountain/compromise-dates)** - return simple json for times + - **[.times().json()](https://observablehq.com/@spencermountain/compromise-dates)** - overloaded output with time metadata + +##### Stats + +`npm install compromise-stats` + +- **[.tfidf({})](https://observablehq.com/@spencermountain/compromise-tfidf)** - rank words by frequency and uniqueness + +- **[.ngrams({})](https://observablehq.com/@spencermountain/compromise-ngram)** - list all repeating sub-phrases, by word-count +- **[.unigrams()](https://observablehq.com/@spencermountain/compromise-ngram)** - n-grams with one word +- **[.bigrams()](https://observablehq.com/@spencermountain/compromise-ngram)** - n-grams with two words +- **[.trigrams()](https://observablehq.com/@spencermountain/compromise-ngram)** - n-grams with three words +- **[.startgrams()](https://observablehq.com/@spencermountain/compromise-ngram)** - n-grams including the first term of a phrase +- **[.endgrams()](https://observablehq.com/@spencermountain/compromise-ngram)** - n-grams including the last term of a phrase +- **[.edgegrams()](https://observablehq.com/@spencermountain/compromise-ngram)** - n-grams including the first or last term of a phrase + +##### Speech + +`npm install compromise-syllables` + +- **[.syllables()](https://observablehq.com/@spencermountain/compromise-syllables)** - split each term by its typical pronunciation +- **[.soundsLike()](https://observablehq.com/@spencermountain/compromise-soundsLike)** - produce a estimated pronunciation + +##### Wikipedia + +`npm install compromise-wikipedia` + +- **[.wikipedia()](https://observablehq.com/@spencermountain/compromise-wikipedia)** - compressed article reconciliation + + +
+ +
+
+ +### Typescript + +we're committed to typescript/deno support, both in main and in the official-plugins: + +```ts +import nlp from 'compromise' +import stats from 'compromise-stats' + +const nlpEx = nlp.extend(stats) + +nlpEx('This is type safe!').ngrams({ min: 1 }) +``` + +
+ typescript docs +
+ +
+ +
+ +#### Limitations: + +- **slash-support:** + We currently split slashes up as different words, like we do for hyphens. so things like this don't work: + nlp('the koala eats/shoots/leaves').has('koala leaves') //false + +- **inter-sentence match:** + By default, sentences are the top-level abstraction. + Inter-sentence, or multi-sentence matches aren't supported without a plugin: + nlp("that's it. Back to Winnipeg!").has('it back')//false + +- **nested match syntax:** + the danger beauty of regex is that you can recurse indefinitely. + Our match syntax is much weaker. Things like this are not (yet) possible: + doc.match('(modern (major|minor))? general') + complex matches must be achieved with successive **.match()** statements. + +- **dependency parsing:** + Proper sentence transformation requires understanding the [syntax tree](https://en.wikipedia.org/wiki/Parse_tree) of a sentence, which we don't currently do. + We should! Help wanted with this. + +##### FAQ + + + +
+ +
+ +#### See Also: + +-   **[en-pos](https://github.com/finnlp/en-pos)** - very clever javascript pos-tagger _by [Alex Corvi](https://github.com/alexcorvi)_ +-   **[naturalNode](https://github.com/NaturalNode/natural)** - fancier statistical nlp in javascript +-   **[winkJS](https://winkjs.org/)** - POS-tagger, tokenizer, machine-learning in javascript +-   **[dariusk/pos-js ](https://github.com/dariusk/pos-js)** - fastTag fork in javascript +-   **[compendium-js](https://github.com/Ulflander/compendium-js)** - POS and sentiment analysis in javascript +-   **[nodeBox linguistics](https://www.nodebox.net/code/index.php/Linguistics)** - conjugation, inflection in javascript +-   **[reText](https://github.com/wooorm/retext)** - very impressive [text utilities](https://github.com/wooorm/retext/blob/master/doc/plugins.md) in javascript +-   **[superScript](https://github.com/superscriptjs/superscript)** - conversation engine in js +-   **[jsPos](https://code.google.com/archive/p/jspos/)** - javascript build of the time-tested Brill-tagger + +-   **[spaCy](https://spacy.io/)** - speedy, multilingual tagger in C/python +-   **[Prose](https://github.com/jdkato/prose/)** - quick tagger in Go by Joseph Kato +-   **[TextBlob](https://github.com/sloria/TextBlob)** - python tagger + + + +MIT diff --git a/README.wehub.md b/README.wehub.md new file mode 100644 index 0000000..60251b1 --- /dev/null +++ b/README.wehub.md @@ -0,0 +1,7 @@ +# WeHub 来源说明 + +- 原始项目:`spencermountain/compromise` +- 原始仓库:https://github.com/spencermountain/compromise +- 导入方式:上游默认分支的最新快照 +- 原作者、版权和许可证信息以原始仓库及本仓库 LICENSE 为准 +- 本文件仅用于记录来源,不代表 WeHub 是原项目作者 diff --git a/builds/compromise.js b/builds/compromise.js new file mode 100644 index 0000000..15d4c1f --- /dev/null +++ b/builds/compromise.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).nlp=t()}(this,(function(){"use strict";var e={methods:{one:{},two:{},three:{},four:{}},model:{one:{},two:{},three:{}},compute:{},hooks:[]};const t={compute:function(e){const{world:t}=this,n=t.compute;return"string"==typeof e&&n.hasOwnProperty(e)?n[e](this):(e=>"[object Array]"===Object.prototype.toString.call(e))(e)?e.forEach((r=>{t.compute.hasOwnProperty(r)?n[r](this):console.warn("no compute:",e)})):"function"==typeof e?e(this):console.warn("no compute:",e),this}};var n={forEach:function(e){return this.fullPointer.forEach(((t,n)=>{const r=this.update([t]);e(r,n)})),this},map:function(e,t){const n=this.fullPointer.map(((t,n)=>{const r=this.update([t]),o=e(r,n);return void 0===o?this.none():o}));if(0===n.length)return t||this.update([]);if(void 0!==n[0]){if("string"==typeof n[0])return n;if("object"==typeof n[0]&&(null===n[0]||!n[0].isView))return n}let r=[];return n.forEach((e=>{r=r.concat(e.fullPointer)})),this.toView(r)},filter:function(e){let t=this.fullPointer;t=t.filter(((t,n)=>{const r=this.update([t]);return e(r,n)}));return this.update(t)},find:function(e){const t=this.fullPointer.find(((t,n)=>{const r=this.update([t]);return e(r,n)}));return this.update([t])},some:function(e){return this.fullPointer.some(((t,n)=>{const r=this.update([t]);return e(r,n)}))},random:function(e=1){let t=this.fullPointer,n=Math.floor(Math.random()*t.length);return n+e>this.length&&(n=this.length-e,n=n<0?0:n),t=t.slice(n,n+e),this.update(t)}};const r={termList:function(){return this.methods.one.termList(this.docs)},terms:function(e){const t=this.match(".");return"number"==typeof e?t.eq(e):t},groups:function(e){if(e||0===e)return this.update(this._groups[e]||[]);const t={};return Object.keys(this._groups).forEach((e=>{t[e]=this.update(this._groups[e])})),t},eq:function(e){let t=this.pointer;return t||(t=this.docs.map(((e,t)=>[t]))),t[e]?this.update([t[e]]):this.none()},first:function(){return this.eq(0)},last:function(){const e=this.fullPointer.length-1;return this.eq(e)},firstTerms:function(){return this.match("^.")},lastTerms:function(){return this.match(".$")},slice:function(e,t){let n=this.pointer||this.docs.map(((e,t)=>[t]));return n=n.slice(e,t),this.update(n)},all:function(){return this.update().toView()},fullSentences:function(){const e=this.fullPointer.map((e=>[e[0]]));return this.update(e).toView()},none:function(){return this.update([])},isDoc:function(e){if(!e||!e.isView)return!1;const t=this.fullPointer,n=e.fullPointer;return!t.length!==n.length&&t.every(((e,t)=>!!n[t]&&(e[0]===n[t][0]&&e[1]===n[t][1]&&e[2]===n[t][2])))},wordCount:function(){return this.docs.reduce(((e,t)=>(e+=t.filter((e=>""!==e.text)).length,e)),0)},isFull:function(){const e=this.pointer;if(!e)return!0;if(0===e.length||0!==e[0][0])return!1;let t=0,n=0;return this.document.forEach((e=>t+=e.length)),this.docs.forEach((e=>n+=e.length)),t===n},getNth:function(e){return"number"==typeof e?this.eq(e):"string"==typeof e?this.if(e):this}};r.group=r.groups,r.fullSentence=r.fullSentences,r.sentence=r.fullSentences,r.lastTerm=r.lastTerms,r.firstTerm=r.firstTerms;const o=Object.assign({},r,t,n);o.get=o.eq;class View{constructor(t,n,r={}){[["document",t],["world",e],["_groups",r],["_cache",null],["viewType","View"]].forEach((e=>{Object.defineProperty(this,e[0],{value:e[1],writable:!0})})),this.ptrs=n}get docs(){let t=this.document;return this.ptrs&&(t=e.methods.one.getDoc(this.ptrs,this.document)),t}get pointer(){return this.ptrs}get methods(){return this.world.methods}get model(){return this.world.model}get hooks(){return this.world.hooks}get isView(){return!0}get found(){return this.docs.length>0}get length(){return this.docs.length}get fullPointer(){const{docs:e,ptrs:t,document:n}=this,r=t||e.map(((e,t)=>[t]));return r.map((e=>{let[t,r,o,a,i]=e;return r=r||0,o=o||(n[t]||[]).length,n[t]&&n[t][r]&&(a=a||n[t][r].id,n[t][o-1]&&(i=i||n[t][o-1].id)),[t,r,o,a,i]}))}update(e){const t=new View(this.document,e);if(this._cache&&e&&e.length>0){const n=[];e.forEach(((e,t)=>{const[r,o,a]=e;(1===e.length||0===o&&this.document[r].length===a)&&(n[t]=this._cache[r])})),n.length>0&&(t._cache=n)}return t.world=this.world,t}toView(e){return new View(this.document,e||this.pointer)}fromText(e){const{methods:t}=this,n=t.one.tokenize.fromString(e,this.world),r=new View(n);return r.world=this.world,r.compute(["normal","freeze","lexicon"]),this.world.compute.preTagger&&r.compute("preTagger"),r.compute("unfreeze"),r}clone(){let e=this.document.slice(0);e=e.map((e=>e.map((e=>((e=Object.assign({},e)).tags=new Set(e.tags),e)))));const t=this.update(this.pointer);return t.document=e,t._cache=this._cache,t}}Object.assign(View.prototype,o);const a=function(e){return e&&"object"==typeof e&&!Array.isArray(e)};function i(e,t){if(a(t))for(const n in t)a(t[n])?(e[n]||Object.assign(e,{[n]:{}}),i(e[n],t[n])):Object.assign(e,{[n]:t[n]});return e}const s=function(e,t,n,r){if(o=e,"[object Array]"===Object.prototype.toString.call(o))return void e.forEach((e=>s(e,t,n,r)));var o;const{methods:a,model:l,compute:u,hooks:c}=t;e.methods&&function(e,t){for(const n in t)e[n]=e[n]||{},Object.assign(e[n],t[n])}(a,e.methods),e.model&&i(l,e.model),e.irregulars&&function(e,t){const n=e.two.models||{};Object.keys(t).forEach((e=>{t[e].pastTense&&(n.toPast&&(n.toPast.ex[e]=t[e].pastTense),n.fromPast&&(n.fromPast.ex[t[e].pastTense]=e)),t[e].presentTense&&(n.toPresent&&(n.toPresent.ex[e]=t[e].presentTense),n.fromPresent&&(n.fromPresent.ex[t[e].presentTense]=e)),t[e].gerund&&(n.toGerund&&(n.toGerund.ex[e]=t[e].gerund),n.fromGerund&&(n.fromGerund.ex[t[e].gerund]=e)),t[e].comparative&&(n.toComparative&&(n.toComparative.ex[e]=t[e].comparative),n.fromComparative&&(n.fromComparative.ex[t[e].comparative]=e)),t[e].superlative&&(n.toSuperlative&&(n.toSuperlative.ex[e]=t[e].superlative),n.fromSuperlative&&(n.fromSuperlative.ex[t[e].superlative]=e))}))}(l,e.irregulars),e.compute&&Object.assign(u,e.compute),c&&(t.hooks=c.concat(e.hooks||[])),e.api&&e.api(n),e.lib&&Object.keys(e.lib).forEach((t=>r[t]=e.lib[t])),e.tags&&r.addTags(e.tags),e.words&&r.addWords(e.words),e.frozen&&r.addWords(e.frozen,!0),e.mutate&&e.mutate(t,r)},l=function(e){return"[object Array]"===Object.prototype.toString.call(e)},u=function(e,t,n){const{methods:r}=n,o=new t([]);if(o.world=n,"number"==typeof e&&(e=String(e)),!e)return o;if("string"==typeof e){return new t(r.one.tokenize.fromString(e,n))}if(a=e,"[object Object]"===Object.prototype.toString.call(a)&&e.isView)return new t(e.document,e.ptrs);var a;if(l(e)){if(l(e[0])){const n=e.map((e=>e.map((e=>({text:e,normal:e,pre:"",post:" ",tags:new Set})))));return new t(n)}const n=e.map((e=>e.terms.map((e=>(l(e.tags)&&(e.tags=new Set(e.tags)),e)))));return new t(n)}return o},c=Object.assign({},e),h=function(e,t){t&&h.addWords(t);const n=u(e,View,c);return e&&n.compute(c.hooks),n};Object.defineProperty(h,"_world",{value:c,writable:!0}),h.tokenize=function(e,t){const{compute:n}=this._world;t&&h.addWords(t);const r=u(e,View,c);return n.contractions&&r.compute(["alias","normal","machine","contractions"]),r},h.plugin=function(e){return s(e,this._world,View,this),this},h.extend=h.plugin,h.world=function(){return this._world},h.model=function(){return this._world.model},h.methods=function(){return this._world.methods},h.hooks=function(){return this._world.hooks},h.verbose=function(e){const t="undefined"!=typeof process&&process.env?process.env:self.env||{};return t.DEBUG_TAGS="tagger"===e||!0===e||"",t.DEBUG_MATCH="match"===e||!0===e||"",t.DEBUG_CHUNKS="chunker"===e||!0===e||"",this},h.version="14.15.1";var d={one:{cacheDoc:function(e){const t=e.map((e=>{const t=new Set;return e.forEach((e=>{""!==e.normal&&t.add(e.normal),e.switch&&t.add(`%${e.switch}%`),e.implicit&&t.add(e.implicit),e.machine&&t.add(e.machine),e.root&&t.add(e.root),e.alias&&e.alias.forEach((e=>t.add(e)));const n=Array.from(e.tags);for(let e=0;e/^\p{Lu}[\p{Ll}'’]/u.test(e)||/^\p{Lu}$/u.test(e),b=(e,t,n)=>{if(n.forEach((e=>e.dirty=!0)),e){const r=[t,0].concat(n);Array.prototype.splice.apply(e,r)}return e},v=function(e){const t=e[e.length-1];!t||/ $/.test(t.post)||/[-–—]/.test(t.post)||(t.post+=" ")},y=(e,t,n)=>{const r=/[-.?!,;:)–—'"]/g,o=e[t-1];if(!o)return;const a=o.post;if(r.test(a)){const e=a.match(r).join(""),t=n[n.length-1];t.post=e+t.post,o.post=o.post.replace(r,"")}},w=function(e,t,n,r){const[o,a,i]=t;0===a||i===r[o].length?v(n):(v(n),v([e[t[1]]])),function(e,t,n){const r=e[t];if(0!==t||!f(r.text))return;n[0].text=n[0].text.replace(/^\p{Ll}/u,(e=>e.toUpperCase()));const o=e[t];o.tags.has("ProperNoun")||o.tags.has("Acronym")||f(o.text)&&o.text.length>1&&(o.text=(a=o.text,a.replace(/^\p{Lu}/u,(e=>e.toLowerCase()))));var a}(e,a,n),b(e,a,n)};let k=0;const P=e=>(e=e.length<3?"0"+e:e).length<3?"0"+e:e,A=function(e){let[t,n]=e.index||[0,0];k+=1,k=k>46655?0:k,t=t>46655?0:t,n=n>1294?0:n;let r=P(k.toString(36));r+=P(t.toString(36));let o=n.toString(36);o=o.length<2?"0"+o:o,r+=o;return r+=parseInt(36*Math.random(),10).toString(36),e.normal+"|"+r.toUpperCase()},C=function(e){if(e.has("@hasContraction")&&"function"==typeof e.contractions){e.grow("@hasContraction").contractions().expand()}},N=e=>"[object Array]"===Object.prototype.toString.call(e),j=function(e,t,n){const{document:r,world:o}=t;t.uncache();const a=t.fullPointer,i=t.fullPointer;t.forEach(((s,l)=>{const u=s.fullPointer[0],[c]=u,h=r[c];let d=function(e,t){const{methods:n}=t;return"string"==typeof e?n.one.tokenize.fromString(e,t)[0]:"object"==typeof e&&e.isView?e.clone().docs[0]||[]:N(e)?N(e[0])?e[0]:e:[]}(e,o);0!==d.length&&(d=function(e){return e.map((e=>(e.id=A(e),e)))}(d),n?(C(t.update([u]).firstTerm()),w(h,u,d,r)):(C(t.update([u]).lastTerm()),function(e,t,n,r){const[o,,a]=t,i=(r[o]||[]).length;ae.replace(/^\p{Ll}/u,(e=>e.toUpperCase())),H=e=>e.replace(/^\p{Lu}/u,(e=>e.toLowerCase()));T.replaceWith=function(e,t={}){let n=this.fullPointer;const r=this;if(this.uncache(),"function"==typeof e)return function(e,t,n){return e.forEach((e=>{const r=t(e);e.replaceWith(r,n)})),e}(r,e,t);const o=r.docs[0];if(!o)return r;const a=t.possessives&&o[o.length-1].tags.has("Possessive"),i=t.case&&(s=o[0].text,/^\p{Lu}[\p{Ll}'’]/u.test(s)||/^\p{Lu}$/u.test(s));var s;e=function(e,t){if("string"!=typeof e)return e;const n=t.groups();return e=e.replace(I,(e=>{const t=e.replace(/\$/,"");return n.hasOwnProperty(t)?n[t].text():e})),e}(e,r);const l=this.update(n);n=n.map((e=>e.slice(0,3)));const u=(l.docs[0]||[]).map((e=>Array.from(e.tags))),c=l.docs[0][0].pre,h=l.docs[0][l.docs[0].length-1].post;if("string"==typeof e&&(e=this.fromText(e).compute("id")),r.insertAfter(e),l.has("@hasContraction")&&r.contractions){r.grow("@hasContraction+").contractions().expand()}if(r.delete(l),a){const e=r.docs[0],t=e[e.length-1];t.tags.has("Possessive")||(t.text+="'s",t.normal+="'s",t.tags.add("Possessive"))}if(c&&r.docs[0]&&(r.docs[0][0].pre=c),h&&r.docs[0]){const e=r.docs[0][r.docs[0].length-1];e.post.trim()||(e.post=h)}const d=r.toView(n).compute(["index","freeze","lexicon"]);if(d.world.compute.preTagger&&d.compute("preTagger"),d.compute("unfreeze"),t.tags&&d.terms().forEach(((e,t)=>{e.tagSafe(u[t])})),!d.docs[0]||!d.docs[0][0])return d;if(t.case){const e=i?D:H;d.docs[0][0].text=e(d.docs[0][0].text)}return d},T.replace=function(e,t,n){if(e&&!t)return this.replaceWith(e,n);const r=this.match(e);return r.found?(this.soften(),r.replaceWith(t,n)):this};const E={remove:function(e){const{indexN:t}=this.methods.one.pointer;this.uncache();let n=this.all(),r=this;e&&(n=this,r=this.match(e));const o=!n.ptrs;if(r.has("@hasContraction")&&r.contractions){r.grow("@hasContraction").contractions().expand()}let a=n.fullPointer;const i=r.fullPointer.reverse(),s=function(e,t){t.forEach((t=>{const[n,r,o]=t,a=o-r;e[n]&&(o===e[n].length&&o>1&&function(e,t){const n=e.length-1,r=e[n],o=e[n-t];o&&r&&(o.post+=r.post,o.post=o.post.replace(/ +([.?!,;:])/,"$1"),o.post=o.post.replace(/[,;:]+([.?!])/,"$1"))}(e[n],a),e[n].splice(r,a))}));for(let t=e.length-1;t>=0;t-=1)if(0===e[t].length&&(e.splice(t,1),t===e.length&&e[t-1])){const n=e[t-1],r=n[n.length-1];r&&(r.post=r.post.trimEnd())}return e}(this.document,i);if(a=function(e,t){return e=e.map((e=>{const[n]=e;return t[n]?(t[n].forEach((t=>{const n=t[2]-t[1];e[1]<=t[1]&&e[2]>=t[2]&&(e[2]-=n)})),e):e})),e.forEach(((t,n)=>{if(0===t[1]&&0==t[2])for(let t=n+1;te[2]-e[1]>0))).map((e=>(e[3]=null,e[4]=null,e)))}(a,t(i)),n.ptrs=a,n.document=s,n.compute("index"),o&&(n.ptrs=void 0),!e)return this.ptrs=[],n.none();return n.toView(a)}};E.delete=E.remove;const G={pre:function(e,t){return void 0===e&&this.found?this.docs[0][0].pre:(this.docs.forEach((n=>{const r=n[0];!0===t?r.pre+=e:r.pre=e})),this)},post:function(e,t){if(void 0===e){const e=this.docs[this.docs.length-1];return e[e.length-1].post}return this.docs.forEach((n=>{const r=n[n.length-1];!0===t?r.post+=e:r.post=e})),this},trim:function(){if(!this.found)return this;const e=this.docs,t=e[0][0];t.pre=t.pre.trimStart();const n=e[e.length-1],r=n[n.length-1];return r.post=r.post.trimEnd(),this},hyphenate:function(){return this.docs.forEach((e=>{e.forEach(((t,n)=>{0!==n&&(t.pre=""),e[n+1]&&(t.post="-")}))})),this},dehyphenate:function(){const e=/[-–—]/;return this.docs.forEach((t=>{t.forEach((t=>{e.test(t.post)&&(t.post=" ")}))})),this},toQuotations:function(e,t){return e=e||'"',t=t||'"',this.docs.forEach((n=>{n[0].pre=e+n[0].pre;const r=n[n.length-1];r.post=t+r.post})),this},toParentheses:function(e,t){return e=e||"(",t=t||")",this.docs.forEach((n=>{n[0].pre=e+n[0].pre;const r=n[n.length-1];r.post=t+r.post})),this}};G.deHyphenate=G.dehyphenate,G.toQuotation=G.toQuotations;var O={alpha:(e,t)=>e.normalt.normal?1:0,length:(e,t)=>{const n=e.normal.trim().length,r=t.normal.trim().length;return nr?-1:0},wordCount:(e,t)=>e.wordst.words?-1:0,sequential:(e,t)=>e[0]t[0]?-1:e[1]>t[1]?1:-1,byFreq:function(e){const t={};return e.forEach((e=>{t[e.normal]=t[e.normal]||0,t[e.normal]+=1})),e.sort(((e,n)=>{const r=t[e.normal],o=t[n.normal];return ro?-1:0})),e}};const F=new Set(["index","sequence","seq","sequential","chron","chronological"]),V=new Set(["freq","frequency","topk","repeats"]),z=new Set(["alpha","alphabetical"]);var B={unique:function(){const e=new Set,t=this.filter((t=>{const n=t.text("machine");return!e.has(n)&&(e.add(n),!0)}));return t},reverse:function(){let e=this.pointer||this.docs.map(((e,t)=>[t]));return e=[].concat(e),e=e.reverse(),this._cache&&(this._cache=this._cache.reverse()),this.update(e)},sort:function(e){const{docs:t,pointer:n}=this;if(this.uncache(),"function"==typeof e)return function(e,t){let n=e.fullPointer;return n=n.sort(((n,r)=>(n=e.update([n]),r=e.update([r]),t(n,r)))),e.ptrs=n,e}(this,e);e=e||"alpha";const r=n||t.map(((e,t)=>[t]));let o=t.map(((e,t)=>({index:t,words:e.length,normal:e.map((e=>e.machine||e.normal||"")).join(" "),pointer:r[t]})));return F.has(e)&&(e="sequential"),z.has(e)&&(e="alpha"),V.has(e)?(o=O.byFreq(o),this.update(o.map((e=>e.pointer)))):"function"==typeof O[e]?(o=o.sort(O[e]),this.update(o.map((e=>e.pointer)))):this}};const S=function(e,t){if(e.length>0){const t=e[e.length-1],n=t[t.length-1];!1===/ /.test(n.post)&&(n.post+=" ")}return e=e.concat(t)};var $={concat:function(e){if("string"==typeof e){const t=this.fromText(e);if(this.found&&this.ptrs){const e=this.fullPointer,n=e[e.length-1][0];this.document.splice(n,0,...t.document)}else this.document=this.document.concat(t.document);return this.all().compute("index")}if("object"==typeof e&&e.isView)return function(e,t){if(e.document===t.document){const n=e.fullPointer.concat(t.fullPointer);return e.toView(n).compute("index")}return t.fullPointer.forEach((t=>{t[0]+=e.document.length})),e.document=S(e.document,t.docs),e.all()}(this,e);if(t=e,"[object Array]"===Object.prototype.toString.call(t)){const t=S(this.document,e);return this.document=t,this.all()}var t;return this}};var M={harden:function(){return this.ptrs=this.fullPointer,this},soften:function(){let e=this.ptrs;return!e||e.length<1||(e=e.map((e=>e.slice(0,3))),this.ptrs=e),this}};const L=Object.assign({},{toLowerCase:function(){return this.termList().forEach((e=>{e.text=e.text.toLowerCase()})),this},toUpperCase:function(){return this.termList().forEach((e=>{e.text=e.text.toUpperCase()})),this},toTitleCase:function(){return this.termList().forEach((e=>{e.text=e.text.replace(/^ *[a-z\u00C0-\u00FF]/,(e=>e.toUpperCase()))})),this},toCamelCase:function(){return this.docs.forEach((e=>{e.forEach(((t,n)=>{0!==n&&(t.text=t.text.replace(/^ *[a-z\u00C0-\u00FF]/,(e=>e.toUpperCase()))),n!==e.length-1&&(t.post="")}))})),this}},x,T,E,G,B,$,M),K={id:function(e){const t=e.docs;for(let e=0;e(e.implicit=e.text,e.machine=e.text,e.pre="",e.post="",e.text="",e.normal="",e.index=[r,o+t],e))),n[0]&&(n[0].pre=e[r][o].pre,n[n.length-1].post=e[r][o].post,n[0].text=e[r][o].text,n[0].normal=e[r][o].normal),e[r].splice(o,1,...n))},R=/'/,Q=new Set(["what","how","when","where","why"]),Z=new Set(["be","go","start","think","need"]),_=new Set(["been","gone"]),X=/'/,Y=/(e|é|aison|sion|tion)$/,ee=/(age|isme|acle|ege|oire)$/;var te=(e,t)=>["je",e[t].normal.split(X)[1]],ne=(e,t)=>{const n=e[t].normal.split(X)[1];return n&&n.endsWith("e")?["la",n]:["le",n]},re=(e,t)=>{const n=e[t].normal.split(X)[1];return n&&Y.test(n)&&!ee.test(n)?["du",n]:n&&n.endsWith("s")?["des",n]:["de",n]};const oe=/^([0-9.]{1,4}[a-z]{0,2}) ?[-–—] ?([0-9]{1,4}[a-z]{0,2})$/i,ae=/^([0-9]{1,2}(:[0-9][0-9])?(am|pm)?) ?[-–—] ?([0-9]{1,2}(:[0-9][0-9])?(am|pm)?)$/i,ie=/^[0-9]{3}-[0-9]{4}$/,se=function(e,t){const n=e[t];let r=n.text.match(oe);return null!==r?!0===n.tags.has("PhoneNumber")||ie.test(n.text)?null:[r[1],"to",r[2]]:(r=n.text.match(ae),null!==r?[r[1],"to",r[4]]:null)},le=/^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/,ue=function(e,t,n){const r=n.model.one.numberSuffixes||{},o=e[t].text.match(le);if(null!==o){const e=o[2].toLowerCase().trim();return r.hasOwnProperty(e)?null:[o[1],e]}return null},ce=/'/,he=/^[0-9][^-–—]*[-–—].*?[0-9]/,de=function(e,t,n,r){const o=t.update();o.document=[e];let a=n+r;n>0&&(n-=1),e[a]&&(a+=1),o.ptrs=[[0,n,a]]},ge={t:(e,t)=>function(e,t){return"ain't"===e[t].normal||"aint"===e[t].normal?null:[e[t].normal.replace(/n't/,""),"not"]}(e,t),d:(e,t)=>function(e,t){const n=e[t].normal.split(R)[0];if(Q.has(n))return[n,"did"];if(e[t+1]){if(_.has(e[t+1].normal))return[n,"had"];if(Z.has(e[t+1].normal))return[n,"would"]}return null}(e,t)},me={j:(e,t)=>te(e,t),l:(e,t)=>ne(e,t),d:(e,t)=>re(e,t)},pe=function(e,t,n,r){for(let o=0;o2)return a.out.concat(r)}return null},fe=function(e,t){const n=t.fromText(e.join(" "));return n.compute(["id","alias"]),n.docs[0]},be=function(e,t){for(let n=t+1;n<5&&e[n];n+=1)if("been"===e[n].normal)return["there","has"];return["there","is"]};var ve={contractions:e=>{const{world:t,document:n}=e,{model:r,methods:o}=t,a=r.one.contractions||[];n.forEach(((r,i)=>{for(let s=r.length-1;s>=0;s-=1){let l=null,u=null;if(!0===ce.test(r[s].normal)){const e=r[s].normal.split(ce);l=e[0],u=e[1]}let c=pe(a,r[s],l,u);!c&&ge.hasOwnProperty(u)&&(c=ge[u](r,s,t)),!c&&me.hasOwnProperty(l)&&(c=me[l](r,s)),"there"===l&&"s"===u&&(c=be(r,s)),c?(c=fe(c,e),U(n,[i,s],c),de(n[i],e,s,c.length)):he.test(r[s].normal)?(c=se(r,s),c&&(c=fe(c,e),U(n,[i,s],c),o.one.setTag(c,"NumberRange",t),c[2]&&c[2].tags.has("Time")&&o.one.setTag([c[0]],"Time",t,null,"time-range"),de(n[i],e,s,c.length))):(c=ue(r,s,t),c&&(c=fe(c,e),U(n,[i,s],c),o.one.setTag([c[1]],"Unit",t,null,"contraction-unit")))}}))}};const ye={model:q,compute:ve,hooks:["contractions"]},we=function(e){const t=e.world,{model:n,methods:r}=e.world,o=r.one.setTag,{frozenLex:a}=n.one,i=n.one._multiCache||{};e.docs.forEach((e=>{for(let n=0;nn;r-=1){const i=e.slice(n,r+1),s=i.map((e=>e.machine||e.normal)).join(" ");!0!==a.hasOwnProperty(s)||(o(i,a[s],t,!1,"1-frozen-multi-lexicon"),i.forEach((e=>e.frozen=!0)))}}void 0!==a[s]&&a.hasOwnProperty(s)&&(o([r],a[s],t,!1,"1-freeze-lexicon"),r.frozen=!0)}}))};const ke=e=>""+e+"",Pe=e=>""+e+"",Ae=function(e){e.docs.forEach((e=>{console.log(ke("\n ┌─────────")),e.forEach((e=>{let t=` ${Pe("│")} `;const n=e.implicit||e.text||"-";!0===e.frozen?t+=`${ke(n)} ❄️`:t+=Pe(n),console.log(t)}))}))};var Ce={compute:{frozen:we,freeze:we,unfreeze:function(e){return e.docs.forEach((e=>{e.forEach((e=>{delete e.frozen}))})),e}},mutate:e=>{const t=e.methods.one;t.termMethods.isFrozen=e=>!0===e.frozen,t.debug.freeze=Ae,t.debug.frozen=Ae},api:function(e){e.prototype.freeze=function(){return this.docs.forEach((e=>{e.forEach((e=>{e.frozen=!0}))})),this},e.prototype.unfreeze=function(){this.compute("unfreeze")},e.prototype.isFrozen=function(){return this.match("@isFrozen+")}},hooks:["freeze"]};const Ne=function(e,t,n){const{model:r,methods:o}=n,a=o.one.setTag,i=r.one._multiCache||{},{lexicon:s}=r.one||{},l=e[t],u=l.machine||l.normal;if(void 0!==i[u]&&e[t+1]){for(let r=t+i[u]-1;r>t;r-=1){const o=e.slice(t,r+1);if(o.length<=1)return!1;const i=o.map((e=>e.machine||e.normal)).join(" ");if(!0===s.hasOwnProperty(i)){const e=s[i];return a(o,e,n,!1,"1-multi-lexicon"),!e||2!==e.length||"PhrasalVerb"!==e[0]&&"PhrasalVerb"!==e[1]||a([o[1]],"Particle",n,!1,"1-phrasal-particle"),!0}}return!1}return null},je=/^(under|over|mis|re|un|dis|semi|pre|post)-?/,xe=new Set(["Verb","Infinitive","PastTense","Gerund","PresentTense","Adjective","Participle"]),Ie=function(e,t,n){const{model:r,methods:o}=n,a=o.one.setTag,{lexicon:i}=r.one,s=e[t],l=s.machine||s.normal;if(void 0!==i[l]&&i.hasOwnProperty(l))return a([s],i[l],n,!1,"1-lexicon"),!0;if(s.alias){const e=s.alias.find((e=>i.hasOwnProperty(e)));if(e)return a([s],i[e],n,!1,"1-lexicon-alias"),!0}if(!0===je.test(l)){const e=l.replace(je,"");if(i.hasOwnProperty(e)&&e.length>3&&xe.has(i[e]))return a([s],i[e],n,!1,"1-lexicon-prefix"),!0}return null};var Te={lexicon:function(e){const t=e.world;e.docs.forEach((e=>{for(let n=0;n{const o=e[r],a=(r=(r=r.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);a.length>1&&(void 0===n[a[0]]||a.length>n[a[0]])&&(n[a[0]]=a.length),t[r]=t[r]||o})),delete t[""],delete t.null,delete t[" "],{lex:t,_multi:n}}}};var He={addWords:function(e,t=!1){const n=this.world(),{methods:r,model:o}=n;if(!e)return;if(Object.keys(e).forEach((t=>{"string"==typeof e[t]&&e[t].startsWith("#")&&(e[t]=e[t].replace(/^#/,""))})),!0===t){const{lex:t,_multi:a}=r.one.expandLexicon(e,n);return Object.assign(o.one._multiCache,a),void Object.assign(o.one.frozenLex,t)}if(r.two.expandLexicon){const{lex:t,_multi:a}=r.two.expandLexicon(e,n);Object.assign(o.one.lexicon,t),Object.assign(o.one._multiCache,a)}const{lex:a,_multi:i}=r.one.expandLexicon(e,n);Object.assign(o.one.lexicon,a),Object.assign(o.one._multiCache,i)}};var Ee={model:{one:{lexicon:{},_multiCache:{},frozenLex:{}}},methods:De,compute:Te,lib:He,hooks:["lexicon"]};const Ge=function(e,t){const n=[{}],r=[null],o=[0],a=[];let i=0;e.forEach((function(e){let o=0;const a=function(e,t){const{methods:n,model:r}=t,o=n.one.tokenize.splitTerms(e,r).map((e=>n.one.tokenize.splitWhitespace(e,r)));return o.map((e=>e.text.toLowerCase()))}(e,t);for(let e=0;e0&&!n[i].hasOwnProperty(l);)i=o[i];if(n.hasOwnProperty(i)){const e=n[i][l];o[u]=e,r[e]&&(r[u]=r[u]||[],r[u]=r[u].concat(r[e]))}else o[u]=0}}return{goNext:n,endAs:r,failTo:o}},Oe=function(e,t,n){let r=0;const o=[];for(let a=0;a0&&(void 0===t.goNext[r]||!t.goNext[r].hasOwnProperty(i));)r=t.failTo[r]||0;if(t.goNext[r].hasOwnProperty(i)&&(r=t.goNext[r][i],t.endAs[r])){const n=t.endAs[r];for(let t=0;t{for(let n=e.length-1;n>=0;n-=1)if(e[n]!==t)return e=e.slice(0,n+1);return e},ze={buildTrie:function(e){return function(e){return e.goNext=e.goNext.map((e=>{if(0!==Object.keys(e).length)return e})),e.goNext=Ve(e.goNext,void 0),e.failTo=Ve(e.failTo,0),e.endAs=Ve(e.endAs,null),e}(Ge(e,this.world()))}};ze.compile=ze.buildTrie;var Be={api:function(e){e.prototype.lookup=function(e,t={}){if(!e)return this.none();"string"==typeof e&&(e=[e]);var n;let r=function(e,t,n){let r=[];n.form=n.form||"normal";const o=e.docs;if(!t.goNext||!t.goNext[0])return console.error("Compromise invalid lookup trie"),e.none();const a=Object.keys(t.goNext[0]);for(let i=0;i0&&(r=r.concat(l))}return e.update(r)}(this,(n=e,"[object Object]"===Object.prototype.toString.call(n)?e:Ge(e,this.world)),t);return r=r.settle(),r}},lib:ze};const Se=function(e,t){return t?(e.forEach((e=>{const n=e[0];t[n]&&(e[0]=t[n][0],e[1]+=t[n][1],e[2]+=t[n][1])})),e):e},$e=function(e,t){let{ptrs:n}=e;const{byGroup:r}=e;return n=Se(n,t),Object.keys(r).forEach((e=>{r[e]=Se(r[e],t)})),{ptrs:n,byGroup:r}},Me=function(e,t,n){const r=n.methods.one;return"number"==typeof e&&(e=String(e)),"string"==typeof e&&(e=r.killUnicode(e,n),e=r.parseMatch(e,t,n)),e},Le=e=>"[object Object]"===Object.prototype.toString.call(e),Ke=e=>e&&Le(e)&&!0===e.isView,Je=e=>e&&Le(e)&&!0===e.isNet;var We={matchOne:function(e,t,n){const r=this.methods.one;if(Ke(e))return this.intersection(e).eq(0);if(Je(e))return this.sweep(e,{tagger:!1,matchOne:!0}).view;const o={regs:e=Me(e,n,this.world),group:t,justOne:!0},a=r.match(this.docs,o,this._cache),{ptrs:i,byGroup:s}=$e(a,this.fullPointer),l=this.toView(i);return l._groups=s,l},match:function(e,t,n){const r=this.methods.one;if(Ke(e))return this.intersection(e);if(Je(e))return this.sweep(e,{tagger:!1}).view.settle();const o={regs:e=Me(e,n,this.world),group:t},a=r.match(this.docs,o,this._cache),{ptrs:i,byGroup:s}=$e(a,this.fullPointer),l=this.toView(i);return l._groups=s,l},has:function(e,t,n){const r=this.methods.one;if(Ke(e)){return this.intersection(e).fullPointer.length>0}if(Je(e))return this.sweep(e,{tagger:!1}).view.found;const o={regs:e=Me(e,n,this.world),group:t,justOne:!0};return r.match(this.docs,o,this._cache).ptrs.length>0},if:function(e,t,n){const r=this.methods.one;if(Ke(e))return this.filter((t=>t.intersection(e).found));if(Je(e)){const t=this.sweep(e,{tagger:!1}).view.settle();return this.if(t)}const o={regs:e=Me(e,n,this.world),group:t,justOne:!0};let a=this.fullPointer;const i=this._cache||[];a=a.filter(((e,t)=>{const n=this.update([e]);return r.match(n.docs,o,i[t]).ptrs.length>0}));const s=this.update(a);return this._cache&&(s._cache=a.map((e=>i[e[0]]))),s},ifNo:function(e,t,n){const{methods:r}=this,o=r.one;if(Ke(e))return this.filter((t=>!t.intersection(e).found));if(Je(e)){const t=this.sweep(e,{tagger:!1}).view.settle();return this.ifNo(t)}e=Me(e,n,this.world);const a=this._cache||[],i=this.filter(((n,r)=>{const i={regs:e,group:t,justOne:!0};return 0===o.match(n.docs,i,a[r]).ptrs.length}));return this._cache&&(i._cache=i.ptrs.map((e=>a[e[0]]))),i}};var qe={before:function(e,t,n){const{indexN:r}=this.methods.one.pointer,o=[],a=r(this.fullPointer);Object.keys(a).forEach((e=>{const t=a[e].sort(((e,t)=>e[1]>t[1]?1:-1))[0];t[1]>0&&o.push([t[0],0,t[1]])}));const i=this.toView(o);return e?i.match(e,t,n):i},after:function(e,t,n){const{indexN:r}=this.methods.one.pointer,o=[],a=r(this.fullPointer),i=this.document;Object.keys(a).forEach((e=>{const t=a[e].sort(((e,t)=>e[1]>t[1]?-1:1))[0],[n,,r]=t;r{const a=n.before(e,t);if(a.found){const e=a.terms();r[o][1]-=e.length,r[o][3]=e.docs[0][0].id}})),this.update(r)},growRight:function(e,t,n){"string"==typeof e&&(e=this.world.methods.one.parseMatch(e,n,this.world)),e[0].start=!0;const r=this.fullPointer;return this.forEach(((n,o)=>{const a=n.after(e,t);if(a.found){const e=a.terms();r[o][2]+=e.length,r[o][4]=null}})),this.update(r)},grow:function(e,t,n){return this.growRight(e,t,n).growLeft(e,t,n)}};const Ue=function(e,t){return[e[0],e[1],t[2]]},Re=(e,t,n)=>{return"string"==typeof e||(r=e,"[object Array]"===Object.prototype.toString.call(r))?t.match(e,n):e||t.none();var r},Qe=function(e,t){const[n,r,o]=e;return t.document[n]&&t.document[n][r]&&(e[3]=e[3]||t.document[n][r].id,t.document[n][o-1]&&(e[4]=e[4]||t.document[n][o-1].id)),e},Ze={splitOn:function(e,t){const{splitAll:n}=this.methods.one.pointer,r=Re(e,this,t).fullPointer,o=n(this.fullPointer,r);let a=[];return o.forEach((e=>{a.push(e.passthrough),a.push(e.before),a.push(e.match),a.push(e.after)})),a=a.filter((e=>e)),a=a.map((e=>Qe(e,this))),this.update(a)},splitBefore:function(e,t){const{splitAll:n}=this.methods.one.pointer,r=Re(e,this,t).fullPointer,o=n(this.fullPointer,r);for(let e=0;e{a.push(e.passthrough),a.push(e.before),e.match&&e.after?a.push(Ue(e.match,e.after)):a.push(e.match)})),a=a.filter((e=>e)),a=a.map((e=>Qe(e,this))),this.update(a)},splitAfter:function(e,t){const{splitAll:n}=this.methods.one.pointer,r=Re(e,this,t).fullPointer,o=n(this.fullPointer,r);let a=[];return o.forEach((e=>{a.push(e.passthrough),e.before&&e.match?a.push(Ue(e.before,e.match)):(a.push(e.before),a.push(e.match)),a.push(e.after)})),a=a.filter((e=>e)),a=a.map((e=>Qe(e,this))),this.update(a)}};Ze.split=Ze.splitAfter;const _e=function(e,t){return!(!e||!t)&&(e[0]===t[0]&&e[2]===t[1])},Xe=function(e,t,n){const r=e.world,o=r.methods.one.parseMatch;n=n||"^.";const a=o(t=t||".$",{},r),i=o(n,{},r);a[a.length-1].end=!0,i[0].start=!0;const s=e.fullPointer,l=[s[0]];for(let t=1;t)?\/.*?[^\\/]\/[?\]+*$~]*)(?:\s|$)/,nt=/([!~[^]*(?:<[^<]*>)?\([^)]+[^\\)]\)[?\]+*$~]*)(?:\s|$)/,rt=/ /g,ot=e=>/^[![^]*(<[^<]*>)?\//.test(e)&&/\/[?\]+*$~]*$/.test(e),at=function(e){return e=(e=e.map((e=>e.trim()))).filter((e=>e))},it=/\{([0-9]+)?(, *[0-9]*)?\}/,st=/&&/,lt=new RegExp(/^<\s*(\S+)\s*>/),ut=e=>e.charAt(0).toUpperCase()+e.substring(1),ct=e=>e.charAt(e.length-1),ht=e=>e.charAt(0),dt=e=>e.substring(1),gt=e=>e.substring(0,e.length-1),mt=function(e){return e=dt(e),e=gt(e)},pt=function(e,t){const n={};for(let r=0;r<2;r+=1){if("$"===ct(e)&&(n.end=!0,e=gt(e)),"^"===ht(e)&&(n.start=!0,e=dt(e)),"?"===ct(e)&&(n.optional=!0,e=gt(e)),("["===ht(e)||"]"===ct(e))&&(n.group=null,"["===ht(e)&&(n.groupStart=!0),"]"===ct(e)&&(n.groupEnd=!0),e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===ht(e))){const t=lt.exec(e);t.length>=2&&(n.group=t[1],e=e.replace(t[0],""))}if("+"===ct(e)&&(n.greedy=!0,e=gt(e)),"*"!==e&&"*"===ct(e)&&"\\*"!==e&&(n.greedy=!0,e=gt(e)),"!"===ht(e)&&(n.negative=!0,e=dt(e)),"~"===ht(e)&&"~"===ct(e)&&e.length>2&&(e=mt(e),n.fuzzy=!0,n.min=t.fuzzy||.85,!1===/\(/.test(e)))return n.word=e,n;if("/"===ht(e)&&"/"===ct(e))return e=mt(e),t.caseSensitive&&(n.use="text"),n.regex=new RegExp(e),n;if(!0===it.test(e)&&(e=e.replace(it,((e,t,r)=>(void 0===r?(n.min=Number(t),n.max=Number(t)):(r=r.replace(/, */,""),void 0===t?(n.min=0,n.max=Number(r)):(n.min=Number(t),n.max=Number(r||999))),n.greedy=!0,n.min||(n.optional=!0),"")))),"("===ht(e)&&")"===ct(e)){st.test(e)?(n.choices=e.split(st),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=dt(n.choices[0]);const r=n.choices.length-1;n.choices[r]=gt(n.choices[r]),n.choices=n.choices.map((e=>e.trim())),n.choices=n.choices.filter((e=>e)),n.choices=n.choices.map((e=>e.split(/ /g).map((e=>pt(e,t))))),e=""}if("{"===ht(e)&&"}"===ct(e)){if(e=mt(e),n.root=e,/\//.test(e)){const e=n.root.split(/\//);n.root=e[0],n.pos=e[1],"adj"===n.pos&&(n.pos="Adjective"),n.pos=n.pos.charAt(0).toUpperCase()+n.pos.substr(1).toLowerCase(),void 0!==e[2]&&(n.sense=e[2])}return n}if("<"===ht(e)&&">"===ct(e))return e=mt(e),n.chunk=ut(e),n.greedy=!0,n;if("%"===ht(e)&&"%"===ct(e))return e=mt(e),n.switch=e,n}return"#"===ht(e)?(n.tag=dt(e),n.tag=ut(n.tag),n):"@"===ht(e)?(n.method=dt(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),t.caseSensitive?n.use="text":e=e.toLowerCase(),n.word=e),n)},ft=/[a-z0-9][-–—][a-z]/i,bt=function(e,t){const{all:n}=t.methods.two.transform.verb||{},r=e.root;return n?n(r,t.model):[]},vt=function(e,t){const{all:n}=t.methods.two.transform.noun||{};return n?n(e.root,t.model):[e.root]},yt=function(e,t){const{all:n}=t.methods.two.transform.adjective||{};return n?n(e.root,t.model):[e.root]},wt=function(e){return e=function(e){let t=0,n=null;for(let r=0;r(e.fuzzy&&e.choices&&e.choices.forEach((t=>{1===t.length&&t[0].word&&(t[0].fuzzy=!0,t[0].min=e.min)})),e)))}(e=e.map((e=>{if(void 0!==e.choices){if("or"!==e.operator)return e;if(!0===e.fuzzy)return e;!0===e.choices.every((e=>{if(1!==e.length)return!1;const t=e[0];return!0!==t.fuzzy&&!t.start&&!t.end&&void 0!==t.word&&!0!==t.negative&&!0!==t.optional&&!0!==t.method}))&&(e.fastOr=new Set,e.choices.forEach((t=>{e.fastOr.add(t[0].word)})),delete e.choices)}return e}))),e},kt=function(e,t){for(const n of t)if(e.has(n))return!0;return!1},Pt=function(e,t){for(let n=0;nn?r:n)+1;if(Math.abs(n-r)>(o||100))return o||100;const a=[];for(let e=0;e4)return n;l=t[i-1],u=s===l?0:1,c=a[o-1][i]+1,(h=a[o][i-1]+1)1&&i>1&&s===t[i-2]&&e[o-2]===l&&(h=a[o-2][i-2]+u)-1!==e.post.indexOf(t),Tt={hasQuote:e=>Ct.test(e.pre)||Nt.test(e.post),hasComma:e=>It(e,","),hasPeriod:e=>!0===It(e,".")&&!1===It(e,"..."),hasExclamation:e=>It(e,"!"),hasQuestionMark:e=>It(e,"?")||It(e,"¿"),hasEllipses:e=>It(e,"..")||It(e,"…"),hasSemicolon:e=>It(e,";"),hasColon:e=>It(e,":"),hasSlash:e=>/\//.test(e.text),hasHyphen:e=>jt.test(e.post)||jt.test(e.pre),hasDash:e=>xt.test(e.post)||xt.test(e.pre),hasContraction:e=>Boolean(e.implicit),isAcronym:e=>e.tags.has("Acronym"),isKnown:e=>e.tags.size>0,isTitleCase:e=>/^\p{Lu}[a-z'\u00C0-\u00FF]/u.test(e.text),isUpperCase:e=>/^\p{Lu}+$/u.test(e.text)};Tt.hasQuotation=Tt.hasQuote;let Dt=function(){};Dt=function(e,t,n,r){const o=function(e,t,n,r){if(!0===t.anything)return!0;if(!0===t.start&&0!==n)return!1;if(!0===t.end&&n!==r-1)return!1;if(void 0!==t.id&&t.id===e.id)return!0;if(void 0!==t.word){if(t.use)return t.word===e[t.use];if(null!==e.machine&&e.machine===t.word)return!0;if(void 0!==e.alias&&e.alias.hasOwnProperty(t.word))return!0;if(!0===t.fuzzy){if(t.word===e.root)return!0;if(At(t.word,e.normal)>=t.min)return!0}return!(!e.alias||!e.alias.some((e=>e===t.word)))||t.word===e.text||t.word===e.normal}if(void 0!==t.tag)return!0===e.tags.has(t.tag);if(void 0!==t.method)return"function"==typeof Tt[t.method]&&!0===Tt[t.method](e);if(void 0!==t.pre)return e.pre&&e.pre.includes(t.pre);if(void 0!==t.post)return e.post&&e.post.includes(t.post);if(void 0!==t.regex){let n=e.normal;return t.use&&(n=e[t.use]),t.regex.test(n)}if(void 0!==t.chunk)return e.chunk===t.chunk;if(void 0!==t.switch)return e.switch===t.switch;if(void 0!==t.machine)return e.normal===t.machine||e.machine===t.machine||e.root===t.machine;if(void 0!==t.sense)return e.sense===t.sense;if(void 0!==t.fastOr){if(t.pos&&!e.tags.has(t.pos))return null;const n=e.root||e.implicit||e.machine||e.normal;return t.fastOr.has(n)||t.fastOr.has(e.text)}return void 0!==t.choices&&("and"===t.operator?t.choices.every((t=>Dt(e,t,n,r))):t.choices.some((t=>Dt(e,t,n,r))))}(e,t,n,r);return!0===t.negative?!o:o};const Ht=function(e,t){if(!0===e.end&&!0===e.greedy&&t.start_i+t.tn.max)return e.t=e.t+n.max,!0;if(!0===e.hasGroup){Et(e,e.t).length=r-e.t}return e.t=r,!0},Ot=function(e,t=0){const n=e.regs[e.r];let r=!1;for(let a=0;a{let o=0;const a=e.t+r+t+o;if(void 0===e.terms[a])return!1;const i=Dt(e.terms[a],n,a+e.start_i,e.phrase_length);if(!0===i&&!0===n.greedy)for(let t=1;t{const r=n.every(((t,n)=>{const r=e.t+n;return void 0!==e.terms[r]&&Dt(e.terms[r],t,r,e.phrase_length)}));return!0===r&&n.length>t&&(t=n.length),r}))&&t}(e);if(r){if(!0===n.negative)return null;if(!0===e.hasGroup){Et(e,e.t).length+=r}if(!0===n.end){const t=e.phrase_length-1;if(e.t+e.start_i!==t)return null}return e.t+=r,!0}return!!n.optional||null},zt=function(e){const{regs:t}=e,n=t[e.r],r=Object.assign({},n);r.negative=!1;if(Dt(e.terms[e.t],r,e.start_i+e.t,e.phrase_length))return!1;if(n.optional){const n=t[e.r+1];if(n){if(Dt(e.terms[e.t],n,e.start_i+e.t,e.phrase_length))e.r+=1;else if(n.optional&&t[e.r+2]){Dt(e.terms[e.t],t[e.r+2],e.start_i+e.t,e.phrase_length)&&(e.r+=2)}}}return n.greedy?function(e,t,n){let r=0;for(let o=e.t;or||(e.t+=r,0))}(e,r,t[e.r+1]):(e.t+=1,!0)},Bt=function(e){const{regs:t,phrase_length:n}=e,r=t[e.r];return e.t=function(e,t){const n=Object.assign({},e.regs[e.r],{start:!1,end:!1}),r=e.t;for(;e.te.t?null:!0!==r.end||e.start_i+e.t===n||null},St=function(e){const{regs:t}=e,n=t[e.r],r=e.terms[e.t],o=e.t;if(n.optional&&t[e.r+1]&&n.negative)return!0;if(n.optional&&t[e.r+1]&&function(e){const{regs:t}=e,n=t[e.r],r=e.terms[e.t],o=Dt(r,t[e.r+1],e.start_i+e.t,e.phrase_length);if(n.negative||o){const n=e.terms[e.t+1];n&&Dt(n,t[e.r+1],e.start_i+e.t,e.phrase_length)||(e.r+=1)}}(e),r.implicit&&e.terms[e.t+1]&&function(e){const t=e.terms[e.t],n=e.regs[e.r];if(t.implicit&&e.terms[e.t+1]){if(!e.terms[e.t+1].implicit)return;n.word===t.normal&&(e.t+=1),"hasContraction"===n.method&&(e.t+=1)}}(e),e.t+=1,!0===n.end&&e.t!==e.terms.length&&!0!==n.greedy)return null;if(!0===n.greedy){if(!Bt(e))return null}return!0===e.hasGroup&&function(e,t){const n=e.regs[e.r],r=Et(e,t);e.t>1&&n.greedy?r.length+=e.t-t:r.length++}(e,o),!0},$t=function(e,t,n,r){if(0===e.length||0===t.length)return null;const o={t:0,terms:e,r:0,regs:t,groups:{},start_i:n,phrase_length:r,inGroup:null};for(;o.r!e.optional)))break;return null}if(!0===e.anything&&!0===e.greedy){if(!Gt(o))return null;continue}if(void 0!==e.choices&&"or"===e.operator){if(!Ft(o))return null;continue}if(void 0!==e.choices&&"and"===e.operator){if(!Vt(o))return null;continue}if(!0===e.anything){if(e.negative&&e.anything)return null;if(!St(o))return null;continue}if(!0===Ht(e,o)){if(!St(o))return null;continue}if(e.negative){if(!zt(o))return null;continue}if(!0!==Dt(o.terms[o.t],e,o.start_i+o.t,o.phrase_length)){if(!0!==e.optional)return null}else{if(!St(o))return null}}const a=[null,n,o.t+n];if(a[1]===a[2])return null;const i={};return Object.keys(o.groups).forEach((e=>{const t=o.groups[e],r=n+t.start;i[e]=[null,r,r+t.length]})),{pointer:a,groups:i}},Mt=function(e,t){return e.pointer[0]=t,Object.keys(e.groups).forEach((n=>{e.groups[n][0]=t})),e},Lt=function(e,t,n){let r=$t(e,t,0,e.length);return r?(r=Mt(r,n),r):null},Kt={one:{termMethods:Tt,parseMatch:function(e,t,n){if(null==e||""===e)return[];t=t||{},"number"==typeof e&&(e=String(e));let r=function(e){const t=e.split(tt);let n=[];t.forEach((e=>{ot(e)?n.push(e):n=n.concat(e.split(nt))})),n=at(n);let r=[];return n.forEach((e=>{(e=>/^[![^]*(<[^<]*>)?\(/.test(e)&&/\)[?\]+*$~]*$/.test(e))(e)||ot(e)?r.push(e):r=r.concat(e.split(rt))})),r=at(r),r}(e);return r=r.map((e=>pt(e,t))),r=function(e,t){const n=t.model.one.prefixes;for(let t=e.length-1;t>=0;t-=1){const r=e[t];if(r.word&&ft.test(r.word)){let o=r.word.split(/[-–—]/g);if(n.hasOwnProperty(o[0]))continue;o=o.filter((e=>e)).reverse(),e.splice(t,1),o.forEach((n=>{const o=Object.assign({},r);o.word=n,e.splice(t,0,o)}))}}return e}(r,n),r=function(e,t){return e.map((e=>{if(e.root)if(t.methods.two&&t.methods.two.transform){let n=[];e.pos?"Verb"===e.pos?n=n.concat(bt(e,t)):"Noun"===e.pos?n=n.concat(vt(e,t)):"Adjective"===e.pos&&(n=n.concat(yt(e,t))):(n=n.concat(bt(e,t)),n=n.concat(vt(e,t)),n=n.concat(yt(e,t))),n=n.filter((e=>e)),n.length>0&&(e.operator="or",e.fastOr=new Set(n))}else e.machine=e.root,delete e.id,delete e.root;return e}))}(r,n),r=wt(r),r},match:function(e,t,n){n=n||[];const{regs:r,group:o,justOne:a}=t;let i=[];if(!r||0===r.length)return{ptrs:[],byGroup:{}};const s=r.filter((e=>!0!==e.optional&&!0!==e.negative)).length;e:for(let t=0;te&&(e=Math.abs(n-1))}}else{const e=Lt(o,r,t);e&&i.push(e)}}return!0===r[r.length-1].end&&(i=i.filter((t=>{const n=t.pointer[0];return e[n].length===t.pointer[2]}))),t.notIf&&(i=function(e,t,n){return e=e.filter((e=>{const[r,o,a]=e.pointer,i=n[r].slice(o,a);for(let e=0;e{e.groups[t]&&n.push(e.groups[t])})):e.forEach((e=>{n.push(e.pointer),Object.keys(e.groups).forEach((t=>{r[t]=r[t]||[],r[t].push(e.groups[t])}))}))),{ptrs:n,byGroup:r}}(i,o),i.ptrs.forEach((t=>{const[n,r,o]=t;t[3]=e[n][r].id,t[4]=e[n][o-1].id})),i}}};var Jt={api:function(e){Object.assign(e.prototype,et)},methods:Kt,lib:{parseMatch:function(e,t){const n=this.world(),r=n.methods.one.killUnicode;return r&&(e=r(e,n)),n.methods.one.parseMatch(e,t,n)}}};const Wt=/^\../,qt=/^#./,Ut=function(e,t){const n={},r={};return Object.keys(t).forEach((o=>{let a=t[o];const i=function(e){let t="",n="";return e=e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),Wt.test(e)?t=``),t+=">",{start:t,end:n}}(o);"string"==typeof a&&(a=e.match(a)),a.docs.forEach((e=>{if(e.every((e=>e.implicit)))return;const t=e[0].id;n[t]=n[t]||[],n[t].push(i.start);const o=e[e.length-1].id;r[o]=r[o]||[],r[o].push(i.end)}))})),{starts:n,ends:r}};var Rt={html:function(e){const{starts:t,ends:n}=Ut(this,e);let r="";return this.docs.forEach((e=>{for(let o=0;o{let n=e.pre||"",o=e.post||"";"some"===t.punctuation&&(n=n.replace(Zt,""),Xt.test(o)&&(o=" "),o=o.replace(_t,""),o=o.replace(/\?!+/,"?"),o=o.replace(/!+/,"!"),o=o.replace(/\?+/,"?"),o=o.replace(/\.{2,}/,""),e.tags.has("Abbreviation")&&(o=o.replace(/\./,""))),"some"===t.whitespace&&(n=n.replace(/\s/,""),o=o.replace(/\s+/," ")),t.keepPunct||(n=n.replace(Zt,""),o="-"===o?" ":o.replace(Qt,""));let a=e[t.form||"text"]||e.normal||"";"implicit"===t.form&&(a=e.implicit||e.text),"root"===t.form&&e.implicit&&(a=e.root||e.implicit||e.normal),"machine"!==t.form&&"implicit"!==t.form&&"root"!==t.form||!e.implicit||o&&Yt.test(o)||(o+=" "),r+=n+a+o})),!1===n&&(r=r.trim()),!0===t.lowerCase&&(r=r.toLowerCase()),r},tn={text:{form:"text"},normal:{whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"normal"},machine:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"none",unicode:"some",form:"machine"},root:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"root"},implicit:{form:"implicit"}};tn.clean=tn.normal,tn.reduced=tn.root;const nn=[];let rn=0;for(;rn<64;)nn[rn]=0|4294967296*Math.sin(++rn%Math.PI);const on=function(e){let t,n,r,o=decodeURI(encodeURI(e))+"€",a=o.length;const i=[t=1732584193,n=4023233417,~t,~n],s=[];for(e=--a/4+2|15,s[--e]=8*a;~a;)s[a>>2]|=o.charCodeAt(a)<<8*a--;for(rn=o=0;rn>4]+nn[o]+~~s[rn|15&[o,5*o+1,3*o+5,7*o][a]])<<(a=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*a+o++%4])|r>>>-a),t,n])t=0|a[1],n=a[2];for(o=4;o;)i[--o]+=a[o]}for(e="";o<32;)e+=(i[o>>3]>>4*(1^o++)&15).toString(16);return e},an={text:!0,terms:!0},sn={case:"none",unicode:"some",form:"machine",punctuation:"some"},ln=function(e,t){return Object.assign({},e,t)},un={text:e=>en(e,{keepPunct:!0},!1),normal:e=>en(e,ln(tn.normal,{keepPunct:!0}),!1),implicit:e=>en(e,ln(tn.implicit,{keepPunct:!0}),!1),machine:e=>en(e,sn,!1),root:e=>en(e,ln(sn,{form:"root"}),!1),hash:e=>on(en(e,{keepPunct:!0},!1)),offset:e=>{const t=un.text(e).length;return{index:e[0].offset.index,start:e[0].offset.start,length:t}},terms:e=>e.map((e=>{const t=Object.assign({},e);return t.tags=Array.from(e.tags),t})),confidence:(e,t,n)=>t.eq(n).confidence(),syllables:(e,t,n)=>t.eq(n).syllables(),sentence:(e,t,n)=>t.eq(n).fullSentence().text(),dirty:e=>e.some((e=>!0===e.dirty))};un.sentences=un.sentence,un.clean=un.normal,un.reduced=un.root;const cn={json:function(e){const t=(n=this,"string"==typeof(r=(r=e)||{})&&(r={}),(r=Object.assign({},an,r)).offset&&n.compute("offset"),n.docs.map(((e,t)=>{const o={};return Object.keys(r).forEach((a=>{r[a]&&un[a]&&(o[a]=un[a](e,n,t))})),o})));var n,r;return"number"==typeof e?t[e]:t}};cn.data=cn.json;const hn=function(e){const t=e.pre||"",n=e.post||"";return t+e.text+n},dn=function(e,t){const n=function(e,t){const n={};return Object.keys(t).forEach((r=>{e.match(r).fullPointer.forEach((e=>{n[e[3]]={fn:t[r],end:e[2]}}))})),n}(e,t);let r="";return e.docs.forEach(((t,o)=>{for(let a=0;ae.reduce(((e,t)=>e+t.pre+t.text+t.post),"").trim()));return e.filter((e=>e))}if("freq"===e||"frequency"===e||"topk"===e)return function(e){const t={};e.forEach((e=>{t[e]=t[e]||0,t[e]+=1}));const n=Object.keys(t).map((e=>({normal:e,count:t[e]})));return n.sort(((e,t)=>e.count>t.count?-1:0))}(this.json({normal:!0}).map((e=>e.normal)));if("terms"===e){let e=[];return this.docs.forEach((t=>{let n=t.map((e=>e.text));n=n.filter((e=>e)),e=e.concat(n)})),e}return"tags"===e?this.docs.map((e=>e.reduce(((e,t)=>(e[t.implicit||t.normal]=Array.from(t.tags),e)),{}))):"debug"===e?this.debug():this.text()},wrap:function(e){return dn(this,e)}};var mn={text:function(e){let t={};var n;if(e&&"string"==typeof e&&tn.hasOwnProperty(e)?t=Object.assign({},tn[e]):e&&(n=e,"[object Object]"===Object.prototype.toString.call(n))&&(t=Object.assign({},e)),void 0!==t.keepSpace||this.isFull()||(t.keepSpace=!1),void 0===t.keepEndPunct&&this.pointer){const e=this.pointer[0];e&&e[1]?t.keepEndPunct=!1:t.keepEndPunct=!0}return void 0===t.keepPunct&&(t.keepPunct=!0),void 0===t.keepSpace&&(t.keepSpace=!0),function(e,t){let n="";if(!e||!e[0]||!e[0][0])return n;for(let r=0;r""+e+fn,red:e=>""+e+fn,blue:e=>""+e+fn,magenta:e=>""+e+fn,cyan:e=>""+e+fn,yellow:e=>""+e+fn,black:e=>""+e+fn,dim:e=>""+e+fn,i:e=>""+e+fn},vn={tags:function(e){const{docs:t,model:n}=e;0===t.length&&console.log(bn.blue("\n ──────")),t.forEach((t=>{console.log(bn.blue("\n ┌─────────")),t.forEach((t=>{const r=[...t.tags||[]];let o=t.text||"-";t.sense&&(o=`{${t.normal}/${t.sense}}`),t.implicit&&(o="["+t.implicit+"]"),o=bn.yellow(o);let a="'"+o+"'";if(t.reference){const n=e.update([t.reference]).text("normal");a+=` - ${bn.dim(bn.i("["+n+"]"))}`}a=a.padEnd(18);const i=bn.blue(" │ ")+bn.i(a)+" - "+function(e,t){return t.one.tagSet&&(e=e.map((e=>{if(!t.one.tagSet.hasOwnProperty(e))return e;const n=t.one.tagSet[e].color||"blue";return bn[n](e)}))),e.join(", ")}(r,n);console.log(i)}))})),console.log("\n")},clientSide:function(e){console.log("%c -=-=- ","background-color:#6699cc;"),e.forEach((e=>{console.groupCollapsed(e.text());const t=e.docs[0].map((e=>{let t=e.text||"-";e.implicit&&(t="["+e.implicit+"]");return{text:t,tags:"["+Array.from(e.tags).join(", ")+"]"}}));console.table(t,["text","tags"]),console.groupEnd()}))},chunks:function(e){const{docs:t}=e;console.log(""),t.forEach((e=>{const t=[];e.forEach((e=>{"Noun"===e.chunk?t.push(bn.blue(e.implicit||e.normal)):"Verb"===e.chunk?t.push(bn.green(e.implicit||e.normal)):"Adjective"===e.chunk?t.push(bn.yellow(e.implicit||e.normal)):"Pivot"===e.chunk?t.push(bn.red(e.implicit||e.normal)):t.push(e.implicit||e.normal)})),console.log(t.join(" "),"\n")})),console.log("\n")},highlight:function(e){if(!e.found)return;const t={};e.fullPointer.forEach((e=>{t[e[0]]=t[e[0]]||[],t[e[0]].push(e)})),Object.keys(t).forEach((n=>{let r=e.update([[Number(n)]]).text();e.update(t[n]).json({offset:!0}).forEach(((e,t)=>{r=function(e,t,n){const r=((e,t,n)=>{const r=9*n,o=t.start+r,a=o+t.length;return[e.substring(0,o),e.substring(o,a),e.substring(a,e.length)]})(e,t,n);return`${r[0]}${bn.blue(r[1])}${r[2]}`}(r,e.offset,t)})),console.log(r)})),console.log("\n")}};var yn={api:function(e){Object.assign(e.prototype,pn)},methods:{one:{hash:on,debug:vn}}};const wn=function(e,t){if(e[0]!==t[0])return!1;const[,n,r]=e,[,o,a]=t;return n<=o&&r>o||o<=n&&a>n},kn=function(e){const t={};return e.forEach((e=>{t[e[0]]=t[e[0]]||[],t[e[0]].push(e)})),t},Pn=function(e,t){const n=kn(t),r=[];return e.forEach((e=>{const[t]=e;let o=n[t]||[];if(o=o.filter((t=>function(e,t){return e[1]<=t[1]&&t[2]<=e[2]}(e,t))),0===o.length)return void r.push({passthrough:e});o=o.sort(((e,t)=>e[1]-t[1]));let a=e;o.forEach(((e,t)=>{const n=function(e,t){const[n,r]=e,o=t[1],a=t[2],i={};if(ra&&(i.after=[n,a,e[2]]),i}(a,e);o[t+1]?(r.push({before:n.before,match:n.match}),n.after&&(a=n.after)):r.push(n)}))})),r};var An={one:{termList:function(e){const t=[];for(let n=0;n{if(!r)return;let[a,i,s,l,u]=r,c=t[a]||[];if(void 0===i&&(i=0),void 0===s&&(s=c.length),!l||c[i]&&c[i].id===l)c=c.slice(i,s);else{const n=function(e,t,n){for(let r=0;r<20;r+=1){if(t[n-r]){const o=t[n-r].findIndex((t=>t.id===e));if(-1!==o)return[n-r,o]}if(t[n+r]){const o=t[n+r].findIndex((t=>t.id===e));if(-1!==o)return[n+r,o]}}return null}(l,t,a);if(null!==n){const r=s-i;c=t[n[0]].slice(n[1],n[1]+r);const a=c[0]?c[0].id:null;e[o]=[n[0],n[1],n[1]+r,a]}}0!==c.length&&i!==s&&(u&&c[c.length-1].id!==u&&(c=function(e,t){const[n,r,,,o]=e,a=t[n],i=a.findIndex((e=>e.id===o));return-1===i?(e[2]=t[n].length,e[4]=a.length?a[a.length-1].id:null):e[2]=i,t[n].slice(r,e[2]+1)}(r,t)),n.push(c))})),n=n.filter((e=>e.length>0)),n},pointer:{indexN:kn,splitAll:Pn}}};const Cn=function(e,t){const n=e.concat(t),r=kn(n);let o=[];return n.forEach((e=>{const[t]=e;if(1===r[t].length)return void o.push(e);const n=r[t].filter((t=>wn(e,t)));n.push(e);const a=function(e){let t=e[0][1],n=e[0][2];return e.forEach((e=>{e[1]n&&(n=e[2])})),[e[0][0],t,n]}(n);o.push(a)})),o=function(e){const t={};for(let n=0;n{e.passthrough&&n.push(e.passthrough),e.before&&n.push(e.before),e.after&&n.push(e.after)})),n},jn=(e,t)=>{return"string"==typeof e||(n=e,"[object Array]"===Object.prototype.toString.call(n))?t.match(e):e||t.none();var n},xn=function(e,t){return e.map((e=>{const[n,r]=e;return t[n]&&t[n][r]&&(e[3]=t[n][r].id),e}))},In={union:function(e){e=jn(e,this);let t=Cn(this.fullPointer,e.fullPointer);return t=xn(t,this.document),this.toView(t)}};In.and=In.union,In.intersection=function(e){e=jn(e,this);let t=function(e,t){const n=kn(t),r=[];return e.forEach((e=>{let t=n[e[0]]||[];t=t.filter((t=>wn(e,t))),0!==t.length&&t.forEach((t=>{const n=function(e,t){const n=e[1]t[2]?t[2]:e[2];return n{e=Cn(e,[t])})),e=xn(e,this.document),this.update(e)};var Tn={methods:An,api:function(e){Object.assign(e.prototype,In)}};const Dn=function(e){return!0===e.optional||!0===e.negative?null:e.tag?"#"+e.tag:e.word?e.word:e.switch?`%${e.switch}%`:null},Hn=function(e,t){const n=t.methods.one.parseMatch;return e.forEach((e=>{e.regs=n(e.match,{},t),"string"==typeof e.ifNo&&(e.ifNo=[e.ifNo]),e.notIf&&(e.notIf=n(e.notIf,{},t)),e.needs=function(e){const t=[];return e.forEach((e=>{t.push(Dn(e)),"and"===e.operator&&e.choices&&e.choices.forEach((e=>{e.forEach((e=>{t.push(Dn(e))}))}))})),t.filter((e=>e))}(e.regs);const{wants:r,count:o}=function(e){const t=[];let n=0;return e.forEach((e=>{"or"!==e.operator||e.optional||e.negative||(e.fastOr&&Array.from(e.fastOr).forEach((e=>{t.push(e)})),e.choices&&e.choices.forEach((e=>{e.forEach((e=>{const n=Dn(e);n&&t.push(n)}))})),n+=1)})),{wants:t,count:n}}(e.regs);e.wants=r,e.minWant=o,e.minWords=e.regs.filter((e=>!e.optional)).length})),e};var En={buildNet:function(e,t){e=Hn(e,t);const n={};e.forEach((e=>{e.needs.forEach((t=>{n[t]=Array.isArray(n[t])?n[t]:[],n[t].push(e)})),e.wants.forEach((t=>{n[t]=Array.isArray(n[t])?n[t]:[],n[t].push(e)}))})),Object.keys(n).forEach((e=>{const t={};n[e]=n[e].filter((e=>"boolean"!=typeof t[e.match]&&(t[e.match]=!0,!0)))}));const r=e.filter((e=>0===e.needs.length&&0===e.wants.length));return{hooks:n,always:r}},bulkMatch:function(e,t,n,r={}){const o=n.one.cacheDoc(e);let a=function(e,t){return e.map(((n,r)=>{let o=[];Object.keys(t).forEach((n=>{e[r].has(n)&&(o=o.concat(t[n]))}));const a={};return o=o.filter((e=>"boolean"!=typeof a[e.match]&&(a[e.match]=!0,!0))),o}))}(o,t.hooks);a=function(e,t){return e.map(((e,n)=>{const r=t[n];return(e=(e=e.filter((e=>e.needs.every((e=>r.has(e)))))).filter((e=>void 0===e.ifNo||!0!==e.ifNo.some((e=>r.has(e)))))).filter((e=>0===e.wants.length||e.wants.filter((e=>r.has(e))).length>=e.minWant))}))}(a,o),t.always.length>0&&(a=a.map((e=>e.concat(t.always)))),a=function(e,t){return e.map(((e,n)=>{const r=t[n].length;return e=e.filter((e=>r>=e.minWords)),e}))}(a,e);const i=function(e,t,n,r,o){const a=[];for(let n=0;n0&&(l.ptrs.forEach((e=>{e[0]=n;const t=Object.assign({},s,{pointer:e});void 0!==s.unTag&&(t.unTag=s.unTag),a.push(t)})),!0===o.matchOne))return[a[0]]}return a}(a,e,0,n,r);return i},bulkTagger:function(e,t,n){const{model:r,methods:o}=n,{getDoc:a,setTag:i,unTag:s}=o.one,l=o.two.looksPlural;if(0===e.length)return e;return("undefined"!=typeof process&&process.env?process.env:self.env||{}).DEBUG_TAGS&&console.log(`\n\n → ${e.length} post-tagger:`),e.map((e=>{if(!e.tag&&!e.chunk&&!e.unTag)return;const o=e.reason||e.match,u=a([e.pointer],t)[0];if(!0===e.safe){if(!1===function(e,t,n){const r=n.one.tagSet;if(!r.hasOwnProperty(t))return!0;const o=r[t].not||[];for(let t=0;te.frozen=!0))}void 0!==e.unTag&&s(u,e.unTag,n,e.safe,o),e.chunk&&u.forEach((t=>t.chunk=e.chunk))}))}},Gn={lib:{buildNet:function(e){const t=this.methods().one.buildNet(e,this.world());return t.isNet=!0,t}},api:function(e){e.prototype.sweep=function(e,t={}){const{world:n,docs:r}=this,{methods:o}=n;let a=o.one.bulkMatch(r,e,this.methods,t);!1!==t.tagger&&o.one.bulkTagger(a,r,this.world),a=a.map((e=>{const t=e.pointer,n=r[t[0]][t[1]],o=t[2]-t[1];return n.index&&(e.pointer=[n.index[0],n.index[1],t[1]+o]),e}));const i=a.map((e=>e.pointer));return a=a.map((e=>(e.view=this.update([e.pointer]),delete e.regs,delete e.needs,delete e.pointer,delete e._expanded,e))),{view:this.update(i),found:a}}},methods:{one:En}};const On=/ /,Fn=function(e,t){"Noun"===t&&(e.chunk=t),"Verb"===t&&(e.chunk=t)},Vn=function(e,t,n,r){if(!0===e.tags.has(t))return null;if("."===t)return null;!0===e.frozen&&(r=!0);const o=n[t];if(o){if(o.not&&o.not.length>0)for(let t=0;t0)for(let t=0;t{const r=e.map((e=>e.text||"["+e.implicit+"]")).join(" ");var o;"string"!=typeof t&&t.length>2&&(t=t.slice(0,2).join(", #")+" +"),t="string"!=typeof t?t.join(", #"):t,console.log(` ${(o=r,""+o+"").padEnd(24)} → #${t.padEnd(22)} ${(e=>""+e+"")(n)}`)})(e,t,o),!0!=(s=t,"[object Array]"===Object.prototype.toString.call(s)))if("string"==typeof t)if(t=t.trim(),On.test(t))!function(e,t,n,r){const o=t.split(On);e.forEach(((e,t)=>{let a=o[t];a&&(a=a.replace(/^#/,""),Vn(e,a,n,r))}))}(e,t,a,r);else{t=t.replace(/^#/,"");for(let n=0;nzn(e,t,n,r)))},Bn=function(e){return e.children=e.children||[],e._cache=e._cache||{},e.props=e.props||{},e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],e},Sn=/^ *(#|\/\/)/,$n=function(e){let t=e.trim().split(/->/),n=[];t.forEach((e=>{n=n.concat(function(e){if(!(e=e.trim()))return null;if(/^\[/.test(e)&&/\]$/.test(e)){let t=(e=(e=e.replace(/^\[/,"")).replace(/\]$/,"")).split(/,/);return t=t.map((e=>e.trim())).filter((e=>e)),t=t.map((e=>Bn({id:e}))),t}return[Bn({id:e})]}(e))})),n=n.filter((e=>e));let r=n[0];for(let e=1;e{let n=[],r=[e];for(;r.length>0;){let e=r.pop();n.push(e),e.children&&e.children.forEach((n=>{t&&t(e,n),r.push(n)}))}return n},Ln=e=>"[object Array]"===Object.prototype.toString.call(e),Kn=e=>(e=e||"").trim(),Jn=function(e=[]){return"string"==typeof e?function(e){let t=e.split(/\r?\n/),n=[];t.forEach((e=>{if(!e.trim()||Sn.test(e))return;let t=(e=>{const t=/^( {2}|\t)/;let n=0;for(;t.test(e);)e=e.replace(t,""),n+=1;return n})(e);n.push({indent:t,node:$n(e)})}));let r=function(e){let t={children:[]};return e.forEach(((n,r)=>{0===n.indent?t.children=t.children.concat(n.node):e[r-1]&&function(e,t){let n=e[t].indent;for(;t>=0;t-=1)if(e[t].indent{t[e.id]=e}));let n=Bn({});return e.forEach((e=>{if((e=Bn(e)).parent)if(t.hasOwnProperty(e.parent)){let n=t[e.parent];delete e.parent,n.children.push(e)}else console.warn(`[Grad] - missing node '${e.parent}'`);else n.children.push(e)})),n}(e):(Mn(t=e).forEach(Bn),t);var t},Wn=function(e,t){let n="-> ";t&&(n=(e=>""+e+"")("→ "));let r="";return Mn(e).forEach(((e,o)=>{let a=e.id||"";if(t&&(a=(e=>""+e+"")(a)),0===o&&!e.id)return;let i=e._cache.parents.length;r+=" ".repeat(i)+n+a+"\n"})),r},qn=function(e){let t=Mn(e);t.forEach((e=>{delete(e=Object.assign({},e)).children}));let n=t[0];return n&&!n.id&&0===Object.keys(n.props).length&&t.shift(),t},Un={text:Wn,txt:Wn,array:qn,flat:qn},Rn=function(e,t){return"nested"===t||"json"===t?e:"debug"===t?(console.log(Wn(e,!0)),null):Un.hasOwnProperty(t)?Un[t](e):e},Qn=e=>{Mn(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],t._cache.parents=e._cache.parents.concat([e.id]))}))},Zn=/\//;let _n=class g{constructor(e={}){Object.defineProperty(this,"json",{enumerable:!1,value:e,writable:!0})}get children(){return this.json.children}get id(){return this.json.id}get found(){return this.json.id||this.json.children.length>0}props(e={}){let t=this.json.props||{};return"string"==typeof e&&(t[e]=!0),this.json.props=Object.assign(t,e),this}get(e){if(e=Kn(e),!Zn.test(e)){let t=this.json.children.find((t=>t.id===e));return new g(t)}let t=((e,t)=>{let n=(e=>"string"!=typeof e?e:(e=e.replace(/^\//,"")).split(/\//))(t=t||"");for(let t=0;te.id===n[t]));if(!r)return null;e=r}return e})(this.json,e)||Bn({});return new g(t)}add(e,t={}){if(Ln(e))return e.forEach((e=>this.add(Kn(e),t))),this;e=Kn(e);let n=Bn({id:e,props:t});return this.json.children.push(n),new g(n)}remove(e){return e=Kn(e),this.json.children=this.json.children.filter((t=>t.id!==e)),this}nodes(){return Mn(this.json).map((e=>(delete(e=Object.assign({},e)).children,e)))}cache(){return(e=>{let t=Mn(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],t._cache.parents=e._cache.parents.concat([e.id]))})),n={};t.forEach((e=>{e.id&&(n[e.id]=e)})),t.forEach((e=>{e._cache.parents.forEach((t=>{n.hasOwnProperty(t)&&n[t]._cache.children.push(e.id)}))})),e._cache.children=Object.keys(n)})(this.json),this}list(){return Mn(this.json)}fillDown(){var e;return e=this.json,Mn(e,((e,t)=>{t.props=((e,t)=>(Object.keys(t).forEach((n=>{if(t[n]instanceof Set){let r=e[n]||new Set;e[n]=new Set([...r,...t[n]])}else if((e=>e&&"object"==typeof e&&!Array.isArray(e))(t[n])){let r=e[n]||{};e[n]=Object.assign({},t[n],r)}else Ln(t[n])?e[n]=t[n].concat(e[n]||[]):void 0===e[n]&&(e[n]=t[n])})),e))(t.props,e.props)})),this}depth(){Qn(this.json);let e=Mn(this.json),t=e.length>1?1:0;return e.forEach((e=>{if(0===e._cache.parents.length)return;let n=e._cache.parents.length+1;n>t&&(t=n)})),t}out(e){return Qn(this.json),Rn(this.json,e)}debug(){return Qn(this.json),Rn(this.json,"debug"),this}};const Xn=function(e){let t=Jn(e);return new _n(t)};Xn.prototype.plugin=function(e){e(this)};const Yn={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Hyphenated:"cyan",Adverb:"cyan"},er=function(e){if(Yn.hasOwnProperty(e.id))return Yn[e.id];if(Yn.hasOwnProperty(e.is))return Yn[e.is];const t=e._cache.parents.find((e=>Yn[e]));return Yn[t]},tr=function(e){return e?"string"==typeof e?[e]:e:[]},nr=function(e,t){return e=function(e,t){return Object.keys(e).forEach((n=>{e[n].isA&&(e[n].is=e[n].isA),e[n].notA&&(e[n].not=e[n].notA),e[n].is&&"string"==typeof e[n].is&&(t.hasOwnProperty(e[n].is)||e.hasOwnProperty(e[n].is)||(e[e[n].is]={})),e[n].not&&"string"==typeof e[n].not&&!e.hasOwnProperty(e[n].not)&&(t.hasOwnProperty(e[n].not)||e.hasOwnProperty(e[n].not)||(e[e[n].not]={}))})),e}(e,t),Object.keys(e).forEach((t=>{e[t].children=tr(e[t].children),e[t].not=tr(e[t].not)})),Object.keys(e).forEach((t=>{(e[t].not||[]).forEach((n=>{e[n]&&e[n].not&&e[n].not.push(t)}))})),e};var rr={one:{setTag:zn,unTag:function(e,t,n){t=t.trim().replace(/^#/,"");for(let r=0;r0)for(let e=0;e0&&(e=function(e){return Object.keys(e).forEach((t=>{e[t]=Object.assign({},e[t]),e[t].novel=!0})),e}(e)),e=nr(e,t);const n=function(e){const t=Object.keys(e).map((t=>{const n=e[t],r={not:new Set(n.not),also:n.also,is:n.is,novel:n.novel};return{id:t,parent:n.is,props:r,children:[]}}));return Xn(t).cache().fillDown().out("array")}(Object.assign({},t,e)),r=function(e){const t={};return e.forEach((e=>{const{not:n,also:r,is:o,novel:a}=e.props;let i=e._cache.parents;r&&(i=i.concat(r)),t[e.id]={is:o,not:n,novel:a,also:r,parents:i,children:e._cache.children,color:er(e)}})),Object.keys(t).forEach((e=>{const n=new Set(t[e].not);t[e].not.forEach((e=>{t[e]&&t[e].children.forEach((e=>n.add(e)))})),t[e].not=Array.from(n)})),t}(n);return r},canBe:function(e,t,n){if(!n.hasOwnProperty(t))return!0;const r=n[t].not||[];for(let t=0;to.one.setTag(r,e,i,n,t))):o.one.setTag(r,e,i,n,t),this.uncache(),this},tagSafe:function(e,t=""){return this.tag(e,t,!0)},unTag:function(e,t){if(!this.found||!e)return this;const n=this.termList();if(0===n.length)return this;const{methods:r,verbose:o,model:a}=this;!0===o&&console.log(" - ",e,t||"");const i=a.one.tagSet;return or(e)?e.forEach((e=>r.one.unTag(n,e,i))):r.one.unTag(n,e,i),this.uncache(),this},canBe:function(e){e=e.replace(/^#/,"");const t=this.model.one.tagSet,n=this.methods.one.canBe,r=[];this.document.forEach(((o,a)=>{o.forEach(((o,i)=>{n(o,e,t)||r.push([a,i,i+1])}))}));const o=this.update(r);return this.difference(o)}};var ir={addTags:function(e){const{model:t,methods:n}=this.world(),r=t.one.tagSet,o=(0,n.one.addTags)(e,r);return t.one.tagSet=o,this}};const sr=new Set(["Auxiliary","Possessive"]);var lr={model:{one:{tagSet:{}}},compute:{tagRank:function(e){const{document:t,world:n}=e,r=n.model.one.tagSet;t.forEach((e=>{e.forEach((e=>{const t=Array.from(e.tags);e.tagRank=function(e,t){return e=e.sort(((e,n)=>{if(sr.has(e)||!t.hasOwnProperty(n))return 1;if(sr.has(n)||!t.hasOwnProperty(e))return-1;let r=t[e].children||[];const o=r.length;return r=t[n].children||[],o-r.length})),e}(t,r)}))}))}},methods:rr,api:function(e){Object.assign(e.prototype,ar)},lib:ir};const ur=/([.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s)/g,cr=/^[.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s$/,hr=/((?:\r?\n|\r)+)/,dr=/[a-z0-9\u00C0-\u00FF\u00a9\u00ae\u2000-\u3300\ud000-\udfff]/i,gr=/\S/,mr=function(e){return Boolean(e.match(/\n$/))},pr={'"':'"',""":""","“":"”","‟":"”","„":"”","⹂":"”","‚":"’","«":"»","‹":"›","‵":"′","‶":"″","‷":"‴","〝":"〞","〟":"〞"},fr=RegExp("["+Object.keys(pr).join("")+"]","g"),br=RegExp("["+Object.values(pr).join("")+"]","g"),vr=function(e){if(!e)return!1;const t=e.match(br);return null!==t&&1===t.length},yr=/\(/g,wr=/\)/g,kr=/\S/,Pr=/^\s+/,Ar=function(e,t){const n=e.split(/[-–—]/);if(n.length<=1)return!1;const{prefixes:r,suffixes:o}=t.one;if(1===n[0].length&&/[a-z]/i.test(n[0]))return!1;if(r.hasOwnProperty(n[0]))return!1;if(n[1]=n[1].trim().replace(/[.?!]$/,""),o.hasOwnProperty(n[1]))return!1;if(!0===/^([a-z\u00C0-\u00FF`"'/]+)[-–—]([a-z0-9\u00C0-\u00FF].*)/i.test(e))return!0;return!0===/^[('"]?([0-9]{1,4})[-–—]([a-z\u00C0-\u00FF`"'/-]+[)'"]?$)/i.test(e)},Cr=function(e){const t=[],n=e.split(/[-–—]/);let r="-";const o=e.match(/[-–—]/);o&&o[0]&&(r=o);for(let e=0;e(e[t]=!0,e)),{});const Dr=/\p{Letter}/u,Hr=/[\p{Number}\p{Currency_Symbol}]/u,Er=/^[a-z]\.([a-z]\.)+/i,Gr=/[sn]['’]$/,Or=/([A-Z]\.)+[A-Z]?,?$/,Fr=/^[A-Z]\.,?$/,Vr=/[A-Z]{2,}('s|,)?$/,zr=/([a-z]\.)+[a-z]\.?$/,Br=function(e){return function(e){return!0===Or.test(e)||!0===zr.test(e)||!0===Fr.test(e)||!0===Vr.test(e)}(e)&&(e=e.replace(/\./g,"")),e},Sr=function(e,t){const n=t.methods.one.killUnicode;let r=e.text||"";r=function(e){const t=e=(e=(e=e||"").toLowerCase()).trim();return e=(e=(e=e.replace(/[,;.!?]+$/,"")).replace(/\u2026/g,"...")).replace(/\u2013/g,"-"),!1===/^[:;]/.test(e)&&(e=(e=(e=e.replace(/\.{3,}$/g,"")).replace(/[",.!:;?)]+$/g,"")).replace(/^['"(]+/g,"")),""===(e=(e=e.replace(/[\u200B-\u200D\uFEFF]/g,"")).trim())&&(e=t),e.replace(/([0-9]),([0-9])/g,"$1$2")}(r),r=n(r,t),r=Br(r),e.normal=r},$r=/[ .][A-Z]\.? *$/i,Mr=/(?:\u2026|\.{2,}) *$/,Lr=/\p{L}/u,Kr=/\. *$/,Jr=/^[A-Z]\. $/;var Wr={one:{killUnicode:function(e,t){const n=t.model.one.unicode||{},r=(e=e||"").split("");return r.forEach(((e,t)=>{n[e]&&(r[t]=n[e])})),r.join("")},tokenize:{splitSentences:function(e,t){if(e=e||"",!(e=String(e))||"string"!=typeof e||!1===kr.test(e))return[];const n=function(e){const t=[],n=e.split(hr);for(let e=0;e0&&(o.push(a),e[t]=""):e[t+1]=a+(e[t+1]||"")}return o}(r,t),r=function(e){const t=[];for(let n=0;n0?(n[n.length-1]+=a,n.push(t)):n.push(a+t),a=""):a+=t}return a&&(0===n.length&&(n[0]=""),n[n.length-1]+=a),n=function(e){for(let t=1;te)),n},splitWhitespace:(e,t)=>{const{str:n,pre:r,post:o}=function(e,t){const{prePunctuation:n,postPunctuation:r,emoticons:o}=t.one;let a=e,i="",s="";const l=Array.from(e);if(o.hasOwnProperty(e.trim()))return{str:e.trim(),pre:i,post:" "};let u=l.length;for(let e=0;e(s=e||"",""))),e=a,i=""),{str:e,pre:i,post:s}}(e,t);return{text:n,pre:r,post:o,tags:new Set}},fromString:function(e,t){const{methods:n,model:r}=t,{splitSentences:o,splitTerms:a,splitWhitespace:i}=n.one.tokenize;return e=o(e=e||"",t).map((e=>{let n=a(e,r);return n=n.map((e=>i(e,r))),n.forEach((e=>{Sr(e,t)})),n})),e}}}};const qr={},Ur={};[[["approx","apt","bc","cyn","eg","esp","est","etc","ex","exp","prob","pron","gal","min","pseud","fig","jd","lat","lng","vol","fm","def","misc","plz","ea","ps","sec","pt","pref","pl","pp","qt","fr","sq","nee","ss","tel","temp","vet","ver","fem","masc","eng","adj","vb","rb","inf","situ","vivo","vitro","wr"]],[["dl","ml","gal","qt","pt","tbl","tsp","tbsp","km","dm","cm","mm","mi","td","hr","hrs","kg","hg","dg","cg","mg","µg","lb","oz","sq ft","hz","mps","mph","kmph","kb","mb","tb","lx","lm","fl oz","yb"],"Unit"],[["ad","al","arc","ba","bl","ca","cca","col","corp","ft","fy","ie","lit","ma","md","pd","tce"],"Noun"],[["adj","adm","adv","asst","atty","bldg","brig","capt","cmdr","comdr","cpl","det","dr","esq","gen","gov","hon","jr","llb","lt","maj","messrs","mlle","mme","mr","mrs","ms","mstr","phd","prof","pvt","rep","reps","res","rev","sen","sens","sfc","sgt","sir","sr","supt","surg"],"Honorific"],[["jan","feb","mar","apr","jun","jul","aug","sep","sept","oct","nov","dec"],"Month"],[["dept","univ","assn","bros","inc","ltd","co"],"Organization"],[["rd","st","dist","mt","ave","blvd","cl","cres","hwy","ariz","cal","calif","colo","conn","fla","fl","ga","ida","ia","kan","kans","minn","neb","nebr","okla","penna","penn","pa","dak","tenn","tex","ut","vt","va","wis","wisc","wy","wyo","usafa","alta","ont","que","sask"],"Place"]].forEach((e=>{e[0].forEach((t=>{qr[t]=!0,Ur[t]="Abbreviation",void 0!==e[1]&&(Ur[t]=[Ur[t],e[1]])}))}));var Rr=["anti","bi","co","contra","de","extra","infra","inter","intra","macro","micro","mis","mono","multi","peri","pre","pro","proto","pseudo","re","sub","supra","trans","tri","un","out","ex"].reduce(((e,t)=>(e[t]=!0,e)),{});const Qr={"!":"¡","?":"¿Ɂ",'"':'“”"❝❞',"'":"‘‛❛❜’","-":"—–",a:"ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАаѦѧӐӑӒӓƛæ",b:"ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ",c:"¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼϲϹϽϾСсєҀҁҪҫ",d:"ÐĎďĐđƉƊȡƋƌ",e:"ÈÉÊËèéêëĒēĔĕĖėĘęĚěƐȄȅȆȇȨȩɆɇΈΕΞΣέεξϵЀЁЕеѐёҼҽҾҿӖӗễ",f:"ƑƒϜϝӺӻҒғſ",g:"ĜĝĞğĠġĢģƓǤǥǦǧǴǵ",h:"ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ",I:"ÌÍÎÏ",i:"ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇіїi̇",j:"ĴĵǰȷɈɉϳЈј",k:"ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ",l:"ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ",m:"ΜϺϻМмӍӎ",n:"ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ",o:"ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϴОФоѲѳӦӧӨөӪӫ",p:"ƤΡρϷϸϼРрҎҏÞ",q:"Ɋɋ",r:"ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ",s:"ŚśŜŝŞşŠšƧƨȘșȿЅѕ",t:"ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт",u:"ÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰυϋύ",v:"νѴѵѶѷ",w:"ŴŵƜωώϖϢϣШЩшщѡѿ",x:"×ΧχϗϰХхҲҳӼӽӾӿ",y:"ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ",z:"ŹźŻżŽžƵƶȤȥɀΖ"},Zr={};Object.keys(Qr).forEach((function(e){Qr[e].split("").forEach((function(t){Zr[t]=e}))}));const _r=/\//,Xr=/[a-z]\.[a-z]/i,Yr=/[0-9]/,eo=function(e,t){const n=e.normal||e.text||e.machine,r=t.model.one.aliases;if(r.hasOwnProperty(n)&&(e.alias=e.alias||[],e.alias.push(r[n])),_r.test(n)&&!Xr.test(n)&&!Yr.test(n)){const t=n.split(_r);t.length<=3&&t.forEach((t=>{""!==(t=t.trim())&&(e.alias=e.alias||[],e.alias.push(t))}))}return e},to=/^\p{Letter}+-\p{Letter}+$/u,no=function(e){let t=e.implicit||e.normal||e.text;t=t.replace(/['’]s$/,""),t=t.replace(/s['’]$/,"s"),t=t.replace(/([aeiou][ktrp])in'$/,"$1ing"),to.test(t)&&(t=t.replace(/-/g,"")),t=t.replace(/^[#@]/,""),t!==e.normal&&(e.machine=t)},ro=function(e,t){const n=e.docs;for(let r=0;rro(e,eo),machine:e=>ro(e,no),normal:e=>ro(e,Sr),freq:function(e){const t=e.docs,n={};for(let e=0;e{let i=(e=e.toLowerCase().trim()).length;t.max&&i>t.max&&(i=t.max);for(let s=t.min;s{delete r[e]})),r}(e,t,this.world());return Object.keys(o).forEach((e=>{n.one.typeahead.hasOwnProperty(e)?delete n.one.typeahead[e]:n.one.typeahead[e]=o[e]})),this}};var co={model:{one:{typeahead:{}}},api:function(e){e.prototype.autoFill=so},lib:uo,compute:io,hooks:["typeahead"]};h.extend(J),h.extend(yn),h.extend(Jt),h.extend(Tn),h.extend(lr),h.plugin(ye),h.extend(ao),h.extend(Ce),h.plugin(p),h.extend(Be),h.extend(co),h.extend(Ee),h.extend(Gn);var ho={addendum:"addenda",corpus:"corpora",criterion:"criteria",curriculum:"curricula",genus:"genera",memorandum:"memoranda",opus:"opera",ovum:"ova",phenomenon:"phenomena",referendum:"referenda",alga:"algae",alumna:"alumnae",antenna:"antennae",formula:"formulae",larva:"larvae",nebula:"nebulae",vertebra:"vertebrae",analysis:"analyses",axis:"axes",diagnosis:"diagnoses",parenthesis:"parentheses",prognosis:"prognoses",synopsis:"synopses",thesis:"theses",neurosis:"neuroses",appendix:"appendices",index:"indices",matrix:"matrices",ox:"oxen",sex:"sexes",alumnus:"alumni",bacillus:"bacilli",cactus:"cacti",fungus:"fungi",hippopotamus:"hippopotami",libretto:"libretti",modulus:"moduli",nucleus:"nuclei",octopus:"octopi",radius:"radii",stimulus:"stimuli",syllabus:"syllabi",cookie:"cookies",calorie:"calories",auntie:"aunties",movie:"movies",pie:"pies",rookie:"rookies",tie:"ties",zombie:"zombies",leaf:"leaves",loaf:"loaves",thief:"thieves",foot:"feet",goose:"geese",tooth:"teeth",beau:"beaux",chateau:"chateaux",tableau:"tableaux",bus:"buses",gas:"gases",circus:"circuses",crisis:"crises",virus:"viruses",database:"databases",excuse:"excuses",abuse:"abuses",avocado:"avocados",barracks:"barracks",child:"children",clothes:"clothes",echo:"echoes",embargo:"embargoes",epoch:"epochs",deer:"deer",halo:"halos",man:"men",woman:"women",mosquito:"mosquitoes",mouse:"mice",person:"people",quiz:"quizzes",rodeo:"rodeos",shoe:"shoes",sombrero:"sombreros",stomach:"stomachs",tornado:"tornados",tuxedo:"tuxedos",volcano:"volcanoes"},go={Comparative:"true¦bett1f0;arth0ew0in0;er",Superlative:"true¦earlier",PresentTense:"true¦bests,sounds",Condition:"true¦lest,unless",PastTense:"true¦began,came,d4had,kneel3l2m0sa4we1;ea0sg2;nt;eap0i0;ed;id",Participle:"true¦0:09;a06b01cZdXeat0fSgQhPoJprov0rHs7t6u4w1;ak0ithdra02o2r1;i02uY;k0v0;nd1pr04;ergoJoJ;ak0hHo3;e9h7lain,o6p5t4un3w1;o1um;rn;g,k;ol0reS;iQok0;ught,wn;ak0o1runk;ne,wn;en,wn;ewriNi1uJ;dd0s0;ut3ver1;do4se0t1;ak0h2;do2g1;roG;ne;ast0i7;iv0o1;ne,tt0;all0loBor1;bi3g2s1;ak0e0;iv0o9;dd0;ove,r1;a5eamt,iv0;hos0lu1;ng;e4i3lo2ui1;lt;wn;tt0;at0en,gun;r2w1;ak0ok0;is0;en",Gerund:"true¦accord0be0doin,go0result0stain0;ing",Expression:"true¦a0Yb0Uc0Sd0Oe0Mfarew0Lg0FhZjeez,lWmVnToOpLsJtIuFvEw7y0;a5e3i1u0;ck,p;k04p0;ee,pee;a0p,s;!h;!a,h,y;a5h2o1t0;af,f;rd up,w;atsoever,e1o0;a,ops;e,w;hoo,t;ery w06oi0L;gh,h0;! 0h,m;huh,oh;here nPsk,ut tut;h0ic;eesh,hh,it,oo;ff,h1l0ow,sst;ease,s,z;ew,ooey;h1i,mg,o0uch,w,y;h,o,ps;! 0h;hTmy go0wT;d,sh;a7evertheless,o0;!pe;eh,mm;ah,eh,m1ol0;!s;ao,fao;aCeBi9o2u0;h,mph,rra0zzC;h,y;l1o0;r6y9;la,y0;! 0;c1moCsmok0;es;ow;!p hip hoor0;ay;ck,e,llo,y;ha1i,lleluj0;ah;!ha;ah,ee4o1r0;eat scott,r;l1od0sh; grief,bye;ly;! whiz;ell;e0h,t cetera,ureka,ww,xcuse me;k,p;'oh,a0rat,uh;m0ng;mit,n0;!it;mon,o0;ngratulations,wabunga;a2oo1r0tw,ye;avo,r;!ya;h,m; 1h0ka,las,men,rgh,ye;!a,em,h,oy;la",Negative:"true¦n0;ever,o0;n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Reflexive:"true¦h4it5my5o1the0your2;ir1m1;ne3ur0;sel0;f,ves;er0im0;self",Plural:"true¦dick0gre0ones,records;ens","Unit|Noun":"true¦cEfDgChBinchAk9lb,m6newt5oz,p4qt,t1y0;ardEd;able1b0ea1sp;!l,sp;spo1;a,t,x;on9;!b,g,i1l,m,p0;h,s;!les;!b,elvin,g,m;!es;g,z;al,b;eet,oot,t;m,up0;!s",Value:"true¦a few",Imperative:"true¦bewa0come he0;re","Plural|Verb":"true¦leaves",Demonym:"true¦0:15;1:12;a0Vb0Oc0Dd0Ce08f07g04h02iYjVkTlPmLnIomHpEqatari,rCs7t5u4v3welAz2;am0Gimbabwe0;enezuel0ietnam0I;gAkrai1;aiwTex0hai,rinida0Ju2;ni0Prkmen;a5cotti4e3ingapoOlovak,oma0Spaniard,udRw2y0W;ede,iss;negal0Cr09;sh;mo0uT;o5us0Jw2;and0;a2eru0Fhilippi0Nortugu07uerto r0S;kist3lesti1na2raguay0;ma1;ani;ami00i2orweP;caragu0geri2;an,en;a3ex0Lo2;ngo0Drocc0;cedo1la2;gasy,y07;a4eb9i2;b2thua1;e0Cy0;o,t01;azakh,eny0o2uwaiI;re0;a2orda1;ma0Ap2;anO;celandic,nd4r2sraeli,ta01vo05;a2iB;ni0qi;i0oneU;aiAin2ondur0unO;di;amEe2hanai0reek,uatemal0;or2rm0;gi0;ilipino,ren8;cuadoVgyp4mira3ngli2sto1thiopi0urope0;shm0;ti;ti0;aPominUut3;a9h6o4roat3ub0ze2;ch;!i0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el6o4r3ul2;gaE;azi9it;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;genti2me1;ne;ba1ge2;ri0;ni0;gh0r2;ic0;an",Organization:"true¦0:4Q;a3Tb3Bc2Od2He2Df27g1Zh1Ti1Pj1Nk1Ll1Gm12n0Po0Mp0Cqu0Br02sTtHuCv9w3xiaomi,y1;amaha,m1Bou1w1B;gov,tu3C;a4e2iki1orld trade organizati33;leaRped0O;lls fargo,st1;fie2Hinghou2R;l1rner br3U;gree3Jl street journ2Im1E;an halOeriz2Xisa,o1;dafo2Yl1;kswagMvo;b4kip,n2ps,s1;a tod3Aps;es3Mi1;lev3Fted natio3C;er,s; mobi32aco beRd bOe9gi frida3Lh3im horto3Amz,o1witt3D;shi49y1;ota,s r 05;e 1in lizzy;b3carpen3Jdaily ma3Dguess w2holli0s1w2;mashing pumpki35uprem0;ho;ea1lack eyed pe3Xyr0Q;ch bo3Dtl0;l2n3Qs1xas instrumen1U;co,la m1F;efoni0Kus;a8cientology,e5ieme2Ymirnoff,np,o3pice gir6quare0Ata1ubaru;rbuc1to34;ks;ny,undgard1;en;a2x pisto1;ls;g1Wrs;few2Minsbur31lesfor03msu2E;adiohead,b8e4o1yana3C;man empi1Xyal 1;b1dutch she4;ank;a3d 1max,vl20;bu1c2Ahot chili peppe2Ylobst2N;ll;ders dige1Ll madrid;c,s;ant3Aizn2Q;a8bs,e5fiz2Ihilip4i3r1;emier 1udenti1D;leagTo2K;nk floyd,zza hut; morrBs;psi2tro1uge0E;br33chi0Tn33;!co;lant2Un1yp16; 2ason27da2P;ld navy,pec,range juli2xf1;am;us;aAb9e6fl,h5i4o1sa,vid3wa;k2tre dame,vart1;is;ia;ke,ntendo,ss0QvZ;l,s;c,st1Otflix,w1; 1sweek;kids on the block,york0D;a,c;nd22s2t1;ional aca2Po,we0U;a,c02d0S;aDcdonalCe9i6lb,o3tv,y1;spa1;ce;b1Tnsanto,ody blu0t1;ley cr1or0T;ue;c2t1;as,subisO;helin,rosoft;dica2rcedes benz,talli1;ca;id,re;ds;cs milk,tt19z24;a3e1g,ittle caesa1P; ore09novo,x1;is,mark,us; 1bour party;pres0Dz boy;atv,fc,kk,lm,m1od1O;art;iffy lu0Roy divisi0Jpmorgan1sa;! cha09;bm,hop,k3n1tv;g,te1;l,rpol;ea;a5ewlett pack1Vi3o1sbc,yundai;me dep1n1P;ot;tac1zbollah;hi;lliburt08sbro;eneral 6hq,ithub,l5mb,o2reen d0Ou1;cci,ns n ros0;ldman sachs,o1;dye1g0H;ar;axo smith kli04encoW;electr0Nm1;oto0Z;a5bi,c barcelo4da,edex,i2leetwood m03o1rito l0G;rd,xcY;at,fa,nancial1restoZ; tim0;na;cebook,nnie mae;b0Asa,u3xxon1; m1m1;ob0J;!rosceptics;aiml0De5isney,o4u1;nkin donu2po0Zran dur1;an;ts;j,w jon0;a,f lepp12ll,peche mode,r spieg02stiny's chi1;ld;aJbc,hFiDloudflaCnn,o3r1;aigsli5eedence clearwater reviv1ossra09;al;c7inba6l4m1o0Est09;ca2p1;aq;st;dplSg1;ate;se;a c1o chanQ;ola;re;a,sco1tigroup;! systems;ev2i1;ck fil a,na daily;r1y;on;d2pital o1rls jr;ne;bury,ill1;ac;aEbc,eBf9l5mw,ni,o1p,rexiteeU;ei3mbardiIston 1;glo1pizza;be;ng;o2ue c1;roV;ckbuster video,omingda1;le; g1g1;oodriL;cht2e ge0rkshire hathaw1;ay;el;cardi,idu,nana republ3s1xt5y5;f,kin robbi1;ns;ic;bYcTdidSerosmith,iRlKmEnheuser busDol,ppleAr6s4u3v2y1;er;is,on;di,todesk;hland o1sociated E;il;b3g2m1;co;os;ys; compu1be0;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 5catel2ta1;ir;! lu1;ce1;nt;jazeera,qae1;da;g,rbnb;as;/dc,a3er,tivision1;! blizz1;ard;demy of scienc0;es;ba",Possessive:"true¦its,my,our0thy;!s","Noun|Verb":"true¦0:9W;1:AA;2:96;3:A3;4:9R;5:A2;6:9K;7:8N;8:7L;9:A8;A:93;B:8D;C:8X;a9Ob8Qc7Id6Re6Gf5Sg5Hh55i4Xj4Uk4Rl4Em40n3Vo3Sp2Squ2Rr21s0Jt02u00vVwGyFzD;ip,oD;ne,om;awn,e6Fie68;aOeMhJiHoErD;ap,e9Oink2;nd0rDuC;kDry,sh5Hth;!shop;ck,nDpe,re,sh;!d,g;e86iD;p,sD;k,p0t2;aDed,lco8W;r,th0;it,lk,rEsDt4ve,x;h,te;!ehou1ra9;aGen5FiFoD;iDmAte,w;ce,d;be,ew,sA;cuum,l4B;pDr7;da5gra6Elo6A;aReQhrPiOoMrGuEwiDy5Z;n,st;nDrn;e,n7O;aGeFiEoDu6;t,ub2;bu5ck4Jgg0m,p;at,k,nd;ck,de,in,nsDp,v7J;f0i8R;ll,ne,p,r4Yss,t94uD;ch,r;ck,de,e,le,me,p,re;e5Wow,u6;ar,e,ll,mp0st,xt;g,lDng2rg7Ps5x;k,ly;a0Sc0Ne0Kh0Fi0Dk0Cl0Am08n06o05pXquaBtKuFwD;ea88iD;ng,pe,t4;bGit,m,ppErD;fa3ge,pri1v2U;lDo6S;e6Py;!je8;aMeLiKoHrEuDy2;dy,ff,mb2;a85eEiDo5Pugg2;ke,ng;am,ss,t4;ckEop,p,rD;e,m;ing,pi2;ck,nk,t4;er,m,p;ck,ff,ge,in,ke,lEmp,nd,p2rDte,y;!e,t;k,l;aJeIiHlGoFrDur,y;ay,e56inDu3;g,k2;ns8Bt;a5Qit;ll,n,r87te;ed,ll;m,n,rk;b,uC;aDee1Tow;ke,p;a5Je4FiDo53;le,rk;eep,iDou4;ce,p,t;ateboa7Ii;de,gnDl2Vnk,p,ze;!al;aGeFiEoDuff2;ck,p,re,w;ft,p,v0;d,i3Ylt0;ck,de,pe,re,ve;aEed,nDrv1It;se,t2N;l,r4t;aGhedu2oBrD;aEeDibb2o3Z;en,w;pe,t4;le,n,r2M;cDfegua72il,mp2;k,rifi3;aZeHhy6LiGoEuD;b,in,le,n,s5X;a6ck,ll,oDpe,u5;f,t;de,ng,ot,p,s1W;aTcSdo,el,fQgPje8lOmMnLo17pJque6sFturn,vDwa6V;eDi27;al,r1;er74oFpe8tEuD;lt,me;!a55;l71rt;air,eaDly,o53;l,t;dezvo2Zt;aDedy;ke,rk;ea1i4G;a6Iist0r5N;act6Yer1Vo71uD;nd,se;a38o6F;ch,s6G;c1Dge,iEke,lly,nDp1Wt1W;ge,k,t;n,se;es6Biv0;a04e00hYiXlToNrEsy4uD;mp,n4rcha1sh;aKeIiHoDu4O;be,ceFdu3fi2grDje8mi1p,te6;amDe6W;!me;ed,ss;ce,de,nt;sDy;er6Cs;cti3i1;iHlFoEp,re,sDuCw0;e,i5Yt;l,p;iDl;ce,sh;nt,s5V;aEce,e32uD;g,mp,n7;ce,nDy;!t;ck,le,n17pe,tNvot;a1oD;ne,tograph;ak,eFnErDt;fu55mA;!c32;!l,r;ckJiInHrFsEtDu1y;ch,e9;s,te;k,tD;!y;!ic;nt,r,se;!a7;bje8ff0il,oErDutli3Qver4B;bAd0ie9;ze;a4ReFoDur1;d,tD;e,i3;ed,gle8tD;!work;aMeKiIoEuD;rd0;ck,d3Rld,nEp,uDve;nt,th;it5EkD;ey;lk,n4Brr5CsDx;s,ta2B;asuBn4UrDss;ge,it;il,nFp,rk3WsEtD;ch,t0;h,k,t0;da5n0oeuvB;aLeJiHoEuD;mp,st;aEbby,ck,g,oDve;k,t;d,n;cDe,ft,mAnIst;en1k;aDc0Pe4vK;ch,d,k,p,se;bFcEnd,p,t4uD;gh,n4;e,k;el,o2U;eEiDno4E;ck,d,ll,ss;el,y;aEo1OuD;i3mp;m,zz;mpJnEr46ssD;ue;c1Rdex,fluGha2k,se2HteDvoi3;nt,rD;e6fa3viD;ew;en3;a8le2A;aJeHiGoEuD;g,nt;l3Ano2Dok,pDr1u1;!e;ghli1Fke,nt,re,t;aDd7lp;d,t;ck,mGndFrEsh,tDu9;ch,e;bo3Xm,ne4Eve6;!le;!m0;aMear,ift,lKossJrFuD;arDe4Alp,n;antee,d;aFiEoDumb2;uCwth;ll,nd,p;de,sp;ip;aBoDue;ss,w;g,in,me,ng,s,te,ze;aZeWiRlNoJrFuD;ck,el,nDss,zz;c38d;aEoDy;st,wn;cDgme,me,nchi1;tuB;cFg,il,ld,rD;ce,e29mDwa31;!at;us;aFe0Vip,oDy;at,ck,od,wD;!er;g,ke,me,re,sh,vo1E;eGgFlEnDre,sh,t,x;an3i0Q;e,m,t0;ht,uB;ld;aEeDn3;d,l;r,tuB;ce,il,ll,rm,vo2W;cho,d7ffe8nMsKxFyeD;!baD;ll;cGerci1hFpDtra8;eriDo0W;en3me9;au6ibA;el,han7u1;caDtima5;pe;count0d,vy;a01eSiMoJrEuDye;b,el,mp,pli2X;aGeFiEoD;ne,p;ft,ll,nk,p,ve;am,ss;ft,g,in;cEd7ubt,wnloD;ad;k,u0E;ge6p,sFt4vD;e,iDor3;de;char7gui1h,liEpD;at4lay,u5;ke;al,bKcJfeIlGmaCposAsEtaD;il;e07iD;gn,re;ay,ega5iD;ght;at,ct;li04rea1;a5ut;b,ma7n3rDte;e,t;a0Eent0Dh06irc2l03oKrFuD;be,e,rDt;b,e,l,ve;aGeFoEuDy;sh;p,ss,wd;dAep;ck,ft,sh;at,de,in,lTmMnFordina5py,re,st,uDv0;gh,nDp2rt;s01t;ceHdu8fli8glomeIsFtDveN;a8rD;a6ol;e9tru8;ct;ntDrn;ra5;bHfoGmFpD;leDouCromi1;me9;aCe9it,u5;rt;at,iD;ne;lap1oD;r,ur;aEiDoud,ub;ck,p;im,w;aEeDip;at,ck,er;iGllen7nErD;ge,m,t;ge,nD;el;n,r;er,re;ke,ll,mp,noe,pGrXsFtEuDve;se,ti0I;alog,ch;h,t;!tuB;re;a03eZiXlToPrHuEyD;pa11;bb2ck2dgEff0mp,rDst,zz;den,n;et;anJeHiFoadEuD;i1sh;ca6;be,d7;ge;aDed;ch,k;ch,d;aFg,mb,nEoDrd0tt2x,ycott;k,st,t;d,e;rd,st;aFeCiDoYur;nk,tz;nd;me;as,d,ke,nd,opsy,tD;!ch,e;aFef,lt,nDt;d,efA;it;r,t;ck,il,lan3nIrFsEtt2;le;e,h;!gDk;aDe;in;!d,g,k;bu1c05dZge,iYlVnTppQrLsIttGucEwaD;rd;tiD;on;aDempt;ck;k,sD;i6ocia5;st;chFmD;!oD;ur;!iD;ve;eEroa4;ch;al;chDg0sw0;or;aEt0;er;rm;d,m,r;dreHvD;an3oD;ca5;te;ce;ss;cDe,he,t;eFoD;rd,u9;nt;nt,ss;se",Actor:"true¦0:7B;1:7G;2:6A;3:7F;4:7O;5:7K;a6Nb62c4Ud4Be41f3Sg3Bh30i2Uj2Qkin2Pl2Km26n1Zo1Sp0Vqu0Tr0JsQtJuHvEw8yo6;gi,ut6;h,ub0;aAe9i8o7r6;estl0it0;m2rk0;fe,nn0t2Bza2H;atherm2ld0;ge earn0it0nder0rri1;eter7i6oyF;ll5Qp,s3Z;an,ina2U;n6s0;c6Uder03;aoisea23e9herapi5iktok0o8r6ut1yco6S;a6endseLo43;d0mp,nscri0Bvel0;ddl0u1G;a0Qchn7en6na4st0;ag0;i3Oo0D;aiXcUeRhPiMki0mu26oJpGquaFtBu7wee6;p0theart;lt2per7r6;f0ge6Iviv1;h6inten0Ist5Ivis1;ero,um2;a8ep7r6;ang0eam0;bro2Nc2Ofa2Nmo2Nsi20;ff0tesm2;tt0;ec7ir2Do6;kesp59u0M;ia5Jt3;l7me6An,rcere6ul;r,ss;di0oi5;n7s6;sy,t0;g0n0;am2ephe1Iow6;girl,m2r2Q;cretInior cit3Fr6;gea4v6;a4it1;hol4Xi7reen6ulpt1;wr2C;e01on;l1nt;aEe9o8u6;l0nn6;er up,ingE;g40le mod3Zof0;a4Zc8fug2Ppo32searQv6;ere4Uolution6;ary;e6luYru22;ptio3T;bbi,dic5Vpp0;arter6e2Z;back;aYeWhSiRlOoKr8sycho7u6;nk,p31;logi5;aGeDiBo6;d9fess1g7ph47s6;pe2Ktitu51;en6ramm0;it1y;igy,uc0;est4Nme mini0Unce6s3E;!ss;a7si6;de4;ch0;ctiti39nk0P;dca0Oet,li6pula50rnst42;c2Itic6;al scie6i2;nti5;a6umb0;nn0y6;er,ma4Lwright;lgrim,one0;a8iloso7otogra7ra6ysi1V;se;ph0;ntom,rmaci5;r6ssi1T;form0s4O;i3El,nel3Yr8st1tr6wn;i6on;arWot;ent4Wi42tn0;ccupa4ffBp8r7ut6;ca5l0B;ac4Iganiz0ig2Fph2;er3t6;i1Jomet6;ri5;ic0spring;aBe9ie4Xo7u6;n,rser3J;b6mad,vi4V;le2Vo4D;i6mesis,phew;ce,ghb1;nny,rr3t1X;aEeDiAo7u6yst1Y;m8si16;der3gul,m7n6th0;arDk;!my;ni7s6;f02s0Jt0;on,st0;chan1Qnt1rcha4;gi9k0n8rtyr,t6y1;e,riar6;ch;ag0iac;ci2stra3I;a7e2Aieutena4o6;rd,s0v0;bor0d7ndlo6ss,urea3Fwy0ym2;rd;!y;!s28;e8o7u6;ggl0;gg0urna2U;st0;c3Hdol,llu3Ummigra4n6; l9c1Qfa4habi42nov3s7ve6;nt1stig3;pe0Nt6;a1Fig3ru0M;aw;airFeBistoAo8u6ygie1K;man6sba2H;!ita8;bo,st6usekN;age,e3P;ri2;ir,r6;m7o6;!ine;it;dress0sty2C;aLeIhostGirl26ladi3oCrand7u6;e5ru;c9daug0Jfa8m7pa6s2Y;!re4;a,o6;th0;hi1B;al7d6lf0;!de3A;ie,k6te26;eep0;!wr6;it0;isha,n6;i6tl04;us;mbl0rden0;aDella,iAo7r6;eela2Nie1P;e,re6ster pare4;be1Hm2r6st0;unn0;an2ZgZlmm17nanci0r6tt0;e6st la2H; marsh2OfigXm2;rm0th0;conoEdDlectriCm8n7x6;amin0cellency,i2A;emy,trepreneur,vironmenta1J;c8p6;er1loye6;e,r;ee;ci2;it1;mi5;aKeBi8ork,ri7u6we02;de,tche2H;ft0v0;ct3eti7plom2Hre6va;ct1;ci2ti2;aDcor3fencCi0InAput9s7tectLvel6;op0;ce1Ge6ign0;rt0;ee,y;iz6;en;em2;c1Ml0;d8nc0redev7ug6;ht0;il;!dy;a06e04fo,hXitizenWlToBr9u6;r3stomer6;! representat6;ive;e3it6;ic;lJmGnAord9rpor1Nu7w6;boy,ork0;n6ri0;ciTte1Q;in3;fidantAgressSs9t6;e0Kr6;ibut1o6;ll0;tab13ul1O;!e;edi2m6pos0rade;a0EeQissi6;on0;leag8on7um6;ni5;el;ue;e6own;an0r6;ic,k;!s;a9e7i6um;ld;erle6f;ad0;ir7nce6plFract0;ll1;m2wI;lebri6o;ty;dBptAr6shi0;e7pe6;nt0;r,t6;ak0;ain;et;aMeLiJlogg0oErBu6;dd0Fild0rgl9siness6;m2p7w6;om2;ers05;ar;i7o6;!k0th0;cklay0de,gadi0;hemi2oge8y6;!frie6;nd;ym2;an;cyc6sR;li5;atbox0ings;by,nk0r6;b0on7te6;nd0;!e07;c04dWge4nQpLrHsFtAu7yatull6;ah;nt7t6;h1oG;!ie;h8t6;e6orney;nda4;ie5le6;te;sis00tron6;aut,om0;chbis8isto7tis6;an,t;crU;hop;ost9p6;ari6rentiS;ti6;on;le;a9cest1im3nou8y6;bo6;dy;nc0;ly5rc6;hi5;mi8v6;entur0is1;er;ni7r6;al;str3;at1;or;counBquaintanArob9t6;ivi5or,re6;ss;st;at;ce;ta4;nt","Adj|Noun":"true¦0:16;a1Db17c0Ud0Re0Mf0Dg0Ah08i06ju05l02mWnUoSpNrIsBt7u4v1watershed;a1ision0Z;gabo4nilla,ria1;b0Vnt;ndergr1pstairs;adua14ou1;nd;a3e1oken,ri0;en,r1;min0rori13;boo,n;age,e5ilv0Flack,o3quat,ta2u1well;bordina0Xper5;b0Lndard;ciali0Yl1vereign;e,ve16;cret,n1ri0;ior;a4e2ou1ubbiL;nd,tiY;ar,bBl0Wnt0p1side11;resent0Vublican;ci0Qsh;a4eriodic0last0Zotenti0r1;emi2incip0o1;!fession0;er,um;rall4st,tie0U;ff1pposi0Hv0;ens0Oi0C;agg01ov1uts;el;a5e3iniatJo1;bi01der07r1;al,t0;di1tr0N;an,um;le,riG;attOi2u1;sh;ber0ght,qC;stice,veniT;de0mpressioYn1;cumbe0Edividu0no0Dsta0Eterim;alf,o1umdrum;bby,melF;en2old,ra1;ph0Bve;er0ious;a7e5i4l3u1;git03t1;ure;uid;ne;llow,m1;aFiL;ir,t,vo1;riOuriO;l3p00x1;c1ecutUpeV;ess;d1iK;er;ar2e1;mographUrivO;k,l2;hiGlassSo2rude,unn1;ing;m5n1operK;creCstitueOte2vertab1;le;mpor1nt;ary;ic,m2p1;anion,lex;er2u1;ni8;ci0;al;e5lank,o4r1;i2u1;te;ef;ttom,urgeois;st;cadem9d6l2ntarct9r1;ab,ct8;e3tern1;at1;ive;rt;oles1ult;ce1;nt;ic","Adj|Past":"true¦0:4Q;1:4C;2:4H;3:4E;a44b3Tc36d2Je29f20g1Wh1Si1Jj1Gkno1Fl1Am15n12o0Xp0Mqu0Kr08sLtEuAv9w4yellow0;a7ea6o4rinkl0;r4u3Y;n,ri0;k31th3;rp0sh0tZ;ari0e1O;n5p4s0;d1li1Rset;cov3derstood,i4;fi0t0;a8e3Rhr7i6ouTr4urn0wi4C;a4imm0ou2G;ck0in0pp0;ed,r0;eat2Qi37;m0nn0r4;get0ni2T;aOcKeIhGimFm0Hoak0pDt7u4;bsid3Ogge44s4;pe4ta2Y;ct0nd0;a8e7i2Eok0r5u4;ff0mp0nn0;ength2Hip4;ed,p0;am0reotyp0;in0t0;eci4ik0oH;al3Efi0;pRul1;a4ock0ut;d0r0;a4c1Jle2t31;l0s3Ut0;a6or5r4;at4e25;ch0;r0tt3;t4ut0;is2Mur1;aEe5o4;tt0;cAdJf2Bg9je2l8m0Knew0p7qu6s4;eTpe2t4;or0ri2;e3Dir0;e1lac0;at0e2Q;i0Rul1;eiv0o4ycl0;mme2Lrd0v3;in0lli0ti2A;a4ot0;li28;aCer30iBlAo9r5u4;mp0zzl0;e6i2Oo4;ce2Fd4lo1Anou30pos0te2v0;uc0;fe1CocCp0Iss0;i2Kli1L;ann0e2CuS;ck0erc0ss0;ck0i2Hr4st0;allLk0;bse7c6pp13rgan2Dver4;lo4whelm0;ok0;cupi0;rv0;aJe5o4;t0uri1A;ed0gle2;a6e5ix0o4ut0ys1N;di1Nt15u26;as0Clt0;n4rk0;ag0ufact0A;e6i5o4;ad0ck0st,v0;cens0m04st0;ft,v4;el0;tt0wn;a5o15u4;dg0s1B;gg0;llumSmpAn4sol1;br0cre1Ldebt0f8jZspir0t5v4;it0olv0;e4ox0Y;gr1n4re23;d0si15;e2l1o1Wuri1;li0o01r4;ov0;a6e1o4um03;ok0r4;ri0Z;mm3rm0;i6r5u4;a1Bid0;a0Ui0Rown;ft0;aAe9i8l6oc0Ir4;a4i0oz0Y;ctHg19m0;avo0Ju4;st3;ni08tt0x0;ar0;d0il0sc4;in1;dCl1mBn9quipp0s8x4;agger1c6p4te0T;a0Se4os0;ct0rie1D;it0;cap0tabliZ;cha0XgFha1As4;ur0;a0Zbarra0N;i0Buc1;aMeDi5r4;a01i0;gni08miniSre2s4;a9c6grun0Ft4;o4re0Hu17;rt0;iplWou4;nt0r4;ag0;bl0;cBdRf9l8p7ra6t5v4;elop0ot0;ail0ermQ;ng0;re07;ay0ight0;e4in0o0M;rr0;ay0enTor1;m5t0z4;ed,zl0;ag0p4;en0;aPeLhIlHo9r6u4;lt4r0stom03;iv1;a5owd0u4;sh0;ck0mp0;d0loAm7n4ok0v3;centr1f5s4troC;id3olid1;us0;b5pl4;ic1;in0;r0ur0;assi9os0utt3;ar5i4;ll0;g0m0;lebr1n6r4;ti4;fi0;tralJ;g0lcul1;aDewild3iCl9o7r5urn4;ed,t;ok4uis0;en;il0r0t4und;tl0;e5i4;nd0;ss0;as0;ffl0k0laMs0tt3;bPcNdKfIg0lFmaz0nDppBrm0ss9u5wa4;rd0;g5thor4;iz0;me4;nt0;o6u4;m0r0;li0re4;ci1;im1ticip1;at0;a5leg0t3;er0;rm0;fe2;ct0;ju5o7va4;nc0;st0;ce4knowledg0;pt0;and5so4;rb0;on0;ed",Singular:"true¦0:5J;1:5H;2:4W;3:4S;4:52;5:57;6:5L;7:56;8:5B;a52b4Lc3Nd35e2Xf2Og2Jh28in24j23k22l1Um1Ln1Ho1Bp0Rqu0Qr0FsZtMuHvCw9x r58yo yo;a9ha3Po3Q;f3i4Rt0Gy9;! arou39;arCeAideo ga2Qo9;cabu4Jl5C;gOr9t;di4Zt1Y;iety,ni4P;nBp30rAs 9;do43s5E;bani1in0;coordinat3Ader9;estima1to24we41; rex,aKeJhHiFoErBuAv9;! show;m2On2rntLto1D;agedy,ib9o4E;e,u9;n0ta46;ni1p2rq3L;c,er,m9;etF;ing9ree26;!y;am,mp3F;ct2le6x return;aNcMeKhor4QiJkHoGpin off,tDuBy9;ll9ner7st4T;ab2X;b9i1n28per bowl,rro1X;st3Ltot0;atAipe2Go1Lrate7udent9;! lo0I;i39u1;ft ser4Lmeo1I;elet5i9;ll,r3V;b38gn2Tte;ab2Jc9min3B;t,urity gua2N;e6ho2Y;bbatic0la3Jndwi0Qpi5;av5eDhetor2iAo9;de6om,w;tAv9;erb2C;e,u0;bDcBf9publ2r10spi1;er9orm3;e6r0;i9ord label;p2Ht0;a1u46;estion mark,ot2F;aPeMhoLiIlGoErAu9yram1F;ddi3HpErpo1Js3J;eBo9;bl3Zs9;pe3Jta1;dic1Rmi1Fp1Qroga8ss relea1F;p9rt0;py;a9ebisci1;q2Dte;cn2eAg9;!gy;!r;ne call,tocoK;anut,dAr9t0yo1;cen3Jsp3K;al,est0;nop4rAt9;e,hog5;adi11i2V;atme0bj3FcBpia1rde0thers,utspok5ve9wn3;n,r9;ti0Pview;cuAe9;an;pi3;arBitAot9umb3;a2Fhi2R;e,ra1;cot2ra8;aFeCiAo9ur0;nopo4p18rni2Nsq1Rti36uld;c,li11n0As9tt5;chief,si34;dAnu,t9;al,i3;al,ic;gna1mm0nd15rsupi0te9yf4;ri0;aDegCiBu9;ddi1n9;ch;me,p09; Be0M;bor14y9; 9er;up;eyno1itt5;el4ourn0;cBdices,itia8ni25sAtel0Lvert9;eb1J;e28titu1;en8i2T;aIeEighDoAu9;man right,s22;me9rmoFsp1Ftb0K;! r9;un; scho0YriY;a9i1N;d9v5; start,pho9;ne;ndful,sh brown,v5ze;aBelat0Ilaci3r9ul4yp1S;an9enadi3id;a1Cd slam,ny;df4r9;l2ni1I;aGeti1HiFlu1oCrAun9;er0;ee market,i9onti3;ga1;l4ur9;so9;me;ePref4;br2mi4;conoFffi7gg,lecto0Rmbas1EnCpidem2s1Zth2venBxAyel9;id;ampZempl0Nte6;i19t;er7terp9;ri9;se;my;eLiEoBr9ump tru0U;agonf4i9;er,ve thru;cAg7i4or,ssi3wn9;side;to0EumenE;aEgniDnn3sAvide9;nd;conte6incen8p9tri11;osi9;ti0C;ta0H;le0X;athBcAf9ni0terre6;ault 05err0;al,im0;!b9;ed;aWeThMiLlJoDr9;edit caBuc9;ib9;le;rd;efficDke,lCmmuniqLnsApi3rr0t0Xus9yo1;in;erv9uI;ato02;ic,lQ;ie6;er7i9oth;e6n2;ty,vil wM;aDeqCick5ocoBr9;istmas car9ysanthemum;ol;la1;ue;ndeli3racteri9;st2;iAllEr9;e0tifica1;liZ;hi3nFpErCt9ucus;erpi9hedr0;ll9;ar;!bohyd9ri3;ra1;it0;aAe,nib0t9;on;l,ry;aMeLiop2leJoHrDu9;nny,r9tterf4;g9i0;la9;ry;eakAi9;ck;fa9throB;st;dy,ro9wl;ugh;mi9;sh;an,l4;nkiArri3;er;ng;cSdMlInFppeti1rDsBtt2utop9;sy;ic;ce6pe9;ct;r9sen0;ay;ecAoma4tiA;ly;do1;i5l9;er7y;gy;en; hominDjAvan9;tage;ec8;ti9;ve;em;cCeAqui9;tt0;ta1;te;iAru0;al;de6;nt","Person|Noun":"true¦a0Eb07c03dWeUfQgOhLjHkiGlFmCnBolive,p7r4s3trini06v1wa0;ng,rd,tts;an,enus,iol0;a,et;ky,onPumm09;ay,e1o0uby;bin,d,se;ed,x;a2e1o0;l,tt04;aLnJ;dYge,tR;at,orm;a0eloW;t0x,ya;!s;a9eo,iH;ng,tP;a2e1o0;lGy;an,w3;de,smi4y;a0erb,iOolBuntR;ll,z0;el;ail,e0iLuy;ne;a1ern,i0lo;elds,nn;ith,n0;ny;a0dEmir,ula,ve;rl;a4e3i1j,ol0;ly;ck,x0;ie;an,ja;i0wn;sy;am,h0liff,rystal;a0in,ristian;mbers,ri0;ty;a4e3i2o,r0ud;an0ook;dy;ll;nedict,rg;k0nks;er;l0rt;fredo,ma","Actor|Verb":"true¦aCb8c5doctor,engineAfool,g3host,judge,m2nerd,p1recruit,scout,ushAvolunteAwi0;mp,tneA;arent,ilot;an,ime;eek,oof,r0uide;adu8oom;ha1o0;ach,nscript,ok;mpion,uffeur;o2u0;lly,tch0;er;ss;ddi1ffili0rchite1;ate;ct",MaleName:"true¦0:H6;1:FZ;2:DS;3:GQ;4:CZ;5:FV;6:GM;7:FP;8:GW;9:ET;A:C2;B:GD;aF8bE1cCQdBMeASfA1g8Yh88i7Uj6Sk6Bl5Mm48n3So3Ip33qu31r26s1Et0Ru0Ov0CwTxSyHzC;aCor0;cChC1karia,nAT;!hDkC;!aF6;!ar7CeF5;aJevgenBSoEuC;en,rFVsCu3FvEF;if,uf;nDs6OusC;ouf,s6N;aCg;s,tC;an,h0;hli,nCrosE1ss09;is,nC;!iBU;avi2ho5;aPeNiDoCyaEL;jcieBJlfgang,odrFutR;lFnC;f8TsC;lCt1;ow;bGey,frEhe4QlC;aE5iCy;am,e,s;ed8iC;d,ed;eAur;i,ndeD2rn2sC;!l9t1;lDyC;l1ne;lDtC;!er;aCHy;aKernDAiFladDoC;jteB0lodymyr;!iC;mFQsDB;cFha0ktBZnceDrgCOvC;a0ek;!nC;t,zo;!e4StBV;lCnC7sily;!entC;in9J;ghE2lCm70nax,ri,sm0;riCyss87;ch,k;aWeRhNiLoGrEuDyC;!l2roEDs1;n6r6E;avD0eCist0oy,um0;ntCRvBKy;bFdAWmCny;!asDmCoharu;aFFie,y;!z;iA6y;mCt4;!my,othy;adEeoDia0SomC;!as;!dor91;!de4;dFrC;enBKrC;anBJeCy;ll,nBI;!dy;dgh,ha,iCnn2req,tsu5V;cDAka;aYcotWeThPiMlobod0oKpenc2tEurDvenAEyCzym1;ed,lvest2;aj,e9V;anFeDuC;!aA;fan17phEQvCwaA;e77ie;!islaCl9;v,w;lom1rBuC;leymaDHta;dDgmu9UlCm1yabonga;as,v8B;!dhart8Yn9;aEeClo75;lCrm0;d1t1;h9Jne,qu1Jun,wn,yne;aDbastiEDk2Yl5Mpp,rgCth,ymoCU;e1Dio;m4n;!tC;!ie,y;eDPlFmEnCq67tosCMul;dCj2UtiA5;e01ro;!iATkeB6mC4u5;!ik,vato9K;aZeUheC8iRoGuDyC;an,ou;b99dDf4peAssC;!elEG;ol00y;an,bLc7MdJel,geIh0lHmGnEry,sDyC;!ce;ar7Ocoe,s;!aCnBU;ld,n;an,eo;a7Ef;l7Jr;e3Eg2n9olfo,riC;go;bBNeDH;cCl9;ar87c86h54kCo;!ey,ie,y;cFeA3gDid,ubByCza;an8Ln06;g85iC;naC6s;ep;ch8Kfa5hHin2je8HlGmFndEoHpha5sDul,wi36yC;an,mo8O;h9Im4;alDSol3O;iD0on;f,ph;ul;e9CinC;cy,t1;aOeLhilJiFrCyoG;aDeC;m,st1;ka85v2O;eDoC;tr;r8GtC;er,ro;!ipCl6H;!p6U;dCLrcy,tC;ar,e9JrC;!o7;b9Udra8So9UscAHtri62ulCv8I;!ie,o7;ctav6Ji2lImHndrBRrGsDtCum6wB;is,to;aDc6k6m0vCwaBE;al79;ma;i,vR;ar,er;aDeksandr,ivC;er,i2;f,v;aNeLguyBiFoCu3O;aDel,j4l0ma0rC;beAm0;h,m;cFels,g5i9EkDlC;es,s;!au,h96l78olaC;!i,y;hCkCol76;ol75;al,d,il,ls1vC;ilAF;hom,tC;e,hC;anCy;!a5i5;aYeViLoGuDyC;l4Nr1;hamDr84staC;fa,p6E;ed,mG;di10e,hamEis4JntDritz,sCussa;es,he;e,y;ad,ed,mC;ad,ed;cGgu5hai,kFlEnDtchC;!e8O;a9Pik;house,o7t1;ae73eC3ha8Iolaj;ah,hDkC;!ey,y;aDeC;al,l;el,l;hDlv3rC;le,ri8Ev4T;di,met;ay0c00gn4hWjd,ks2NlTmadZnSrKsXtDuric7VxC;imilBKwe8B;eHhEi69tCus,y69;!eo,hCia7;ew,i67;eDiC;as,eu,s;us,w;j,o;cHiGkFlEqu8Qsha83tCv3;iCy;!m,n;in,on;el,o7us;a6Yo7us;!elCin,o7us;!l8o;frAEi5Zny,u5;achDcoCik;lm;ai,y;amDdi,e5VmC;oud;adCm6W;ou;aulCi9P;ay;aWeOiMloyd,oJuDyC;le,nd1;cFdEiDkCth2uk;a7e;gi,s,z;ov7Cv6Hw6H;!as,iC;a6Een;g0nn52renDuCvA4we7D;!iS;!zo;am,n4oC;n5r;a9Yevi,la5KnHoFst2thaEvC;eCi;nte;bo;nCpo8V;!a82el,id;!nC;aAy;mEnd1rDsz73urenCwr6K;ce,t;ry,s;ar,beAont;aOeIhalHiFla4onr63rDu5SylC;e,s;istCzysztof;i0oph2;er0ngsl9p,rC;ilA9k,ollos;ed,id;en0iGnDrmCv4Z;it;!dDnCt1;e2Ny;ri4Z;r,th;cp2j4mEna8BrDsp6them,uC;ri;im,l;al,il;a03eXiVoFuC;an,lCst3;en,iC;an,en,o,us;aQeOhKkub4AnIrGsDzC;ef;eDhCi9Wue;!ua;!f,ph;dCge;i,on;!aCny;h,s,th6J;anDnC;!ath6Hie,n72;!nC;!es;!l,sCy;ph;o,qu3;an,mC;!i,m6V;d,ffFns,rCs4;a7JemDmai7QoCry;me,ni1H;i9Dy;!e73rC;ey,y;cKdBkImHrEsDvi2yC;dBs1;on,p2;ed,oDrCv67;e6Qod;d,s61;al,es5Wis1;a,e,oCub;b,v;ob,qu13;aTbNchiMgLke53lija,nuKonut,rIsEtCv0;ai,suC;ki;aDha0i8XmaCsac;el,il;ac,iaC;h,s;a,vinCw3;!g;k,nngu6X;nac1Xor;ka;ai,rahC;im;aReLoIuCyd6;beAgGmFsC;eyDsC;a3e3;in,n;ber5W;h,o;m2raDsse3wC;a5Pie;c49t1K;a0Qct3XiGnDrC;beAman08;dr7VrC;iCy2N;!k,q1R;n0Tt3S;bKlJmza,nIo,rEsDyC;a5KdB;an,s0;lEo67r2IuCv9;hi5Hki,tC;a,o;an,ey;k,s;!im;ib;a08e00iUlenToQrMuCyorgy;iHnFsC;!taC;f,vC;!e,o;n6tC;er,h2;do,lC;herDlC;auCerQ;me;aEegCov2;!g,orC;!io,y;dy,h7C;dfr9nza3XrDttfC;ri6C;an,d47;!n;acoGlEno,oCuseppe;rgiCvan6O;!o,s;be6Ies,lC;es;mo;oFrC;aDha4HrCt;it,y;ld,rd8;ffErgC;!e7iCy;!os;!r9;bElBrCv3;eCla1Nr4Hth,y;th;e,rC;e3YielC;!i4;aXeSiQlOorrest,rCyod2E;aHedFiC;edDtC;s,z;ri18;!d42eri11riC;ck,k;nCs2;cEkC;ie,lC;in,yn;esLisC;!co,z3M;etch2oC;ri0yd;d5lConn;ip;deriFliEng,rC;dinaCg4nan0B;nd8;pe,x;co;bCdi,hd;iEriC;ce,zC;io;an,en,o;benez2dZfrYit0lTmMnJo3rFsteb0th0ugenEvCymBzra;an,eCge4D;ns,re3K;!e;gi,iDnCrol,v3w3;est8ie,st;cCk;!h,k;o0DriCzo;co,qC;ue;aHerGiDmC;aGe3A;lCrh0;!iC;a10o,s;s1y;nu5;beAd1iEliDm2t1viCwood;n,s;ot28s;!as,j5Hot,sC;ha;a3en;!dGg6mFoDua2QwC;a2Pin;arC;do;oZuZ;ie;a04eTiOmitrNoFrag0uEwDylC;an,l0;ay3Hig4D;a3Gdl9nc0st3;minFnDri0ugCvydGy2S;!lF;!a36nCov0;e1Eie,y;go,iDykC;as;cCk;!k;i,y;armuFetDll1mitri7neCon,rk;sh;er,m6riC;ch;id;andLepak,j0lbeAmetri4nIon,rGsEvDwCxt2;ay30ey;en,in;hawn,moC;nd;ek,riC;ck;is,nC;is,y;rt;re;an,le,mKnIrEvC;e,iC;!d;en,iEne0PrCyl;eCin,yl;l45n;n,o,us;!iCny;el,lo;iCon;an,en,on;a0Fe0Ch03iar0lRoJrFuDyrC;il,us;rtC;!is;aEistC;iaCob12;no;ig;dy,lInErC;ey,neliCy;s,us;nEor,rDstaC;nt3;ad;or;by,e,in,l3t1;aHeEiCyde;fCnt,ve;fo0Xt1;menDt4;us;s,t;rFuDyC;!t1;dCs;e,io;enC;ce;aHeGrisC;!toC;phCs;!eC;!r;st2t;d,rCs;b5leC;s,y;cDdrCs6;ic;il;lHmFrC;ey,lDroCy;ll;!o7t1;er1iC;lo;!eb,v3;a09eZiVjorn,laUoSrEuCyr1;ddy,rtKst2;er;aKeFiEuDyC;an,ce,on;ce,no;an,ce;nDtC;!t;dDtC;!on;an,on;dFnC;dDisC;lav;en,on;!foOl9y;bby,gd0rCyd;is;i0Lke;bElDshC;al;al,lL;ek;nIrCshoi;at,nEtC;!raC;m,nd;aDhaCie;rd;rd8;!iDjam3nCs1;ie,y;to;kaMlazs,nHrC;n9rDtC;!holomew;eCy;tt;ey;dCeD;ar,iC;le;ar1Nb1Dd16fon15gust3hm12i0Zja0Yl0Bm07nTputsiSrGsaFugustEveDyCziz;a0kh0;ry;o,us;hi;aMchiKiJjun,mHnEon,tCy0;em,hCie,ur8;ur;aDoC;!ld;ud,v;aCin;an,nd8;!el,ki;baCe;ld;ta;aq;aMdHgel8tCw6;hoFoC;iDnC;!i8y;ne;ny;er7rCy;eDzC;ej;!as,i,j,s,w;!s;s,tolC;iCy;!y;ar,iEmaCos;nu5r;el;ne,r,t;aVbSdBeJfHiGl01onFphonsEt1vC;aPin;on;e,o;so,zo;!sR;!onZrC;ed;c,jaHksFssaHxC;!andC;er,rC;e,os,u;andCei;ar,er,r;ndC;ro;en;eDrecC;ht;rt8;dd3in,n,sC;taC;ir;ni;dDm6;ar;an,en;ad,eC;d,t;in;so;aGi,olErDvC;ik;ian8;f8ph;!o;mCn;!a;dGeFraDuC;!bakr,lfazl;hCm;am;!l;allFel,oulaye,ulC;!lDrahm0;an;ah,o;ah;av,on",Uncountable:"true¦0:2E;1:2L;2:33;a2Ub2Lc29d22e1Rf1Ng1Eh16i11j0Yk0Wl0Rm0Hn0Do0Cp03rZsLt9uran2Jv7w3you gu0E;a5his17i4oo3;d,l;ldlife,ne;rm8t1;apor,ernacul29i3;neg28ol1Otae;eDhBiAo8r4un3yranny;a,gst1B;aff2Oea1Ko4ue nor3;th;o08u3;bleshoot2Ose1Tt;night,othpas1Vwn3;foEsfoE;me off,n;er3und1;e,mod2S;a,nnis;aDcCeBhAi9ki8o7p6t4u3weepstak0;g1Unshi2Hshi;ati08e3;am,el;ace2Keci0;ap,cc1meth2C;n,ttl0;lk;eep,ingl0or1C;lf,na1Gri0;ene1Kisso1C;d0Wfe2l4nd,t3;i0Iurn;m1Ut;abi0e4ic3;e,ke15;c3i01laxa11search;ogni10rea10;a9e8hys7luto,o5re3ut2;amble,mis0s3ten20;en1Zs0L;l3rk;i28l0EyH; 16i28;a24tr0F;nt3ti0M;i0s;bstetri24vercrowd1Qxyg09;a5e4owada3utella;ys;ptu1Ows;il poliZtional securi2;aAe8o5u3;m3s1H;ps;n3o1K;ey,o3;gamy;a3cha0Elancholy,rchandi1Htallurgy;sl0t;chine3g1Aj1Hrs,thema1Q; learn1Cry;aught1e6i5ogi4u3;ck,g12;c,s1M;ce,ghtn18nguis1LteratWv1;ath1isVss;ara0EindergartPn3;icke0Aowled0Y;e3upit1;a3llyfiGwel0G;ns;ce,gnor6mp5n3;forma00ter3;net,sta07;atiSort3rov;an18;a7e6isto09o3ung1;ckey,mework,ne4o3rseradi8spitali2use arrest;ky;s2y;adquarteXre;ir,libut,ppiHs3;hi3te;sh;ene8l6o5r3um,ymnas11;a3eZ;niUss;lf,re;ut3yce0F;en; 3ti0W;edit0Hpo3;ol;aNicFlour,o4urnit3;ure;od,rgive3uri1wl;ness;arCcono0LducaBlectr9n7quip8thi0Pvery6x3;ist4per3;ti0B;en0J;body,o08th07;joy3tertain3;ment;ici2o3;ni0H;tiS;nings,th;emi02i6o4raugh3ynas2;ts;pe,wnstai3;rs;abet0ce,s3;honZrepu3;te;aDelciChAivi07l8o3urrency;al,ld w6mmenta5n3ral,ttIuscoB;fusiHt 3;ed;ry;ar;assi01oth0;es;aos,e3;eMwK;us;d,rO;a8i6lood,owlHread5u3;ntGtt1;er;!th;lliarJs3;on;g3ss;ga3;ge;cKdviJeroGirFmBn6ppeal court,r4spi3thleL;rin;ithmet3sen3;ic;i6y3;o4th3;ing;ne;se;en5n3;es2;ty;ds;craft;bi8d3nau7;yna3;mi6;ce;id,ous3;ti3;cs",Infinitive:"true¦0:9G;1:9T;2:AD;3:90;4:9Z;5:84;6:AH;7:A9;8:92;9:A0;A:AG;B:AI;C:9V;D:8R;E:8O;F:97;G:6H;H:7D;a94b8Hc7Jd68e4Zf4Mg4Gh4Ai3Qj3Nk3Kl3Bm34nou48o2Vp2Equ2Dr1Es0CtZuTvRwI;aOeNiLors5rI;eJiI;ng,te;ak,st3;d5e8TthI;draw,er;a2d,ep;i2ke,nIrn;d1t;aIie;liADniAry;nJpI;ho8Llift;cov1dJear8Hfound8DlIplug,rav82tie,ve94;eaAo3X;erIo;cut,go,staAFvalA3w2G;aSeQhNoMrIu73;aIe72;ffi3Smp3nsI;aBfo7CpI;i8oD;pp3ugh5;aJiJrIwaD;eat5i2;nk;aImA0;ch,se;ck3ilor,keImp1r8L;! paD;a0Ic0He0Fh0Bi0Al08mugg3n07o05p02qu01tUuLwI;aJeeIim;p,t5;ll7Wy;bNccMffLggeCmmKppJrI;mouFpa6Zvi2;o0re6Y;ari0on;er,i4;e7Numb;li9KmJsiIveD;de,st;er9it;aMe8MiKrI;ang3eIi2;ng27w;fIng;f5le;b,gg1rI;t3ve;a4AiA;a4UeJit,l7DoI;il,of;ak,nd;lIot7Kw;icEve;atGeak,i0O;aIi6;m,y;ft,ng,t;aKi6CoJriIun;nk,v6Q;ot,rt5;ke,rp5tt1;eIll,nd,que8Gv1w;!k,m;aven9ul8W;dd5tis1Iy;a0FeKiJoI;am,t,ut;d,p5;a0Ab08c06d05f01group,hea00iZjoi4lXmWnVpTq3MsOtMup,vI;amp,eJiIo3B;sEve;l,rI;e,t;i8rI;ie2ofE;eLiKpo8PtIurfa4;o24rI;aHiBuctu8;de,gn,st;mb3nt;el,hra0lIreseF;a4e71;d1ew,o07;aHe3Fo2;a7eFiIo6Jy;e2nq41ve;mbur0nf38;r0t;inKleBocus,rJuI;el,rbiA;aBeA;an4e;aBu4;ei2k8Bla43oIyc3;gni39nci3up,v1;oot,uI;ff;ct,d,liIp;se,ze;tt3viA;aAenGit,o7;aWerUinpoiFlumm1LoTrLuI;b47ke,niArIt;poDsuI;aFe;eMoI;cKd,fe4XhibEmo7noJpo0sp1tru6vI;e,i6o5L;un4;la3Nu8;aGclu6dJf1occupy,sup0JvI;a6BeF;etermi4TiB;aGllu7rtr5Ksse4Q;cei2fo4NiAmea7plex,sIva6;eve8iCua6;mp1rItrol,ve;a6It6E;bOccuNmEpMutLverIwe;l07sJtu6Yu0wI;helm;ee,h1F;gr5Cnu2Cpa4;era7i4Ipo0;py,r;ey,seItaH;r2ss;aMe0ViJoIultiply;leCu6Pw;micJnIspla4;ce,g3us;!k;iIke,na9;m,ntaH;aPeLiIo0u3N;ke,ng1quIv5;eIi6S;fy;aKnIss5;d,gI;th5;rn,ve;ng2Gu1N;eep,idnJnI;e4Cow;ap;oHuI;gg3xtaI;po0;gno8mVnIrk;cTdRfQgeChPitia7ju8q1CsNtKun6EvI;a6eIo11;nt,rt,st;erJimi6BoxiPrI;odu4u6;aBn,pr03ru6C;iCpi8tIu8;all,il,ruB;abEibE;eCo3Eu0;iIul9;ca7;i7lu6;b5Xmer0pI;aLer4Uin9ly,oJrI;e3Ais6Bo2;rt,se,veI;riA;le,rt;aLeKiIoiCuD;de,jaInd1;ck;ar,iT;mp1ng,pp5raIve;ng5Mss;ath1et,iMle27oLrI;aJeIow;et;b,pp3ze;!ve5A;gg3ve;aTer45i5RlSorMrJuI;lf4Cndrai0r48;eJiIolic;ght5;e0Qsh5;b3XeLfeEgJsI;a3Dee;eIi2;!t;clo0go,shIwa4Z;ad3F;att1ee,i36;lt1st5;a0OdEl0Mm0FnXquip,rWsVtGvTxI;aRcPeDhOiNpJtIu6;ing0Yol;eKi8lIo0un9;aHoI;it,re;ct,di7l;st,t;a3oDu3B;e30lI;a10u6;lt,mi28;alua7oI;ke,l2;chew,pou0tab19;a0u4U;aYcVdTfSgQhan4joy,lPqOrNsuMtKvI;e0YisI;a9i50;er,i4rI;aHenGuC;e,re;iGol0F;ui8;ar9iC;a9eIra2ulf;nd1;or4;ang1oIu8;r0w;irc3lo0ou0ErJuI;mb1;oaGy4D;b3ct;bKer9pI;hasiIow1;ze;aKody,rI;a4oiI;d1l;lm,rk;ap0eBuI;ci40de;rIt;ma0Rn;a0Re04iKo,rIwind3;aw,ed9oI;wn;agno0e,ff1g,mi2Kne,sLvI;eIul9;rIst;ge,t;aWbVcQlod9mant3pNru3TsMtI;iIoDu37;lJngI;uiA;!l;ol2ua6;eJlIo0ro2;a4ea0;n0r0;a2Xe36lKoIu0S;uIv1;ra9;aIo0;im;a3Kur0;b3rm;af5b01cVduBep5fUliTmQnOpMrLsiCtaGvI;eIol2;lop;ch;a20i2;aDiBloIoD;re,y;oIy;te,un4;eJoI;liA;an;mEv1;a4i0Ao06raud,y;ei2iMla8oKrI;ee,yI;!pt;de,mIup3;missi34po0;de,ma7ph1;aJrief,uI;g,nk;rk;mp5rk5uF;a0Dea0h0Ai09l08oKrIurta1G;a2ea7ipp3uI;mb3;ales4e04habEinci6ll03m00nIrro6;cXdUfQju8no7qu1sLtKvI;eIin4;ne,r9y;aHin2Bribu7;er2iLoli2Epi8tJuI;lt,me;itu7raH;in;d1st;eKiJoIroFu0;rm;de,gu8rm;ss;eJoI;ne;mn,n0;eIlu6ur;al,i2;buCe,men4pI;eIi3ly;l,te;eBi6u6;r4xiC;ean0iT;rcumveFte;eJirp,oI;o0p;riAw;ncIre5t1ulk;el;a02eSi6lQoPrKuI;iXrIy;st,y;aLeaKiJoad5;en;ng;stfeLtX;ke;il,l11mba0WrrMth1;eIow;ed;!coQfrie1LgPhMliLqueaKstJtrIwild1;ay;ow;th;e2tt3;a2eJoI;ld;ad;!in,ui3;me;bysEckfi8ff3tI;he;b15c0Rd0Iff0Ggree,l0Cm09n03ppZrXsQttOuMvJwaE;it;eDoI;id;rt;gIto0X;meF;aIeCraB;ch,in;pi8sJtoI;niA;aKeIi04u8;mb3rt,ss;le;il;re;g0Hi0ou0rI;an9i2;eaKly,oiFrI;ai0o2;nt;r,se;aMi0GnJtI;icipa7;eJoIul;un4y;al;ly0;aJu0;se;lga08ze;iKlI;e9oIu6;t,w;gn;ix,oI;rd;a03jNmiKoJsoI;rb;pt,rn;niIt;st1;er;ouJuC;st;rn;cLhie2knowled9quiItiva7;es4re;ce;ge;eQliOoKrJusI;e,tom;ue;mIst;moJpI;any,liA;da7;ma7;te;pt;andPduBet,i6oKsI;coKol2;ve;liArt,uI;nd;sh;de;ct;on",Person:"true¦0:1Q;a29b1Zc1Md1Ee18f15g13h0Ri0Qj0Nk0Jl0Gm09n06o05p00rPsItCusain bolt,v9w4xzibit,y1;anni,oko on2uji,v1;an,es;en,o;a3ednesday adams,i2o1;lfram,o0Q;ll ferrell,z khalifa;lt disn1Qr1;hol,r0G;a2i1oltai06;n dies0Zrginia wo17;lentino rossi,n goG;a4h3i2ripp,u1yra banks;lZpac shakur;ger woods,mba07;eresa may,or;kashi,t1ylor;um,ya1B;a5carlett johanss0h4i3lobodan milosevic,no2ocr1Lpider1uperm0Fwami; m0Em0E;op dogg,w whi1H;egfried,nbad;akespeaTerlock holm1Sia labeouf;ddam hussa16nt1;a cla11ig9;aAe6i5o3u1za;mi,n dmc,paul,sh limbau1;gh;bin hood,d stew16nald1thko;in0Mo;han0Yngo starr,valdo;ese witherspo0i1mbrandt;ll2nh1;old;ey,y;chmaninoff,ffi,iJshid,y roma1H;a4e3i2la16o1uff daddy;cahont0Ie;lar,p19;le,rZ;lm17ris hilt0;leg,prah winfr0Sra;a2e1iles cra1Bostradam0J; yo,l5tt06wmQ;pole0s;a5e4i2o1ubar03;by,lie5net,rriss0N;randa ju1tt romn0M;ly;rl0GssiaB;cklemo1rkov,s0ta hari,ya angelou;re;ady gaga,e1ibera0Pu;bron jam0Xch wale1e;sa;anye west,e3i1obe bryant;d cudi,efer suther1;la0P;ats,sha;a2effers0fk,k rowling,rr tolki1;en;ck the ripp0Mwaharlal nehru,y z;liTnez,ron m7;a7e5i3u1;lk hog5mphrey1sa01;! bog05;l1tl0H;de; m1dwig,nry 4;an;ile selassFlle ber4m3rrison1;! 1;ford;id,mo09;ry;ast0iannis,o1;odwPtye;ergus0lorence nightinga08r1;an1ederic chopN;s,z;ff5m2nya,ustaXzeki1;el;eril lagasse,i1;le zatop1nem;ek;ie;a6e4i2octor w1rake;ho;ck w1ego maradoC;olf;g1mi lovaOnzel washingt0;as;l1nHrth vadR;ai lNt0;a8h5lint0o1thulhu;n1olio;an,fuci1;us;on;aucKop2ristian baMy1;na;in;millo,ptain beefhe4r1;dinal wols2son1;! palmF;ey;art;a8e5hatt,i3oHro1;ck,n1;te;ll g1ng crosby;atB;ck,nazir bhut2rtil,yon1;ce;to;nksy,rack ob1;ama;l 6r3shton kutch2vril lavig8yn ra1;nd;er;chimed2istot1;le;es;capo2paci1;no;ne",Adjective:"true¦0:AI;1:BS;2:BI;3:BA;4:A8;5:84;6:AV;7:AN;8:AF;9:7H;A:BQ;B:AY;C:BC;D:BH;E:9Y;aA2b9Ec8Fd7We79f6Ng6Eh61i4Xj4Wk4Tl4Im41n3Po36p2Oquart7Pr2Ds1Dt14uSvOwFye29;aMeKhIiHoF;man5oFrth7G;dADzy;despreB1n w97s86;acked1UoleF;!sa6;ather1PeFll o70ste1D;!k5;nt1Ist6Ate4;aHeGiFola5T;bBUce versa,gi3Lle;ng67rsa5R;ca1gBSluAV;lt0PnLpHrGsFttermoBL;ef9Ku3;b96ge1; Hb32pGsFtiAH;ca6ide d4R;er,i85;f52to da2;a0Fbeco0Hc0Bd04e02f01gu1XheaBGiXkn4OmUnTopp06pRrNsJtHus0wF;aFiel3K;nt0rra0P;app0eXoF;ld,uS;eHi37o5ApGuF;perv06spec39;e1ok9O;en,ttl0;eFu5;cogn06gul2RlGqu84sF;erv0olv0;at0en33;aFrecede0E;id,rallel0;am0otic0;aFet;rri0tF;ch0;nFq26vers3;sur0terFv7U;eFrupt0;st0;air,inish0orese98;mploy0n7Ov97xpF;ect0lain0;eHisFocume01ue;clFput0;os0;cid0rF;!a8Scov9ha8Jlyi8nea8Gprivileg0sMwF;aFei9I;t9y;hGircumcFonvin2U;is0;aFeck0;lleng0rt0;b20ppea85ssuGttend0uthorF;iz0;mi8;i4Ara;aLeIhoHip 25oGrF;anspare1encha1i2;geth9leADp notch,rpB;rny,ugh6H;ena8DmpGrFs6U;r49tia4;eCo8P;leFst4M;nt0;a0Dc09e07h06i04ki03l01mug,nobbi4XoVpRqueami4XtKuFymb94;bHccinAi generis,pFr5;erFre7N;! dup9b,vi70;du0li7Lp6IsFurb7J;eq9Atanda9X;aKeJi16o2QrGubboFy4Q;rn;aightFin5GungS; fFfF;or7V;adfa9Pri6;lwa6Ftu82;arHeGir6NlendBot Fry;on;c3Qe1S;k5se; call0lImb9phistic16rHuFviV;ndFth1B;proof;dBry;dFub6; o2A;e60ipF;pe4shod;ll0n d7R;g2HnF;ceEg6ist9;am3Se9;co1Zem5lfFn6Are7; suf4Xi43;aGholFient3A;ar5;rlFt4A;et;cr0me,tisfac7F;aOeIheumatoBiGoF;bu8Ztt7Gy3;ghtFv3; 1Sf6X;cJdu8PlInown0pro69sGtF;ard0;is47oF;lu2na1;e1Suc45;alcit8Xe1ondi2;bBci3mpa1;aSePicayu7laOoNrGuF;bl7Tnjabi;eKiIoF;b7VfGmi49pFxi2M;er,ort81;a7uD;maFor,sti7va2;!ry;ciDexis0Ima2CpaB;in55puli8G;cBid;ac2Ynt 3IrFti2;ma40tFv7W;!i3Z;i2YrFss7R;anoBtF; 5XiF;al,s5V;bSffQkPld OnMrLth9utKverF;!aIbMdHhGni75seas,t,wF;ei74rou74;a63e7A;ue;ll;do1Ger,si6A;d3Qg2Aotu5Z; bFbFe on o7g3Uli7;oa80;fashion0school;!ay; gua7XbFha5Uli7;eat;eHligGsF;ce7er0So1C;at0;diFse;a1e1;aOeNiMoGuF;anc0de; moEnHrthFt6V;!eFwe7L;a7Krn;chaGdescri7Iprof30sF;top;la1;ght5;arby,cessa4ighbor5wlyw0xt;k0usiaFv3;ti8;aQeNiLoHuF;dIltiF;facet0p6;deHlGnFot,rbBst;ochro4Xth5;dy;rn,st;ddle ag0nF;dbloZi,or;ag9diocEga,naGrFtropolit4Q;e,ry;ci8;cIgenta,inHj0Fkeshift,mmGnFri4Oscu61ver18;da5Dy;ali4Lo4U;!stream;abEho;aOeLiIoFumberi8;ngFuti1R;stan3RtF;erm,i4H;ghtGteraF;l,ry,te;heart0wei5O;ft JgFss9th3;al,eFi0M;nda4;nguBps0te5;apGind5noF;wi8;ut;ad0itte4uniW;ce co0Hgno6Mll0Cm04nHpso 2UrF;a2releF;va1; ZaYcoWdReQfOgrNhibi4Ri05nMoLsHtFvalu5M;aAeF;nDrdepe2K;a7iGolFuboI;ub6ve1;de,gF;nifica1;rdi5N;a2er;own;eriIiLluenVrF;ar0eq5H;pt,rt;eHiGoFul1O;or;e,reA;fiFpe26termi5E;ni2;mpFnsideCrreA;le2;ccuCdeq5Ene,ppr4J;fFsitu,vitro;ro1;mJpF;arHeGl15oFrop9;li2r11;n2LrfeA;ti3;aGeFi18;d4BnD;tuE;egGiF;c0YteC;al,iF;tiF;ma2;ld;aOelNiLoFuma7;a4meInHrrGsFur5;ti6;if4E;e58o3U; ma3GsF;ick;ghfalut2HspF;an49;li00pf33;i4llow0ndGrdFtM; 05coEworki8;sy,y;aLener44iga3Blob3oKrGuF;il1Nng ho;aFea1Fizzl0;cGtF;ef2Vis;ef2U;ld3Aod;iFuc2D;nf2R;aVeSiQlOoJrF;aGeFil5ug3;q43tf2O;gFnt3S;i6ra1;lk13oHrF; keeps,eFge0Vm9tu41;g0Ei2Ds3R;liF;sh;ag4Mowe4uF;e1or45;e4nF;al,i2;d Gmini7rF;ti6ve1;up;bl0lDmIr Fst pac0ux;oGreacF;hi8;ff;ed,ili0R;aXfVlTmQnOqu3rMthere3veryday,xF;aApIquisi2traHuF;be48lF;ta1;!va2L;edRlF;icF;it;eAstF;whi6; Famor0ough,tiE;rou2sui2;erGiF;ne1;ge1;dFe2Aoq34;er5;ficF;ie1;g9sF;t,ygF;oi8;er;aWeMiHoGrFue;ea4owY;ci6mina1ne,r31ti8ubQ;dact2Jfficult,m,sGverF;ge1se;creGePjoi1paCtF;a1inA;et,te; Nadp0WceMfiLgeneCliJmuEpeIreliAsGvoF;id,ut;pFtitu2ul1L;eCoF;nde1;ca2ghF;tf13;a1ni2;as0;facto;i5ngero0I;ar0Ce09h07i06l05oOrIuF;rmudgeon5stoma4teF;sy;ly;aIeHu1EystalF; cleFli7;ar;epy;fFv17z0;ty;erUgTloSmPnGrpoCunterclVveFy;rt;cLdJgr21jIsHtrF;aFi2;dic0Yry;eq1Yta1;oi1ug3;escenFuN;di8;a1QeFiD;it0;atoDmensuCpF;ass1SulF;so4;ni3ss3;e1niza1;ci1J;ockwiD;rcumspeAvil;eFintzy;e4wy;leGrtaF;in;ba2;diac,ef00;a00ePiLliJoGrFuck nak0;and new,isk,on22;gGldface,naF; fi05fi05;us;nd,tF;he;gGpartisFzarE;an;tiF;me;autifOhiNlLnHsFyoN;iWtselF;li8;eGiFt;gn;aFfi03;th;at0oF;v0w;nd;ul;ckwards,rF;e,rT; priori,b13c0Zd0Tf0Ng0Ihe0Hl09mp6nt06pZrTsQttracti0MuLvIwF;aGkF;wa1B;ke,re;ant garGeraF;ge;de;diIsteEtF;heFoimmu7;nt07;re;to4;hGlFtu2;eep;en;bitIchiv3roHtF;ifiFsy;ci3;ga1;ra4;ry;pFt;aHetizi8rF;oprF;ia2;llFre1;ed,i8;ng;iquFsy;at0e;ed;cohKiJkaHl,oGriFterX;ght;ne,of;li7;ne;ke,ve;olF;ic;ad;ain07gressiIi6rF;eeF;ab6;le;ve;fGraB;id;ectGlF;ue1;ioF;na2; JaIeGvF;erD;pt,qF;ua2;ma1;hoc,infinitum;cuCquiGtu3u2;al;esce1;ra2;erSjeAlPoNrKsGuF;nda1;e1olu2trF;aAuD;se;te;eaGuF;pt;st;aFve;rd;aFe;ze;ct;ra1;nt",Pronoun:"true¦elle,h3i2me,she,th0us,we,you;e0ou;e,m,y;!l,t;e,im",Preposition:"true¦aPbMcLdKexcept,fIinGmid,notwithstandiWoDpXqua,sCt7u4v2w0;/o,hereSith0;! whHin,oW;ersus,i0;a,s a vis;n1p0;!on;like,til;h1ill,oward0;!s;an,ereby,r0;ough0u;!oM;ans,ince,o that,uch G;f1n0ut;!to;!f;! 0to;effect,part;or,r0;om;espite,own,u3;hez,irca;ar1e0oBy;sides,tween;ri7;bo8cross,ft7lo6m4propos,round,s1t0;!op;! 0;a whole,long 0;as;id0ong0;!st;ng;er;ut",SportsTeam:"true¦0:18;1:1E;2:1D;3:14;a1Db15c0Sd0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Am01new UoRpKqueens parkJreal salt lake,sBt6utah jazz,vancouver whitecaps,w4yW;ashington 4h10;natio1Mredski2wizar0W;ampa bay 7e6o4;ronto 4ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasD;buccanee0ra0K;a8eattle 6porting kansas0Wt4; louis 4oke0V;c1Drams;marine0s4;eah13ounH;cramento Rn 4;antonio spu0diego 4francisco gJjose earthquak1;char08paB; ran07;a9h6ittsburgh 5ortland t4;imbe0rail blaze0;pirat1steele0;il4oenix su2;adelphia 4li1;eagl1philNunE;dr1;akland 4klahoma city thunder,rlando magic;athle0Lrai4;de0;england 8orleans 7york 4;g5je3knYme3red bul0Xy4;anke1;ian3;pelica2sain3;patrio3revolut4;ion;anchEeAi4ontreal impact;ami 8lwaukee b7nnesota 4;t5vi4;kings;imberwolv1wi2;rewe0uc0J;dolphi2heat,marli2;mphis grizz4ts;li1;a6eic5os angeles 4;clippe0dodFlaB;esterV; galaxy,ke0;ansas city 4nF;chiefs,roya0D; pace0polis col3;astr05dynamo,rocke3texa2;olden state warrio0reen bay pac4;ke0;allas 8e4i04od6;nver 6troit 4;lio2pisto2ti4;ge0;broncYnugge3;cowbo5maver4;icZ;ys;arEelLhAincinnati 8leveland 6ol4;orado r4umbus crew sc;api7ocki1;brow2cavalie0guar4in4;dia2;bengaVre4;ds;arlotte horAicago 4;b5cubs,fire,wh4;iteB;ea0ulQ;diff4olina panthe0; city;altimore Alackburn rove0oston 6rooklyn 4uffalo bilN;ne3;ts;cel5red4; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 4;brav1falco2h4;awA;ns;es;on villa,r4;os;c6di4;amondbac4;ks;ardi4;na4;ls",Unit:"true¦a07b04cXdWexVfTgRhePinYjoule0BkMlJmDnan08oCp9quart0Bsq ft,t7volts,w6y2ze3°1µ0;g,s;c,f,n;dVear1o0;ttR; 0s 0;old;att,b;erNon0;!ne02;ascals,e1i0;cXnt00;rcent,tJ;hms,unceY;/s,e4i0m²,²,³;/h,cro2l0;e0liK;!²;grLsR;gCtJ;it1u0;menQx;erPreP;b5elvins,ilo1m0notO;/h,ph,²;!byGgrEmCs;ct0rtzL;aJogrC;allonJb0ig3rB;ps;a0emtEl oz,t4;hrenheit,radG;aby9;eci3m1;aratDe1m0oulombD;²,³;lsius,nti0;gr2lit1m0;et0;er8;am7;b1y0;te5;l,ps;c2tt0;os0;econd1;re0;!s","Noun|Gerund":"true¦0:3O;1:3M;2:3N;3:3D;4:32;5:2V;6:3E;7:3K;8:36;9:3J;A:3B;a3Pb37c2Jd27e23f1Vg1Sh1Mi1Ij1Gk1Dl18m13n11o0Wp0Pques0Sr0EsTtNunderMvKwFyDzB;eroi0oB;ni0o3P;aw2eB;ar2l3;aEed4hispe5i5oCrB;ap8est3i1;n0ErB;ki0r31;i1r2s9tc9;isualizi0oB;lunt1Vti0;stan4ta6;aFeDhin6iCraBy8;c6di0i2vel1M;mi0p8;aBs1;c9si0;l6n2s1;aUcReQhOiMkatKl2Wmo6nowJpeItFuCwB;ea5im37;b35f0FrB;fi0vB;e2Mi2J;aAoryt1KrCuB;d2KfS;etc9ugg3;l3n4;bCi0;ebBi0;oar4;gnBnAt1;a3i0;ip8oB;p8rte2u1;a1r27t1;hCo5reBulp1;a2Qe2;edu3oo3;i3yi0;aKeEi4oCuB;li0n2;oBwi0;fi0;aFcEhear7laxi0nDpor1sB;pon4tructB;r2Iu5;de5;or4yc3;di0so2;p8ti0;aFeacek20laEoCrBublis9;a1Teten4in1oces7;iso2siB;tio2;n2yi0;ckaAin1rB;ki0t1O;fEpeDrganiCvB;erco24ula1;si0zi0;ni0ra1;fe5;avi0QeBur7;gotia1twor6;aDeCi2oB;de3nito5;a2dita1e1ssaA;int0XnBrke1;ifUufactu5;aEeaDiBodAyi0;cen7f1mi1stB;e2i0;r2si0;n4ug9;iCnB;ea4it1;c6l3;ogAuB;dAgg3stif12;ci0llust0VmDnBro2;nova1sp0NterBven1;ac1vie02;agi2plo4;aDea1iCoBun1;l4w3;ki0ri0;nd3rB;roWvB;es1;aCene0Lli4rBui4;ee1ie0N;rde2the5;aHeGiDlCorBros1un4;e0Pmat1;ir1oo4;gh1lCnBs9;anZdi0;i0li0;e3nX;r0Zscina1;a1du01nCxB;erci7plo5;chan1di0ginB;ee5;aLeHiGoub1rCum8wB;el3;aDeCiB;bb3n6vi0;a0Qs7;wi0;rTscoDvi0;ba1coZlBvelo8;eCiB;ve5;ga1;nGti0;aVelebUhSlPoDrBur3yc3;aBos7yi0;f1w3;aLdi0lJmFnBo6pi0ve5;dDsCvinB;ci0;trBul1;uc1;muniDpB;lBo7;ai2;ca1;lBo5;ec1;c9ti0;ap8eaCimToBubT;ni0t9;ni0ri0;aBee5;n1t1;ra1;m8rCs1te5;ri0;vi0;aPeNitMlLoGrDuB;dge1il4llBr8;yi0;an4eat9oadB;cas1;di0;a1mEokB;i0kB;ee8;pi0;bi0;es7oa1;c9i0;gin2lonAt1;gi0;bysit1c6ki0tt3;li0;ki0;bando2cGdverti7gi0pproac9rgDssuCtB;trac1;mi0;ui0;hi0;si0;coun1ti0;ti0;ni0;ng",PhrasalVerb:"true¦0:92;1:96;2:8H;3:8V;4:8A;5:83;6:85;7:98;8:90;9:8G;A:8X;B:8R;C:8U;D:8S;E:70;F:97;G:8Y;H:81;I:7H;J:79;a9Fb7Uc6Rd6Le6Jf5Ig50h4Biron0j47k40l3Em31n2Yo2Wp2Cquiet Hr1Xs0KtZuXvacuu6QwNyammerBzK;ero Dip LonK;e0k0;by,ov9up;aQeMhLiKor0Mrit19;mp0n3Fpe0r5s5;ackAeel Di0S;aLiKn33;gh 3Wrd0;n Dr K;do1in,oJ;it 79k5lk Lrm 69sh Kt83v60;aw3do1o7up;aw3in,oC;rgeBsK;e 2herE;a00eYhViRoQrMuKypP;ckErn K;do1in,oJup;aLiKot0y 30;ckl7Zp F;ck HdK;e 5Y;n7Wp 3Es5K;ck MdLe Kghten 6me0p o0Rre0;aw3ba4do1in,up;e Iy 2;by,oG;ink Lrow K;aw3ba4in,up;ba4ov9up;aKe 77ll62;m 2r 5M;ckBke Llk K;ov9shit,u47;aKba4do1in,leave,o4Dup;ba4ft9pa69w3;a0Vc0Te0Mh0Ii0Fl09m08n07o06p01quar5GtQuOwK;earMiK;ngLtch K;aw3ba4o8K; by;cKi6Bm 2ss0;k 64;aReQiPoNrKud35;aigh2Det75iK;ke 7Sng K;al6Yup;p Krm2F;by,in,oG;c3Ln3Lr 2tc4O;p F;c3Jmp0nd LrKveAy 2O;e Ht 2L;ba4do1up;ar3GeNiMlLrKurB;ead0ingBuc5;a49it 6H;c5ll o3Cn 2;ak Fe1Xll0;a3Bber 2rt0und like;ap 5Vow Duggl5;ash 6Noke0;eep NiKow 6;cLp K;o6Dup;e 68;in,oK;ff,v9;de19gn 4NnKt 6Gz5;gKkE; al6Ale0;aMoKu5W;ot Kut0w 7M;aw3ba4f48oC;c2WdeEk6EveA;e Pll1Nnd Orv5tK; Ktl5J;do1foLin,o7upK;!on;ot,r5Z;aw3ba4do1in,o33up;oCto;al66out0rK;ap65ew 6J;ilAv5;aXeUiSoOuK;b 5Yle0n Kstl5;aLba4do1inKo2Ith4Nu5P;!to;c2Xr8w3;ll Mot LpeAuK;g3Ind17;a2Wf3Po7;ar8in,o7up;ng 68p oKs5;ff,p18;aKelAinEnt0;c6Hd K;o4Dup;c27t0;aZeYiWlToQrOsyc35uK;ll Mn5Kt K;aKba4do1in,oJto47up;pa4Dw3;a3Jdo1in,o21to45up;attleBess KiNop 2;ah2Fon;iLp Kr4Zu1Gwer 6N;do1in,o6Nup;nt0;aLuK;gEmp 6;ce u20y 6D;ck Kg0le 4An 6p5B;oJup;el 5NncilE;c53ir 39n0ss MtLy K;ba4oG; Hc2R;aw3ba4in,oJ;pKw4Y;e4Xt D;aLerd0oK;dAt53;il Hrrow H;aTeQiPoLuK;ddl5ll I;c1FnkeyMp 6uthAve K;aKdo1in,o4Lup;l4Nw3; wi4K;ss0x 2;asur5e3SlLss K;a21up;t 6;ke Ln 6rKs2Ax0;k 6ryA;do,fun,oCsure,up;a02eViQoLuK;ck0st I;aNc4Fg MoKse0;k Kse4D;aft9ba4do1forw37in56o0Zu46;in,oJ;d 6;e NghtMnLsKve 00;ten F;e 2k 2; 2e46;ar8do1in;aMt LvelK; oC;do1go,in,o7up;nEve K;in,oK;pKut;en;c5p 2sh LtchBughAy K;do1o59;in4Po7;eMick Lnock K;do1oCup;oCup;eLy K;in,up;l Ip K;aw3ba4do1f04in,oJto,up;aMoLuK;ic5mpE;ke3St H;c43zz 2;a01eWiToPuK;nLrrKsh 6;y 2;keLt K;ar8do1;r H;lKneErse3K;d Ke 2;ba4dKfast,o0Cup;ear,o1;de Lt K;ba4on,up;aw3o7;aKlp0;d Ml Ir Kt 2;fKof;rom;f11in,o03uW;cPm 2nLsh0ve Kz2P;at,it,to;d Lg KkerP;do1in,o2Tup;do1in,oK;ut,v9;k 2;aZeTive Rloss IoMrLunK; f0S;ab hold,in43ow 2U; Kof 2I;aMb1Mit,oLr8th1IuK;nd9;ff,n,v9;bo7ft9hQw3;aw3bKdo1in,oJrise,up,w3;a4ir2H;ar 6ek0t K;aLb1Fdo1in,oKr8up;ff,n,ut,v9;cLhKl2Fr8t,w3;ead;ross;d aKng 2;bo7;a0Ee07iYlUoQrMuK;ck Ke2N;ar8up;eLighten KownBy 2;aw3oG;eKshe27; 2z5;g 2lMol Krk I;aKwi20;bo7r8;d 6low 2;aLeKip0;sh0;g 6ke0mKrKtten H;e F;gRlPnNrLsKzzle0;h F;e Km 2;aw3ba4up;d0isK;h 2;e Kl 1T;aw3fPin,o7;ht ba4ure0;ePnLsK;s 2;cMd K;fKoG;or;e D;d04l 2;cNll Krm0t1G;aLbKdo1in,o09sho0Eth08victim;a4ehi2O;pa0C;e K;do1oGup;at Kdge0nd 12y5;in,o7up;aOi1HoNrK;aLess 6op KuN;aw3b03in,oC;gBwB; Ile0ubl1B;m 2;a0Ah05l02oOrLut K;aw3ba4do1oCup;ackBeep LoKy0;ss Dwd0;by,do1in,o0Uup;me NoLuntK; o2A;k 6l K;do1oG;aRbQforOin,oNtKu0O;hLoKrue;geth9;rough;ff,ut,v9;th,wK;ard;a4y;paKr8w3;rt;eaLose K;in,oCup;n 6r F;aNeLiK;ll0pE;ck Der Kw F;on,up;t 2;lRncel0rOsMtch LveE; in;o1Nup;h Dt K;doubt,oG;ry LvK;e 08;aw3oJ;l Km H;aLba4do1oJup;ff,n,ut;r8w3;a0Ve0MiteAl0Fo04rQuK;bblNckl05il0Dlk 6ndl05rLsKtMy FzzA;t 00;n 0HsK;t D;e I;ov9;anWeaUiLush K;oGup;ghQng K;aNba4do1forMin,oLuK;nd9p;n,ut;th;bo7lKr8w3;ong;teK;n 2;k K;do1in,o7up;ch0;arTg 6iRn5oPrNssMttlLunce Kx D;aw3ba4;e 6; ar8;e H;do1;k Dt 2;e 2;l 6;do1up;d 2;aPeed0oKurt0;cMw K;aw3ba4do1o7up;ck;k K;in,oC;ck0nk0stA; oQaNef 2lt0nd K;do1ov9up;er;up;r Lt K;do1in,oCup;do1o7;ff,nK;to;ck Pil0nMrgLsK;h D;ainBe D;g DkB; on;in,o7;aw3do1in,oCup;ff,ut;ay;ct FdQir0sk MuctionA; oG;ff;ar8o7;ouK;nd; o7;d K;do1oKup;ff,n;wn;o7up;ut",ProperNoun:"true¦aIbDc8dalhousHe7f5gosford,h4iron maiden,kirby,landsdowne,m2nis,r1s0wembF;herwood,paldiB;iel,othwe1;cgi0ercedes,issy;ll;intBudsB;airview,lorence,ra0;mpt9nco;lmo,uro;a1h0;arlt6es5risti;rl0talina;et4i0;ng;arb3e0;et1nt0rke0;ley;on;ie;bid,jax","Person|Place":"true¦a8d6h4jordan,k3orlando,s1vi0;ctor9rgin9;a0ydney;lvador,mara,ntia4;ent,obe;amil0ous0;ton;arw2ie0;go;lexandr1ust0;in;ia",LastName:"true¦0:BR;1:BF;2:B5;3:BH;4:AX;5:9Y;6:B6;7:BK;8:B0;9:AV;A:AL;B:8Q;C:8G;D:7K;E:BM;F:AH;aBDb9Zc8Wd88e81f7Kg6Wh64i60j5Lk4Vl4Dm39n2Wo2Op25quispe,r1Ls0Pt0Ev03wTxSyKzG;aIhGimmerm6A;aGou,u;ng,o;khar5ytsE;aKeun9BiHoGun;koya32shiBU;!lG;diGmaz;rim,z;maGng;da,g52mo83sGzaC;aChiBV;iao,u;aLeJiHoGright,u;jcA5lff,ng;lGmm0nkl0sniewsC;kiB1liams33s3;bGiss,lt0;b,er,st0;a6Vgn0lHtG;anabe,s3;k0sh,tG;e2Non;aLeKiHoGukD;gt,lk5roby5;dHllalGnogr3Kr1Css0val3S;ba,ob1W;al,ov4;lasHsel8W;lJn dIrgBEsHzG;qu7;ilyEqu7siljE;en b6Aijk,yk;enzueAIverde;aPeix1VhKi2j8ka43oJrIsui,uG;om5UrG;c2n0un1;an,emblA7ynisC;dorAMlst3Km4rrAth;atch0i8UoG;mHrG;are84laci79;ps3sG;en,on;hirDkah9Mnaka,te,varA;a06ch01eYhUiRmOoMtIuHvGzabo;en9Jobod3N;ar7bot4lliv2zuC;aIeHoG;i7Bj4AyanAB;ele,in2FpheBvens25;l8rm0;kol5lovy5re7Tsa,to,uG;ng,sa;iGy72;rn5tG;!h;l71mHnGrbu;at9cla9Egh;moBo7M;aIeGimizu;hu,vchG;en8Luk;la,r1G;gu9infe5YmGoh,pulveA7rra5P;jGyG;on5;evi6iltz,miHneid0roed0uGwarz;be3Elz;dHtG;!t,z;!t;ar4Th8ito,ka4OlJnGr4saCto,unde19v4;ch7dHtGz;a5Le,os;b53e16;as,ihDm4Po0Y;aVeSiPoJuHyG;a6oo,u;bio,iz,sG;so,u;bKc8Fdrigue67ge10j9YmJosevelt,sItHux,wG;e,li6;a9Ch;enb4Usi;a54e4L;erts15i93;bei4JcHes,vGzzo;as,e9;ci,hards12;ag2es,iHut0yG;es,nol5N;s,t0;dImHnGsmu97v6C;tan1;ir7os;ic,u;aUeOhMiJoHrGut8;asad,if6Zochazk27;lishc2GpGrti72u10we76;e3Aov51;cHe45nG;as,to;as70hl0;aGillips;k,m,n6I;a3Hde3Wete0Bna,rJtG;ersHrovGters54;!a,ic;!en,on;eGic,kiBss3;i9ra,tz,z;h86k,padopoulIrk0tHvG;ic,l4N;el,te39;os;bMconn2Ag2TlJnei6PrHsbor6XweBzG;dem7Rturk;ella4DtGwe6N;ega,iz;iGof7Hs8I;vGyn1R;ei9;aSri1;aPeNiJoGune50ym2;rHvGwak;ak4Qik5otn66;odahl,r4S;cholsZeHkolGls4Jx3;ic,ov84;ls1miG;!n1;ils3mG;co4Xec;gy,kaGray2sh,var38;jiGmu9shiG;ma;a07c04eZiWoMuHyeG;rs;lJnIrGssoli6S;atGp03r7C;i,ov4;oz,te58;d0l0;h2lOnNo0RrHsGza1A;er,s;aKeJiIoz5risHtG;e56on;!on;!n7K;au,i9no,t5J;!lA;r1Btgome59;i3El0;cracFhhail5kkeHlG;l0os64;ls1;hmeJiIj30lHn3Krci0ssiGyer2N;!er;n0Po;er,j0;dDti;cartHlG;aughl8e2;hy;dQe7Egnu68i0jer3TkPmNnMrItHyG;er,r;ei,ic,su21thews;iHkDquAroqu8tinG;ez,s;a5Xc,nG;!o;ci5Vn;a5UmG;ad5;ar5e6Kin1;rig77s1;aVeOiLoJuHyG;!nch;k4nGo;d,gu;mbarGpe3Fvr4we;di;!nGu,yana2B;coln,dG;b21holm,strom;bedEfeKhIitn0kaHn8rGw35;oy;!j;m11tG;in1on1;bvGvG;re;iGmmy,ng,rs2Qu,voie,ws3;ne,t1F;aZeYh2iWlUnez50oNrJuHvar2woG;k,n;cerGmar68znets5;a,o34;aHem0isGyeziu;h23t3O;m0sni4Fus3KvG;ch4O;bay57ch,rh0Usk16vaIwalGzl5;czGsC;yk;cIlG;!cGen4K;huk;!ev4ic,s;e8uiveG;rt;eff0kGl4mu9nnun1;ucF;ll0nnedy;hn,llKminsCne,pIrHstra3Qto,ur,yGzl5;a,s0;j0Rls22;l2oG;or;oe;aPenOha6im14oHuG;ng,r4;e32hInHrge32u6vG;anD;es,ss3;anHnsG;en,on,t3;nesGs1R;en,s1;kiBnings,s1;cJkob4EnGrv0E;kDsG;en,sG;en0Ion;ks3obs2A;brahimDglesi5Nke5Fl0Qno07oneIshikHto,vanoG;u,v54;awa;scu;aVeOiNjaltal8oIrist50uG;!aGb0ghAynh;m2ng;a6dz4fIjgaa3Hk,lHpUrGwe,x3X;ak1Gvat;mAt;er,fm3WmG;ann;ggiBtchcock;iJmingw4BnHrGss;nand7re9;deGriks1;rs3;kkiHnG;on1;la,n1;dz4g1lvoQmOns0ZqNrMsJuIwHyG;asFes;kiB;g1ng;anHhiG;mo14;i,ov0J;di6p0r10t;ue;alaG;in1;rs1;aVeorgUheorghe,iSjonRoLrJuGw3;errGnnar3Co,staf3Ctierr7zm2;a,eG;ro;ayli6ee2Lg4iffithGub0;!s;lIme0UnHodGrbachE;e,m2;calvAzale0S;dGubE;bGs0E;erg;aj,i;bs3l,mGordaO;en7;iev3U;gnMlJmaIndFo,rGsFuthi0;cGdn0za;ia;ge;eaHlG;agh0i,o;no;e,on;aVerQiLjeldsted,lKoIrHuG;chs,entAji41ll0;eem2iedm2;ntaGrt8urni0wl0;na;emi6orA;lipIsHtzgeraG;ld;ch0h0;ovG;!ic;hatDnanIrG;arGei9;a,i;deY;ov4;b0rre1D;dKinsJriksIsGvaB;cob3GpGtra3D;inoza,osiQ;en,s3;te8;er,is3warG;ds;aXePiNjurhuMoKrisco15uHvorakG;!oT;arte,boHmitru,nn,rGt3C;and,ic;is;g2he0Omingu7nErd1ItG;to;us;aGcki2Hmitr2Ossanayake,x3;s,z; JbnaIlHmirGrvisFvi,w2;!ov4;gado,ic;th;bo0groot,jo6lHsilGvriA;va;a cruz,e3uG;ca;hl,mcevsCnIt2WviG;dGes,s;ov,s3;ielsGku22;!en;ki;a0Be06hRiobQlarkPoIrGunningh1H;awfo0RivGuz;elli;h1lKntJoIrGs2Nx;byn,reG;a,ia;ke,p0;i,rer2K;em2liB;ns;!e;anu;aOeMiu,oIristGu6we;eGiaG;ns1;i,ng,p9uHwGy;!dH;dGng;huJ;!n,onGu6;!g;kJnIpm2ttHudhGv7;ry;erjee,o14;!d,g;ma,raboG;rty;bJl0Cng4rG;eghetHnG;a,y;ti;an,ota1C;cerAlder3mpbeLrIstGvadi0B;iGro;llo;doHl0Er,t0uGvalho;so;so,zo;ll;a0Fe01hYiXlUoNrKuIyG;rLtyG;qi;chan2rG;ke,ns;ank5iem,oGyant;oks,wG;ne;gdan5nIruya,su,uchaHyKziG;c,n5;rd;darGik;enG;ko;ov;aGond15;nco,zG;ev4;ancFshw16;a08oGuiy2;umGwmG;ik;ckRethov1gu,ktPnNrG;gJisInG;ascoGds1;ni;ha;er,mG;anG;!n;gtGit7nP;ss3;asF;hi;er,hG;am;b4ch,ez,hRiley,kk0ldw8nMrIshHtAu0;es;ir;bInHtlGua;ett;es,i0;ieYosa;dGik;a9yoG;padhyG;ay;ra;k,ng;ic;bb0Acos09d07g04kht05lZnPrLsl2tJyG;aHd8;in;la;chis3kiG;ns3;aImstro6sl2;an;ng;ujo,ya;dJgelHsaG;ri;ovG;!a;ersJov,reG;aGjEws;ss1;en;en,on,s3;on;eksejEiyEmeiIvG;ar7es;ez;da;ev;arwHuilG;ar;al;ams,l0;er;ta;as",Ordinal:"true¦eBf7nin5s3t0zeroE;enDhir1we0;lfCn7;d,t3;e0ixt8;cond,vent7;et0th;e6ie7;i2o0;r0urt3;tie4;ft1rst;ight0lev1;e0h,ie1;en0;th",Cardinal:"true¦bEeBf5mEnine7one,s4t0zero;en,h2rDw0;e0o;lve,n5;irt6ousands,ree;even2ix2;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illions",Multiple:"true¦b3hundred,m3qu2se1t0;housand,r2;pt1xt1;adr0int0;illion",City:"true¦0:74;1:61;2:6G;3:6J;4:5S;a68b53c4Id48e44f3Wg3Hh39i31j2Wk2Fl23m1Mn1Co19p0Wq0Ur0Os05tRuQvLwDxiBy9z5;a7h5i4Muri4O;a5e5ongsh0;ng3H;greb,nzib5G;ang2e5okoha3Sunfu;katerin3Hrev0;a5n0Q;m5Hn;arsBeAi6roclBu5;h0xi,zh5P;c7n5;d5nipeg,terth4;hoek,s1L;hi5Zkl3A;l63xford;aw;a8e6i5ladivost5Molgogr6L;en3lni6S;ni22r5;o3saill4N;lenc4Wncouv3Sr3ughn;lan bat1Crumqi,trecht;aFbilisi,eEheDiBo9r7u5;l21n63r5;in,ku;i5ondh62;es51poli;kyo,m2Zron1Pulo5;n,uS;an5jua3l2Tmisoa6Bra3;j4Tshui; hag62ssaloni2H;gucigal26hr0l av1U;briz,i6llinn,mpe56ng5rtu,shk2R;i3Esh0;an,chu1n0p2Eyu0;aEeDh8kopje,owe1Gt7u5;ra5zh4X;ba0Ht;aten is55ockholm,rasbou67uttga2V;an8e6i5;jiazhua1llo1m5Xy0;f50n5;ya1zh4H;gh3Kt4Q;att45o1Vv44;cramen16int ClBn5o paulo,ppo3Rrajevo; 7aa,t5;a 5o domin3E;a3fe,m1M;antonio,die3Cfrancisco,j5ped3Nsalvad0J;o5u0;se;em,t lake ci5Fz25;lou58peters24;a9e8i6o5;me,t59;ga,o5yadh;! de janei3F;cife,ims,nn3Jykjavik;b4Sip4lei2Inc2Pwalpindi;ingdao,u5;ez2i0Q;aFeEhDiCo9r7u6yong5;ya1;eb59ya1;a5etor3M;g52to;rt5zn0; 5la4Co;au prin0Melizabe24sa03;ls3Prae5Atts26;iladelph3Gnom pe1Aoenix;ki1tah tik3E;dua,lerYnaji,r4Ot5;na,r32;ak44des0Km1Mr6s5ttawa;a3Vlo;an,d06;a7ew5ing2Fovosibir1Jyc; 5cast36;del24orlea44taip14;g8iro4Wn5pl2Wshv33v0;ch6ji1t5;es,o1;a1o1;a6o5p4;ya;no,sa0W;aEeCi9o6u5;mb2Ani26sc3Y;gadishu,nt6s5;c13ul;evideo,pelli1Rre2Z;ami,l6n14s5;kolc,sissauga;an,waukee;cca,d5lbour2Mmph41ndo1Cssi3;an,ell2Xi3;cau,drAkass2Sl9n8r5shh4A;aca6ib5rakesh,se2L;or;i1Sy;a4EchFdal0Zi47;mo;id;aDeAi8o6u5vSy2;anMckn0Odhia3;n5s angel26;d2g bea1N;brev2Be3Lma5nz,sb2verpo28;!ss27; ma39i5;c5pzig;est16; p6g5ho2Wn0Cusan24;os;az,la33;aHharFiClaipeBo9rak0Du7y5;iv,o5;to;ala lump4n5;mi1sh0;hi0Hlka2Xpavog4si5wlo2;ce;da;ev,n5rkuk;gst2sha5;sa;k5toum;iv;bHdu3llakuric0Qmpa3Fn6ohsiu1ra5un1Iwaguc0Q;c0Pj;d5o,p4;ah1Ty;a7e6i5ohannesV;l1Vn0;dd36rusalem;ip4k5;ar2H;bad0mph1OnArkutUs7taXz5;mir,tapala5;pa;fah0l6tanb5;ul;am2Zi2H;che2d5;ianap2Mo20;aAe7o5yder2W; chi mi5ms,nolulu;nh;f6lsin5rakli2;ki;ei;ifa,lifax,mCn5rb1Dva3;g8nov01oi;aFdanEenDhCiPlasgBo9raz,u5;a5jr23;dal6ng5yaquil;zh1J;aja2Oupe;ld coa1Bthen5;bu2S;ow;ent;e0Uoa;sk;lw7n5za;dhi5gt1E;nag0U;ay;aisal29es,o8r6ukuya5;ma;ankfu5esno;rt;rt5sh0; wor6ale5;za;th;d5indhov0Pl paso;in5mont2;bur5;gh;aBe8ha0Xisp4o7resd0Lu5;b5esseldorf,nkirk,rb0shanbe;ai,l0I;ha,nggu0rtmu13;hradSl6nv5troit;er;hi;donghIe6k09l5masc1Zr es sala1KugavpiY;i0lU;gu,je2;aJebu,hAleve0Vo5raio02uriti1Q;lo7n6penhag0Ar5;do1Ok;akKst0V;gUm5;bo;aBen8i6ongqi1ristchur5;ch;ang m7ca5ttago1;go;g6n5;ai;du,zho1;ng5ttogr14;ch8sha,zh07;gliari,i9lga8mayenJn6pe town,r5tanO;acCdiff;ber1Ac5;un;ry;ro;aWeNhKirmingh0WoJr9u5;chareTdapeTenos air7r5s0tu0;g5sa;as;es;a9is6usse5;ls;ba6t5;ol;ne;sil8tisla7zzav5;il5;le;va;ia;goZst2;op6ubaneshw5;ar;al;iCl9ng8r5;g6l5n;in;en;aluru,hazi;fa6grade,o horizon5;te;st;ji1rut;ghd0BkFn9ot8r7s6yan n4;ur;el,r07;celo3i,ranquil09;ou;du1g6ja lu5;ka;alo6k5;ok;re;ng;ers5u;field;a05b02cc01ddis aba00gartaZhmedXizawl,lSmPnHqa00rEsBt7uck5;la5;nd;he7l5;an5;ta;ns;h5unci2;dod,gab5;at;li5;ngt2;on;a8c5kaOtwerp;hora6o3;na;ge;h7p5;ol5;is;eim;aravati,m0s5;terd5;am; 7buquerq6eppo,giers,ma5;ty;ue;basrah al qadim5mawsil al jadid5;ah;ab5;ad;la;ba;ra;idj0u dha5;bi;an;lbo6rh5;us;rg",Region:"true¦0:2O;1:2L;2:2U;3:2F;a2Sb2Fc21d1Wes1Vf1Tg1Oh1Ki1Fj1Bk16l13m0Sn09o07pYqVrSsJtEuBverAw6y4zacatec2W;akut0o0Fu4;cat1k09;a5est 4isconsin,yomi1O;bengal,virgin0;rwick3shington4;! dc;acruz,mont;dmurt0t4;ah,tar4; 2Pa12;a6e5laxca1Vripu21u4;scaEva;langa2nnessee,x2J;bas10m4smQtar29;aulip2Hil nadu;a9elang07i7o5taf16u4ylh1J;ff02rr09s1E;me1Gno1Uuth 4;cZdY;ber0c4kkim,naloa;hu1ily;n5rawak,skatchew1xo4;ny; luis potosi,ta catari2;a4hodeA;j4ngp0C;asth1shahi;ingh29u4;e4intana roo;bec,en6retaro;aAe6rince edward4unjab; i4;sl0G;i,n5r4;ak,nambu0F;a0Rnsylv4;an0;ha0Pra4;!na;axa0Zdisha,h4klaho21ntar4reg7ss0Dx0I;io;aLeEo6u4;evo le4nav0X;on;r4tt18va scot0;f9mandy,th4; 4ampton3;c6d5yo4;rk3;ako1O;aroli2;olk;bras1Nva0Dw4; 6foundland4;! and labrad4;or;brunswick,hamp3jers5mexiTyork4;! state;ey;galPyarit;aAeghala0Mi6o4;nta2r4;dov0elos;ch6dlanDn5ss4zor11;issippi,ouri;as geraPneso18;ig1oac1;dhy12harasht0Gine,lac07ni5r4ssachusetts;anhao,i el,ylG;p4toba;ur;anca3e4incoln3ouisI;e4iR;ds;a6e5h4omi;aka06ul2;dah,lant1ntucky,ra01;bardino,lmyk0ns0Qr4;achay,el0nata0X;alis6har4iangxi;kh4;and;co;daho,llino7n4owa;d5gush4;et0;ia2;is;a6ert5i4un1;dalFm0D;ford3;mp3rya2waii;ansu,eorg0lou7oa,u4;an4izhou,jarat;ajuato,gdo4;ng;cester3;lori4uji1;da;sex;ageUe7o5uran4;go;rs4;et;lawaMrby3;aFeaEh9o4rim08umbr0;ahui7l6nnectic5rsi4ventry;ca;ut;i03orado;la;e5hattisgarh,i4uvash0;apRhuahua;chn5rke4;ss0;ya;ra;lGm4;bridge3peche;a9ihar,r8u4;ck4ryat0;ingham3;shi4;re;emen,itish columb0;h0ja cal8lk7s4v7;hkorto4que;st1;an;ar0;iforn0;ia;dygHguascalientes,lBndhr9r5ss4;am;izo2kans5un4;achal 7;as;na;a 4;pradesh;a6ber5t4;ai;ta;ba5s4;ka;ma;ea",Place:"true¦0:4T;1:4V;2:44;3:4B;4:3I;a4Eb3Gc2Td2Ge26f25g1Vh1Ji1Fk1Cl14m0Vn0No0Jp08r04sTtNuLvJw7y5;a5o0Syz;kut1Bngtze;aDeChitBi9o5upatki,ycom2P;ki26o5;d5l1B;b3Ps5;i4to3Y;c0SllowbroCn5;c2Qgh2;by,chur1P;ed0ntw3Gs22;ke6r3St5;erf1f1; is0Gf3V;auxha3Mirgin is0Jost5;ok;laanbaatar,pto5xb3E;n,wn;a9eotihuac43h7ive49o6ru2Nsarskoe selo,u5;l2Dzigo47;nto,rquay,tt2J;am3e 5orn3E;bronx,hamptons;hiti,j mah0Iu1N;aEcotts bluff,eCfo,herbroQoApring9t7u5yd2F;dbu1Wn5;der03set3B;aff1ock2Nr5;atf1oud;hi37w24;ho,uth5; 1Iam1Zwo3E;a5i2O;f2Tt0;int lawrence riv3Pkhal2D;ayleigh,ed7i5oc1Z;chmo1Eo gran4ver5;be1Dfr09si4; s39cliffe,hi2Y;aCe9h8i5ompeii,utn2;c6ne5tcai2T; 2Pc0G;keri13t0;l,x;k,lh2mbr6n5r2J;n1Hzance;oke;cif38pahanaumokuak30r5;k5then0;si4w1K;ak7r6x5;f1l2X;ange county,d,f1inoco;mTw1G;e8i1Uo5;r5tt2N;th5wi0E; 0Sam19;uschwanste1Pw5; eng6a5h2market,po36;rk;la0P;a8co,e6i5uc;dt1Yll0Z;adow5ko0H;lands;chu picchu,gad2Ridsto1Ql8n7ple6r5;kh2; g1Cw11;hatt2Osf2B;ibu,t0ve1Z;a8e7gw,hr,in5owlOynd02;coln memori5dl2C;al;asi4w3;kefr7mbe1On5s,x;ca2Ig5si05;f1l27t0;ont;azan kreml14e6itchen2Gosrae,rasnoyar5ul;sk;ns0Hs1U;ax,cn,lf1n6ps5st;wiN;d5glew0Lverness;ian27ochina;aDeBi6kg,nd,ov5unti2H;d,enweep;gh6llc5;reL;bu03l5;and5;!s;r5yw0C;ef1tf1;libu24mp6r5stings;f1lem,row;stead,t0;aDodavari,r5uelph;avenAe5imsS;at 8en5; 6f1Fwi5;ch;acr3vall1H;brita0Flak3;hur5;st;ng3y villa0W;airhavHco,ra;aAgli9nf17ppi8u7ver6x5;et1Lf1;glad3t0;rope,st0;ng;nt0;rls1Ls5;t 5;e5si4;nd;aCe9fw,ig8o7ryd6u5xb;mfri3nstab00rh2tt0;en;nca18rcKv19wnt0B;by;n6r5vonpo1D;ry;!h2;nu8r5;l6t5;f1moor;ingt0;be;aLdg,eIgk,hClBo5royd0;l6m5rnwa0B;pt0;c7lingw6osse5;um;ood;he0S;earwat0St;a8el6i5uuk;chen itza,mney ro07natSricahua;m0Zt5;enh2;mor5rlottetPth2;ro;dar 5ntervilA;breaks,faZg5;rove;ld9m8r5versh2;lis6rizo pla5;in;le;bLpbellf1;weQ;aZcn,eNingl01kk,lackLolt0r5uckV;aGiAo5;ckt0ok5wns cany0;lyn,s5;i4to5;ne;de;dge6gh5;am,t0;n6t5;own;or5;th;ceb6m5;lNpt0;rid5;ge;bu5pool,wa8;rn;aconsfEdf1lBr9verly7x5;hi5;ll; hi5;lls;wi5;ck; air,l5;ingh2;am;ie5;ld;ltimore,rnsl6tters5;ea;ey;bLct0driadic,frica,ginJlGmFn9rc8s7tl6yleOzor3;es;!ant8;hcroft,ia; de triomphe,t6;adyr,ca8dov9tarct5;ic5; oce5;an;st5;er;ericas,s;be6dersh5hambra,list0;ot;rt0;cou5;rt;bot7i5;ngd0;on;sf1;ord",Country:"true¦0:38;1:2L;2:3B;a2Xb2Ec22d1Ye1Sf1Mg1Ch1Ai14j12k0Zl0Um0Gn05om2pZqat1KrXsKtCu7v5wal4yemTz3;a25imbabwe;es,lis and futu2Y;a3enezue32ietnam;nuatu,tican city;gTk6nited 4ruXs3zbeE; 2Ca,sr;arab emirat0Kkingdom,states3;! of am2Y;!raiV;a8haCimor les0Co7rinidad 5u3;nis0rk3valu;ey,me2Zs and caic1V;and t3t3;oba1L;go,kel10nga;iw2ji3nz2T;ki2V;aDcotl1eCi9lov8o6pa2Dri lanka,u5w3yr0;az3edAitzerl1;il1;d2riname;lomon1Xmal0uth 3;afr2KkMsud2;ak0en0;erra leoFn3;gapo1Yt maart3;en;negLrb0ychellZ;int 3moa,n marino,udi arab0;hele26luc0mart21;epublic of ir0Eom2Euss0w3;an27;a4eIhilippinUitcairn1Mo3uerto riN;l1rtugF;ki2Dl4nama,pua new0Vra3;gu7;au,esti3;ne;aBe9i7or3;folk1Ith4w3;ay; k3ern mariana1D;or0O;caragua,ger3ue;!ia;p3ther1Aw zeal1;al;mib0u3;ru;a7exi6icro0Bo3yanm06;ldova,n3roc5zambA;a4gol0t3;enegro,serrat;co;cAdagasc01l7r5urit4yot3;te;an0i16;shall0Xtin3;ique;a4div3i,ta;es;wi,ys0;ao,ed02;a6e5i3uxembourg;b3echtenste12thu1G;er0ya;ban0Isotho;os,tv0;azakh1Fe4iriba04o3uwait,yrgyz1F;rXsovo;eling0Knya;a3erG;ma16p2;c7nd6r4s3taly,vory coast;le of m2rael;a3el1;n,q;ia,oJ;el1;aiTon3ungary;dur0Ng kong;aBermany,ha0QibraltAre8u3;a6ern5inea3ya0P;! biss3;au;sey;deloupe,m,tema0Q;e3na0N;ce,nl1;ar;bUmb0;a7i6r3;ance,ench 3;guia0Epoly3;nes0;ji,nl1;lklandUroeU;ast tim7cu6gypt,l salv6ngl1quatorial4ritr5st3thiop0;on0; guin3;ea;ad3;or;enmark,jibou5ominica4r con3;go;!n C;ti;aBentral african Ah8o5roat0u4yprRzech3; 9ia;ba,racao;c4lo3morQngo brazzaville,okGsta r04te de ivoiL;mb0;osE;i3ristmasG;le,na;republic;m3naUpe verde,ymanA;bod0ero3;on;aGeDhut2o9r5u3;lgar0r3;kina faso,ma,undi;azil,itish 3unei;virgin3; is3;lands;liv0nai5snia and herzegoviHtswaHuvet3; isl1;and;re;l3n8rmuG;ar3gium,ize;us;h4ngladesh,rbad3;os;am4ra3;in;as;fghaGlDmBn6r4ustr3zerbaij2;al0ia;genti3men0uba;na;dorra,g5t3;arct7igua and barbu3;da;o3uil3;la;er3;ica;b3ger0;an0;ia;ni3;st2;an",FirstName:"true¦aTblair,cQdOfrancoZgabMhinaLilya,jHkClBm6ni4quinn,re3s0;h0umit,yd;ay,e0iloh;a,lby;g9ne;co,ko0;!s;a1el0ina,org6;!okuhF;ds,naia,r1tt0xiB;i,y;ion,lo;ashawn,eif,uca;a3e1ir0rM;an;lsFn0rry;dall,yat5;i,sD;a0essIie,ude;i1m0;ie,mG;me;ta;rie0y;le;arcy,ev0;an,on;as1h0;arl8eyenne;ey,sidy;drien,kira,l4nd1ubr0vi;ey;i,r0;a,e0;a,y;ex2f1o0;is;ie;ei,is",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦dec0february,july,nov0octo1sept0;em0;ber",Date:"true¦ago,on4som4t1week0yesterd5; end,ends;mr1o0;d2morrow;!w;ed0;ay",Duration:"true¦centurAd8h7m5q4se3w1y0;ear8r8;eek0k7;!end,s;ason,c5;tr,uarter;i0onth3;llisecond2nute2;our1r1;ay0ecade0;!s;ies,y",FemaleName:"true¦0:J7;1:JB;2:IJ;3:IK;4:J1;5:IO;6:JS;7:JO;8:HB;9:JK;A:H4;B:I2;C:IT;D:JH;E:IX;F:BA;G:I4;aGTbFLcDRdD0eBMfB4gADh9Ti9Gj8Dk7Cl5Wm48n3Lo3Hp33qu32r29s15t0Eu0Cv02wVxiTyOzH;aLeIineb,oHsof3;e3Sf3la,ra;h2iKlIna,ynH;ab,ep;da,ma;da,h2iHra;nab;aKeJi0FolB7uIvH;et8onDP;i0na;le0sen3;el,gm3Hn,rGLs8W;aoHme0nyi;m5XyAD;aMendDZhiDGiH;dele9lJnH;if48niHo0;e,f47;a,helmi0lHma;a,ow;ka0nB;aNeKiHusa5;ck84kIl8oleAviH;anFenJ4;ky,toriBK;da,lA8rHs0;a,nHoniH9;a,iFR;leHnesH9;nILrH;i1y;g9rHs6xHA;su5te;aYeUhRiNoLrIuHy2;i,la;acJ3iHu0J;c3na,sH;hFta;nHr0F;iFya;aJffaEOnHs6;a,gtiH;ng;!nFSra;aIeHomasi0;a,l9Oo8Ares1;l3ndolwethu;g9Fo88rIssH;!a,ie;eHi,ri7;sa,za;bOlMmKnIrHs6tia0wa0;a60yn;iHya;a,ka,s6;arFe2iHm77ra;!ka;a,iH;a,t6;at6it6;a0Ecarlett,e0AhWiSkye,neza0oQri,tNuIyH;bIGlvi1;ha,mayIJniAsIzH;an3Net8ie,y;anHi7;!a,e,nH;aCe;aIeH;fan4l5Dphan6E;cI5r5;b3fiAAm0LnHphi1;d2ia,ja,ya;er2lJmon1nIobh8QtH;a,i;dy;lETv3;aMeIirHo0risFDy5;a,lDM;ba,e0i5lJrH;iHr6Jyl;!d8Ifa;ia,lDZ;hd,iMki2nJrIu0w0yH;la,ma,na;i,le9on,ron,yn;aIda,ia,nHon;a,on;!ya;k6mH;!aa;lJrItaye82vH;da,inj;e0ife;en1i0ma;anA9bLd5Oh1SiBkKlJmInd2rHs6vannaC;aCi0;ant6i2;lDOma,ome;ee0in8Tu2;in1ri0;a05eZhXiUoHuthDM;bScRghQl8LnPsJwIxH;anB3ie,y;an,e0;aIeHie,lD;ann7ll1marDGtA;!lHnn1;iHyn;e,nH;a,dF;da,i,na;ayy8G;hel67io;bDRerAyn;a,cIkHmas,nFta,ya;ki,o;h8Xki;ea,iannGMoH;da,n1P;an0bJemFgi0iInHta,y0;a8Bee;han86na;a,eH;cHkaC;a,ca;bi0chIe,i0mo0nHquETy0;di,ia;aERelHiB;!e,le;een4ia0;aPeOhMiLoJrHute6A;iHudenCV;scil3LyamvaB;lHrt3;i0ly;a,paluk;ilome0oebe,ylH;is,lis;ggy,nelope,r5t2;ige,m0VnKo5rvaDMtIulH;a,et8in1;ricHt4T;a,e,ia;do2i07;ctav3dIfD3is6ksa0lHphD3umC5yunbileg;a,ga,iv3;eHvAF;l3t8;aWeUiMoIurHy5;!ay,ul;a,eJor,rIuH;f,r;aCeEma;ll1mi;aNcLhariBQkKlaJna,sHta,vi;anHha;ur;!y;a,iDZki;hoGk9YolH;a,e4P;!mh;hir,lHna,risDEsreE;!a,iDDlBV;asuMdLh3i6Dl5nKomi7rgEVtH;aHhal4;lHs6;i1ya;cy,et8;e9iF0ya;nngu2X;a0Ackenz4e02iMoJrignayani,uriDJyH;a,rH;a,iOlNna,tG;bi0i2llBJnH;a,iH;ca,ka,qD9;a,cUdo4ZkaTlOmi,nMrItzi,yH;ar;aJiIlH;anET;am;!l,nB;dy,eHh,n4;nhGrva;aKdJe0iCUlH;iHy;cent,e;red;!gros;!e5;ae5hH;ae5el3Z;ag5DgNi,lKrH;edi7AiIjem,on,yH;em,l;em,sCG;an4iHliCF;nHsCJ;a,da;!an,han;b09cASd07e,g05ha,i04ja,l02n00rLsoum5YtKuIv84xBKyHz4;bell,ra,soBB;d7rH;a,eE;h8Gild1t4;a,cUgQiKjor4l7Un4s6tJwa,yH;!aHbe6Xja9lAE;m,nBL;a,ha,in1;!aJbCGeIja,lDna,sHt63;!a,ol,sa;!l1D;!h,mInH;!a,e,n1;!awit,i;arJeIie,oHr48ueri8;!t;!ry;et46i3B;el4Xi7Cy;dHon,ue5;akranAy;ak,en,iHlo3S;a,ka,nB;a,re,s4te;daHg4;!l3E;alDd4elHge,isDJon0;ei9in1yn;el,le;a0Ne0CiXoQuLyH;d3la,nH;!a,dIe2OnHsCT;!a,e2N;a,sCR;aD4cJel0Pis1lIna,pHz;e,iA;a,u,wa;iHy;a0Se,ja,l2NnB;is,l1UrItt1LuHvel4;el5is1;aKeIi7na,rH;aADi7;lHn1tA;ei;!in1;aTbb9HdSepa,lNnKsJvIzH;!a,be5Ret8z4;!ia;a,et8;!a,dH;a,sHy;ay,ey,i,y;a,iJja,lH;iHy;aA8e;!aH;!nF;ia,ya;!nH;!a,ne;aPda,e0iNjYla,nMoKsJtHx93y5;iHt4;c3t3;e2PlCO;la,nHra;a,ie,o2;a,or1;a,gh,laH;!ni;!h,nH;a,d2e,n5V;cOdon9DiNkes6mi9Gna,rMtJurIvHxmi,y5;ern1in3;a,e5Aie,yn;as6iIoH;nya,ya;fa,s6;a,isA9;a,la;ey,ie,y;a04eZhXiOlASoNrJyH;lHra;a,ee,ie;istHy6I;a,en,iIyH;!na;!e,n5F;nul,ri,urtnB8;aOerNlB7mJrHzzy;a,stH;en,in;!berlImernH;aq;eHi,y;e,y;a,stE;!na,ra;aHei2ongordzol;dij1w5;el7UiKjsi,lJnIrH;a,i,ri;d2na,za;ey,i,lBLs4y;ra,s6;biAcARdiat7MeBAiSlQmPnyakuma1DrNss6NtKviAyH;!e,lH;a,eH;e,i8T;!a6HeIhHi4TlDri0y;ar8Her8Hie,leErBAy;!lyn8Ori0;a,en,iHl5Xoli0yn;!ma,nFs95;a5il1;ei8Mi,lH;e,ie;a,tl6O;a0AeZiWoOuH;anMdLlHst88;es,iH;a8NeHs8X;!n9tH;!a,te;e5Mi3My;a,iA;!anNcelDdMelGhan7VleLni,sIva0yH;a,ce;eHie;fHlDph7Y;a,in1;en,n1;i7y;!a,e,n45;lHng;!i1DlH;!i1C;anNle0nKrJsH;i8JsH;!e,i8I;i,ri;!a,elGif2CnH;a,et8iHy;!e,f2A;a,eJiInH;a,eIiH;e,n1;!t8;cMda,mi,nIque4YsminFvie2y9zH;min7;a7eIiH;ce,e,n1s;!lHs82t0F;e,le;inIk6HlDquelH;in1yn;da,ta;da,lRmPnOo0rNsIvaHwo0zaro;!a0lu,na;aJiIlaHob89;!n9R;do2;belHdo2;!a,e,l3B;a7Ben1i0ma;di2es,gr72ji;a9elBogH;en1;a,e9iHo0se;a0na;aSeOiJoHus7Kyacin2C;da,ll4rten24snH;a,i9U;lImaH;ri;aIdHlaI;a,egard;ry;ath1BiJlInrietArmi9sH;sa,t1A;en2Uga,mi;di;bi2Fil8MlNnMrJsItHwa,yl8M;i5Tt4;n60ti;iHmo51ri53;etH;!te;aCnaC;a,ey,l4;a02eWiRlPoNrKunJwH;enHyne1R;!dolD;ay,el;acieIetHiselB;a,chE;!la;ld1CogooH;sh;adys,enHor3yn2K;a,da,na;aKgi,lIna,ov8EselHta;a,e,le;da,liH;an;!n0;mLnJorgIrH;ald5Si,m3Etrud7;et8i4X;a,eHna;s29vieve;ma;bIle,mHrnet,yG;al5Si5;iIrielH;a,l1;!ja;aTeQiPlorOoz3rH;anJeIiH;da,eB;da,ja;!cH;esIiHoi0P;n1s66;!ca;a,enc3;en,o0;lIn0rnH;anB;ec3ic3;jr,nArKtHy7;emIiHma,oumaA;ha,ma,n;eh;ah,iBrah,za0;cr4Rd0Re0Qi0Pk0Ol07mXn54rUsOtNuMvHwa;aKelIiH;!e,ta;inFyn;!a;!ngel4V;geni1ni47;h5Yien9ta;mLperanKtH;eIhHrel5;er;l31r7;za;a,eralB;iHma,ne4Lyn;cHka,n;a,ka;aPeNiKmH;aHe21ie,y;!li9nuH;elG;lHn1;e7iHy;a,e,ja;lHrald;da,y;!nue5;aWeUiNlMma,no2oKsJvH;a,iH;na,ra;a,ie;iHuiH;se;a,en,ie,y;a0c3da,e,f,nMsJzaH;!betHveA;e,h;aHe,ka;!beH;th;!a,or;anor,nH;!a,i;!in1na;ate1Rta;leEs6;vi;eIiHna,wi0;e,th;l,n;aYeMh3iLjeneKoH;lor5Vminiq4Ln3FrHtt4;a,eEis,la,othHthy;ea,y;ba;an09naCon9ya;anQbPde,eOiMlJmetr3nHsir5M;a,iH;ce,se;a,iIla,orHphi9;es,is;a,l6F;dHrdH;re;!d5Ena;!b2ForaCraC;a,d2nH;!a,e;hl3i0l0GmNnLphn1rIvi1WyH;le,na;a,by,cIia,lH;a,en1;ey,ie;a,et8iH;!ca,el1Aka,z;arHia;is;a0Re0Nh04i02lUoJristIynH;di,th3;al,i0;lPnMrIurH;tn1D;aJd2OiHn2Ori9;!nH;a,e,n1;!l4;cepci5Cn4sH;tanHuelo;ce,za;eHleE;en,t8;aJeoIotH;il54;!pat2;ir7rJudH;et8iH;a,ne;a,e,iH;ce,sZ;a2er2ndH;i,y;aReNloe,rH;isJyH;stH;al;sy,tH;a1Sen,iHy;an1e,n1;deJlseIrH;!i7yl;a,y;li9;nMrH;isKlImH;ai9;a,eHot8;n1t8;!sa;d2elGtH;al,elG;cIlH;es8i47;el3ilH;e,ia,y;itlYlXmilWndVrMsKtHy5;aIeIhHri0;er1IleErDy;ri0;a38sH;a37ie;a,iOlLmeJolIrH;ie,ol;!e,in1yn;lHn;!a,la;a,eIie,otHy;a,ta;ne,y;na,s1X;a0Ii0I;a,e,l1;isAl4;in,yn;a0Ke02iZlXoUrH;andi7eRiJoIyH;an0nn;nwDoke;an3HdgMgiLtH;n31tH;!aInH;ey,i,y;ny;d,t8;etH;!t7;an0e,nH;da,na;bbi7glarIlo07nH;iAn4;ka;ancHythe;a,he;an1Clja0nHsm3M;iAtH;ou;aWcVlinUniArPssOtJulaCvH;!erlH;ey,y;hJsy,tH;e,iHy7;e,na;!anH;ie,y;!ie;nItHyl;ha,ie;adIiH;ce;et8i9;ay,da;ca,ky;!triH;ce,z;rbJyaH;rmH;aa;a2o2ra;a2Ub2Od25g21i1Sj5l18m0Zn0Boi,r06sWtVuPvOwa,yIzH;ra,u0;aKes6gJlIn,seH;!l;in;un;!nH;a,na;a,i2K;drLguJrIsteH;ja;el3;stH;in1;a,ey,i,y;aahua,he0;hIi2Gja,miAs2DtrH;id;aMlIraqHt21;at;eIi7yH;!n;e,iHy;gh;!nH;ti;iJleIo6piA;ta;en,n1t8;aHelG;!n1J;a01dje5eZgViTjRnKohito,toHya;inet8nH;el5ia;te;!aKeIiHmJ;e,ka;!mHtt7;ar4;!belIliHmU;sa;!l1;a,eliH;ca;ka,sHta;a,sa;elHie;a,iH;a,ca,n1qH;ue;!tH;a,te;!bImHstasiMya;ar3;el;aLberKeliJiHy;e,l3naH;!ta;a,ja;!ly;hGiIl3nB;da;a,ra;le;aWba,ePiMlKthJyH;a,c3sH;a,on,sa;ea;iHys0N;e,s0M;a,cIn1sHza;a,e,ha,on,sa;e,ia,ja;c3is6jaKksaKna,sJxH;aHia;!nd2;ia,saH;nd2;ra;ia;i0nIyH;ah,na;a,is,naCoud;la;c6da,leEmNnLsH;haClH;inHyY;g,n;!h;a,o,slH;ey;ee;en;at6g4nIusH;ti0;es;ie;aWdiTelMrH;eJiH;anMenH;a,e,ne;an0;na;!aLeKiIyH;nn;a,n1;a,e;!ne;!iH;de;e,lDsH;on;yn;!lH;i9yn;ne;aKbIiHrL;!e,gaK;ey,i7y;!e;gaH;il;dKliyJradhIs6;ha;ya;ah;a,ya",Honorific:"true¦director1field marsh2lieutenant1rear0sergeant major,vice0; admir1; gener0;al","Adj|Gerund":"true¦0:3F;1:3H;2:31;3:2X;4:35;5:33;6:3C;7:2Z;8:36;9:29;a33b2Tc2Bd1Te1If19g12h0Zi0Rl0Nm0Gnu0Fo0Ap04rYsKtEuBvAw1Ayiel3;ar6e08;nBpA;l1Rs0B;fol3n1Zsett2;aEeDhrBi4ouc7rAwis0;e0Bif2oub2us0yi1;ea1SiA;l2vi1;l2mp0rr1J;nt1Vxi1;aMcreec7enten2NhLkyrocke0lo0Vmi2oJpHtDuBweA;e0Ul2;pp2ArA;gi1pri5roun3;aBea8iAri2Hun9;mula0r4;gge4rA;t2vi1;ark2eAraw2;e3llb2F;aAot7;ki1ri1;i9oc29;dYtisf6;aEeBive0oAus7;a4l2;assu4defi9fres7ig9juve07mai9s0vAwar3;ea2italiAol1G;si1zi1;gi1ll6mb2vi1;a6eDier23lun1VrAun2C;eBoA;mi5vo1Z;ce3s5vai2;n3rpleA;xi1;ffCpWutBverAwi1;arc7lap04p0Pri3whel8;goi1l6st1J;en3sA;et0;m2Jrtu4;aEeDiCoBuAyst0L;mb2;t1Jvi1;s5tiga0;an1Rl0n3smeri26;dAtu4;de9;aCeaBiAo0U;fesa0Tvi1;di1ni1;c1Fg19s0;llumiGmFnArri0R;cDfurHsCtBviA;go23ti1;e1Oimi21oxica0rig0V;pi4ul0;orpo20r0K;po5;na0;eaBorr02umilA;ia0;li1rtwar8;lFrA;atiDipCoBuelA;i1li1;undbrea10wi1;pi1;f6ng;a4ea8;a3etc7it0lEoCrBulfA;il2;ee1FighXust1L;rAun3;ebo3thco8;aCoA;a0wA;e4i1;mi1tte4;lectrJmHnExA;aCci0hBis0pA;an3lo3;aOila1B;c0spe1A;ab2coura0CdBergi13ga0Clive9ric7s02tA;hral2i0J;ea4u4;barras5er09pA;owe4;if6;aQeIiBrA;if0;sAzz6;aEgDhearCsen0tA;rAur11;ac0es5;te9;us0;ppoin0r8;biliGcDfi9gra3ligh0mBpres5sAvasG;erE;an3ea9orA;ali0L;a6eiBli9rA;ea5;vi1;ta0;maPri1s7un0zz2;aPhMlo5oAripp2ut0;mGnArrespon3;cer9fDspi4tA;inBrA;as0ibu0ol2;ui1;lic0u5;ni1;fDmCpA;eAromi5;l2ti1;an3;or0;aAil2;llenAnAr8;gi1;l8ptAri1;iva0;aff2eGin3lFoDrBuA;d3st2;eathtaAui5;ki1;gg2i2o8ri1unA;ci1;in3;co8wiA;lAtc7;de4;bsorVcOgonMlJmHnno6ppea2rFsA;pi4su4toA;nBun3;di1;is7;hi1;res0;li1;aFu5;si1;ar8lu4;ri1;mi1;iAzi1;zi1;cAhi1;eleDomA;moBpan6;yi1;da0;ra0;ti1;bi1;ng",Comparable:"true¦0:3C;1:3Q;2:3F;a3Tb3Cc33d2Te2Mf2Ag1Wh1Li1Fj1Ek1Bl13m0Xn0So0Rp0Iqu0Gr07sHtCug0vAw4y3za0Q;el10ouN;ary,e6hi5i3ry;ck0Cde,l3n1ry,se;d,y;ny,te;a3i3R;k,ry;a3erda2ulgar;gue,in,st;a6en2Xhi5i4ouZr3;anqu2Cen1ue;dy,g36me0ny;ck,rs28;ll,me,rt,wd3I;aRcaPeOhMiLkin0BlImGoEpDt6u4w3;eet,ift;b3dd0Wperfi21rre28;sta26t21;a8e7iff,r4u3;pUr1;a4ict,o3;ng;ig2Vn0N;a1ep,rn;le,rk,te0;e1Si2Vright0;ci1Yft,l3on,re;emn,id;a3el0;ll,rt;e4i3y;g2Mm0Z;ek,nd2T;ck24l0mp1L;a3iRrill,y;dy,l01rp;ve0Jxy;n1Jr3;ce,y;d,fe,int0l1Hv0V;a8e6i5o3ude;mantic,o19sy,u3;gh;pe,t1P;a3d,mo0A;dy,l;gg4iFndom,p3re,w;id;ed;ai2i3;ck,et;hoAi1Fl9o8r5u3;ny,r3;e,p11;egna2ic4o3;fouSud;ey,k0;liXor;ain,easa2;ny;dd,i0ld,ranL;aive,e5i4o3u14;b0Sisy,rm0Ysy;bb0ce,mb0R;a3r1w;r,t;ad,e5ild,o4u3;nda12te;ist,o1;a4ek,l3;low;s0ty;a8e7i6o3ucky;f0Jn4o15u3ve0w10y0N;d,sy;e0g;ke0l,mp,tt0Eve0;e1Qwd;me,r3te;ge;e4i3;nd;en;ol0ui19;cy,ll,n3;secu6t3;e3ima4;llege2rmedia3;te;re;aAe7i6o5u3;ge,m3ng1C;bYid;me0t;gh,l0;a3fXsita2;dy,rWv3;en0y;nd13ppy,r3;d3sh;!y;aFenEhCiBlAoofy,r3;a8e6i5o3ue0Z;o3ss;vy;m,s0;at,e3y;dy,n;nd,y;ad,ib,ooD;a2d1;a3o3;st0;tDuiS;u1y;aCeebBi9l8o6r5u3;ll,n3r0N;!ny;aCesh,iend0;a3nd,rmD;my;at,ir7;erce,nan3;ci9;le;r,ul3;ty;a6erie,sse4v3xtre0B;il;nti3;al;r4s3;tern,y;ly,th0;appZe9i5ru4u3;mb;nk;r5vi4z3;zy;ne;e,ty;a3ep,n9;d3f,r;!ly;agey,h8l7o5r4u3;dd0r0te;isp,uel;ar3ld,mmon,st0ward0zy;se;evKou1;e3il0;ap,e3;sy;aHiFlCoAr5u3;ff,r0sy;ly;a6i3oad;g4llia2;nt;ht;sh,ve;ld,un3;cy;a4o3ue;nd,o1;ck,nd;g,tt3;er;d,ld,w1;dy;bsu6ng5we3;so3;me;ry;rd",Adverb:"true¦a08b05d00eYfSheQinPjustOkinda,likewiZmMnJoEpCquite,r9s5t2u0very,well;ltima01p0; to,wards5;h1iny bit,o0wiO;o,t6;en,us;eldom,o0uch;!me1rt0; of;how,times,w0C;a1e0;alS;ndomRth05;ar excellenEer0oint blank; Lhaps;f3n0utright;ce0ly;! 0;ag05moX; courGten;ewJo0; longWt 0;onHwithstand9;aybe,eanwhiNore0;!ovT;! aboX;deed,steY;lla,n0;ce;or3u0;ck1l9rther0;!moK;ing; 0evK;exampCgood,suH;n mas0vI;se;e0irect2; 2fini0;te0;ly;juAtrop;ackward,y 0;far,no0; means,w; GbroFd nauseam,gEl7ny5part,s4t 2w0;ay,hi0;le;be7l0mo7wor7;arge,ea6; soon,i4;mo0way;re;l 3mo2ongsi1ready,so,togeth0ways;er;de;st;b1t0;hat;ut;ain;ad;lot,posteriori",Conjunction:"true¦aXbTcReNhowMiEjust00noBo9p8supposing,t5wh0yet;e1il0o3;e,st;n1re0thN; if,by,vM;evL;h0il,o;erefOo0;!uU;lus,rovided th9;r0therwiM;! not; mattEr,w0;! 0;since,th4w7;f4n0; 0asmuch;as mIcaForder t0;h0o;at;! 0;only,t0w0;hen;!ev3;ith2ven0;! 0;if,tB;er;o0uz;s,z;e0ut,y the time;cau1f0;ore;se;lt3nd,s 0;far1if,m0soon1t2;uch0; as;hou0;gh",Currency:"true¦$,aud,bQcOdJeurIfHgbp,hkd,iGjpy,kElDp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotyQł;en,uanP;af,of;h0t5;e0il5;k0q0;elK;oubleJp,upeeJ;e2ound st0;er0;lingG;n0soF;ceEnies;empi7i7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!os;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;e0ny;nt1;aht,itcoin0;!s",Determiner:"true¦aBboth,d9e6few,le5mu8neiDplenty,s4th2various,wh0;at0ich0;evC;a0e4is,ose;!t;everal,ome;!ast,s;a1l0very;!se;ch;e0u;!s;!n0;!o0y;th0;er","Adj|Present":"true¦a07b04cVdQeNfJhollIidRlEmCnarrIoBp9qua8r7s3t2uttFw0;aKet,ro0;ng,u08;endChin;e2hort,l1mooth,our,pa9tray,u0;re,speU;i2ow;cu6da02leSpaN;eplica01i02;ck;aHerfePr0;eseUime,omV;bscu1pen,wn;atu0e3odeH;re;a2e1ive,ow0;er;an;st,y;ow;a2i1oul,r0;ee,inge;rm;iIke,ncy,st;l1mpty,x0;emHpress;abo4ic7;amp,e2i1oub0ry,ull;le;ffu9re6;fu8libe0;raE;alm,l5o0;mpleCn3ol,rr1unterfe0;it;e0u7;ct;juga8sum7;ea1o0;se;n,r;ankru1lu0;nt;pt;li2pproxi0rticula1;ma0;te;ght","Person|Adj":"true¦b3du2earnest,frank,mi2r0san1woo1;an0ich,u1;dy;sty;ella,rown",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to,a;ight,ust;an,o0;uld",Verb:"true¦born,cannot,gonna,has,keep tabs,msg","Person|Verb":"true¦b8ch7dr6foster,gra5ja9lan4ma2ni9ollie,p1rob,s0wade;kip,pike,t5ue;at,eg,ier2;ck,r0;k,shal;ce;ce,nt;ew;ase,u1;iff,l1ob,u0;ck;aze,ossom","Person|Date":"true¦a2j0sep;an0une;!uary;p0ugust,v0;ril"};const mo=36,po="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",fo=po.split("").reduce((function(e,t,n){return e[t]=n,e}),{});var bo=function(e){if(void 0!==fo[e])return fo[e];let t=0,n=1,r=mo,o=1;for(;n=0;n--,o*=mo){let r=e.charCodeAt(n)-48;r>10&&(r-=7),t+=r*o}return t};const vo=function(e,t,n){const r=bo(t);return r{let a=e.nodes[r];"!"===a[0]&&(t.push(o),a=a.slice(1));const i=a.split(/([A-Z0-9,]+)/g);for(let a=0;a{const t=function(e){if(!e)return{};const t=e.split("|").reduce(((e,t)=>{const n=t.split("¦");return e[n[0]]=n[1],e}),{}),n={};return Object.keys(t).forEach((function(e){const r=yo(t[e]);"true"===e&&(e=!0);for(let t=0;t{if(jo[t]=e,"Noun|Verb"===e){const e=Ao(t,xo);jo[e]="Plural|Verb"}})):Object.keys(t).forEach((t=>{No[t]=e}))})),[":(",":)",":P",":p",":O",";(",";)",";P",";p",";O",":3",":|",":/",":\\",":$",":*",":@",":-(",":-)",":-P",":-p",":-O",":-3",":-|",":-/",":-\\",":-$",":-*",":-@",":^(",":^)",":^P",":^p",":^O",":^3",":^|",":^/",":^\\",":^$",":^*",":^@","):","(:","$:","*:",")-:","(-:","$-:","*-:",")^:","(^:","$^:","*^:","<3","No[e]="Emoticon")),delete No[""],delete No.null,delete No[" "];const Io="Singular";var To={beforeTags:{Determiner:Io,Possessive:Io,Acronym:Io,Noun:Io,Adjective:Io,PresentTense:Io,Gerund:Io,PastTense:Io,Infinitive:Io,Date:Io,Ordinal:Io,Demonym:Io},afterTags:{Value:Io,Modal:Io,Copula:Io,PresentTense:Io,PastTense:Io,Demonym:Io,Actor:Io},beforeWords:{the:Io,with:Io,without:Io,of:Io,for:Io,any:Io,all:Io,on:Io,cut:Io,cuts:Io,increase:Io,decrease:Io,raise:Io,drop:Io,save:Io,saved:Io,saves:Io,make:Io,makes:Io,made:Io,minus:Io,plus:Io,than:Io,another:Io,versus:Io,neither:Io,about:Io,favorite:Io,best:Io,daily:Io,weekly:Io,linear:Io,binary:Io,mobile:Io,lexical:Io,technical:Io,computer:Io,scientific:Io,security:Io,government:Io,popular:Io,formal:Io,no:Io,more:Io,one:Io,let:Io,her:Io,his:Io,their:Io,our:Io,us:Io,sheer:Io,monthly:Io,yearly:Io,current:Io,previous:Io,upcoming:Io,last:Io,next:Io,main:Io,initial:Io,final:Io,beginning:Io,end:Io,top:Io,bottom:Io,future:Io,past:Io,major:Io,minor:Io,side:Io,central:Io,peripheral:Io,public:Io,private:Io},afterWords:{of:Io,system:Io,aid:Io,method:Io,utility:Io,tool:Io,reform:Io,therapy:Io,philosophy:Io,room:Io,authority:Io,says:Io,said:Io,wants:Io,wanted:Io,is:Io,did:Io,do:Io,can:Io,wise:Io}};const Do="Infinitive";var Ho={beforeTags:{Modal:Do,Adverb:Do,Negative:Do,Plural:Do},afterTags:{Determiner:Do,Adverb:Do,Possessive:Do,Reflexive:Do,Preposition:Do,Cardinal:Do,Comparative:Do,Superlative:Do},beforeWords:{i:Do,we:Do,you:Do,they:Do,to:Do,please:Do,will:Do,have:Do,had:Do,would:Do,could:Do,should:Do,do:Do,did:Do,does:Do,can:Do,must:Do,us:Do,me:Do,let:Do,even:Do,when:Do,help:Do,he:Do,she:Do,it:Do,being:Do,bi:Do,co:Do,contra:Do,de:Do,inter:Do,intra:Do,mis:Do,pre:Do,out:Do,counter:Do,nobody:Do,somebody:Do,anybody:Do,everybody:Do},afterWords:{the:Do,me:Do,you:Do,him:Do,us:Do,her:Do,his:Do,them:Do,they:Do,it:Do,himself:Do,herself:Do,itself:Do,myself:Do,ourselves:Do,themselves:Do,something:Do,anything:Do,a:Do,an:Do,up:Do,down:Do,by:Do,out:Do,off:Do,under:Do,what:Do,all:Do,to:Do,because:Do,although:Do,how:Do,otherwise:Do,together:Do,though:Do,into:Do,yet:Do,more:Do,here:Do,there:Do,away:Do}};const Eo={beforeTags:Object.assign({},Ho.beforeTags,To.beforeTags,{}),afterTags:Object.assign({},Ho.afterTags,To.afterTags,{}),beforeWords:Object.assign({},Ho.beforeWords,To.beforeWords,{}),afterWords:Object.assign({},Ho.afterWords,To.afterWords,{})},Go="Adjective";var Oo={beforeTags:{Determiner:Go,Possessive:Go,Hyphenated:Go},afterTags:{Adjective:Go},beforeWords:{seem:Go,seemed:Go,seems:Go,feel:Go,feels:Go,felt:Go,stay:Go,appear:Go,appears:Go,appeared:Go,also:Go,over:Go,under:Go,too:Go,it:Go,but:Go,still:Go,really:Go,quite:Go,well:Go,very:Go,truly:Go,how:Go,deeply:Go,hella:Go,profoundly:Go,extremely:Go,so:Go,badly:Go,mostly:Go,totally:Go,awfully:Go,rather:Go,nothing:Go,something:Go,anything:Go,not:Go,me:Go,is:Go,face:Go,faces:Go,faced:Go,look:Go,looks:Go,looked:Go,reveal:Go,reveals:Go,revealed:Go,sound:Go,sounded:Go,sounds:Go,remains:Go,remained:Go,prove:Go,proves:Go,proved:Go,becomes:Go,stays:Go,tastes:Go,taste:Go,smells:Go,smell:Go,gets:Go,grows:Go,as:Go,rings:Go,radiates:Go,conveys:Go,convey:Go,conveyed:Go,of:Go},afterWords:{too:Go,also:Go,or:Go,enough:Go,as:Go}};const Fo="Gerund";var Vo={beforeTags:{Adverb:Fo,Preposition:Fo,Conjunction:Fo},afterTags:{Adverb:Fo,Possessive:Fo,Person:Fo,Pronoun:Fo,Determiner:Fo,Copula:Fo,Preposition:Fo,Conjunction:Fo,Comparative:Fo},beforeWords:{been:Fo,keep:Fo,continue:Fo,stop:Fo,am:Fo,be:Fo,me:Fo,began:Fo,start:Fo,starts:Fo,started:Fo,stops:Fo,stopped:Fo,help:Fo,helps:Fo,avoid:Fo,avoids:Fo,love:Fo,loves:Fo,loved:Fo,hate:Fo,hates:Fo,hated:Fo},afterWords:{you:Fo,me:Fo,her:Fo,him:Fo,his:Fo,them:Fo,their:Fo,it:Fo,this:Fo,there:Fo,on:Fo,about:Fo,for:Fo,up:Fo,down:Fo}};const zo="Gerund",Bo="Adjective",So={beforeTags:Object.assign({},Oo.beforeTags,Vo.beforeTags,{Imperative:zo,Infinitive:Bo,Plural:zo}),afterTags:Object.assign({},Oo.afterTags,Vo.afterTags,{Noun:Bo}),beforeWords:Object.assign({},Oo.beforeWords,Vo.beforeWords,{is:Bo,are:zo,was:Bo,of:Bo,suggest:zo,suggests:zo,suggested:zo,recommend:zo,recommends:zo,recommended:zo,imagine:zo,imagines:zo,imagined:zo,consider:zo,considered:zo,considering:zo,resist:zo,resists:zo,resisted:zo,avoid:zo,avoided:zo,avoiding:zo,except:Bo,accept:Bo,assess:zo,explore:zo,fear:zo,fears:zo,appreciate:zo,question:zo,help:zo,embrace:zo,with:Bo}),afterWords:Object.assign({},Oo.afterWords,Vo.afterWords,{to:zo,not:zo,the:zo})},$o={beforeTags:{Determiner:void 0,Cardinal:"Noun",PhrasalVerb:"Adjective"},afterTags:{}},Mo={beforeTags:Object.assign({},Oo.beforeTags,To.beforeTags,$o.beforeTags),afterTags:Object.assign({},Oo.afterTags,To.afterTags,$o.afterTags),beforeWords:Object.assign({},Oo.beforeWords,To.beforeWords,{are:"Adjective",is:"Adjective",was:"Adjective",be:"Adjective",off:"Adjective",out:"Adjective"}),afterWords:Object.assign({},Oo.afterWords,To.afterWords)},Lo="PastTense",Ko="Adjective",Jo={beforeTags:{Adverb:Lo,Pronoun:Lo,ProperNoun:Lo,Auxiliary:Lo,Noun:Lo},afterTags:{Possessive:Lo,Pronoun:Lo,Determiner:Lo,Adverb:Lo,Comparative:Lo,Date:Lo,Gerund:Lo},beforeWords:{be:Lo,who:Lo,get:Ko,had:Lo,has:Lo,have:Lo,been:Lo,it:Lo,as:Lo,for:Ko,more:Ko,always:Ko},afterWords:{by:Lo,back:Lo,out:Lo,in:Lo,up:Lo,down:Lo,before:Lo,after:Lo,for:Lo,the:Lo,with:Lo,as:Lo,on:Lo,at:Lo,between:Lo,to:Lo,into:Lo,us:Lo,them:Lo,his:Lo,her:Lo,their:Lo,our:Lo,me:Lo,about:Ko}};var Wo={beforeTags:Object.assign({},Oo.beforeTags,Jo.beforeTags),afterTags:Object.assign({},Oo.afterTags,Jo.afterTags),beforeWords:Object.assign({},Oo.beforeWords,Jo.beforeWords),afterWords:Object.assign({},Oo.afterWords,Jo.afterWords)};const qo={afterTags:{Noun:"Adjective",Conjunction:void 0}},Uo={beforeTags:Object.assign({},Oo.beforeTags,Ho.beforeTags,{Adverb:void 0,Negative:void 0}),afterTags:Object.assign({},Oo.afterTags,Ho.afterTags,qo.afterTags),beforeWords:Object.assign({},Oo.beforeWords,Ho.beforeWords,{have:void 0,had:void 0,not:void 0,went:"Adjective",goes:"Adjective",got:"Adjective",be:"Adjective"}),afterWords:Object.assign({},Oo.afterWords,Ho.afterWords,{to:void 0,as:"Adjective"})},Ro={Copula:"Gerund",PastTense:"Gerund",PresentTense:"Gerund",Infinitive:"Gerund"},Qo={Value:"Gerund"},Zo={are:"Gerund",were:"Gerund",be:"Gerund",no:"Gerund",without:"Gerund",you:"Gerund",we:"Gerund",they:"Gerund",he:"Gerund",she:"Gerund",us:"Gerund",them:"Gerund"},_o={the:"Gerund",this:"Gerund",that:"Gerund",me:"Gerund",us:"Gerund",them:"Gerund"},Xo={beforeTags:Object.assign({},Vo.beforeTags,To.beforeTags,Ro),afterTags:Object.assign({},Vo.afterTags,To.afterTags,Qo),beforeWords:Object.assign({},Vo.beforeWords,To.beforeWords,Zo),afterWords:Object.assign({},Vo.afterWords,To.afterWords,_o)},Yo="Singular",ea="Infinitive",ta={beforeTags:Object.assign({},Ho.beforeTags,To.beforeTags,{Adjective:Yo,Particle:Yo}),afterTags:Object.assign({},Ho.afterTags,To.afterTags,{ProperNoun:ea,Gerund:ea,Adjective:ea,Copula:Yo}),beforeWords:Object.assign({},Ho.beforeWords,To.beforeWords,{is:Yo,was:Yo,of:Yo,have:null}),afterWords:Object.assign({},Ho.afterWords,To.afterWords,{instead:ea,about:ea,his:ea,her:ea,to:null,by:null,in:null})},na="Person";var ra={beforeTags:{Honorific:na,Person:na},afterTags:{Person:na,ProperNoun:na,Verb:na},beforeWords:{hi:na,hey:na,yo:na,dear:na,hello:na},afterWords:{said:na,says:na,told:na,tells:na,feels:na,felt:na,seems:na,thinks:na,thought:na,spends:na,spendt:na,plays:na,played:na,sing:na,sang:na,learn:na,learned:na,wants:na,wanted:na}};const oa="Month",aa={beforeTags:{Date:oa,Value:oa},afterTags:{Date:oa,Value:oa},beforeWords:{by:oa,in:oa,on:oa,during:oa,after:oa,before:oa,between:oa,until:oa,til:oa,sometime:oa,of:oa,this:oa,next:oa,last:oa,previous:oa,following:oa,with:"Person"},afterWords:{sometime:oa,in:oa,of:oa,until:oa,the:oa}};var ia={beforeTags:Object.assign({},ra.beforeTags,aa.beforeTags),afterTags:Object.assign({},ra.afterTags,aa.afterTags),beforeWords:Object.assign({},ra.beforeWords,aa.beforeWords),afterWords:Object.assign({},ra.afterWords,aa.afterWords)};const sa="Place",la={beforeTags:{Place:sa},afterTags:{Place:sa,Abbreviation:sa},beforeWords:{in:sa,by:sa,near:sa,from:sa,to:sa},afterWords:{in:sa,by:sa,near:sa,from:sa,to:sa,government:sa,council:sa,region:sa,city:sa}},ua="Unit",ca={"Actor|Verb":Eo,"Adj|Gerund":So,"Adj|Noun":Mo,"Adj|Past":Wo,"Adj|Present":Uo,"Noun|Verb":ta,"Noun|Gerund":Xo,"Person|Noun":{beforeTags:Object.assign({},To.beforeTags,ra.beforeTags),afterTags:Object.assign({},To.afterTags,ra.afterTags),beforeWords:Object.assign({},To.beforeWords,ra.beforeWords,{i:"Infinitive",we:"Infinitive"}),afterWords:Object.assign({},To.afterWords,ra.afterWords)},"Person|Date":ia,"Person|Verb":{beforeTags:Object.assign({},To.beforeTags,ra.beforeTags,Ho.beforeTags),afterTags:Object.assign({},To.afterTags,ra.afterTags,Ho.afterTags),beforeWords:Object.assign({},To.beforeWords,ra.beforeWords,Ho.beforeWords),afterWords:Object.assign({},To.afterWords,ra.afterWords,Ho.afterWords)},"Person|Place":{beforeTags:Object.assign({},la.beforeTags,ra.beforeTags),afterTags:Object.assign({},la.afterTags,ra.afterTags),beforeWords:Object.assign({},la.beforeWords,ra.beforeWords),afterWords:Object.assign({},la.afterWords,ra.afterWords)},"Person|Adj":{beforeTags:Object.assign({},ra.beforeTags,Oo.beforeTags),afterTags:Object.assign({},ra.afterTags,Oo.afterTags),beforeWords:Object.assign({},ra.beforeWords,Oo.beforeWords),afterWords:Object.assign({},ra.afterWords,Oo.afterWords)},"Unit|Noun":{beforeTags:{Value:ua},afterTags:{},beforeWords:{per:ua,every:ua,each:ua,square:ua,cubic:ua,sq:ua,metric:ua},afterWords:{per:ua,squared:ua,cubed:ua,long:ua}}},ha=(e,t)=>{const n=Object.keys(e).reduce(((t,n)=>(t[n]="Infinitive"===e[n]?"PresentTense":"Plural",t)),{});return Object.assign(n,t)};ca["Plural|Verb"]={beforeWords:ha(ca["Noun|Verb"].beforeWords,{had:"Plural",have:"Plural"}),afterWords:ha(ca["Noun|Verb"].afterWords,{his:"PresentTense",her:"PresentTense",its:"PresentTense",in:null,to:null,is:"PresentTense",by:"PresentTense"}),beforeTags:ha(ca["Noun|Verb"].beforeTags,{Conjunction:"PresentTense",Noun:void 0,ProperNoun:"PresentTense"}),afterTags:ha(ca["Noun|Verb"].afterTags,{Gerund:"Plural",Noun:"PresentTense",Value:"PresentTense"})};const da="Adjective",ga="Infinitive",ma="PresentTense",pa="Singular",fa="PastTense",ba="Adverb",va="Plural",ya="Actor",wa="Verb",ka="Noun",Pa="LastName",Aa="Modal",Ca="Place",Na="Participle";var ja=[null,null,{ea:pa,ia:ka,ic:da,ly:ba,"'n":wa,"'t":wa},{oed:fa,ued:fa,xed:fa," so":ba,"'ll":Aa,"'re":"Copula",azy:da,eer:ka,end:wa,ped:fa,ffy:da,ify:ga,ing:"Gerund",ize:ga,ibe:ga,lar:da,mum:da,nes:ma,nny:da,ous:da,que:da,ger:ka,ber:ka,rol:pa,sis:pa,ogy:pa,oid:pa,ian:pa,zes:ma,eld:fa,ken:Na,ven:Na,ten:Na,ect:ga,ict:ga,ign:ga,oze:ga,ful:da,bal:da,ton:ka,pur:Ca},{amed:fa,aped:fa,ched:fa,lked:fa,rked:fa,reed:fa,nded:fa,mned:da,cted:fa,dged:fa,ield:pa,akis:Pa,cede:ga,chuk:Pa,czyk:Pa,ects:ma,iend:pa,ends:wa,enko:Pa,ette:pa,iary:pa,wner:pa,fies:ma,fore:ba,gate:ga,gone:da,ices:va,ints:va,ruct:ga,ines:va,ions:va,ners:va,pers:va,lers:va,less:da,llen:da,made:da,nsen:Pa,oses:ma,ould:Aa,some:da,sson:Pa,ians:va,tion:pa,tage:ka,ique:pa,tive:da,tors:ka,vice:pa,lier:pa,fier:pa,wned:fa,gent:pa,tist:ya,pist:ya,rist:ya,mist:ya,yist:ya,vist:ya,ists:ya,lite:pa,site:pa,rite:pa,mite:pa,bite:pa,mate:pa,date:pa,ndal:pa,vent:pa,uist:ya,gist:ya,note:pa,cide:pa,ence:pa,wide:da,vide:ga,ract:ga,duce:ga,pose:ga,eive:ga,lyze:ga,lyse:ga,iant:da,nary:da,ghty:da,uent:da,erer:ya,bury:Ca,dorf:ka,esty:ka,wych:Ca,dale:Ca,folk:Ca,vale:Ca,abad:Ca,sham:Ca,wick:Ca,view:Ca},{elist:ya,holic:pa,phite:pa,tized:fa,urned:fa,eased:fa,ances:va,bound:da,ettes:va,fully:ba,ishes:ma,ities:va,marek:Pa,nssen:Pa,ology:ka,osome:pa,tment:pa,ports:va,rough:da,tches:ma,tieth:"Ordinal",tures:va,wards:ba,where:ba,archy:ka,pathy:ka,opoly:ka,embly:ka,phate:ka,ndent:pa,scent:pa,onist:ya,anist:ya,alist:ya,olist:ya,icist:ya,ounce:ga,iable:da,borne:da,gnant:da,inant:da,igent:da,atory:da,rient:pa,dient:pa,maker:ya,burgh:Ca,mouth:Ca,ceter:Ca,ville:Ca,hurst:Ca,stead:Ca,endon:Ca,brook:Ca,shire:Ca,worth:ka,field:"ProperNoun",ridge:Ca},{auskas:Pa,parent:pa,cedent:pa,ionary:pa,cklist:pa,brooke:Ca,keeper:ya,logist:ya,teenth:"Value",worker:ya,master:ya,writer:ya,brough:Ca,cester:Ca,ington:Ca,cliffe:Ca,ingham:Ca},{chester:Ca,logists:ya,opoulos:Pa,borough:Ca,sdottir:Pa}];const xa="Adjective",Ia="Noun",Ta="Verb";var Da=[null,null,{},{neo:Ia,bio:Ia,"de-":Ta,"re-":Ta,"un-":Ta,"ex-":Ia},{anti:Ia,auto:Ia,faux:xa,hexa:Ia,kilo:Ia,mono:Ia,nano:Ia,octa:Ia,poly:Ia,semi:xa,tele:Ia,"pro-":xa,"mis-":Ta,"dis-":Ta,"pre-":xa},{anglo:Ia,centi:Ia,ethno:Ia,ferro:Ia,grand:Ia,hepta:Ia,hydro:Ia,intro:Ia,macro:Ia,micro:Ia,milli:Ia,nitro:Ia,penta:Ia,quasi:xa,radio:Ia,tetra:Ia,"omni-":xa,"post-":xa},{pseudo:xa,"extra-":xa,"hyper-":xa,"inter-":xa,"intra-":xa,"deca-":xa},{electro:Ia}];const Ha="Adjective",Ea="Infinitive",Ga="PresentTense",Oa="Singular",Fa="PastTense",Va="Adverb",za="Expression",Ba="Actor",Sa="Verb",$a="Noun",Ma="LastName";var La={a:[[/.[aeiou]na$/,$a,"tuna"],[/.[oau][wvl]ska$/,Ma],[/.[^aeiou]ica$/,Oa,"harmonica"],[/^([hyj]a+)+$/,za,"haha"]],c:[[/.[^aeiou]ic$/,Ha]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,Fa,"popped"],[/.[aeo]{2}[bdgmnprvz]ed$/,Fa,"rammed"],[/.[aeiou][sg]hed$/,Fa,"gushed"],[/.[aeiou]red$/,Fa,"hired"],[/.[aeiou]r?ried$/,Fa,"hurried"],[/[^aeiou]ard$/,Oa,"steward"],[/[aeiou][^aeiou]id$/,Ha,""],[/.[vrl]id$/,Ha,"livid"],[/..led$/,Fa,"hurled"],[/.[iao]sed$/,Fa,""],[/[aeiou]n?[cs]ed$/,Fa,""],[/[aeiou][rl]?[mnf]ed$/,Fa,""],[/[aeiou][ns]?c?ked$/,Fa,"bunked"],[/[aeiou]gned$/,Fa],[/[aeiou][nl]?ged$/,Fa],[/.[tdbwxyz]ed$/,Fa],[/[^aeiou][aeiou][tvx]ed$/,Fa],[/.[cdflmnprstv]ied$/,Fa,"emptied"]],e:[[/.[lnr]ize$/,Ea,"antagonize"],[/.[^aeiou]ise$/,Ea,"antagonise"],[/.[aeiou]te$/,Ea,"bite"],[/.[^aeiou][ai]ble$/,Ha,"fixable"],[/.[^aeiou]eable$/,Ha,"maleable"],[/.[ts]ive$/,Ha,"festive"],[/[a-z]-like$/,Ha,"woman-like"]],h:[[/.[^aeiouf]ish$/,Ha,"cornish"],[/.v[iy]ch$/,Ma,"..ovich"],[/^ug?h+$/,za,"ughh"],[/^uh[ -]?oh$/,za,"uhoh"],[/[a-z]-ish$/,Ha,"cartoon-ish"]],i:[[/.[oau][wvl]ski$/,Ma,"polish-male"]],k:[[/^(k){2}$/,za,"kkkk"]],l:[[/.[gl]ial$/,Ha,"familial"],[/.[^aeiou]ful$/,Ha,"fitful"],[/.[nrtumcd]al$/,Ha,"natal"],[/.[^aeiou][ei]al$/,Ha,"familial"]],m:[[/.[^aeiou]ium$/,Oa,"magnesium"],[/[^aeiou]ism$/,Oa,"schism"],[/^[hu]m+$/,za,"hmm"],[/^\d+ ?[ap]m$/,"Date","3am"]],n:[[/.[lsrnpb]ian$/,Ha,"republican"],[/[^aeiou]ician$/,Ba,"musician"],[/[aeiou][ktrp]in'$/,"Gerund","cookin'"]],o:[[/^no+$/,za,"noooo"],[/^(yo)+$/,za,"yoo"],[/^wo{2,}[pt]?$/,za,"woop"]],r:[[/.[bdfklmst]ler$/,"Noun"],[/[aeiou][pns]er$/,Oa],[/[^i]fer$/,Ea],[/.[^aeiou][ao]pher$/,Ba],[/.[lk]er$/,"Noun"],[/.ier$/,"Comparative"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,Ha],[/[aeiou].*ist$/,Ha],[/^[a-z]et$/,Sa]],s:[[/.[^aeiou]ises$/,Ga],[/.[rln]ates$/,Ga],[/.[^z]ens$/,Sa],[/.[lstrn]us$/,Oa],[/.[aeiou]sks$/,Ga],[/.[aeiou]kes$/,Ga],[/[aeiou][^aeiou]is$/,Oa],[/[a-z]'s$/,$a],[/^yes+$/,za]],v:[[/.[^aeiou][ai][kln]ov$/,Ma]],y:[[/.[cts]hy$/,Ha],[/.[st]ty$/,Ha],[/.[tnl]ary$/,Ha],[/.[oe]ry$/,Oa],[/[rdntkbhs]ly$/,Va],[/.(gg|bb|zz)ly$/,Ha],[/...lly$/,Va],[/.[gk]y$/,Ha],[/[bszmp]{2}y$/,Ha],[/.[ai]my$/,Ha],[/[ea]{2}zy$/,Ha],[/.[^aeiou]ity$/,Oa]]};const Ka="Verb",Ja="Noun";var Wa={leftTags:[["Adjective",Ja],["Possessive",Ja],["Determiner",Ja],["Adverb",Ka],["Pronoun",Ka],["Value",Ja],["Ordinal",Ja],["Modal",Ka],["Superlative",Ja],["Demonym",Ja],["Honorific","Person"]],leftWords:[["i",Ka],["first",Ja],["it",Ka],["there",Ka],["not",Ka],["because",Ja],["if",Ja],["but",Ja],["who",Ka],["this",Ja],["his",Ja],["when",Ja],["you",Ka],["very","Adjective"],["old",Ja],["never",Ka],["before",Ja],["a",Ja],["the",Ja],["been",Ka]],rightTags:[["Copula",Ja],["PastTense",Ja],["Conjunction",Ja],["Modal",Ja]],rightWords:[["there",Ka],["me",Ka],["man","Adjective"],["him",Ka],["it",Ka],["were",Ja],["took",Ja],["himself",Ka],["went",Ja],["who",Ja],["jr","Person"]]},qa={fwd:"3:ser,ier¦1er:h,t,f,l,n¦1r:e¦2er:ss,or,om",both:"3er:ver,ear,alm¦3ner:hin¦3ter:lat¦2mer:im¦2er:ng,rm,mb¦2ber:ib¦2ger:ig¦1er:w,p,k,d¦ier:y",rev:"1:tter,yer¦2:uer,ver,ffer,oner,eler,ller,iler,ster,cer,uler,sher,ener,gher,aner,adder,nter,eter,rter,hter,rner,fter¦3:oser,ooler,eafer,user,airer,bler,maler,tler,eater,uger,rger,ainer,urer,ealer,icher,pler,emner,icter,nser,iser¦4:arser,viner,ucher,rosser,somer,ndomer,moter,oother,uarer,hiter¦5:nuiner,esser,emier¦ar:urther",ex:"worse:bad¦better:good¦4er:fair,gray,poor¦1urther:far¦3ter:fat,hot,wet¦3der:mad,sad¦3er:shy,fun¦4der:glad¦:¦4r:cute,dire,fake,fine,free,lame,late,pale,rare,ripe,rude,safe,sore,tame,wide¦5r:eerie,stale"},Ua={fwd:"1:nning,tting,rring,pping,eing,mming,gging,dding,bbing,kking¦2:eking,oling,eling,eming¦3:velling,siting,uiting,fiting,loting,geting,ialing,celling¦4:graming",both:"1:aing,iing,fing,xing,ying,oing,hing,wing¦2:tzing,rping,izzing,bting,mning,sping,wling,rling,wding,rbing,uping,lming,wning,mping,oning,lting,mbing,lking,fting,hting,sking,gning,pting,cking,ening,nking,iling,eping,ering,rting,rming,cting,lping,ssing,nting,nding,lding,sting,rning,rding,rking¦3:belling,siping,toming,yaking,uaking,oaning,auling,ooping,aiding,naping,euring,tolling,uzzing,ganing,haning,ualing,halling,iasing,auding,ieting,ceting,ouling,voring,ralling,garing,joring,oaming,oaking,roring,nelling,ooring,uelling,eaming,ooding,eaping,eeting,ooting,ooming,xiting,keting,ooking,ulling,airing,oaring,biting,outing,oiting,earing,naling,oading,eeding,ouring,eaking,aiming,illing,oining,eaning,onging,ealing,aining,eading¦4:thoming,melling,aboring,ivoting,weating,dfilling,onoring,eriting,imiting,tialling,rgining,otoring,linging,winging,lleting,louding,spelling,mpelling,heating,feating,opelling,choring,welling,ymaking,ctoring,calling,peating,iloring,laiting,utoring,uditing,mmaking,loating,iciting,waiting,mbating,voiding,otalling,nsoring,nselling,ocusing,itoring,eloping¦5:rselling,umpeting,atrolling,treating,tselling,rpreting,pringing,ummeting,ossoming,elmaking,eselling,rediting,totyping,onmaking,rfeiting,ntrolling¦5e:chmaking,dkeeping,severing,erouting,ecreting,ephoning,uthoring,ravening,reathing,pediting,erfering,eotyping,fringing,entoring,ombining,ompeting¦4e:emaking,eething,twining,rruling,chuting,xciting,rseding,scoping,edoring,pinging,lunging,agining,craping,pleting,eleting,nciting,nfining,ncoding,tponing,ecoding,writing,esaling,nvening,gnoring,evoting,mpeding,rvening,dhering,mpiling,storing,nviting,ploring¦3e:tining,nuring,saking,miring,haling,ceding,xuding,rining,nuting,laring,caring,miling,riding,hoking,piring,lading,curing,uading,noting,taping,futing,paring,hading,loding,siring,guring,vading,voking,during,niting,laning,caping,luting,muting,ruding,ciding,juring,laming,caling,hining,uoting,liding,ciling,duling,tuting,puting,cuting,coring,uiding,tiring,turing,siding,rading,enging,haping,buting,lining,taking,anging,haring,uiring,coming,mining,moting,suring,viding,luding¦2e:tring,zling,uging,oging,gling,iging,vring,fling,lging,obing,psing,pling,ubing,cling,dling,wsing,iking,rsing,dging,kling,ysing,tling,rging,eging,nsing,uning,osing,uming,using,ibing,bling,aging,ising,asing,ating¦2ie:rlying¦1e:zing,uing,cing,ving",rev:"ying:ie¦1ing:se,ke,te,we,ne,re,de,pe,me,le,c,he¦2ing:ll,ng,dd,ee,ye,oe,rg,us¦2ning:un¦2ging:og,ag,ug,ig,eg¦2ming:um¦2bing:ub,ab,eb,ob¦3ning:lan,can,hin,pin,win¦3ring:cur,lur,tir,tar,pur,car¦3ing:ait,del,eel,fin,eat,oat,eem,lel,ool,ein,uin¦3ping:rop,rap,top,uip,wap,hip,hop,lap,rip,cap¦3ming:tem,wim,rim,kim,lim¦3ting:mat,cut,pot,lit,lot,hat,set,pit,put¦3ding:hed,bed,bid¦3king:rek¦3ling:cil,pel¦3bing:rib¦4ning:egin¦4ing:isit,ruit,ilot,nsit,dget,rkel,ival,rcel¦4ring:efer,nfer¦4ting:rmit,mmit,ysit,dmit,emit,bmit,tfit,gret¦4ling:evel,xcel,ivel¦4ding:hred¦5ing:arget,posit,rofit¦5ring:nsfer¦5ting:nsmit,orget,cquit¦5ling:ancel,istil",ex:"3:adding,eating,aiming,aiding,airing,outing,gassing,setting,getting,putting,cutting,winning,sitting,betting,mapping,tapping,letting,bidding,hitting,tanning,netting,popping,fitting,capping,lapping,barring,banning,vetting,topping,rotting,tipping,potting,wetting,pitting,dipping,budding,hemming,pinning,jetting,kidding,padding,podding,sipping,wedding,bedding,donning,warring,penning,gutting,cueing,wadding,petting,ripping,napping,matting,tinning,binning,dimming,hopping,mopping,nodding,panning,rapping,ridding,sinning¦4:selling,falling,calling,waiting,editing,telling,rolling,heating,boating,hanging,beating,coating,singing,tolling,felling,polling,discing,seating,voiding,gelling,yelling,baiting,reining,ruining,seeking,spanning,stepping,knitting,emitting,slipping,quitting,dialing,omitting,clipping,shutting,skinning,abutting,flipping,trotting,cramming,fretting,suiting¦5:bringing,treating,spelling,stalling,trolling,expelling,rivaling,wringing,deterring,singeing,befitting,refitting¦6:enrolling,distilling,scrolling,strolling,caucusing,travelling¦7:installing,redefining,stencilling,recharging,overeating,benefiting,unraveling,programing¦9:reprogramming¦is:being¦2e:using,aging,owing¦3e:making,taking,coming,noting,hiring,filing,coding,citing,doping,baking,coping,hoping,lading,caring,naming,voting,riding,mining,curing,lining,ruling,typing,boring,dining,firing,hiding,piling,taping,waning,baling,boning,faring,honing,wiping,luring,timing,wading,piping,fading,biting,zoning,daring,waking,gaming,raking,ceding,tiring,coking,wining,joking,paring,gaping,poking,pining,coring,liming,toting,roping,wiring,aching¦4e:writing,storing,eroding,framing,smoking,tasting,wasting,phoning,shaking,abiding,braking,flaking,pasting,priming,shoring,sloping,withing,hinging¦5e:defining,refining,renaming,swathing,fringing,reciting¦1ie:dying,tying,lying,vying¦7e:sunbathing"},Ra={fwd:"1:mt¦2:llen¦3:iven,aken¦:ne¦y:in",both:"1:wn¦2:me,aten¦3:seen,bidden,isen¦4:roven,asten¦3l:pilt¦3d:uilt¦2e:itten¦1im:wum¦1eak:poken¦1ine:hone¦1ose:osen¦1in:gun¦1ake:woken¦ear:orn¦eal:olen¦eeze:ozen¦et:otten¦ink:unk¦ing:ung",rev:"2:un¦oken:eak¦ought:eek¦oven:eave¦1ne:o¦1own:ly¦1den:de¦1in:ay¦2t:am¦2n:ee¦3en:all¦4n:rive,sake,take¦5n:rgive",ex:"2:been¦3:seen,run¦4:given,taken¦5:shaken¦2eak:broken¦1ive:dove¦2y:flown¦3e:hidden,ridden¦1eek:sought¦1ake:woken¦1eave:woven"},Qa={fwd:"1:oes¦1ve:as",both:"1:xes¦2:zzes,ches,shes,sses¦3:iases¦2y:llies,plies¦1y:cies,bies,ties,vies,nies,pies,dies,ries,fies¦:s",rev:"1ies:ly¦2es:us,go,do¦3es:cho,eto",ex:"2:does,goes¦3:gasses¦5:focuses¦is:are¦3y:relies¦2y:flies¦2ve:has"},Za={fwd:"1st:e¦1est:l,m,f,s¦1iest:cey¦2est:or,ir¦3est:ver",both:"4:east¦5:hwest¦5lest:erful¦4est:weet,lgar,tter,oung¦4most:uter¦3est:ger,der,rey,iet,ong,ear¦3test:lat¦3most:ner¦2est:pt,ft,nt,ct,rt,ht¦2test:it¦2gest:ig¦1est:b,k,n,p,h,d,w¦iest:y",rev:"1:ttest,nnest,yest¦2:sest,stest,rmest,cest,vest,lmest,olest,ilest,ulest,ssest,imest,uest¦3:rgest,eatest,oorest,plest,allest,urest,iefest,uelest,blest,ugest,amest,yalest,ealest,illest,tlest,itest¦4:cerest,eriest,somest,rmalest,ndomest,motest,uarest,tiffest¦5:leverest,rangest¦ar:urthest¦3ey:riciest",ex:"best:good¦worst:bad¦5est:great¦4est:fast,full,fair,dull¦3test:hot,wet,fat¦4nest:thin¦1urthest:far¦3est:gay,shy,ill¦4test:neat¦4st:late,wide,fine,safe,cute,fake,pale,rare,rude,sore,ripe,dire¦6st:severe"},_a={fwd:"1:tistic,eable,lful,sful,ting,tty¦2:onate,rtable,geous,ced,seful,ctful¦3:ortive,ented¦arity:ear¦y:etic¦fulness:begone¦1ity:re¦1y:tiful,gic¦2ity:ile,imous,ilous,ime¦2ion:ated¦2eness:iving¦2y:trious¦2ation:iring¦2tion:vant¦3ion:ect¦3ce:mant,mantic¦3tion:irable¦3y:est,estic¦3m:mistic,listic¦3ess:ning¦4n:utious¦4on:rative,native,vative,ective¦4ce:erant",both:"1:king,wing¦2:alous,ltuous,oyful,rdous¦3:gorous,ectable,werful,amatic¦4:oised,usical,agical,raceful,ocused,lined,ightful¦5ness:stful,lding,itous,nuous,ulous,otous,nable,gious,ayful,rvous,ntous,lsive,peful,entle,ciful,osive,leful,isive,ncise,reful,mious¦5ty:ivacious¦5ties:ubtle¦5ce:ilient,adiant,atient¦5cy:icient¦5sm:gmatic¦5on:sessive,dictive¦5ity:pular,sonal,eative,entic¦5sity:uminous¦5ism:conic¦5nce:mperate¦5ility:mitable¦5ment:xcited¦5n:bitious¦4cy:brant,etent,curate¦4ility:erable,acable,icable,ptable¦4ty:nacious,aive,oyal,dacious¦4n:icious¦4ce:vient,erent,stent,ndent,dient,quent,ident¦4ness:adic,ound,hing,pant,sant,oing,oist,tute¦4icity:imple¦4ment:fined,mused¦4ism:otic¦4ry:dantic¦4ity:tund,eral¦4edness:hand¦4on:uitive¦4lity:pitable¦4sm:eroic,namic¦4sity:nerous¦3th:arm¦3ility:pable,bable,dable,iable¦3cy:hant,nant,icate¦3ness:red,hin,nse,ict,iet,ite,oud,ind,ied,rce¦3ion:lute¦3ity:ual,gal,volous,ial¦3ce:sent,fensive,lant,gant,gent,lent,dant¦3on:asive¦3m:fist,sistic,iastic¦3y:terious,xurious,ronic,tastic¦3ur:amorous¦3e:tunate¦3ation:mined¦3sy:rteous¦3ty:ain¦3ry:ave¦3ment:azed¦2ness:de,on,ue,rn,ur,ft,rp,pe,om,ge,rd,od,ay,ss,er,ll,oy,ap,ht,ld,ad,rt¦2inousness:umous¦2ity:neous,ene,id,ane¦2cy:bate,late¦2ation:ized¦2ility:oble,ible¦2y:odic¦2e:oving,aring¦2s:ost¦2itude:pt¦2dom:ee¦2ance:uring¦2tion:reet¦2ion:oted¦2sion:ending¦2liness:an¦2or:rdent¦1th:ung¦1e:uable¦1ness:w,h,k,f¦1ility:mble¦1or:vent¦1ement:ging¦1tiquity:ncient¦1ment:hed¦verty:or¦ength:ong¦eat:ot¦pth:ep¦iness:y",rev:"",ex:"5:forceful,humorous¦8:charismatic¦13:understanding¦5ity:active¦11ness:adventurous,inquisitive,resourceful¦8on:aggressive,automatic,perceptive¦7ness:amorous,fatuous,furtive,ominous,serious¦5ness:ample,sweet¦12ness:apprehensive,cantankerous,contemptuous,ostentatious¦13ness:argumentative,conscientious¦9ness:assertive,facetious,imperious,inventive,oblivious,rapacious,receptive,seditious,whimsical¦10ness:attractive,expressive,impressive,loquacious,salubrious,thoughtful¦3edom:boring¦4ness:calm,fast,keen,tame¦8ness:cheerful,gracious,specious,spurious,timorous,unctuous¦5sity:curious¦9ion:deliberate¦8ion:desperate¦6e:expensive¦7ce:fragrant¦3y:furious¦9ility:ineluctable¦6ism:mystical¦8ity:physical,proactive,sensitive,vertical¦5cy:pliant¦7ity:positive¦9ity:practical¦12ism:professional¦6ce:prudent¦3ness:red¦6cy:vagrant¦3dom:wise"};const Xa=function(e="",t={}){let n=function(e,t={}){return t.hasOwnProperty(e)?t[e]:null}(e,t.ex);return n=n||function(e,t=[]){for(let n=0;n=1;r-=1){let o=e.length-r,a=e.substring(o,e.length);if(!0===t.hasOwnProperty(a))return e.slice(0,o)+t[a];if(!0===n.hasOwnProperty(a))return e.slice(0,o)+n[a]}return t.hasOwnProperty("")?e+t[""]:n.hasOwnProperty("")?e+n[""]:null}(e,t.fwd,t.both),n=n||e,n},Ya=function(e){return Object.entries(e).reduce(((e,t)=>(e[t[1]]=t[0],e)),{})},ei=function(e={}){return{reversed:!0,both:Ya(e.both),ex:Ya(e.ex),fwd:e.rev||{}}},ti=/^([0-9]+)/,ni=function(e){let t=function(e){let t={};return e.split("¦").forEach((e=>{let[n,r]=e.split(":");r=(r||"").split(","),r.forEach((e=>{t[e]=n}))})),t}(e);return Object.keys(t).reduce(((e,n)=>(e[n]=function(e="",t=""){let n=(t=String(t)).match(ti);if(null===n)return t;let r=Number(n[1])||0;return e.substring(0,r)+t.replace(ti,"")}(n,t[n]),e)),{})},ri=function(e={}){return"string"==typeof e&&(e=JSON.parse(e)),e.fwd=ni(e.fwd||""),e.both=ni(e.both||""),e.rev=ni(e.rev||""),e.ex=ni(e.ex||""),e},oi=ri({fwd:"1:tted,wed,gged,nned,een,rred,pped,yed,bbed,oed,dded,rd,wn,mmed¦2:eed,nded,et,hted,st,oled,ut,emed,eled,lded,ken,rt,nked,apt,ant,eped,eked¦3:eared,eat,eaded,nelled,ealt,eeded,ooted,eaked,eaned,eeted,mited,bid,uit,ead,uited,ealed,geted,velled,ialed,belled¦4:ebuted,hined,comed¦y:ied¦ome:ame¦ear:ore¦ind:ound¦ing:ung,ang¦ep:pt¦ink:ank,unk¦ig:ug¦all:ell¦ee:aw¦ive:ave¦eeze:oze¦old:eld¦ave:ft¦ake:ook¦ell:old¦ite:ote¦ide:ode¦ine:one¦in:un,on¦eal:ole¦im:am¦ie:ay¦and:ood¦1ise:rose¦1eak:roke¦1ing:rought¦1ive:rove¦1el:elt¦1id:bade¦1et:got¦1y:aid¦1it:sat¦3e:lid¦3d:pent",both:"1:aed,fed,xed,hed¦2:sged,xted,wled,rped,lked,kied,lmed,lped,uped,bted,rbed,rked,wned,rled,mped,fted,mned,mbed,zzed,omed,ened,cked,gned,lted,sked,ued,zed,nted,ered,rted,rmed,ced,sted,rned,ssed,rded,pted,ved,cted¦3:cled,eined,siped,ooned,uked,ymed,jored,ouded,ioted,oaned,lged,asped,iged,mured,oided,eiled,yped,taled,moned,yled,lit,kled,oaked,gled,naled,fled,uined,oared,valled,koned,soned,aided,obed,ibed,meted,nicked,rored,micked,keted,vred,ooped,oaded,rited,aired,auled,filled,ouled,ooded,ceted,tolled,oited,bited,aped,tled,vored,dled,eamed,nsed,rsed,sited,owded,pled,sored,rged,osed,pelled,oured,psed,oated,loned,aimed,illed,eured,tred,ioned,celled,bled,wsed,ooked,oiled,itzed,iked,iased,onged,ased,ailed,uned,umed,ained,auded,nulled,ysed,eged,ised,aged,oined,ated,used,dged,doned¦4:ntied,efited,uaked,caded,fired,roped,halled,roked,himed,culed,tared,lared,tuted,uared,routed,pited,naked,miled,houted,helled,hared,cored,caled,tired,peated,futed,ciled,called,tined,moted,filed,sided,poned,iloted,honed,lleted,huted,ruled,cured,named,preted,vaded,sured,talled,haled,peded,gined,nited,uided,ramed,feited,laked,gured,ctored,unged,pired,cuted,voked,eloped,ralled,rined,coded,icited,vided,uaded,voted,mined,sired,noted,lined,nselled,luted,jured,fided,puted,piled,pared,olored,cided,hoked,enged,tured,geoned,cotted,lamed,uiled,waited,udited,anged,luded,mired,uired,raded¦5:modelled,izzled,eleted,umpeted,ailored,rseded,treated,eduled,ecited,rammed,eceded,atrolled,nitored,basted,twined,itialled,ncited,gnored,ploded,xcited,nrolled,namelled,plored,efeated,redited,ntrolled,nfined,pleted,llided,lcined,eathed,ibuted,lloted,dhered,cceded¦3ad:sled¦2aw:drew¦2ot:hot¦2ke:made¦2ow:hrew,grew¦2ose:hose¦2d:ilt¦2in:egan¦1un:ran¦1ink:hought¦1ick:tuck¦1ike:ruck¦1eak:poke,nuck¦1it:pat¦1o:did¦1ow:new¦1ake:woke¦go:went",rev:"3:rst,hed,hut,cut,set¦4:tbid¦5:dcast,eread,pread,erbid¦ought:uy,eek¦1ied:ny,ly,dy,ry,fy,py,vy,by,ty,cy¦1ung:ling,ting,wing¦1pt:eep¦1ank:rink¦1ore:bear,wear¦1ave:give¦1oze:reeze¦1ound:rind,wind¦1ook:take,hake¦1aw:see¦1old:sell¦1ote:rite¦1ole:teal¦1unk:tink¦1am:wim¦1ay:lie¦1ood:tand¦1eld:hold¦2d:he,ge,re,le,leed,ne,reed,be,ye,lee,pe,we¦2ed:dd,oy,or,ey,gg,rr,us,ew,to¦2ame:ecome,rcome¦2ped:ap¦2ged:ag,og,ug,eg¦2bed:ub,ab,ib,ob¦2lt:neel¦2id:pay¦2ang:pring¦2ove:trive¦2med:um¦2ode:rride¦2at:ysit¦3ted:mit,hat,mat,lat,pot,rot,bat¦3ed:low,end,tow,und,ond,eem,lay,cho,dow,xit,eld,ald,uld,law,lel,eat,oll,ray,ank,fin,oam,out,how,iek,tay,haw,ait,vet,say,cay,bow¦3d:ste,ede,ode,ete,ree,ude,ame,oke,ote,ime,ute,ade¦3red:lur,cur,pur,car¦3ped:hop,rop,uip,rip,lip,tep,top¦3ded:bed,rod,kid¦3ade:orbid¦3led:uel¦3ned:lan,can,kin,pan,tun¦3med:rim,lim¦4ted:quit,llot¦4ed:pear,rrow,rand,lean,mand,anel,pand,reet,link,abel,evel,imit,ceed,ruit,mind,peal,veal,hool,head,pell,well,mell,uell,band,hear,weak¦4led:nnel,qual,ebel,ivel¦4red:nfer,efer,sfer¦4n:sake,trew¦4d:ntee¦4ded:hred¦4ned:rpin¦5ed:light,nceal,right,ndear,arget,hread,eight,rtial,eboot¦5d:edite,nvite¦5ted:egret¦5led:ravel",ex:"2:been,upped¦3:added,aged,aided,aimed,aired,bid,died,dyed,egged,erred,eyed,fit,gassed,hit,lied,owed,pent,pied,tied,used,vied,oiled,outed,banned,barred,bet,canned,cut,dipped,donned,ended,feed,inked,jarred,let,manned,mowed,netted,padded,panned,pitted,popped,potted,put,set,sewn,sowed,tanned,tipped,topped,vowed,weed,bowed,jammed,binned,dimmed,hopped,mopped,nodded,pinned,rigged,sinned,towed,vetted¦4:ached,baked,baled,boned,bored,called,caned,cared,ceded,cited,coded,cored,cubed,cured,dared,dined,edited,exited,faked,fared,filed,fined,fired,fuelled,gamed,gelled,hired,hoped,joked,lined,mined,named,noted,piled,poked,polled,pored,pulled,reaped,roamed,rolled,ruled,seated,shed,sided,timed,tolled,toned,voted,waited,walled,waned,winged,wiped,wired,zoned,yelled,tamed,lubed,roped,faded,mired,caked,honed,banged,culled,heated,raked,welled,banded,beat,cast,cooled,cost,dealt,feared,folded,footed,handed,headed,heard,hurt,knitted,landed,leaked,leapt,linked,meant,minded,molded,neared,needed,peaked,plodded,plotted,pooled,quit,read,rooted,sealed,seeded,seeped,shipped,shunned,skimmed,slammed,sparred,stemmed,stirred,suited,thinned,twinned,swayed,winked,dialed,abutted,blotted,fretted,healed,heeded,peeled,reeled¦5:basted,cheated,equalled,eroded,exiled,focused,opined,pleated,primed,quoted,scouted,shored,sloped,smoked,sniped,spelled,spouted,routed,staked,stored,swelled,tasted,treated,wasted,smelled,dwelled,honored,prided,quelled,eloped,scared,coveted,sweated,breaded,cleared,debuted,deterred,freaked,modeled,pleaded,rebutted,speeded¦6:anchored,defined,endured,impaled,invited,refined,revered,strolled,cringed,recast,thrust,unfolded¦7:authored,combined,competed,conceded,convened,excreted,extruded,redefined,restored,secreted,rescinded,welcomed¦8:expedited,infringed¦9:interfered,intervened,persevered¦10:contravened¦eat:ate¦is:was¦go:went¦are:were¦3d:bent,lent,rent,sent¦3e:bit,fled,hid,lost¦3ed:bled,bred¦2ow:blew,grew¦1uy:bought¦2tch:caught¦1o:did¦1ive:dove,gave¦2aw:drew¦2ed:fed¦2y:flew,laid,paid,said¦1ight:fought¦1et:got¦2ve:had¦1ang:hung¦2ad:led¦2ght:lit¦2ke:made¦2et:met¦1un:ran¦1ise:rose¦1it:sat¦1eek:sought¦1each:taught¦1ake:woke,took¦1eave:wove¦2ise:arose¦1ear:bore,tore,wore¦1ind:bound,found,wound¦2eak:broke¦2ing:brought,wrung¦1ome:came¦2ive:drove¦1ig:dug¦1all:fell¦2el:felt¦4et:forgot¦1old:held¦2ave:left¦1ing:rang,sang¦1ide:rode¦1ink:sank¦1ee:saw¦2ine:shone¦4e:slid¦1ell:sold,told¦4d:spent¦2in:spun¦1in:won"}),ai=ri(Qa),ii=ri(Ua),si=ri(Ra),li=ei(oi),ui=ei(ai),ci=ei(ii),hi=ei(si),di=ri(qa),gi=ri(Za);var mi={fromPast:oi,fromPresent:ai,fromGerund:ii,fromParticiple:si,toPast:li,toPresent:ui,toGerund:ci,toParticiple:hi,toComparative:di,toSuperlative:gi,fromComparative:ei(di),fromSuperlative:ei(gi),adjToNoun:ri(_a)},pi=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","bureau","cafe","co","caisse","capital","care","cathedral","center","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","data","departement","department","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","faculty","faction","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","llc","ltd","limited","machines","magazine","management","marine","marketing","markets","media","memorial","ministere","ministry","military","mobile","motor","motors","musee","museum","news","observatory","office","oil","optical","orchestra","organization","partners","partnership","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","politburo","polytechnic","post","power","press","productions","quartet","radio","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","societe","subsidiary","society","sons","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce(((e,t)=>(e[t]=!0,e)),{}),fi=["atoll","basin","bay","beach","bluff","bog","camp","canyon","canyons","cape","cave","caves","cliffs","coast","cove","coves","crater","crossing","creek","desert","dune","dunes","downs","estates","escarpment","estuary","falls","fjord","fjords","forest","forests","glacier","gorge","gorges","grove","gulf","gully","highland","heights","hollow","hill","hills","inlet","island","islands","isthmus","junction","knoll","lagoon","lake","lakeshore","marsh","marshes","mount","mountain","mountains","narrows","peninsula","plains","plateau","pond","rapids","ravine","reef","reefs","ridge","river","rivers","sandhill","shoal","shore","shoreline","shores","strait","straits","springs","stream","swamp","tombolo","trail","trails","trench","valley","vallies","village","volcano","waterfall","watershed","wetland","woods","acres","burough","county","district","municipality","prefecture","province","region","reservation","state","territory","borough","metropolis","downtown","uptown","midtown","city","town","township","hamlet","country","kingdom","enclave","neighbourhood","neighborhood","kingdom","ward","zone","airport","amphitheater","arch","arena","auditorium","bar","barn","basilica","battlefield","bridge","building","castle","centre","coliseum","cineplex","complex","dam","farm","field","fort","garden","gardens","gymnasium","hall","house","levee","library","manor","memorial","monument","museum","gallery","palace","pillar","pits","plantation","playhouse","quarry","sportsfield","sportsplex","stadium","terrace","terraces","theater","tower","park","parks","site","ranch","raceway","sportsplex","ave","st","street","rd","road","lane","landing","crescent","cr","way","tr","terrace","avenue"].reduce(((e,t)=>(e[t]=!0,e)),{}),bi=[[/([^v])ies$/i,"$1y"],[/(ise)s$/i,"$1"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(ause)s$/i,"$1"],[/(ease)s$/i,"$1"],[/(ious)es$/i,"$1"],[/(ouse)s$/i,"$1"],[/(ose)s$/i,"$1"],[/(..ase)s$/i,"$1"],[/(..[aeiu]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/([xo]|ch|ss|sh)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ic)s$/i,"$1"],[/s$/i,""]];const vi=function(e,t){const{irregularPlurals:n}=t.two,r=(o=n,Object.keys(o).reduce(((e,t)=>(e[o[t]]=t,e)),{}));var o;if(r.hasOwnProperty(e))return r[e];for(let t=0;t(wi[t].forEach((n=>e[n]=t)),e)),{});const ki=function(e){const t=e.substring(e.length-3);if(!0===wi.hasOwnProperty(t))return wi[t];const n=e.substring(e.length-2);if(!0===wi.hasOwnProperty(n))return wi[n];return"s"===e.substring(e.length-1)?"PresentTense":null},Pi={are:"be",were:"be",been:"be",is:"be",am:"be",was:"be",be:"be",being:"be"},Ai=function(e,t,n){const{fromPast:r,fromPresent:o,fromGerund:a,fromParticiple:i}=t.two.models,{prefix:s,verb:l,particle:u}=function(e,t){let n="",r={};t.one&&t.one.prefixes&&(r=t.one.prefixes);let[o,a]=e.split(/ /);return a&&!0===r[o]&&(n=o,o=a,a=""),{prefix:n,verb:o,particle:a}}(e,t);let c="";if(n||(n=ki(e)),Pi.hasOwnProperty(e))c=Pi[e];else if("Participle"===n)c=Xa(l,i);else if("PastTense"===n)c=Xa(l,r);else if("PresentTense"===n)c=Xa(l,o);else{if("Gerund"!==n)return e;c=Xa(l,a)}return u&&(c+=" "+u),s&&(c=s+" "+c),c},Ci=function(e,t){const{toPast:n,toPresent:r,toGerund:o,toParticiple:a}=t.two.models;if("be"===e)return{Infinitive:e,Gerund:"being",PastTense:"was",PresentTense:"is"};const[i,s]=(e=>/ /.test(e)?e.split(/ /):[e,""])(e),l={Infinitive:i,PastTense:Xa(i,n),PresentTense:Xa(i,r),Gerund:Xa(i,o),FutureTense:"will "+i};let u=Xa(i,a);if(u!==e&&u!==l.PastTense){const n=t.one.lexicon||{};"Participle"!==n[u]&&"Adjective"!==n[u]||("play"===e&&(u="played"),l.Participle=u)}return s&&Object.keys(l).forEach((e=>{l[e]+=" "+s})),l};var Ni={toInfinitive:Ai,conjugate:Ci,all:function(e,t){const n=Ci(e,t);return delete n.FutureTense,Object.values(n).filter((e=>e))}};const ji=function(e,t){const n=t.two.models.toSuperlative;return Xa(e,n)},xi=function(e,t){const n=t.two.models.toComparative;return Xa(e,n)},Ii=function(e="",t=[]){const n=e.length;for(let r=n<=6?n-1:6;r>=1;r-=1){const o=e.substring(n-r,e.length);if(!0===t[o.length].hasOwnProperty(o)){return e.slice(0,n-r)+t[o.length][o]}}return null},Ti="ically",Di=new Set(["analyt"+Ti,"chem"+Ti,"class"+Ti,"clin"+Ti,"crit"+Ti,"ecolog"+Ti,"electr"+Ti,"empir"+Ti,"frant"+Ti,"grammat"+Ti,"ident"+Ti,"ideolog"+Ti,"log"+Ti,"mag"+Ti,"mathemat"+Ti,"mechan"+Ti,"med"+Ti,"method"+Ti,"method"+Ti,"mus"+Ti,"phys"+Ti,"phys"+Ti,"polit"+Ti,"pract"+Ti,"rad"+Ti,"satir"+Ti,"statist"+Ti,"techn"+Ti,"technolog"+Ti,"theoret"+Ti,"typ"+Ti,"vert"+Ti,"whims"+Ti]),Hi=[null,{},{ly:""},{ily:"y",bly:"ble",ply:"ple"},{ally:"al",rply:"rp"},{ually:"ual",ially:"ial",cally:"cal",eally:"eal",rally:"ral",nally:"nal",mally:"mal",eeply:"eep",eaply:"eap"},{ically:"ic"}],Ei=new Set(["early","only","hourly","daily","weekly","monthly","yearly","mostly","duly","unduly","especially","undoubtedly","conversely","namely","exceedingly","presumably","accordingly","overly","best","latter","little","long","low"]),Gi={wholly:"whole",fully:"full",truly:"true",gently:"gentle",singly:"single",customarily:"customary",idly:"idle",publically:"public",quickly:"quick",superbly:"superb",cynically:"cynical",well:"good"},Oi=[null,{y:"ily"},{ly:"ly",ic:"ically"},{ial:"ially",ual:"ually",tle:"tly",ble:"bly",ple:"ply",ary:"arily"},{},{},{}],Fi={cool:"cooly",whole:"wholly",full:"fully",good:"well",idle:"idly",public:"publicly",single:"singly",special:"especially"},Vi=function(e){if(Fi.hasOwnProperty(e))return Fi[e];let t=Ii(e,Oi);return t||(t=e+"ly"),t};var zi={toSuperlative:ji,toComparative:xi,toAdverb:Vi,toNoun:function(e,t){const n=t.two.models.adjToNoun;return Xa(e,n)},fromAdverb:function(e){return e.endsWith("ly")?Di.has(e)?e.replace(/ically/,"ical"):Ei.has(e)?null:Gi.hasOwnProperty(e)?Gi[e]:Ii(e,Hi)||e:null},fromSuperlative:function(e,t){const n=t.two.models.fromSuperlative;return Xa(e,n)},fromComparative:function(e,t){const n=t.two.models.fromComparative;return Xa(e,n)},all:function(e,t){let n=[e];return n.push(ji(e,t)),n.push(xi(e,t)),n.push(Vi(e)),n=n.filter((e=>e)),n=new Set(n),Array.from(n)}},Bi={noun:yi,verb:Ni,adjective:zi},Si={Singular:(e,t,n,r)=>{const o=r.one.lexicon,a=n.two.transform.noun.toPlural(e,r);o[a]||(t[a]=t[a]||"Plural")},Actor:(e,t,n,r)=>{const o=r.one.lexicon,a=n.two.transform.noun.toPlural(e,r);o[a]||(t[a]=t[a]||["Plural","Actor"])},Comparable:(e,t,n,r)=>{const o=r.one.lexicon,{toSuperlative:a,toComparative:i}=n.two.transform.adjective,s=a(e,r);o[s]||(t[s]=t[s]||"Superlative");const l=i(e,r);o[l]||(t[l]=t[l]||"Comparative"),t[e]="Adjective"},Demonym:(e,t,n,r)=>{const o=n.two.transform.noun.toPlural(e,r);t[o]=t[o]||["Demonym","Plural"]},Infinitive:(e,t,n,r)=>{const o=r.one.lexicon,a=n.two.transform.verb.conjugate(e,r);Object.entries(a).forEach((e=>{o[e[1]]||t[e[1]]||"FutureTense"===e[0]||(t[e[1]]=e[0])}))},PhrasalVerb:(e,t,n,r)=>{const o=r.one.lexicon;t[e]=["PhrasalVerb","Infinitive"];const a=r.one._multiCache,[i,s]=e.split(" ");o[i]||(t[i]=t[i]||"Infinitive");const l=n.two.transform.verb.conjugate(i,r);delete l.FutureTense,Object.entries(l).forEach((e=>{if("Actor"===e[0]||""===e[1])return;t[e[1]]||o[e[1]]||(t[e[1]]=e[0]),a[e[1]]=2;const n=e[1]+" "+s;t[n]=t[n]||[e[0],"PhrasalVerb"]}))},Multiple:(e,t)=>{t[e]=["Multiple","Cardinal"],t[e+"th"]=["Multiple","Ordinal"],t[e+"ths"]=["Multiple","Fraction"]},Cardinal:(e,t)=>{t[e]=["TextValue","Cardinal"]},Ordinal:(e,t)=>{t[e]=["TextValue","Ordinal"],t[e+"s"]=["TextValue","Fraction"]},Place:(e,t)=>{t[e]=["Place","ProperNoun"]},Region:(e,t)=>{t[e]=["Region","ProperNoun"]}};const $i={e:["mice","louse","antennae","formulae","nebulae","vertebrae","vitae"],i:["tia","octopi","viri","radii","nuclei","fungi","cacti","stimuli"],n:["men"],t:["feet"]},Mi=new Set(["israelis","menus","logos"]),Li=["bus","mas","was","ias","xas","vas","cis","lis","nis","ois","ris","sis","tis","xis","aus","cus","eus","fus","gus","ius","lus","nus","das","ous","pus","rus","sus","tus","xus","aos","igos","ados","ogos","'s","ss"],Ki=function(e){if(!e||e.length<=3)return!1;if(Mi.has(e))return!0;const t=e[e.length-1];return $i.hasOwnProperty(t)?$i[t].find((t=>e.endsWith(t))):"s"===t&&!Li.find((t=>e.endsWith(t)))};var Ji={two:{quickSplit:function(e){const t=/[,:;]/,n=[];return e.forEach((e=>{let r=0;e.forEach(((o,a)=>{t.test(o.post)&&function(e,t){const n=/^[0-9]+$/,r=e[t];if(!r)return!1;const o=new Set(["may","april","august","jan"]);if("like"===r.normal||o.has(r.normal))return!1;if(r.tags.has("Place")||r.tags.has("Date"))return!1;if(e[t-1]){const n=e[t-1];if(n.tags.has("Date")||o.has(n.normal))return!1;if(n.tags.has("Adjective")||r.tags.has("Adjective"))return!1}const a=r.normal;return 1!==a.length&&2!==a.length&&4!==a.length||!n.test(a)}(e,a+1)&&(n.push(e.slice(r,a+1)),r=a+1)})),r{const i=e[t],s=(t=(t=t.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);s.length>1&&(void 0===a[s[0]]||s.length>a[s[0]])&&(a[s[0]]=s.length),!0===Si.hasOwnProperty(i)&&Si[i](t,o,n,r),o[t]=o[t]||i})),delete o[""],delete o.null,delete o[" "],{lex:o,_multi:a}},transform:Bi,looksPlural:Ki}};const Wi={one:{lexicon:{}},two:{models:mi}},qi={"Actor|Verb":"Actor","Adj|Gerund":"Adjective","Adj|Noun":"Adjective","Adj|Past":"Adjective","Adj|Present":"Adjective","Noun|Verb":"Singular","Noun|Gerund":"Gerund","Person|Noun":"Noun","Person|Date":"Month","Person|Verb":"FirstName","Person|Place":"Person","Person|Adj":"Comparative","Plural|Verb":"Plural","Unit|Noun":"Noun"},Ui=function(e,t){const n={model:t,methods:Ji},{lex:r,_multi:o}=Ji.two.expandLexicon(e,n);return Object.assign(t.one.lexicon,r),Object.assign(t.one._multiCache,o),t},Ri=function(e,t,n){const r=Ci(e,Wi);t[r.PastTense]=t[r.PastTense]||"PastTense",t[r.Gerund]=t[r.Gerund]||"Gerund",!0===n&&(t[r.PresentTense]=t[r.PresentTense]||"PresentTense")},Qi=function(e,t,n){const r=ji(e,n);t[r]=t[r]||"Superlative";const o=xi(e,n);t[o]=t[o]||"Comparative"},Zi=function(e,t){const n={},r=t.one.lexicon;return Object.keys(e).forEach((o=>{const a=e[o];if(n[o]=qi[a],"Noun|Verb"!==a&&"Person|Verb"!==a&&"Actor|Verb"!==a||Ri(o,r,!1),"Adj|Present"===a&&(Ri(o,r,!0),Qi(o,r,t)),"Person|Adj"===a&&Qi(o,r,t),"Adj|Gerund"===a||"Noun|Gerund"===a){const e=Ai(o,Wi,"Gerund");r[e]||(n[e]="Infinitive")}if("Noun|Gerund"!==a&&"Adj|Noun"!==a&&"Person|Noun"!==a||function(e,t,n){const r=Ao(e,n);t[r]=t[r]||"Plural"}(o,r,t),"Adj|Past"===a){const e=Ai(o,Wi,"PastTense");r[e]||(n[e]="Infinitive")}})),t=Ui(n,t)};let _i={one:{_multiCache:{},lexicon:No,frozenLex:{"20th century fox":"Organization","7 eleven":"Organization","motel 6":"Organization","excuse me":"Expression","financial times":"Organization","guns n roses":"Organization","la z boy":"Organization","labour party":"Organization","new kids on the block":"Organization","new york times":"Organization","the guess who":"Organization","thin lizzy":"Organization","prime minister":"Actor","free market":"Singular","lay up":"Singular","living room":"Singular","living rooms":"Plural","spin off":"Singular","appeal court":"Uncountable","cold war":"Uncountable","gene pool":"Uncountable","machine learning":"Uncountable","nail polish":"Uncountable","time off":"Uncountable","take part":"Infinitive","bill gates":"Person","doctor who":"Person","dr who":"Person","he man":"Person","iron man":"Person","kid cudi":"Person","run dmc":"Person","rush limbaugh":"Person","snow white":"Person","tiger woods":"Person","brand new":"Adjective","en route":"Adjective","left wing":"Adjective","off guard":"Adjective","on board":"Adjective","part time":"Adjective","right wing":"Adjective","so called":"Adjective","spot on":"Adjective","straight forward":"Adjective","super duper":"Adjective","tip top":"Adjective","top notch":"Adjective","up to date":"Adjective","win win":"Adjective","brooklyn nets":"SportsTeam","chicago bears":"SportsTeam","houston astros":"SportsTeam","houston dynamo":"SportsTeam","houston rockets":"SportsTeam","houston texans":"SportsTeam","minnesota twins":"SportsTeam","orlando magic":"SportsTeam","san antonio spurs":"SportsTeam","san diego chargers":"SportsTeam","san diego padres":"SportsTeam","iron maiden":"ProperNoun","isle of man":"Country","united states":"Country","united states of america":"Country","prince edward island":"Region","cedar breaks":"Place","cedar falls":"Place","point blank":"Adverb","tiny bit":"Adverb","by the time":"Conjunction","no matter":"Conjunction","civil wars":"Plural","credit cards":"Plural","default rates":"Plural","free markets":"Plural","head starts":"Plural","home runs":"Plural","lay ups":"Plural","phone calls":"Plural","press releases":"Plural","record labels":"Plural","soft serves":"Plural","student loans":"Plural","tax returns":"Plural","tv shows":"Plural","video games":"Plural","took part":"PastTense","takes part":"PresentTense","taking part":"Gerund","taken part":"Participle","light bulb":"Noun","rush hour":"Noun","fluid ounce":"Unit","the rolling stones":"Organization"}},two:{irregularPlurals:ho,models:mi,suffixPatterns:ja,prefixPatterns:Da,endsWith:La,neighbours:Wa,regexNormal:[[/^[\w.]+@[\w.]+\.[a-z]{2,3}$/,"Email"],[/^(https?:\/\/|www\.)+\w+\.[a-z]{2,3}/,"Url","http.."],[/^[a-z0-9./].+\.(com|net|gov|org|ly|edu|info|biz|dev|ru|jp|de|in|uk|br|io|ai)/,"Url",".com"],[/^[PMCE]ST$/,"Timezone","EST"],[/^ma?c'[a-z]{3}/,"LastName","mc'neil"],[/^o'[a-z]{3}/,"LastName","o'connor"],[/^ma?cd[aeiou][a-z]{3}/,"LastName","mcdonald"],[/^(lol)+[sz]$/,"Expression","lol"],[/^wo{2,}a*h?$/,"Expression","wooah"],[/^(hee?){2,}h?$/,"Expression","hehe"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb","un-vite"],[/^(m|k|cm|km)\/(s|h|hr)$/,"Unit","5 k/m"],[/^(ug|ng|mg)\/(l|m3|ft3)$/,"Unit","ug/L"],[/[^:/]\/\p{Letter}/u,"SlashedTerm","love/hate"]],regexText:[[/^#[\p{Number}_]*\p{Letter}/u,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^([A-Z]\.){2}[A-Z]?/i,["Acronym","Noun"],"F.B.I"],[/.{3}[lkmnp]in['‘’‛‵′`´]$/,"Gerund","chillin'"],[/.{4}s['‘’‛‵′`´]$/,"Possessive","flanders'"],[/^[\p{Emoji_Presentation}\p{Extended_Pictographic}]/u,"Emoji","emoji-class"]],regexNumbers:[[/^@1?[0-9](am|pm)$/i,"Time","3pm"],[/^@1?[0-9]:[0-9]{2}(am|pm)?$/i,"Time","3:30pm"],[/^'[0-9]{2}$/,"Year"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time","3:12:31"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/i,"Time","1:12pm"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/i,"Time","1:12:31pm"],[/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}/i,"Date","iso-date"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date","iso-dash"],[/^[0-9]{1,4}\/[0-9]{1,2}\/([0-9]{4}|[0-9]{2})$/,"Date","iso-slash"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date","iso-dot"],[/^[0-9]{1,4}-[a-z]{2,9}-[0-9]{1,4}$/i,"Date","12-dec-2019"],[/^utc ?[+-]?[0-9]+$/,"Timezone","utc-9"],[/^(gmt|utc)[+-][0-9]{1,2}$/i,"Timezone","gmt-3"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber","421-0029"],[/^(\+?[0-9][ -])?[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber","1-800-"],[/^[-+]?\p{Currency_Symbol}[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?([kmb]|bn)?\+?$/u,["Money","Value"],"$5.30"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\p{Currency_Symbol}\+?$/u,["Money","Value"],"5.30£"],[/^[-+]?[$£]?[0-9]([0-9,.])+(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"],"$400usd"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"],"5,999"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|r?th)$/,["Ordinal","NumericValue"],"53rd"],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"],".73th"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"],"-4%"],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"],".3%"],[/^[0-9]{1,4}\/[0-9]{1,4}(st|nd|rd|th)?s?$/,["Fraction","NumericValue"],"2/3rds"],[/^[0-9.]{1,3}[a-z]{0,2}[-–—][0-9]{1,3}[a-z]{0,2}$/,["Value","NumberRange"],"3-4"],[/^[0-9]{1,2}(:[0-9][0-9])?(am|pm)? ?[-–—] ?[0-9]{1,2}(:[0-9][0-9])?(am|pm)$/,["Time","NumberRange"],"3-4pm"],[/^[0-9.]+([a-z°]{1,4})$/,"NumericValue","9km"]],switches:jo,clues:ca,uncountable:{},orgWords:pi,placeWords:fi}};_i=function(e){return e=function(e,t){return Object.keys(e).forEach((n=>{"Uncountable"===e[n]&&(t.two.uncountable[n]=!0,e[n]="Uncountable")})),t}((e=Ui(e.one.lexicon,e)).one.lexicon,e),e=function(e){const{irregularPlurals:t}=e.two,{lexicon:n}=e.one;return Object.entries(t).forEach((e=>{n[e[0]]=n[e[0]]||"Singular",n[e[1]]=n[e[1]]||"Plural"})),e}(e=Zi(e.two.switches,e)),e}(_i);const Xi=function(e,t,n,r){const o=r.methods.one.setTag;"-"===e[t].post&&e[t+1]&&o([e[t],e[t+1]],"Hyphenated",r,null,"1-punct-hyphen''")},Yi=/^(under|over|mis|re|un|dis|semi)-?/,es=function(e,t,n){const r=n.two.switches,o=e[t];if(r.hasOwnProperty(o.normal))o.switch=r[o.normal];else if(Yi.test(o.normal)){const e=o.normal.replace(Yi,"");e.length>3&&r.hasOwnProperty(e)&&(o.switch=r[e])}},ts=function(e,t,n){if(!t||0===t.length)return;if(!0===e.frozen)return;const r="undefined"!=typeof process&&process.env?process.env:self.env||{};r&&r.DEBUG_TAGS&&((e,t,n="")=>{const r=e.text||"["+e.implicit+"]";var o;"string"!=typeof t&&t.length>2&&(t=t.slice(0,2).join(", #")+" +"),t="string"!=typeof t?t.join(", #"):t,console.log(` ${(o=r,""+o+"").padEnd(24)} → #${t.padEnd(22)} ${(e=>""+e+"")(n)}`)})(e,t,n),e.tags=e.tags||new Set,"string"==typeof t?e.tags.add(t):t.forEach((t=>e.tags.add(t)))},ns=["Acronym","Abbreviation","ProperNoun","Uncountable","Possessive","Pronoun","Activity","Honorific","Month"],rs=function(e,t,n){const r=e[t],o=Array.from(r.tags);for(let e=0;ee.tags.has(t)))||(Ki(e.normal)?ts(e,"Plural","3-plural-guess"):ts(e,"Singular","3-singular-guess"))}(r),function(e){const t=e.tags;if(t.has("Verb")&&1===t.size){const t=ki(e.normal);t&&ts(e,t,"3-verb-tense-guess")}}(r)},os=/^\p{Lu}[\p{Ll}'’]/u,as=/[0-9]/,is=["Date","Month","WeekDay","Unit","Expression"],ss=/[IVX]/,ls=/^[IVXLCDM]{2,}$/,us=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,cs={li:!0,dc:!0,md:!0,dm:!0,ml:!0},hs=function(e,t,n){const r=e[t];r.index=r.index||[0,0];const o=r.index[1],a=r.text||"";return 0!==o&&!0===os.test(a)&&!1===as.test(a)?is.find((e=>r.tags.has(e)))||r.pre.match(/["']$/)||"the"===r.normal?null:(rs(e,t,n),r.tags.has("Noun")||r.frozen||r.tags.clear(),ts(r,"ProperNoun","2-titlecase"),!0):a.length>=2&&ls.test(a)&&ss.test(a)&&us.test(a)&&!cs[r.normal]?(ts(r,"RomanNumeral","2-xvii"),!0):null},ds=function(e="",t=[]){const n=e.length;let r=7;n<=r&&(r=n-1);for(let o=r;o>1;o-=1){const r=e.substring(n-o,n);if(!0===t[r.length].hasOwnProperty(r)){return t[r.length][r]}}return null},gs=function(e,t,n){const r=e[t];if(0===r.tags.size){let e=ds(r.normal,n.two.suffixPatterns);if(null!==e)return ts(r,e,"2-suffix"),r.confidence=.7,!0;if(r.implicit&&(e=ds(r.implicit,n.two.suffixPatterns),null!==e))return ts(r,e,"2-implicit-suffix"),r.confidence=.7,!0}return null},ms=/['‘’‛‵′`´]/,ps=function(e,t){for(let n=0;nn-3&&(r=n-3);for(let n=r;n>2;n-=1){const r=e.substring(0,n);if(!0===t[r.length].hasOwnProperty(r))return t[r.length][r]}return null}(r.normal,n.two.prefixPatterns);if(null!==e)return ts(r,e,"2-prefix"),r.confidence=.5,!0}return null},vs=new Set(["in","on","by","until","for","to","during","throughout","through","within","before","after","of","this","next","last","circa","around","post","pre","budget","classic","plan","may"]),ys=function(e){if(!e)return!1;const t=e.normal||e.implicit;return!!vs.has(t)||(!!(e.tags.has("Date")||e.tags.has("Month")||e.tags.has("WeekDay")||e.tags.has("Year"))||!!e.tags.has("ProperNoun"))},ws=function(e){return!!e&&(!!e.tags.has("Ordinal")||(!!(e.tags.has("Cardinal")&&e.normal.length<3)||("is"===e.normal||"was"===e.normal)))},ks=function(e){return e&&(e.tags.has("Date")||e.tags.has("Month")||e.tags.has("WeekDay")||e.tags.has("Year"))},Ps=function(e,t){const n=e[t];if(n.tags.has("NumericValue")&&n.tags.has("Cardinal")&&4===n.normal.length){const r=Number(n.normal);if(r&&!isNaN(r)&&r>1400&&r<2100){const o=e[t-1],a=e[t+1];if(ys(o)||ys(a))return ts(n,"Year","2-tagYear");if(r>=1920&&r<2025){if(ws(o)||ws(a))return ts(n,"Year","2-tagYear-close");if(ks(e[t-2])||ks(e[t+2]))return ts(n,"Year","2-tagYear-far");if(o&&(o.tags.has("Determiner")||o.tags.has("Possessive"))&&a&&a.tags.has("Noun")&&!a.tags.has("Plural"))return ts(n,"Year","2-tagYear-noun")}}}return null},As=function(e,t,n,r){const o=r.methods.one.setTag,a=e[t],i=["PastTense","PresentTense","Auxiliary","Modal","Particle"];if(a.tags.has("Verb")){i.find((e=>a.tags.has(e)))||o([a],"Infinitive",r,null,"2-verb-type''")}},Cs=/^[A-Z]('s|,)?$/,Ns=/^[A-Z-]+$/,js=/^[A-Z]+s$/,xs=/([A-Z]\.)+[A-Z]?,?$/,Is=/[A-Z]{2,}('s|,)?$/,Ts=/([a-z]\.)+[a-z]\.?$/,Ds={I:!0,A:!0},Hs={la:!0,ny:!0,us:!0,dc:!0,gb:!0},Es=function(e,t,n){const r=e[t];return r.tags.has("RomanNumeral")||r.tags.has("Acronym")||r.frozen?null:function(e,t){let n=e.text;if(!1===Ns.test(n)){if(!(n.length>3&&!0===js.test(n)))return!1;n=n.replace(/s$/,"")}return!(n.length>5||Ds.hasOwnProperty(n)||t.one.lexicon.hasOwnProperty(e.normal)||!0!==xs.test(n)&&!0!==Ts.test(n)&&!0!==Cs.test(n)&&!0!==Is.test(n))}(r,n)?(r.tags.clear(),ts(r,["Acronym","Noun"],"3-no-period-acronym"),!0===Hs[r.normal]&&ts(r,"Place","3-place-acronym"),!0===js.test(r.text)&&ts(r,"Plural","3-plural-acronym"),!0):!Ds.hasOwnProperty(r.text)&&Cs.test(r.text)?(r.tags.clear(),ts(r,["Acronym","Noun"],"3-one-letter-acronym"),!0):r.tags.has("Organization")&&r.text.length<=3?(ts(r,"Acronym","3-org-acronym"),!0):r.tags.has("Organization")&&Ns.test(r.text)&&r.text.length<=6?(ts(r,"Acronym","3-titlecase-acronym"),!0):null},Gs=function(e,t){if(!e)return null;const n=t.find((t=>e.normal===t[0]));return n?n[1]:null},Os=function(e,t){if(!e)return null;const n=t.find((t=>e.tags.has(t[0])));return n?n[1]:null},Fs=function(e,t,n){const{leftTags:r,leftWords:o,rightWords:a,rightTags:i}=n.two.neighbours,s=e[t];if(0===s.tags.size){let l=null;if(l=l||Gs(e[t-1],o),l=l||Gs(e[t+1],a),l=l||Os(e[t-1],r),l=l||Os(e[t+1],i),l)return ts(s,l,"3-[neighbour]"),rs(e,t,n),e[t].confidence=.2,!0}return null},Vs=function(e,t,n){return!!e&&(!e.tags.has("FirstName")&&!e.tags.has("Place")&&(!!(e.tags.has("ProperNoun")||e.tags.has("Organization")||e.tags.has("Acronym"))||!(n||(r=e.text,!/^\p{Lu}[\p{Ll}'’]/u.test(r)))&&(0!==t||e.tags.has("Singular"))));var r},zs=function(e,t,n,r){const o=n.model.two.orgWords,a=n.methods.one.setTag,i=e[t];if(!0===o[i.machine||i.normal]&&Vs(e[t-1],t-1,r)){a([e[t]],"Organization",n,null,"3-[org-word]");for(let o=t;o>=0&&Vs(e[o],o,r);o-=1)a([e[o]],"Organization",n,null,"3-[org-word]")}return null},Bs=/'s$/,Ss=new Set(["athletic","city","community","eastern","federal","financial","great","historic","historical","local","memorial","municipal","national","northern","provincial","southern","state","western","spring","pine","sunset","view","oak","maple","spruce","cedar","willow"]),$s=new Set(["center","centre","way","range","bar","bridge","field","pit"]),Ms=function(e,t,n){if(!e)return!1;const r=e.tags;return!(r.has("Organization")||r.has("Possessive")||Bs.test(e.normal))&&(!(!r.has("ProperNoun")&&!r.has("Place"))||!(n||(o=e.text,!/^\p{Lu}[\p{Ll}'’]/u.test(o)))&&(0!==t||r.has("Singular")));var o},Ls=function(e,t,n,r){const o=n.model.two.placeWords,a=n.methods.one.setTag,i=e[t],s=i.machine||i.normal;if(!0===o[s]){for(let o=t-1;o>=0;o-=1)if(!Ss.has(e[o].normal)){if(!Ms(e[o],o,r))break;a(e.slice(o,t+1),"Place",n,null,"3-[place-of-foo]")}if($s.has(s))return!1;for(let o=t+1;oe[t].tags.has("ProperNoun")&&Js.test(e[t].text)?"Noun":null,qs=(e,t,n)=>0!==t||e[1]?null:n,Us={"Adj|Gerund":(e,t)=>Ws(e,t),"Adj|Noun":(e,t)=>Ws(e,t)||function(e,t){return!e[t+1]&&e[t-1]&&e[t-1].tags.has("Determiner")?"Noun":null}(e,t),"Actor|Verb":(e,t)=>Ws(e,t),"Adj|Past":(e,t)=>Ws(e,t),"Adj|Present":(e,t)=>Ws(e,t),"Noun|Gerund":(e,t)=>Ws(e,t),"Noun|Verb":(e,t)=>t>0&&Ws(e,t)||qs(e,t,"Infinitive"),"Plural|Verb":(e,t)=>Ws(e,t)||qs(e,t,"PresentTense")||function(e,t,n){return 0===t&&e.length>3?n:null}(e,t,"Plural"),"Person|Noun":(e,t)=>Ws(e,t),"Person|Verb":(e,t)=>0!==t?Ws(e,t):null,"Person|Adj":(e,t)=>0===t&&e.length>1||Ws(e,t)?"Person":null},Rs="undefined"!=typeof process&&process.env?process.env:self.env||{},Qs=/^(under|over|mis|re|un|dis|semi)-?/,Zs=(e,t)=>{if(!e||!t)return null;const n=e.normal||e.implicit;let r=null;return t.hasOwnProperty(n)&&(r=t[n]),r&&Rs.DEBUG_TAGS&&console.log(`\n  ↓ - '${n}' `),r},_s=(e,t={},n)=>{if(!e||!t)return null;const r=Array.from(e.tags).sort(((e,t)=>(n[e]?n[e].parents.length:0)>(n[t]?n[t].parents.length:0)?-1:1));let o=r.find((e=>t[e]));return o&&Rs.DEBUG_TAGS&&console.log(`  ↓ - '${e.normal||e.implicit}' (#${o}) `),o=t[o],o},Xs=function(e,t,n){const r=n.model,o=n.methods.one.setTag,{switches:a,clues:i}=r.two,s=e[t];let l=s.normal||s.implicit||"";if(Qs.test(l)&&!a[l]&&(l=l.replace(Qs,"")),s.switch){const a=s.switch;if(s.tags.has("Acronym")||s.tags.has("PhrasalVerb"))return;let u=function(e,t,n,r){if(!n)return null;const o="also"!==e[t-1]?.text?t-1:Math.max(0,t-2),a=r.one.tagSet;let i=Zs(e[t+1],n.afterWords);return i=i||Zs(e[o],n.beforeWords),i=i||_s(e[o],n.beforeTags,a),i=i||_s(e[t+1],n.afterTags,a),i}(e,t,i[a],r);Us[a]&&(u=Us[a](e,t)||u),u?(o([s],u,n,null,`3-[switch] (${a})`),rs(e,t,r)):Rs.DEBUG_TAGS&&console.log(`\n -> X - '${l}' : (${a}) `)}},Ys={there:!0,this:!0,it:!0,him:!0,her:!0,us:!0},el=function(e){if(e.filter((e=>!e.tags.has("ProperNoun"))).length<=3)return!1;const t=/^[a-z]/;return e.every((e=>!t.test(e.text)))},tl=function(e,t,n,r){for(let o=0;o=2){if(e.length<4&&!Ys[e[1].normal])return;if(!o.tags.has("PhrasalVerb")&&r.hasOwnProperty(o.normal))return;(e[1].tags.has("Noun")||e[1].tags.has("Determiner"))&&(e.slice(1,3).some((e=>e.tags.has("Verb")))&&!o.tags.has("#PhrasalVerb")||n([o],"Imperative",t,null,"3-[imperative]"))}}(e,n)},rl={Possessive:e=>{let t=e.machine||e.normal||e.text;return t=t.replace(/'s$/,""),t},Plural:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.noun.toSingular(n,t.model)},Copula:()=>"is",PastTense:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.verb.toInfinitive(n,t.model,"PastTense")},Gerund:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.verb.toInfinitive(n,t.model,"Gerund")},PresentTense:(e,t)=>{const n=e.machine||e.normal||e.text;return e.tags.has("Infinitive")?n:t.methods.two.transform.verb.toInfinitive(n,t.model,"PresentTense")},Comparative:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.adjective.fromComparative(n,t.model)},Superlative:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.adjective.fromSuperlative(n,t.model)},Adverb:(e,t)=>{const{fromAdverb:n}=t.methods.two.transform.adjective;return n(e.machine||e.normal||e.text)}},ol={Adverb:"RB",Comparative:"JJR",Superlative:"JJS",Adjective:"JJ",TO:"Conjunction",Modal:"MD",Auxiliary:"MD",Gerund:"VBG",PastTense:"VBD",Participle:"VBN",PresentTense:"VBZ",Infinitive:"VB",Particle:"RP",Verb:"VB",Pronoun:"PRP",Cardinal:"CD",Conjunction:"CC",Determiner:"DT",Preposition:"IN",QuestionWord:"WP",Expression:"UH",Possessive:"POS",ProperNoun:"NNP",Person:"NNP",Place:"NNP",Organization:"NNP",Singular:"NN",Plural:"NNS",Noun:"NN",There:"EX"};var al={preTagger:function(e){const{methods:t,model:n,world:r}=e,o=e.docs;!function(e,t,n){e.forEach((e=>{!function(e,t,n,r){const o=r.methods.one.setTag;if(e.length>=3){const t=/:/;if(e[0].post.match(t)){const t=e[1];if(t.tags.has("Value")||t.tags.has("Email")||t.tags.has("PhoneNumber"))return;o([e[0]],"Expression",r,null,"2-punct-colon''")}}}(e,0,0,n)}))}(o,0,r);const a=t.two.quickSplit(o);for(let e=0;e{for(let r=0;r{e.forEach((e=>{e.penn=function(e){if(e.tags.has("ProperNoun")&&e.tags.has("Plural"))return"NNPS";if(e.tags.has("Possessive")&&e.tags.has("Pronoun"))return"PRP$";if("there"===e.normal)return"EX";if("to"===e.normal)return"TO";const t=e.tagRank||[];for(let e=0;e{e.implicit=e.normal,e.text="",e.normal=""}));for(let e=0;e(e.implicit=e.text,e.machine=e.text,e.pre="",e.post="",e.text="",e.normal="",e.index=[r,o+t],e))),n[0]&&(n[0].pre=e[r][o].pre,n[n.length-1].post=e[r][o].post,n[0].text=e[r][o].text,n[0].normal=e[r][o].normal),e[r].splice(o,1,...n))},fl=/'/,bl=new Set(["been","become"]),vl=new Set(["what","how","when","if","too"]),yl=new Set(["too","also","enough"]),wl=function(e,t){const n=e[t].normal.split(fl)[0];if("let"===n)return[n,"us"];if("there"===n){const r=e[t+1];if(r&&r.tags.has("Plural"))return[n,"are"]}return"has"===((e,t)=>{for(let n=t+1;n{for(let n=t+1;n0&&(n-=1),e[a]&&(a+=1),o.ptrs=[[0,n,a]],o.compute(["freeze","lexicon","preTagger","unfreeze"]),function(e){e.forEach(((e,t)=>{e.index&&(e.index[1]=t)}))}(e)},Hl={d:(e,t)=>Cl(e,t),t:(e,t)=>function(e,t){if("ain't"===e[t].normal||"aint"===e[t].normal){if(e[t+1]&&"never"===e[t+1].normal)return["have"];const n=function(e,t){for(let n=t-1;n>=0;n-=1)if(e[n].tags.has("Noun")||e[n].tags.has("Pronoun")||e[n].tags.has("Plural")||e[n].tags.has("Singular"))return e[n];return null}(e,t);if(n){if("we"===n.normal||"they"===n.normal)return["are","not"];if("i"===n.normal)return["am","not"];if(n.tags&&n.tags.has("Plural"))return["are","not"]}return["is","not"]}return[e[t].normal.replace(/n't/,""),"not"]}(e,t),s:(e,t,n)=>((e,t)=>{const n=e[t];if(Nl.hasOwnProperty(n.machine||n.normal))return!1;if(n.tags.has("Possessive"))return!0;if(n.tags.has("QuestionWord"))return!1;if("he's"===n.normal||"she's"===n.normal)return!1;const r=e[t+1];if(!r)return!0;if("it's"===n.normal)return!!r.tags.has("#Noun");if("Noun|Gerund"==r.switch){const r=e[t+2];return r?!!r.tags.has("Copula")||("on"===r.normal||r.normal,!1):!(!n.tags.has("Actor")&&!n.tags.has("ProperNoun"))}if(r.tags.has("Verb"))return!!r.tags.has("Infinitive")||!r.tags.has("Gerund")&&!!r.tags.has("PresentTense");if("Adj|Noun"===r.switch){const n=e[t+2];if(!n)return!1;if(Il.has(n.normal))return!0;if(xl.has(n.normal))return!1}if(r.tags.has("Noun")){const e=r.machine||r.normal;return!("here"===e||"there"===e||"everywhere"===e||r.tags.has("Possessive")||r.tags.has("ProperNoun")&&!n.tags.has("ProperNoun"))}if(e[t-1]&&!0===jl[e[t-1].normal])return!0;if(r.tags.has("Adjective")){const n=e[t+2];if(!n)return!1;if(n.tags.has("Noun")&&!n.tags.has("Pronoun")){const e=r.normal;return"above"!==e&&"below"!==e&&"behind"!==e}return"Noun|Verb"===n.switch}return!!r.tags.has("Value")})(e,t)?n.methods.one.setTag([e[t]],"Possessive",n,null,"2-contraction"):wl(e,t)},El=function(e,t){const n=t.fromText(e.join(" "));return n.compute("id"),n.docs[0]};var Gl={contractionTwo:e=>{const{world:t,document:n}=e;n.forEach(((r,o)=>{for(let a=r.length-1;a>=0;a-=1){if(r[a].implicit)continue;let i=null;!0===Tl.test(r[a].normal)&&(i=r[a].normal.split(Tl)[1]);let s=null;Hl.hasOwnProperty(i)&&(s=Hl[i](r,a,t)),s&&(s=El(s,e),pl(n,[o,a],s),Dl(n[o],e,a,s.length))}}))}},Ol={compute:Gl,api:function(e){class Contractions extends e{constructor(e,t,n){super(e,t,n),this.viewType="Contraction"}expand(){return this.docs.forEach((e=>{const t=ml.test(e[0].text);e.forEach(((t,n)=>{t.text=t.implicit||"",delete t.implicit,ne.toUpperCase()))}(e[0].text))})),this.compute("normal"),this}}e.prototype.contractions=function(){const e=this.match("@hasContraction+");return new Contractions(this.document,e.pointer)},e.prototype.contract=gl},hooks:["contractionTwo"]};const Fl="(hard|fast|late|early|high|right|deep|close|direct)";const Vl="(i|we|they)";const zl=[].concat([{match:"(got|were|was|is|are|am) (#PastTense|#Participle)",tag:"Passive",reason:"got-walked"},{match:"(was|were|is|are|am) being (#PastTense|#Participle)",tag:"Passive",reason:"was-being"},{match:"(had|have|has) been (#PastTense|#Participle)",tag:"Passive",reason:"had-been"},{match:"will be being? (#PastTense|#Participle)",tag:"Passive",reason:"will-be-cleaned"},{match:"#Noun [(#PastTense|#Participle)] by (the|a) #Noun",group:0,tag:"Passive",reason:"suffered-by"}],[{match:"[(all|both)] #Determiner #Noun",group:0,tag:"Noun",reason:"all-noun"},{match:"#Copula [(just|alone)]$",group:0,tag:"Adjective",reason:"not-adverb"},{match:"#Singular is #Adverb? [#PastTense$]",group:0,tag:"Adjective",reason:"is-filled"},{match:"[#PastTense] #Singular is",group:0,tag:"Adjective",reason:"smoked-poutine"},{match:"[#PastTense] #Plural are",group:0,tag:"Adjective",reason:"baked-onions"},{match:"well [#PastTense]",group:0,tag:"Adjective",reason:"well-made"},{match:"#Copula [fucked up?]",group:0,tag:"Adjective",reason:"swears-adjective"},{match:"#Singular (seems|appears) #Adverb? [#PastTense$]",group:0,tag:"Adjective",reason:"seems-filled"},{match:"#Copula #Adjective? [(out|in|through)]$",group:0,tag:"Adjective",reason:"still-out"},{match:"^[#Adjective] (the|your) #Noun",group:0,notIf:"(all|even)",tag:"Infinitive",reason:"shut-the"},{match:"the [said] #Noun",group:0,tag:"Adjective",reason:"the-said-card"},{match:"[#Hyphenated (#Hyphenated && #PastTense)] (#Noun|#Conjunction)",group:0,tag:"Adjective",notIf:"#Adverb",reason:"faith-based"},{match:"[#Hyphenated (#Hyphenated && #Gerund)] (#Noun|#Conjunction)",group:0,tag:"Adjective",notIf:"#Adverb",reason:"self-driving"},{match:"[#PastTense (#Hyphenated && #PhrasalVerb)] (#Noun|#Conjunction)",group:0,tag:"Adjective",reason:"dammed-up"},{match:"(#Hyphenated && #Value) fold",tag:"Adjective",reason:"two-fold"},{match:"must (#Hyphenated && #Infinitive)",tag:"Adjective",reason:"must-win"},{match:"(#Hyphenated && #Infinitive) #Hyphenated",tag:"Adjective",notIf:"#PhrasalVerb",reason:"vacuum-sealed"},{match:"too much",tag:"Adverb Adjective",reason:"bit-4"},{match:"a bit much",tag:"Determiner Adverb Adjective",reason:"bit-3"},{match:"[(un|contra|extra|inter|intra|macro|micro|mid|mis|mono|multi|pre|sub|tri|ex)] #Adjective",group:0,tag:["Adjective","Prefix"],reason:"un-skilled"}],[{match:"#Adverb [#Adverb] (and|or|then)",group:0,tag:"Adjective",reason:"kinda-sparkly-and"},{match:"[(dark|bright|flat|light|soft|pale|dead|dim|faux|little|wee|sheer|most|near|good|extra|all)] #Adjective",group:0,tag:"Adverb",reason:"dark-green"},{match:"#Copula [far too] #Adjective",group:0,tag:"Adverb",reason:"far-too"},{match:"#Copula [still] (in|#Gerund|#Adjective)",group:0,tag:"Adverb",reason:"was-still-walking"},{match:`#Plural ${Fl}`,tag:"#PresentTense #Adverb",reason:"studies-hard"},{match:`#Verb [${Fl}] !#Noun?`,group:0,notIf:"(#Copula|get|got|getting|become|became|becoming|feel|feels|feeling|#Determiner|#Preposition)",tag:"Adverb",reason:"shops-direct"},{match:"[#Plural] a lot",tag:"PresentTense",reason:"studies-a-lot"}],[{match:"as [#Gerund] as",group:0,tag:"Adjective",reason:"as-gerund-as"},{match:"more [#Gerund] than",group:0,tag:"Adjective",reason:"more-gerund-than"},{match:"(so|very|extremely) [#Gerund]",group:0,tag:"Adjective",reason:"so-gerund"},{match:"(found|found) it #Adverb? [#Gerund]",group:0,tag:"Adjective",reason:"found-it-gerund"},{match:"a (little|bit|wee) bit? [#Gerund]",group:0,tag:"Adjective",reason:"a-bit-gerund"},{match:"#Gerund [#Gerund]",group:0,tag:"Adjective",notIf:"(impersonating|practicing|considering|assuming)",reason:"looking-annoying"},{match:"(looked|look|looks) #Adverb? [%Adj|Gerund%]",group:0,tag:"Adjective",notIf:"(impersonating|practicing|considering|assuming)",reason:"looked-amazing"},{match:"[%Adj|Gerund%] #Determiner",group:0,tag:"Gerund",reason:"developing-a"},{match:"#Possessive [%Adj|Gerund%] #Noun",group:0,tag:"Adjective",reason:"leading-manufacturer"},{match:"%Noun|Gerund% %Adj|Gerund%",tag:"Gerund #Adjective",reason:"meaning-alluring"},{match:"(face|embrace|reveal|stop|start|resume) %Adj|Gerund%",tag:"#PresentTense #Adjective",reason:"face-shocking"},{match:"(are|were) [%Adj|Gerund%] #Plural",group:0,tag:"Adjective",reason:"are-enduring-symbols"}],[{match:"#Determiner [#Adjective] #Copula",group:0,tag:"Noun",reason:"the-adj-is"},{match:"#Adjective [#Adjective] #Copula",group:0,tag:"Noun",reason:"adj-adj-is"},{match:"(his|its) [%Adj|Noun%]",group:0,tag:"Noun",notIf:"#Hyphenated",reason:"his-fine"},{match:"#Copula #Adverb? [all]",group:0,tag:"Noun",reason:"is-all"},{match:"(have|had) [#Adjective] #Preposition .",group:0,tag:"Noun",reason:"have-fun"},{match:"#Gerund (giant|capital|center|zone|application)",tag:"Noun",reason:"brewing-giant"},{match:"#Preposition (a|an) [#Adjective]$",group:0,tag:"Noun",reason:"an-instant"},{match:"no [#Adjective] #Modal",group:0,tag:"Noun",reason:"no-golden"},{match:"[brand #Gerund?] new",group:0,tag:"Adverb",reason:"brand-new"},{match:"(#Determiner|#Comparative|new|different) [kind]",group:0,tag:"Noun",reason:"some-kind"},{match:"#Possessive [%Adj|Noun%] #Noun",group:0,tag:"Adjective",reason:"her-favourite"},{match:"must && #Hyphenated .",tag:"Adjective",reason:"must-win"},{match:"#Determiner [#Adjective]$",tag:"Noun",notIf:"(this|that|#Comparative|#Superlative)",reason:"the-south"},{match:"(#Noun && #Hyphenated) (#Adjective && #Hyphenated)",tag:"Adjective",notIf:"(this|that|#Comparative|#Superlative)",reason:"company-wide"},{match:"#Determiner [#Adjective] (#Copula|#Determiner)",notIf:"(#Comparative|#Superlative)",group:0,tag:"Noun",reason:"the-poor"},{match:"[%Adj|Noun%] #Noun",notIf:"(#Pronoun|#ProperNoun)",group:0,tag:"Adjective",reason:"stable-foundations"}],[{match:"[still] #Adjective",group:0,tag:"Adverb",reason:"still-advb"},{match:"[still] #Verb",group:0,tag:"Adverb",reason:"still-verb"},{match:"[so] #Adjective",group:0,tag:"Adverb",reason:"so-adv"},{match:"[way] #Comparative",group:0,tag:"Adverb",reason:"way-adj"},{match:"[way] #Adverb #Adjective",group:0,tag:"Adverb",reason:"way-too-adj"},{match:"[all] #Verb",group:0,tag:"Adverb",reason:"all-verb"},{match:"#Verb [like]",group:0,notIf:"(#Modal|#PhrasalVerb)",tag:"Adverb",reason:"verb-like"},{match:"(barely|hardly) even",tag:"Adverb",reason:"barely-even"},{match:"[even] #Verb",group:0,tag:"Adverb",reason:"even-walk"},{match:"[even] #Comparative",group:0,tag:"Adverb",reason:"even-worse"},{match:"[even] (#Determiner|#Possessive)",group:0,tag:"#Adverb",reason:"even-the"},{match:"even left",tag:"#Adverb #Verb",reason:"even-left"},{match:"[way] #Adjective",group:0,tag:"#Adverb",reason:"way-over"},{match:"#PresentTense [(hard|quick|bright|slow|fast|backwards|forwards)]",notIf:"#Copula",group:0,tag:"Adverb",reason:"lazy-ly"},{match:"[much] #Adjective",group:0,tag:"Adverb",reason:"bit-1"},{match:"#Copula [#Adverb]$",group:0,tag:"Adjective",reason:"is-well"},{match:"a [(little|bit|wee) bit?] #Adjective",group:0,tag:"Adverb",reason:"a-bit-cold"},{match:"[(super|pretty)] #Adjective",group:0,tag:"Adverb",reason:"super-strong"},{match:"(become|fall|grow) #Adverb? [#PastTense]",group:0,tag:"Adjective",reason:"overly-weakened"},{match:"(a|an) #Adverb [#Participle] #Noun",group:0,tag:"Adjective",reason:"completely-beaten"},{match:"#Determiner #Adverb? [close]",group:0,tag:"Adjective",reason:"a-close"},{match:"#Gerund #Adverb? [close]",group:0,tag:"Adverb",notIf:"(getting|becoming|feeling)",reason:"being-close"},{match:"(the|those|these|a|an) [#Participle] #Noun",group:0,tag:"Adjective",reason:"blown-motor"},{match:"(#PresentTense|#PastTense) [back]",group:0,tag:"Adverb",notIf:"(#PhrasalVerb|#Copula)",reason:"charge-back"},{match:"#Verb [around]",group:0,tag:"Adverb",notIf:"#PhrasalVerb",reason:"send-around"},{match:"[later] #PresentTense",group:0,tag:"Adverb",reason:"later-say"},{match:"#Determiner [well] !#PastTense?",group:0,tag:"Noun",reason:"the-well"},{match:"#Adjective [enough]",group:0,tag:"Adverb",reason:"high-enough"}],[{match:"[sun] the #Ordinal",tag:"WeekDay",reason:"sun-the-5th"},{match:"[sun] #Date",group:0,tag:"WeekDay",reason:"sun-feb"},{match:"#Date (on|this|next|last|during)? [sun]",group:0,tag:"WeekDay",reason:"1pm-sun"},{match:"(in|by|before|during|on|until|after|of|within|all) [sat]",group:0,tag:"WeekDay",reason:"sat"},{match:"(in|by|before|during|on|until|after|of|within|all) [wed]",group:0,tag:"WeekDay",reason:"wed"},{match:"(in|by|before|during|on|until|after|of|within|all) [march]",group:0,tag:"Month",reason:"march"},{match:"[sat] #Date",group:0,tag:"WeekDay",reason:"sat-feb"},{match:"#Preposition [(march|may)]",group:0,tag:"Month",reason:"in-month"},{match:"(this|next|last) (march|may) !#Infinitive?",tag:"#Date #Month",reason:"this-month"},{match:"(march|may) the? #Value",tag:"#Month #Date #Date",reason:"march-5th"},{match:"#Value of? (march|may)",tag:"#Date #Date #Month",reason:"5th-of-march"},{match:"[(march|may)] .? #Date",group:0,tag:"Month",reason:"march-and-feb"},{match:"#Date .? [(march|may)]",group:0,tag:"Month",reason:"feb-and-march"},{match:"#Adverb [(march|may)]",group:0,tag:"Verb",reason:"quickly-march"},{match:"[(march|may)] #Adverb",group:0,tag:"Verb",reason:"march-quickly"},{match:"#Value (am|pm)",tag:"Time",reason:"2-am"}],[{match:"#Holiday (day|eve)",tag:"Holiday",reason:"holiday-day"},{match:"#Value of #Month",tag:"Date",reason:"value-of-month"},{match:"#Cardinal #Month",tag:"Date",reason:"cardinal-month"},{match:"#Month #Value to #Value",tag:"Date",reason:"value-to-value"},{match:"#Month the #Value",tag:"Date",reason:"month-the-value"},{match:"(#WeekDay|#Month) #Value",tag:"Date",reason:"date-value"},{match:"#Value (#WeekDay|#Month)",tag:"Date",reason:"value-date"},{match:"(#TextValue && #Date) #TextValue",tag:"Date",reason:"textvalue-date"},{match:"#Month #NumberRange",tag:"Date",reason:"aug 20-21"},{match:"#WeekDay #Month #Ordinal",tag:"Date",reason:"week mm-dd"},{match:"#Month #Ordinal #Cardinal",tag:"Date",reason:"mm-dd-yyy"},{match:"(#Place|#Demonmym|#Time) (standard|daylight|central|mountain)? time",tag:"Timezone",reason:"std-time"},{match:"(eastern|mountain|pacific|central|atlantic) (standard|daylight|summer)? time",tag:"Timezone",reason:"eastern-time"},{match:"#Time [(eastern|mountain|pacific|central|est|pst|gmt)]",group:0,tag:"Timezone",reason:"5pm-central"},{match:"(central|western|eastern) european time",tag:"Timezone",reason:"cet"}],[{match:"(the|any) [more]",group:0,tag:"Singular",reason:"more-noun"},{match:"[more] #Noun",group:0,tag:"Adjective",reason:"more-noun"},{match:"(right|rights) of .",tag:"Noun",reason:"right-of"},{match:"a [bit]",group:0,tag:"Singular",reason:"bit-2"},{match:"a [must]",group:0,tag:"Singular",reason:"must-2"},{match:"(we|us) [all]",group:0,tag:"Noun",reason:"we all"},{match:"due to [#Verb]",group:0,tag:"Noun",reason:"due-to"},{match:"some [#Verb] #Plural",group:0,tag:"Noun",reason:"determiner6"},{match:"#Possessive #Ordinal [#PastTense]",group:0,tag:"Noun",reason:"first-thought"},{match:"(the|this|those|these) #Adjective [%Verb|Noun%]",group:0,tag:"Noun",notIf:"#Copula",reason:"the-adj-verb"},{match:"(the|this|those|these) #Adverb #Adjective [#Verb]",group:0,tag:"Noun",reason:"determiner4"},{match:"the [#Verb] #Preposition .",group:0,tag:"Noun",reason:"determiner1"},{match:"(a|an|the) [#Verb] of",group:0,tag:"Noun",reason:"the-verb-of"},{match:"#Determiner #Noun of [#Verb]",group:0,tag:"Noun",notIf:"#Gerund",reason:"noun-of-noun"},{match:"#PastTense #Preposition [#PresentTense]",group:0,notIf:"#Gerund",tag:"Noun",reason:"ended-in-ruins"},{match:"#Conjunction [u]",group:0,tag:"Pronoun",reason:"u-pronoun-2"},{match:"[u] #Verb",group:0,tag:"Pronoun",reason:"u-pronoun-1"},{match:"#Determiner [(western|eastern|northern|southern|central)] #Noun",group:0,tag:"Noun",reason:"western-line"},{match:"(#Singular && @hasHyphen) #PresentTense",tag:"Noun",reason:"hyphen-verb"},{match:"is no [#Verb]",group:0,tag:"Noun",reason:"is-no-verb"},{match:"do [so]",group:0,tag:"Noun",reason:"so-noun"},{match:"#Determiner [(shit|damn|hell)]",group:0,tag:"Noun",reason:"swears-noun"},{match:"to [(shit|hell)]",group:0,tag:"Noun",reason:"to-swears"},{match:"(the|these) [#Singular] (were|are)",group:0,tag:"Plural",reason:"singular-were"},{match:"a #Noun+ or #Adverb+? [#Verb]",group:0,tag:"Noun",reason:"noun-or-noun"},{match:"(the|those|these|a|an) #Adjective? [#PresentTense #Particle?]",group:0,tag:"Noun",notIf:"(seem|appear|include|#Gerund|#Copula)",reason:"det-inf"},{match:"#Noun #Actor",tag:"Actor",notIf:"(#Person|#Pronoun)",reason:"thing-doer"},{match:"#Gerund #Actor",tag:"Actor",reason:"gerund-doer"},{match:"co #Singular",tag:"Actor",reason:"co-noun"},{match:"[#Noun+] #Actor",group:0,tag:"Actor",notIf:"(#Honorific|#Pronoun|#Possessive)",reason:"air-traffic-controller"},{match:"(urban|cardiac|cardiovascular|respiratory|medical|clinical|visual|graphic|creative|dental|exotic|fine|certified|registered|technical|virtual|professional|amateur|junior|senior|special|pharmaceutical|theoretical)+ #Noun? #Actor",tag:"Actor",reason:"fine-artist"},{match:"#Noun+ (coach|chef|king|engineer|fellow|personality|boy|girl|man|woman|master)",tag:"Actor",reason:"dance-coach"},{match:"chief . officer",tag:"Actor",reason:"chief-x-officer"},{match:"chief of #Noun+",tag:"Actor",reason:"chief-of-police"},{match:"senior? vice? president of #Noun+",tag:"Actor",reason:"president-of"},{match:"#Determiner [sun]",group:0,tag:"Singular",reason:"the-sun"},{match:"#Verb (a|an) [#Value]$",group:0,tag:"Singular",reason:"did-a-value"},{match:"the [(can|will|may)]",group:0,tag:"Singular",reason:"the can"},{match:"#FirstName #Acronym? (#Possessive && #LastName)",tag:"Possessive",reason:"name-poss"},{match:"#Organization+ #Possessive",tag:"Possessive",reason:"org-possessive"},{match:"#Place+ #Possessive",tag:"Possessive",reason:"place-possessive"},{match:"#Possessive #PresentTense #Particle?",notIf:"(#Gerund|her)",tag:"Noun",reason:"possessive-verb"},{match:"(my|our|their|her|his|its) [(#Plural && #Actor)] #Noun",tag:"Possessive",reason:"my-dads"},{match:"#Value of a [second]",group:0,unTag:"Value",tag:"Singular",reason:"10th-of-a-second"},{match:"#Value [seconds]",group:0,unTag:"Value",tag:"Plural",reason:"10-seconds"},{match:"in [#Infinitive]",group:0,tag:"Singular",reason:"in-age"},{match:"a [#Adjective] #Preposition",group:0,tag:"Noun",reason:"a-minor-in"},{match:"#Determiner [#Singular] said",group:0,tag:"Actor",reason:"the-actor-said"},{match:"#Determiner #Noun [(feel|sense|process|rush|side|bomb|bully|challenge|cover|crush|dump|exchange|flow|function|issue|lecture|limit|march|process)] !(#Preposition|to|#Adverb)?",group:0,tag:"Noun",reason:"the-noun-sense"},{match:"[#PresentTense] (of|by|for) (a|an|the) #Noun #Copula",group:0,tag:"Plural",reason:"photographs-of"},{match:"#Infinitive and [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"fight and win"},{match:"#Noun and [#Verb] and #Noun",group:0,tag:"Noun",reason:"peace-and-flowers"},{match:"the #Cardinal [%Adj|Noun%]",group:0,tag:"Noun",reason:"the-1992-classic"},{match:"#Copula the [%Adj|Noun%] #Noun",group:0,tag:"Adjective",reason:"the-premier-university"},{match:"i #Verb [me] #Noun",group:0,tag:"Possessive",reason:"scottish-me"},{match:"[#PresentTense] (music|class|lesson|night|party|festival|league|ceremony)",group:0,tag:"Noun",reason:"dance-music"},{match:"[wit] (me|it)",group:0,tag:"Presposition",reason:"wit-me"},{match:"#PastTense #Possessive [#Verb]",group:0,tag:"Noun",notIf:"(saw|made)",reason:"left-her-boots"},{match:"#Value [%Plural|Verb%]",group:0,tag:"Plural",notIf:"(one|1|a|an)",reason:"35-signs"},{match:"had [#PresentTense]",group:0,tag:"Noun",notIf:"(#Gerund|come|become)",reason:"had-time"},{match:"%Adj|Noun% %Noun|Verb%",tag:"#Adjective #Noun",notIf:"#ProperNoun #Noun",reason:"instant-access"},{match:"#Determiner [%Adj|Noun%] #Conjunction",group:0,tag:"Noun",reason:"a-rep-to"},{match:"#Adjective #Noun [%Plural|Verb%]$",group:0,tag:"Plural",notIf:"#Pronoun",reason:"near-death-experiences"},{match:"#Possessive #Noun [%Plural|Verb%]$",group:0,tag:"Plural",reason:"your-guild-colors"}],[{match:"(this|that|the|a|an) [#Gerund #Infinitive]",group:0,tag:"Singular",reason:"the-planning-process"},{match:"(that|the) [#Gerund #PresentTense]",group:0,ifNo:"#Copula",tag:"Plural",reason:"the-paving-stones"},{match:"#Determiner [#Gerund] #Noun",group:0,tag:"Adjective",reason:"the-gerund-noun"},{match:"#Pronoun #Infinitive [#Gerund] #PresentTense",group:0,tag:"Noun",reason:"tipping-sucks"},{match:"#Adjective [#Gerund]",group:0,tag:"Noun",notIf:"(still|even|just)",reason:"early-warning"},{match:"[#Gerund] #Adverb? not? #Copula",group:0,tag:"Activity",reason:"gerund-copula"},{match:"#Copula [(#Gerund|#Activity)] #Copula",group:0,tag:"Gerund",reason:"are-doing-is"},{match:"[#Gerund] #Modal",group:0,tag:"Activity",reason:"gerund-modal"},{match:"#Singular for [%Noun|Gerund%]",group:0,tag:"Gerund",reason:"noun-for-gerund"},{match:"#Comparative (for|at) [%Noun|Gerund%]",group:0,tag:"Gerund",reason:"better-for-gerund"},{match:"#PresentTense the [#Gerund]",group:0,tag:"Noun",reason:"keep-the-touching"}],[{match:"#Infinitive (this|that|the) [#Infinitive]",group:0,tag:"Noun",reason:"do-this-dance"},{match:"#Gerund #Determiner [#Infinitive]",group:0,tag:"Noun",reason:"running-a-show"},{match:"#Determiner (only|further|just|more|backward) [#Infinitive]",group:0,tag:"Noun",reason:"the-only-reason"},{match:"(the|this|a|an) [#Infinitive] #Adverb? #Verb",group:0,tag:"Noun",reason:"determiner5"},{match:"#Determiner #Adjective #Adjective? [#Infinitive]",group:0,tag:"Noun",reason:"a-nice-inf"},{match:"#Determiner #Demonym [#PresentTense]",group:0,tag:"Noun",reason:"mexican-train"},{match:"#Adjective #Noun+ [#Infinitive] #Copula",group:0,tag:"Noun",reason:"career-move"},{match:"at some [#Infinitive]",group:0,tag:"Noun",reason:"at-some-inf"},{match:"(go|goes|went) to [#Infinitive]",group:0,tag:"Noun",reason:"goes-to-verb"},{match:"(a|an) #Adjective? #Noun [#Infinitive] (#Preposition|#Noun)",group:0,notIf:"from",tag:"Noun",reason:"a-noun-inf"},{match:"(a|an) #Noun [#Infinitive]$",group:0,tag:"Noun",reason:"a-noun-inf2"},{match:"#Gerund #Adjective? for [#Infinitive]",group:0,tag:"Noun",reason:"running-for"},{match:"about [#Infinitive]",group:0,tag:"Singular",reason:"about-love"},{match:"#Plural on [#Infinitive]",group:0,tag:"Noun",reason:"on-stage"},{match:"any [#Infinitive]",group:0,tag:"Noun",reason:"any-charge"},{match:"no [#Infinitive]",group:0,tag:"Noun",reason:"no-doubt"},{match:"number of [#PresentTense]",group:0,tag:"Noun",reason:"number-of-x"},{match:"(taught|teaches|learns|learned) [#PresentTense]",group:0,tag:"Noun",reason:"teaches-x"},{match:"(try|use|attempt|build|make) [#Verb #Particle?]",notIf:"(#Copula|#Noun|sure|fun|up)",group:0,tag:"Noun",reason:"do-verb"},{match:"^[#Infinitive] (is|was)",group:0,tag:"Noun",reason:"checkmate-is"},{match:"#Infinitive much [#Infinitive]",group:0,tag:"Noun",reason:"get-much"},{match:"[cause] #Pronoun #Verb",group:0,tag:"Conjunction",reason:"cause-cuz"},{match:"the #Singular [#Infinitive] #Noun",group:0,tag:"Noun",notIf:"#Pronoun",reason:"cardio-dance"},{match:"#Determiner #Modal [#Noun]",group:0,tag:"PresentTense",reason:"should-smoke"},{match:"this [#Plural]",group:0,tag:"PresentTense",notIf:"(#Preposition|#Date)",reason:"this-verbs"},{match:"#Noun that [#Plural]",group:0,tag:"PresentTense",notIf:"(#Preposition|#Pronoun|way)",reason:"voice-that-rocks"},{match:"that [#Plural] to",group:0,tag:"PresentTense",notIf:"#Preposition",reason:"that-leads-to"},{match:"(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)",group:0,tag:"Infinitive",reason:"let-him-glue"},{match:"#Verb (all|every|each|most|some|no) [#PresentTense]",notIf:"#Modal",group:0,tag:"Noun",reason:"all-presentTense"},{match:"(had|have|#PastTense) #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"better",reason:"adj-presentTense"},{match:"#Value #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"one-big-reason"},{match:"#PastTense #Adjective+ [#PresentTense]",group:0,tag:"Noun",notIf:"(#Copula|better)",reason:"won-wide-support"},{match:"(many|few|several|couple) [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"many-poses"},{match:"#Determiner #Adverb #Adjective [%Noun|Verb%]",group:0,tag:"Noun",notIf:"#Copula",reason:"very-big-dream"},{match:"from #Noun to [%Noun|Verb%]",group:0,tag:"Noun",reason:"start-to-finish"},{match:"(for|with|of) #Noun (and|or|not) [%Noun|Verb%]",group:0,tag:"Noun",notIf:"#Pronoun",reason:"for-food-and-gas"},{match:"#Adjective #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"adorable-little-store"},{match:"#Gerund #Adverb? #Comparative [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"higher-costs"},{match:"(#Noun && @hasComma) #Noun (and|or) [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"noun-list"},{match:"(many|any|some|several) [#PresentTense] for",group:0,tag:"Noun",reason:"any-verbs-for"},{match:"to #PresentTense #Noun [#PresentTense] #Preposition",group:0,tag:"Noun",reason:"gas-exchange"},{match:"#PastTense (until|as|through|without) [#PresentTense]",group:0,tag:"Noun",reason:"waited-until-release"},{match:"#Gerund like #Adjective? [#PresentTense]",group:0,tag:"Plural",reason:"like-hot-cakes"},{match:"some #Adjective [#PresentTense]",group:0,tag:"Noun",reason:"some-reason"},{match:"for some [#PresentTense]",group:0,tag:"Noun",reason:"for-some-reason"},{match:"(same|some|the|that|a) kind of [#PresentTense]",group:0,tag:"Noun",reason:"some-kind-of"},{match:"(same|some|the|that|a) type of [#PresentTense]",group:0,tag:"Noun",reason:"some-type-of"},{match:"#Gerund #Adjective #Preposition [#PresentTense]",group:0,tag:"Noun",reason:"doing-better-for-x"},{match:"(get|got|have) #Comparative [#PresentTense]",group:0,tag:"Noun",reason:"got-better-aim"},{match:"whose [#PresentTense] #Copula",group:0,tag:"Noun",reason:"whos-name-was"},{match:"#PhrasalVerb #Particle #Preposition [#PresentTense]",group:0,tag:"Noun",reason:"given-up-on-x"},{match:"there (are|were) #Adjective? [#PresentTense]",group:0,tag:"Plural",reason:"there-are"},{match:"#Value [#PresentTense] of",group:0,notIf:"(one|1|#Copula|#Infinitive)",tag:"Plural",reason:"2-trains"},{match:"[#PresentTense] (are|were) #Adjective",group:0,tag:"Plural",reason:"compromises-are-possible"},{match:"^[(hope|guess|thought|think)] #Pronoun #Verb",group:0,tag:"Infinitive",reason:"suppose-i"},{match:"#Possessive #Adjective [#Verb]",group:0,tag:"Noun",notIf:"#Copula",reason:"our-full-support"},{match:"[(tastes|smells)] #Adverb? #Adjective",group:0,tag:"PresentTense",reason:"tastes-good"},{match:"#Copula #Gerund [#PresentTense] !by?",group:0,tag:"Noun",notIf:"going",reason:"ignoring-commute"},{match:"#Determiner #Adjective? [(shed|thought|rose|bid|saw|spelt)]",group:0,tag:"Noun",reason:"noun-past"},{match:"how to [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"how-to-noun"},{match:"which [%Noun|Verb%] #Noun",group:0,tag:"Infinitive",reason:"which-boost-it"},{match:"#Gerund [%Plural|Verb%]",group:0,tag:"Plural",reason:"asking-questions"},{match:"(ready|available|difficult|hard|easy|made|attempt|try) to [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"ready-to-noun"},{match:"(bring|went|go|drive|run|bike) to [%Noun|Verb%]",group:0,tag:"Noun",reason:"bring-to-noun"},{match:"#Modal #Noun [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"would-you-look"},{match:"#Copula just [#Infinitive]",group:0,tag:"Noun",reason:"is-just-spam"},{match:"^%Noun|Verb% %Plural|Verb%",tag:"Imperative #Plural",reason:"request-copies"},{match:"#Adjective #Plural and [%Plural|Verb%]",group:0,tag:"#Plural",reason:"pickles-and-drinks"},{match:"#Determiner #Year [#Verb]",group:0,tag:"Noun",reason:"the-1968-film"},{match:"#Determiner [#PhrasalVerb #Particle]",group:0,tag:"Noun",reason:"the-break-up"},{match:"#Determiner [%Adj|Noun%] #Noun",group:0,tag:"Adjective",notIf:"(#Pronoun|#Possessive|#ProperNoun)",reason:"the-individual-goals"},{match:"[%Noun|Verb%] or #Infinitive",group:0,tag:"Infinitive",reason:"work-or-prepare"},{match:"to #Infinitive [#PresentTense]",group:0,tag:"Noun",notIf:"(#Gerund|#Copula|help)",reason:"to-give-thanks"},{match:"[#Noun] me",group:0,tag:"Verb",reason:"kills-me"},{match:"%Plural|Verb% %Plural|Verb%",tag:"#PresentTense #Plural",reason:"removes-wrinkles"}],[{match:"#Money and #Money #Currency?",tag:"Money",reason:"money-and-money"},{match:"#Value #Currency [and] #Value (cents|ore|centavos|sens)",group:0,tag:"money",reason:"and-5-cents"},{match:"#Value (mark|rand|won|rub|ore)",tag:"#Money #Currency",reason:"4-mark"},{match:"a pound",tag:"#Money #Unit",reason:"a-pound"},{match:"#Value (pound|pounds)",tag:"#Money #Unit",reason:"4-pounds"}],[{match:"[(half|quarter)] of? (a|an)",group:0,tag:"Fraction",reason:"millionth"},{match:"#Adverb [half]",group:0,tag:"Fraction",reason:"nearly-half"},{match:"[half] the",group:0,tag:"Fraction",reason:"half-the"},{match:"#Cardinal and a half",tag:"Fraction",reason:"and-a-half"},{match:"#Value (halves|halfs|quarters)",tag:"Fraction",reason:"two-halves"},{match:"a #Ordinal",tag:"Fraction",reason:"a-quarter"},{match:"[#Cardinal+] (#Fraction && /s$/)",tag:"Fraction",reason:"seven-fifths"},{match:"[#Cardinal+ #Ordinal] of .",group:0,tag:"Fraction",reason:"ordinal-of"},{match:"[(#NumericValue && #Ordinal)] of .",group:0,tag:"Fraction",reason:"num-ordinal-of"},{match:"(a|one) #Cardinal?+ #Ordinal",tag:"Fraction",reason:"a-ordinal"},{match:"#Cardinal+ out? of every? #Cardinal",tag:"Fraction",reason:"out-of"}],[{match:"#Cardinal [second]",tag:"Unit",reason:"one-second"},{match:"!once? [(a|an)] (#Duration|hundred|thousand|million|billion|trillion)",group:0,tag:"Value",reason:"a-is-one"},{match:"1 #Value #PhoneNumber",tag:"PhoneNumber",reason:"1-800-Value"},{match:"#NumericValue #PhoneNumber",tag:"PhoneNumber",reason:"(800) PhoneNumber"},{match:"#Demonym #Currency",tag:"Currency",reason:"demonym-currency"},{match:"#Value [(buck|bucks|grand)]",group:0,tag:"Currency",reason:"value-bucks"},{match:"[#Value+] #Currency",group:0,tag:"Money",reason:"15 usd"},{match:"[second] #Noun",group:0,tag:"Ordinal",reason:"second-noun"},{match:"#Value+ [#Currency]",group:0,tag:"Unit",reason:"5-yan"},{match:"#Value [(foot|feet)]",group:0,tag:"Unit",reason:"foot-unit"},{match:"#Value [#Abbreviation]",group:0,tag:"Unit",reason:"value-abbr"},{match:"#Value [k]",group:0,tag:"Unit",reason:"value-k"},{match:"#Unit an hour",tag:"Unit",reason:"unit-an-hour"},{match:"(minus|negative) #Value",tag:"Value",reason:"minus-value"},{match:"#Value (point|decimal) #Value",tag:"Value",reason:"value-point-value"},{match:"#Determiner [(half|quarter)] #Ordinal",group:0,tag:"Value",reason:"half-ordinal"},{match:"#Multiple+ and #Value",tag:"Value",reason:"magnitude-and-value"},{match:"#Value #Unit [(per|an) (hr|hour|sec|second|min|minute)]",group:0,tag:"Unit",reason:"12-miles-per-second"},{match:"#Value [(square|cubic)] #Unit",group:0,tag:"Unit",reason:"square-miles"}],[{match:"#Copula [(#Noun|#PresentTense)] #LastName",group:0,tag:"FirstName",reason:"copula-noun-lastname"},{match:"(sister|pope|brother|father|aunt|uncle|grandpa|grandfather|grandma) #ProperNoun",tag:"Person",reason:"lady-titlecase",safe:!0},{match:"#FirstName [#Determiner #Noun] #LastName",group:0,tag:"Person",reason:"first-noun-last"},{match:"#ProperNoun (b|c|d|e|f|g|h|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z) #ProperNoun",tag:"Person",reason:"titlecase-acronym-titlecase",safe:!0},{match:"#Acronym #LastName",tag:"Person",reason:"acronym-lastname",safe:!0},{match:"#Person (jr|sr|md)",tag:"Person",reason:"person-honorific"},{match:"#Honorific #Acronym",tag:"Person",reason:"Honorific-TitleCase"},{match:"#Person #Person the? #RomanNumeral",tag:"Person",reason:"roman-numeral"},{match:"#FirstName [/^[^aiurck]$/]",group:0,tag:["Acronym","Person"],reason:"john-e"},{match:"#Noun van der? #Noun",tag:"Person",reason:"van der noun",safe:!0},{match:"(king|queen|prince|saint|lady) of #Noun",tag:"Person",reason:"king-of-noun",safe:!0},{match:"(prince|lady) #Place",tag:"Person",reason:"lady-place"},{match:"(king|queen|prince|saint) #ProperNoun",tag:"Person",notIf:"#Place",reason:"saint-foo"},{match:"al (#Person|#ProperNoun)",tag:"Person",reason:"al-borlen",safe:!0},{match:"#FirstName de #Noun",tag:"Person",reason:"bill-de-noun"},{match:"#FirstName (bin|al) #Noun",tag:"Person",reason:"bill-al-noun"},{match:"#FirstName #Acronym #ProperNoun",tag:"Person",reason:"bill-acronym-title"},{match:"#FirstName #FirstName #ProperNoun",tag:"Person",reason:"bill-firstname-title"},{match:"#Honorific #FirstName? #ProperNoun",tag:"Person",reason:"dr-john-Title"},{match:"#FirstName the #Adjective",tag:"Person",reason:"name-the-great"},{match:"#ProperNoun (van|al|bin) #ProperNoun",tag:"Person",reason:"title-van-title",safe:!0},{match:"#ProperNoun (de|du) la? #ProperNoun",tag:"Person",notIf:"#Place",reason:"title-de-title"},{match:"#Singular #Acronym #LastName",tag:"#FirstName #Person .",reason:"title-acro-noun",safe:!0},{match:"[#ProperNoun] #Person",group:0,tag:"Person",reason:"proper-person",safe:!0},{match:"#Person [#ProperNoun #ProperNoun]",group:0,tag:"Person",notIf:"#Possessive",reason:"three-name-person",safe:!0},{match:"#FirstName #Acronym? [#ProperNoun]",group:0,tag:"LastName",notIf:"#Possessive",reason:"firstname-titlecase"},{match:"#FirstName [#FirstName]",group:0,tag:"LastName",reason:"firstname-firstname"},{match:"#FirstName #Acronym #Noun",tag:"Person",reason:"n-acro-noun",safe:!0},{match:"#FirstName [(de|di|du|van|von)] #Person",group:0,tag:"LastName",reason:"de-firstname"},{match:"[(lieutenant|corporal|sergeant|captain|qeen|king|admiral|major|colonel|marshal|president|queen|king)+] #ProperNoun",group:0,tag:"Honorific",reason:"seargeant-john"},{match:"[(private|general|major|rear|prime|field|count|miss)] #Honorific? #Person",group:0,tag:["Honorific","Person"],reason:"ambg-honorifics"},{match:"#Honorific #FirstName [#Singular]",group:0,tag:"LastName",notIf:"#Possessive",reason:"dr-john-foo",safe:!0},{match:"[(his|her) (majesty|honour|worship|excellency|honorable)] #Person",group:0,tag:"Honorific",reason:"his-excellency"},{match:"#Honorific #Actor",tag:"Honorific",reason:"Lieutenant colonel"},{match:"(first|second|third|1st|2nd|3rd) #Actor",tag:"Honorific",reason:"first lady"},{match:"#Person #RomanNumeral",tag:"Person",reason:"louis-IV"}],[{match:"#FirstName #Noun$",tag:". #LastName",notIf:"(#Possessive|#Organization|#Place|#Pronoun|@hasTitleCase)",reason:"firstname-noun"},{match:"%Person|Date% #Acronym? #ProperNoun",tag:"Person",reason:"jan-thierson"},{match:"%Person|Noun% #Acronym? #ProperNoun",tag:"Person",reason:"switch-person",safe:!0},{match:"%Person|Noun% #Organization",tag:"Organization",reason:"olive-garden"},{match:"%Person|Verb% #Acronym? #ProperNoun",tag:"Person",reason:"verb-propernoun",ifNo:"#Actor"},{match:"[%Person|Verb%] (will|had|has|said|says|told|did|learned|wants|wanted)",group:0,tag:"Person",reason:"person-said"},{match:"[%Person|Place%] (harbor|harbour|pier|town|city|place|dump|landfill)",group:0,tag:"Place",reason:"sydney-harbour"},{match:"(west|east|north|south) [%Person|Place%]",group:0,tag:"Place",reason:"east-sydney"},{match:"#Modal [%Person|Verb%]",group:0,tag:"Verb",reason:"would-mark"},{match:"#Adverb [%Person|Verb%]",group:0,tag:"Verb",reason:"really-mark"},{match:"[%Person|Verb%] (#Adverb|#Comparative)",group:0,tag:"Verb",reason:"drew-closer"},{match:"%Person|Verb% #Person",tag:"Person",reason:"rob-smith"},{match:"%Person|Verb% #Acronym #ProperNoun",tag:"Person",reason:"rob-a-smith"},{match:"[will] #Verb",group:0,tag:"Modal",reason:"will-verb"},{match:"(will && @isTitleCase) #ProperNoun",tag:"Person",reason:"will-name"},{match:"(#FirstName && !#Possessive) [#Singular] #Verb",group:0,safe:!0,tag:"LastName",reason:"jack-layton"},{match:"^[#Singular] #Person #Verb",group:0,safe:!0,tag:"Person",reason:"sherwood-anderson"},{match:"(a|an) [#Person]$",group:0,unTag:"Person",reason:"a-warhol"}],[{match:"#Copula (pretty|dead|full|well|sure) (#Adjective|#Noun)",tag:"#Copula #Adverb #Adjective",reason:"sometimes-adverb"},{match:"(#Pronoun|#Person) (had|#Adverb)? [better] #PresentTense",group:0,tag:"Modal",reason:"i-better"},{match:"(#Modal|i|they|we|do) not? [like]",group:0,tag:"PresentTense",reason:"modal-like"},{match:"#Noun #Adverb? [left]",group:0,tag:"PastTense",reason:"left-verb"},{match:"will #Adverb? not? #Adverb? [be] #Gerund",group:0,tag:"Copula",reason:"will-be-copula"},{match:"will #Adverb? not? #Adverb? [be] #Adjective",group:0,tag:"Copula",reason:"be-copula"},{match:"[march] (up|down|back|toward)",notIf:"#Date",group:0,tag:"Infinitive",reason:"march-to"},{match:"#Modal [march]",group:0,tag:"Infinitive",reason:"must-march"},{match:"[may] be",group:0,tag:"Verb",reason:"may-be"},{match:"[(subject|subjects|subjected)] to",group:0,tag:"Verb",reason:"subject to"},{match:"[home] to",group:0,tag:"PresentTense",reason:"home to"},{match:"[open] #Determiner",group:0,tag:"Infinitive",reason:"open-the"},{match:"(were|was) being [#PresentTense]",group:0,tag:"PastTense",reason:"was-being"},{match:"(had|has|have) [been /en$/]",group:0,tag:"Auxiliary Participle",reason:"had-been-broken"},{match:"(had|has|have) [been /ed$/]",group:0,tag:"Auxiliary PastTense",reason:"had-been-smoked"},{match:"(had|has) #Adverb? [been] #Adverb? #PastTense",group:0,tag:"Auxiliary",reason:"had-been-adj"},{match:"(had|has) to [#Noun] (#Determiner|#Possessive)",group:0,tag:"Infinitive",reason:"had-to-noun"},{match:"have [#PresentTense]",group:0,tag:"PastTense",notIf:"(come|gotten)",reason:"have-read"},{match:"(does|will|#Modal) that [work]",group:0,tag:"PastTense",reason:"does-that-work"},{match:"[(sound|sounds)] #Adjective",group:0,tag:"PresentTense",reason:"sounds-fun"},{match:"[(look|looks)] #Adjective",group:0,tag:"PresentTense",reason:"looks-good"},{match:"[(start|starts|stop|stops|begin|begins)] #Gerund",group:0,tag:"Verb",reason:"starts-thinking"},{match:"(have|had) read",tag:"Modal #PastTense",reason:"read-read"},{match:"(is|was|were) [(under|over) #PastTense]",group:0,tag:"Adverb Adjective",reason:"was-under-cooked"},{match:"[shit] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear1-verb"},{match:"[damn] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear2-verb"},{match:"[fuck] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear3-verb"},{match:"#Plural that %Noun|Verb%",tag:". #Preposition #Infinitive",reason:"jobs-that-work"},{match:"[works] for me",group:0,tag:"PresentTense",reason:"works-for-me"},{match:"as #Pronoun [please]",group:0,tag:"Infinitive",reason:"as-we-please"},{match:"[(co|mis|de|inter|intra|pre|re|un|out|under|over|counter)] #Verb",group:0,tag:["Verb","Prefix"],notIf:"(#Copula|#PhrasalVerb)",reason:"co-write"},{match:"#PastTense and [%Adj|Past%]",group:0,tag:"PastTense",reason:"dressed-and-left"},{match:"[%Adj|Past%] and #PastTense",group:0,tag:"PastTense",reason:"dressed-and-left"},{match:"#Copula #Pronoun [%Adj|Past%]",group:0,tag:"Adjective",reason:"is-he-stoked"},{match:"to [%Noun|Verb%] #Preposition",group:0,tag:"Infinitive",reason:"to-dream-of"}],[{match:"(slowly|quickly) [#Adjective]",group:0,tag:"Verb",reason:"slowly-adj"},{match:"does (#Adverb|not)? [#Adjective]",group:0,tag:"PresentTense",reason:"does-mean"},{match:"[(fine|okay|cool|ok)] by me",group:0,tag:"Adjective",reason:"okay-by-me"},{match:"i (#Adverb|do)? not? [mean]",group:0,tag:"PresentTense",reason:"i-mean"},{match:"will #Adjective",tag:"Auxiliary Infinitive",reason:"will-adj"},{match:"#Pronoun [#Adjective] #Determiner #Adjective? #Noun",group:0,tag:"Verb",reason:"he-adj-the"},{match:"#Copula [%Adj|Present%] to #Verb",group:0,tag:"Verb",reason:"adj-to"},{match:"#Copula [#Adjective] (well|badly|quickly|slowly)",group:0,tag:"Verb",reason:"done-well"},{match:"#Adjective and [#Gerund] !#Preposition?",group:0,tag:"Adjective",reason:"rude-and-x"},{match:"#Copula #Adverb? (over|under) [#PastTense]",group:0,tag:"Adjective",reason:"over-cooked"},{match:"#Copula #Adjective+ (and|or) [#PastTense]$",group:0,tag:"Adjective",reason:"bland-and-overcooked"},{match:"got #Adverb? [#PastTense] of",group:0,tag:"Adjective",reason:"got-tired-of"},{match:"(seem|seems|seemed|appear|appeared|appears|feel|feels|felt|sound|sounds|sounded) (#Adverb|#Adjective)? [#PastTense]",group:0,tag:"Adjective",reason:"felt-loved"},{match:"(seem|feel|seemed|felt) [#PastTense #Particle?]",group:0,tag:"Adjective",reason:"seem-confused"},{match:"a (bit|little|tad) [#PastTense #Particle?]",group:0,tag:"Adjective",reason:"a-bit-confused"},{match:"not be [%Adj|Past% #Particle?]",group:0,tag:"Adjective",reason:"do-not-be-confused"},{match:"#Copula just [%Adj|Past% #Particle?]",group:0,tag:"Adjective",reason:"is-just-right"},{match:"as [#Infinitive] as",group:0,tag:"Adjective",reason:"as-pale-as"},{match:"[%Adj|Past%] and #Adjective",group:0,tag:"Adjective",reason:"faled-and-oppressive"},{match:"or [#PastTense] #Noun",group:0,tag:"Adjective",notIf:"(#Copula|#Pronoun)",reason:"or-heightened-emotion"},{match:"(become|became|becoming|becomes) [#Verb]",group:0,tag:"Adjective",reason:"become-verb"},{match:"#Possessive [#PastTense] #Noun",group:0,tag:"Adjective",reason:"declared-intentions"},{match:"#Copula #Pronoun [%Adj|Present%]",group:0,tag:"Adjective",reason:"is-he-cool"},{match:"#Copula [%Adj|Past%] with",group:0,tag:"Adjective",notIf:"(associated|worn|baked|aged|armed|bound|fried|loaded|mixed|packed|pumped|filled|sealed)",reason:"is-crowded-with"},{match:"#Copula #Adverb? [%Adj|Present%]$",group:0,tag:"Adjective",reason:"was-empty$"}],[{match:"will (#Adverb|not)+? [have] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"will-have-vb"},{match:"[#Copula] (#Adverb|not)+? (#Gerund|#PastTense)",group:0,tag:"Auxiliary",reason:"copula-walking"},{match:"[(#Modal|did)+] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"modal-verb"},{match:"#Modal (#Adverb|not)+? [have] (#Adverb|not)+? [had] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"would-have"},{match:"[(has|had)] (#Adverb|not)+? #PastTense",group:0,tag:"Auxiliary",reason:"had-walked"},{match:"[(do|does|did|will|have|had|has|got)] (not|#Adverb)+? #Verb",group:0,tag:"Auxiliary",reason:"have-had"},{match:"[about to] #Adverb? #Verb",group:0,tag:["Auxiliary","Verb"],reason:"about-to"},{match:"#Modal (#Adverb|not)+? [be] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"would-be"},{match:"[(#Modal|had|has)] (#Adverb|not)+? [been] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"had-been"},{match:"[(be|being|been)] #Participle",group:0,tag:"Auxiliary",reason:"being-driven"},{match:"[may] #Adverb? #Infinitive",group:0,tag:"Auxiliary",reason:"may-want"},{match:"#Copula (#Adverb|not)+? [(be|being|been)] #Adverb+? #PastTense",group:0,tag:"Auxiliary",reason:"being-walked"},{match:"will [be] #PastTense",group:0,tag:"Auxiliary",reason:"will-be-x"},{match:"[(be|been)] (#Adverb|not)+? #Gerund",group:0,tag:"Auxiliary",reason:"been-walking"},{match:"[used to] #PresentTense",group:0,tag:"Auxiliary",reason:"used-to-walk"},{match:"#Copula (#Adverb|not)+? [going to] #Adverb+? #PresentTense",group:0,tag:"Auxiliary",reason:"going-to-walk"},{match:"#Imperative [(me|him|her)]",group:0,tag:"Reflexive",reason:"tell-him"},{match:"(is|was) #Adverb? [no]",group:0,tag:"Negative",reason:"is-no"},{match:"[(been|had|became|came)] #PastTense",group:0,notIf:"#PhrasalVerb",tag:"Auxiliary",reason:"been-told"},{match:"[(being|having|getting)] #Verb",group:0,tag:"Auxiliary",reason:"being-born"},{match:"[be] #Gerund",group:0,tag:"Auxiliary",reason:"be-walking"},{match:"[better] #PresentTense",group:0,tag:"Modal",notIf:"(#Copula|#Gerund)",reason:"better-go"},{match:"even better",tag:"Adverb #Comparative",reason:"even-better"}],[{match:"(#Verb && @hasHyphen) up",tag:"PhrasalVerb",reason:"foo-up"},{match:"(#Verb && @hasHyphen) off",tag:"PhrasalVerb",reason:"foo-off"},{match:"(#Verb && @hasHyphen) over",tag:"PhrasalVerb",reason:"foo-over"},{match:"(#Verb && @hasHyphen) out",tag:"PhrasalVerb",reason:"foo-out"},{match:"[#Verb (in|out|up|down|off|back)] (on|in)",notIf:"#Copula",tag:"PhrasalVerb Particle",reason:"walk-in-on"},{match:"(lived|went|crept|go) [on] for",group:0,tag:"PhrasalVerb",reason:"went-on"},{match:"#Verb (up|down|in|on|for)$",tag:"PhrasalVerb #Particle",notIf:"#PhrasalVerb",reason:"come-down$"},{match:"help [(stop|end|make|start)]",group:0,tag:"Infinitive",reason:"help-stop"},{match:"#PhrasalVerb (in && #Particle) #Determiner",tag:"#Verb #Preposition #Determiner",unTag:"PhrasalVerb",reason:"work-in-the"},{match:"[(stop|start|finish|help)] #Gerund",group:0,tag:"Infinitive",reason:"start-listening"},{match:"#Verb (him|her|it|us|himself|herself|itself|everything|something) [(up|down)]",group:0,tag:"Adverb",reason:"phrasal-pronoun-advb"}],[{match:"^do not? [#Infinitive #Particle?]",notIf:Vl,group:0,tag:"Imperative",reason:"do-eat"},{match:"^please do? not? [#Infinitive #Particle?]",group:0,tag:"Imperative",reason:"please-go"},{match:"^just do? not? [#Infinitive #Particle?]",group:0,tag:"Imperative",reason:"just-go"},{match:"^[#Infinitive] it #Comparative",notIf:Vl,group:0,tag:"Imperative",reason:"do-it-better"},{match:"^[#Infinitive] it (please|now|again|plz)",notIf:Vl,group:0,tag:"Imperative",reason:"do-it-please"},{match:"^[#Infinitive] (#Adjective|#Adverb)$",group:0,tag:"Imperative",notIf:"(so|such|rather|enough)",reason:"go-quickly"},{match:"^[#Infinitive] (up|down|over) #Determiner",group:0,tag:"Imperative",reason:"turn-down"},{match:"^[#Infinitive] (your|my|the|a|an|any|each|every|some|more|with|on)",group:0,notIf:"like",tag:"Imperative",reason:"eat-my-shorts"},{match:"^[#Infinitive] (him|her|it|us|me|there)",group:0,tag:"Imperative",reason:"tell-him"},{match:"^[#Infinitive] #Adjective #Noun$",group:0,tag:"Imperative",reason:"avoid-loud-noises"},{match:"^[#Infinitive] (#Adjective|#Adverb)? and #Infinitive",group:0,tag:"Imperative",reason:"call-and-reserve"},{match:"^(go|stop|wait|hurry) please?$",tag:"Imperative",reason:"go"},{match:"^(somebody|everybody) [#Infinitive]",group:0,tag:"Imperative",reason:"somebody-call"},{match:"^let (us|me) [#Infinitive]",group:0,tag:"Imperative",reason:"lets-leave"},{match:"^[(shut|close|open|start|stop|end|keep)] #Determiner #Noun",group:0,tag:"Imperative",reason:"shut-the-door"},{match:"^[#PhrasalVerb #Particle] #Determiner #Noun",group:0,tag:"Imperative",reason:"turn-off-the-light"},{match:"^[go] to .",group:0,tag:"Imperative",reason:"go-to-toronto"},{match:"^#Modal you [#Infinitive]",group:0,tag:"Imperative",reason:"would-you-"},{match:"^never [#Infinitive]",group:0,tag:"Imperative",reason:"never-stop"},{match:"^come #Infinitive",tag:"Imperative",notIf:"on",reason:"come-have"},{match:"^come and? #Infinitive",tag:"Imperative . Imperative",notIf:"#PhrasalVerb",reason:"come-and-have"},{match:"^stay (out|away|back)",tag:"Imperative",reason:"stay-away"},{match:"^[(stay|be|keep)] #Adjective",group:0,tag:"Imperative",reason:"stay-cool"},{match:"^[keep it] #Adjective",group:0,tag:"Imperative",reason:"keep-it-cool"},{match:"^do not [#Infinitive]",group:0,tag:"Imperative",reason:"do-not-be"},{match:"[#Infinitive] (yourself|yourselves)",group:0,tag:"Imperative",reason:"allow-yourself"},{match:"[#Infinitive] what .",group:0,tag:"Imperative",reason:"look-what"},{match:"^[#Infinitive] #Gerund",group:0,tag:"Imperative",reason:"keep-playing"},{match:"^[#Infinitive] (to|for|into|toward|here|there)",group:0,tag:"Imperative",reason:"go-to"},{match:"^[#Infinitive] (and|or) #Infinitive",group:0,tag:"Imperative",reason:"inf-and-inf"},{match:"^[%Noun|Verb%] to",group:0,tag:"Imperative",reason:"commit-to"},{match:"^[#Infinitive] #Adjective? #Singular #Singular",group:0,tag:"Imperative",reason:"maintain-eye-contact"},{match:"do not (forget|omit|neglect) to [#Infinitive]",group:0,tag:"Imperative",reason:"do-not-forget"},{match:"^[(ask|wear|pay|look|help|show|watch|act|fix|kill|stop|start|turn|try|win)] #Noun",group:0,tag:"Imperative",reason:"pay-attention"}],[{match:"(that|which) were [%Adj|Gerund%]",group:0,tag:"Gerund",reason:"that-were-growing"},{match:"#Gerund [#Gerund] #Plural",group:0,tag:"Adjective",reason:"hard-working-fam"}],[{match:"u r",tag:"#Pronoun #Copula",reason:"u r"},{match:"#Noun [(who|whom)]",group:0,tag:"Determiner",reason:"captain-who"},{match:"[had] #Noun+ #PastTense",group:0,tag:"Condition",reason:"had-he"},{match:"[were] #Noun+ to #Infinitive",group:0,tag:"Condition",reason:"were-he"},{match:"some sort of",tag:"Adjective Noun Conjunction",reason:"some-sort-of"},{match:"of some sort",tag:"Conjunction Adjective Noun",reason:"of-some-sort"},{match:"[such] (a|an|is)? #Noun",group:0,tag:"Determiner",reason:"such-skill"},{match:"[right] (before|after|in|into|to|toward)",group:0,tag:"#Adverb",reason:"right-into"},{match:"#Preposition [about]",group:0,tag:"Adjective",reason:"at-about"},{match:"(are|#Modal|see|do|for) [ya]",group:0,tag:"Pronoun",reason:"are-ya"},{match:"[long live] .",group:0,tag:"#Adjective #Infinitive",reason:"long-live"},{match:"[plenty] of",group:0,tag:"#Uncountable",reason:"plenty-of"},{match:"(always|nearly|barely|practically) [there]",group:0,tag:"Adjective",reason:"always-there"},{match:"[there] (#Adverb|#Pronoun)? #Copula",group:0,tag:"There",reason:"there-is"},{match:"#Copula [there] .",group:0,tag:"There",reason:"is-there"},{match:"#Modal #Adverb? [there]",group:0,tag:"There",reason:"should-there"},{match:"^[do] (you|we|they)",group:0,tag:"QuestionWord",reason:"do-you"},{match:"^[does] (he|she|it|#ProperNoun)",group:0,tag:"QuestionWord",reason:"does-he"},{match:"#Determiner #Noun+ [who] #Verb",group:0,tag:"Preposition",reason:"the-x-who"},{match:"#Determiner #Noun+ [which] #Verb",group:0,tag:"Preposition",reason:"the-x-which"},{match:"a [while]",group:0,tag:"Noun",reason:"a-while"},{match:"guess who",tag:"#Infinitive #QuestionWord",reason:"guess-who"},{match:"[fucking] !#Verb",group:0,tag:"#Gerund",reason:"f-as-gerund"}],[{match:"university of #Place",tag:"Organization",reason:"university-of-Foo"},{match:"#Noun (&|n) #Noun",tag:"Organization",reason:"Noun-&-Noun"},{match:"#Organization of the? #ProperNoun",tag:"Organization",reason:"org-of-place",safe:!0},{match:"#Organization #Country",tag:"Organization",reason:"org-country"},{match:"#ProperNoun #Organization",tag:"Organization",notIf:"#FirstName",reason:"titlecase-org"},{match:"#ProperNoun (ltd|co|inc|dept|assn|bros)",tag:"Organization",reason:"org-abbrv"},{match:"the [#Acronym]",group:0,tag:"Organization",reason:"the-acronym",safe:!0},{match:"government of the? [#Place+]",tag:"Organization",reason:"government-of-x"},{match:"(health|school|commerce) board",tag:"Organization",reason:"school-board"},{match:"(nominating|special|conference|executive|steering|central|congressional) committee",tag:"Organization",reason:"special-comittee"},{match:"(world|global|international|national|#Demonym) #Organization",tag:"Organization",reason:"global-org"},{match:"#Noun+ (public|private) school",tag:"School",reason:"noun-public-school"},{match:"#Place+ #SportsTeam",tag:"SportsTeam",reason:"place-sportsteam"},{match:"(dc|atlanta|minnesota|manchester|newcastle|sheffield) united",tag:"SportsTeam",reason:"united-sportsteam"},{match:"#Place+ fc",tag:"SportsTeam",reason:"fc-sportsteam"},{match:"#Place+ #Noun{0,2} (club|society|group|team|committee|commission|association|guild|crew)",tag:"Organization",reason:"place-noun-society"}],[{match:"(west|north|south|east|western|northern|southern|eastern)+ #Place",tag:"Region",reason:"west-norfolk"},{match:"#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|pa|sc|tn|tx|ut|vt|pr)]",group:0,tag:"Region",reason:"us-state"},{match:"portland [or]",group:0,tag:"Region",reason:"portland-or"},{match:"#ProperNoun+ (cliff|place|range|pit|place|point|room|grounds|ruins)",tag:"Place",reason:"foo-point"},{match:"in [#ProperNoun] #Place",group:0,tag:"Place",reason:"propernoun-place"},{match:"#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)",tag:"Address",reason:"address-st"},{match:"(port|mount|mt) #ProperName",tag:"Place",reason:"port-name"}],[{match:"[so] #Noun",group:0,tag:"Conjunction",reason:"so-conj"},{match:"[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)",group:0,tag:"Conjunction",reason:"how-he-is-x"},{match:"#Copula [(who|what|where|why|how|when)] #Noun",group:0,tag:"Conjunction",reason:"when-he"},{match:"#Verb [that] #Pronoun",group:0,tag:"Conjunction",reason:"said-that-he"},{match:"#Noun [that] #Copula",group:0,tag:"Conjunction",reason:"that-are"},{match:"#Noun [that] #Verb #Adjective",group:0,tag:"Conjunction",reason:"that-seem"},{match:"#Noun #Copula not? [that] #Adjective",group:0,tag:"Adverb",reason:"that-adj"},{match:"#Verb #Adverb? #Noun [(that|which)]",group:0,tag:"Preposition",reason:"that-prep"},{match:"@hasComma [which] (#Pronoun|#Verb)",group:0,tag:"Preposition",reason:"which-copula"},{match:"#Noun [like] #Noun",group:0,tag:"Preposition",reason:"noun-like"},{match:"^[like] #Determiner",group:0,tag:"Preposition",reason:"like-the"},{match:"a #Noun [like] (#Noun|#Determiner)",group:0,tag:"Preposition",reason:"a-noun-like"},{match:"#Adverb [like]",group:0,tag:"Verb",reason:"really-like"},{match:"(not|nothing|never) [like]",group:0,tag:"Preposition",reason:"nothing-like"},{match:"#Infinitive #Pronoun [like]",group:0,tag:"Preposition",reason:"treat-them-like"},{match:"[#QuestionWord] (#Pronoun|#Determiner)",group:0,tag:"Preposition",reason:"how-he"},{match:"[#QuestionWord] #Participle",group:0,tag:"Preposition",reason:"when-stolen"},{match:"[how] (#Determiner|#Copula|#Modal|#PastTense)",group:0,tag:"QuestionWord",reason:"how-is"},{match:"#Plural [(who|which|when)] .",group:0,tag:"Preposition",reason:"people-who"}],[{match:"holy (shit|fuck|hell)",tag:"Expression",reason:"swears-expression"},{match:"^[(well|so|okay|now)] !#Adjective?",group:0,tag:"Expression",reason:"well-"},{match:"^come on",tag:"Expression",reason:"come-on"},{match:"(say|says|said) [sorry]",group:0,tag:"Expression",reason:"say-sorry"},{match:"^(ok|alright|shoot|hell|anyways)",tag:"Expression",reason:"ok-"},{match:"^(say && @hasComma)",tag:"Expression",reason:"say-"},{match:"^(like && @hasComma)",tag:"Expression",reason:"like-"},{match:"^[(dude|man|girl)] #Pronoun",group:0,tag:"Expression",reason:"dude-i"}]);let Bl=null;var Sl={postTagger:function(e){const{world:t}=e,{model:n,methods:r}=t;Bl=Bl||r.one.buildNet(n.two.matches,t);const o=r.two.quickSplit(e.document).map((e=>{const t=e[0];return[t.index[0],t.index[1],t.index[1]+e.length]})),a=e.update(o);return a.cache(),a.sweep(Bl),e.uncache(),e.unfreeze(),e},tagger:e=>e.compute(["freeze","lexicon","preTagger","postTagger","unfreeze"])};const $l={api:function(e){e.prototype.confidence=function(){let e=0,t=0;return this.docs.forEach((n=>{n.forEach((n=>{t+=1,e+=n.confidence||1}))})),0===t?1:(e=>Math.round(100*e)/100)(e/t)},e.prototype.tagger=function(){return this.compute(["tagger"])}},compute:Sl,model:{two:{matches:zl}},hooks:["postTagger"]},Ml=function(e,t){const n=function(e){return Object.keys(e.hooks).filter((e=>!e.startsWith("#")&&!e.startsWith("%")))}(t);if(0===n.length)return e;e._cache||e.cache();const r=e._cache;return e.filter(((e,t)=>n.some((e=>r[t].has(e)))))};var Ll={lib:{lazy:function(e,t){let n=t;"string"==typeof t&&(n=this.buildNet([{match:t}]));const r=this.tokenize(e),o=Ml(r,n);return o.found?(o.compute(["index","tagger"]),o.match(t)):r.none()}}};const Kl=function(e,t,n){let r=e.split(/ /g).map((e=>e.toLowerCase().trim()));r=r.filter((e=>e)),r=r.map((e=>`{${e}}`)).join(" ");let o=this.match(r);return n&&(o=o.if(n)),o.has("#Verb")?function(e,t){let n=t;return e.forEach((e=>{e.has("#Infinitive")||(n=function(e,t){const n=(0,e.methods.two.transform.verb.conjugate)(t,e.model);return e.has("#Gerund")?n.Gerund:e.has("#PastTense")?n.PastTense:e.has("#PresentTense")?n.PresentTense:e.has("#Gerund")?n.Gerund:t}(e,t)),e.replaceWith(n)})),e}(o,t):o.has("#Noun")?function(e,t){let n=t;e.has("#Plural")&&(n=(0,e.methods.two.transform.noun.toPlural)(t,e.model));e.replaceWith(n,{possessives:!0})}(o,t):o.has("#Adverb")?function(e,t){const{toAdverb:n}=e.methods.two.transform.adjective,r=n(t);r&&e.replaceWith(r)}(o,t):o.has("#Adjective")?function(e,t){const{toComparative:n,toSuperlative:r}=e.methods.two.transform.adjective;let o=t;e.has("#Comparative")?o=n(o,e.model):e.has("#Superlative")&&(o=r(o,e.model)),o&&e.replaceWith(o)}(o,t):this};var Jl={api:function(e){e.prototype.swap=Kl}};h.plugin(cl),h.plugin(Ol),h.plugin($l),h.plugin(Ll),h.plugin(Jl);const Wl=function(e){const{fromComparative:t,fromSuperlative:n}=e.methods.two.transform.adjective,r=e.text("normal");return e.has("#Comparative")?t(r,e.model):e.has("#Superlative")?n(r,e.model):r};var ql={api:function(e){class Adjectives extends e{constructor(e,t,n){super(e,t,n),this.viewType="Adjectives"}json(e={}){const{toAdverb:t,toNoun:n,toSuperlative:r,toComparative:o}=this.methods.two.transform.adjective;return e.normal=!0,this.map((a=>{const i=a.toView().json(e)[0]||{},s=Wl(a);return i.adjective={adverb:t(s,this.model),noun:n(s,this.model),superlative:r(s,this.model),comparative:o(s,this.model)},i}),[])}adverbs(){return this.before("#Adverb+$").concat(this.after("^#Adverb+"))}conjugate(e){const{toComparative:t,toSuperlative:n,toNoun:r,toAdverb:o}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const a=Wl(e);return{Adjective:a,Comparative:t(a,this.model),Superlative:n(a,this.model),Noun:r(a,this.model),Adverb:o(a,this.model)}}),[])}toComparative(e){const{toComparative:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}toSuperlative(e){const{toSuperlative:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}toAdverb(e){const{toAdverb:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}toNoun(e){const{toNoun:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}}e.prototype.adjectives=function(e){let t=this.match("#Adjective");return t=t.getNth(e),new Adjectives(t.document,t.pointer)},e.prototype.superlatives=function(e){let t=this.match("#Superlative");return t=t.getNth(e),new Adjectives(t.document,t.pointer)},e.prototype.comparatives=function(e){let t=this.match("#Comparative");return t=t.getNth(e),new Adjectives(t.document,t.pointer)}}};var Ul={api:function(e){class Adverbs extends e{constructor(e,t,n){super(e,t,n),this.viewType="Adverbs"}conjugate(e){return this.getNth(e).map((e=>{const t=function(e){return e.compute("root").text("root")}(e);return{Adverb:e.text("normal"),Adjective:t}}),[])}json(e={}){const t=this.methods.two.transform.adjective.fromAdverb;return e.normal=!0,this.map((n=>{const r=n.toView().json(e)[0]||{};return r.adverb={adjective:t(r.normal)},r}),[])}}e.prototype.adverbs=function(e){let t=this.match("#Adverb");return t=t.getNth(e),new Adverbs(t.document,t.pointer)}}};const Rl=function(e){let t=this;t=function(e){let t=e.parentheses();return t=t.filter((e=>e.wordCount()>=3&&e.has("#Verb")&&e.has("#Noun"))),e.splitOn(t)}(t),t=function(e){let t=e.quotations();return t=t.filter((e=>e.wordCount()>=3&&e.has("#Verb")&&e.has("#Noun"))),e.splitOn(t)}(t),t=function(e){let t=e.match("@hasComma");return t=t.filter((e=>{if(1===e.growLeft(".").wordCount())return!1;if(1===e.growRight(". .").wordCount())return!1;let t=e.grow(".");return t=t.ifNo("@hasComma @hasComma"),t=t.ifNo("@hasComma (and|or) ."),t=t.ifNo("(#City && @hasComma) #Country"),t=t.ifNo("(#WeekDay && @hasComma) #Date"),t=t.ifNo("(#Date+ && @hasComma) #Value"),t=t.ifNo("(#Adjective && @hasComma) #Adjective"),t.found})),e.splitAfter(t)}(t),t=t.splitAfter("(@hasEllipses|@hasSemicolon|@hasDash|@hasColon)"),t=t.splitAfter("^#Pronoun (said|says)"),t=t.splitBefore("(said|says) #ProperNoun$"),t=t.splitBefore(". . if .{4}"),t=t.splitBefore("and while"),t=t.splitBefore("now that"),t=t.splitBefore("ever since"),t=t.splitBefore("(supposing|although)"),t=t.splitBefore("even (while|if|though)"),t=t.splitBefore("(whereas|whose)"),t=t.splitBefore("as (though|if)"),t=t.splitBefore("(til|until)");const n=t.match("#Verb .* [but] .* #Verb",0);n.found&&(t=t.splitBefore(n));const r=t.if("if .{2,9} then .").match("then");return t=t.splitBefore(r),"number"==typeof e&&(t=t.get(e)),t},Ql={this:"Noun",then:"Pivot"},Zl=[{match:"[that] #Determiner #Noun",group:0,chunk:"Pivot"},{match:"#PastTense [that]",group:0,chunk:"Pivot"},{match:"[so] #Determiner",group:0,chunk:"Pivot"},{match:"#Copula #Adverb+? [#Adjective]",group:0,chunk:"Adjective"},{match:"#Adjective and #Adjective",chunk:"Adjective"},{match:"#Adverb+ and #Adverb #Verb",chunk:"Verb"},{match:"#Gerund #Adjective$",chunk:"Verb"},{match:"#Gerund to #Verb",chunk:"Verb"},{match:"#PresentTense and #PresentTense",chunk:"Verb"},{match:"#Adverb #Negative",chunk:"Verb"},{match:"(want|wants|wanted) to #Infinitive",chunk:"Verb"},{match:"#Verb #Reflexive",chunk:"Verb"},{match:"#Verb [to] #Adverb? #Infinitive",group:0,chunk:"Verb"},{match:"[#Preposition] #Gerund",group:0,chunk:"Verb"},{match:"#Infinitive [that] ",group:0,chunk:"Verb"},{match:"#Noun of #Determiner? #Noun",chunk:"Noun"},{match:"#Value+ #Adverb? #Adjective",chunk:"Noun"},{match:"the [#Adjective] #Noun",chunk:"Noun"},{match:"#Singular in #Determiner? #Singular",chunk:"Noun"},{match:"#Plural [in] #Determiner? #Noun",group:0,chunk:"Pivot"},{match:"#Noun and #Determiner? #Noun",notIf:"(#Possessive|#Pronoun)",chunk:"Noun"}];let _l=null;const Xl=function(e,t){if(("undefined"!=typeof process&&process.env?process.env:self.env||{}).DEBUG_CHUNKS){const n=(e.normal+"'").padEnd(8);console.log(` | '${n} → ${t.padEnd(12)}  -fallback- `)}e.chunk=t};var Yl={chunks:function(e){const{document:t,world:n}=e;!function(e){for(let t=0;t{for(let r=0;r{if("Verb"===e.chunk){const t=e.terms.find((e=>e.tags.has("Verb")));t||e.terms.forEach((e=>e.chunk=null))}}))}(t)}},eu={compute:Yl,api:function(e){class Chunks extends e{constructor(e,t,n){super(e,t,n),this.viewType="Chunks"}isVerb(){return this.filter((e=>e.has("")))}isNoun(){return this.filter((e=>e.has("")))}isAdjective(){return this.filter((e=>e.has("")))}isPivot(){return this.filter((e=>e.has("")))}debug(){return this.toView().debug("chunks"),this}update(e){const t=new Chunks(this.document,e);return t._cache=this._cache,t}}e.prototype.chunks=function(e){let t=function(e){const t=[];let n=null;return e.clauses().docs.forEach((e=>{e.forEach((e=>{e.chunk&&e.chunk===n?t[t.length-1][2]=e.index[1]+1:(n=e.chunk,t.push([e.index[0],e.index[1],e.index[1]+1]))})),n=null})),e.update(t)}(this);return t=t.getNth(e),new Chunks(this.document,t.pointer)},e.prototype.clauses=Rl},hooks:["chunks"]};const tu=/\./g,nu=/\(/,ru=/\)/,ou=function(e,t){for(;t{e[0].pre=e[0].pre.replace(nu,"");const t=e[e.length-1];t.post=t.post.replace(ru,"")})),e}(this)}}e.prototype.parentheses=function(e){let t=function(e){const t=[];return e.docs.forEach((e=>{for(let n=0;n{e[0].pre=e[0].pre.replace(lu,"");const t=e[e.length-1];t.post=t.post.replace(uu,"")}))}(this)}}e.prototype.quotations=function(e){let t=function(e){const t=[];return e.docs.forEach((e=>{for(let n=0;n{e.forEach((e=>{e.text=e.text.replace(tu,""),e.normal=e.normal.replace(tu,"")}))})),this}addPeriods(){return this.docs.forEach((e=>{e.forEach((e=>{e.text=e.text.replace(tu,""),e.normal=e.normal.replace(tu,""),e.text=e.text.split("").join(".")+".",e.normal=e.normal.split("").join(".")+"."}))})),this}}e.prototype.acronyms=function(e){let t=this.match("#Acronym");return t=t.getNth(e),new Acronyms(t.document,t.pointer)}}(e),au(e),function(e){class Possessives extends e{constructor(e,t,n){super(e,t,n),this.viewType="Possessives"}strip(){return this.docs.forEach((e=>{e.forEach((e=>{e.text=e.text.replace(iu,""),e.normal=e.normal.replace(iu,"")}))})),this}}e.prototype.possessives=function(e){let t=function(e){let t=e.match("#Possessive+");return t.has("#Person")&&(t=t.growLeft("#Person+")),t.has("#Place")&&(t=t.growLeft("#Place+")),t.has("#Organization")&&(t=t.growLeft("#Organization+")),t}(this);return t=t.getNth(e),new Possessives(t.document,t.pointer)}}(e),hu(e),function(e){gu.forEach((t=>{e.prototype[t[0]]=function(e){const n=this.match(t[1]);return"number"==typeof e?n.get(e):n}})),e.prototype.phoneNumbers=du,mu.forEach((t=>{e.prototype[t[0]]=e.prototype[t[1]]}))}(e),function(e){class Slashes extends e{constructor(e,t,n){super(e,t,n),this.viewType="Slashes"}split(){return this.map((e=>{const t=e.text().split(pu);return(e=e.replaceWith(t.join(" "))).growRight("("+t.join("|")+")+")}))}}e.prototype.slashes=function(e){let t=this.match("#SlashedTerm");return t=t.getNth(e),new Slashes(t.document,t.pointer)}}(e)}};const bu=function(e,t){e.docs.forEach((e=>{e.forEach(t)}))};var vu={case:e=>{bu(e,(e=>{e.text=e.text.toLowerCase()}))},unicode:e=>{const t=e.world,n=t.methods.one.killUnicode;bu(e,(e=>e.text=n(e.text,t)))},whitespace:e=>{bu(e,(e=>{e.post=e.post.replace(/\s+/g," "),e.post=e.post.replace(/\s([.,?!:;])/g,"$1"),e.pre=e.pre.replace(/\s+/g,"")}))},punctuation:e=>{bu(e,(e=>{e.post=e.post.replace(/[–—-]/g," "),e.post=e.post.replace(/[,:;]/g,""),e.post=e.post.replace(/\.{2,}/g,""),e.post=e.post.replace(/\?{2,}/g,"?"),e.post=e.post.replace(/!{2,}/g,"!"),e.post=e.post.replace(/\?!+/g,"?")}));const t=e.docs,n=t[t.length-1];if(n&&n.length>0){const e=n[n.length-1];e.post=e.post.replace(/ /g,"")}},contractions:e=>{e.contractions().expand()},acronyms:e=>{e.acronyms().strip()},parentheses:e=>{e.parentheses().strip()},possessives:e=>{e.possessives().strip()},quotations:e=>{e.quotations().strip()},emoji:e=>{e.emojis().remove()},honorifics:e=>{e.match("#Honorific+ #Person").honorifics().remove()},adverbs:e=>{e.adverbs().remove()},nouns:e=>{e.nouns().toSingular()},verbs:e=>{e.verbs().toInfinitive()},numbers:e=>{e.numbers().toNumber()},debullet:e=>{const t=/^\s*([-–—*•])\s*$/;return e.docs.forEach((e=>{t.test(e[0].pre)&&(e[0].pre=e[0].pre.replace(t,""))})),e}};const yu=e=>e.split("|").reduce(((e,t)=>(e[t]=!0,e)),{}),wu="unicode|punctuation|whitespace|acronyms",ku="|case|contractions|parentheses|quotations|emoji|honorifics|debullet",Pu={light:yu(wu),medium:yu(wu+ku),heavy:yu(wu+ku+"|possessives|adverbs|nouns|verbs")};var Au={api:function(e){e.prototype.normalize=function(e="light"){return"string"==typeof e&&(e=Pu[e]),Object.keys(e).forEach((t=>{vu.hasOwnProperty(t)&&vu[t](this,e[t])})),this}}};const Cu=["after","although","as if","as long as","as","because","before","even if","even though","ever since","if","in order that","provided that","since","so that","than","that","though","unless","until","what","whatever","when","whenever","where","whereas","wherever","whether","which","whichever","who","whoever","whom","whomever","whose"],Nu=function(e){if(e.before("#Preposition$").found)return!0;if(!e.before().found)return!1;for(let t=0;t3&&n.endsWith("s")&&!n.endsWith("ss")},xu=function(e){const t=function(e){let t=e.clone();return t=t.match("#Noun+"),t=t.remove("(#Adjective|#Preposition|#Determiner|#Value)"),t=t.not("#Possessive"),t=t.first(),t.found?t:e}(e);return{determiner:e.match("#Determiner").eq(0),adjectives:e.match("#Adjective"),number:e.values(),isPlural:ju(e,t),isSubordinate:Nu(e),root:t}},Iu=e=>e.text(),Tu=e=>e.json({terms:!1,normal:!0}).map((e=>e.normal)),Du=function(e){if(!e.found)return null;const t=e.values(0);if(t.found){return(t.parse()[0]||{}).num}return null},Hu=function(e){return!e.has("^(#Uncountable|#ProperNoun|#Place|#Pronoun|#Acronym)+$")},Eu={tags:!0},Gu={tags:!0};var Ou={api:function(e){class Nouns extends e{constructor(e,t,n){super(e,t,n),this.viewType="Nouns"}parse(e){return this.getNth(e).map(xu)}json(e){const t="object"==typeof e?e:{};return this.getNth(e).map((e=>{const n=e.toView().json(t)[0]||{};return t&&!1!==t.noun&&(n.noun=function(e){const t=xu(e);return{root:Iu(t.root),number:Du(t.number),determiner:Iu(t.determiner),adjectives:Tu(t.adjectives),isPlural:t.isPlural,isSubordinate:t.isSubordinate}}(e)),n}),[])}conjugate(e){const t=this.world.methods.two.transform.noun;return this.getNth(e).map((e=>{const n=xu(e),r=n.root.compute("root").text("root"),o={Singular:r};return Hu(n.root)&&(o.Plural=t.toPlural(r,this.model)),o.Singular===o.Plural&&delete o.Plural,o}),[])}isPlural(e){const t=this.filter((e=>xu(e).isPlural));return t.getNth(e)}isSingular(e){const t=this.filter((e=>!xu(e).isPlural));return t.getNth(e)}adjectives(e){let t=this.update([]);return this.forEach((e=>{const n=xu(e).adjectives;n.found&&(t=t.concat(n))})),t.getNth(e)}toPlural(e){return this.getNth(e).map((e=>function(e,t){if(!0===t.isPlural)return e;if(t.root.has("#Possessive")&&(t.root=t.root.possessives().strip()),!Hu(t.root))return e;const{methods:n,model:r}=e.world,{toPlural:o}=n.two.transform.noun,a=o(t.root.text({keepPunct:!1}),r);e.match(t.root).replaceWith(a,Eu).tag("Plural","toPlural"),t.determiner.has("(a|an)")&&e.remove(t.determiner);const i=t.root.after("not? #Adverb+? [#Copula]",0);return i.found&&(i.has("is")?e.replace(i,"are"):i.has("was")&&e.replace(i,"were")),e}(e,xu(e))))}toSingular(e){return this.getNth(e).map((e=>function(e,t){if(!1===t.isPlural)return e;const{methods:n,model:r}=e.world,{toSingular:o}=n.two.transform.noun,a=o(t.root.text("normal"),r);return e.replace(t.root,a,Gu).tag("Singular","toPlural"),e}(e,xu(e))))}update(e){const t=new Nouns(this.document,e);return t._cache=this._cache,t}}e.prototype.nouns=function(e){let t=function(e){let t=e.clauses().match(""),n=t.match("@hasComma");return n=n.not("#Place"),n.found&&(t=t.splitAfter(n)),t=t.splitOn("#Expression"),t=t.splitOn("(he|she|we|you|they|i)"),t=t.splitOn("(#Noun|#Adjective) [(he|him|she|it)]",0),t=t.splitOn("[(he|him|she|it)] (#Determiner|#Value)",0),t=t.splitBefore("#Noun [(the|a|an)] #Adjective? #Noun",0),t=t.splitOn("[(here|there)] #Noun",0),t=t.splitOn("[#Noun] (here|there)",0),t=t.splitBefore("(our|my|their|your)"),t=t.splitOn("#Noun [#Determiner]",0),t=t.if("#Noun"),t}(this);return t=t.getNth(e),new Nouns(this.document,t.pointer)}}};var Fu={ones:{zeroth:0,first:1,second:2,third:3,fourth:4,fifth:5,sixth:6,seventh:7,eighth:8,ninth:9,zero:0,one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9},teens:{tenth:10,eleventh:11,twelfth:12,thirteenth:13,fourteenth:14,fifteenth:15,sixteenth:16,seventeenth:17,eighteenth:18,nineteenth:19,ten:10,eleven:11,twelve:12,thirteen:13,fourteen:14,fifteen:15,sixteen:16,seventeen:17,eighteen:18,nineteen:19},tens:{twentieth:20,thirtieth:30,fortieth:40,fourtieth:40,fiftieth:50,sixtieth:60,seventieth:70,eightieth:80,ninetieth:90,twenty:20,thirty:30,forty:40,fourty:40,fifty:50,sixty:60,seventy:70,eighty:80,ninety:90},multiples:{hundredth:100,thousandth:1e3,millionth:1e6,billionth:1e9,trillionth:1e12,quadrillionth:1e15,quintillionth:1e18,sextillionth:1e21,septillionth:1e24,hundred:100,thousand:1e3,million:1e6,billion:1e9,trillion:1e12,quadrillion:1e15,quintillion:1e18,sextillion:1e21,septillion:1e24,grand:1e3}};const Vu=(e,t)=>{if(Fu.ones.hasOwnProperty(e)){if(t.ones||t.teens)return!1}else if(Fu.teens.hasOwnProperty(e)){if(t.ones||t.teens||t.tens)return!1}else if(Fu.tens.hasOwnProperty(e)&&(t.ones||t.teens||t.tens))return!1;return!0},zu=function(e){let t="0.";for(let n=0;ne=(e=(e=(e=(e=(e=(e=(e=e.replace(/1st$/,"1")).replace(/2nd$/,"2")).replace(/3rd$/,"3")).replace(/([4567890])r?th$/,"$1")).replace(/^[$€¥£¢]/,"")).replace(/[%$€¥£¢]$/,"")).replace(/,/g,"")).replace(/([0-9])([a-z\u00C0-\u00FF]{1,2})$/,"$1"),Su=/^([0-9,. ]+)\/([0-9,. ]+)$/,$u={"a few":3,"a couple":2,"a dozen":12,"two dozen":24,zero:0},Mu=e=>Object.keys(e).reduce(((t,n)=>t+=e[n]),0),Lu=function(e){if(!0===$u.hasOwnProperty(e))return $u[e];if("a"===e||"an"===e)return 1;const t=(e=>{const t=[{reg:/^(minus|negative)[\s-]/i,mult:-1},{reg:/^(a\s)?half[\s-](of\s)?/i,mult:.5}];for(let n=0;n#Value+] out of every? [#Value+]");if(!0!==t.found)return null;let{num:n,den:r}=t.groups();return n&&r?(n=Ju(n),r=Ju(r),n&&r&&"number"==typeof n&&"number"==typeof r?{numerator:n,denominator:r}:null):null}(e)||function(e){const t=e.match("[(#Cardinal|a)+] [#Fraction+]");if(!0!==t.found)return null;let{num:n,den:r}=t.groups();n=n.has("a")?1:Ju(n);let o=r.text("reduced");return Ku.test(o)&&(o=o.replace(Ku,""),r=r.replaceWith(o)),r=Wu.hasOwnProperty(o)?Wu[o]:Ju(r),"number"==typeof n&&"number"==typeof r?{numerator:n,denominator:r}:null}(e)||function(e){const t=e.match("^#Ordinal$");if(!0!==t.found)return null;if(e.lookAhead("^of ."))return{numerator:1,denominator:Ju(t)};return null}(e)||null;return null!==t&&t.numerator&&t.denominator&&(t.decimal=t.numerator/t.denominator,t.decimal=(e=>{const t=Math.round(1e3*e)/1e3;return 0===t&&0!==e?e:t})(t.decimal)),t},Uu=function(e){if(e<1e6)return String(e);let t;return t="number"==typeof e?e.toFixed(0):e,-1===t.indexOf("e+")?t:t.replace(".","").split("e+").reduce((function(e,t){return e+Array(t-e.length+2).join(0)}))},Ru=[["ninety",90],["eighty",80],["seventy",70],["sixty",60],["fifty",50],["forty",40],["thirty",30],["twenty",20]],Qu=["","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"],Zu=[[1e24,"septillion"],[1e20,"hundred sextillion"],[1e21,"sextillion"],[1e20,"hundred quintillion"],[1e18,"quintillion"],[1e17,"hundred quadrillion"],[1e15,"quadrillion"],[1e14,"hundred trillion"],[1e12,"trillion"],[1e11,"hundred billion"],[1e9,"billion"],[1e8,"hundred million"],[1e6,"million"],[1e5,"hundred thousand"],[1e3,"thousand"],[100,"hundred"],[1,"one"]],_u=function(e){const t=[];if(e>100)return t;for(let n=0;n=Ru[n][1]&&(e-=Ru[n][1],t.push(Ru[n][0]));return Qu[e]&&t.push(Qu[e]),t},Xu=function(e){let t=e.num;if(0===t||"0"===t)return"zero";t>1e21&&(t=Uu(t));let n=[];t<0&&(n.push("minus"),t=Math.abs(t));const r=function(e){let t=e;const n=[];return Zu.forEach((r=>{if(e>=r[0]){const e=Math.floor(t/r[0]);t-=e*r[0],e&&n.push({unit:r[1],count:e})}})),n}(t);for(let e=0;e1&&n.push("and")),n=n.concat(_u(r[e].count)),n.push(t)}return n=n.concat((e=>{const t=["zero","one","two","three","four","five","six","seven","eight","nine"],n=[],r=Uu(e).match(/\.([0-9]+)/);if(!r||!r[0])return n;n.push("point");const o=r[0].split("");for(let e=0;ee)),0===n.length&&(n[0]=""),n.join(" ")},Yu={one:"first",two:"second",three:"third",five:"fifth",eight:"eighth",nine:"ninth",twelve:"twelfth",twenty:"twentieth",thirty:"thirtieth",forty:"fortieth",fourty:"fourtieth",fifty:"fiftieth",sixty:"sixtieth",seventy:"seventieth",eighty:"eightieth",ninety:"ninetieth"},ec=e=>{const t=Xu(e).split(" "),n=t[t.length-1];return Yu.hasOwnProperty(n)?t[t.length-1]=Yu[n]:t[t.length-1]=n.replace(/y$/,"i")+"th",t.join(" ")},tc=function(e){class Fractions extends e{constructor(e,t,n){super(e,t,n),this.viewType="Fractions"}parse(e){return this.getNth(e).map(qu)}get(e){return this.getNth(e).map(qu)}json(e){return this.getNth(e).map((t=>{const n=t.toView().json(e)[0],r=qu(t);return n.fraction=r,n}),[])}toDecimal(e){return this.getNth(e).forEach((e=>{const{decimal:t}=qu(e);(e=e.replaceWith(String(t),!0)).tag("NumericValue"),e.unTag("Fraction")})),this}toFraction(e){return this.getNth(e).forEach((e=>{const t=qu(e);if(t&&"number"==typeof t.numerator&&"number"==typeof t.denominator){const n=`${t.numerator}/${t.denominator}`;this.replace(e,n)}})),this}toOrdinal(e){return this.getNth(e).forEach((e=>{let t=function(e){if(!e.numerator||!e.denominator)return"";const t=Xu({num:e.numerator});let n=ec({num:e.denominator});return 2===e.denominator&&(n="half"),t&&n?(1!==e.numerator&&(n+="s"),`${t} ${n}`):""}(qu(e));e.after("^#Noun").found&&(t+=" of"),e.replaceWith(t)})),this}toCardinal(e){return this.getNth(e).forEach((e=>{const t=function(e){return e.numerator&&e.denominator?`${Xu({num:e.numerator})} out of ${Xu({num:e.denominator})}`:""}(qu(e));e.replaceWith(t)})),this}toPercentage(e){return this.getNth(e).forEach((e=>{const{decimal:t}=qu(e);let n=100*t;n=Math.round(100*n)/100,e.replaceWith(`${n}%`)})),this}}e.prototype.fractions=function(e){let t=function(e,t){let n=e.match("#Fraction+");return n=n.filter((e=>!e.lookBehind("#Value and$").found)),n=n.notIf("#Value seconds"),n}(this);return t=t.getNth(e),new Fractions(this.document,t.pointer)}},nc="twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|fourty",rc=function(e){let t=e.match("#Value+");if(t.has("#NumericValue #NumericValue")&&(t.has("#Value @hasComma #Value")?t.splitAfter("@hasComma"):t.has("#NumericValue #Fraction")?t.splitAfter("#NumericValue #Fraction"):t=t.splitAfter("#NumericValue")),t.has("#Value #Value #Value")&&!t.has("#Multiple")&&t.has("("+nc+") #Cardinal #Cardinal")&&(t=t.splitAfter("("+nc+") #Cardinal")),t.has("#Value #Value")){t.has("#NumericValue #NumericValue")&&(t=t.splitOn("#Year")),t.has("("+nc+") (eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen)")&&(t=t.splitAfter("("+nc+")"));const e=t.match("#Cardinal #Cardinal");if(e.found&&!t.has("(point|decimal|#Fraction)")&&!e.has("#Cardinal (#Multiple|point|decimal)")){const n=t.has(`(one|two|three|four|five|six|seven|eight|nine) (${nc})`),r=e.has("("+nc+") #Cardinal"),o=e.has("#Multiple #Value");n||r||o||e.terms().forEach((e=>{t=t.splitOn(e)}))}t.match("#Ordinal #Ordinal").match("#TextValue").found&&!t.has("#Multiple")&&(t.has("("+nc+") #Ordinal")||(t=t.splitAfter("#Ordinal"))),t.has("#Time")&&(t=t.splitOn("#Time")),t=t.splitBefore("#Ordinal [#Cardinal]",0),t.has("#TextValue #NumericValue")&&!t.has("("+nc+"|#Multiple)")&&(t=t.splitBefore("#TextValue #NumericValue"))}return t=t.splitAfter("#NumberRange"),t=t.splitBefore("#Year"),t},oc=function(e){if("string"==typeof e)return{num:Lu(e)};let t=e.text("reduced");const n=e.growRight("#Unit").match("#Unit$").text("machine"),r=/[0-9],[0-9]/.test(e.text("text"));if(1===e.terms().length&&!e.has("#Multiple")){const o=function(e,t){const n=(e=e.replace(/,/g,"")).split(/([0-9.,]*)/);let[r,o]=n,a=n.slice(2).join("");return""!==o&&t.length<2?(o=Number(o||e),"number"!=typeof o&&(o=null),a=a||"","st"!==a&&"nd"!==a&&"rd"!==a&&"th"!==a||(a=""),{prefix:r||"",num:o,suffix:a}):null}(t,e);if(null!==o)return o.hasComma=r,o.unit=n,o}let o=e.match("#Fraction{2,}$");o=!1===o.found?e.match("^#Fraction$"):o;let a=null;o.found&&(o.has("#Value and #Value #Fraction")&&(o=o.match("and #Value #Fraction")),a=qu(o),t=(e=(e=e.not(o)).not("and$")).text("reduced"));let i=0;return t&&(i=Lu(t)||0),a&&a.decimal&&(i+=a.decimal),{hasComma:r,prefix:"",num:i,suffix:"",isOrdinal:e.has("#Ordinal"),isText:e.has("#TextValue"),isFraction:e.has("#Fraction"),isMoney:e.has("#Money"),unit:n}},ac={"¢":"cents",$:"dollars","£":"pounds","¥":"yen","€":"euros","₡":"colón","฿":"baht","₭":"kip","₩":"won","₹":"rupees","₽":"ruble","₺":"liras"},ic={"%":"percent","°":"degrees"},sc=function(e){const t={suffix:"",prefix:e.prefix};return ac.hasOwnProperty(e.prefix)&&(t.suffix+=" "+ac[e.prefix],t.prefix=""),ic.hasOwnProperty(e.suffix)&&(t.suffix+=" "+ic[e.suffix]),t.suffix&&1===e.num&&(t.suffix=t.suffix.replace(/s$/,"")),!t.suffix&&e.suffix&&(t.suffix+=" "+e.suffix),t},lc=function(e,t){if("TextOrdinal"===t){const{prefix:t,suffix:n}=sc(e);return t+ec(e)+n}if("Ordinal"===t)return e.prefix+function(e){const t=e.num;if(!t&&0!==t)return null;const n=t%100;if(n>10&&n<20)return String(t)+"th";const r={0:"th",1:"st",2:"nd",3:"rd"};let o=Uu(t);const a=o.slice(o.length-1,o.length);return o+=r[a]?r[a]:"th",o}(e)+e.suffix;if("TextCardinal"===t){const{prefix:t,suffix:n}=sc(e);return t+Xu(e)+n}let n=e.num;return e.hasComma&&(n=n.toLocaleString()),e.prefix+String(n)+e.suffix},uc=function(e){if("string"==typeof e||"number"==typeof e){const t={};return t[e]=!0,t}return t=e,"[object Array]"===Object.prototype.toString.call(t)?e.reduce(((e,t)=>(e[t]=!0,e)),{}):e||{};var t},cc=function(e){class Numbers extends e{constructor(e,t,n){super(e,t,n),this.viewType="Numbers"}parse(e){return this.getNth(e).map(oc)}get(e){return this.getNth(e).map(oc).map((e=>e.num))}json(e){const t="object"==typeof e?e:{};return this.getNth(e).map((e=>{const n=e.toView().json(t)[0],r=oc(e);return n.number={prefix:r.prefix,num:r.num,suffix:r.suffix,hasComma:r.hasComma,unit:r.unit},n}),[])}units(){return this.growRight("#Unit").match("#Unit$")}isUnit(e){return function(e,t={}){return t=uc(t),e.filter((e=>{const{unit:n}=oc(e);return!(!n||!0!==t[n])}))}(this,e)}isOrdinal(){return this.if("#Ordinal")}isCardinal(){return this.if("#Cardinal")}toNumber(){const e=this.map((e=>{if(!this.has("#TextValue"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#Ordinal")?"Ordinal":"Cardinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("NumericValue")}));return new Numbers(e.document,e.pointer)}toLocaleString(){return this.forEach((e=>{const t=oc(e);if(null===t.num)return;let n=t.num.toLocaleString();if(e.has("#Ordinal")){const e=lc(t,"Ordinal").match(/[a-z]+$/);e&&(n+=e[0]||"")}e.replaceWith(n,{tags:!0})})),this}toText(){const e=this.map((e=>{if(e.has("#TextValue"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#Ordinal")?"TextOrdinal":"TextCardinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("TextValue"),e}));return new Numbers(e.document,e.pointer)}toCardinal(){const e=this.map((e=>{if(!e.has("#Ordinal"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#TextValue")?"TextCardinal":"Cardinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("Cardinal"),e}));return new Numbers(e.document,e.pointer)}toOrdinal(){const e=this.map((e=>{if(e.has("#Ordinal"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#TextValue")?"TextOrdinal":"Ordinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("Ordinal"),e}));return new Numbers(e.document,e.pointer)}isEqual(e){return this.filter((t=>oc(t).num===e))}greaterThan(e){return this.filter((t=>oc(t).num>e))}lessThan(e){return this.filter((t=>oc(t).num{const r=oc(n).num;return r>e&&r{const n=oc(t);if(n.num=e,null===n.num)return t;let r=t.has("#Ordinal")?"Ordinal":"Cardinal";t.has("#TextValue")&&(r=t.has("#Ordinal")?"TextOrdinal":"TextCardinal");let o=lc(n,r);return n.hasComma&&"Cardinal"===r&&(o=Number(o).toLocaleString()),(t=t.not("#Currency")).replaceWith(o,{tags:!0}),t}));return new Numbers(t.document,t.pointer)}add(e){if(!e)return this;"string"==typeof e&&(e=oc(e).num);const t=this.map((t=>{const n=oc(t);if(null===n.num)return t;n.num+=e;let r=t.has("#Ordinal")?"Ordinal":"Cardinal";n.isText&&(r=t.has("#Ordinal")?"TextOrdinal":"TextCardinal");const o=lc(n,r);return t.replaceWith(o,{tags:!0}),t}));return new Numbers(t.document,t.pointer)}subtract(e,t){return this.add(-1*e,t)}increment(e){return this.add(1,e)}decrement(e){return this.add(-1,e)}update(e){const t=new Numbers(this.document,e);return t._cache=this._cache,t}}Numbers.prototype.toNice=Numbers.prototype.toLocaleString,Numbers.prototype.isBetween=Numbers.prototype.between,Numbers.prototype.minus=Numbers.prototype.subtract,Numbers.prototype.plus=Numbers.prototype.add,Numbers.prototype.equals=Numbers.prototype.isEqual,e.prototype.numbers=function(e){let t=rc(this);return t=t.getNth(e),new Numbers(this.document,t.pointer)},e.prototype.percentages=function(e){let t=rc(this);return t=t.filter((e=>e.has("#Percent")||e.after("^percent"))),t=t.getNth(e),new Numbers(this.document,t.pointer)},e.prototype.money=function(e){let t=rc(this);return t=t.filter((e=>e.has("#Money")||e.after("^#Currency"))),t=t.getNth(e),new Numbers(this.document,t.pointer)},e.prototype.values=e.prototype.numbers};var hc={api:function(e){tc(e),cc(e)}};const dc={people:!0,emails:!0,phoneNumbers:!0,places:!0},gc=function(e={}){return!1!==(e=Object.assign({},dc,e)).people&&this.people().replaceWith("██████████"),!1!==e.emails&&this.emails().replaceWith("██████████"),!1!==e.places&&this.places().replaceWith("██████████"),!1!==e.phoneNumbers&&this.phoneNumbers().replaceWith("███████"),this},mc={api:function(e){e.prototype.redact=gc}},pc=function(e){let t=null;return e.has("#PastTense")?t="PastTense":e.has("#FutureTense")?t="FutureTense":e.has("#PresentTense")&&(t="PresentTense"),{tense:t}},fc=function(e){const t=function(e){let t=e;return 1===t.length?t:(t=t.if("#Verb"),1===t.length?t:(t=t.ifNo("(after|although|as|because|before|if|since|than|that|though|when|whenever|where|whereas|wherever|whether|while|why|unless|until|once)"),t=t.ifNo("^even (if|though)"),t=t.ifNo("^so that"),t=t.ifNo("^rather than"),t=t.ifNo("^provided that"),1===t.length?t:(t=t.ifNo("(that|which|whichever|who|whoever|whom|whose|whomever)"),1===t.length?t:(t=t.ifNo("(^despite|^during|^before|^through|^throughout)"),1===t.length?t:(t=t.ifNo("^#Gerund"),1===t.length?t:(0===t.length&&(t=e),t.eq(0)))))))}(e.clauses()),n=t.chunks();let r=e.none(),o=e.none(),a=e.none();return n.forEach(((e,t)=>{0!==t||e.has("")?o.found||!e.has("")?o.found&&(a=a.concat(e)):o=e:r=e})),o.found&&!r.found&&(r=o.before("+").first()),{subj:r,verb:o,pred:a,grammar:pc(o)}};var bc={api:function(e){class Sentences extends e{constructor(e,t,n){super(e,t,n),this.viewType="Sentences"}json(e={}){return this.map((t=>{const n=t.toView().json(e)[0]||{},{subj:r,verb:o,pred:a,grammar:i}=fc(t);return n.sentence={subject:r.text("normal"),verb:o.text("normal"),predicate:a.text("normal"),grammar:i},n}),[])}toPastTense(e){return this.getNth(e).map((e=>(fc(e),function(e){let t=e.verbs();const n=t.eq(0);if(n.has("#PastTense"))return e;if(n.toPastTense(),t.length>1){t=t.slice(1),t=t.filter((e=>!e.lookBehind("to$").found)),t=t.if("#PresentTense"),t=t.notIf("#Gerund");const n=e.match("to #Verb+ #Conjunction #Verb").terms();t=t.not(n),t.found&&t.verbs().toPastTense()}return e}(e))))}toPresentTense(e){return this.getNth(e).map((e=>(fc(e),function(e){let t=e.verbs();return t.eq(0).toPresentTense(),t.length>1&&(t=t.slice(1),t=t.filter((e=>!e.lookBehind("to$").found)),t=t.notIf("#Gerund"),t.found&&t.verbs().toPresentTense()),e}(e))))}toFutureTense(e){return this.getNth(e).map((e=>(fc(e),e=function(e){let t=e.verbs();if(t.eq(0).toFutureTense(),t=(e=e.fullSentence()).verbs(),t.length>1){t=t.slice(1);const e=t.filter((e=>!(e.lookBehind("to$").found||!e.has("#Copula #Gerund")&&(e.has("#Gerund")||!e.has("#Copula")&&e.has("#PresentTense")&&!e.has("#Infinitive")&&e.lookBefore("(he|she|it|that|which)$").found))));e.found&&e.forEach((e=>{if(e.has("#Copula"))return e.match("was").replaceWith("is"),void e.match("is").replaceWith("will be");e.toInfinitive()}))}return e}(e),e)))}toInfinitive(e){return this.getNth(e).map((e=>(fc(e),function(e){return e.verbs().toInfinitive(),e}(e))))}toNegative(e){return this.getNth(e).map((e=>(fc(e),function(e){return e.verbs().first().toNegative().compute("chunks"),e}(e))))}toPositive(e){return this.getNth(e).map((e=>(fc(e),function(e){return e.verbs().first().toPositive().compute("chunks"),e}(e))))}isQuestion(e){return this.questions(e)}isExclamation(e){const t=this.filter((e=>e.lastTerm().has("@hasExclamation")));return t.getNth(e)}isStatement(e){const t=this.filter((e=>!e.isExclamation().found&&!e.isQuestion().found));return t.getNth(e)}update(e){const t=new Sentences(this.document,e);return t._cache=this._cache,t}}Sentences.prototype.toPresent=Sentences.prototype.toPresentTense,Sentences.prototype.toPast=Sentences.prototype.toPastTense,Sentences.prototype.toFuture=Sentences.prototype.toFutureTense;const t={sentences:function(e){let t=this.map((e=>e.fullSentence()));return t=t.getNth(e),new Sentences(this.document,t.pointer)},questions:function(e){const t=function(e){const t=/\?/,{document:n}=e;return e.filter((e=>{const r=e.docs[0]||[],o=r[r.length-1];return!(!o||n[o.index[0]].length!==r.length)&&(!!t.test(o.post)||function(e){const t=e.clauses();return!(/\.\.$/.test(e.out("text"))||e.has("^#QuestionWord")&&e.has("@hasComma")||!e.has("or not$")&&!e.has("^#QuestionWord")&&!e.has("^(do|does|did|is|was|can|could|will|would|may) #Noun")&&!e.has("^(have|must) you")&&!t.has("(do|does|is|was) #Noun+ #Adverb? (#Adjective|#Infinitive)$"))}(e))}))}(this);return t.getNth(e)}};Object.assign(e.prototype,t)}};const vc=function(e){const t={};t.firstName=e.match("#FirstName+"),t.lastName=e.match("#LastName+"),t.honorific=e.match("#Honorific+");const n=t.lastName,r=t.firstName;return r.found&&n.found||r.found||n.found||!e.has("^#Honorific .$")||(t.lastName=e.match(".$")),t},yc="male",wc="female",kc={mr:yc,mrs:wc,miss:wc,madam:wc,king:yc,queen:wc,duke:yc,duchess:wc,baron:yc,baroness:wc,count:yc,countess:wc,prince:yc,princess:wc,sire:yc,dame:wc,lady:wc,ayatullah:yc,congressman:yc,congresswoman:wc,"first lady":wc,mx:null},Pc=function(e,t){const{firstName:n,honorific:r}=e;if(n.has("#FemaleName"))return wc;if(n.has("#MaleName"))return yc;if(r.found){let e=r.text("normal");if(e=e.replace(/\./g,""),kc.hasOwnProperty(e))return kc[e];if(/^her /.test(e))return wc;if(/^his /.test(e))return yc}const o=t.after();if(!o.has("#Person")&&o.has("#Pronoun")){const e=o.match("#Pronoun");if(e.has("(they|their)"))return null;const t=e.has("(he|his)"),n=e.has("(she|her|hers)");if(t&&!n)return yc;if(n&&!t)return wc}return null},Ac=function(e){const t=this.clauses();let n=t.people();return n=n.concat(t.places()),n=n.concat(t.organizations()),n=n.not("(someone|man|woman|mother|brother|sister|father)"),n=n.sort("seq"),n=n.getNth(e),n};var Cc={api:function(e){!function(e){class People extends e{constructor(e,t,n){super(e,t,n),this.viewType="People"}parse(e){return this.getNth(e).map(vc)}json(e){const t="object"==typeof e?e:{};return this.getNth(e).map((e=>{const n=e.toView().json(t)[0],r=vc(e);return n.person={firstName:r.firstName.text("normal"),lastName:r.lastName.text("normal"),honorific:r.honorific.text("normal"),presumed_gender:Pc(r,e)},n}),[])}presumedMale(){return this.filter((e=>e.has("(#MaleName|mr|mister|sr|jr|king|pope|prince|sir)")))}presumedFemale(){return this.filter((e=>e.has("(#FemaleName|mrs|miss|queen|princess|madam)")))}update(e){const t=new People(this.document,e);return t._cache=this._cache,t}}e.prototype.people=function(e){let t=function(e){let t=e.splitAfter("@hasComma");t=t.match("#Honorific+? #Person+");const n=t.match("#Possessive").notIf("(his|her)");return t=t.splitAfter(n),t}(this);return t=t.getNth(e),new People(this.document,t.pointer)}}(e),function(e){e.prototype.places=function(t){let n=function(e){let t=e.match("(#Place|#Address)+"),n=t.match("@hasComma");return n=n.filter((e=>!!e.has("(asia|africa|europe|america)$")||!e.has("(#City|#Region|#ProperNoun)$")||!e.after("^(#Country|#Region)").found)),t=t.splitAfter(n),t}(this);return n=n.getNth(t),new e(this.document,n.pointer)}}(e),function(e){e.prototype.organizations=function(e){return this.match("#Organization+").getNth(e)}}(e),function(e){e.prototype.topics=Ac}(e)}};const Nc=function(e,t){const n={pre:e.none(),post:e.none()};if(!e.has("#Adverb"))return n;const r=e.splitOn(t);return 3===r.length?{pre:r.eq(0).adverbs(),post:r.eq(2).adverbs()}:r.eq(0).isDoc(t)?(n.post=r.eq(1).adverbs(),n):(n.pre=r.eq(0).adverbs(),n)},jc=function(e,t){const n=e.splitBefore(t);if(n.length<=1)return e.none();let r=n.eq(0);return r=r.not("(#Adverb|#Negative|#Prefix)"),r},xc=function(e){return e.match("#Negative")},Ic=function(e){if(!e.has("(#Particle|#PhrasalVerb)"))return{verb:e.none(),particle:e.none()};const t=e.match("#Particle$");return{verb:e.not(t),particle:t}},Tc=function(e){const t=e.clone();t.contractions().expand();const n=function(e){let t=e;return e.wordCount()>1&&(t=e.not("(#Negative|#Auxiliary|#Modal|#Adverb|#Prefix)")),t.length>1&&!t.has("#Phrasal #Particle")&&(t=t.last()),t=t.not("(want|wants|wanted) to"),t.found||(t=e.not("#Negative")),t}(t);return{root:n,prefix:t.match("#Prefix"),adverbs:Nc(t,n),auxiliary:jc(t,n),negative:xc(t),phrasal:Ic(n)}},Dc={tense:"PresentTense"},Hc={conditional:!0},Ec={tense:"FutureTense"},Gc={progressive:!0},Oc={tense:"PastTense"},Fc={complete:!0,progressive:!1},Vc={passive:!0},zc=function(e){const t={};return e.forEach((e=>{Object.assign(t,e)})),t},Bc={imperative:[["#Imperative",[]]],"want-infinitive":[["^(want|wants|wanted) to #Infinitive$",[Dc]],["^wanted to #Infinitive$",[Oc]],["^will want to #Infinitive$",[Ec]]],"gerund-phrase":[["^#PastTense #Gerund$",[Oc]],["^#PresentTense #Gerund$",[Dc]],["^#Infinitive #Gerund$",[Dc]],["^will #Infinitive #Gerund$",[Ec]],["^have #PastTense #Gerund$",[Oc]],["^will have #PastTense #Gerund$",[Oc]]],"simple-present":[["^#PresentTense$",[Dc]],["^#Infinitive$",[Dc]]],"simple-past":[["^#PastTense$",[Oc]]],"simple-future":[["^will #Adverb? #Infinitive",[Ec]]],"present-progressive":[["^(is|are|am) #Gerund$",[Dc,Gc]]],"past-progressive":[["^(was|were) #Gerund$",[Oc,Gc]]],"future-progressive":[["^will be #Gerund$",[Ec,Gc]]],"present-perfect":[["^(has|have) #PastTense$",[Oc,Fc]]],"past-perfect":[["^had #PastTense$",[Oc,Fc]],["^had #PastTense to #Infinitive",[Oc,Fc]]],"future-perfect":[["^will have #PastTense$",[Ec,Fc]]],"present-perfect-progressive":[["^(has|have) been #Gerund$",[Oc,Gc]]],"past-perfect-progressive":[["^had been #Gerund$",[Oc,Gc]]],"future-perfect-progressive":[["^will have been #Gerund$",[Ec,Gc]]],"passive-past":[["(got|were|was) #Passive",[Oc,Vc]],["^(was|were) being #Passive",[Oc,Vc]],["^(had|have) been #Passive",[Oc,Vc]]],"passive-present":[["^(is|are|am) #Passive",[Dc,Vc]],["^(is|are|am) being #Passive",[Dc,Vc]],["^has been #Passive",[Dc,Vc]]],"passive-future":[["will have been #Passive",[Ec,Vc,Hc]],["will be being? #Passive",[Ec,Vc,Hc]]],"present-conditional":[["would be #PastTense",[Dc,Hc]]],"past-conditional":[["would have been #PastTense",[Oc,Hc]]],"auxiliary-future":[["(is|are|am|was) going to (#Infinitive|#PresentTense)",[Ec]]],"auxiliary-past":[["^did #Infinitive$",[Oc,{plural:!1}]],["^used to #Infinitive$",[Oc,Fc]]],"auxiliary-present":[["^(does|do) #Infinitive$",[Dc,Fc,{plural:!0}]]],"modal-past":[["^(could|must|should|shall) have #PastTense$",[Oc]]],"modal-infinitive":[["^#Modal #Infinitive$",[]]],infinitive:[["^#Infinitive$",[]]]},Sc=[];Object.keys(Bc).map((e=>{Bc[e].forEach((t=>{Sc.push({name:e,match:t[0],data:zc(t[1])})}))}));const $c=function(e,t){const n={};e=function(e,t){return e=e.clone(),t.adverbs.post&&t.adverbs.post.found&&e.remove(t.adverbs.post),t.adverbs.pre&&t.adverbs.pre.found&&e.remove(t.adverbs.pre),e.has("#Negative")&&(e=e.remove("#Negative")),e.has("#Prefix")&&(e=e.remove("#Prefix")),t.root.has("#PhrasalVerb #Particle")&&e.remove("#Particle$"),e.not("#Adverb")}(e,t);for(let t=0;t!(e.has("^(if|unless|while|but|for|per|at|by|that|which|who|from)")||t>0&&e.has("^#Verb . #Noun+$")||t>0&&e.has("^#Adverb")))),0===t.length?e:t}(t);const n=t.nouns();let r=n.last();const o=r.match("(i|he|she|we|you|they)");if(o.found)return o.nouns();let a=n.if("^(that|this|those)");return a.found||!1===n.found&&(a=t.match("^(that|this|those)"),a.found)?a:(r=n.last(),Mc(r)&&(n.remove(r),r=n.last()),Mc(r)&&(n.remove(r),r=n.last()),r)}(e);return{subject:t,plural:Lc(t,e)}},Jc=e=>e,Wc=(e,t)=>{const n=Kc(e),r=n.subject;return!(!r.has("i")&&!r.has("we"))||n.plural},qc=function(e,t){if(e.has("were"))return"are";const{subject:n,plural:r}=Kc(e);return n.has("i")?"am":n.has("we")||r?"are":"is"},Uc=function(e,t){const n=Kc(e),r=n.subject;return r.has("i")||r.has("we")||n.plural?"do":"does"},Rc=function(e){return e.has("#Infinitive")?"Infinitive":e.has("#Participle")?"Participle":e.has("#PastTense")?"PastTense":e.has("#Gerund")?"Gerund":e.has("#PresentTense")?"PresentTense":void 0},Qc=function(e,t){const{toInfinitive:n}=e.methods.two.transform.verb;let r=t.root.text({keepPunct:!1});return r=n(r,e.model,Rc(e)),r&&e.replace(t.root,r),e},Zc=e=>e.has("will not")?e.replace("will not","have not"):e.remove("will"),_c=function(e){if(!e||!e.isView)return[];return e.json({normal:!0,terms:!1,text:!1}).map((e=>e.normal))},Xc=function(e){return e&&e.isView?e.text("normal"):""},Yc=function(e){const{toInfinitive:t}=e.methods.two.transform.verb;return t(e.text("normal"),e.model,Rc(e))},eh={tags:!0},th={tags:!0},nh={noAux:(e,t)=>(t.auxiliary.found&&(e=e.remove(t.auxiliary)),e),simple:(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;if(o.has("#Modal"))return e;let a=o.text({keepPunct:!1});a=r(a,e.model,Rc(o));return a=n(a,e.model).PastTense,a="been"===a?"was":a,"was"===a&&(a=((e,t)=>{const{subject:n,plural:r}=Kc(e);return r||n.has("we")?"were":"was"})(e)),a&&e.replace(o,a,th),e},both:function(e,t){return t.negative.found?(e.replace("will","did"),e):(e=nh.simple(e,t),e=nh.noAux(e,t))},hasHad:e=>(e.replace("has","had",th),e),hasParticiple:(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;let a=o.text("normal");return a=r(a,e.model,Rc(o)),n(a,e.model).Participle}},rh={infinitive:nh.simple,"simple-present":nh.simple,"simple-past":Jc,"simple-future":nh.both,"present-progressive":e=>(e.replace("are","were",th),e.replace("(is|are|am)","was",th),e),"past-progressive":Jc,"future-progressive":(e,t)=>(e.match(t.root).insertBefore("was"),e.remove("(will|be)"),e),"present-perfect":nh.hasHad,"past-perfect":Jc,"future-perfect":(e,t)=>(e.match(t.root).insertBefore("had"),e.has("will")&&(e=Zc(e)),e.remove("have"),e),"present-perfect-progressive":nh.hasHad,"past-perfect-progressive":Jc,"future-perfect-progressive":e=>(e.remove("will"),e.replace("have","had",th),e),"passive-past":e=>(e.replace("have","had",th),e),"passive-present":e=>(e.replace("(is|are)","was",th),e),"passive-future":(e,t)=>(t.auxiliary.has("will be")&&(e.match(t.root).insertBefore("had been"),e.remove("(will|be)")),t.auxiliary.has("will have been")&&(e.replace("have","had",th),e.remove("will")),e),"present-conditional":e=>(e.replace("be","have been"),e),"past-conditional":Jc,"auxiliary-future":e=>(e.replace("(is|are|am)","was",th),e),"auxiliary-past":Jc,"auxiliary-present":e=>(e.replace("(do|does)","did",th),e),"modal-infinitive":(e,t)=>(e.has("can")?e.replace("can","could",th):(nh.simple(e,t),e.match("#Modal").insertAfter("have").tag("Auxiliary")),e),"modal-past":Jc,"want-infinitive":e=>(e.replace("(want|wants)","wanted",th),e.remove("will"),e),"gerund-phrase":(e,t)=>(t.root=t.root.not("#Gerund$"),nh.simple(e,t),Zc(e),e)},oh=function(e,t){const n=Kc(e),r=n.subject;return r.has("(i|we|you)")?"have":!1===n.plural||r.has("he")||r.has("she")||r.has("#Person")?"has":"have"},ah=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,{root:o,auxiliary:a}=t;if(o.has("#Modal"))return e;let i=o.text({keepPunct:!1});i=r(i,e.model,Rc(o));const s=n(i,e.model);if(i=s.Participle||s.PastTense,i){e=e.replace(o,i);const t=oh(e);e.prepend(t).match(t).tag("Auxiliary"),e.remove(a)}return e},ih={infinitive:ah,"simple-present":ah,"simple-future":(e,t)=>e.replace("will",oh(e)),"present-perfect":Jc,"past-perfect":Jc,"future-perfect":(e,t)=>e.replace("will have",oh(e)),"present-perfect-progressive":Jc,"past-perfect-progressive":Jc,"future-perfect-progressive":Jc},sh={tags:!0},lh=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;let a=o.text("normal");return a=r(a,e.model,Rc(o)),!1===Wc(e)&&(a=n(a,e.model).PresentTense),o.has("#Copula")&&(a=qc(e)),a&&(e=e.replace(o,a,sh)).not("#Particle").tag("PresentTense"),e},uh=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;let a=o.text("normal");return a=r(a,e.model,Rc(o)),!1===Wc(e)&&(a=n(a,e.model).Gerund),a&&(e=e.replace(o,a,sh)).not("#Particle").tag("Gerund"),e},ch={infinitive:lh,"simple-present":(e,t)=>{const{conjugate:n}=e.methods.two.transform.verb,{root:r}=t;if(!r.has("#Infinitive"))return lh(e,t);{const t=Kc(e).subject;if(Wc(e)||t.has("i"))return e;const o=r.text("normal"),a=n(o,e.model).PresentTense;o!==a&&e.replace(r,a,sh)}return e},"simple-past":lh,"simple-future":(e,t)=>{const{root:n,auxiliary:r}=t;if(r.has("will")&&n.has("be")){const t=qc(e);e.replace(n,t),(e=e.remove("will")).replace("not "+t,t+" not")}else lh(e,t),e=e.remove("will");return e},"present-progressive":Jc,"past-progressive":(e,t)=>{const n=qc(e);return e.replace("(were|was)",n,sh)},"future-progressive":e=>(e.match("will").insertBefore("is"),e.remove("be"),e.remove("will")),"present-perfect":(e,t)=>(lh(e,t),e=e.remove("(have|had|has)")),"past-perfect":(e,t)=>{const n=Kc(e).subject;return Wc(e)||n.has("i")?((e=Qc(e,t)).remove("had"),e):(e.replace("had","has",sh),e)},"future-perfect":e=>(e.match("will").insertBefore("has"),e.remove("have").remove("will")),"present-perfect-progressive":Jc,"past-perfect-progressive":e=>e.replace("had","has",sh),"future-perfect-progressive":e=>(e.match("will").insertBefore("has"),e.remove("have").remove("will")),"passive-past":(e,t)=>{const n=qc(e);return e.has("(had|have|has)")&&e.has("been")?(e.replace("(had|have|has)",n,sh),e.replace("been","being"),e):e.replace("(got|was|were)",n)},"passive-present":Jc,"passive-future":e=>(e.replace("will","is"),e.replace("be","being")),"present-conditional":Jc,"past-conditional":e=>(e.replace("been","be"),e.remove("have")),"auxiliary-future":(e,t)=>(uh(e,t),e.remove("(going|to)"),e),"auxiliary-past":(e,t)=>{if(t.auxiliary.has("did")){const n=Uc(e);return e.replace(t.auxiliary,n),e}return uh(e,t),e.replace(t.auxiliary,"is"),e},"auxiliary-present":Jc,"modal-infinitive":Jc,"modal-past":(e,t)=>(((e,t)=>{const{toInfinitive:n}=e.methods.two.transform.verb,r=t.root;let o=t.root.text("normal");o=n(o,e.model,Rc(r)),o&&(e=e.replace(t.root,o,sh))})(e,t),e.remove("have")),"gerund-phrase":(e,t)=>(t.root=t.root.not("#Gerund$"),lh(e,t),e.remove("(will|have)")),"want-infinitive":(e,t)=>{let n="wants";return Wc(e)&&(n="want"),e.replace("(want|wanted|wants)",n,sh),e.remove("will"),e}},hh={tags:!0},dh=(e,t)=>{const{toInfinitive:n}=e.methods.two.transform.verb,{root:r,auxiliary:o}=t;if(r.has("#Modal"))return e;let a=r.text("normal");return a=n(a,e.model,Rc(r)),a&&(e=e.replace(r,a,hh)).not("#Particle").tag("Verb"),e.prepend("will").match("will").tag("Auxiliary"),e.remove(o),e},gh=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,{root:o,auxiliary:a}=t;let i=o.text("normal");return i=r(i,e.model,Rc(o)),i&&(i=n(i,e.model).Gerund,e.replace(o,i,hh),e.not("#Particle").tag("PresentTense")),e.remove(a),e.prepend("will be").match("will be").tag("Auxiliary"),e},mh={infinitive:dh,"simple-present":dh,"simple-past":dh,"simple-future":Jc,"present-progressive":gh,"past-progressive":gh,"future-progressive":Jc,"present-perfect":e=>(e.match("(have|has)").replaceWith("will have"),e),"past-perfect":e=>e.replace("(had|has)","will have"),"future-perfect":Jc,"present-perfect-progressive":e=>e.replace("has","will have"),"past-perfect-progressive":e=>e.replace("had","will have"),"future-perfect-progressive":Jc,"passive-past":e=>e.has("got")?e.replace("got","will get"):e.has("(was|were)")?(e.replace("(was|were)","will be"),e.remove("being")):e.has("(have|has|had) been")?e.replace("(have|has|had) been","will be"):e,"passive-present":e=>(e.replace("being","will be"),e.remove("(is|are|am)"),e),"passive-future":Jc,"present-conditional":e=>e.replace("would","will"),"past-conditional":e=>e.replace("would","will"),"auxiliary-future":Jc,"auxiliary-past":e=>e.has("used")&&e.has("to")?(e.replace("used","will"),e.remove("to")):(e.replace("did","will"),e),"auxiliary-present":e=>e.replace("(do|does)","will"),"modal-infinitive":Jc,"modal-past":Jc,"gerund-phrase":(e,t)=>(t.root=t.root.not("#Gerund$"),dh(e,t),e.remove("(had|have)")),"want-infinitive":e=>(e.replace("(want|wants|wanted)","will want"),e)},ph={tags:!0},fh={tags:!0},bh=function(e,t){const n=Uc(e);return e.prepend(n+" not"),e},vh=function(e){let t=e.match("be");return t.found?(t.prepend("not"),e):(t=e.match("(is|was|am|are|will|were)"),t.found?(t.append("not"),e):e)},yh=e=>e.has("(is|was|am|are|will|were|be)"),wh={"simple-present":(e,t)=>!0===yh(e)?vh(e):(e=Qc(e,t),e=bh(e)),"simple-past":(e,t)=>!0===yh(e)?vh(e):((e=Qc(e,t)).prepend("did not"),e),imperative:e=>(e.prepend("do not"),e),infinitive:(e,t)=>!0===yh(e)?vh(e):bh(e),"passive-past":e=>{if(e.has("got"))return e.replace("got","get",fh),e.prepend("did not"),e;const t=e.match("(was|were|had|have)");return t.found&&t.append("not"),e},"auxiliary-past":e=>{if(e.has("used"))return e.prepend("did not"),e;const t=e.match("(did|does|do)");return t.found&&t.append("not"),e},"want-infinitive":(e,t)=>e=(e=bh(e)).replace("wants","want",fh)};var kh={api:function(e){class Verbs extends e{constructor(e,t,n){super(e,t,n),this.viewType="Verbs"}parse(e){return this.getNth(e).map(Tc)}json(e,t){const n=this.getNth(t).map((t=>{const n=t.toView().json(e)[0]||{};return n.verb=function(e){const t=Tc(e);e=e.clone().toView();const n=$c(e,t);return{root:t.root.text(),preAdverbs:_c(t.adverbs.pre),postAdverbs:_c(t.adverbs.post),auxiliary:Xc(t.auxiliary),negative:t.negative.found,prefix:Xc(t.prefix),infinitive:Yc(t.root),grammar:n}}(t),n}),[]);return n}subjects(e){return this.getNth(e).map((e=>(Tc(e),Kc(e).subject)))}adverbs(e){return this.getNth(e).map((e=>e.match("#Adverb")))}isSingular(e){return this.getNth(e).filter((e=>!0!==Kc(e).plural))}isPlural(e){return this.getNth(e).filter((e=>!0===Kc(e).plural))}isImperative(e){return this.getNth(e).filter((e=>e.has("#Imperative")))}toInfinitive(e){return this.getNth(e).map((e=>{const t=Tc(e);return function(e,t){const{toInfinitive:n}=e.methods.two.transform.verb,{root:r,auxiliary:o}=t,a=o.terms().harden();let i=r.text("normal");if(i=n(i,e.model,Rc(r)),i&&e.replace(r,i,eh).tag("Verb").firstTerm().tag("Infinitive"),a.found&&e.remove(a),t.negative.found){e.has("not")||e.prepend("not");const t=Uc(e);e.prepend(t)}return e.fullSentence().compute(["freeze","lexicon","preTagger","postTagger","unfreeze","chunks"]),e}(e,t,$c(e,t).form)}))}toPresentTense(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return ch.hasOwnProperty(n)?((e=ch[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):e}(e,t,n.form)}))}toPastTense(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return rh.hasOwnProperty(n)?((e=rh[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):e}(e,t,n.form)}))}toFutureTense(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return e.has("will")||e.has("going to")?e:mh.hasOwnProperty(n)?((e=mh[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):e}(e,t,n.form)}))}toGerund(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t){const{toInfinitive:n,conjugate:r}=e.methods.two.transform.verb,{root:o,auxiliary:a}=t;if(e.has("#Gerund"))return e;let i=o.text("normal");i=n(i,e.model,Rc(o));const s=r(i,e.model).Gerund;if(s){const t=qc(e);e.replace(o,s,ph),e.remove(a),e.prepend(t)}return e.replace("not is","is not"),e.replace("not are","are not"),e.fullSentence().compute(["tagger","chunks"]),e}(e,t,n.form)}))}toPastParticiple(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return ih.hasOwnProperty(n)?((e=ih[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):((e=ah(e,t)).fullSentence().compute(["tagger","chunks"]),e)}(e,t,n.form)}))}conjugate(e){const{conjugate:t,toInfinitive:n}=this.world.methods.two.transform.verb;return this.getNth(e).map((e=>{const r=Tc(e),o=$c(e,r);"imperative"===o.form&&(o.form="simple-present");let a=r.root.text("normal");if(!r.root.has("#Infinitive")){const t=Rc(r.root);a=n(a,e.model,t)||a}return t(a,e.model)}),[])}isNegative(){return this.if("#Negative")}isPositive(){return this.ifNo("#Negative")}toPositive(){const e=this.match("do not #Verb");return e.found&&e.remove("do not"),this.remove("#Negative")}toNegative(e){return this.getNth(e).map((e=>{const t=Tc(e);return function(e,t,n){if(e.has("#Negative"))return e;if(wh.hasOwnProperty(n))return wh[n](e,t);let r=e.matchOne("be");return r.found?(r.prepend("not"),e):!0===yh(e)?vh(e):(r=e.matchOne("(will|had|have|has|did|does|do|#Modal)"),r.found?(r.append("not"),e):e)}(e,t,$c(e,t).form)}))}update(e){const t=new Verbs(this.document,e);return t._cache=this._cache,t}}Verbs.prototype.toPast=Verbs.prototype.toPastTense,Verbs.prototype.toPresent=Verbs.prototype.toPresentTense,Verbs.prototype.toFuture=Verbs.prototype.toFutureTense,e.prototype.verbs=function(e){let t=function(e){let t=e.match("");return t=t.not("#Conjunction"),t=t.not("#Preposition"),t=t.splitAfter("@hasComma"),t=t.splitAfter("[(do|did|am|was|is|will)] (is|was)",0),t=t.splitBefore("(#Verb && !#Copula) [being] #Verb",0),t=t.splitBefore("#Verb [to be] #Verb",0),t=t.splitAfter("[help] #PresentTense",0),t=t.splitBefore("(#PresentTense|#PastTense) [#Copula]$",0),t=t.splitBefore("(#PresentTense|#PastTense) [will be]$",0),t=t.splitBefore("(#PresentTense|#PastTense) [(had|has)]",0),t=t.not("#Reflexive$"),t=t.not("#Adjective"),t=t.splitAfter("[#PastTense] #PastTense",0),t=t.splitAfter("[#PastTense] #Auxiliary+ #PastTense",0),t=t.splitAfter("#Copula [#Gerund] #PastTense",0),t=t.if("#Verb"),t.has("(#Verb && !#Auxiliary) #Adverb+? #Copula")&&(t=t.splitBefore("#Copula")),t}(this);return t=t.getNth(e),new Verbs(this.document,t.pointer)}}};const Ph=function(e,t){const n=t.match(e);if(n.found){const e=n.pronouns().refersTo();if(e.found)return e}return t.none()},Ah=function(e){if(!e.found)return e;const[t]=e.fullPointer[0];return t&&t>0?e.update([[t-1]]):e.none()},Ch=function(e,t){let n=e.people();return n=function(e,t){return"m"===t?e.filter((e=>!e.presumedFemale().found)):"f"===t?e.filter((e=>!e.presumedMale().found)):e}(n,t),n.found?n.last():(n=e.nouns("#Actor"),n.found?n.last():"f"===t?Ph("(she|her|hers)",e):"m"===t?Ph("(he|him|his)",e):e.none())},Nh=function(e){const t=e.nouns();let n=t.isPlural().notIf("#Pronoun");if(n.found)return n.last();const r=Ph("(they|their|theirs)",e);return r.found?r:(n=t.match("(somebody|nobody|everybody|anybody|someone|noone|everyone|anyone)"),n.found?n.last():e.none())},jh=function(e,t){let n=e.before(),r=t(n);return r.found?r:(n=Ah(e),r=t(n),r.found?r:(n=Ah(n),r=t(n),r.found?r:e.none()))};var xh={compute:{coreference:function(e){e.pronouns().if("(he|him|his|she|her|hers|they|their|theirs|it|its)").forEach((e=>{let t=null;e.has("(he|him|his)")?t=jh(e,(e=>Ch(e,"m"))):e.has("(she|her|hers)")?t=jh(e,(e=>Ch(e,"f"))):e.has("(they|their|theirs)")&&(t=jh(e,Nh)),t&&t.found&&function(e,t){t&&t.found&&(e.docs[0][0].reference=t.ptrs[0])}(e,t)}))}},api:function(e){class Pronouns extends e{constructor(e,t,n){super(e,t,n),this.viewType="Pronouns"}hasReference(){return this.compute("coreference"),this.filter((e=>e.docs[0][0].reference))}refersTo(){return this.compute("coreference"),this.map((e=>{if(!e.found)return e.none();const t=e.docs[0][0];return t.reference?e.update([t.reference]):e.none()}))}update(e){const t=new Pronouns(this.document,e);return t._cache=this._cache,t}}e.prototype.pronouns=function(e){let t=this.match("#Pronoun");return t=t.getNth(e),new Pronouns(t.document,t.pointer)}}};return h.plugin(ql),h.plugin(Ul),h.plugin(eu),h.plugin(xh),h.plugin(fu),h.plugin(Au),h.plugin(Ou),h.plugin(hc),h.plugin(mc),h.plugin(bc),h.plugin(Cc),h.plugin(kh),h})); diff --git a/builds/one/compromise-one.cjs b/builds/one/compromise-one.cjs new file mode 100644 index 0000000..e08b562 --- /dev/null +++ b/builds/one/compromise-one.cjs @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).nlp=e()}(this,(function(){"use strict";var t={methods:{one:{},two:{},three:{},four:{}},model:{one:{},two:{},three:{}},compute:{},hooks:[]};const e={compute:function(t){const{world:e}=this,n=e.compute;return"string"==typeof t&&n.hasOwnProperty(t)?n[t](this):(t=>"[object Array]"===Object.prototype.toString.call(t))(t)?t.forEach((o=>{e.compute.hasOwnProperty(o)?n[o](this):console.warn("no compute:",t)})):"function"==typeof t?t(this):console.warn("no compute:",t),this}};var n={forEach:function(t){return this.fullPointer.forEach(((e,n)=>{const o=this.update([e]);t(o,n)})),this},map:function(t,e){const n=this.fullPointer.map(((e,n)=>{const o=this.update([e]),r=t(o,n);return void 0===r?this.none():r}));if(0===n.length)return e||this.update([]);if(void 0!==n[0]){if("string"==typeof n[0])return n;if("object"==typeof n[0]&&(null===n[0]||!n[0].isView))return n}let o=[];return n.forEach((t=>{o=o.concat(t.fullPointer)})),this.toView(o)},filter:function(t){let e=this.fullPointer;e=e.filter(((e,n)=>{const o=this.update([e]);return t(o,n)}));return this.update(e)},find:function(t){const e=this.fullPointer.find(((e,n)=>{const o=this.update([e]);return t(o,n)}));return this.update([e])},some:function(t){return this.fullPointer.some(((e,n)=>{const o=this.update([e]);return t(o,n)}))},random:function(t=1){let e=this.fullPointer,n=Math.floor(Math.random()*e.length);return n+t>this.length&&(n=this.length-t,n=n<0?0:n),e=e.slice(n,n+t),this.update(e)}};const o={termList:function(){return this.methods.one.termList(this.docs)},terms:function(t){const e=this.match(".");return"number"==typeof t?e.eq(t):e},groups:function(t){if(t||0===t)return this.update(this._groups[t]||[]);const e={};return Object.keys(this._groups).forEach((t=>{e[t]=this.update(this._groups[t])})),e},eq:function(t){let e=this.pointer;return e||(e=this.docs.map(((t,e)=>[e]))),e[t]?this.update([e[t]]):this.none()},first:function(){return this.eq(0)},last:function(){const t=this.fullPointer.length-1;return this.eq(t)},firstTerms:function(){return this.match("^.")},lastTerms:function(){return this.match(".$")},slice:function(t,e){let n=this.pointer||this.docs.map(((t,e)=>[e]));return n=n.slice(t,e),this.update(n)},all:function(){return this.update().toView()},fullSentences:function(){const t=this.fullPointer.map((t=>[t[0]]));return this.update(t).toView()},none:function(){return this.update([])},isDoc:function(t){if(!t||!t.isView)return!1;const e=this.fullPointer,n=t.fullPointer;return!e.length!==n.length&&e.every(((t,e)=>!!n[e]&&(t[0]===n[e][0]&&t[1]===n[e][1]&&t[2]===n[e][2])))},wordCount:function(){return this.docs.reduce(((t,e)=>(t+=e.filter((t=>""!==t.text)).length,t)),0)},isFull:function(){const t=this.pointer;if(!t)return!0;if(0===t.length||0!==t[0][0])return!1;let e=0,n=0;return this.document.forEach((t=>e+=t.length)),this.docs.forEach((t=>n+=t.length)),e===n},getNth:function(t){return"number"==typeof t?this.eq(t):"string"==typeof t?this.if(t):this}};o.group=o.groups,o.fullSentence=o.fullSentences,o.sentence=o.fullSentences,o.lastTerm=o.lastTerms,o.firstTerm=o.firstTerms;const r=Object.assign({},o,e,n);r.get=r.eq;class View{constructor(e,n,o={}){[["document",e],["world",t],["_groups",o],["_cache",null],["viewType","View"]].forEach((t=>{Object.defineProperty(this,t[0],{value:t[1],writable:!0})})),this.ptrs=n}get docs(){let e=this.document;return this.ptrs&&(e=t.methods.one.getDoc(this.ptrs,this.document)),e}get pointer(){return this.ptrs}get methods(){return this.world.methods}get model(){return this.world.model}get hooks(){return this.world.hooks}get isView(){return!0}get found(){return this.docs.length>0}get length(){return this.docs.length}get fullPointer(){const{docs:t,ptrs:e,document:n}=this,o=e||t.map(((t,e)=>[e]));return o.map((t=>{let[e,o,r,s,i]=t;return o=o||0,r=r||(n[e]||[]).length,n[e]&&n[e][o]&&(s=s||n[e][o].id,n[e][r-1]&&(i=i||n[e][r-1].id)),[e,o,r,s,i]}))}update(t){const e=new View(this.document,t);if(this._cache&&t&&t.length>0){const n=[];t.forEach(((t,e)=>{const[o,r,s]=t;(1===t.length||0===r&&this.document[o].length===s)&&(n[e]=this._cache[o])})),n.length>0&&(e._cache=n)}return e.world=this.world,e}toView(t){return new View(this.document,t||this.pointer)}fromText(t){const{methods:e}=this,n=e.one.tokenize.fromString(t,this.world),o=new View(n);return o.world=this.world,o.compute(["normal","freeze","lexicon"]),this.world.compute.preTagger&&o.compute("preTagger"),o.compute("unfreeze"),o}clone(){let t=this.document.slice(0);t=t.map((t=>t.map((t=>((t=Object.assign({},t)).tags=new Set(t.tags),t)))));const e=this.update(this.pointer);return e.document=t,e._cache=this._cache,e}}Object.assign(View.prototype,r);const s=function(t){return t&&"object"==typeof t&&!Array.isArray(t)};function i(t,e){if(s(e))for(const n in e)s(e[n])?(t[n]||Object.assign(t,{[n]:{}}),i(t[n],e[n])):Object.assign(t,{[n]:e[n]});return t}const c=function(t,e,n,o){if(r=t,"[object Array]"===Object.prototype.toString.call(r))return void t.forEach((t=>c(t,e,n,o)));var r;const{methods:s,model:u,compute:a,hooks:l}=e;t.methods&&function(t,e){for(const n in e)t[n]=t[n]||{},Object.assign(t[n],e[n])}(s,t.methods),t.model&&i(u,t.model),t.irregulars&&function(t,e){const n=t.two.models||{};Object.keys(e).forEach((t=>{e[t].pastTense&&(n.toPast&&(n.toPast.ex[t]=e[t].pastTense),n.fromPast&&(n.fromPast.ex[e[t].pastTense]=t)),e[t].presentTense&&(n.toPresent&&(n.toPresent.ex[t]=e[t].presentTense),n.fromPresent&&(n.fromPresent.ex[e[t].presentTense]=t)),e[t].gerund&&(n.toGerund&&(n.toGerund.ex[t]=e[t].gerund),n.fromGerund&&(n.fromGerund.ex[e[t].gerund]=t)),e[t].comparative&&(n.toComparative&&(n.toComparative.ex[t]=e[t].comparative),n.fromComparative&&(n.fromComparative.ex[e[t].comparative]=t)),e[t].superlative&&(n.toSuperlative&&(n.toSuperlative.ex[t]=e[t].superlative),n.fromSuperlative&&(n.fromSuperlative.ex[e[t].superlative]=t))}))}(u,t.irregulars),t.compute&&Object.assign(a,t.compute),l&&(e.hooks=l.concat(t.hooks||[])),t.api&&t.api(n),t.lib&&Object.keys(t.lib).forEach((e=>o[e]=t.lib[e])),t.tags&&o.addTags(t.tags),t.words&&o.addWords(t.words),t.frozen&&o.addWords(t.frozen,!0),t.mutate&&t.mutate(e,o)},u=function(t){return"[object Array]"===Object.prototype.toString.call(t)},a=function(t,e,n){const{methods:o}=n,r=new e([]);if(r.world=n,"number"==typeof t&&(t=String(t)),!t)return r;if("string"==typeof t){return new e(o.one.tokenize.fromString(t,n))}if(s=t,"[object Object]"===Object.prototype.toString.call(s)&&t.isView)return new e(t.document,t.ptrs);var s;if(u(t)){if(u(t[0])){const n=t.map((t=>t.map((t=>({text:t,normal:t,pre:"",post:" ",tags:new Set})))));return new e(n)}const n=t.map((t=>t.terms.map((t=>(u(t.tags)&&(t.tags=new Set(t.tags)),t)))));return new e(n)}return r},l=Object.assign({},t),h=function(t,e){e&&h.addWords(e);const n=a(t,View,l);return t&&n.compute(l.hooks),n};Object.defineProperty(h,"_world",{value:l,writable:!0}),h.tokenize=function(t,e){const{compute:n}=this._world;e&&h.addWords(e);const o=a(t,View,l);return n.contractions&&o.compute(["alias","normal","machine","contractions"]),o},h.plugin=function(t){return c(t,this._world,View,this),this},h.extend=h.plugin,h.world=function(){return this._world},h.model=function(){return this._world.model},h.methods=function(){return this._world.methods},h.hooks=function(){return this._world.hooks},h.verbose=function(t){const e="undefined"!=typeof process&&process.env?process.env:self.env||{};return e.DEBUG_TAGS="tagger"===t||!0===t||"",e.DEBUG_MATCH="match"===t||!0===t||"",e.DEBUG_CHUNKS="chunker"===t||!0===t||"",this},h.version="14.15.1";var f={one:{cacheDoc:function(t){const e=t.map((t=>{const e=new Set;return t.forEach((t=>{""!==t.normal&&e.add(t.normal),t.switch&&e.add(`%${t.switch}%`),t.implicit&&e.add(t.implicit),t.machine&&e.add(t.machine),t.root&&e.add(t.root),t.alias&&t.alias.forEach((t=>e.add(t)));const n=Array.from(t.tags);for(let t=0;t/^\p{Lu}[\p{Ll}'’]/u.test(t)||/^\p{Lu}$/u.test(t),w=(t,e,n)=>{if(n.forEach((t=>t.dirty=!0)),t){const o=[e,0].concat(n);Array.prototype.splice.apply(t,o)}return t},y=function(t){const e=t[t.length-1];!e||/ $/.test(e.post)||/[-–—]/.test(e.post)||(e.post+=" ")},b=(t,e,n)=>{const o=/[-.?!,;:)–—'"]/g,r=t[e-1];if(!r)return;const s=r.post;if(o.test(s)){const t=s.match(o).join(""),e=n[n.length-1];e.post=t+e.post,r.post=r.post.replace(o,"")}},v=function(t,e,n,o){const[r,s,i]=e;0===s||i===o[r].length?y(n):(y(n),y([t[e[1]]])),function(t,e,n){const o=t[e];if(0!==e||!m(o.text))return;n[0].text=n[0].text.replace(/^\p{Ll}/u,(t=>t.toUpperCase()));const r=t[e];r.tags.has("ProperNoun")||r.tags.has("Acronym")||m(r.text)&&r.text.length>1&&(r.text=(s=r.text,s.replace(/^\p{Lu}/u,(t=>t.toLowerCase()))));var s}(t,s,n),w(t,s,n)};let x=0;const j=t=>(t=t.length<3?"0"+t:t).length<3?"0"+t:t,E=function(t){let[e,n]=t.index||[0,0];x+=1,x=x>46655?0:x,e=e>46655?0:e,n=n>1294?0:n;let o=j(x.toString(36));o+=j(e.toString(36));let r=n.toString(36);r=r.length<2?"0"+r:r,o+=r;return o+=parseInt(36*Math.random(),10).toString(36),t.normal+"|"+o.toUpperCase()},O=function(t){if(t.has("@hasContraction")&&"function"==typeof t.contractions){t.grow("@hasContraction").contractions().expand()}},k=t=>"[object Array]"===Object.prototype.toString.call(t),P=function(t,e,n){const{document:o,world:r}=e;e.uncache();const s=e.fullPointer,i=e.fullPointer;e.forEach(((c,u)=>{const a=c.fullPointer[0],[l]=a,h=o[l];let f=function(t,e){const{methods:n}=e;return"string"==typeof t?n.one.tokenize.fromString(t,e)[0]:"object"==typeof t&&t.isView?t.clone().docs[0]||[]:k(t)?k(t[0])?t[0]:t:[]}(t,r);0!==f.length&&(f=function(t){return t.map((t=>(t.id=E(t),t)))}(f),n?(O(e.update([a]).firstTerm()),v(h,a,f,o)):(O(e.update([a]).lastTerm()),function(t,e,n,o){const[r,,s]=e,i=(o[r]||[]).length;st.replace(/^\p{Ll}/u,(t=>t.toUpperCase())),$=t=>t.replace(/^\p{Lu}/u,(t=>t.toLowerCase()));z.replaceWith=function(t,e={}){let n=this.fullPointer;const o=this;if(this.uncache(),"function"==typeof t)return function(t,e,n){return t.forEach((t=>{const o=e(t);t.replaceWith(o,n)})),t}(o,t,e);const r=o.docs[0];if(!r)return o;const s=e.possessives&&r[r.length-1].tags.has("Possessive"),i=e.case&&(c=r[0].text,/^\p{Lu}[\p{Ll}'’]/u.test(c)||/^\p{Lu}$/u.test(c));var c;t=function(t,e){if("string"!=typeof t)return t;const n=e.groups();return t=t.replace(S,(t=>{const e=t.replace(/\$/,"");return n.hasOwnProperty(e)?n[e].text():t})),t}(t,o);const u=this.update(n);n=n.map((t=>t.slice(0,3)));const a=(u.docs[0]||[]).map((t=>Array.from(t.tags))),l=u.docs[0][0].pre,h=u.docs[0][u.docs[0].length-1].post;if("string"==typeof t&&(t=this.fromText(t).compute("id")),o.insertAfter(t),u.has("@hasContraction")&&o.contractions){o.grow("@hasContraction+").contractions().expand()}if(o.delete(u),s){const t=o.docs[0],e=t[t.length-1];e.tags.has("Possessive")||(e.text+="'s",e.normal+="'s",e.tags.add("Possessive"))}if(l&&o.docs[0]&&(o.docs[0][0].pre=l),h&&o.docs[0]){const t=o.docs[0][o.docs[0].length-1];t.post.trim()||(t.post=h)}const f=o.toView(n).compute(["index","freeze","lexicon"]);if(f.world.compute.preTagger&&f.compute("preTagger"),f.compute("unfreeze"),e.tags&&f.terms().forEach(((t,e)=>{t.tagSafe(a[e])})),!f.docs[0]||!f.docs[0][0])return f;if(e.case){const t=i?A:$;f.docs[0][0].text=t(f.docs[0][0].text)}return f},z.replace=function(t,e,n){if(t&&!e)return this.replaceWith(t,n);const o=this.match(t);return o.found?(this.soften(),o.replaceWith(e,n)):this};const T={remove:function(t){const{indexN:e}=this.methods.one.pointer;this.uncache();let n=this.all(),o=this;t&&(n=this,o=this.match(t));const r=!n.ptrs;if(o.has("@hasContraction")&&o.contractions){o.grow("@hasContraction").contractions().expand()}let s=n.fullPointer;const i=o.fullPointer.reverse(),c=function(t,e){e.forEach((e=>{const[n,o,r]=e,s=r-o;t[n]&&(r===t[n].length&&r>1&&function(t,e){const n=t.length-1,o=t[n],r=t[n-e];r&&o&&(r.post+=o.post,r.post=r.post.replace(/ +([.?!,;:])/,"$1"),r.post=r.post.replace(/[,;:]+([.?!])/,"$1"))}(t[n],s),t[n].splice(o,s))}));for(let e=t.length-1;e>=0;e-=1)if(0===t[e].length&&(t.splice(e,1),e===t.length&&t[e-1])){const n=t[e-1],o=n[n.length-1];o&&(o.post=o.post.trimEnd())}return t}(this.document,i);if(s=function(t,e){return t=t.map((t=>{const[n]=t;return e[n]?(e[n].forEach((e=>{const n=e[2]-e[1];t[1]<=e[1]&&t[2]>=e[2]&&(t[2]-=n)})),t):t})),t.forEach(((e,n)=>{if(0===e[1]&&0==e[2])for(let e=n+1;et[2]-t[1]>0))).map((t=>(t[3]=null,t[4]=null,t)))}(s,e(i)),n.ptrs=s,n.document=c,n.compute("index"),r&&(n.ptrs=void 0),!t)return this.ptrs=[],n.none();return n.toView(s)}};T.delete=T.remove;const C={pre:function(t,e){return void 0===t&&this.found?this.docs[0][0].pre:(this.docs.forEach((n=>{const o=n[0];!0===e?o.pre+=t:o.pre=t})),this)},post:function(t,e){if(void 0===t){const t=this.docs[this.docs.length-1];return t[t.length-1].post}return this.docs.forEach((n=>{const o=n[n.length-1];!0===e?o.post+=t:o.post=t})),this},trim:function(){if(!this.found)return this;const t=this.docs,e=t[0][0];e.pre=e.pre.trimStart();const n=t[t.length-1],o=n[n.length-1];return o.post=o.post.trimEnd(),this},hyphenate:function(){return this.docs.forEach((t=>{t.forEach(((e,n)=>{0!==n&&(e.pre=""),t[n+1]&&(e.post="-")}))})),this},dehyphenate:function(){const t=/[-–—]/;return this.docs.forEach((e=>{e.forEach((e=>{t.test(e.post)&&(e.post=" ")}))})),this},toQuotations:function(t,e){return t=t||'"',e=e||'"',this.docs.forEach((n=>{n[0].pre=t+n[0].pre;const o=n[n.length-1];o.post=e+o.post})),this},toParentheses:function(t,e){return t=t||"(",e=e||")",this.docs.forEach((n=>{n[0].pre=t+n[0].pre;const o=n[n.length-1];o.post=e+o.post})),this}};C.deHyphenate=C.dehyphenate,C.toQuotation=C.toQuotations;var L={alpha:(t,e)=>t.normale.normal?1:0,length:(t,e)=>{const n=t.normal.trim().length,o=e.normal.trim().length;return no?-1:0},wordCount:(t,e)=>t.wordse.words?-1:0,sequential:(t,e)=>t[0]e[0]?-1:t[1]>e[1]?1:-1,byFreq:function(t){const e={};return t.forEach((t=>{e[t.normal]=e[t.normal]||0,e[t.normal]+=1})),t.sort(((t,n)=>{const o=e[t.normal],r=e[n.normal];return or?-1:0})),t}};const N=new Set(["index","sequence","seq","sequential","chron","chronological"]),V=new Set(["freq","frequency","topk","repeats"]),F=new Set(["alpha","alphabetical"]);var q={unique:function(){const t=new Set;return this.filter((e=>{const n=e.text("machine");return!t.has(n)&&(t.add(n),!0)}))},reverse:function(){let t=this.pointer||this.docs.map(((t,e)=>[e]));return t=[].concat(t),t=t.reverse(),this._cache&&(this._cache=this._cache.reverse()),this.update(t)},sort:function(t){const{docs:e,pointer:n}=this;if(this.uncache(),"function"==typeof t)return function(t,e){let n=t.fullPointer;return n=n.sort(((n,o)=>(n=t.update([n]),o=t.update([o]),e(n,o)))),t.ptrs=n,t}(this,t);t=t||"alpha";const o=n||e.map(((t,e)=>[e]));let r=e.map(((t,e)=>({index:e,words:t.length,normal:t.map((t=>t.machine||t.normal||"")).join(" "),pointer:o[e]})));return N.has(t)&&(t="sequential"),F.has(t)&&(t="alpha"),V.has(t)?(r=L.byFreq(r),this.update(r.map((t=>t.pointer)))):"function"==typeof L[t]?(r=r.sort(L[t]),this.update(r.map((t=>t.pointer)))):this}};const G=function(t,e){if(t.length>0){const e=t[t.length-1],n=e[e.length-1];!1===/ /.test(n.post)&&(n.post+=" ")}return t=t.concat(e)};var B={concat:function(t){if("string"==typeof t){const e=this.fromText(t);if(this.found&&this.ptrs){const t=this.fullPointer,n=t[t.length-1][0];this.document.splice(n,0,...e.document)}else this.document=this.document.concat(e.document);return this.all().compute("index")}if("object"==typeof t&&t.isView)return function(t,e){if(t.document===e.document){const n=t.fullPointer.concat(e.fullPointer);return t.toView(n).compute("index")}return e.fullPointer.forEach((e=>{e[0]+=t.document.length})),t.document=G(t.document,e.docs),t.all()}(this,t);if(e=t,"[object Array]"===Object.prototype.toString.call(e)){const e=G(this.document,t);return this.document=e,this.all()}var e;return this}};var D={harden:function(){return this.ptrs=this.fullPointer,this},soften:function(){let t=this.ptrs;return!t||t.length<1||(t=t.map((t=>t.slice(0,3))),this.ptrs=t),this}};const M=Object.assign({},{toLowerCase:function(){return this.termList().forEach((t=>{t.text=t.text.toLowerCase()})),this},toUpperCase:function(){return this.termList().forEach((t=>{t.text=t.text.toUpperCase()})),this},toTitleCase:function(){return this.termList().forEach((t=>{t.text=t.text.replace(/^ *[a-z\u00C0-\u00FF]/,(t=>t.toUpperCase()))})),this},toCamelCase:function(){return this.docs.forEach((t=>{t.forEach(((e,n)=>{0!==n&&(e.text=e.text.replace(/^ *[a-z\u00C0-\u00FF]/,(t=>t.toUpperCase()))),n!==t.length-1&&(e.post="")}))})),this}},_,z,T,C,q,B,D),U={id:function(t){const e=t.docs;for(let t=0;t(t.implicit=t.text,t.machine=t.text,t.pre="",t.post="",t.text="",t.normal="",t.index=[o,r+e],t))),n[0]&&(n[0].pre=t[o][r].pre,n[n.length-1].post=t[o][r].post,n[0].text=t[o][r].text,n[0].normal=t[o][r].normal),t[o].splice(r,1,...n))},H=/'/,Z=new Set(["what","how","when","where","why"]),K=new Set(["be","go","start","think","need"]),J=new Set(["been","gone"]),X=/'/,Y=/(e|é|aison|sion|tion)$/,tt=/(age|isme|acle|ege|oire)$/;var et=(t,e)=>["je",t[e].normal.split(X)[1]],nt=(t,e)=>{const n=t[e].normal.split(X)[1];return n&&n.endsWith("e")?["la",n]:["le",n]},ot=(t,e)=>{const n=t[e].normal.split(X)[1];return n&&Y.test(n)&&!tt.test(n)?["du",n]:n&&n.endsWith("s")?["des",n]:["de",n]};const rt=/^([0-9.]{1,4}[a-z]{0,2}) ?[-–—] ?([0-9]{1,4}[a-z]{0,2})$/i,st=/^([0-9]{1,2}(:[0-9][0-9])?(am|pm)?) ?[-–—] ?([0-9]{1,2}(:[0-9][0-9])?(am|pm)?)$/i,it=/^[0-9]{3}-[0-9]{4}$/,ct=function(t,e){const n=t[e];let o=n.text.match(rt);return null!==o?!0===n.tags.has("PhoneNumber")||it.test(n.text)?null:[o[1],"to",o[2]]:(o=n.text.match(st),null!==o?[o[1],"to",o[4]]:null)},ut=/^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/,at=function(t,e,n){const o=n.model.one.numberSuffixes||{},r=t[e].text.match(ut);if(null!==r){const t=r[2].toLowerCase().trim();return o.hasOwnProperty(t)?null:[r[1],t]}return null},lt=/'/,ht=/^[0-9][^-–—]*[-–—].*?[0-9]/,ft=function(t,e,n,o){const r=e.update();r.document=[t];let s=n+o;n>0&&(n-=1),t[s]&&(s+=1),r.ptrs=[[0,n,s]]},pt={t:(t,e)=>function(t,e){return"ain't"===t[e].normal||"aint"===t[e].normal?null:[t[e].normal.replace(/n't/,""),"not"]}(t,e),d:(t,e)=>function(t,e){const n=t[e].normal.split(H)[0];if(Z.has(n))return[n,"did"];if(t[e+1]){if(J.has(t[e+1].normal))return[n,"had"];if(K.has(t[e+1].normal))return[n,"would"]}return null}(t,e)},dt={j:(t,e)=>et(t,e),l:(t,e)=>nt(t,e),d:(t,e)=>ot(t,e)},mt=function(t,e,n,o){for(let r=0;r2)return s.out.concat(o)}return null},gt=function(t,e){const n=e.fromText(t.join(" "));return n.compute(["id","alias"]),n.docs[0]},wt=function(t,e){for(let n=e+1;n<5&&t[n];n+=1)if("been"===t[n].normal)return["there","has"];return["there","is"]};var yt={contractions:t=>{const{world:e,document:n}=t,{model:o,methods:r}=e,s=o.one.contractions||[];n.forEach(((o,i)=>{for(let c=o.length-1;c>=0;c-=1){let u=null,a=null;if(!0===lt.test(o[c].normal)){const t=o[c].normal.split(lt);u=t[0],a=t[1]}let l=mt(s,o[c],u,a);!l&&pt.hasOwnProperty(a)&&(l=pt[a](o,c,e)),!l&&dt.hasOwnProperty(u)&&(l=dt[u](o,c)),"there"===u&&"s"===a&&(l=wt(o,c)),l?(l=gt(l,t),Q(n,[i,c],l),ft(n[i],t,c,l.length)):ht.test(o[c].normal)?(l=ct(o,c),l&&(l=gt(l,t),Q(n,[i,c],l),r.one.setTag(l,"NumberRange",e),l[2]&&l[2].tags.has("Time")&&r.one.setTag([l[0]],"Time",e,null,"time-range"),ft(n[i],t,c,l.length))):(l=at(o,c,e),l&&(l=gt(l,t),Q(n,[i,c],l),r.one.setTag([l[1]],"Unit",e,null,"contraction-unit")))}}))}};const bt={model:R,compute:yt,hooks:["contractions"]},vt=function(t){const e=t.world,{model:n,methods:o}=t.world,r=o.one.setTag,{frozenLex:s}=n.one,i=n.one._multiCache||{};t.docs.forEach((t=>{for(let n=0;nn;o-=1){const i=t.slice(n,o+1),c=i.map((t=>t.machine||t.normal)).join(" ");!0!==s.hasOwnProperty(c)||(r(i,s[c],e,!1,"1-frozen-multi-lexicon"),i.forEach((t=>t.frozen=!0)))}}void 0!==s[c]&&s.hasOwnProperty(c)&&(r([o],s[c],e,!1,"1-freeze-lexicon"),o.frozen=!0)}}))};const xt=t=>""+t+"",jt=t=>""+t+"",Et=function(t){t.docs.forEach((t=>{console.log(xt("\n ┌─────────")),t.forEach((t=>{let e=` ${jt("│")} `;const n=t.implicit||t.text||"-";!0===t.frozen?e+=`${xt(n)} ❄️`:e+=jt(n),console.log(e)}))}))};var Ot={compute:{frozen:vt,freeze:vt,unfreeze:function(t){return t.docs.forEach((t=>{t.forEach((t=>{delete t.frozen}))})),t}},mutate:t=>{const e=t.methods.one;e.termMethods.isFrozen=t=>!0===t.frozen,e.debug.freeze=Et,e.debug.frozen=Et},api:function(t){t.prototype.freeze=function(){return this.docs.forEach((t=>{t.forEach((t=>{t.frozen=!0}))})),this},t.prototype.unfreeze=function(){this.compute("unfreeze")},t.prototype.isFrozen=function(){return this.match("@isFrozen+")}},hooks:["freeze"]};const kt=function(t,e,n){const{model:o,methods:r}=n,s=r.one.setTag,i=o.one._multiCache||{},{lexicon:c}=o.one||{},u=t[e],a=u.machine||u.normal;if(void 0!==i[a]&&t[e+1]){for(let o=e+i[a]-1;o>e;o-=1){const r=t.slice(e,o+1);if(r.length<=1)return!1;const i=r.map((t=>t.machine||t.normal)).join(" ");if(!0===c.hasOwnProperty(i)){const t=c[i];return s(r,t,n,!1,"1-multi-lexicon"),!t||2!==t.length||"PhrasalVerb"!==t[0]&&"PhrasalVerb"!==t[1]||s([r[1]],"Particle",n,!1,"1-phrasal-particle"),!0}}return!1}return null},Pt=/^(under|over|mis|re|un|dis|semi|pre|post)-?/,_t=new Set(["Verb","Infinitive","PastTense","Gerund","PresentTense","Adjective","Participle"]),St=function(t,e,n){const{model:o,methods:r}=n,s=r.one.setTag,{lexicon:i}=o.one,c=t[e],u=c.machine||c.normal;if(void 0!==i[u]&&i.hasOwnProperty(u))return s([c],i[u],n,!1,"1-lexicon"),!0;if(c.alias){const t=c.alias.find((t=>i.hasOwnProperty(t)));if(t)return s([c],i[t],n,!1,"1-lexicon-alias"),!0}if(!0===Pt.test(u)){const t=u.replace(Pt,"");if(i.hasOwnProperty(t)&&t.length>3&&_t.has(i[t]))return s([c],i[t],n,!1,"1-lexicon-prefix"),!0}return null};var zt={lexicon:function(t){const e=t.world;t.docs.forEach((t=>{for(let n=0;n{const r=t[o],s=(o=(o=o.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);s.length>1&&(void 0===n[s[0]]||s.length>n[s[0]])&&(n[s[0]]=s.length),e[o]=e[o]||r})),delete e[""],delete e.null,delete e[" "],{lex:e,_multi:n}}}};var $t={addWords:function(t,e=!1){const n=this.world(),{methods:o,model:r}=n;if(!t)return;if(Object.keys(t).forEach((e=>{"string"==typeof t[e]&&t[e].startsWith("#")&&(t[e]=t[e].replace(/^#/,""))})),!0===e){const{lex:e,_multi:s}=o.one.expandLexicon(t,n);return Object.assign(r.one._multiCache,s),void Object.assign(r.one.frozenLex,e)}if(o.two.expandLexicon){const{lex:e,_multi:s}=o.two.expandLexicon(t,n);Object.assign(r.one.lexicon,e),Object.assign(r.one._multiCache,s)}const{lex:s,_multi:i}=o.one.expandLexicon(t,n);Object.assign(r.one.lexicon,s),Object.assign(r.one._multiCache,i)}};var Tt={model:{one:{lexicon:{},_multiCache:{},frozenLex:{}}},methods:At,compute:zt,lib:$t,hooks:["lexicon"]};const Ct=function(t,e){const n=[{}],o=[null],r=[0],s=[];let i=0;t.forEach((function(t){let r=0;const s=function(t,e){const{methods:n,model:o}=e,r=n.one.tokenize.splitTerms(t,o).map((t=>n.one.tokenize.splitWhitespace(t,o)));return r.map((t=>t.text.toLowerCase()))}(t,e);for(let t=0;t0&&!n[i].hasOwnProperty(u);)i=r[i];if(n.hasOwnProperty(i)){const t=n[i][u];r[a]=t,o[t]&&(o[a]=o[a]||[],o[a]=o[a].concat(o[t]))}else r[a]=0}}return{goNext:n,endAs:o,failTo:r}},Lt=function(t,e,n){let o=0;const r=[];for(let s=0;s0&&(void 0===e.goNext[o]||!e.goNext[o].hasOwnProperty(i));)o=e.failTo[o]||0;if(e.goNext[o].hasOwnProperty(i)&&(o=e.goNext[o][i],e.endAs[o])){const n=e.endAs[o];for(let e=0;e{for(let n=t.length-1;n>=0;n-=1)if(t[n]!==e)return t=t.slice(0,n+1);return t},Ft={buildTrie:function(t){return function(t){return t.goNext=t.goNext.map((t=>{if(0!==Object.keys(t).length)return t})),t.goNext=Vt(t.goNext,void 0),t.failTo=Vt(t.failTo,0),t.endAs=Vt(t.endAs,null),t}(Ct(t,this.world()))}};Ft.compile=Ft.buildTrie;var qt={api:function(t){t.prototype.lookup=function(t,e={}){if(!t)return this.none();"string"==typeof t&&(t=[t]);var n;let o=function(t,e,n){let o=[];n.form=n.form||"normal";const r=t.docs;if(!e.goNext||!e.goNext[0])return console.error("Compromise invalid lookup trie"),t.none();const s=Object.keys(e.goNext[0]);for(let i=0;i0&&(o=o.concat(u))}return t.update(o)}(this,(n=t,"[object Object]"===Object.prototype.toString.call(n)?t:Ct(t,this.world)),e);return o=o.settle(),o}},lib:Ft};const Gt=function(t,e){return e?(t.forEach((t=>{const n=t[0];e[n]&&(t[0]=e[n][0],t[1]+=e[n][1],t[2]+=e[n][1])})),t):t},Bt=function(t,e){let{ptrs:n}=t;const{byGroup:o}=t;return n=Gt(n,e),Object.keys(o).forEach((t=>{o[t]=Gt(o[t],e)})),{ptrs:n,byGroup:o}},Dt=function(t,e,n){const o=n.methods.one;return"number"==typeof t&&(t=String(t)),"string"==typeof t&&(t=o.killUnicode(t,n),t=o.parseMatch(t,e,n)),t},Mt=t=>"[object Object]"===Object.prototype.toString.call(t),Ut=t=>t&&Mt(t)&&!0===t.isView,Wt=t=>t&&Mt(t)&&!0===t.isNet;var It={matchOne:function(t,e,n){const o=this.methods.one;if(Ut(t))return this.intersection(t).eq(0);if(Wt(t))return this.sweep(t,{tagger:!1,matchOne:!0}).view;const r={regs:t=Dt(t,n,this.world),group:e,justOne:!0},s=o.match(this.docs,r,this._cache),{ptrs:i,byGroup:c}=Bt(s,this.fullPointer),u=this.toView(i);return u._groups=c,u},match:function(t,e,n){const o=this.methods.one;if(Ut(t))return this.intersection(t);if(Wt(t))return this.sweep(t,{tagger:!1}).view.settle();const r={regs:t=Dt(t,n,this.world),group:e},s=o.match(this.docs,r,this._cache),{ptrs:i,byGroup:c}=Bt(s,this.fullPointer),u=this.toView(i);return u._groups=c,u},has:function(t,e,n){const o=this.methods.one;if(Ut(t)){return this.intersection(t).fullPointer.length>0}if(Wt(t))return this.sweep(t,{tagger:!1}).view.found;const r={regs:t=Dt(t,n,this.world),group:e,justOne:!0};return o.match(this.docs,r,this._cache).ptrs.length>0},if:function(t,e,n){const o=this.methods.one;if(Ut(t))return this.filter((e=>e.intersection(t).found));if(Wt(t)){const e=this.sweep(t,{tagger:!1}).view.settle();return this.if(e)}const r={regs:t=Dt(t,n,this.world),group:e,justOne:!0};let s=this.fullPointer;const i=this._cache||[];s=s.filter(((t,e)=>{const n=this.update([t]);return o.match(n.docs,r,i[e]).ptrs.length>0}));const c=this.update(s);return this._cache&&(c._cache=s.map((t=>i[t[0]]))),c},ifNo:function(t,e,n){const{methods:o}=this,r=o.one;if(Ut(t))return this.filter((e=>!e.intersection(t).found));if(Wt(t)){const e=this.sweep(t,{tagger:!1}).view.settle();return this.ifNo(e)}t=Dt(t,n,this.world);const s=this._cache||[],i=this.filter(((n,o)=>{const i={regs:t,group:e,justOne:!0};return 0===r.match(n.docs,i,s[o]).ptrs.length}));return this._cache&&(i._cache=i.ptrs.map((t=>s[t[0]]))),i}};var Rt={before:function(t,e,n){const{indexN:o}=this.methods.one.pointer,r=[],s=o(this.fullPointer);Object.keys(s).forEach((t=>{const e=s[t].sort(((t,e)=>t[1]>e[1]?1:-1))[0];e[1]>0&&r.push([e[0],0,e[1]])}));const i=this.toView(r);return t?i.match(t,e,n):i},after:function(t,e,n){const{indexN:o}=this.methods.one.pointer,r=[],s=o(this.fullPointer),i=this.document;Object.keys(s).forEach((t=>{const e=s[t].sort(((t,e)=>t[1]>e[1]?-1:1))[0],[n,,o]=e;o{const s=n.before(t,e);if(s.found){const t=s.terms();o[r][1]-=t.length,o[r][3]=t.docs[0][0].id}})),this.update(o)},growRight:function(t,e,n){"string"==typeof t&&(t=this.world.methods.one.parseMatch(t,n,this.world)),t[0].start=!0;const o=this.fullPointer;return this.forEach(((n,r)=>{const s=n.after(t,e);if(s.found){const t=s.terms();o[r][2]+=t.length,o[r][4]=null}})),this.update(o)},grow:function(t,e,n){return this.growRight(t,e,n).growLeft(t,e,n)}};const Qt=function(t,e){return[t[0],t[1],e[2]]},Ht=(t,e,n)=>{return"string"==typeof t||(o=t,"[object Array]"===Object.prototype.toString.call(o))?e.match(t,n):t||e.none();var o},Zt=function(t,e){const[n,o,r]=t;return e.document[n]&&e.document[n][o]&&(t[3]=t[3]||e.document[n][o].id,e.document[n][r-1]&&(t[4]=t[4]||e.document[n][r-1].id)),t},Kt={splitOn:function(t,e){const{splitAll:n}=this.methods.one.pointer,o=Ht(t,this,e).fullPointer,r=n(this.fullPointer,o);let s=[];return r.forEach((t=>{s.push(t.passthrough),s.push(t.before),s.push(t.match),s.push(t.after)})),s=s.filter((t=>t)),s=s.map((t=>Zt(t,this))),this.update(s)},splitBefore:function(t,e){const{splitAll:n}=this.methods.one.pointer,o=Ht(t,this,e).fullPointer,r=n(this.fullPointer,o);for(let t=0;t{s.push(t.passthrough),s.push(t.before),t.match&&t.after?s.push(Qt(t.match,t.after)):s.push(t.match)})),s=s.filter((t=>t)),s=s.map((t=>Zt(t,this))),this.update(s)},splitAfter:function(t,e){const{splitAll:n}=this.methods.one.pointer,o=Ht(t,this,e).fullPointer,r=n(this.fullPointer,o);let s=[];return r.forEach((t=>{s.push(t.passthrough),t.before&&t.match?s.push(Qt(t.before,t.match)):(s.push(t.before),s.push(t.match)),s.push(t.after)})),s=s.filter((t=>t)),s=s.map((t=>Zt(t,this))),this.update(s)}};Kt.split=Kt.splitAfter;const Jt=function(t,e){return!(!t||!e)&&(t[0]===e[0]&&t[2]===e[1])},Xt=function(t,e,n){const o=t.world,r=o.methods.one.parseMatch;n=n||"^.";const s=r(e=e||".$",{},o),i=r(n,{},o);s[s.length-1].end=!0,i[0].start=!0;const c=t.fullPointer,u=[c[0]];for(let e=1;e)?\/.*?[^\\/]\/[?\]+*$~]*)(?:\s|$)/,ne=/([!~[^]*(?:<[^<]*>)?\([^)]+[^\\)]\)[?\]+*$~]*)(?:\s|$)/,oe=/ /g,re=t=>/^[![^]*(<[^<]*>)?\//.test(t)&&/\/[?\]+*$~]*$/.test(t),se=function(t){return t=(t=t.map((t=>t.trim()))).filter((t=>t))},ie=/\{([0-9]+)?(, *[0-9]*)?\}/,ce=/&&/,ue=new RegExp(/^<\s*(\S+)\s*>/),ae=t=>t.charAt(0).toUpperCase()+t.substring(1),le=t=>t.charAt(t.length-1),he=t=>t.charAt(0),fe=t=>t.substring(1),pe=t=>t.substring(0,t.length-1),de=function(t){return t=fe(t),t=pe(t)},me=function(t,e){const n={};for(let o=0;o<2;o+=1){if("$"===le(t)&&(n.end=!0,t=pe(t)),"^"===he(t)&&(n.start=!0,t=fe(t)),"?"===le(t)&&(n.optional=!0,t=pe(t)),("["===he(t)||"]"===le(t))&&(n.group=null,"["===he(t)&&(n.groupStart=!0),"]"===le(t)&&(n.groupEnd=!0),t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===he(t))){const e=ue.exec(t);e.length>=2&&(n.group=e[1],t=t.replace(e[0],""))}if("+"===le(t)&&(n.greedy=!0,t=pe(t)),"*"!==t&&"*"===le(t)&&"\\*"!==t&&(n.greedy=!0,t=pe(t)),"!"===he(t)&&(n.negative=!0,t=fe(t)),"~"===he(t)&&"~"===le(t)&&t.length>2&&(t=de(t),n.fuzzy=!0,n.min=e.fuzzy||.85,!1===/\(/.test(t)))return n.word=t,n;if("/"===he(t)&&"/"===le(t))return t=de(t),e.caseSensitive&&(n.use="text"),n.regex=new RegExp(t),n;if(!0===ie.test(t)&&(t=t.replace(ie,((t,e,o)=>(void 0===o?(n.min=Number(e),n.max=Number(e)):(o=o.replace(/, */,""),void 0===e?(n.min=0,n.max=Number(o)):(n.min=Number(e),n.max=Number(o||999))),n.greedy=!0,n.min||(n.optional=!0),"")))),"("===he(t)&&")"===le(t)){ce.test(t)?(n.choices=t.split(ce),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=fe(n.choices[0]);const o=n.choices.length-1;n.choices[o]=pe(n.choices[o]),n.choices=n.choices.map((t=>t.trim())),n.choices=n.choices.filter((t=>t)),n.choices=n.choices.map((t=>t.split(/ /g).map((t=>me(t,e))))),t=""}if("{"===he(t)&&"}"===le(t)){if(t=de(t),n.root=t,/\//.test(t)){const t=n.root.split(/\//);n.root=t[0],n.pos=t[1],"adj"===n.pos&&(n.pos="Adjective"),n.pos=n.pos.charAt(0).toUpperCase()+n.pos.substr(1).toLowerCase(),void 0!==t[2]&&(n.sense=t[2])}return n}if("<"===he(t)&&">"===le(t))return t=de(t),n.chunk=ae(t),n.greedy=!0,n;if("%"===he(t)&&"%"===le(t))return t=de(t),n.switch=t,n}return"#"===he(t)?(n.tag=fe(t),n.tag=ae(n.tag),n):"@"===he(t)?(n.method=fe(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),e.caseSensitive?n.use="text":t=t.toLowerCase(),n.word=t),n)},ge=/[a-z0-9][-–—][a-z]/i,we=function(t,e){const{all:n}=e.methods.two.transform.verb||{},o=t.root;return n?n(o,e.model):[]},ye=function(t,e){const{all:n}=e.methods.two.transform.noun||{};return n?n(t.root,e.model):[t.root]},be=function(t,e){const{all:n}=e.methods.two.transform.adjective||{};return n?n(t.root,e.model):[t.root]},ve=function(t){return t=function(t){let e=0,n=null;for(let o=0;o(t.fuzzy&&t.choices&&t.choices.forEach((e=>{1===e.length&&e[0].word&&(e[0].fuzzy=!0,e[0].min=t.min)})),t)))}(t=t.map((t=>{if(void 0!==t.choices){if("or"!==t.operator)return t;if(!0===t.fuzzy)return t;!0===t.choices.every((t=>{if(1!==t.length)return!1;const e=t[0];return!0!==e.fuzzy&&!e.start&&!e.end&&void 0!==e.word&&!0!==e.negative&&!0!==e.optional&&!0!==e.method}))&&(t.fastOr=new Set,t.choices.forEach((e=>{t.fastOr.add(e[0].word)})),delete t.choices)}return t}))),t},xe=function(t,e){for(const n of e)if(t.has(n))return!0;return!1},je=function(t,e){for(let n=0;nn?o:n)+1;if(Math.abs(n-o)>(r||100))return r||100;const s=[];for(let t=0;t4)return n;u=e[i-1],a=c===u?0:1,l=s[r-1][i]+1,(h=s[r][i-1]+1)1&&i>1&&c===e[i-2]&&t[r-2]===u&&(h=s[r-2][i-2]+a)-1!==t.post.indexOf(e),ze={hasQuote:t=>Oe.test(t.pre)||ke.test(t.post),hasComma:t=>Se(t,","),hasPeriod:t=>!0===Se(t,".")&&!1===Se(t,"..."),hasExclamation:t=>Se(t,"!"),hasQuestionMark:t=>Se(t,"?")||Se(t,"¿"),hasEllipses:t=>Se(t,"..")||Se(t,"…"),hasSemicolon:t=>Se(t,";"),hasColon:t=>Se(t,":"),hasSlash:t=>/\//.test(t.text),hasHyphen:t=>Pe.test(t.post)||Pe.test(t.pre),hasDash:t=>_e.test(t.post)||_e.test(t.pre),hasContraction:t=>Boolean(t.implicit),isAcronym:t=>t.tags.has("Acronym"),isKnown:t=>t.tags.size>0,isTitleCase:t=>/^\p{Lu}[a-z'\u00C0-\u00FF]/u.test(t.text),isUpperCase:t=>/^\p{Lu}+$/u.test(t.text)};ze.hasQuotation=ze.hasQuote;let Ae=function(){};Ae=function(t,e,n,o){const r=function(t,e,n,o){if(!0===e.anything)return!0;if(!0===e.start&&0!==n)return!1;if(!0===e.end&&n!==o-1)return!1;if(void 0!==e.id&&e.id===t.id)return!0;if(void 0!==e.word){if(e.use)return e.word===t[e.use];if(null!==t.machine&&t.machine===e.word)return!0;if(void 0!==t.alias&&t.alias.hasOwnProperty(e.word))return!0;if(!0===e.fuzzy){if(e.word===t.root)return!0;if(Ee(e.word,t.normal)>=e.min)return!0}return!(!t.alias||!t.alias.some((t=>t===e.word)))||e.word===t.text||e.word===t.normal}if(void 0!==e.tag)return!0===t.tags.has(e.tag);if(void 0!==e.method)return"function"==typeof ze[e.method]&&!0===ze[e.method](t);if(void 0!==e.pre)return t.pre&&t.pre.includes(e.pre);if(void 0!==e.post)return t.post&&t.post.includes(e.post);if(void 0!==e.regex){let n=t.normal;return e.use&&(n=t[e.use]),e.regex.test(n)}if(void 0!==e.chunk)return t.chunk===e.chunk;if(void 0!==e.switch)return t.switch===e.switch;if(void 0!==e.machine)return t.normal===e.machine||t.machine===e.machine||t.root===e.machine;if(void 0!==e.sense)return t.sense===e.sense;if(void 0!==e.fastOr){if(e.pos&&!t.tags.has(e.pos))return null;const n=t.root||t.implicit||t.machine||t.normal;return e.fastOr.has(n)||e.fastOr.has(t.text)}return void 0!==e.choices&&("and"===e.operator?e.choices.every((e=>Ae(t,e,n,o))):e.choices.some((e=>Ae(t,e,n,o))))}(t,e,n,o);return!0===e.negative?!r:r};const $e=function(t,e){if(!0===t.end&&!0===t.greedy&&e.start_i+e.tn.max)return t.t=t.t+n.max,!0;if(!0===t.hasGroup){Te(t,t.t).length=o-t.t}return t.t=o,!0},Le=function(t,e=0){const n=t.regs[t.r];let o=!1;for(let s=0;s{let r=0;const s=t.t+o+e+r;if(void 0===t.terms[s])return!1;const i=Ae(t.terms[s],n,s+t.start_i,t.phrase_length);if(!0===i&&!0===n.greedy)for(let e=1;e{const o=n.every(((e,n)=>{const o=t.t+n;return void 0!==t.terms[o]&&Ae(t.terms[o],e,o,t.phrase_length)}));return!0===o&&n.length>e&&(e=n.length),o}))&&e}(t);if(o){if(!0===n.negative)return null;if(!0===t.hasGroup){Te(t,t.t).length+=o}if(!0===n.end){const e=t.phrase_length-1;if(t.t+t.start_i!==e)return null}return t.t+=o,!0}return!!n.optional||null},Fe=function(t){const{regs:e}=t,n=e[t.r],o=Object.assign({},n);o.negative=!1;if(Ae(t.terms[t.t],o,t.start_i+t.t,t.phrase_length))return!1;if(n.optional){const n=e[t.r+1];if(n){if(Ae(t.terms[t.t],n,t.start_i+t.t,t.phrase_length))t.r+=1;else if(n.optional&&e[t.r+2]){Ae(t.terms[t.t],e[t.r+2],t.start_i+t.t,t.phrase_length)&&(t.r+=2)}}}return n.greedy?function(t,e,n){let o=0;for(let r=t.t;ro||(t.t+=o,0))}(t,o,e[t.r+1]):(t.t+=1,!0)},qe=function(t){const{regs:e,phrase_length:n}=t,o=e[t.r];return t.t=function(t,e){const n=Object.assign({},t.regs[t.r],{start:!1,end:!1}),o=t.t;for(;t.tt.t?null:!0!==o.end||t.start_i+t.t===n||null},Ge=function(t){const{regs:e}=t,n=e[t.r],o=t.terms[t.t],r=t.t;if(n.optional&&e[t.r+1]&&n.negative)return!0;if(n.optional&&e[t.r+1]&&function(t){const{regs:e}=t,n=e[t.r],o=t.terms[t.t],r=Ae(o,e[t.r+1],t.start_i+t.t,t.phrase_length);if(n.negative||r){const n=t.terms[t.t+1];n&&Ae(n,e[t.r+1],t.start_i+t.t,t.phrase_length)||(t.r+=1)}}(t),o.implicit&&t.terms[t.t+1]&&function(t){const e=t.terms[t.t],n=t.regs[t.r];if(e.implicit&&t.terms[t.t+1]){if(!t.terms[t.t+1].implicit)return;n.word===e.normal&&(t.t+=1),"hasContraction"===n.method&&(t.t+=1)}}(t),t.t+=1,!0===n.end&&t.t!==t.terms.length&&!0!==n.greedy)return null;if(!0===n.greedy){if(!qe(t))return null}return!0===t.hasGroup&&function(t,e){const n=t.regs[t.r],o=Te(t,e);t.t>1&&n.greedy?o.length+=t.t-e:o.length++}(t,r),!0},Be=function(t,e,n,o){if(0===t.length||0===e.length)return null;const r={t:0,terms:t,r:0,regs:e,groups:{},start_i:n,phrase_length:o,inGroup:null};for(;r.r!t.optional)))break;return null}if(!0===t.anything&&!0===t.greedy){if(!Ce(r))return null;continue}if(void 0!==t.choices&&"or"===t.operator){if(!Ne(r))return null;continue}if(void 0!==t.choices&&"and"===t.operator){if(!Ve(r))return null;continue}if(!0===t.anything){if(t.negative&&t.anything)return null;if(!Ge(r))return null;continue}if(!0===$e(t,r)){if(!Ge(r))return null;continue}if(t.negative){if(!Fe(r))return null;continue}if(!0!==Ae(r.terms[r.t],t,r.start_i+r.t,r.phrase_length)){if(!0!==t.optional)return null}else{if(!Ge(r))return null}}const s=[null,n,r.t+n];if(s[1]===s[2])return null;const i={};return Object.keys(r.groups).forEach((t=>{const e=r.groups[t],o=n+e.start;i[t]=[null,o,o+e.length]})),{pointer:s,groups:i}},De=function(t,e){return t.pointer[0]=e,Object.keys(t.groups).forEach((n=>{t.groups[n][0]=e})),t},Me=function(t,e,n){let o=Be(t,e,0,t.length);return o?(o=De(o,n),o):null},Ue={one:{termMethods:ze,parseMatch:function(t,e,n){if(null==t||""===t)return[];e=e||{},"number"==typeof t&&(t=String(t));let o=function(t){const e=t.split(ee);let n=[];e.forEach((t=>{re(t)?n.push(t):n=n.concat(t.split(ne))})),n=se(n);let o=[];return n.forEach((t=>{(t=>/^[![^]*(<[^<]*>)?\(/.test(t)&&/\)[?\]+*$~]*$/.test(t))(t)||re(t)?o.push(t):o=o.concat(t.split(oe))})),o=se(o),o}(t);return o=o.map((t=>me(t,e))),o=function(t,e){const n=e.model.one.prefixes;for(let e=t.length-1;e>=0;e-=1){const o=t[e];if(o.word&&ge.test(o.word)){let r=o.word.split(/[-–—]/g);if(n.hasOwnProperty(r[0]))continue;r=r.filter((t=>t)).reverse(),t.splice(e,1),r.forEach((n=>{const r=Object.assign({},o);r.word=n,t.splice(e,0,r)}))}}return t}(o,n),o=function(t,e){return t.map((t=>{if(t.root)if(e.methods.two&&e.methods.two.transform){let n=[];t.pos?"Verb"===t.pos?n=n.concat(we(t,e)):"Noun"===t.pos?n=n.concat(ye(t,e)):"Adjective"===t.pos&&(n=n.concat(be(t,e))):(n=n.concat(we(t,e)),n=n.concat(ye(t,e)),n=n.concat(be(t,e))),n=n.filter((t=>t)),n.length>0&&(t.operator="or",t.fastOr=new Set(n))}else t.machine=t.root,delete t.id,delete t.root;return t}))}(o,n),o=ve(o),o},match:function(t,e,n){n=n||[];const{regs:o,group:r,justOne:s}=e;let i=[];if(!o||0===o.length)return{ptrs:[],byGroup:{}};const c=o.filter((t=>!0!==t.optional&&!0!==t.negative)).length;t:for(let e=0;et&&(t=Math.abs(n-1))}}else{const t=Me(r,o,e);t&&i.push(t)}}return!0===o[o.length-1].end&&(i=i.filter((e=>{const n=e.pointer[0];return t[n].length===e.pointer[2]}))),e.notIf&&(i=function(t,e,n){return t=t.filter((t=>{const[o,r,s]=t.pointer,i=n[o].slice(r,s);for(let t=0;t{t.groups[e]&&n.push(t.groups[e])})):t.forEach((t=>{n.push(t.pointer),Object.keys(t.groups).forEach((e=>{o[e]=o[e]||[],o[e].push(t.groups[e])}))}))),{ptrs:n,byGroup:o}}(i,r),i.ptrs.forEach((e=>{const[n,o,r]=e;e[3]=t[n][o].id,e[4]=t[n][r-1].id})),i}}};var We={api:function(t){Object.assign(t.prototype,te)},methods:Ue,lib:{parseMatch:function(t,e){const n=this.world(),o=n.methods.one.killUnicode;return o&&(t=o(t,n)),n.methods.one.parseMatch(t,e,n)}}};const Ie=/^\../,Re=/^#./,Qe=function(t,e){const n={},o={};return Object.keys(e).forEach((r=>{let s=e[r];const i=function(t){let e="",n="";return t=t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),Ie.test(t)?e=``),e+=">",{start:e,end:n}}(r);"string"==typeof s&&(s=t.match(s)),s.docs.forEach((t=>{if(t.every((t=>t.implicit)))return;const e=t[0].id;n[e]=n[e]||[],n[e].push(i.start);const r=t[t.length-1].id;o[r]=o[r]||[],o[r].push(i.end)}))})),{starts:n,ends:o}};var He={html:function(t){const{starts:e,ends:n}=Qe(this,t);let o="";return this.docs.forEach((t=>{for(let r=0;r{let n=t.pre||"",r=t.post||"";"some"===e.punctuation&&(n=n.replace(Ke,""),Xe.test(r)&&(r=" "),r=r.replace(Je,""),r=r.replace(/\?!+/,"?"),r=r.replace(/!+/,"!"),r=r.replace(/\?+/,"?"),r=r.replace(/\.{2,}/,""),t.tags.has("Abbreviation")&&(r=r.replace(/\./,""))),"some"===e.whitespace&&(n=n.replace(/\s/,""),r=r.replace(/\s+/," ")),e.keepPunct||(n=n.replace(Ke,""),r="-"===r?" ":r.replace(Ze,""));let s=t[e.form||"text"]||t.normal||"";"implicit"===e.form&&(s=t.implicit||t.text),"root"===e.form&&t.implicit&&(s=t.root||t.implicit||t.normal),"machine"!==e.form&&"implicit"!==e.form&&"root"!==e.form||!t.implicit||r&&Ye.test(r)||(r+=" "),o+=n+s+r})),!1===n&&(o=o.trim()),!0===e.lowerCase&&(o=o.toLowerCase()),o},en={text:{form:"text"},normal:{whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"normal"},machine:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"none",unicode:"some",form:"machine"},root:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"root"},implicit:{form:"implicit"}};en.clean=en.normal,en.reduced=en.root;const nn=[];let on=0;for(;on<64;)nn[on]=0|4294967296*Math.sin(++on%Math.PI);const rn=function(t){let e,n,o,r=decodeURI(encodeURI(t))+"€",s=r.length;const i=[e=1732584193,n=4023233417,~e,~n],c=[];for(t=--s/4+2|15,c[--t]=8*s;~s;)c[s>>2]|=r.charCodeAt(s)<<8*s--;for(on=r=0;on>4]+nn[r]+~~c[on|15&[r,5*r+1,3*r+5,7*r][s]])<<(s=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*s+r++%4])|o>>>-s),e,n])e=0|s[1],n=s[2];for(r=4;r;)i[--r]+=s[r]}for(t="";r<32;)t+=(i[r>>3]>>4*(1^r++)&15).toString(16);return t},sn={text:!0,terms:!0},cn={case:"none",unicode:"some",form:"machine",punctuation:"some"},un=function(t,e){return Object.assign({},t,e)},an={text:t=>tn(t,{keepPunct:!0},!1),normal:t=>tn(t,un(en.normal,{keepPunct:!0}),!1),implicit:t=>tn(t,un(en.implicit,{keepPunct:!0}),!1),machine:t=>tn(t,cn,!1),root:t=>tn(t,un(cn,{form:"root"}),!1),hash:t=>rn(tn(t,{keepPunct:!0},!1)),offset:t=>{const e=an.text(t).length;return{index:t[0].offset.index,start:t[0].offset.start,length:e}},terms:t=>t.map((t=>{const e=Object.assign({},t);return e.tags=Array.from(t.tags),e})),confidence:(t,e,n)=>e.eq(n).confidence(),syllables:(t,e,n)=>e.eq(n).syllables(),sentence:(t,e,n)=>e.eq(n).fullSentence().text(),dirty:t=>t.some((t=>!0===t.dirty))};an.sentences=an.sentence,an.clean=an.normal,an.reduced=an.root;const ln={json:function(t){const e=(n=this,"string"==typeof(o=(o=t)||{})&&(o={}),(o=Object.assign({},sn,o)).offset&&n.compute("offset"),n.docs.map(((t,e)=>{const r={};return Object.keys(o).forEach((s=>{o[s]&&an[s]&&(r[s]=an[s](t,n,e))})),r})));var n,o;return"number"==typeof t?e[t]:e}};ln.data=ln.json;const hn=function(t){const e=t.pre||"",n=t.post||"";return e+t.text+n},fn=function(t,e){const n=function(t,e){const n={};return Object.keys(e).forEach((o=>{t.match(o).fullPointer.forEach((t=>{n[t[3]]={fn:e[o],end:t[2]}}))})),n}(t,e);let o="";return t.docs.forEach(((e,r)=>{for(let s=0;st.reduce(((t,e)=>t+e.pre+e.text+e.post),"").trim()));return t.filter((t=>t))}if("freq"===t||"frequency"===t||"topk"===t)return function(t){const e={};t.forEach((t=>{e[t]=e[t]||0,e[t]+=1}));const n=Object.keys(e).map((t=>({normal:t,count:e[t]})));return n.sort(((t,e)=>t.count>e.count?-1:0))}(this.json({normal:!0}).map((t=>t.normal)));if("terms"===t){let t=[];return this.docs.forEach((e=>{let n=e.map((t=>t.text));n=n.filter((t=>t)),t=t.concat(n)})),t}return"tags"===t?this.docs.map((t=>t.reduce(((t,e)=>(t[e.implicit||e.normal]=Array.from(e.tags),t)),{}))):"debug"===t?this.debug():this.text()},wrap:function(t){return fn(this,t)}};var dn={text:function(t){let e={};var n;if(t&&"string"==typeof t&&en.hasOwnProperty(t)?e=Object.assign({},en[t]):t&&(n=t,"[object Object]"===Object.prototype.toString.call(n))&&(e=Object.assign({},t)),void 0!==e.keepSpace||this.isFull()||(e.keepSpace=!1),void 0===e.keepEndPunct&&this.pointer){const t=this.pointer[0];t&&t[1]?e.keepEndPunct=!1:e.keepEndPunct=!0}return void 0===e.keepPunct&&(e.keepPunct=!0),void 0===e.keepSpace&&(e.keepSpace=!0),function(t,e){let n="";if(!t||!t[0]||!t[0][0])return n;for(let o=0;o""+t+gn,red:t=>""+t+gn,blue:t=>""+t+gn,magenta:t=>""+t+gn,cyan:t=>""+t+gn,yellow:t=>""+t+gn,black:t=>""+t+gn,dim:t=>""+t+gn,i:t=>""+t+gn},yn={tags:function(t){const{docs:e,model:n}=t;0===e.length&&console.log(wn.blue("\n ──────")),e.forEach((e=>{console.log(wn.blue("\n ┌─────────")),e.forEach((e=>{const o=[...e.tags||[]];let r=e.text||"-";e.sense&&(r=`{${e.normal}/${e.sense}}`),e.implicit&&(r="["+e.implicit+"]"),r=wn.yellow(r);let s="'"+r+"'";if(e.reference){const n=t.update([e.reference]).text("normal");s+=` - ${wn.dim(wn.i("["+n+"]"))}`}s=s.padEnd(18);const i=wn.blue(" │ ")+wn.i(s)+" - "+function(t,e){return e.one.tagSet&&(t=t.map((t=>{if(!e.one.tagSet.hasOwnProperty(t))return t;const n=e.one.tagSet[t].color||"blue";return wn[n](t)}))),t.join(", ")}(o,n);console.log(i)}))})),console.log("\n")},clientSide:function(t){console.log("%c -=-=- ","background-color:#6699cc;"),t.forEach((t=>{console.groupCollapsed(t.text());const e=t.docs[0].map((t=>{let e=t.text||"-";t.implicit&&(e="["+t.implicit+"]");return{text:e,tags:"["+Array.from(t.tags).join(", ")+"]"}}));console.table(e,["text","tags"]),console.groupEnd()}))},chunks:function(t){const{docs:e}=t;console.log(""),e.forEach((t=>{const e=[];t.forEach((t=>{"Noun"===t.chunk?e.push(wn.blue(t.implicit||t.normal)):"Verb"===t.chunk?e.push(wn.green(t.implicit||t.normal)):"Adjective"===t.chunk?e.push(wn.yellow(t.implicit||t.normal)):"Pivot"===t.chunk?e.push(wn.red(t.implicit||t.normal)):e.push(t.implicit||t.normal)})),console.log(e.join(" "),"\n")})),console.log("\n")},highlight:function(t){if(!t.found)return;const e={};t.fullPointer.forEach((t=>{e[t[0]]=e[t[0]]||[],e[t[0]].push(t)})),Object.keys(e).forEach((n=>{let o=t.update([[Number(n)]]).text();t.update(e[n]).json({offset:!0}).forEach(((t,e)=>{o=function(t,e,n){const o=((t,e,n)=>{const o=9*n,r=e.start+o,s=r+e.length;return[t.substring(0,r),t.substring(r,s),t.substring(s,t.length)]})(t,e,n);return`${o[0]}${wn.blue(o[1])}${o[2]}`}(o,t.offset,e)})),console.log(o)})),console.log("\n")}};var bn={api:function(t){Object.assign(t.prototype,mn)},methods:{one:{hash:rn,debug:yn}}};const vn=function(t,e){if(t[0]!==e[0])return!1;const[,n,o]=t,[,r,s]=e;return n<=r&&o>r||r<=n&&s>n},xn=function(t){const e={};return t.forEach((t=>{e[t[0]]=e[t[0]]||[],e[t[0]].push(t)})),e},jn=function(t,e){const n=xn(e),o=[];return t.forEach((t=>{const[e]=t;let r=n[e]||[];if(r=r.filter((e=>function(t,e){return t[1]<=e[1]&&e[2]<=t[2]}(t,e))),0===r.length)return void o.push({passthrough:t});r=r.sort(((t,e)=>t[1]-e[1]));let s=t;r.forEach(((t,e)=>{const n=function(t,e){const[n,o]=t,r=e[1],s=e[2],i={};if(os&&(i.after=[n,s,t[2]]),i}(s,t);r[e+1]?(o.push({before:n.before,match:n.match}),n.after&&(s=n.after)):o.push(n)}))})),o};var En={one:{termList:function(t){const e=[];for(let n=0;n{if(!o)return;let[s,i,c,u,a]=o,l=e[s]||[];if(void 0===i&&(i=0),void 0===c&&(c=l.length),!u||l[i]&&l[i].id===u)l=l.slice(i,c);else{const n=function(t,e,n){for(let o=0;o<20;o+=1){if(e[n-o]){const r=e[n-o].findIndex((e=>e.id===t));if(-1!==r)return[n-o,r]}if(e[n+o]){const r=e[n+o].findIndex((e=>e.id===t));if(-1!==r)return[n+o,r]}}return null}(u,e,s);if(null!==n){const o=c-i;l=e[n[0]].slice(n[1],n[1]+o);const s=l[0]?l[0].id:null;t[r]=[n[0],n[1],n[1]+o,s]}}0!==l.length&&i!==c&&(a&&l[l.length-1].id!==a&&(l=function(t,e){const[n,o,,,r]=t,s=e[n],i=s.findIndex((t=>t.id===r));return-1===i?(t[2]=e[n].length,t[4]=s.length?s[s.length-1].id:null):t[2]=i,e[n].slice(o,t[2]+1)}(o,e)),n.push(l))})),n=n.filter((t=>t.length>0)),n},pointer:{indexN:xn,splitAll:jn}}};const On=function(t,e){const n=t.concat(e),o=xn(n);let r=[];return n.forEach((t=>{const[e]=t;if(1===o[e].length)return void r.push(t);const n=o[e].filter((e=>vn(t,e)));n.push(t);const s=function(t){let e=t[0][1],n=t[0][2];return t.forEach((t=>{t[1]n&&(n=t[2])})),[t[0][0],e,n]}(n);r.push(s)})),r=function(t){const e={};for(let n=0;n{t.passthrough&&n.push(t.passthrough),t.before&&n.push(t.before),t.after&&n.push(t.after)})),n},Pn=(t,e)=>{return"string"==typeof t||(n=t,"[object Array]"===Object.prototype.toString.call(n))?e.match(t):t||e.none();var n},_n=function(t,e){return t.map((t=>{const[n,o]=t;return e[n]&&e[n][o]&&(t[3]=e[n][o].id),t}))},Sn={union:function(t){t=Pn(t,this);let e=On(this.fullPointer,t.fullPointer);return e=_n(e,this.document),this.toView(e)}};Sn.and=Sn.union,Sn.intersection=function(t){t=Pn(t,this);let e=function(t,e){const n=xn(e),o=[];return t.forEach((t=>{let e=n[t[0]]||[];e=e.filter((e=>vn(t,e))),0!==e.length&&e.forEach((e=>{const n=function(t,e){const n=t[1]e[2]?e[2]:t[2];return n{t=On(t,[e])})),t=_n(t,this.document),this.update(t)};var zn={methods:En,api:function(t){Object.assign(t.prototype,Sn)}};const An=function(t){return!0===t.optional||!0===t.negative?null:t.tag?"#"+t.tag:t.word?t.word:t.switch?`%${t.switch}%`:null},$n=function(t,e){const n=e.methods.one.parseMatch;return t.forEach((t=>{t.regs=n(t.match,{},e),"string"==typeof t.ifNo&&(t.ifNo=[t.ifNo]),t.notIf&&(t.notIf=n(t.notIf,{},e)),t.needs=function(t){const e=[];return t.forEach((t=>{e.push(An(t)),"and"===t.operator&&t.choices&&t.choices.forEach((t=>{t.forEach((t=>{e.push(An(t))}))}))})),e.filter((t=>t))}(t.regs);const{wants:o,count:r}=function(t){const e=[];let n=0;return t.forEach((t=>{"or"!==t.operator||t.optional||t.negative||(t.fastOr&&Array.from(t.fastOr).forEach((t=>{e.push(t)})),t.choices&&t.choices.forEach((t=>{t.forEach((t=>{const n=An(t);n&&e.push(n)}))})),n+=1)})),{wants:e,count:n}}(t.regs);t.wants=o,t.minWant=r,t.minWords=t.regs.filter((t=>!t.optional)).length})),t};var Tn={buildNet:function(t,e){t=$n(t,e);const n={};t.forEach((t=>{t.needs.forEach((e=>{n[e]=Array.isArray(n[e])?n[e]:[],n[e].push(t)})),t.wants.forEach((e=>{n[e]=Array.isArray(n[e])?n[e]:[],n[e].push(t)}))})),Object.keys(n).forEach((t=>{const e={};n[t]=n[t].filter((t=>"boolean"!=typeof e[t.match]&&(e[t.match]=!0,!0)))}));const o=t.filter((t=>0===t.needs.length&&0===t.wants.length));return{hooks:n,always:o}},bulkMatch:function(t,e,n,o={}){const r=n.one.cacheDoc(t);let s=function(t,e){return t.map(((n,o)=>{let r=[];Object.keys(e).forEach((n=>{t[o].has(n)&&(r=r.concat(e[n]))}));const s={};return r=r.filter((t=>"boolean"!=typeof s[t.match]&&(s[t.match]=!0,!0))),r}))}(r,e.hooks);s=function(t,e){return t.map(((t,n)=>{const o=e[n];return(t=(t=t.filter((t=>t.needs.every((t=>o.has(t)))))).filter((t=>void 0===t.ifNo||!0!==t.ifNo.some((t=>o.has(t)))))).filter((t=>0===t.wants.length||t.wants.filter((t=>o.has(t))).length>=t.minWant))}))}(s,r),e.always.length>0&&(s=s.map((t=>t.concat(e.always)))),s=function(t,e){return t.map(((t,n)=>{const o=e[n].length;return t=t.filter((t=>o>=t.minWords)),t}))}(s,t);const i=function(t,e,n,o,r){const s=[];for(let n=0;n0&&(u.ptrs.forEach((t=>{t[0]=n;const e=Object.assign({},c,{pointer:t});void 0!==c.unTag&&(e.unTag=c.unTag),s.push(e)})),!0===r.matchOne))return[s[0]]}return s}(s,t,0,n,o);return i},bulkTagger:function(t,e,n){const{model:o,methods:r}=n,{getDoc:s,setTag:i,unTag:c}=r.one,u=r.two.looksPlural;if(0===t.length)return t;return("undefined"!=typeof process&&process.env?process.env:self.env||{}).DEBUG_TAGS&&console.log(`\n\n → ${t.length} post-tagger:`),t.map((t=>{if(!t.tag&&!t.chunk&&!t.unTag)return;const r=t.reason||t.match,a=s([t.pointer],e)[0];if(!0===t.safe){if(!1===function(t,e,n){const o=n.one.tagSet;if(!o.hasOwnProperty(e))return!0;const r=o[e].not||[];for(let e=0;et.frozen=!0))}void 0!==t.unTag&&c(a,t.unTag,n,t.safe,r),t.chunk&&a.forEach((e=>e.chunk=t.chunk))}))}},Cn={lib:{buildNet:function(t){const e=this.methods().one.buildNet(t,this.world());return e.isNet=!0,e}},api:function(t){t.prototype.sweep=function(t,e={}){const{world:n,docs:o}=this,{methods:r}=n;let s=r.one.bulkMatch(o,t,this.methods,e);!1!==e.tagger&&r.one.bulkTagger(s,o,this.world),s=s.map((t=>{const e=t.pointer,n=o[e[0]][e[1]],r=e[2]-e[1];return n.index&&(t.pointer=[n.index[0],n.index[1],e[1]+r]),t}));const i=s.map((t=>t.pointer));return s=s.map((t=>(t.view=this.update([t.pointer]),delete t.regs,delete t.needs,delete t.pointer,delete t._expanded,t))),{view:this.update(i),found:s}}},methods:{one:Tn}};const Ln=/ /,Nn=function(t,e){"Noun"===e&&(t.chunk=e),"Verb"===e&&(t.chunk=e)},Vn=function(t,e,n,o){if(!0===t.tags.has(e))return null;if("."===e)return null;!0===t.frozen&&(o=!0);const r=n[e];if(r){if(r.not&&r.not.length>0)for(let e=0;e0)for(let e=0;e{const o=t.map((t=>t.text||"["+t.implicit+"]")).join(" ");var r;"string"!=typeof e&&e.length>2&&(e=e.slice(0,2).join(", #")+" +"),e="string"!=typeof e?e.join(", #"):e,console.log(` ${(r=o,""+r+"").padEnd(24)} → #${e.padEnd(22)} ${(t=>""+t+"")(n)}`)})(t,e,r),!0!=(c=e,"[object Array]"===Object.prototype.toString.call(c)))if("string"==typeof e)if(e=e.trim(),Ln.test(e))!function(t,e,n,o){const r=e.split(Ln);t.forEach(((t,e)=>{let s=r[e];s&&(s=s.replace(/^#/,""),Vn(t,s,n,o))}))}(t,e,s,o);else{e=e.replace(/^#/,"");for(let n=0;nFn(t,e,n,o)))},qn=function(t){return t.children=t.children||[],t._cache=t._cache||{},t.props=t.props||{},t._cache.parents=t._cache.parents||[],t._cache.children=t._cache.children||[],t},Gn=/^ *(#|\/\/)/,Bn=function(t){let e=t.trim().split(/->/),n=[];e.forEach((t=>{n=n.concat(function(t){if(!(t=t.trim()))return null;if(/^\[/.test(t)&&/\]$/.test(t)){let e=(t=(t=t.replace(/^\[/,"")).replace(/\]$/,"")).split(/,/);return e=e.map((t=>t.trim())).filter((t=>t)),e=e.map((t=>qn({id:t}))),e}return[qn({id:t})]}(t))})),n=n.filter((t=>t));let o=n[0];for(let t=1;t{let n=[],o=[t];for(;o.length>0;){let t=o.pop();n.push(t),t.children&&t.children.forEach((n=>{e&&e(t,n),o.push(n)}))}return n},Mn=t=>"[object Array]"===Object.prototype.toString.call(t),Un=t=>(t=t||"").trim(),Wn=function(t=[]){return"string"==typeof t?function(t){let e=t.split(/\r?\n/),n=[];e.forEach((t=>{if(!t.trim()||Gn.test(t))return;let e=(t=>{const e=/^( {2}|\t)/;let n=0;for(;e.test(t);)t=t.replace(e,""),n+=1;return n})(t);n.push({indent:e,node:Bn(t)})}));let o=function(t){let e={children:[]};return t.forEach(((n,o)=>{0===n.indent?e.children=e.children.concat(n.node):t[o-1]&&function(t,e){let n=t[e].indent;for(;e>=0;e-=1)if(t[e].indent{e[t.id]=t}));let n=qn({});return t.forEach((t=>{if((t=qn(t)).parent)if(e.hasOwnProperty(t.parent)){let n=e[t.parent];delete t.parent,n.children.push(t)}else console.warn(`[Grad] - missing node '${t.parent}'`);else n.children.push(t)})),n}(t):(Dn(e=t).forEach(qn),e);var e},In=function(t,e){let n="-> ";e&&(n=(t=>""+t+"")("→ "));let o="";return Dn(t).forEach(((t,r)=>{let s=t.id||"";if(e&&(s=(t=>""+t+"")(s)),0===r&&!t.id)return;let i=t._cache.parents.length;o+=" ".repeat(i)+n+s+"\n"})),o},Rn=function(t){let e=Dn(t);e.forEach((t=>{delete(t=Object.assign({},t)).children}));let n=e[0];return n&&!n.id&&0===Object.keys(n.props).length&&e.shift(),e},Qn={text:In,txt:In,array:Rn,flat:Rn},Hn=function(t,e){return"nested"===e||"json"===e?t:"debug"===e?(console.log(In(t,!0)),null):Qn.hasOwnProperty(e)?Qn[e](t):t},Zn=t=>{Dn(t,((t,e)=>{t.id&&(t._cache.parents=t._cache.parents||[],e._cache.parents=t._cache.parents.concat([t.id]))}))},Kn=/\//;class g{constructor(t={}){Object.defineProperty(this,"json",{enumerable:!1,value:t,writable:!0})}get children(){return this.json.children}get id(){return this.json.id}get found(){return this.json.id||this.json.children.length>0}props(t={}){let e=this.json.props||{};return"string"==typeof t&&(e[t]=!0),this.json.props=Object.assign(e,t),this}get(t){if(t=Un(t),!Kn.test(t)){let e=this.json.children.find((e=>e.id===t));return new g(e)}let e=((t,e)=>{let n=(t=>"string"!=typeof t?t:(t=t.replace(/^\//,"")).split(/\//))(e=e||"");for(let e=0;et.id===n[e]));if(!o)return null;t=o}return t})(this.json,t)||qn({});return new g(e)}add(t,e={}){if(Mn(t))return t.forEach((t=>this.add(Un(t),e))),this;t=Un(t);let n=qn({id:t,props:e});return this.json.children.push(n),new g(n)}remove(t){return t=Un(t),this.json.children=this.json.children.filter((e=>e.id!==t)),this}nodes(){return Dn(this.json).map((t=>(delete(t=Object.assign({},t)).children,t)))}cache(){return(t=>{let e=Dn(t,((t,e)=>{t.id&&(t._cache.parents=t._cache.parents||[],t._cache.children=t._cache.children||[],e._cache.parents=t._cache.parents.concat([t.id]))})),n={};e.forEach((t=>{t.id&&(n[t.id]=t)})),e.forEach((t=>{t._cache.parents.forEach((e=>{n.hasOwnProperty(e)&&n[e]._cache.children.push(t.id)}))})),t._cache.children=Object.keys(n)})(this.json),this}list(){return Dn(this.json)}fillDown(){var t;return t=this.json,Dn(t,((t,e)=>{e.props=((t,e)=>(Object.keys(e).forEach((n=>{if(e[n]instanceof Set){let o=t[n]||new Set;t[n]=new Set([...o,...e[n]])}else if((t=>t&&"object"==typeof t&&!Array.isArray(t))(e[n])){let o=t[n]||{};t[n]=Object.assign({},e[n],o)}else Mn(e[n])?t[n]=e[n].concat(t[n]||[]):void 0===t[n]&&(t[n]=e[n])})),t))(e.props,t.props)})),this}depth(){Zn(this.json);let t=Dn(this.json),e=t.length>1?1:0;return t.forEach((t=>{if(0===t._cache.parents.length)return;let n=t._cache.parents.length+1;n>e&&(e=n)})),e}out(t){return Zn(this.json),Hn(this.json,t)}debug(){return Zn(this.json),Hn(this.json,"debug"),this}}const Jn=function(t){let e=Wn(t);return new g(e)};Jn.prototype.plugin=function(t){t(this)};const Xn={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Hyphenated:"cyan",Adverb:"cyan"},Yn=function(t){if(Xn.hasOwnProperty(t.id))return Xn[t.id];if(Xn.hasOwnProperty(t.is))return Xn[t.is];const e=t._cache.parents.find((t=>Xn[t]));return Xn[e]},to=function(t){return t?"string"==typeof t?[t]:t:[]},eo=function(t,e){return t=function(t,e){return Object.keys(t).forEach((n=>{t[n].isA&&(t[n].is=t[n].isA),t[n].notA&&(t[n].not=t[n].notA),t[n].is&&"string"==typeof t[n].is&&(e.hasOwnProperty(t[n].is)||t.hasOwnProperty(t[n].is)||(t[t[n].is]={})),t[n].not&&"string"==typeof t[n].not&&!t.hasOwnProperty(t[n].not)&&(e.hasOwnProperty(t[n].not)||t.hasOwnProperty(t[n].not)||(t[t[n].not]={}))})),t}(t,e),Object.keys(t).forEach((e=>{t[e].children=to(t[e].children),t[e].not=to(t[e].not)})),Object.keys(t).forEach((e=>{(t[e].not||[]).forEach((n=>{t[n]&&t[n].not&&t[n].not.push(e)}))})),t};var no={one:{setTag:Fn,unTag:function(t,e,n){e=e.trim().replace(/^#/,"");for(let o=0;o0)for(let t=0;t0&&(t=function(t){return Object.keys(t).forEach((e=>{t[e]=Object.assign({},t[e]),t[e].novel=!0})),t}(t)),t=eo(t,e);const n=function(t){const e=Object.keys(t).map((e=>{const n=t[e],o={not:new Set(n.not),also:n.also,is:n.is,novel:n.novel};return{id:e,parent:n.is,props:o,children:[]}}));return Jn(e).cache().fillDown().out("array")}(Object.assign({},e,t)),o=function(t){const e={};return t.forEach((t=>{const{not:n,also:o,is:r,novel:s}=t.props;let i=t._cache.parents;o&&(i=i.concat(o)),e[t.id]={is:r,not:n,novel:s,also:o,parents:i,children:t._cache.children,color:Yn(t)}})),Object.keys(e).forEach((t=>{const n=new Set(e[t].not);e[t].not.forEach((t=>{e[t]&&e[t].children.forEach((t=>n.add(t)))})),e[t].not=Array.from(n)})),e}(n);return o},canBe:function(t,e,n){if(!n.hasOwnProperty(e))return!0;const o=n[e].not||[];for(let e=0;er.one.setTag(o,t,i,n,e))):r.one.setTag(o,t,i,n,e),this.uncache(),this},tagSafe:function(t,e=""){return this.tag(t,e,!0)},unTag:function(t,e){if(!this.found||!t)return this;const n=this.termList();if(0===n.length)return this;const{methods:o,verbose:r,model:s}=this;!0===r&&console.log(" - ",t,e||"");const i=s.one.tagSet;return oo(t)?t.forEach((t=>o.one.unTag(n,t,i))):o.one.unTag(n,t,i),this.uncache(),this},canBe:function(t){t=t.replace(/^#/,"");const e=this.model.one.tagSet,n=this.methods.one.canBe,o=[];this.document.forEach(((r,s)=>{r.forEach(((r,i)=>{n(r,t,e)||o.push([s,i,i+1])}))}));const r=this.update(o);return this.difference(r)}};var so={addTags:function(t){const{model:e,methods:n}=this.world(),o=e.one.tagSet,r=(0,n.one.addTags)(t,o);return e.one.tagSet=r,this}};const io=new Set(["Auxiliary","Possessive"]);var co={model:{one:{tagSet:{}}},compute:{tagRank:function(t){const{document:e,world:n}=t,o=n.model.one.tagSet;e.forEach((t=>{t.forEach((t=>{const e=Array.from(t.tags);t.tagRank=function(t,e){return t=t.sort(((t,n)=>{if(io.has(t)||!e.hasOwnProperty(n))return 1;if(io.has(n)||!e.hasOwnProperty(t))return-1;let o=e[t].children||[];const r=o.length;return o=e[n].children||[],r-o.length})),t}(e,o)}))}))}},methods:no,api:function(t){Object.assign(t.prototype,ro)},lib:so};const uo=/([.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s)/g,ao=/^[.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s$/,lo=/((?:\r?\n|\r)+)/,ho=/[a-z0-9\u00C0-\u00FF\u00a9\u00ae\u2000-\u3300\ud000-\udfff]/i,fo=/\S/,po=function(t){return Boolean(t.match(/\n$/))},mo={'"':'"',""":""","“":"”","‟":"”","„":"”","⹂":"”","‚":"’","«":"»","‹":"›","‵":"′","‶":"″","‷":"‴","〝":"〞","〟":"〞"},go=RegExp("["+Object.keys(mo).join("")+"]","g"),wo=RegExp("["+Object.values(mo).join("")+"]","g"),yo=function(t){if(!t)return!1;const e=t.match(wo);return null!==e&&1===e.length},bo=/\(/g,vo=/\)/g,xo=/\S/,jo=/^\s+/,Eo=function(t,e){const n=t.split(/[-–—]/);if(n.length<=1)return!1;const{prefixes:o,suffixes:r}=e.one;if(1===n[0].length&&/[a-z]/i.test(n[0]))return!1;if(o.hasOwnProperty(n[0]))return!1;if(n[1]=n[1].trim().replace(/[.?!]$/,""),r.hasOwnProperty(n[1]))return!1;if(!0===/^([a-z\u00C0-\u00FF`"'/]+)[-–—]([a-z0-9\u00C0-\u00FF].*)/i.test(t))return!0;return!0===/^[('"]?([0-9]{1,4})[-–—]([a-z\u00C0-\u00FF`"'/-]+[)'"]?$)/i.test(t)},Oo=function(t){const e=[],n=t.split(/[-–—]/);let o="-";const r=t.match(/[-–—]/);r&&r[0]&&(o=r);for(let t=0;t(t[e]=!0,t)),{});const Ao=/\p{Letter}/u,$o=/[\p{Number}\p{Currency_Symbol}]/u,To=/^[a-z]\.([a-z]\.)+/i,Co=/[sn]['’]$/,Lo=/([A-Z]\.)+[A-Z]?,?$/,No=/^[A-Z]\.,?$/,Vo=/[A-Z]{2,}('s|,)?$/,Fo=/([a-z]\.)+[a-z]\.?$/,qo=function(t){return function(t){return!0===Lo.test(t)||!0===Fo.test(t)||!0===No.test(t)||!0===Vo.test(t)}(t)&&(t=t.replace(/\./g,"")),t},Go=function(t,e){const n=e.methods.one.killUnicode;let o=t.text||"";o=function(t){const e=t=(t=(t=t||"").toLowerCase()).trim();return t=(t=(t=t.replace(/[,;.!?]+$/,"")).replace(/\u2026/g,"...")).replace(/\u2013/g,"-"),!1===/^[:;]/.test(t)&&(t=(t=(t=t.replace(/\.{3,}$/g,"")).replace(/[",.!:;?)]+$/g,"")).replace(/^['"(]+/g,"")),""===(t=(t=t.replace(/[\u200B-\u200D\uFEFF]/g,"")).trim())&&(t=e),t.replace(/([0-9]),([0-9])/g,"$1$2")}(o),o=n(o,e),o=qo(o),t.normal=o},Bo=/[ .][A-Z]\.? *$/i,Do=/(?:\u2026|\.{2,}) *$/,Mo=/\p{L}/u,Uo=/\. *$/,Wo=/^[A-Z]\. $/;var Io={one:{killUnicode:function(t,e){const n=e.model.one.unicode||{},o=(t=t||"").split("");return o.forEach(((t,e)=>{n[t]&&(o[e]=n[t])})),o.join("")},tokenize:{splitSentences:function(t,e){if(t=t||"",!(t=String(t))||"string"!=typeof t||!1===xo.test(t))return[];const n=function(t){const e=[],n=t.split(lo);for(let t=0;t0&&(r.push(s),t[e]=""):t[e+1]=s+(t[e+1]||"")}return r}(o,e),o=function(t){const e=[];for(let n=0;n0?(n[n.length-1]+=s,n.push(e)):n.push(s+e),s=""):s+=e}return s&&(0===n.length&&(n[0]=""),n[n.length-1]+=s),n=function(t){for(let e=1;et)),n},splitWhitespace:(t,e)=>{const{str:n,pre:o,post:r}=function(t,e){const{prePunctuation:n,postPunctuation:o,emoticons:r}=e.one;let s=t,i="",c="";const u=Array.from(t);if(r.hasOwnProperty(t.trim()))return{str:t.trim(),pre:i,post:" "};let a=u.length;for(let t=0;t(c=t||"",""))),t=s,i=""),{str:t,pre:i,post:c}}(t,e);return{text:n,pre:o,post:r,tags:new Set}},fromString:function(t,e){const{methods:n,model:o}=e,{splitSentences:r,splitTerms:s,splitWhitespace:i}=n.one.tokenize;return t=r(t=t||"",e).map((t=>{let n=s(t,o);return n=n.map((t=>i(t,o))),n.forEach((t=>{Go(t,e)})),n})),t}}}};const Ro={},Qo={};[[["approx","apt","bc","cyn","eg","esp","est","etc","ex","exp","prob","pron","gal","min","pseud","fig","jd","lat","lng","vol","fm","def","misc","plz","ea","ps","sec","pt","pref","pl","pp","qt","fr","sq","nee","ss","tel","temp","vet","ver","fem","masc","eng","adj","vb","rb","inf","situ","vivo","vitro","wr"]],[["dl","ml","gal","qt","pt","tbl","tsp","tbsp","km","dm","cm","mm","mi","td","hr","hrs","kg","hg","dg","cg","mg","µg","lb","oz","sq ft","hz","mps","mph","kmph","kb","mb","tb","lx","lm","fl oz","yb"],"Unit"],[["ad","al","arc","ba","bl","ca","cca","col","corp","ft","fy","ie","lit","ma","md","pd","tce"],"Noun"],[["adj","adm","adv","asst","atty","bldg","brig","capt","cmdr","comdr","cpl","det","dr","esq","gen","gov","hon","jr","llb","lt","maj","messrs","mlle","mme","mr","mrs","ms","mstr","phd","prof","pvt","rep","reps","res","rev","sen","sens","sfc","sgt","sir","sr","supt","surg"],"Honorific"],[["jan","feb","mar","apr","jun","jul","aug","sep","sept","oct","nov","dec"],"Month"],[["dept","univ","assn","bros","inc","ltd","co"],"Organization"],[["rd","st","dist","mt","ave","blvd","cl","cres","hwy","ariz","cal","calif","colo","conn","fla","fl","ga","ida","ia","kan","kans","minn","neb","nebr","okla","penna","penn","pa","dak","tenn","tex","ut","vt","va","wis","wisc","wy","wyo","usafa","alta","ont","que","sask"],"Place"]].forEach((t=>{t[0].forEach((e=>{Ro[e]=!0,Qo[e]="Abbreviation",void 0!==t[1]&&(Qo[e]=[Qo[e],t[1]])}))}));var Ho=["anti","bi","co","contra","de","extra","infra","inter","intra","macro","micro","mis","mono","multi","peri","pre","pro","proto","pseudo","re","sub","supra","trans","tri","un","out","ex"].reduce(((t,e)=>(t[e]=!0,t)),{});const Zo={"!":"¡","?":"¿Ɂ",'"':'“”"❝❞',"'":"‘‛❛❜’","-":"—–",a:"ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАаѦѧӐӑӒӓƛæ",b:"ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ",c:"¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼϲϹϽϾСсєҀҁҪҫ",d:"ÐĎďĐđƉƊȡƋƌ",e:"ÈÉÊËèéêëĒēĔĕĖėĘęĚěƐȄȅȆȇȨȩɆɇΈΕΞΣέεξϵЀЁЕеѐёҼҽҾҿӖӗễ",f:"ƑƒϜϝӺӻҒғſ",g:"ĜĝĞğĠġĢģƓǤǥǦǧǴǵ",h:"ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ",I:"ÌÍÎÏ",i:"ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇіїi̇",j:"ĴĵǰȷɈɉϳЈј",k:"ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ",l:"ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ",m:"ΜϺϻМмӍӎ",n:"ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ",o:"ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϴОФоѲѳӦӧӨөӪӫ",p:"ƤΡρϷϸϼРрҎҏÞ",q:"Ɋɋ",r:"ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ",s:"ŚśŜŝŞşŠšƧƨȘșȿЅѕ",t:"ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт",u:"ÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰυϋύ",v:"νѴѵѶѷ",w:"ŴŵƜωώϖϢϣШЩшщѡѿ",x:"×ΧχϗϰХхҲҳӼӽӾӿ",y:"ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ",z:"ŹźŻżŽžƵƶȤȥɀΖ"},Ko={};Object.keys(Zo).forEach((function(t){Zo[t].split("").forEach((function(e){Ko[e]=t}))}));const Jo=/\//,Xo=/[a-z]\.[a-z]/i,Yo=/[0-9]/,tr=function(t,e){const n=t.normal||t.text||t.machine,o=e.model.one.aliases;if(o.hasOwnProperty(n)&&(t.alias=t.alias||[],t.alias.push(o[n])),Jo.test(n)&&!Xo.test(n)&&!Yo.test(n)){const e=n.split(Jo);e.length<=3&&e.forEach((e=>{""!==(e=e.trim())&&(t.alias=t.alias||[],t.alias.push(e))}))}return t},er=/^\p{Letter}+-\p{Letter}+$/u,nr=function(t){let e=t.implicit||t.normal||t.text;e=e.replace(/['’]s$/,""),e=e.replace(/s['’]$/,"s"),e=e.replace(/([aeiou][ktrp])in'$/,"$1ing"),er.test(e)&&(e=e.replace(/-/g,"")),e=e.replace(/^[#@]/,""),e!==t.normal&&(t.machine=e)},or=function(t,e){const n=t.docs;for(let o=0;oor(t,tr),machine:t=>or(t,nr),normal:t=>or(t,Go),freq:function(t){const e=t.docs,n={};for(let t=0;t{let i=(t=t.toLowerCase().trim()).length;e.max&&i>e.max&&(i=e.max);for(let c=e.min;c{delete o[t]})),o}(t,e,this.world());return Object.keys(r).forEach((t=>{n.one.typeahead.hasOwnProperty(t)?delete n.one.typeahead[t]:n.one.typeahead[t]=r[t]})),this}};var lr={model:{one:{typeahead:{}}},api:function(t){t.prototype.autoFill=cr},lib:ar,compute:ir,hooks:["typeahead"]};return h.extend(W),h.extend(bn),h.extend(We),h.extend(zn),h.extend(co),h.plugin(bt),h.extend(sr),h.extend(Ot),h.plugin(d),h.extend(qt),h.extend(lr),h.extend(Tt),h.extend(Cn),h})); diff --git a/builds/one/compromise-one.mjs b/builds/one/compromise-one.mjs new file mode 100644 index 0000000..5c52fcb --- /dev/null +++ b/builds/one/compromise-one.mjs @@ -0,0 +1 @@ +var t={methods:{one:{},two:{},three:{},four:{}},model:{one:{},two:{},three:{}},compute:{},hooks:[]};const e={compute:function(t){const{world:e}=this,n=e.compute;return"string"==typeof t&&n.hasOwnProperty(t)?n[t](this):(t=>"[object Array]"===Object.prototype.toString.call(t))(t)?t.forEach((o=>{e.compute.hasOwnProperty(o)?n[o](this):console.warn("no compute:",t)})):"function"==typeof t?t(this):console.warn("no compute:",t),this}};var n={forEach:function(t){return this.fullPointer.forEach(((e,n)=>{const o=this.update([e]);t(o,n)})),this},map:function(t,e){const n=this.fullPointer.map(((e,n)=>{const o=this.update([e]),r=t(o,n);return void 0===r?this.none():r}));if(0===n.length)return e||this.update([]);if(void 0!==n[0]){if("string"==typeof n[0])return n;if("object"==typeof n[0]&&(null===n[0]||!n[0].isView))return n}let o=[];return n.forEach((t=>{o=o.concat(t.fullPointer)})),this.toView(o)},filter:function(t){let e=this.fullPointer;e=e.filter(((e,n)=>{const o=this.update([e]);return t(o,n)}));return this.update(e)},find:function(t){const e=this.fullPointer.find(((e,n)=>{const o=this.update([e]);return t(o,n)}));return this.update([e])},some:function(t){return this.fullPointer.some(((e,n)=>{const o=this.update([e]);return t(o,n)}))},random:function(t=1){let e=this.fullPointer,n=Math.floor(Math.random()*e.length);return n+t>this.length&&(n=this.length-t,n=n<0?0:n),e=e.slice(n,n+t),this.update(e)}};const o={termList:function(){return this.methods.one.termList(this.docs)},terms:function(t){const e=this.match(".");return"number"==typeof t?e.eq(t):e},groups:function(t){if(t||0===t)return this.update(this._groups[t]||[]);const e={};return Object.keys(this._groups).forEach((t=>{e[t]=this.update(this._groups[t])})),e},eq:function(t){let e=this.pointer;return e||(e=this.docs.map(((t,e)=>[e]))),e[t]?this.update([e[t]]):this.none()},first:function(){return this.eq(0)},last:function(){const t=this.fullPointer.length-1;return this.eq(t)},firstTerms:function(){return this.match("^.")},lastTerms:function(){return this.match(".$")},slice:function(t,e){let n=this.pointer||this.docs.map(((t,e)=>[e]));return n=n.slice(t,e),this.update(n)},all:function(){return this.update().toView()},fullSentences:function(){const t=this.fullPointer.map((t=>[t[0]]));return this.update(t).toView()},none:function(){return this.update([])},isDoc:function(t){if(!t||!t.isView)return!1;const e=this.fullPointer,n=t.fullPointer;return!e.length!==n.length&&e.every(((t,e)=>!!n[e]&&(t[0]===n[e][0]&&t[1]===n[e][1]&&t[2]===n[e][2])))},wordCount:function(){return this.docs.reduce(((t,e)=>(t+=e.filter((t=>""!==t.text)).length,t)),0)},isFull:function(){const t=this.pointer;if(!t)return!0;if(0===t.length||0!==t[0][0])return!1;let e=0,n=0;return this.document.forEach((t=>e+=t.length)),this.docs.forEach((t=>n+=t.length)),e===n},getNth:function(t){return"number"==typeof t?this.eq(t):"string"==typeof t?this.if(t):this}};o.group=o.groups,o.fullSentence=o.fullSentences,o.sentence=o.fullSentences,o.lastTerm=o.lastTerms,o.firstTerm=o.firstTerms;const r=Object.assign({},o,e,n);r.get=r.eq;class View{constructor(e,n,o={}){[["document",e],["world",t],["_groups",o],["_cache",null],["viewType","View"]].forEach((t=>{Object.defineProperty(this,t[0],{value:t[1],writable:!0})})),this.ptrs=n}get docs(){let e=this.document;return this.ptrs&&(e=t.methods.one.getDoc(this.ptrs,this.document)),e}get pointer(){return this.ptrs}get methods(){return this.world.methods}get model(){return this.world.model}get hooks(){return this.world.hooks}get isView(){return!0}get found(){return this.docs.length>0}get length(){return this.docs.length}get fullPointer(){const{docs:t,ptrs:e,document:n}=this,o=e||t.map(((t,e)=>[e]));return o.map((t=>{let[e,o,r,s,i]=t;return o=o||0,r=r||(n[e]||[]).length,n[e]&&n[e][o]&&(s=s||n[e][o].id,n[e][r-1]&&(i=i||n[e][r-1].id)),[e,o,r,s,i]}))}update(t){const e=new View(this.document,t);if(this._cache&&t&&t.length>0){const n=[];t.forEach(((t,e)=>{const[o,r,s]=t;(1===t.length||0===r&&this.document[o].length===s)&&(n[e]=this._cache[o])})),n.length>0&&(e._cache=n)}return e.world=this.world,e}toView(t){return new View(this.document,t||this.pointer)}fromText(t){const{methods:e}=this,n=e.one.tokenize.fromString(t,this.world),o=new View(n);return o.world=this.world,o.compute(["normal","freeze","lexicon"]),this.world.compute.preTagger&&o.compute("preTagger"),o.compute("unfreeze"),o}clone(){let t=this.document.slice(0);t=t.map((t=>t.map((t=>((t=Object.assign({},t)).tags=new Set(t.tags),t)))));const e=this.update(this.pointer);return e.document=t,e._cache=this._cache,e}}Object.assign(View.prototype,r);const s=function(t){return t&&"object"==typeof t&&!Array.isArray(t)};function i(t,e){if(s(e))for(const n in e)s(e[n])?(t[n]||Object.assign(t,{[n]:{}}),i(t[n],e[n])):Object.assign(t,{[n]:e[n]});return t}const c=function(t,e,n,o){if(r=t,"[object Array]"===Object.prototype.toString.call(r))return void t.forEach((t=>c(t,e,n,o)));var r;const{methods:s,model:u,compute:a,hooks:l}=e;t.methods&&function(t,e){for(const n in e)t[n]=t[n]||{},Object.assign(t[n],e[n])}(s,t.methods),t.model&&i(u,t.model),t.irregulars&&function(t,e){const n=t.two.models||{};Object.keys(e).forEach((t=>{e[t].pastTense&&(n.toPast&&(n.toPast.ex[t]=e[t].pastTense),n.fromPast&&(n.fromPast.ex[e[t].pastTense]=t)),e[t].presentTense&&(n.toPresent&&(n.toPresent.ex[t]=e[t].presentTense),n.fromPresent&&(n.fromPresent.ex[e[t].presentTense]=t)),e[t].gerund&&(n.toGerund&&(n.toGerund.ex[t]=e[t].gerund),n.fromGerund&&(n.fromGerund.ex[e[t].gerund]=t)),e[t].comparative&&(n.toComparative&&(n.toComparative.ex[t]=e[t].comparative),n.fromComparative&&(n.fromComparative.ex[e[t].comparative]=t)),e[t].superlative&&(n.toSuperlative&&(n.toSuperlative.ex[t]=e[t].superlative),n.fromSuperlative&&(n.fromSuperlative.ex[e[t].superlative]=t))}))}(u,t.irregulars),t.compute&&Object.assign(a,t.compute),l&&(e.hooks=l.concat(t.hooks||[])),t.api&&t.api(n),t.lib&&Object.keys(t.lib).forEach((e=>o[e]=t.lib[e])),t.tags&&o.addTags(t.tags),t.words&&o.addWords(t.words),t.frozen&&o.addWords(t.frozen,!0),t.mutate&&t.mutate(e,o)},u=function(t){return"[object Array]"===Object.prototype.toString.call(t)},a=function(t,e,n){const{methods:o}=n,r=new e([]);if(r.world=n,"number"==typeof t&&(t=String(t)),!t)return r;if("string"==typeof t){return new e(o.one.tokenize.fromString(t,n))}if(s=t,"[object Object]"===Object.prototype.toString.call(s)&&t.isView)return new e(t.document,t.ptrs);var s;if(u(t)){if(u(t[0])){const n=t.map((t=>t.map((t=>({text:t,normal:t,pre:"",post:" ",tags:new Set})))));return new e(n)}const n=t.map((t=>t.terms.map((t=>(u(t.tags)&&(t.tags=new Set(t.tags)),t)))));return new e(n)}return r},l=Object.assign({},t),h=function(t,e){e&&h.addWords(e);const n=a(t,View,l);return t&&n.compute(l.hooks),n};Object.defineProperty(h,"_world",{value:l,writable:!0}),h.tokenize=function(t,e){const{compute:n}=this._world;e&&h.addWords(e);const o=a(t,View,l);return n.contractions&&o.compute(["alias","normal","machine","contractions"]),o},h.plugin=function(t){return c(t,this._world,View,this),this},h.extend=h.plugin,h.world=function(){return this._world},h.model=function(){return this._world.model},h.methods=function(){return this._world.methods},h.hooks=function(){return this._world.hooks},h.verbose=function(t){const e="undefined"!=typeof process&&process.env?process.env:self.env||{};return e.DEBUG_TAGS="tagger"===t||!0===t||"",e.DEBUG_MATCH="match"===t||!0===t||"",e.DEBUG_CHUNKS="chunker"===t||!0===t||"",this},h.version="14.15.1";var f={one:{cacheDoc:function(t){const e=t.map((t=>{const e=new Set;return t.forEach((t=>{""!==t.normal&&e.add(t.normal),t.switch&&e.add(`%${t.switch}%`),t.implicit&&e.add(t.implicit),t.machine&&e.add(t.machine),t.root&&e.add(t.root),t.alias&&t.alias.forEach((t=>e.add(t)));const n=Array.from(t.tags);for(let t=0;t/^\p{Lu}[\p{Ll}'’]/u.test(t)||/^\p{Lu}$/u.test(t),w=(t,e,n)=>{if(n.forEach((t=>t.dirty=!0)),t){const o=[e,0].concat(n);Array.prototype.splice.apply(t,o)}return t},b=function(t){const e=t[t.length-1];!e||/ $/.test(e.post)||/[-–—]/.test(e.post)||(e.post+=" ")},y=(t,e,n)=>{const o=/[-.?!,;:)–—'"]/g,r=t[e-1];if(!r)return;const s=r.post;if(o.test(s)){const t=s.match(o).join(""),e=n[n.length-1];e.post=t+e.post,r.post=r.post.replace(o,"")}},v=function(t,e,n,o){const[r,s,i]=e;0===s||i===o[r].length?b(n):(b(n),b([t[e[1]]])),function(t,e,n){const o=t[e];if(0!==e||!m(o.text))return;n[0].text=n[0].text.replace(/^\p{Ll}/u,(t=>t.toUpperCase()));const r=t[e];r.tags.has("ProperNoun")||r.tags.has("Acronym")||m(r.text)&&r.text.length>1&&(r.text=(s=r.text,s.replace(/^\p{Lu}/u,(t=>t.toLowerCase()))));var s}(t,s,n),w(t,s,n)};let x=0;const j=t=>(t=t.length<3?"0"+t:t).length<3?"0"+t:t,E=function(t){let[e,n]=t.index||[0,0];x+=1,x=x>46655?0:x,e=e>46655?0:e,n=n>1294?0:n;let o=j(x.toString(36));o+=j(e.toString(36));let r=n.toString(36);r=r.length<2?"0"+r:r,o+=r;return o+=parseInt(36*Math.random(),10).toString(36),t.normal+"|"+o.toUpperCase()},O=function(t){if(t.has("@hasContraction")&&"function"==typeof t.contractions){t.grow("@hasContraction").contractions().expand()}},k=t=>"[object Array]"===Object.prototype.toString.call(t),P=function(t,e,n){const{document:o,world:r}=e;e.uncache();const s=e.fullPointer,i=e.fullPointer;e.forEach(((c,u)=>{const a=c.fullPointer[0],[l]=a,h=o[l];let f=function(t,e){const{methods:n}=e;return"string"==typeof t?n.one.tokenize.fromString(t,e)[0]:"object"==typeof t&&t.isView?t.clone().docs[0]||[]:k(t)?k(t[0])?t[0]:t:[]}(t,r);0!==f.length&&(f=function(t){return t.map((t=>(t.id=E(t),t)))}(f),n?(O(e.update([a]).firstTerm()),v(h,a,f,o)):(O(e.update([a]).lastTerm()),function(t,e,n,o){const[r,,s]=e,i=(o[r]||[]).length;st.replace(/^\p{Ll}/u,(t=>t.toUpperCase())),$=t=>t.replace(/^\p{Lu}/u,(t=>t.toLowerCase()));z.replaceWith=function(t,e={}){let n=this.fullPointer;const o=this;if(this.uncache(),"function"==typeof t)return function(t,e,n){return t.forEach((t=>{const o=e(t);t.replaceWith(o,n)})),t}(o,t,e);const r=o.docs[0];if(!r)return o;const s=e.possessives&&r[r.length-1].tags.has("Possessive"),i=e.case&&(c=r[0].text,/^\p{Lu}[\p{Ll}'’]/u.test(c)||/^\p{Lu}$/u.test(c));var c;t=function(t,e){if("string"!=typeof t)return t;const n=e.groups();return t=t.replace(S,(t=>{const e=t.replace(/\$/,"");return n.hasOwnProperty(e)?n[e].text():t})),t}(t,o);const u=this.update(n);n=n.map((t=>t.slice(0,3)));const a=(u.docs[0]||[]).map((t=>Array.from(t.tags))),l=u.docs[0][0].pre,h=u.docs[0][u.docs[0].length-1].post;if("string"==typeof t&&(t=this.fromText(t).compute("id")),o.insertAfter(t),u.has("@hasContraction")&&o.contractions){o.grow("@hasContraction+").contractions().expand()}if(o.delete(u),s){const t=o.docs[0],e=t[t.length-1];e.tags.has("Possessive")||(e.text+="'s",e.normal+="'s",e.tags.add("Possessive"))}if(l&&o.docs[0]&&(o.docs[0][0].pre=l),h&&o.docs[0]){const t=o.docs[0][o.docs[0].length-1];t.post.trim()||(t.post=h)}const f=o.toView(n).compute(["index","freeze","lexicon"]);if(f.world.compute.preTagger&&f.compute("preTagger"),f.compute("unfreeze"),e.tags&&f.terms().forEach(((t,e)=>{t.tagSafe(a[e])})),!f.docs[0]||!f.docs[0][0])return f;if(e.case){const t=i?A:$;f.docs[0][0].text=t(f.docs[0][0].text)}return f},z.replace=function(t,e,n){if(t&&!e)return this.replaceWith(t,n);const o=this.match(t);return o.found?(this.soften(),o.replaceWith(e,n)):this};const T={remove:function(t){const{indexN:e}=this.methods.one.pointer;this.uncache();let n=this.all(),o=this;t&&(n=this,o=this.match(t));const r=!n.ptrs;if(o.has("@hasContraction")&&o.contractions){o.grow("@hasContraction").contractions().expand()}let s=n.fullPointer;const i=o.fullPointer.reverse(),c=function(t,e){e.forEach((e=>{const[n,o,r]=e,s=r-o;t[n]&&(r===t[n].length&&r>1&&function(t,e){const n=t.length-1,o=t[n],r=t[n-e];r&&o&&(r.post+=o.post,r.post=r.post.replace(/ +([.?!,;:])/,"$1"),r.post=r.post.replace(/[,;:]+([.?!])/,"$1"))}(t[n],s),t[n].splice(o,s))}));for(let e=t.length-1;e>=0;e-=1)if(0===t[e].length&&(t.splice(e,1),e===t.length&&t[e-1])){const n=t[e-1],o=n[n.length-1];o&&(o.post=o.post.trimEnd())}return t}(this.document,i);if(s=function(t,e){return t=t.map((t=>{const[n]=t;return e[n]?(e[n].forEach((e=>{const n=e[2]-e[1];t[1]<=e[1]&&t[2]>=e[2]&&(t[2]-=n)})),t):t})),t.forEach(((e,n)=>{if(0===e[1]&&0==e[2])for(let e=n+1;et[2]-t[1]>0))).map((t=>(t[3]=null,t[4]=null,t)))}(s,e(i)),n.ptrs=s,n.document=c,n.compute("index"),r&&(n.ptrs=void 0),!t)return this.ptrs=[],n.none();return n.toView(s)}};T.delete=T.remove;const C={pre:function(t,e){return void 0===t&&this.found?this.docs[0][0].pre:(this.docs.forEach((n=>{const o=n[0];!0===e?o.pre+=t:o.pre=t})),this)},post:function(t,e){if(void 0===t){const t=this.docs[this.docs.length-1];return t[t.length-1].post}return this.docs.forEach((n=>{const o=n[n.length-1];!0===e?o.post+=t:o.post=t})),this},trim:function(){if(!this.found)return this;const t=this.docs,e=t[0][0];e.pre=e.pre.trimStart();const n=t[t.length-1],o=n[n.length-1];return o.post=o.post.trimEnd(),this},hyphenate:function(){return this.docs.forEach((t=>{t.forEach(((e,n)=>{0!==n&&(e.pre=""),t[n+1]&&(e.post="-")}))})),this},dehyphenate:function(){const t=/[-–—]/;return this.docs.forEach((e=>{e.forEach((e=>{t.test(e.post)&&(e.post=" ")}))})),this},toQuotations:function(t,e){return t=t||'"',e=e||'"',this.docs.forEach((n=>{n[0].pre=t+n[0].pre;const o=n[n.length-1];o.post=e+o.post})),this},toParentheses:function(t,e){return t=t||"(",e=e||")",this.docs.forEach((n=>{n[0].pre=t+n[0].pre;const o=n[n.length-1];o.post=e+o.post})),this}};C.deHyphenate=C.dehyphenate,C.toQuotation=C.toQuotations;var L={alpha:(t,e)=>t.normale.normal?1:0,length:(t,e)=>{const n=t.normal.trim().length,o=e.normal.trim().length;return no?-1:0},wordCount:(t,e)=>t.wordse.words?-1:0,sequential:(t,e)=>t[0]e[0]?-1:t[1]>e[1]?1:-1,byFreq:function(t){const e={};return t.forEach((t=>{e[t.normal]=e[t.normal]||0,e[t.normal]+=1})),t.sort(((t,n)=>{const o=e[t.normal],r=e[n.normal];return or?-1:0})),t}};const N=new Set(["index","sequence","seq","sequential","chron","chronological"]),V=new Set(["freq","frequency","topk","repeats"]),F=new Set(["alpha","alphabetical"]);var q={unique:function(){const t=new Set;return this.filter((e=>{const n=e.text("machine");return!t.has(n)&&(t.add(n),!0)}))},reverse:function(){let t=this.pointer||this.docs.map(((t,e)=>[e]));return t=[].concat(t),t=t.reverse(),this._cache&&(this._cache=this._cache.reverse()),this.update(t)},sort:function(t){const{docs:e,pointer:n}=this;if(this.uncache(),"function"==typeof t)return function(t,e){let n=t.fullPointer;return n=n.sort(((n,o)=>(n=t.update([n]),o=t.update([o]),e(n,o)))),t.ptrs=n,t}(this,t);t=t||"alpha";const o=n||e.map(((t,e)=>[e]));let r=e.map(((t,e)=>({index:e,words:t.length,normal:t.map((t=>t.machine||t.normal||"")).join(" "),pointer:o[e]})));return N.has(t)&&(t="sequential"),F.has(t)&&(t="alpha"),V.has(t)?(r=L.byFreq(r),this.update(r.map((t=>t.pointer)))):"function"==typeof L[t]?(r=r.sort(L[t]),this.update(r.map((t=>t.pointer)))):this}};const G=function(t,e){if(t.length>0){const e=t[t.length-1],n=e[e.length-1];!1===/ /.test(n.post)&&(n.post+=" ")}return t=t.concat(e)};var B={concat:function(t){if("string"==typeof t){const e=this.fromText(t);if(this.found&&this.ptrs){const t=this.fullPointer,n=t[t.length-1][0];this.document.splice(n,0,...e.document)}else this.document=this.document.concat(e.document);return this.all().compute("index")}if("object"==typeof t&&t.isView)return function(t,e){if(t.document===e.document){const n=t.fullPointer.concat(e.fullPointer);return t.toView(n).compute("index")}return e.fullPointer.forEach((e=>{e[0]+=t.document.length})),t.document=G(t.document,e.docs),t.all()}(this,t);if(e=t,"[object Array]"===Object.prototype.toString.call(e)){const e=G(this.document,t);return this.document=e,this.all()}var e;return this}};var D={harden:function(){return this.ptrs=this.fullPointer,this},soften:function(){let t=this.ptrs;return!t||t.length<1||(t=t.map((t=>t.slice(0,3))),this.ptrs=t),this}};const M=Object.assign({},{toLowerCase:function(){return this.termList().forEach((t=>{t.text=t.text.toLowerCase()})),this},toUpperCase:function(){return this.termList().forEach((t=>{t.text=t.text.toUpperCase()})),this},toTitleCase:function(){return this.termList().forEach((t=>{t.text=t.text.replace(/^ *[a-z\u00C0-\u00FF]/,(t=>t.toUpperCase()))})),this},toCamelCase:function(){return this.docs.forEach((t=>{t.forEach(((e,n)=>{0!==n&&(e.text=e.text.replace(/^ *[a-z\u00C0-\u00FF]/,(t=>t.toUpperCase()))),n!==t.length-1&&(e.post="")}))})),this}},_,z,T,C,q,B,D),U={id:function(t){const e=t.docs;for(let t=0;t(t.implicit=t.text,t.machine=t.text,t.pre="",t.post="",t.text="",t.normal="",t.index=[o,r+e],t))),n[0]&&(n[0].pre=t[o][r].pre,n[n.length-1].post=t[o][r].post,n[0].text=t[o][r].text,n[0].normal=t[o][r].normal),t[o].splice(r,1,...n))},H=/'/,Z=new Set(["what","how","when","where","why"]),K=new Set(["be","go","start","think","need"]),J=new Set(["been","gone"]),X=/'/,Y=/(e|é|aison|sion|tion)$/,tt=/(age|isme|acle|ege|oire)$/;var et=(t,e)=>["je",t[e].normal.split(X)[1]],nt=(t,e)=>{const n=t[e].normal.split(X)[1];return n&&n.endsWith("e")?["la",n]:["le",n]},ot=(t,e)=>{const n=t[e].normal.split(X)[1];return n&&Y.test(n)&&!tt.test(n)?["du",n]:n&&n.endsWith("s")?["des",n]:["de",n]};const rt=/^([0-9.]{1,4}[a-z]{0,2}) ?[-–—] ?([0-9]{1,4}[a-z]{0,2})$/i,st=/^([0-9]{1,2}(:[0-9][0-9])?(am|pm)?) ?[-–—] ?([0-9]{1,2}(:[0-9][0-9])?(am|pm)?)$/i,it=/^[0-9]{3}-[0-9]{4}$/,ct=function(t,e){const n=t[e];let o=n.text.match(rt);return null!==o?!0===n.tags.has("PhoneNumber")||it.test(n.text)?null:[o[1],"to",o[2]]:(o=n.text.match(st),null!==o?[o[1],"to",o[4]]:null)},ut=/^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/,at=function(t,e,n){const o=n.model.one.numberSuffixes||{},r=t[e].text.match(ut);if(null!==r){const t=r[2].toLowerCase().trim();return o.hasOwnProperty(t)?null:[r[1],t]}return null},lt=/'/,ht=/^[0-9][^-–—]*[-–—].*?[0-9]/,ft=function(t,e,n,o){const r=e.update();r.document=[t];let s=n+o;n>0&&(n-=1),t[s]&&(s+=1),r.ptrs=[[0,n,s]]},pt={t:(t,e)=>function(t,e){return"ain't"===t[e].normal||"aint"===t[e].normal?null:[t[e].normal.replace(/n't/,""),"not"]}(t,e),d:(t,e)=>function(t,e){const n=t[e].normal.split(H)[0];if(Z.has(n))return[n,"did"];if(t[e+1]){if(J.has(t[e+1].normal))return[n,"had"];if(K.has(t[e+1].normal))return[n,"would"]}return null}(t,e)},dt={j:(t,e)=>et(t,e),l:(t,e)=>nt(t,e),d:(t,e)=>ot(t,e)},mt=function(t,e,n,o){for(let r=0;r2)return s.out.concat(o)}return null},gt=function(t,e){const n=e.fromText(t.join(" "));return n.compute(["id","alias"]),n.docs[0]},wt=function(t,e){for(let n=e+1;n<5&&t[n];n+=1)if("been"===t[n].normal)return["there","has"];return["there","is"]};var bt={contractions:t=>{const{world:e,document:n}=t,{model:o,methods:r}=e,s=o.one.contractions||[];n.forEach(((o,i)=>{for(let c=o.length-1;c>=0;c-=1){let u=null,a=null;if(!0===lt.test(o[c].normal)){const t=o[c].normal.split(lt);u=t[0],a=t[1]}let l=mt(s,o[c],u,a);!l&&pt.hasOwnProperty(a)&&(l=pt[a](o,c,e)),!l&&dt.hasOwnProperty(u)&&(l=dt[u](o,c)),"there"===u&&"s"===a&&(l=wt(o,c)),l?(l=gt(l,t),Q(n,[i,c],l),ft(n[i],t,c,l.length)):ht.test(o[c].normal)?(l=ct(o,c),l&&(l=gt(l,t),Q(n,[i,c],l),r.one.setTag(l,"NumberRange",e),l[2]&&l[2].tags.has("Time")&&r.one.setTag([l[0]],"Time",e,null,"time-range"),ft(n[i],t,c,l.length))):(l=at(o,c,e),l&&(l=gt(l,t),Q(n,[i,c],l),r.one.setTag([l[1]],"Unit",e,null,"contraction-unit")))}}))}};const yt={model:R,compute:bt,hooks:["contractions"]},vt=function(t){const e=t.world,{model:n,methods:o}=t.world,r=o.one.setTag,{frozenLex:s}=n.one,i=n.one._multiCache||{};t.docs.forEach((t=>{for(let n=0;nn;o-=1){const i=t.slice(n,o+1),c=i.map((t=>t.machine||t.normal)).join(" ");!0!==s.hasOwnProperty(c)||(r(i,s[c],e,!1,"1-frozen-multi-lexicon"),i.forEach((t=>t.frozen=!0)))}}void 0!==s[c]&&s.hasOwnProperty(c)&&(r([o],s[c],e,!1,"1-freeze-lexicon"),o.frozen=!0)}}))};const xt=t=>""+t+"",jt=t=>""+t+"",Et=function(t){t.docs.forEach((t=>{console.log(xt("\n ┌─────────")),t.forEach((t=>{let e=` ${jt("│")} `;const n=t.implicit||t.text||"-";!0===t.frozen?e+=`${xt(n)} ❄️`:e+=jt(n),console.log(e)}))}))};var Ot={compute:{frozen:vt,freeze:vt,unfreeze:function(t){return t.docs.forEach((t=>{t.forEach((t=>{delete t.frozen}))})),t}},mutate:t=>{const e=t.methods.one;e.termMethods.isFrozen=t=>!0===t.frozen,e.debug.freeze=Et,e.debug.frozen=Et},api:function(t){t.prototype.freeze=function(){return this.docs.forEach((t=>{t.forEach((t=>{t.frozen=!0}))})),this},t.prototype.unfreeze=function(){this.compute("unfreeze")},t.prototype.isFrozen=function(){return this.match("@isFrozen+")}},hooks:["freeze"]};const kt=function(t,e,n){const{model:o,methods:r}=n,s=r.one.setTag,i=o.one._multiCache||{},{lexicon:c}=o.one||{},u=t[e],a=u.machine||u.normal;if(void 0!==i[a]&&t[e+1]){for(let o=e+i[a]-1;o>e;o-=1){const r=t.slice(e,o+1);if(r.length<=1)return!1;const i=r.map((t=>t.machine||t.normal)).join(" ");if(!0===c.hasOwnProperty(i)){const t=c[i];return s(r,t,n,!1,"1-multi-lexicon"),!t||2!==t.length||"PhrasalVerb"!==t[0]&&"PhrasalVerb"!==t[1]||s([r[1]],"Particle",n,!1,"1-phrasal-particle"),!0}}return!1}return null},Pt=/^(under|over|mis|re|un|dis|semi|pre|post)-?/,_t=new Set(["Verb","Infinitive","PastTense","Gerund","PresentTense","Adjective","Participle"]),St=function(t,e,n){const{model:o,methods:r}=n,s=r.one.setTag,{lexicon:i}=o.one,c=t[e],u=c.machine||c.normal;if(void 0!==i[u]&&i.hasOwnProperty(u))return s([c],i[u],n,!1,"1-lexicon"),!0;if(c.alias){const t=c.alias.find((t=>i.hasOwnProperty(t)));if(t)return s([c],i[t],n,!1,"1-lexicon-alias"),!0}if(!0===Pt.test(u)){const t=u.replace(Pt,"");if(i.hasOwnProperty(t)&&t.length>3&&_t.has(i[t]))return s([c],i[t],n,!1,"1-lexicon-prefix"),!0}return null};var zt={lexicon:function(t){const e=t.world;t.docs.forEach((t=>{for(let n=0;n{const r=t[o],s=(o=(o=o.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);s.length>1&&(void 0===n[s[0]]||s.length>n[s[0]])&&(n[s[0]]=s.length),e[o]=e[o]||r})),delete e[""],delete e.null,delete e[" "],{lex:e,_multi:n}}}};var $t={addWords:function(t,e=!1){const n=this.world(),{methods:o,model:r}=n;if(!t)return;if(Object.keys(t).forEach((e=>{"string"==typeof t[e]&&t[e].startsWith("#")&&(t[e]=t[e].replace(/^#/,""))})),!0===e){const{lex:e,_multi:s}=o.one.expandLexicon(t,n);return Object.assign(r.one._multiCache,s),void Object.assign(r.one.frozenLex,e)}if(o.two.expandLexicon){const{lex:e,_multi:s}=o.two.expandLexicon(t,n);Object.assign(r.one.lexicon,e),Object.assign(r.one._multiCache,s)}const{lex:s,_multi:i}=o.one.expandLexicon(t,n);Object.assign(r.one.lexicon,s),Object.assign(r.one._multiCache,i)}};var Tt={model:{one:{lexicon:{},_multiCache:{},frozenLex:{}}},methods:At,compute:zt,lib:$t,hooks:["lexicon"]};const Ct=function(t,e){const n=[{}],o=[null],r=[0],s=[];let i=0;t.forEach((function(t){let r=0;const s=function(t,e){const{methods:n,model:o}=e,r=n.one.tokenize.splitTerms(t,o).map((t=>n.one.tokenize.splitWhitespace(t,o)));return r.map((t=>t.text.toLowerCase()))}(t,e);for(let t=0;t0&&!n[i].hasOwnProperty(u);)i=r[i];if(n.hasOwnProperty(i)){const t=n[i][u];r[a]=t,o[t]&&(o[a]=o[a]||[],o[a]=o[a].concat(o[t]))}else r[a]=0}}return{goNext:n,endAs:o,failTo:r}},Lt=function(t,e,n){let o=0;const r=[];for(let s=0;s0&&(void 0===e.goNext[o]||!e.goNext[o].hasOwnProperty(i));)o=e.failTo[o]||0;if(e.goNext[o].hasOwnProperty(i)&&(o=e.goNext[o][i],e.endAs[o])){const n=e.endAs[o];for(let e=0;e{for(let n=t.length-1;n>=0;n-=1)if(t[n]!==e)return t=t.slice(0,n+1);return t},Ft={buildTrie:function(t){return function(t){return t.goNext=t.goNext.map((t=>{if(0!==Object.keys(t).length)return t})),t.goNext=Vt(t.goNext,void 0),t.failTo=Vt(t.failTo,0),t.endAs=Vt(t.endAs,null),t}(Ct(t,this.world()))}};Ft.compile=Ft.buildTrie;var qt={api:function(t){t.prototype.lookup=function(t,e={}){if(!t)return this.none();"string"==typeof t&&(t=[t]);var n;let o=function(t,e,n){let o=[];n.form=n.form||"normal";const r=t.docs;if(!e.goNext||!e.goNext[0])return console.error("Compromise invalid lookup trie"),t.none();const s=Object.keys(e.goNext[0]);for(let i=0;i0&&(o=o.concat(u))}return t.update(o)}(this,(n=t,"[object Object]"===Object.prototype.toString.call(n)?t:Ct(t,this.world)),e);return o=o.settle(),o}},lib:Ft};const Gt=function(t,e){return e?(t.forEach((t=>{const n=t[0];e[n]&&(t[0]=e[n][0],t[1]+=e[n][1],t[2]+=e[n][1])})),t):t},Bt=function(t,e){let{ptrs:n}=t;const{byGroup:o}=t;return n=Gt(n,e),Object.keys(o).forEach((t=>{o[t]=Gt(o[t],e)})),{ptrs:n,byGroup:o}},Dt=function(t,e,n){const o=n.methods.one;return"number"==typeof t&&(t=String(t)),"string"==typeof t&&(t=o.killUnicode(t,n),t=o.parseMatch(t,e,n)),t},Mt=t=>"[object Object]"===Object.prototype.toString.call(t),Ut=t=>t&&Mt(t)&&!0===t.isView,Wt=t=>t&&Mt(t)&&!0===t.isNet;var It={matchOne:function(t,e,n){const o=this.methods.one;if(Ut(t))return this.intersection(t).eq(0);if(Wt(t))return this.sweep(t,{tagger:!1,matchOne:!0}).view;const r={regs:t=Dt(t,n,this.world),group:e,justOne:!0},s=o.match(this.docs,r,this._cache),{ptrs:i,byGroup:c}=Bt(s,this.fullPointer),u=this.toView(i);return u._groups=c,u},match:function(t,e,n){const o=this.methods.one;if(Ut(t))return this.intersection(t);if(Wt(t))return this.sweep(t,{tagger:!1}).view.settle();const r={regs:t=Dt(t,n,this.world),group:e},s=o.match(this.docs,r,this._cache),{ptrs:i,byGroup:c}=Bt(s,this.fullPointer),u=this.toView(i);return u._groups=c,u},has:function(t,e,n){const o=this.methods.one;if(Ut(t)){return this.intersection(t).fullPointer.length>0}if(Wt(t))return this.sweep(t,{tagger:!1}).view.found;const r={regs:t=Dt(t,n,this.world),group:e,justOne:!0};return o.match(this.docs,r,this._cache).ptrs.length>0},if:function(t,e,n){const o=this.methods.one;if(Ut(t))return this.filter((e=>e.intersection(t).found));if(Wt(t)){const e=this.sweep(t,{tagger:!1}).view.settle();return this.if(e)}const r={regs:t=Dt(t,n,this.world),group:e,justOne:!0};let s=this.fullPointer;const i=this._cache||[];s=s.filter(((t,e)=>{const n=this.update([t]);return o.match(n.docs,r,i[e]).ptrs.length>0}));const c=this.update(s);return this._cache&&(c._cache=s.map((t=>i[t[0]]))),c},ifNo:function(t,e,n){const{methods:o}=this,r=o.one;if(Ut(t))return this.filter((e=>!e.intersection(t).found));if(Wt(t)){const e=this.sweep(t,{tagger:!1}).view.settle();return this.ifNo(e)}t=Dt(t,n,this.world);const s=this._cache||[],i=this.filter(((n,o)=>{const i={regs:t,group:e,justOne:!0};return 0===r.match(n.docs,i,s[o]).ptrs.length}));return this._cache&&(i._cache=i.ptrs.map((t=>s[t[0]]))),i}};var Rt={before:function(t,e,n){const{indexN:o}=this.methods.one.pointer,r=[],s=o(this.fullPointer);Object.keys(s).forEach((t=>{const e=s[t].sort(((t,e)=>t[1]>e[1]?1:-1))[0];e[1]>0&&r.push([e[0],0,e[1]])}));const i=this.toView(r);return t?i.match(t,e,n):i},after:function(t,e,n){const{indexN:o}=this.methods.one.pointer,r=[],s=o(this.fullPointer),i=this.document;Object.keys(s).forEach((t=>{const e=s[t].sort(((t,e)=>t[1]>e[1]?-1:1))[0],[n,,o]=e;o{const s=n.before(t,e);if(s.found){const t=s.terms();o[r][1]-=t.length,o[r][3]=t.docs[0][0].id}})),this.update(o)},growRight:function(t,e,n){"string"==typeof t&&(t=this.world.methods.one.parseMatch(t,n,this.world)),t[0].start=!0;const o=this.fullPointer;return this.forEach(((n,r)=>{const s=n.after(t,e);if(s.found){const t=s.terms();o[r][2]+=t.length,o[r][4]=null}})),this.update(o)},grow:function(t,e,n){return this.growRight(t,e,n).growLeft(t,e,n)}};const Qt=function(t,e){return[t[0],t[1],e[2]]},Ht=(t,e,n)=>{return"string"==typeof t||(o=t,"[object Array]"===Object.prototype.toString.call(o))?e.match(t,n):t||e.none();var o},Zt=function(t,e){const[n,o,r]=t;return e.document[n]&&e.document[n][o]&&(t[3]=t[3]||e.document[n][o].id,e.document[n][r-1]&&(t[4]=t[4]||e.document[n][r-1].id)),t},Kt={splitOn:function(t,e){const{splitAll:n}=this.methods.one.pointer,o=Ht(t,this,e).fullPointer,r=n(this.fullPointer,o);let s=[];return r.forEach((t=>{s.push(t.passthrough),s.push(t.before),s.push(t.match),s.push(t.after)})),s=s.filter((t=>t)),s=s.map((t=>Zt(t,this))),this.update(s)},splitBefore:function(t,e){const{splitAll:n}=this.methods.one.pointer,o=Ht(t,this,e).fullPointer,r=n(this.fullPointer,o);for(let t=0;t{s.push(t.passthrough),s.push(t.before),t.match&&t.after?s.push(Qt(t.match,t.after)):s.push(t.match)})),s=s.filter((t=>t)),s=s.map((t=>Zt(t,this))),this.update(s)},splitAfter:function(t,e){const{splitAll:n}=this.methods.one.pointer,o=Ht(t,this,e).fullPointer,r=n(this.fullPointer,o);let s=[];return r.forEach((t=>{s.push(t.passthrough),t.before&&t.match?s.push(Qt(t.before,t.match)):(s.push(t.before),s.push(t.match)),s.push(t.after)})),s=s.filter((t=>t)),s=s.map((t=>Zt(t,this))),this.update(s)}};Kt.split=Kt.splitAfter;const Jt=function(t,e){return!(!t||!e)&&(t[0]===e[0]&&t[2]===e[1])},Xt=function(t,e,n){const o=t.world,r=o.methods.one.parseMatch;n=n||"^.";const s=r(e=e||".$",{},o),i=r(n,{},o);s[s.length-1].end=!0,i[0].start=!0;const c=t.fullPointer,u=[c[0]];for(let e=1;e)?\/.*?[^\\/]\/[?\]+*$~]*)(?:\s|$)/,ne=/([!~[^]*(?:<[^<]*>)?\([^)]+[^\\)]\)[?\]+*$~]*)(?:\s|$)/,oe=/ /g,re=t=>/^[![^]*(<[^<]*>)?\//.test(t)&&/\/[?\]+*$~]*$/.test(t),se=function(t){return t=(t=t.map((t=>t.trim()))).filter((t=>t))},ie=/\{([0-9]+)?(, *[0-9]*)?\}/,ce=/&&/,ue=new RegExp(/^<\s*(\S+)\s*>/),ae=t=>t.charAt(0).toUpperCase()+t.substring(1),le=t=>t.charAt(t.length-1),he=t=>t.charAt(0),fe=t=>t.substring(1),pe=t=>t.substring(0,t.length-1),de=function(t){return t=fe(t),t=pe(t)},me=function(t,e){const n={};for(let o=0;o<2;o+=1){if("$"===le(t)&&(n.end=!0,t=pe(t)),"^"===he(t)&&(n.start=!0,t=fe(t)),"?"===le(t)&&(n.optional=!0,t=pe(t)),("["===he(t)||"]"===le(t))&&(n.group=null,"["===he(t)&&(n.groupStart=!0),"]"===le(t)&&(n.groupEnd=!0),t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===he(t))){const e=ue.exec(t);e.length>=2&&(n.group=e[1],t=t.replace(e[0],""))}if("+"===le(t)&&(n.greedy=!0,t=pe(t)),"*"!==t&&"*"===le(t)&&"\\*"!==t&&(n.greedy=!0,t=pe(t)),"!"===he(t)&&(n.negative=!0,t=fe(t)),"~"===he(t)&&"~"===le(t)&&t.length>2&&(t=de(t),n.fuzzy=!0,n.min=e.fuzzy||.85,!1===/\(/.test(t)))return n.word=t,n;if("/"===he(t)&&"/"===le(t))return t=de(t),e.caseSensitive&&(n.use="text"),n.regex=new RegExp(t),n;if(!0===ie.test(t)&&(t=t.replace(ie,((t,e,o)=>(void 0===o?(n.min=Number(e),n.max=Number(e)):(o=o.replace(/, */,""),void 0===e?(n.min=0,n.max=Number(o)):(n.min=Number(e),n.max=Number(o||999))),n.greedy=!0,n.min||(n.optional=!0),"")))),"("===he(t)&&")"===le(t)){ce.test(t)?(n.choices=t.split(ce),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=fe(n.choices[0]);const o=n.choices.length-1;n.choices[o]=pe(n.choices[o]),n.choices=n.choices.map((t=>t.trim())),n.choices=n.choices.filter((t=>t)),n.choices=n.choices.map((t=>t.split(/ /g).map((t=>me(t,e))))),t=""}if("{"===he(t)&&"}"===le(t)){if(t=de(t),n.root=t,/\//.test(t)){const t=n.root.split(/\//);n.root=t[0],n.pos=t[1],"adj"===n.pos&&(n.pos="Adjective"),n.pos=n.pos.charAt(0).toUpperCase()+n.pos.substr(1).toLowerCase(),void 0!==t[2]&&(n.sense=t[2])}return n}if("<"===he(t)&&">"===le(t))return t=de(t),n.chunk=ae(t),n.greedy=!0,n;if("%"===he(t)&&"%"===le(t))return t=de(t),n.switch=t,n}return"#"===he(t)?(n.tag=fe(t),n.tag=ae(n.tag),n):"@"===he(t)?(n.method=fe(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),e.caseSensitive?n.use="text":t=t.toLowerCase(),n.word=t),n)},ge=/[a-z0-9][-–—][a-z]/i,we=function(t,e){const{all:n}=e.methods.two.transform.verb||{},o=t.root;return n?n(o,e.model):[]},be=function(t,e){const{all:n}=e.methods.two.transform.noun||{};return n?n(t.root,e.model):[t.root]},ye=function(t,e){const{all:n}=e.methods.two.transform.adjective||{};return n?n(t.root,e.model):[t.root]},ve=function(t){return t=function(t){let e=0,n=null;for(let o=0;o(t.fuzzy&&t.choices&&t.choices.forEach((e=>{1===e.length&&e[0].word&&(e[0].fuzzy=!0,e[0].min=t.min)})),t)))}(t=t.map((t=>{if(void 0!==t.choices){if("or"!==t.operator)return t;if(!0===t.fuzzy)return t;!0===t.choices.every((t=>{if(1!==t.length)return!1;const e=t[0];return!0!==e.fuzzy&&!e.start&&!e.end&&void 0!==e.word&&!0!==e.negative&&!0!==e.optional&&!0!==e.method}))&&(t.fastOr=new Set,t.choices.forEach((e=>{t.fastOr.add(e[0].word)})),delete t.choices)}return t}))),t},xe=function(t,e){for(const n of e)if(t.has(n))return!0;return!1},je=function(t,e){for(let n=0;nn?o:n)+1;if(Math.abs(n-o)>(r||100))return r||100;const s=[];for(let t=0;t4)return n;u=e[i-1],a=c===u?0:1,l=s[r-1][i]+1,(h=s[r][i-1]+1)1&&i>1&&c===e[i-2]&&t[r-2]===u&&(h=s[r-2][i-2]+a)-1!==t.post.indexOf(e),ze={hasQuote:t=>Oe.test(t.pre)||ke.test(t.post),hasComma:t=>Se(t,","),hasPeriod:t=>!0===Se(t,".")&&!1===Se(t,"..."),hasExclamation:t=>Se(t,"!"),hasQuestionMark:t=>Se(t,"?")||Se(t,"¿"),hasEllipses:t=>Se(t,"..")||Se(t,"…"),hasSemicolon:t=>Se(t,";"),hasColon:t=>Se(t,":"),hasSlash:t=>/\//.test(t.text),hasHyphen:t=>Pe.test(t.post)||Pe.test(t.pre),hasDash:t=>_e.test(t.post)||_e.test(t.pre),hasContraction:t=>Boolean(t.implicit),isAcronym:t=>t.tags.has("Acronym"),isKnown:t=>t.tags.size>0,isTitleCase:t=>/^\p{Lu}[a-z'\u00C0-\u00FF]/u.test(t.text),isUpperCase:t=>/^\p{Lu}+$/u.test(t.text)};ze.hasQuotation=ze.hasQuote;let Ae=function(){};Ae=function(t,e,n,o){const r=function(t,e,n,o){if(!0===e.anything)return!0;if(!0===e.start&&0!==n)return!1;if(!0===e.end&&n!==o-1)return!1;if(void 0!==e.id&&e.id===t.id)return!0;if(void 0!==e.word){if(e.use)return e.word===t[e.use];if(null!==t.machine&&t.machine===e.word)return!0;if(void 0!==t.alias&&t.alias.hasOwnProperty(e.word))return!0;if(!0===e.fuzzy){if(e.word===t.root)return!0;if(Ee(e.word,t.normal)>=e.min)return!0}return!(!t.alias||!t.alias.some((t=>t===e.word)))||e.word===t.text||e.word===t.normal}if(void 0!==e.tag)return!0===t.tags.has(e.tag);if(void 0!==e.method)return"function"==typeof ze[e.method]&&!0===ze[e.method](t);if(void 0!==e.pre)return t.pre&&t.pre.includes(e.pre);if(void 0!==e.post)return t.post&&t.post.includes(e.post);if(void 0!==e.regex){let n=t.normal;return e.use&&(n=t[e.use]),e.regex.test(n)}if(void 0!==e.chunk)return t.chunk===e.chunk;if(void 0!==e.switch)return t.switch===e.switch;if(void 0!==e.machine)return t.normal===e.machine||t.machine===e.machine||t.root===e.machine;if(void 0!==e.sense)return t.sense===e.sense;if(void 0!==e.fastOr){if(e.pos&&!t.tags.has(e.pos))return null;const n=t.root||t.implicit||t.machine||t.normal;return e.fastOr.has(n)||e.fastOr.has(t.text)}return void 0!==e.choices&&("and"===e.operator?e.choices.every((e=>Ae(t,e,n,o))):e.choices.some((e=>Ae(t,e,n,o))))}(t,e,n,o);return!0===e.negative?!r:r};const $e=function(t,e){if(!0===t.end&&!0===t.greedy&&e.start_i+e.tn.max)return t.t=t.t+n.max,!0;if(!0===t.hasGroup){Te(t,t.t).length=o-t.t}return t.t=o,!0},Le=function(t,e=0){const n=t.regs[t.r];let o=!1;for(let s=0;s{let r=0;const s=t.t+o+e+r;if(void 0===t.terms[s])return!1;const i=Ae(t.terms[s],n,s+t.start_i,t.phrase_length);if(!0===i&&!0===n.greedy)for(let e=1;e{const o=n.every(((e,n)=>{const o=t.t+n;return void 0!==t.terms[o]&&Ae(t.terms[o],e,o,t.phrase_length)}));return!0===o&&n.length>e&&(e=n.length),o}))&&e}(t);if(o){if(!0===n.negative)return null;if(!0===t.hasGroup){Te(t,t.t).length+=o}if(!0===n.end){const e=t.phrase_length-1;if(t.t+t.start_i!==e)return null}return t.t+=o,!0}return!!n.optional||null},Fe=function(t){const{regs:e}=t,n=e[t.r],o=Object.assign({},n);o.negative=!1;if(Ae(t.terms[t.t],o,t.start_i+t.t,t.phrase_length))return!1;if(n.optional){const n=e[t.r+1];if(n){if(Ae(t.terms[t.t],n,t.start_i+t.t,t.phrase_length))t.r+=1;else if(n.optional&&e[t.r+2]){Ae(t.terms[t.t],e[t.r+2],t.start_i+t.t,t.phrase_length)&&(t.r+=2)}}}return n.greedy?function(t,e,n){let o=0;for(let r=t.t;ro||(t.t+=o,0))}(t,o,e[t.r+1]):(t.t+=1,!0)},qe=function(t){const{regs:e,phrase_length:n}=t,o=e[t.r];return t.t=function(t,e){const n=Object.assign({},t.regs[t.r],{start:!1,end:!1}),o=t.t;for(;t.tt.t?null:!0!==o.end||t.start_i+t.t===n||null},Ge=function(t){const{regs:e}=t,n=e[t.r],o=t.terms[t.t],r=t.t;if(n.optional&&e[t.r+1]&&n.negative)return!0;if(n.optional&&e[t.r+1]&&function(t){const{regs:e}=t,n=e[t.r],o=t.terms[t.t],r=Ae(o,e[t.r+1],t.start_i+t.t,t.phrase_length);if(n.negative||r){const n=t.terms[t.t+1];n&&Ae(n,e[t.r+1],t.start_i+t.t,t.phrase_length)||(t.r+=1)}}(t),o.implicit&&t.terms[t.t+1]&&function(t){const e=t.terms[t.t],n=t.regs[t.r];if(e.implicit&&t.terms[t.t+1]){if(!t.terms[t.t+1].implicit)return;n.word===e.normal&&(t.t+=1),"hasContraction"===n.method&&(t.t+=1)}}(t),t.t+=1,!0===n.end&&t.t!==t.terms.length&&!0!==n.greedy)return null;if(!0===n.greedy){if(!qe(t))return null}return!0===t.hasGroup&&function(t,e){const n=t.regs[t.r],o=Te(t,e);t.t>1&&n.greedy?o.length+=t.t-e:o.length++}(t,r),!0},Be=function(t,e,n,o){if(0===t.length||0===e.length)return null;const r={t:0,terms:t,r:0,regs:e,groups:{},start_i:n,phrase_length:o,inGroup:null};for(;r.r!t.optional)))break;return null}if(!0===t.anything&&!0===t.greedy){if(!Ce(r))return null;continue}if(void 0!==t.choices&&"or"===t.operator){if(!Ne(r))return null;continue}if(void 0!==t.choices&&"and"===t.operator){if(!Ve(r))return null;continue}if(!0===t.anything){if(t.negative&&t.anything)return null;if(!Ge(r))return null;continue}if(!0===$e(t,r)){if(!Ge(r))return null;continue}if(t.negative){if(!Fe(r))return null;continue}if(!0!==Ae(r.terms[r.t],t,r.start_i+r.t,r.phrase_length)){if(!0!==t.optional)return null}else{if(!Ge(r))return null}}const s=[null,n,r.t+n];if(s[1]===s[2])return null;const i={};return Object.keys(r.groups).forEach((t=>{const e=r.groups[t],o=n+e.start;i[t]=[null,o,o+e.length]})),{pointer:s,groups:i}},De=function(t,e){return t.pointer[0]=e,Object.keys(t.groups).forEach((n=>{t.groups[n][0]=e})),t},Me=function(t,e,n){let o=Be(t,e,0,t.length);return o?(o=De(o,n),o):null},Ue={one:{termMethods:ze,parseMatch:function(t,e,n){if(null==t||""===t)return[];e=e||{},"number"==typeof t&&(t=String(t));let o=function(t){const e=t.split(ee);let n=[];e.forEach((t=>{re(t)?n.push(t):n=n.concat(t.split(ne))})),n=se(n);let o=[];return n.forEach((t=>{(t=>/^[![^]*(<[^<]*>)?\(/.test(t)&&/\)[?\]+*$~]*$/.test(t))(t)||re(t)?o.push(t):o=o.concat(t.split(oe))})),o=se(o),o}(t);return o=o.map((t=>me(t,e))),o=function(t,e){const n=e.model.one.prefixes;for(let e=t.length-1;e>=0;e-=1){const o=t[e];if(o.word&&ge.test(o.word)){let r=o.word.split(/[-–—]/g);if(n.hasOwnProperty(r[0]))continue;r=r.filter((t=>t)).reverse(),t.splice(e,1),r.forEach((n=>{const r=Object.assign({},o);r.word=n,t.splice(e,0,r)}))}}return t}(o,n),o=function(t,e){return t.map((t=>{if(t.root)if(e.methods.two&&e.methods.two.transform){let n=[];t.pos?"Verb"===t.pos?n=n.concat(we(t,e)):"Noun"===t.pos?n=n.concat(be(t,e)):"Adjective"===t.pos&&(n=n.concat(ye(t,e))):(n=n.concat(we(t,e)),n=n.concat(be(t,e)),n=n.concat(ye(t,e))),n=n.filter((t=>t)),n.length>0&&(t.operator="or",t.fastOr=new Set(n))}else t.machine=t.root,delete t.id,delete t.root;return t}))}(o,n),o=ve(o),o},match:function(t,e,n){n=n||[];const{regs:o,group:r,justOne:s}=e;let i=[];if(!o||0===o.length)return{ptrs:[],byGroup:{}};const c=o.filter((t=>!0!==t.optional&&!0!==t.negative)).length;t:for(let e=0;et&&(t=Math.abs(n-1))}}else{const t=Me(r,o,e);t&&i.push(t)}}return!0===o[o.length-1].end&&(i=i.filter((e=>{const n=e.pointer[0];return t[n].length===e.pointer[2]}))),e.notIf&&(i=function(t,e,n){return t=t.filter((t=>{const[o,r,s]=t.pointer,i=n[o].slice(r,s);for(let t=0;t{t.groups[e]&&n.push(t.groups[e])})):t.forEach((t=>{n.push(t.pointer),Object.keys(t.groups).forEach((e=>{o[e]=o[e]||[],o[e].push(t.groups[e])}))}))),{ptrs:n,byGroup:o}}(i,r),i.ptrs.forEach((e=>{const[n,o,r]=e;e[3]=t[n][o].id,e[4]=t[n][r-1].id})),i}}};var We={api:function(t){Object.assign(t.prototype,te)},methods:Ue,lib:{parseMatch:function(t,e){const n=this.world(),o=n.methods.one.killUnicode;return o&&(t=o(t,n)),n.methods.one.parseMatch(t,e,n)}}};const Ie=/^\../,Re=/^#./,Qe=function(t,e){const n={},o={};return Object.keys(e).forEach((r=>{let s=e[r];const i=function(t){let e="",n="";return t=t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),Ie.test(t)?e=``),e+=">",{start:e,end:n}}(r);"string"==typeof s&&(s=t.match(s)),s.docs.forEach((t=>{if(t.every((t=>t.implicit)))return;const e=t[0].id;n[e]=n[e]||[],n[e].push(i.start);const r=t[t.length-1].id;o[r]=o[r]||[],o[r].push(i.end)}))})),{starts:n,ends:o}};var He={html:function(t){const{starts:e,ends:n}=Qe(this,t);let o="";return this.docs.forEach((t=>{for(let r=0;r{let n=t.pre||"",r=t.post||"";"some"===e.punctuation&&(n=n.replace(Ke,""),Xe.test(r)&&(r=" "),r=r.replace(Je,""),r=r.replace(/\?!+/,"?"),r=r.replace(/!+/,"!"),r=r.replace(/\?+/,"?"),r=r.replace(/\.{2,}/,""),t.tags.has("Abbreviation")&&(r=r.replace(/\./,""))),"some"===e.whitespace&&(n=n.replace(/\s/,""),r=r.replace(/\s+/," ")),e.keepPunct||(n=n.replace(Ke,""),r="-"===r?" ":r.replace(Ze,""));let s=t[e.form||"text"]||t.normal||"";"implicit"===e.form&&(s=t.implicit||t.text),"root"===e.form&&t.implicit&&(s=t.root||t.implicit||t.normal),"machine"!==e.form&&"implicit"!==e.form&&"root"!==e.form||!t.implicit||r&&Ye.test(r)||(r+=" "),o+=n+s+r})),!1===n&&(o=o.trim()),!0===e.lowerCase&&(o=o.toLowerCase()),o},en={text:{form:"text"},normal:{whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"normal"},machine:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"none",unicode:"some",form:"machine"},root:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"root"},implicit:{form:"implicit"}};en.clean=en.normal,en.reduced=en.root;const nn=[];let on=0;for(;on<64;)nn[on]=0|4294967296*Math.sin(++on%Math.PI);const rn=function(t){let e,n,o,r=decodeURI(encodeURI(t))+"€",s=r.length;const i=[e=1732584193,n=4023233417,~e,~n],c=[];for(t=--s/4+2|15,c[--t]=8*s;~s;)c[s>>2]|=r.charCodeAt(s)<<8*s--;for(on=r=0;on>4]+nn[r]+~~c[on|15&[r,5*r+1,3*r+5,7*r][s]])<<(s=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*s+r++%4])|o>>>-s),e,n])e=0|s[1],n=s[2];for(r=4;r;)i[--r]+=s[r]}for(t="";r<32;)t+=(i[r>>3]>>4*(1^r++)&15).toString(16);return t},sn={text:!0,terms:!0},cn={case:"none",unicode:"some",form:"machine",punctuation:"some"},un=function(t,e){return Object.assign({},t,e)},an={text:t=>tn(t,{keepPunct:!0},!1),normal:t=>tn(t,un(en.normal,{keepPunct:!0}),!1),implicit:t=>tn(t,un(en.implicit,{keepPunct:!0}),!1),machine:t=>tn(t,cn,!1),root:t=>tn(t,un(cn,{form:"root"}),!1),hash:t=>rn(tn(t,{keepPunct:!0},!1)),offset:t=>{const e=an.text(t).length;return{index:t[0].offset.index,start:t[0].offset.start,length:e}},terms:t=>t.map((t=>{const e=Object.assign({},t);return e.tags=Array.from(t.tags),e})),confidence:(t,e,n)=>e.eq(n).confidence(),syllables:(t,e,n)=>e.eq(n).syllables(),sentence:(t,e,n)=>e.eq(n).fullSentence().text(),dirty:t=>t.some((t=>!0===t.dirty))};an.sentences=an.sentence,an.clean=an.normal,an.reduced=an.root;const ln={json:function(t){const e=(n=this,"string"==typeof(o=(o=t)||{})&&(o={}),(o=Object.assign({},sn,o)).offset&&n.compute("offset"),n.docs.map(((t,e)=>{const r={};return Object.keys(o).forEach((s=>{o[s]&&an[s]&&(r[s]=an[s](t,n,e))})),r})));var n,o;return"number"==typeof t?e[t]:e}};ln.data=ln.json;const hn=function(t){const e=t.pre||"",n=t.post||"";return e+t.text+n},fn=function(t,e){const n=function(t,e){const n={};return Object.keys(e).forEach((o=>{t.match(o).fullPointer.forEach((t=>{n[t[3]]={fn:e[o],end:t[2]}}))})),n}(t,e);let o="";return t.docs.forEach(((e,r)=>{for(let s=0;st.reduce(((t,e)=>t+e.pre+e.text+e.post),"").trim()));return t.filter((t=>t))}if("freq"===t||"frequency"===t||"topk"===t)return function(t){const e={};t.forEach((t=>{e[t]=e[t]||0,e[t]+=1}));const n=Object.keys(e).map((t=>({normal:t,count:e[t]})));return n.sort(((t,e)=>t.count>e.count?-1:0))}(this.json({normal:!0}).map((t=>t.normal)));if("terms"===t){let t=[];return this.docs.forEach((e=>{let n=e.map((t=>t.text));n=n.filter((t=>t)),t=t.concat(n)})),t}return"tags"===t?this.docs.map((t=>t.reduce(((t,e)=>(t[e.implicit||e.normal]=Array.from(e.tags),t)),{}))):"debug"===t?this.debug():this.text()},wrap:function(t){return fn(this,t)}};var dn={text:function(t){let e={};var n;if(t&&"string"==typeof t&&en.hasOwnProperty(t)?e=Object.assign({},en[t]):t&&(n=t,"[object Object]"===Object.prototype.toString.call(n))&&(e=Object.assign({},t)),void 0!==e.keepSpace||this.isFull()||(e.keepSpace=!1),void 0===e.keepEndPunct&&this.pointer){const t=this.pointer[0];t&&t[1]?e.keepEndPunct=!1:e.keepEndPunct=!0}return void 0===e.keepPunct&&(e.keepPunct=!0),void 0===e.keepSpace&&(e.keepSpace=!0),function(t,e){let n="";if(!t||!t[0]||!t[0][0])return n;for(let o=0;o""+t+gn,red:t=>""+t+gn,blue:t=>""+t+gn,magenta:t=>""+t+gn,cyan:t=>""+t+gn,yellow:t=>""+t+gn,black:t=>""+t+gn,dim:t=>""+t+gn,i:t=>""+t+gn},bn={tags:function(t){const{docs:e,model:n}=t;0===e.length&&console.log(wn.blue("\n ──────")),e.forEach((e=>{console.log(wn.blue("\n ┌─────────")),e.forEach((e=>{const o=[...e.tags||[]];let r=e.text||"-";e.sense&&(r=`{${e.normal}/${e.sense}}`),e.implicit&&(r="["+e.implicit+"]"),r=wn.yellow(r);let s="'"+r+"'";if(e.reference){const n=t.update([e.reference]).text("normal");s+=` - ${wn.dim(wn.i("["+n+"]"))}`}s=s.padEnd(18);const i=wn.blue(" │ ")+wn.i(s)+" - "+function(t,e){return e.one.tagSet&&(t=t.map((t=>{if(!e.one.tagSet.hasOwnProperty(t))return t;const n=e.one.tagSet[t].color||"blue";return wn[n](t)}))),t.join(", ")}(o,n);console.log(i)}))})),console.log("\n")},clientSide:function(t){console.log("%c -=-=- ","background-color:#6699cc;"),t.forEach((t=>{console.groupCollapsed(t.text());const e=t.docs[0].map((t=>{let e=t.text||"-";t.implicit&&(e="["+t.implicit+"]");return{text:e,tags:"["+Array.from(t.tags).join(", ")+"]"}}));console.table(e,["text","tags"]),console.groupEnd()}))},chunks:function(t){const{docs:e}=t;console.log(""),e.forEach((t=>{const e=[];t.forEach((t=>{"Noun"===t.chunk?e.push(wn.blue(t.implicit||t.normal)):"Verb"===t.chunk?e.push(wn.green(t.implicit||t.normal)):"Adjective"===t.chunk?e.push(wn.yellow(t.implicit||t.normal)):"Pivot"===t.chunk?e.push(wn.red(t.implicit||t.normal)):e.push(t.implicit||t.normal)})),console.log(e.join(" "),"\n")})),console.log("\n")},highlight:function(t){if(!t.found)return;const e={};t.fullPointer.forEach((t=>{e[t[0]]=e[t[0]]||[],e[t[0]].push(t)})),Object.keys(e).forEach((n=>{let o=t.update([[Number(n)]]).text();t.update(e[n]).json({offset:!0}).forEach(((t,e)=>{o=function(t,e,n){const o=((t,e,n)=>{const o=9*n,r=e.start+o,s=r+e.length;return[t.substring(0,r),t.substring(r,s),t.substring(s,t.length)]})(t,e,n);return`${o[0]}${wn.blue(o[1])}${o[2]}`}(o,t.offset,e)})),console.log(o)})),console.log("\n")}};var yn={api:function(t){Object.assign(t.prototype,mn)},methods:{one:{hash:rn,debug:bn}}};const vn=function(t,e){if(t[0]!==e[0])return!1;const[,n,o]=t,[,r,s]=e;return n<=r&&o>r||r<=n&&s>n},xn=function(t){const e={};return t.forEach((t=>{e[t[0]]=e[t[0]]||[],e[t[0]].push(t)})),e},jn=function(t,e){const n=xn(e),o=[];return t.forEach((t=>{const[e]=t;let r=n[e]||[];if(r=r.filter((e=>function(t,e){return t[1]<=e[1]&&e[2]<=t[2]}(t,e))),0===r.length)return void o.push({passthrough:t});r=r.sort(((t,e)=>t[1]-e[1]));let s=t;r.forEach(((t,e)=>{const n=function(t,e){const[n,o]=t,r=e[1],s=e[2],i={};if(os&&(i.after=[n,s,t[2]]),i}(s,t);r[e+1]?(o.push({before:n.before,match:n.match}),n.after&&(s=n.after)):o.push(n)}))})),o};var En={one:{termList:function(t){const e=[];for(let n=0;n{if(!o)return;let[s,i,c,u,a]=o,l=e[s]||[];if(void 0===i&&(i=0),void 0===c&&(c=l.length),!u||l[i]&&l[i].id===u)l=l.slice(i,c);else{const n=function(t,e,n){for(let o=0;o<20;o+=1){if(e[n-o]){const r=e[n-o].findIndex((e=>e.id===t));if(-1!==r)return[n-o,r]}if(e[n+o]){const r=e[n+o].findIndex((e=>e.id===t));if(-1!==r)return[n+o,r]}}return null}(u,e,s);if(null!==n){const o=c-i;l=e[n[0]].slice(n[1],n[1]+o);const s=l[0]?l[0].id:null;t[r]=[n[0],n[1],n[1]+o,s]}}0!==l.length&&i!==c&&(a&&l[l.length-1].id!==a&&(l=function(t,e){const[n,o,,,r]=t,s=e[n],i=s.findIndex((t=>t.id===r));return-1===i?(t[2]=e[n].length,t[4]=s.length?s[s.length-1].id:null):t[2]=i,e[n].slice(o,t[2]+1)}(o,e)),n.push(l))})),n=n.filter((t=>t.length>0)),n},pointer:{indexN:xn,splitAll:jn}}};const On=function(t,e){const n=t.concat(e),o=xn(n);let r=[];return n.forEach((t=>{const[e]=t;if(1===o[e].length)return void r.push(t);const n=o[e].filter((e=>vn(t,e)));n.push(t);const s=function(t){let e=t[0][1],n=t[0][2];return t.forEach((t=>{t[1]n&&(n=t[2])})),[t[0][0],e,n]}(n);r.push(s)})),r=function(t){const e={};for(let n=0;n{t.passthrough&&n.push(t.passthrough),t.before&&n.push(t.before),t.after&&n.push(t.after)})),n},Pn=(t,e)=>{return"string"==typeof t||(n=t,"[object Array]"===Object.prototype.toString.call(n))?e.match(t):t||e.none();var n},_n=function(t,e){return t.map((t=>{const[n,o]=t;return e[n]&&e[n][o]&&(t[3]=e[n][o].id),t}))},Sn={union:function(t){t=Pn(t,this);let e=On(this.fullPointer,t.fullPointer);return e=_n(e,this.document),this.toView(e)}};Sn.and=Sn.union,Sn.intersection=function(t){t=Pn(t,this);let e=function(t,e){const n=xn(e),o=[];return t.forEach((t=>{let e=n[t[0]]||[];e=e.filter((e=>vn(t,e))),0!==e.length&&e.forEach((e=>{const n=function(t,e){const n=t[1]e[2]?e[2]:t[2];return n{t=On(t,[e])})),t=_n(t,this.document),this.update(t)};var zn={methods:En,api:function(t){Object.assign(t.prototype,Sn)}};const An=function(t){return!0===t.optional||!0===t.negative?null:t.tag?"#"+t.tag:t.word?t.word:t.switch?`%${t.switch}%`:null},$n=function(t,e){const n=e.methods.one.parseMatch;return t.forEach((t=>{t.regs=n(t.match,{},e),"string"==typeof t.ifNo&&(t.ifNo=[t.ifNo]),t.notIf&&(t.notIf=n(t.notIf,{},e)),t.needs=function(t){const e=[];return t.forEach((t=>{e.push(An(t)),"and"===t.operator&&t.choices&&t.choices.forEach((t=>{t.forEach((t=>{e.push(An(t))}))}))})),e.filter((t=>t))}(t.regs);const{wants:o,count:r}=function(t){const e=[];let n=0;return t.forEach((t=>{"or"!==t.operator||t.optional||t.negative||(t.fastOr&&Array.from(t.fastOr).forEach((t=>{e.push(t)})),t.choices&&t.choices.forEach((t=>{t.forEach((t=>{const n=An(t);n&&e.push(n)}))})),n+=1)})),{wants:e,count:n}}(t.regs);t.wants=o,t.minWant=r,t.minWords=t.regs.filter((t=>!t.optional)).length})),t};var Tn={buildNet:function(t,e){t=$n(t,e);const n={};t.forEach((t=>{t.needs.forEach((e=>{n[e]=Array.isArray(n[e])?n[e]:[],n[e].push(t)})),t.wants.forEach((e=>{n[e]=Array.isArray(n[e])?n[e]:[],n[e].push(t)}))})),Object.keys(n).forEach((t=>{const e={};n[t]=n[t].filter((t=>"boolean"!=typeof e[t.match]&&(e[t.match]=!0,!0)))}));const o=t.filter((t=>0===t.needs.length&&0===t.wants.length));return{hooks:n,always:o}},bulkMatch:function(t,e,n,o={}){const r=n.one.cacheDoc(t);let s=function(t,e){return t.map(((n,o)=>{let r=[];Object.keys(e).forEach((n=>{t[o].has(n)&&(r=r.concat(e[n]))}));const s={};return r=r.filter((t=>"boolean"!=typeof s[t.match]&&(s[t.match]=!0,!0))),r}))}(r,e.hooks);s=function(t,e){return t.map(((t,n)=>{const o=e[n];return(t=(t=t.filter((t=>t.needs.every((t=>o.has(t)))))).filter((t=>void 0===t.ifNo||!0!==t.ifNo.some((t=>o.has(t)))))).filter((t=>0===t.wants.length||t.wants.filter((t=>o.has(t))).length>=t.minWant))}))}(s,r),e.always.length>0&&(s=s.map((t=>t.concat(e.always)))),s=function(t,e){return t.map(((t,n)=>{const o=e[n].length;return t=t.filter((t=>o>=t.minWords)),t}))}(s,t);const i=function(t,e,n,o,r){const s=[];for(let n=0;n0&&(u.ptrs.forEach((t=>{t[0]=n;const e=Object.assign({},c,{pointer:t});void 0!==c.unTag&&(e.unTag=c.unTag),s.push(e)})),!0===r.matchOne))return[s[0]]}return s}(s,t,0,n,o);return i},bulkTagger:function(t,e,n){const{model:o,methods:r}=n,{getDoc:s,setTag:i,unTag:c}=r.one,u=r.two.looksPlural;if(0===t.length)return t;return("undefined"!=typeof process&&process.env?process.env:self.env||{}).DEBUG_TAGS&&console.log(`\n\n → ${t.length} post-tagger:`),t.map((t=>{if(!t.tag&&!t.chunk&&!t.unTag)return;const r=t.reason||t.match,a=s([t.pointer],e)[0];if(!0===t.safe){if(!1===function(t,e,n){const o=n.one.tagSet;if(!o.hasOwnProperty(e))return!0;const r=o[e].not||[];for(let e=0;et.frozen=!0))}void 0!==t.unTag&&c(a,t.unTag,n,t.safe,r),t.chunk&&a.forEach((e=>e.chunk=t.chunk))}))}},Cn={lib:{buildNet:function(t){const e=this.methods().one.buildNet(t,this.world());return e.isNet=!0,e}},api:function(t){t.prototype.sweep=function(t,e={}){const{world:n,docs:o}=this,{methods:r}=n;let s=r.one.bulkMatch(o,t,this.methods,e);!1!==e.tagger&&r.one.bulkTagger(s,o,this.world),s=s.map((t=>{const e=t.pointer,n=o[e[0]][e[1]],r=e[2]-e[1];return n.index&&(t.pointer=[n.index[0],n.index[1],e[1]+r]),t}));const i=s.map((t=>t.pointer));return s=s.map((t=>(t.view=this.update([t.pointer]),delete t.regs,delete t.needs,delete t.pointer,delete t._expanded,t))),{view:this.update(i),found:s}}},methods:{one:Tn}};const Ln=/ /,Nn=function(t,e){"Noun"===e&&(t.chunk=e),"Verb"===e&&(t.chunk=e)},Vn=function(t,e,n,o){if(!0===t.tags.has(e))return null;if("."===e)return null;!0===t.frozen&&(o=!0);const r=n[e];if(r){if(r.not&&r.not.length>0)for(let e=0;e0)for(let e=0;e{const o=t.map((t=>t.text||"["+t.implicit+"]")).join(" ");var r;"string"!=typeof e&&e.length>2&&(e=e.slice(0,2).join(", #")+" +"),e="string"!=typeof e?e.join(", #"):e,console.log(` ${(r=o,""+r+"").padEnd(24)} → #${e.padEnd(22)} ${(t=>""+t+"")(n)}`)})(t,e,r),!0!=(c=e,"[object Array]"===Object.prototype.toString.call(c)))if("string"==typeof e)if(e=e.trim(),Ln.test(e))!function(t,e,n,o){const r=e.split(Ln);t.forEach(((t,e)=>{let s=r[e];s&&(s=s.replace(/^#/,""),Vn(t,s,n,o))}))}(t,e,s,o);else{e=e.replace(/^#/,"");for(let n=0;nFn(t,e,n,o)))},qn=function(t){return t.children=t.children||[],t._cache=t._cache||{},t.props=t.props||{},t._cache.parents=t._cache.parents||[],t._cache.children=t._cache.children||[],t},Gn=/^ *(#|\/\/)/,Bn=function(t){let e=t.trim().split(/->/),n=[];e.forEach((t=>{n=n.concat(function(t){if(!(t=t.trim()))return null;if(/^\[/.test(t)&&/\]$/.test(t)){let e=(t=(t=t.replace(/^\[/,"")).replace(/\]$/,"")).split(/,/);return e=e.map((t=>t.trim())).filter((t=>t)),e=e.map((t=>qn({id:t}))),e}return[qn({id:t})]}(t))})),n=n.filter((t=>t));let o=n[0];for(let t=1;t{let n=[],o=[t];for(;o.length>0;){let t=o.pop();n.push(t),t.children&&t.children.forEach((n=>{e&&e(t,n),o.push(n)}))}return n},Mn=t=>"[object Array]"===Object.prototype.toString.call(t),Un=t=>(t=t||"").trim(),Wn=function(t=[]){return"string"==typeof t?function(t){let e=t.split(/\r?\n/),n=[];e.forEach((t=>{if(!t.trim()||Gn.test(t))return;let e=(t=>{const e=/^( {2}|\t)/;let n=0;for(;e.test(t);)t=t.replace(e,""),n+=1;return n})(t);n.push({indent:e,node:Bn(t)})}));let o=function(t){let e={children:[]};return t.forEach(((n,o)=>{0===n.indent?e.children=e.children.concat(n.node):t[o-1]&&function(t,e){let n=t[e].indent;for(;e>=0;e-=1)if(t[e].indent{e[t.id]=t}));let n=qn({});return t.forEach((t=>{if((t=qn(t)).parent)if(e.hasOwnProperty(t.parent)){let n=e[t.parent];delete t.parent,n.children.push(t)}else console.warn(`[Grad] - missing node '${t.parent}'`);else n.children.push(t)})),n}(t):(Dn(e=t).forEach(qn),e);var e},In=function(t,e){let n="-> ";e&&(n=(t=>""+t+"")("→ "));let o="";return Dn(t).forEach(((t,r)=>{let s=t.id||"";if(e&&(s=(t=>""+t+"")(s)),0===r&&!t.id)return;let i=t._cache.parents.length;o+=" ".repeat(i)+n+s+"\n"})),o},Rn=function(t){let e=Dn(t);e.forEach((t=>{delete(t=Object.assign({},t)).children}));let n=e[0];return n&&!n.id&&0===Object.keys(n.props).length&&e.shift(),e},Qn={text:In,txt:In,array:Rn,flat:Rn},Hn=function(t,e){return"nested"===e||"json"===e?t:"debug"===e?(console.log(In(t,!0)),null):Qn.hasOwnProperty(e)?Qn[e](t):t},Zn=t=>{Dn(t,((t,e)=>{t.id&&(t._cache.parents=t._cache.parents||[],e._cache.parents=t._cache.parents.concat([t.id]))}))},Kn=/\//;class g{constructor(t={}){Object.defineProperty(this,"json",{enumerable:!1,value:t,writable:!0})}get children(){return this.json.children}get id(){return this.json.id}get found(){return this.json.id||this.json.children.length>0}props(t={}){let e=this.json.props||{};return"string"==typeof t&&(e[t]=!0),this.json.props=Object.assign(e,t),this}get(t){if(t=Un(t),!Kn.test(t)){let e=this.json.children.find((e=>e.id===t));return new g(e)}let e=((t,e)=>{let n=(t=>"string"!=typeof t?t:(t=t.replace(/^\//,"")).split(/\//))(e=e||"");for(let e=0;et.id===n[e]));if(!o)return null;t=o}return t})(this.json,t)||qn({});return new g(e)}add(t,e={}){if(Mn(t))return t.forEach((t=>this.add(Un(t),e))),this;t=Un(t);let n=qn({id:t,props:e});return this.json.children.push(n),new g(n)}remove(t){return t=Un(t),this.json.children=this.json.children.filter((e=>e.id!==t)),this}nodes(){return Dn(this.json).map((t=>(delete(t=Object.assign({},t)).children,t)))}cache(){return(t=>{let e=Dn(t,((t,e)=>{t.id&&(t._cache.parents=t._cache.parents||[],t._cache.children=t._cache.children||[],e._cache.parents=t._cache.parents.concat([t.id]))})),n={};e.forEach((t=>{t.id&&(n[t.id]=t)})),e.forEach((t=>{t._cache.parents.forEach((e=>{n.hasOwnProperty(e)&&n[e]._cache.children.push(t.id)}))})),t._cache.children=Object.keys(n)})(this.json),this}list(){return Dn(this.json)}fillDown(){var t;return t=this.json,Dn(t,((t,e)=>{e.props=((t,e)=>(Object.keys(e).forEach((n=>{if(e[n]instanceof Set){let o=t[n]||new Set;t[n]=new Set([...o,...e[n]])}else if((t=>t&&"object"==typeof t&&!Array.isArray(t))(e[n])){let o=t[n]||{};t[n]=Object.assign({},e[n],o)}else Mn(e[n])?t[n]=e[n].concat(t[n]||[]):void 0===t[n]&&(t[n]=e[n])})),t))(e.props,t.props)})),this}depth(){Zn(this.json);let t=Dn(this.json),e=t.length>1?1:0;return t.forEach((t=>{if(0===t._cache.parents.length)return;let n=t._cache.parents.length+1;n>e&&(e=n)})),e}out(t){return Zn(this.json),Hn(this.json,t)}debug(){return Zn(this.json),Hn(this.json,"debug"),this}}const Jn=function(t){let e=Wn(t);return new g(e)};Jn.prototype.plugin=function(t){t(this)};const Xn={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Hyphenated:"cyan",Adverb:"cyan"},Yn=function(t){if(Xn.hasOwnProperty(t.id))return Xn[t.id];if(Xn.hasOwnProperty(t.is))return Xn[t.is];const e=t._cache.parents.find((t=>Xn[t]));return Xn[e]},to=function(t){return t?"string"==typeof t?[t]:t:[]},eo=function(t,e){return t=function(t,e){return Object.keys(t).forEach((n=>{t[n].isA&&(t[n].is=t[n].isA),t[n].notA&&(t[n].not=t[n].notA),t[n].is&&"string"==typeof t[n].is&&(e.hasOwnProperty(t[n].is)||t.hasOwnProperty(t[n].is)||(t[t[n].is]={})),t[n].not&&"string"==typeof t[n].not&&!t.hasOwnProperty(t[n].not)&&(e.hasOwnProperty(t[n].not)||t.hasOwnProperty(t[n].not)||(t[t[n].not]={}))})),t}(t,e),Object.keys(t).forEach((e=>{t[e].children=to(t[e].children),t[e].not=to(t[e].not)})),Object.keys(t).forEach((e=>{(t[e].not||[]).forEach((n=>{t[n]&&t[n].not&&t[n].not.push(e)}))})),t};var no={one:{setTag:Fn,unTag:function(t,e,n){e=e.trim().replace(/^#/,"");for(let o=0;o0)for(let t=0;t0&&(t=function(t){return Object.keys(t).forEach((e=>{t[e]=Object.assign({},t[e]),t[e].novel=!0})),t}(t)),t=eo(t,e);const n=function(t){const e=Object.keys(t).map((e=>{const n=t[e],o={not:new Set(n.not),also:n.also,is:n.is,novel:n.novel};return{id:e,parent:n.is,props:o,children:[]}}));return Jn(e).cache().fillDown().out("array")}(Object.assign({},e,t)),o=function(t){const e={};return t.forEach((t=>{const{not:n,also:o,is:r,novel:s}=t.props;let i=t._cache.parents;o&&(i=i.concat(o)),e[t.id]={is:r,not:n,novel:s,also:o,parents:i,children:t._cache.children,color:Yn(t)}})),Object.keys(e).forEach((t=>{const n=new Set(e[t].not);e[t].not.forEach((t=>{e[t]&&e[t].children.forEach((t=>n.add(t)))})),e[t].not=Array.from(n)})),e}(n);return o},canBe:function(t,e,n){if(!n.hasOwnProperty(e))return!0;const o=n[e].not||[];for(let e=0;er.one.setTag(o,t,i,n,e))):r.one.setTag(o,t,i,n,e),this.uncache(),this},tagSafe:function(t,e=""){return this.tag(t,e,!0)},unTag:function(t,e){if(!this.found||!t)return this;const n=this.termList();if(0===n.length)return this;const{methods:o,verbose:r,model:s}=this;!0===r&&console.log(" - ",t,e||"");const i=s.one.tagSet;return oo(t)?t.forEach((t=>o.one.unTag(n,t,i))):o.one.unTag(n,t,i),this.uncache(),this},canBe:function(t){t=t.replace(/^#/,"");const e=this.model.one.tagSet,n=this.methods.one.canBe,o=[];this.document.forEach(((r,s)=>{r.forEach(((r,i)=>{n(r,t,e)||o.push([s,i,i+1])}))}));const r=this.update(o);return this.difference(r)}};var so={addTags:function(t){const{model:e,methods:n}=this.world(),o=e.one.tagSet,r=(0,n.one.addTags)(t,o);return e.one.tagSet=r,this}};const io=new Set(["Auxiliary","Possessive"]);var co={model:{one:{tagSet:{}}},compute:{tagRank:function(t){const{document:e,world:n}=t,o=n.model.one.tagSet;e.forEach((t=>{t.forEach((t=>{const e=Array.from(t.tags);t.tagRank=function(t,e){return t=t.sort(((t,n)=>{if(io.has(t)||!e.hasOwnProperty(n))return 1;if(io.has(n)||!e.hasOwnProperty(t))return-1;let o=e[t].children||[];const r=o.length;return o=e[n].children||[],r-o.length})),t}(e,o)}))}))}},methods:no,api:function(t){Object.assign(t.prototype,ro)},lib:so};const uo=/([.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s)/g,ao=/^[.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s$/,lo=/((?:\r?\n|\r)+)/,ho=/[a-z0-9\u00C0-\u00FF\u00a9\u00ae\u2000-\u3300\ud000-\udfff]/i,fo=/\S/,po=function(t){return Boolean(t.match(/\n$/))},mo={'"':'"',""":""","“":"”","‟":"”","„":"”","⹂":"”","‚":"’","«":"»","‹":"›","‵":"′","‶":"″","‷":"‴","〝":"〞","〟":"〞"},go=RegExp("["+Object.keys(mo).join("")+"]","g"),wo=RegExp("["+Object.values(mo).join("")+"]","g"),bo=function(t){if(!t)return!1;const e=t.match(wo);return null!==e&&1===e.length},yo=/\(/g,vo=/\)/g,xo=/\S/,jo=/^\s+/,Eo=function(t,e){const n=t.split(/[-–—]/);if(n.length<=1)return!1;const{prefixes:o,suffixes:r}=e.one;if(1===n[0].length&&/[a-z]/i.test(n[0]))return!1;if(o.hasOwnProperty(n[0]))return!1;if(n[1]=n[1].trim().replace(/[.?!]$/,""),r.hasOwnProperty(n[1]))return!1;if(!0===/^([a-z\u00C0-\u00FF`"'/]+)[-–—]([a-z0-9\u00C0-\u00FF].*)/i.test(t))return!0;return!0===/^[('"]?([0-9]{1,4})[-–—]([a-z\u00C0-\u00FF`"'/-]+[)'"]?$)/i.test(t)},Oo=function(t){const e=[],n=t.split(/[-–—]/);let o="-";const r=t.match(/[-–—]/);r&&r[0]&&(o=r);for(let t=0;t(t[e]=!0,t)),{});const Ao=/\p{Letter}/u,$o=/[\p{Number}\p{Currency_Symbol}]/u,To=/^[a-z]\.([a-z]\.)+/i,Co=/[sn]['’]$/,Lo=/([A-Z]\.)+[A-Z]?,?$/,No=/^[A-Z]\.,?$/,Vo=/[A-Z]{2,}('s|,)?$/,Fo=/([a-z]\.)+[a-z]\.?$/,qo=function(t){return function(t){return!0===Lo.test(t)||!0===Fo.test(t)||!0===No.test(t)||!0===Vo.test(t)}(t)&&(t=t.replace(/\./g,"")),t},Go=function(t,e){const n=e.methods.one.killUnicode;let o=t.text||"";o=function(t){const e=t=(t=(t=t||"").toLowerCase()).trim();return t=(t=(t=t.replace(/[,;.!?]+$/,"")).replace(/\u2026/g,"...")).replace(/\u2013/g,"-"),!1===/^[:;]/.test(t)&&(t=(t=(t=t.replace(/\.{3,}$/g,"")).replace(/[",.!:;?)]+$/g,"")).replace(/^['"(]+/g,"")),""===(t=(t=t.replace(/[\u200B-\u200D\uFEFF]/g,"")).trim())&&(t=e),t.replace(/([0-9]),([0-9])/g,"$1$2")}(o),o=n(o,e),o=qo(o),t.normal=o},Bo=/[ .][A-Z]\.? *$/i,Do=/(?:\u2026|\.{2,}) *$/,Mo=/\p{L}/u,Uo=/\. *$/,Wo=/^[A-Z]\. $/;var Io={one:{killUnicode:function(t,e){const n=e.model.one.unicode||{},o=(t=t||"").split("");return o.forEach(((t,e)=>{n[t]&&(o[e]=n[t])})),o.join("")},tokenize:{splitSentences:function(t,e){if(t=t||"",!(t=String(t))||"string"!=typeof t||!1===xo.test(t))return[];const n=function(t){const e=[],n=t.split(lo);for(let t=0;t0&&(r.push(s),t[e]=""):t[e+1]=s+(t[e+1]||"")}return r}(o,e),o=function(t){const e=[];for(let n=0;n0?(n[n.length-1]+=s,n.push(e)):n.push(s+e),s=""):s+=e}return s&&(0===n.length&&(n[0]=""),n[n.length-1]+=s),n=function(t){for(let e=1;et)),n},splitWhitespace:(t,e)=>{const{str:n,pre:o,post:r}=function(t,e){const{prePunctuation:n,postPunctuation:o,emoticons:r}=e.one;let s=t,i="",c="";const u=Array.from(t);if(r.hasOwnProperty(t.trim()))return{str:t.trim(),pre:i,post:" "};let a=u.length;for(let t=0;t(c=t||"",""))),t=s,i=""),{str:t,pre:i,post:c}}(t,e);return{text:n,pre:o,post:r,tags:new Set}},fromString:function(t,e){const{methods:n,model:o}=e,{splitSentences:r,splitTerms:s,splitWhitespace:i}=n.one.tokenize;return t=r(t=t||"",e).map((t=>{let n=s(t,o);return n=n.map((t=>i(t,o))),n.forEach((t=>{Go(t,e)})),n})),t}}}};const Ro={},Qo={};[[["approx","apt","bc","cyn","eg","esp","est","etc","ex","exp","prob","pron","gal","min","pseud","fig","jd","lat","lng","vol","fm","def","misc","plz","ea","ps","sec","pt","pref","pl","pp","qt","fr","sq","nee","ss","tel","temp","vet","ver","fem","masc","eng","adj","vb","rb","inf","situ","vivo","vitro","wr"]],[["dl","ml","gal","qt","pt","tbl","tsp","tbsp","km","dm","cm","mm","mi","td","hr","hrs","kg","hg","dg","cg","mg","µg","lb","oz","sq ft","hz","mps","mph","kmph","kb","mb","tb","lx","lm","fl oz","yb"],"Unit"],[["ad","al","arc","ba","bl","ca","cca","col","corp","ft","fy","ie","lit","ma","md","pd","tce"],"Noun"],[["adj","adm","adv","asst","atty","bldg","brig","capt","cmdr","comdr","cpl","det","dr","esq","gen","gov","hon","jr","llb","lt","maj","messrs","mlle","mme","mr","mrs","ms","mstr","phd","prof","pvt","rep","reps","res","rev","sen","sens","sfc","sgt","sir","sr","supt","surg"],"Honorific"],[["jan","feb","mar","apr","jun","jul","aug","sep","sept","oct","nov","dec"],"Month"],[["dept","univ","assn","bros","inc","ltd","co"],"Organization"],[["rd","st","dist","mt","ave","blvd","cl","cres","hwy","ariz","cal","calif","colo","conn","fla","fl","ga","ida","ia","kan","kans","minn","neb","nebr","okla","penna","penn","pa","dak","tenn","tex","ut","vt","va","wis","wisc","wy","wyo","usafa","alta","ont","que","sask"],"Place"]].forEach((t=>{t[0].forEach((e=>{Ro[e]=!0,Qo[e]="Abbreviation",void 0!==t[1]&&(Qo[e]=[Qo[e],t[1]])}))}));var Ho=["anti","bi","co","contra","de","extra","infra","inter","intra","macro","micro","mis","mono","multi","peri","pre","pro","proto","pseudo","re","sub","supra","trans","tri","un","out","ex"].reduce(((t,e)=>(t[e]=!0,t)),{});const Zo={"!":"¡","?":"¿Ɂ",'"':'“”"❝❞',"'":"‘‛❛❜’","-":"—–",a:"ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАаѦѧӐӑӒӓƛæ",b:"ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ",c:"¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼϲϹϽϾСсєҀҁҪҫ",d:"ÐĎďĐđƉƊȡƋƌ",e:"ÈÉÊËèéêëĒēĔĕĖėĘęĚěƐȄȅȆȇȨȩɆɇΈΕΞΣέεξϵЀЁЕеѐёҼҽҾҿӖӗễ",f:"ƑƒϜϝӺӻҒғſ",g:"ĜĝĞğĠġĢģƓǤǥǦǧǴǵ",h:"ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ",I:"ÌÍÎÏ",i:"ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇіїi̇",j:"ĴĵǰȷɈɉϳЈј",k:"ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ",l:"ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ",m:"ΜϺϻМмӍӎ",n:"ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ",o:"ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϴОФоѲѳӦӧӨөӪӫ",p:"ƤΡρϷϸϼРрҎҏÞ",q:"Ɋɋ",r:"ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ",s:"ŚśŜŝŞşŠšƧƨȘșȿЅѕ",t:"ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт",u:"ÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰυϋύ",v:"νѴѵѶѷ",w:"ŴŵƜωώϖϢϣШЩшщѡѿ",x:"×ΧχϗϰХхҲҳӼӽӾӿ",y:"ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ",z:"ŹźŻżŽžƵƶȤȥɀΖ"},Ko={};Object.keys(Zo).forEach((function(t){Zo[t].split("").forEach((function(e){Ko[e]=t}))}));const Jo=/\//,Xo=/[a-z]\.[a-z]/i,Yo=/[0-9]/,tr=function(t,e){const n=t.normal||t.text||t.machine,o=e.model.one.aliases;if(o.hasOwnProperty(n)&&(t.alias=t.alias||[],t.alias.push(o[n])),Jo.test(n)&&!Xo.test(n)&&!Yo.test(n)){const e=n.split(Jo);e.length<=3&&e.forEach((e=>{""!==(e=e.trim())&&(t.alias=t.alias||[],t.alias.push(e))}))}return t},er=/^\p{Letter}+-\p{Letter}+$/u,nr=function(t){let e=t.implicit||t.normal||t.text;e=e.replace(/['’]s$/,""),e=e.replace(/s['’]$/,"s"),e=e.replace(/([aeiou][ktrp])in'$/,"$1ing"),er.test(e)&&(e=e.replace(/-/g,"")),e=e.replace(/^[#@]/,""),e!==t.normal&&(t.machine=e)},or=function(t,e){const n=t.docs;for(let o=0;oor(t,tr),machine:t=>or(t,nr),normal:t=>or(t,Go),freq:function(t){const e=t.docs,n={};for(let t=0;t{let i=(t=t.toLowerCase().trim()).length;e.max&&i>e.max&&(i=e.max);for(let c=e.min;c{delete o[t]})),o}(t,e,this.world());return Object.keys(r).forEach((t=>{n.one.typeahead.hasOwnProperty(t)?delete n.one.typeahead[t]:n.one.typeahead[t]=r[t]})),this}};var lr={model:{one:{typeahead:{}}},api:function(t){t.prototype.autoFill=cr},lib:ar,compute:ir,hooks:["typeahead"]};h.extend(W),h.extend(yn),h.extend(We),h.extend(zn),h.extend(co),h.plugin(yt),h.extend(sr),h.extend(Ot),h.plugin(d),h.extend(qt),h.extend(lr),h.extend(Tt),h.extend(Cn);export{h as default}; diff --git a/builds/three/compromise-three.cjs b/builds/three/compromise-three.cjs new file mode 100644 index 0000000..15d4c1f --- /dev/null +++ b/builds/three/compromise-three.cjs @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).nlp=t()}(this,(function(){"use strict";var e={methods:{one:{},two:{},three:{},four:{}},model:{one:{},two:{},three:{}},compute:{},hooks:[]};const t={compute:function(e){const{world:t}=this,n=t.compute;return"string"==typeof e&&n.hasOwnProperty(e)?n[e](this):(e=>"[object Array]"===Object.prototype.toString.call(e))(e)?e.forEach((r=>{t.compute.hasOwnProperty(r)?n[r](this):console.warn("no compute:",e)})):"function"==typeof e?e(this):console.warn("no compute:",e),this}};var n={forEach:function(e){return this.fullPointer.forEach(((t,n)=>{const r=this.update([t]);e(r,n)})),this},map:function(e,t){const n=this.fullPointer.map(((t,n)=>{const r=this.update([t]),o=e(r,n);return void 0===o?this.none():o}));if(0===n.length)return t||this.update([]);if(void 0!==n[0]){if("string"==typeof n[0])return n;if("object"==typeof n[0]&&(null===n[0]||!n[0].isView))return n}let r=[];return n.forEach((e=>{r=r.concat(e.fullPointer)})),this.toView(r)},filter:function(e){let t=this.fullPointer;t=t.filter(((t,n)=>{const r=this.update([t]);return e(r,n)}));return this.update(t)},find:function(e){const t=this.fullPointer.find(((t,n)=>{const r=this.update([t]);return e(r,n)}));return this.update([t])},some:function(e){return this.fullPointer.some(((t,n)=>{const r=this.update([t]);return e(r,n)}))},random:function(e=1){let t=this.fullPointer,n=Math.floor(Math.random()*t.length);return n+e>this.length&&(n=this.length-e,n=n<0?0:n),t=t.slice(n,n+e),this.update(t)}};const r={termList:function(){return this.methods.one.termList(this.docs)},terms:function(e){const t=this.match(".");return"number"==typeof e?t.eq(e):t},groups:function(e){if(e||0===e)return this.update(this._groups[e]||[]);const t={};return Object.keys(this._groups).forEach((e=>{t[e]=this.update(this._groups[e])})),t},eq:function(e){let t=this.pointer;return t||(t=this.docs.map(((e,t)=>[t]))),t[e]?this.update([t[e]]):this.none()},first:function(){return this.eq(0)},last:function(){const e=this.fullPointer.length-1;return this.eq(e)},firstTerms:function(){return this.match("^.")},lastTerms:function(){return this.match(".$")},slice:function(e,t){let n=this.pointer||this.docs.map(((e,t)=>[t]));return n=n.slice(e,t),this.update(n)},all:function(){return this.update().toView()},fullSentences:function(){const e=this.fullPointer.map((e=>[e[0]]));return this.update(e).toView()},none:function(){return this.update([])},isDoc:function(e){if(!e||!e.isView)return!1;const t=this.fullPointer,n=e.fullPointer;return!t.length!==n.length&&t.every(((e,t)=>!!n[t]&&(e[0]===n[t][0]&&e[1]===n[t][1]&&e[2]===n[t][2])))},wordCount:function(){return this.docs.reduce(((e,t)=>(e+=t.filter((e=>""!==e.text)).length,e)),0)},isFull:function(){const e=this.pointer;if(!e)return!0;if(0===e.length||0!==e[0][0])return!1;let t=0,n=0;return this.document.forEach((e=>t+=e.length)),this.docs.forEach((e=>n+=e.length)),t===n},getNth:function(e){return"number"==typeof e?this.eq(e):"string"==typeof e?this.if(e):this}};r.group=r.groups,r.fullSentence=r.fullSentences,r.sentence=r.fullSentences,r.lastTerm=r.lastTerms,r.firstTerm=r.firstTerms;const o=Object.assign({},r,t,n);o.get=o.eq;class View{constructor(t,n,r={}){[["document",t],["world",e],["_groups",r],["_cache",null],["viewType","View"]].forEach((e=>{Object.defineProperty(this,e[0],{value:e[1],writable:!0})})),this.ptrs=n}get docs(){let t=this.document;return this.ptrs&&(t=e.methods.one.getDoc(this.ptrs,this.document)),t}get pointer(){return this.ptrs}get methods(){return this.world.methods}get model(){return this.world.model}get hooks(){return this.world.hooks}get isView(){return!0}get found(){return this.docs.length>0}get length(){return this.docs.length}get fullPointer(){const{docs:e,ptrs:t,document:n}=this,r=t||e.map(((e,t)=>[t]));return r.map((e=>{let[t,r,o,a,i]=e;return r=r||0,o=o||(n[t]||[]).length,n[t]&&n[t][r]&&(a=a||n[t][r].id,n[t][o-1]&&(i=i||n[t][o-1].id)),[t,r,o,a,i]}))}update(e){const t=new View(this.document,e);if(this._cache&&e&&e.length>0){const n=[];e.forEach(((e,t)=>{const[r,o,a]=e;(1===e.length||0===o&&this.document[r].length===a)&&(n[t]=this._cache[r])})),n.length>0&&(t._cache=n)}return t.world=this.world,t}toView(e){return new View(this.document,e||this.pointer)}fromText(e){const{methods:t}=this,n=t.one.tokenize.fromString(e,this.world),r=new View(n);return r.world=this.world,r.compute(["normal","freeze","lexicon"]),this.world.compute.preTagger&&r.compute("preTagger"),r.compute("unfreeze"),r}clone(){let e=this.document.slice(0);e=e.map((e=>e.map((e=>((e=Object.assign({},e)).tags=new Set(e.tags),e)))));const t=this.update(this.pointer);return t.document=e,t._cache=this._cache,t}}Object.assign(View.prototype,o);const a=function(e){return e&&"object"==typeof e&&!Array.isArray(e)};function i(e,t){if(a(t))for(const n in t)a(t[n])?(e[n]||Object.assign(e,{[n]:{}}),i(e[n],t[n])):Object.assign(e,{[n]:t[n]});return e}const s=function(e,t,n,r){if(o=e,"[object Array]"===Object.prototype.toString.call(o))return void e.forEach((e=>s(e,t,n,r)));var o;const{methods:a,model:l,compute:u,hooks:c}=t;e.methods&&function(e,t){for(const n in t)e[n]=e[n]||{},Object.assign(e[n],t[n])}(a,e.methods),e.model&&i(l,e.model),e.irregulars&&function(e,t){const n=e.two.models||{};Object.keys(t).forEach((e=>{t[e].pastTense&&(n.toPast&&(n.toPast.ex[e]=t[e].pastTense),n.fromPast&&(n.fromPast.ex[t[e].pastTense]=e)),t[e].presentTense&&(n.toPresent&&(n.toPresent.ex[e]=t[e].presentTense),n.fromPresent&&(n.fromPresent.ex[t[e].presentTense]=e)),t[e].gerund&&(n.toGerund&&(n.toGerund.ex[e]=t[e].gerund),n.fromGerund&&(n.fromGerund.ex[t[e].gerund]=e)),t[e].comparative&&(n.toComparative&&(n.toComparative.ex[e]=t[e].comparative),n.fromComparative&&(n.fromComparative.ex[t[e].comparative]=e)),t[e].superlative&&(n.toSuperlative&&(n.toSuperlative.ex[e]=t[e].superlative),n.fromSuperlative&&(n.fromSuperlative.ex[t[e].superlative]=e))}))}(l,e.irregulars),e.compute&&Object.assign(u,e.compute),c&&(t.hooks=c.concat(e.hooks||[])),e.api&&e.api(n),e.lib&&Object.keys(e.lib).forEach((t=>r[t]=e.lib[t])),e.tags&&r.addTags(e.tags),e.words&&r.addWords(e.words),e.frozen&&r.addWords(e.frozen,!0),e.mutate&&e.mutate(t,r)},l=function(e){return"[object Array]"===Object.prototype.toString.call(e)},u=function(e,t,n){const{methods:r}=n,o=new t([]);if(o.world=n,"number"==typeof e&&(e=String(e)),!e)return o;if("string"==typeof e){return new t(r.one.tokenize.fromString(e,n))}if(a=e,"[object Object]"===Object.prototype.toString.call(a)&&e.isView)return new t(e.document,e.ptrs);var a;if(l(e)){if(l(e[0])){const n=e.map((e=>e.map((e=>({text:e,normal:e,pre:"",post:" ",tags:new Set})))));return new t(n)}const n=e.map((e=>e.terms.map((e=>(l(e.tags)&&(e.tags=new Set(e.tags)),e)))));return new t(n)}return o},c=Object.assign({},e),h=function(e,t){t&&h.addWords(t);const n=u(e,View,c);return e&&n.compute(c.hooks),n};Object.defineProperty(h,"_world",{value:c,writable:!0}),h.tokenize=function(e,t){const{compute:n}=this._world;t&&h.addWords(t);const r=u(e,View,c);return n.contractions&&r.compute(["alias","normal","machine","contractions"]),r},h.plugin=function(e){return s(e,this._world,View,this),this},h.extend=h.plugin,h.world=function(){return this._world},h.model=function(){return this._world.model},h.methods=function(){return this._world.methods},h.hooks=function(){return this._world.hooks},h.verbose=function(e){const t="undefined"!=typeof process&&process.env?process.env:self.env||{};return t.DEBUG_TAGS="tagger"===e||!0===e||"",t.DEBUG_MATCH="match"===e||!0===e||"",t.DEBUG_CHUNKS="chunker"===e||!0===e||"",this},h.version="14.15.1";var d={one:{cacheDoc:function(e){const t=e.map((e=>{const t=new Set;return e.forEach((e=>{""!==e.normal&&t.add(e.normal),e.switch&&t.add(`%${e.switch}%`),e.implicit&&t.add(e.implicit),e.machine&&t.add(e.machine),e.root&&t.add(e.root),e.alias&&e.alias.forEach((e=>t.add(e)));const n=Array.from(e.tags);for(let e=0;e/^\p{Lu}[\p{Ll}'’]/u.test(e)||/^\p{Lu}$/u.test(e),b=(e,t,n)=>{if(n.forEach((e=>e.dirty=!0)),e){const r=[t,0].concat(n);Array.prototype.splice.apply(e,r)}return e},v=function(e){const t=e[e.length-1];!t||/ $/.test(t.post)||/[-–—]/.test(t.post)||(t.post+=" ")},y=(e,t,n)=>{const r=/[-.?!,;:)–—'"]/g,o=e[t-1];if(!o)return;const a=o.post;if(r.test(a)){const e=a.match(r).join(""),t=n[n.length-1];t.post=e+t.post,o.post=o.post.replace(r,"")}},w=function(e,t,n,r){const[o,a,i]=t;0===a||i===r[o].length?v(n):(v(n),v([e[t[1]]])),function(e,t,n){const r=e[t];if(0!==t||!f(r.text))return;n[0].text=n[0].text.replace(/^\p{Ll}/u,(e=>e.toUpperCase()));const o=e[t];o.tags.has("ProperNoun")||o.tags.has("Acronym")||f(o.text)&&o.text.length>1&&(o.text=(a=o.text,a.replace(/^\p{Lu}/u,(e=>e.toLowerCase()))));var a}(e,a,n),b(e,a,n)};let k=0;const P=e=>(e=e.length<3?"0"+e:e).length<3?"0"+e:e,A=function(e){let[t,n]=e.index||[0,0];k+=1,k=k>46655?0:k,t=t>46655?0:t,n=n>1294?0:n;let r=P(k.toString(36));r+=P(t.toString(36));let o=n.toString(36);o=o.length<2?"0"+o:o,r+=o;return r+=parseInt(36*Math.random(),10).toString(36),e.normal+"|"+r.toUpperCase()},C=function(e){if(e.has("@hasContraction")&&"function"==typeof e.contractions){e.grow("@hasContraction").contractions().expand()}},N=e=>"[object Array]"===Object.prototype.toString.call(e),j=function(e,t,n){const{document:r,world:o}=t;t.uncache();const a=t.fullPointer,i=t.fullPointer;t.forEach(((s,l)=>{const u=s.fullPointer[0],[c]=u,h=r[c];let d=function(e,t){const{methods:n}=t;return"string"==typeof e?n.one.tokenize.fromString(e,t)[0]:"object"==typeof e&&e.isView?e.clone().docs[0]||[]:N(e)?N(e[0])?e[0]:e:[]}(e,o);0!==d.length&&(d=function(e){return e.map((e=>(e.id=A(e),e)))}(d),n?(C(t.update([u]).firstTerm()),w(h,u,d,r)):(C(t.update([u]).lastTerm()),function(e,t,n,r){const[o,,a]=t,i=(r[o]||[]).length;ae.replace(/^\p{Ll}/u,(e=>e.toUpperCase())),H=e=>e.replace(/^\p{Lu}/u,(e=>e.toLowerCase()));T.replaceWith=function(e,t={}){let n=this.fullPointer;const r=this;if(this.uncache(),"function"==typeof e)return function(e,t,n){return e.forEach((e=>{const r=t(e);e.replaceWith(r,n)})),e}(r,e,t);const o=r.docs[0];if(!o)return r;const a=t.possessives&&o[o.length-1].tags.has("Possessive"),i=t.case&&(s=o[0].text,/^\p{Lu}[\p{Ll}'’]/u.test(s)||/^\p{Lu}$/u.test(s));var s;e=function(e,t){if("string"!=typeof e)return e;const n=t.groups();return e=e.replace(I,(e=>{const t=e.replace(/\$/,"");return n.hasOwnProperty(t)?n[t].text():e})),e}(e,r);const l=this.update(n);n=n.map((e=>e.slice(0,3)));const u=(l.docs[0]||[]).map((e=>Array.from(e.tags))),c=l.docs[0][0].pre,h=l.docs[0][l.docs[0].length-1].post;if("string"==typeof e&&(e=this.fromText(e).compute("id")),r.insertAfter(e),l.has("@hasContraction")&&r.contractions){r.grow("@hasContraction+").contractions().expand()}if(r.delete(l),a){const e=r.docs[0],t=e[e.length-1];t.tags.has("Possessive")||(t.text+="'s",t.normal+="'s",t.tags.add("Possessive"))}if(c&&r.docs[0]&&(r.docs[0][0].pre=c),h&&r.docs[0]){const e=r.docs[0][r.docs[0].length-1];e.post.trim()||(e.post=h)}const d=r.toView(n).compute(["index","freeze","lexicon"]);if(d.world.compute.preTagger&&d.compute("preTagger"),d.compute("unfreeze"),t.tags&&d.terms().forEach(((e,t)=>{e.tagSafe(u[t])})),!d.docs[0]||!d.docs[0][0])return d;if(t.case){const e=i?D:H;d.docs[0][0].text=e(d.docs[0][0].text)}return d},T.replace=function(e,t,n){if(e&&!t)return this.replaceWith(e,n);const r=this.match(e);return r.found?(this.soften(),r.replaceWith(t,n)):this};const E={remove:function(e){const{indexN:t}=this.methods.one.pointer;this.uncache();let n=this.all(),r=this;e&&(n=this,r=this.match(e));const o=!n.ptrs;if(r.has("@hasContraction")&&r.contractions){r.grow("@hasContraction").contractions().expand()}let a=n.fullPointer;const i=r.fullPointer.reverse(),s=function(e,t){t.forEach((t=>{const[n,r,o]=t,a=o-r;e[n]&&(o===e[n].length&&o>1&&function(e,t){const n=e.length-1,r=e[n],o=e[n-t];o&&r&&(o.post+=r.post,o.post=o.post.replace(/ +([.?!,;:])/,"$1"),o.post=o.post.replace(/[,;:]+([.?!])/,"$1"))}(e[n],a),e[n].splice(r,a))}));for(let t=e.length-1;t>=0;t-=1)if(0===e[t].length&&(e.splice(t,1),t===e.length&&e[t-1])){const n=e[t-1],r=n[n.length-1];r&&(r.post=r.post.trimEnd())}return e}(this.document,i);if(a=function(e,t){return e=e.map((e=>{const[n]=e;return t[n]?(t[n].forEach((t=>{const n=t[2]-t[1];e[1]<=t[1]&&e[2]>=t[2]&&(e[2]-=n)})),e):e})),e.forEach(((t,n)=>{if(0===t[1]&&0==t[2])for(let t=n+1;te[2]-e[1]>0))).map((e=>(e[3]=null,e[4]=null,e)))}(a,t(i)),n.ptrs=a,n.document=s,n.compute("index"),o&&(n.ptrs=void 0),!e)return this.ptrs=[],n.none();return n.toView(a)}};E.delete=E.remove;const G={pre:function(e,t){return void 0===e&&this.found?this.docs[0][0].pre:(this.docs.forEach((n=>{const r=n[0];!0===t?r.pre+=e:r.pre=e})),this)},post:function(e,t){if(void 0===e){const e=this.docs[this.docs.length-1];return e[e.length-1].post}return this.docs.forEach((n=>{const r=n[n.length-1];!0===t?r.post+=e:r.post=e})),this},trim:function(){if(!this.found)return this;const e=this.docs,t=e[0][0];t.pre=t.pre.trimStart();const n=e[e.length-1],r=n[n.length-1];return r.post=r.post.trimEnd(),this},hyphenate:function(){return this.docs.forEach((e=>{e.forEach(((t,n)=>{0!==n&&(t.pre=""),e[n+1]&&(t.post="-")}))})),this},dehyphenate:function(){const e=/[-–—]/;return this.docs.forEach((t=>{t.forEach((t=>{e.test(t.post)&&(t.post=" ")}))})),this},toQuotations:function(e,t){return e=e||'"',t=t||'"',this.docs.forEach((n=>{n[0].pre=e+n[0].pre;const r=n[n.length-1];r.post=t+r.post})),this},toParentheses:function(e,t){return e=e||"(",t=t||")",this.docs.forEach((n=>{n[0].pre=e+n[0].pre;const r=n[n.length-1];r.post=t+r.post})),this}};G.deHyphenate=G.dehyphenate,G.toQuotation=G.toQuotations;var O={alpha:(e,t)=>e.normalt.normal?1:0,length:(e,t)=>{const n=e.normal.trim().length,r=t.normal.trim().length;return nr?-1:0},wordCount:(e,t)=>e.wordst.words?-1:0,sequential:(e,t)=>e[0]t[0]?-1:e[1]>t[1]?1:-1,byFreq:function(e){const t={};return e.forEach((e=>{t[e.normal]=t[e.normal]||0,t[e.normal]+=1})),e.sort(((e,n)=>{const r=t[e.normal],o=t[n.normal];return ro?-1:0})),e}};const F=new Set(["index","sequence","seq","sequential","chron","chronological"]),V=new Set(["freq","frequency","topk","repeats"]),z=new Set(["alpha","alphabetical"]);var B={unique:function(){const e=new Set,t=this.filter((t=>{const n=t.text("machine");return!e.has(n)&&(e.add(n),!0)}));return t},reverse:function(){let e=this.pointer||this.docs.map(((e,t)=>[t]));return e=[].concat(e),e=e.reverse(),this._cache&&(this._cache=this._cache.reverse()),this.update(e)},sort:function(e){const{docs:t,pointer:n}=this;if(this.uncache(),"function"==typeof e)return function(e,t){let n=e.fullPointer;return n=n.sort(((n,r)=>(n=e.update([n]),r=e.update([r]),t(n,r)))),e.ptrs=n,e}(this,e);e=e||"alpha";const r=n||t.map(((e,t)=>[t]));let o=t.map(((e,t)=>({index:t,words:e.length,normal:e.map((e=>e.machine||e.normal||"")).join(" "),pointer:r[t]})));return F.has(e)&&(e="sequential"),z.has(e)&&(e="alpha"),V.has(e)?(o=O.byFreq(o),this.update(o.map((e=>e.pointer)))):"function"==typeof O[e]?(o=o.sort(O[e]),this.update(o.map((e=>e.pointer)))):this}};const S=function(e,t){if(e.length>0){const t=e[e.length-1],n=t[t.length-1];!1===/ /.test(n.post)&&(n.post+=" ")}return e=e.concat(t)};var $={concat:function(e){if("string"==typeof e){const t=this.fromText(e);if(this.found&&this.ptrs){const e=this.fullPointer,n=e[e.length-1][0];this.document.splice(n,0,...t.document)}else this.document=this.document.concat(t.document);return this.all().compute("index")}if("object"==typeof e&&e.isView)return function(e,t){if(e.document===t.document){const n=e.fullPointer.concat(t.fullPointer);return e.toView(n).compute("index")}return t.fullPointer.forEach((t=>{t[0]+=e.document.length})),e.document=S(e.document,t.docs),e.all()}(this,e);if(t=e,"[object Array]"===Object.prototype.toString.call(t)){const t=S(this.document,e);return this.document=t,this.all()}var t;return this}};var M={harden:function(){return this.ptrs=this.fullPointer,this},soften:function(){let e=this.ptrs;return!e||e.length<1||(e=e.map((e=>e.slice(0,3))),this.ptrs=e),this}};const L=Object.assign({},{toLowerCase:function(){return this.termList().forEach((e=>{e.text=e.text.toLowerCase()})),this},toUpperCase:function(){return this.termList().forEach((e=>{e.text=e.text.toUpperCase()})),this},toTitleCase:function(){return this.termList().forEach((e=>{e.text=e.text.replace(/^ *[a-z\u00C0-\u00FF]/,(e=>e.toUpperCase()))})),this},toCamelCase:function(){return this.docs.forEach((e=>{e.forEach(((t,n)=>{0!==n&&(t.text=t.text.replace(/^ *[a-z\u00C0-\u00FF]/,(e=>e.toUpperCase()))),n!==e.length-1&&(t.post="")}))})),this}},x,T,E,G,B,$,M),K={id:function(e){const t=e.docs;for(let e=0;e(e.implicit=e.text,e.machine=e.text,e.pre="",e.post="",e.text="",e.normal="",e.index=[r,o+t],e))),n[0]&&(n[0].pre=e[r][o].pre,n[n.length-1].post=e[r][o].post,n[0].text=e[r][o].text,n[0].normal=e[r][o].normal),e[r].splice(o,1,...n))},R=/'/,Q=new Set(["what","how","when","where","why"]),Z=new Set(["be","go","start","think","need"]),_=new Set(["been","gone"]),X=/'/,Y=/(e|é|aison|sion|tion)$/,ee=/(age|isme|acle|ege|oire)$/;var te=(e,t)=>["je",e[t].normal.split(X)[1]],ne=(e,t)=>{const n=e[t].normal.split(X)[1];return n&&n.endsWith("e")?["la",n]:["le",n]},re=(e,t)=>{const n=e[t].normal.split(X)[1];return n&&Y.test(n)&&!ee.test(n)?["du",n]:n&&n.endsWith("s")?["des",n]:["de",n]};const oe=/^([0-9.]{1,4}[a-z]{0,2}) ?[-–—] ?([0-9]{1,4}[a-z]{0,2})$/i,ae=/^([0-9]{1,2}(:[0-9][0-9])?(am|pm)?) ?[-–—] ?([0-9]{1,2}(:[0-9][0-9])?(am|pm)?)$/i,ie=/^[0-9]{3}-[0-9]{4}$/,se=function(e,t){const n=e[t];let r=n.text.match(oe);return null!==r?!0===n.tags.has("PhoneNumber")||ie.test(n.text)?null:[r[1],"to",r[2]]:(r=n.text.match(ae),null!==r?[r[1],"to",r[4]]:null)},le=/^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/,ue=function(e,t,n){const r=n.model.one.numberSuffixes||{},o=e[t].text.match(le);if(null!==o){const e=o[2].toLowerCase().trim();return r.hasOwnProperty(e)?null:[o[1],e]}return null},ce=/'/,he=/^[0-9][^-–—]*[-–—].*?[0-9]/,de=function(e,t,n,r){const o=t.update();o.document=[e];let a=n+r;n>0&&(n-=1),e[a]&&(a+=1),o.ptrs=[[0,n,a]]},ge={t:(e,t)=>function(e,t){return"ain't"===e[t].normal||"aint"===e[t].normal?null:[e[t].normal.replace(/n't/,""),"not"]}(e,t),d:(e,t)=>function(e,t){const n=e[t].normal.split(R)[0];if(Q.has(n))return[n,"did"];if(e[t+1]){if(_.has(e[t+1].normal))return[n,"had"];if(Z.has(e[t+1].normal))return[n,"would"]}return null}(e,t)},me={j:(e,t)=>te(e,t),l:(e,t)=>ne(e,t),d:(e,t)=>re(e,t)},pe=function(e,t,n,r){for(let o=0;o2)return a.out.concat(r)}return null},fe=function(e,t){const n=t.fromText(e.join(" "));return n.compute(["id","alias"]),n.docs[0]},be=function(e,t){for(let n=t+1;n<5&&e[n];n+=1)if("been"===e[n].normal)return["there","has"];return["there","is"]};var ve={contractions:e=>{const{world:t,document:n}=e,{model:r,methods:o}=t,a=r.one.contractions||[];n.forEach(((r,i)=>{for(let s=r.length-1;s>=0;s-=1){let l=null,u=null;if(!0===ce.test(r[s].normal)){const e=r[s].normal.split(ce);l=e[0],u=e[1]}let c=pe(a,r[s],l,u);!c&&ge.hasOwnProperty(u)&&(c=ge[u](r,s,t)),!c&&me.hasOwnProperty(l)&&(c=me[l](r,s)),"there"===l&&"s"===u&&(c=be(r,s)),c?(c=fe(c,e),U(n,[i,s],c),de(n[i],e,s,c.length)):he.test(r[s].normal)?(c=se(r,s),c&&(c=fe(c,e),U(n,[i,s],c),o.one.setTag(c,"NumberRange",t),c[2]&&c[2].tags.has("Time")&&o.one.setTag([c[0]],"Time",t,null,"time-range"),de(n[i],e,s,c.length))):(c=ue(r,s,t),c&&(c=fe(c,e),U(n,[i,s],c),o.one.setTag([c[1]],"Unit",t,null,"contraction-unit")))}}))}};const ye={model:q,compute:ve,hooks:["contractions"]},we=function(e){const t=e.world,{model:n,methods:r}=e.world,o=r.one.setTag,{frozenLex:a}=n.one,i=n.one._multiCache||{};e.docs.forEach((e=>{for(let n=0;nn;r-=1){const i=e.slice(n,r+1),s=i.map((e=>e.machine||e.normal)).join(" ");!0!==a.hasOwnProperty(s)||(o(i,a[s],t,!1,"1-frozen-multi-lexicon"),i.forEach((e=>e.frozen=!0)))}}void 0!==a[s]&&a.hasOwnProperty(s)&&(o([r],a[s],t,!1,"1-freeze-lexicon"),r.frozen=!0)}}))};const ke=e=>""+e+"",Pe=e=>""+e+"",Ae=function(e){e.docs.forEach((e=>{console.log(ke("\n ┌─────────")),e.forEach((e=>{let t=` ${Pe("│")} `;const n=e.implicit||e.text||"-";!0===e.frozen?t+=`${ke(n)} ❄️`:t+=Pe(n),console.log(t)}))}))};var Ce={compute:{frozen:we,freeze:we,unfreeze:function(e){return e.docs.forEach((e=>{e.forEach((e=>{delete e.frozen}))})),e}},mutate:e=>{const t=e.methods.one;t.termMethods.isFrozen=e=>!0===e.frozen,t.debug.freeze=Ae,t.debug.frozen=Ae},api:function(e){e.prototype.freeze=function(){return this.docs.forEach((e=>{e.forEach((e=>{e.frozen=!0}))})),this},e.prototype.unfreeze=function(){this.compute("unfreeze")},e.prototype.isFrozen=function(){return this.match("@isFrozen+")}},hooks:["freeze"]};const Ne=function(e,t,n){const{model:r,methods:o}=n,a=o.one.setTag,i=r.one._multiCache||{},{lexicon:s}=r.one||{},l=e[t],u=l.machine||l.normal;if(void 0!==i[u]&&e[t+1]){for(let r=t+i[u]-1;r>t;r-=1){const o=e.slice(t,r+1);if(o.length<=1)return!1;const i=o.map((e=>e.machine||e.normal)).join(" ");if(!0===s.hasOwnProperty(i)){const e=s[i];return a(o,e,n,!1,"1-multi-lexicon"),!e||2!==e.length||"PhrasalVerb"!==e[0]&&"PhrasalVerb"!==e[1]||a([o[1]],"Particle",n,!1,"1-phrasal-particle"),!0}}return!1}return null},je=/^(under|over|mis|re|un|dis|semi|pre|post)-?/,xe=new Set(["Verb","Infinitive","PastTense","Gerund","PresentTense","Adjective","Participle"]),Ie=function(e,t,n){const{model:r,methods:o}=n,a=o.one.setTag,{lexicon:i}=r.one,s=e[t],l=s.machine||s.normal;if(void 0!==i[l]&&i.hasOwnProperty(l))return a([s],i[l],n,!1,"1-lexicon"),!0;if(s.alias){const e=s.alias.find((e=>i.hasOwnProperty(e)));if(e)return a([s],i[e],n,!1,"1-lexicon-alias"),!0}if(!0===je.test(l)){const e=l.replace(je,"");if(i.hasOwnProperty(e)&&e.length>3&&xe.has(i[e]))return a([s],i[e],n,!1,"1-lexicon-prefix"),!0}return null};var Te={lexicon:function(e){const t=e.world;e.docs.forEach((e=>{for(let n=0;n{const o=e[r],a=(r=(r=r.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);a.length>1&&(void 0===n[a[0]]||a.length>n[a[0]])&&(n[a[0]]=a.length),t[r]=t[r]||o})),delete t[""],delete t.null,delete t[" "],{lex:t,_multi:n}}}};var He={addWords:function(e,t=!1){const n=this.world(),{methods:r,model:o}=n;if(!e)return;if(Object.keys(e).forEach((t=>{"string"==typeof e[t]&&e[t].startsWith("#")&&(e[t]=e[t].replace(/^#/,""))})),!0===t){const{lex:t,_multi:a}=r.one.expandLexicon(e,n);return Object.assign(o.one._multiCache,a),void Object.assign(o.one.frozenLex,t)}if(r.two.expandLexicon){const{lex:t,_multi:a}=r.two.expandLexicon(e,n);Object.assign(o.one.lexicon,t),Object.assign(o.one._multiCache,a)}const{lex:a,_multi:i}=r.one.expandLexicon(e,n);Object.assign(o.one.lexicon,a),Object.assign(o.one._multiCache,i)}};var Ee={model:{one:{lexicon:{},_multiCache:{},frozenLex:{}}},methods:De,compute:Te,lib:He,hooks:["lexicon"]};const Ge=function(e,t){const n=[{}],r=[null],o=[0],a=[];let i=0;e.forEach((function(e){let o=0;const a=function(e,t){const{methods:n,model:r}=t,o=n.one.tokenize.splitTerms(e,r).map((e=>n.one.tokenize.splitWhitespace(e,r)));return o.map((e=>e.text.toLowerCase()))}(e,t);for(let e=0;e0&&!n[i].hasOwnProperty(l);)i=o[i];if(n.hasOwnProperty(i)){const e=n[i][l];o[u]=e,r[e]&&(r[u]=r[u]||[],r[u]=r[u].concat(r[e]))}else o[u]=0}}return{goNext:n,endAs:r,failTo:o}},Oe=function(e,t,n){let r=0;const o=[];for(let a=0;a0&&(void 0===t.goNext[r]||!t.goNext[r].hasOwnProperty(i));)r=t.failTo[r]||0;if(t.goNext[r].hasOwnProperty(i)&&(r=t.goNext[r][i],t.endAs[r])){const n=t.endAs[r];for(let t=0;t{for(let n=e.length-1;n>=0;n-=1)if(e[n]!==t)return e=e.slice(0,n+1);return e},ze={buildTrie:function(e){return function(e){return e.goNext=e.goNext.map((e=>{if(0!==Object.keys(e).length)return e})),e.goNext=Ve(e.goNext,void 0),e.failTo=Ve(e.failTo,0),e.endAs=Ve(e.endAs,null),e}(Ge(e,this.world()))}};ze.compile=ze.buildTrie;var Be={api:function(e){e.prototype.lookup=function(e,t={}){if(!e)return this.none();"string"==typeof e&&(e=[e]);var n;let r=function(e,t,n){let r=[];n.form=n.form||"normal";const o=e.docs;if(!t.goNext||!t.goNext[0])return console.error("Compromise invalid lookup trie"),e.none();const a=Object.keys(t.goNext[0]);for(let i=0;i0&&(r=r.concat(l))}return e.update(r)}(this,(n=e,"[object Object]"===Object.prototype.toString.call(n)?e:Ge(e,this.world)),t);return r=r.settle(),r}},lib:ze};const Se=function(e,t){return t?(e.forEach((e=>{const n=e[0];t[n]&&(e[0]=t[n][0],e[1]+=t[n][1],e[2]+=t[n][1])})),e):e},$e=function(e,t){let{ptrs:n}=e;const{byGroup:r}=e;return n=Se(n,t),Object.keys(r).forEach((e=>{r[e]=Se(r[e],t)})),{ptrs:n,byGroup:r}},Me=function(e,t,n){const r=n.methods.one;return"number"==typeof e&&(e=String(e)),"string"==typeof e&&(e=r.killUnicode(e,n),e=r.parseMatch(e,t,n)),e},Le=e=>"[object Object]"===Object.prototype.toString.call(e),Ke=e=>e&&Le(e)&&!0===e.isView,Je=e=>e&&Le(e)&&!0===e.isNet;var We={matchOne:function(e,t,n){const r=this.methods.one;if(Ke(e))return this.intersection(e).eq(0);if(Je(e))return this.sweep(e,{tagger:!1,matchOne:!0}).view;const o={regs:e=Me(e,n,this.world),group:t,justOne:!0},a=r.match(this.docs,o,this._cache),{ptrs:i,byGroup:s}=$e(a,this.fullPointer),l=this.toView(i);return l._groups=s,l},match:function(e,t,n){const r=this.methods.one;if(Ke(e))return this.intersection(e);if(Je(e))return this.sweep(e,{tagger:!1}).view.settle();const o={regs:e=Me(e,n,this.world),group:t},a=r.match(this.docs,o,this._cache),{ptrs:i,byGroup:s}=$e(a,this.fullPointer),l=this.toView(i);return l._groups=s,l},has:function(e,t,n){const r=this.methods.one;if(Ke(e)){return this.intersection(e).fullPointer.length>0}if(Je(e))return this.sweep(e,{tagger:!1}).view.found;const o={regs:e=Me(e,n,this.world),group:t,justOne:!0};return r.match(this.docs,o,this._cache).ptrs.length>0},if:function(e,t,n){const r=this.methods.one;if(Ke(e))return this.filter((t=>t.intersection(e).found));if(Je(e)){const t=this.sweep(e,{tagger:!1}).view.settle();return this.if(t)}const o={regs:e=Me(e,n,this.world),group:t,justOne:!0};let a=this.fullPointer;const i=this._cache||[];a=a.filter(((e,t)=>{const n=this.update([e]);return r.match(n.docs,o,i[t]).ptrs.length>0}));const s=this.update(a);return this._cache&&(s._cache=a.map((e=>i[e[0]]))),s},ifNo:function(e,t,n){const{methods:r}=this,o=r.one;if(Ke(e))return this.filter((t=>!t.intersection(e).found));if(Je(e)){const t=this.sweep(e,{tagger:!1}).view.settle();return this.ifNo(t)}e=Me(e,n,this.world);const a=this._cache||[],i=this.filter(((n,r)=>{const i={regs:e,group:t,justOne:!0};return 0===o.match(n.docs,i,a[r]).ptrs.length}));return this._cache&&(i._cache=i.ptrs.map((e=>a[e[0]]))),i}};var qe={before:function(e,t,n){const{indexN:r}=this.methods.one.pointer,o=[],a=r(this.fullPointer);Object.keys(a).forEach((e=>{const t=a[e].sort(((e,t)=>e[1]>t[1]?1:-1))[0];t[1]>0&&o.push([t[0],0,t[1]])}));const i=this.toView(o);return e?i.match(e,t,n):i},after:function(e,t,n){const{indexN:r}=this.methods.one.pointer,o=[],a=r(this.fullPointer),i=this.document;Object.keys(a).forEach((e=>{const t=a[e].sort(((e,t)=>e[1]>t[1]?-1:1))[0],[n,,r]=t;r{const a=n.before(e,t);if(a.found){const e=a.terms();r[o][1]-=e.length,r[o][3]=e.docs[0][0].id}})),this.update(r)},growRight:function(e,t,n){"string"==typeof e&&(e=this.world.methods.one.parseMatch(e,n,this.world)),e[0].start=!0;const r=this.fullPointer;return this.forEach(((n,o)=>{const a=n.after(e,t);if(a.found){const e=a.terms();r[o][2]+=e.length,r[o][4]=null}})),this.update(r)},grow:function(e,t,n){return this.growRight(e,t,n).growLeft(e,t,n)}};const Ue=function(e,t){return[e[0],e[1],t[2]]},Re=(e,t,n)=>{return"string"==typeof e||(r=e,"[object Array]"===Object.prototype.toString.call(r))?t.match(e,n):e||t.none();var r},Qe=function(e,t){const[n,r,o]=e;return t.document[n]&&t.document[n][r]&&(e[3]=e[3]||t.document[n][r].id,t.document[n][o-1]&&(e[4]=e[4]||t.document[n][o-1].id)),e},Ze={splitOn:function(e,t){const{splitAll:n}=this.methods.one.pointer,r=Re(e,this,t).fullPointer,o=n(this.fullPointer,r);let a=[];return o.forEach((e=>{a.push(e.passthrough),a.push(e.before),a.push(e.match),a.push(e.after)})),a=a.filter((e=>e)),a=a.map((e=>Qe(e,this))),this.update(a)},splitBefore:function(e,t){const{splitAll:n}=this.methods.one.pointer,r=Re(e,this,t).fullPointer,o=n(this.fullPointer,r);for(let e=0;e{a.push(e.passthrough),a.push(e.before),e.match&&e.after?a.push(Ue(e.match,e.after)):a.push(e.match)})),a=a.filter((e=>e)),a=a.map((e=>Qe(e,this))),this.update(a)},splitAfter:function(e,t){const{splitAll:n}=this.methods.one.pointer,r=Re(e,this,t).fullPointer,o=n(this.fullPointer,r);let a=[];return o.forEach((e=>{a.push(e.passthrough),e.before&&e.match?a.push(Ue(e.before,e.match)):(a.push(e.before),a.push(e.match)),a.push(e.after)})),a=a.filter((e=>e)),a=a.map((e=>Qe(e,this))),this.update(a)}};Ze.split=Ze.splitAfter;const _e=function(e,t){return!(!e||!t)&&(e[0]===t[0]&&e[2]===t[1])},Xe=function(e,t,n){const r=e.world,o=r.methods.one.parseMatch;n=n||"^.";const a=o(t=t||".$",{},r),i=o(n,{},r);a[a.length-1].end=!0,i[0].start=!0;const s=e.fullPointer,l=[s[0]];for(let t=1;t)?\/.*?[^\\/]\/[?\]+*$~]*)(?:\s|$)/,nt=/([!~[^]*(?:<[^<]*>)?\([^)]+[^\\)]\)[?\]+*$~]*)(?:\s|$)/,rt=/ /g,ot=e=>/^[![^]*(<[^<]*>)?\//.test(e)&&/\/[?\]+*$~]*$/.test(e),at=function(e){return e=(e=e.map((e=>e.trim()))).filter((e=>e))},it=/\{([0-9]+)?(, *[0-9]*)?\}/,st=/&&/,lt=new RegExp(/^<\s*(\S+)\s*>/),ut=e=>e.charAt(0).toUpperCase()+e.substring(1),ct=e=>e.charAt(e.length-1),ht=e=>e.charAt(0),dt=e=>e.substring(1),gt=e=>e.substring(0,e.length-1),mt=function(e){return e=dt(e),e=gt(e)},pt=function(e,t){const n={};for(let r=0;r<2;r+=1){if("$"===ct(e)&&(n.end=!0,e=gt(e)),"^"===ht(e)&&(n.start=!0,e=dt(e)),"?"===ct(e)&&(n.optional=!0,e=gt(e)),("["===ht(e)||"]"===ct(e))&&(n.group=null,"["===ht(e)&&(n.groupStart=!0),"]"===ct(e)&&(n.groupEnd=!0),e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===ht(e))){const t=lt.exec(e);t.length>=2&&(n.group=t[1],e=e.replace(t[0],""))}if("+"===ct(e)&&(n.greedy=!0,e=gt(e)),"*"!==e&&"*"===ct(e)&&"\\*"!==e&&(n.greedy=!0,e=gt(e)),"!"===ht(e)&&(n.negative=!0,e=dt(e)),"~"===ht(e)&&"~"===ct(e)&&e.length>2&&(e=mt(e),n.fuzzy=!0,n.min=t.fuzzy||.85,!1===/\(/.test(e)))return n.word=e,n;if("/"===ht(e)&&"/"===ct(e))return e=mt(e),t.caseSensitive&&(n.use="text"),n.regex=new RegExp(e),n;if(!0===it.test(e)&&(e=e.replace(it,((e,t,r)=>(void 0===r?(n.min=Number(t),n.max=Number(t)):(r=r.replace(/, */,""),void 0===t?(n.min=0,n.max=Number(r)):(n.min=Number(t),n.max=Number(r||999))),n.greedy=!0,n.min||(n.optional=!0),"")))),"("===ht(e)&&")"===ct(e)){st.test(e)?(n.choices=e.split(st),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=dt(n.choices[0]);const r=n.choices.length-1;n.choices[r]=gt(n.choices[r]),n.choices=n.choices.map((e=>e.trim())),n.choices=n.choices.filter((e=>e)),n.choices=n.choices.map((e=>e.split(/ /g).map((e=>pt(e,t))))),e=""}if("{"===ht(e)&&"}"===ct(e)){if(e=mt(e),n.root=e,/\//.test(e)){const e=n.root.split(/\//);n.root=e[0],n.pos=e[1],"adj"===n.pos&&(n.pos="Adjective"),n.pos=n.pos.charAt(0).toUpperCase()+n.pos.substr(1).toLowerCase(),void 0!==e[2]&&(n.sense=e[2])}return n}if("<"===ht(e)&&">"===ct(e))return e=mt(e),n.chunk=ut(e),n.greedy=!0,n;if("%"===ht(e)&&"%"===ct(e))return e=mt(e),n.switch=e,n}return"#"===ht(e)?(n.tag=dt(e),n.tag=ut(n.tag),n):"@"===ht(e)?(n.method=dt(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),t.caseSensitive?n.use="text":e=e.toLowerCase(),n.word=e),n)},ft=/[a-z0-9][-–—][a-z]/i,bt=function(e,t){const{all:n}=t.methods.two.transform.verb||{},r=e.root;return n?n(r,t.model):[]},vt=function(e,t){const{all:n}=t.methods.two.transform.noun||{};return n?n(e.root,t.model):[e.root]},yt=function(e,t){const{all:n}=t.methods.two.transform.adjective||{};return n?n(e.root,t.model):[e.root]},wt=function(e){return e=function(e){let t=0,n=null;for(let r=0;r(e.fuzzy&&e.choices&&e.choices.forEach((t=>{1===t.length&&t[0].word&&(t[0].fuzzy=!0,t[0].min=e.min)})),e)))}(e=e.map((e=>{if(void 0!==e.choices){if("or"!==e.operator)return e;if(!0===e.fuzzy)return e;!0===e.choices.every((e=>{if(1!==e.length)return!1;const t=e[0];return!0!==t.fuzzy&&!t.start&&!t.end&&void 0!==t.word&&!0!==t.negative&&!0!==t.optional&&!0!==t.method}))&&(e.fastOr=new Set,e.choices.forEach((t=>{e.fastOr.add(t[0].word)})),delete e.choices)}return e}))),e},kt=function(e,t){for(const n of t)if(e.has(n))return!0;return!1},Pt=function(e,t){for(let n=0;nn?r:n)+1;if(Math.abs(n-r)>(o||100))return o||100;const a=[];for(let e=0;e4)return n;l=t[i-1],u=s===l?0:1,c=a[o-1][i]+1,(h=a[o][i-1]+1)1&&i>1&&s===t[i-2]&&e[o-2]===l&&(h=a[o-2][i-2]+u)-1!==e.post.indexOf(t),Tt={hasQuote:e=>Ct.test(e.pre)||Nt.test(e.post),hasComma:e=>It(e,","),hasPeriod:e=>!0===It(e,".")&&!1===It(e,"..."),hasExclamation:e=>It(e,"!"),hasQuestionMark:e=>It(e,"?")||It(e,"¿"),hasEllipses:e=>It(e,"..")||It(e,"…"),hasSemicolon:e=>It(e,";"),hasColon:e=>It(e,":"),hasSlash:e=>/\//.test(e.text),hasHyphen:e=>jt.test(e.post)||jt.test(e.pre),hasDash:e=>xt.test(e.post)||xt.test(e.pre),hasContraction:e=>Boolean(e.implicit),isAcronym:e=>e.tags.has("Acronym"),isKnown:e=>e.tags.size>0,isTitleCase:e=>/^\p{Lu}[a-z'\u00C0-\u00FF]/u.test(e.text),isUpperCase:e=>/^\p{Lu}+$/u.test(e.text)};Tt.hasQuotation=Tt.hasQuote;let Dt=function(){};Dt=function(e,t,n,r){const o=function(e,t,n,r){if(!0===t.anything)return!0;if(!0===t.start&&0!==n)return!1;if(!0===t.end&&n!==r-1)return!1;if(void 0!==t.id&&t.id===e.id)return!0;if(void 0!==t.word){if(t.use)return t.word===e[t.use];if(null!==e.machine&&e.machine===t.word)return!0;if(void 0!==e.alias&&e.alias.hasOwnProperty(t.word))return!0;if(!0===t.fuzzy){if(t.word===e.root)return!0;if(At(t.word,e.normal)>=t.min)return!0}return!(!e.alias||!e.alias.some((e=>e===t.word)))||t.word===e.text||t.word===e.normal}if(void 0!==t.tag)return!0===e.tags.has(t.tag);if(void 0!==t.method)return"function"==typeof Tt[t.method]&&!0===Tt[t.method](e);if(void 0!==t.pre)return e.pre&&e.pre.includes(t.pre);if(void 0!==t.post)return e.post&&e.post.includes(t.post);if(void 0!==t.regex){let n=e.normal;return t.use&&(n=e[t.use]),t.regex.test(n)}if(void 0!==t.chunk)return e.chunk===t.chunk;if(void 0!==t.switch)return e.switch===t.switch;if(void 0!==t.machine)return e.normal===t.machine||e.machine===t.machine||e.root===t.machine;if(void 0!==t.sense)return e.sense===t.sense;if(void 0!==t.fastOr){if(t.pos&&!e.tags.has(t.pos))return null;const n=e.root||e.implicit||e.machine||e.normal;return t.fastOr.has(n)||t.fastOr.has(e.text)}return void 0!==t.choices&&("and"===t.operator?t.choices.every((t=>Dt(e,t,n,r))):t.choices.some((t=>Dt(e,t,n,r))))}(e,t,n,r);return!0===t.negative?!o:o};const Ht=function(e,t){if(!0===e.end&&!0===e.greedy&&t.start_i+t.tn.max)return e.t=e.t+n.max,!0;if(!0===e.hasGroup){Et(e,e.t).length=r-e.t}return e.t=r,!0},Ot=function(e,t=0){const n=e.regs[e.r];let r=!1;for(let a=0;a{let o=0;const a=e.t+r+t+o;if(void 0===e.terms[a])return!1;const i=Dt(e.terms[a],n,a+e.start_i,e.phrase_length);if(!0===i&&!0===n.greedy)for(let t=1;t{const r=n.every(((t,n)=>{const r=e.t+n;return void 0!==e.terms[r]&&Dt(e.terms[r],t,r,e.phrase_length)}));return!0===r&&n.length>t&&(t=n.length),r}))&&t}(e);if(r){if(!0===n.negative)return null;if(!0===e.hasGroup){Et(e,e.t).length+=r}if(!0===n.end){const t=e.phrase_length-1;if(e.t+e.start_i!==t)return null}return e.t+=r,!0}return!!n.optional||null},zt=function(e){const{regs:t}=e,n=t[e.r],r=Object.assign({},n);r.negative=!1;if(Dt(e.terms[e.t],r,e.start_i+e.t,e.phrase_length))return!1;if(n.optional){const n=t[e.r+1];if(n){if(Dt(e.terms[e.t],n,e.start_i+e.t,e.phrase_length))e.r+=1;else if(n.optional&&t[e.r+2]){Dt(e.terms[e.t],t[e.r+2],e.start_i+e.t,e.phrase_length)&&(e.r+=2)}}}return n.greedy?function(e,t,n){let r=0;for(let o=e.t;or||(e.t+=r,0))}(e,r,t[e.r+1]):(e.t+=1,!0)},Bt=function(e){const{regs:t,phrase_length:n}=e,r=t[e.r];return e.t=function(e,t){const n=Object.assign({},e.regs[e.r],{start:!1,end:!1}),r=e.t;for(;e.te.t?null:!0!==r.end||e.start_i+e.t===n||null},St=function(e){const{regs:t}=e,n=t[e.r],r=e.terms[e.t],o=e.t;if(n.optional&&t[e.r+1]&&n.negative)return!0;if(n.optional&&t[e.r+1]&&function(e){const{regs:t}=e,n=t[e.r],r=e.terms[e.t],o=Dt(r,t[e.r+1],e.start_i+e.t,e.phrase_length);if(n.negative||o){const n=e.terms[e.t+1];n&&Dt(n,t[e.r+1],e.start_i+e.t,e.phrase_length)||(e.r+=1)}}(e),r.implicit&&e.terms[e.t+1]&&function(e){const t=e.terms[e.t],n=e.regs[e.r];if(t.implicit&&e.terms[e.t+1]){if(!e.terms[e.t+1].implicit)return;n.word===t.normal&&(e.t+=1),"hasContraction"===n.method&&(e.t+=1)}}(e),e.t+=1,!0===n.end&&e.t!==e.terms.length&&!0!==n.greedy)return null;if(!0===n.greedy){if(!Bt(e))return null}return!0===e.hasGroup&&function(e,t){const n=e.regs[e.r],r=Et(e,t);e.t>1&&n.greedy?r.length+=e.t-t:r.length++}(e,o),!0},$t=function(e,t,n,r){if(0===e.length||0===t.length)return null;const o={t:0,terms:e,r:0,regs:t,groups:{},start_i:n,phrase_length:r,inGroup:null};for(;o.r!e.optional)))break;return null}if(!0===e.anything&&!0===e.greedy){if(!Gt(o))return null;continue}if(void 0!==e.choices&&"or"===e.operator){if(!Ft(o))return null;continue}if(void 0!==e.choices&&"and"===e.operator){if(!Vt(o))return null;continue}if(!0===e.anything){if(e.negative&&e.anything)return null;if(!St(o))return null;continue}if(!0===Ht(e,o)){if(!St(o))return null;continue}if(e.negative){if(!zt(o))return null;continue}if(!0!==Dt(o.terms[o.t],e,o.start_i+o.t,o.phrase_length)){if(!0!==e.optional)return null}else{if(!St(o))return null}}const a=[null,n,o.t+n];if(a[1]===a[2])return null;const i={};return Object.keys(o.groups).forEach((e=>{const t=o.groups[e],r=n+t.start;i[e]=[null,r,r+t.length]})),{pointer:a,groups:i}},Mt=function(e,t){return e.pointer[0]=t,Object.keys(e.groups).forEach((n=>{e.groups[n][0]=t})),e},Lt=function(e,t,n){let r=$t(e,t,0,e.length);return r?(r=Mt(r,n),r):null},Kt={one:{termMethods:Tt,parseMatch:function(e,t,n){if(null==e||""===e)return[];t=t||{},"number"==typeof e&&(e=String(e));let r=function(e){const t=e.split(tt);let n=[];t.forEach((e=>{ot(e)?n.push(e):n=n.concat(e.split(nt))})),n=at(n);let r=[];return n.forEach((e=>{(e=>/^[![^]*(<[^<]*>)?\(/.test(e)&&/\)[?\]+*$~]*$/.test(e))(e)||ot(e)?r.push(e):r=r.concat(e.split(rt))})),r=at(r),r}(e);return r=r.map((e=>pt(e,t))),r=function(e,t){const n=t.model.one.prefixes;for(let t=e.length-1;t>=0;t-=1){const r=e[t];if(r.word&&ft.test(r.word)){let o=r.word.split(/[-–—]/g);if(n.hasOwnProperty(o[0]))continue;o=o.filter((e=>e)).reverse(),e.splice(t,1),o.forEach((n=>{const o=Object.assign({},r);o.word=n,e.splice(t,0,o)}))}}return e}(r,n),r=function(e,t){return e.map((e=>{if(e.root)if(t.methods.two&&t.methods.two.transform){let n=[];e.pos?"Verb"===e.pos?n=n.concat(bt(e,t)):"Noun"===e.pos?n=n.concat(vt(e,t)):"Adjective"===e.pos&&(n=n.concat(yt(e,t))):(n=n.concat(bt(e,t)),n=n.concat(vt(e,t)),n=n.concat(yt(e,t))),n=n.filter((e=>e)),n.length>0&&(e.operator="or",e.fastOr=new Set(n))}else e.machine=e.root,delete e.id,delete e.root;return e}))}(r,n),r=wt(r),r},match:function(e,t,n){n=n||[];const{regs:r,group:o,justOne:a}=t;let i=[];if(!r||0===r.length)return{ptrs:[],byGroup:{}};const s=r.filter((e=>!0!==e.optional&&!0!==e.negative)).length;e:for(let t=0;te&&(e=Math.abs(n-1))}}else{const e=Lt(o,r,t);e&&i.push(e)}}return!0===r[r.length-1].end&&(i=i.filter((t=>{const n=t.pointer[0];return e[n].length===t.pointer[2]}))),t.notIf&&(i=function(e,t,n){return e=e.filter((e=>{const[r,o,a]=e.pointer,i=n[r].slice(o,a);for(let e=0;e{e.groups[t]&&n.push(e.groups[t])})):e.forEach((e=>{n.push(e.pointer),Object.keys(e.groups).forEach((t=>{r[t]=r[t]||[],r[t].push(e.groups[t])}))}))),{ptrs:n,byGroup:r}}(i,o),i.ptrs.forEach((t=>{const[n,r,o]=t;t[3]=e[n][r].id,t[4]=e[n][o-1].id})),i}}};var Jt={api:function(e){Object.assign(e.prototype,et)},methods:Kt,lib:{parseMatch:function(e,t){const n=this.world(),r=n.methods.one.killUnicode;return r&&(e=r(e,n)),n.methods.one.parseMatch(e,t,n)}}};const Wt=/^\../,qt=/^#./,Ut=function(e,t){const n={},r={};return Object.keys(t).forEach((o=>{let a=t[o];const i=function(e){let t="",n="";return e=e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),Wt.test(e)?t=``),t+=">",{start:t,end:n}}(o);"string"==typeof a&&(a=e.match(a)),a.docs.forEach((e=>{if(e.every((e=>e.implicit)))return;const t=e[0].id;n[t]=n[t]||[],n[t].push(i.start);const o=e[e.length-1].id;r[o]=r[o]||[],r[o].push(i.end)}))})),{starts:n,ends:r}};var Rt={html:function(e){const{starts:t,ends:n}=Ut(this,e);let r="";return this.docs.forEach((e=>{for(let o=0;o{let n=e.pre||"",o=e.post||"";"some"===t.punctuation&&(n=n.replace(Zt,""),Xt.test(o)&&(o=" "),o=o.replace(_t,""),o=o.replace(/\?!+/,"?"),o=o.replace(/!+/,"!"),o=o.replace(/\?+/,"?"),o=o.replace(/\.{2,}/,""),e.tags.has("Abbreviation")&&(o=o.replace(/\./,""))),"some"===t.whitespace&&(n=n.replace(/\s/,""),o=o.replace(/\s+/," ")),t.keepPunct||(n=n.replace(Zt,""),o="-"===o?" ":o.replace(Qt,""));let a=e[t.form||"text"]||e.normal||"";"implicit"===t.form&&(a=e.implicit||e.text),"root"===t.form&&e.implicit&&(a=e.root||e.implicit||e.normal),"machine"!==t.form&&"implicit"!==t.form&&"root"!==t.form||!e.implicit||o&&Yt.test(o)||(o+=" "),r+=n+a+o})),!1===n&&(r=r.trim()),!0===t.lowerCase&&(r=r.toLowerCase()),r},tn={text:{form:"text"},normal:{whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"normal"},machine:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"none",unicode:"some",form:"machine"},root:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"root"},implicit:{form:"implicit"}};tn.clean=tn.normal,tn.reduced=tn.root;const nn=[];let rn=0;for(;rn<64;)nn[rn]=0|4294967296*Math.sin(++rn%Math.PI);const on=function(e){let t,n,r,o=decodeURI(encodeURI(e))+"€",a=o.length;const i=[t=1732584193,n=4023233417,~t,~n],s=[];for(e=--a/4+2|15,s[--e]=8*a;~a;)s[a>>2]|=o.charCodeAt(a)<<8*a--;for(rn=o=0;rn>4]+nn[o]+~~s[rn|15&[o,5*o+1,3*o+5,7*o][a]])<<(a=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*a+o++%4])|r>>>-a),t,n])t=0|a[1],n=a[2];for(o=4;o;)i[--o]+=a[o]}for(e="";o<32;)e+=(i[o>>3]>>4*(1^o++)&15).toString(16);return e},an={text:!0,terms:!0},sn={case:"none",unicode:"some",form:"machine",punctuation:"some"},ln=function(e,t){return Object.assign({},e,t)},un={text:e=>en(e,{keepPunct:!0},!1),normal:e=>en(e,ln(tn.normal,{keepPunct:!0}),!1),implicit:e=>en(e,ln(tn.implicit,{keepPunct:!0}),!1),machine:e=>en(e,sn,!1),root:e=>en(e,ln(sn,{form:"root"}),!1),hash:e=>on(en(e,{keepPunct:!0},!1)),offset:e=>{const t=un.text(e).length;return{index:e[0].offset.index,start:e[0].offset.start,length:t}},terms:e=>e.map((e=>{const t=Object.assign({},e);return t.tags=Array.from(e.tags),t})),confidence:(e,t,n)=>t.eq(n).confidence(),syllables:(e,t,n)=>t.eq(n).syllables(),sentence:(e,t,n)=>t.eq(n).fullSentence().text(),dirty:e=>e.some((e=>!0===e.dirty))};un.sentences=un.sentence,un.clean=un.normal,un.reduced=un.root;const cn={json:function(e){const t=(n=this,"string"==typeof(r=(r=e)||{})&&(r={}),(r=Object.assign({},an,r)).offset&&n.compute("offset"),n.docs.map(((e,t)=>{const o={};return Object.keys(r).forEach((a=>{r[a]&&un[a]&&(o[a]=un[a](e,n,t))})),o})));var n,r;return"number"==typeof e?t[e]:t}};cn.data=cn.json;const hn=function(e){const t=e.pre||"",n=e.post||"";return t+e.text+n},dn=function(e,t){const n=function(e,t){const n={};return Object.keys(t).forEach((r=>{e.match(r).fullPointer.forEach((e=>{n[e[3]]={fn:t[r],end:e[2]}}))})),n}(e,t);let r="";return e.docs.forEach(((t,o)=>{for(let a=0;ae.reduce(((e,t)=>e+t.pre+t.text+t.post),"").trim()));return e.filter((e=>e))}if("freq"===e||"frequency"===e||"topk"===e)return function(e){const t={};e.forEach((e=>{t[e]=t[e]||0,t[e]+=1}));const n=Object.keys(t).map((e=>({normal:e,count:t[e]})));return n.sort(((e,t)=>e.count>t.count?-1:0))}(this.json({normal:!0}).map((e=>e.normal)));if("terms"===e){let e=[];return this.docs.forEach((t=>{let n=t.map((e=>e.text));n=n.filter((e=>e)),e=e.concat(n)})),e}return"tags"===e?this.docs.map((e=>e.reduce(((e,t)=>(e[t.implicit||t.normal]=Array.from(t.tags),e)),{}))):"debug"===e?this.debug():this.text()},wrap:function(e){return dn(this,e)}};var mn={text:function(e){let t={};var n;if(e&&"string"==typeof e&&tn.hasOwnProperty(e)?t=Object.assign({},tn[e]):e&&(n=e,"[object Object]"===Object.prototype.toString.call(n))&&(t=Object.assign({},e)),void 0!==t.keepSpace||this.isFull()||(t.keepSpace=!1),void 0===t.keepEndPunct&&this.pointer){const e=this.pointer[0];e&&e[1]?t.keepEndPunct=!1:t.keepEndPunct=!0}return void 0===t.keepPunct&&(t.keepPunct=!0),void 0===t.keepSpace&&(t.keepSpace=!0),function(e,t){let n="";if(!e||!e[0]||!e[0][0])return n;for(let r=0;r""+e+fn,red:e=>""+e+fn,blue:e=>""+e+fn,magenta:e=>""+e+fn,cyan:e=>""+e+fn,yellow:e=>""+e+fn,black:e=>""+e+fn,dim:e=>""+e+fn,i:e=>""+e+fn},vn={tags:function(e){const{docs:t,model:n}=e;0===t.length&&console.log(bn.blue("\n ──────")),t.forEach((t=>{console.log(bn.blue("\n ┌─────────")),t.forEach((t=>{const r=[...t.tags||[]];let o=t.text||"-";t.sense&&(o=`{${t.normal}/${t.sense}}`),t.implicit&&(o="["+t.implicit+"]"),o=bn.yellow(o);let a="'"+o+"'";if(t.reference){const n=e.update([t.reference]).text("normal");a+=` - ${bn.dim(bn.i("["+n+"]"))}`}a=a.padEnd(18);const i=bn.blue(" │ ")+bn.i(a)+" - "+function(e,t){return t.one.tagSet&&(e=e.map((e=>{if(!t.one.tagSet.hasOwnProperty(e))return e;const n=t.one.tagSet[e].color||"blue";return bn[n](e)}))),e.join(", ")}(r,n);console.log(i)}))})),console.log("\n")},clientSide:function(e){console.log("%c -=-=- ","background-color:#6699cc;"),e.forEach((e=>{console.groupCollapsed(e.text());const t=e.docs[0].map((e=>{let t=e.text||"-";e.implicit&&(t="["+e.implicit+"]");return{text:t,tags:"["+Array.from(e.tags).join(", ")+"]"}}));console.table(t,["text","tags"]),console.groupEnd()}))},chunks:function(e){const{docs:t}=e;console.log(""),t.forEach((e=>{const t=[];e.forEach((e=>{"Noun"===e.chunk?t.push(bn.blue(e.implicit||e.normal)):"Verb"===e.chunk?t.push(bn.green(e.implicit||e.normal)):"Adjective"===e.chunk?t.push(bn.yellow(e.implicit||e.normal)):"Pivot"===e.chunk?t.push(bn.red(e.implicit||e.normal)):t.push(e.implicit||e.normal)})),console.log(t.join(" "),"\n")})),console.log("\n")},highlight:function(e){if(!e.found)return;const t={};e.fullPointer.forEach((e=>{t[e[0]]=t[e[0]]||[],t[e[0]].push(e)})),Object.keys(t).forEach((n=>{let r=e.update([[Number(n)]]).text();e.update(t[n]).json({offset:!0}).forEach(((e,t)=>{r=function(e,t,n){const r=((e,t,n)=>{const r=9*n,o=t.start+r,a=o+t.length;return[e.substring(0,o),e.substring(o,a),e.substring(a,e.length)]})(e,t,n);return`${r[0]}${bn.blue(r[1])}${r[2]}`}(r,e.offset,t)})),console.log(r)})),console.log("\n")}};var yn={api:function(e){Object.assign(e.prototype,pn)},methods:{one:{hash:on,debug:vn}}};const wn=function(e,t){if(e[0]!==t[0])return!1;const[,n,r]=e,[,o,a]=t;return n<=o&&r>o||o<=n&&a>n},kn=function(e){const t={};return e.forEach((e=>{t[e[0]]=t[e[0]]||[],t[e[0]].push(e)})),t},Pn=function(e,t){const n=kn(t),r=[];return e.forEach((e=>{const[t]=e;let o=n[t]||[];if(o=o.filter((t=>function(e,t){return e[1]<=t[1]&&t[2]<=e[2]}(e,t))),0===o.length)return void r.push({passthrough:e});o=o.sort(((e,t)=>e[1]-t[1]));let a=e;o.forEach(((e,t)=>{const n=function(e,t){const[n,r]=e,o=t[1],a=t[2],i={};if(ra&&(i.after=[n,a,e[2]]),i}(a,e);o[t+1]?(r.push({before:n.before,match:n.match}),n.after&&(a=n.after)):r.push(n)}))})),r};var An={one:{termList:function(e){const t=[];for(let n=0;n{if(!r)return;let[a,i,s,l,u]=r,c=t[a]||[];if(void 0===i&&(i=0),void 0===s&&(s=c.length),!l||c[i]&&c[i].id===l)c=c.slice(i,s);else{const n=function(e,t,n){for(let r=0;r<20;r+=1){if(t[n-r]){const o=t[n-r].findIndex((t=>t.id===e));if(-1!==o)return[n-r,o]}if(t[n+r]){const o=t[n+r].findIndex((t=>t.id===e));if(-1!==o)return[n+r,o]}}return null}(l,t,a);if(null!==n){const r=s-i;c=t[n[0]].slice(n[1],n[1]+r);const a=c[0]?c[0].id:null;e[o]=[n[0],n[1],n[1]+r,a]}}0!==c.length&&i!==s&&(u&&c[c.length-1].id!==u&&(c=function(e,t){const[n,r,,,o]=e,a=t[n],i=a.findIndex((e=>e.id===o));return-1===i?(e[2]=t[n].length,e[4]=a.length?a[a.length-1].id:null):e[2]=i,t[n].slice(r,e[2]+1)}(r,t)),n.push(c))})),n=n.filter((e=>e.length>0)),n},pointer:{indexN:kn,splitAll:Pn}}};const Cn=function(e,t){const n=e.concat(t),r=kn(n);let o=[];return n.forEach((e=>{const[t]=e;if(1===r[t].length)return void o.push(e);const n=r[t].filter((t=>wn(e,t)));n.push(e);const a=function(e){let t=e[0][1],n=e[0][2];return e.forEach((e=>{e[1]n&&(n=e[2])})),[e[0][0],t,n]}(n);o.push(a)})),o=function(e){const t={};for(let n=0;n{e.passthrough&&n.push(e.passthrough),e.before&&n.push(e.before),e.after&&n.push(e.after)})),n},jn=(e,t)=>{return"string"==typeof e||(n=e,"[object Array]"===Object.prototype.toString.call(n))?t.match(e):e||t.none();var n},xn=function(e,t){return e.map((e=>{const[n,r]=e;return t[n]&&t[n][r]&&(e[3]=t[n][r].id),e}))},In={union:function(e){e=jn(e,this);let t=Cn(this.fullPointer,e.fullPointer);return t=xn(t,this.document),this.toView(t)}};In.and=In.union,In.intersection=function(e){e=jn(e,this);let t=function(e,t){const n=kn(t),r=[];return e.forEach((e=>{let t=n[e[0]]||[];t=t.filter((t=>wn(e,t))),0!==t.length&&t.forEach((t=>{const n=function(e,t){const n=e[1]t[2]?t[2]:e[2];return n{e=Cn(e,[t])})),e=xn(e,this.document),this.update(e)};var Tn={methods:An,api:function(e){Object.assign(e.prototype,In)}};const Dn=function(e){return!0===e.optional||!0===e.negative?null:e.tag?"#"+e.tag:e.word?e.word:e.switch?`%${e.switch}%`:null},Hn=function(e,t){const n=t.methods.one.parseMatch;return e.forEach((e=>{e.regs=n(e.match,{},t),"string"==typeof e.ifNo&&(e.ifNo=[e.ifNo]),e.notIf&&(e.notIf=n(e.notIf,{},t)),e.needs=function(e){const t=[];return e.forEach((e=>{t.push(Dn(e)),"and"===e.operator&&e.choices&&e.choices.forEach((e=>{e.forEach((e=>{t.push(Dn(e))}))}))})),t.filter((e=>e))}(e.regs);const{wants:r,count:o}=function(e){const t=[];let n=0;return e.forEach((e=>{"or"!==e.operator||e.optional||e.negative||(e.fastOr&&Array.from(e.fastOr).forEach((e=>{t.push(e)})),e.choices&&e.choices.forEach((e=>{e.forEach((e=>{const n=Dn(e);n&&t.push(n)}))})),n+=1)})),{wants:t,count:n}}(e.regs);e.wants=r,e.minWant=o,e.minWords=e.regs.filter((e=>!e.optional)).length})),e};var En={buildNet:function(e,t){e=Hn(e,t);const n={};e.forEach((e=>{e.needs.forEach((t=>{n[t]=Array.isArray(n[t])?n[t]:[],n[t].push(e)})),e.wants.forEach((t=>{n[t]=Array.isArray(n[t])?n[t]:[],n[t].push(e)}))})),Object.keys(n).forEach((e=>{const t={};n[e]=n[e].filter((e=>"boolean"!=typeof t[e.match]&&(t[e.match]=!0,!0)))}));const r=e.filter((e=>0===e.needs.length&&0===e.wants.length));return{hooks:n,always:r}},bulkMatch:function(e,t,n,r={}){const o=n.one.cacheDoc(e);let a=function(e,t){return e.map(((n,r)=>{let o=[];Object.keys(t).forEach((n=>{e[r].has(n)&&(o=o.concat(t[n]))}));const a={};return o=o.filter((e=>"boolean"!=typeof a[e.match]&&(a[e.match]=!0,!0))),o}))}(o,t.hooks);a=function(e,t){return e.map(((e,n)=>{const r=t[n];return(e=(e=e.filter((e=>e.needs.every((e=>r.has(e)))))).filter((e=>void 0===e.ifNo||!0!==e.ifNo.some((e=>r.has(e)))))).filter((e=>0===e.wants.length||e.wants.filter((e=>r.has(e))).length>=e.minWant))}))}(a,o),t.always.length>0&&(a=a.map((e=>e.concat(t.always)))),a=function(e,t){return e.map(((e,n)=>{const r=t[n].length;return e=e.filter((e=>r>=e.minWords)),e}))}(a,e);const i=function(e,t,n,r,o){const a=[];for(let n=0;n0&&(l.ptrs.forEach((e=>{e[0]=n;const t=Object.assign({},s,{pointer:e});void 0!==s.unTag&&(t.unTag=s.unTag),a.push(t)})),!0===o.matchOne))return[a[0]]}return a}(a,e,0,n,r);return i},bulkTagger:function(e,t,n){const{model:r,methods:o}=n,{getDoc:a,setTag:i,unTag:s}=o.one,l=o.two.looksPlural;if(0===e.length)return e;return("undefined"!=typeof process&&process.env?process.env:self.env||{}).DEBUG_TAGS&&console.log(`\n\n → ${e.length} post-tagger:`),e.map((e=>{if(!e.tag&&!e.chunk&&!e.unTag)return;const o=e.reason||e.match,u=a([e.pointer],t)[0];if(!0===e.safe){if(!1===function(e,t,n){const r=n.one.tagSet;if(!r.hasOwnProperty(t))return!0;const o=r[t].not||[];for(let t=0;te.frozen=!0))}void 0!==e.unTag&&s(u,e.unTag,n,e.safe,o),e.chunk&&u.forEach((t=>t.chunk=e.chunk))}))}},Gn={lib:{buildNet:function(e){const t=this.methods().one.buildNet(e,this.world());return t.isNet=!0,t}},api:function(e){e.prototype.sweep=function(e,t={}){const{world:n,docs:r}=this,{methods:o}=n;let a=o.one.bulkMatch(r,e,this.methods,t);!1!==t.tagger&&o.one.bulkTagger(a,r,this.world),a=a.map((e=>{const t=e.pointer,n=r[t[0]][t[1]],o=t[2]-t[1];return n.index&&(e.pointer=[n.index[0],n.index[1],t[1]+o]),e}));const i=a.map((e=>e.pointer));return a=a.map((e=>(e.view=this.update([e.pointer]),delete e.regs,delete e.needs,delete e.pointer,delete e._expanded,e))),{view:this.update(i),found:a}}},methods:{one:En}};const On=/ /,Fn=function(e,t){"Noun"===t&&(e.chunk=t),"Verb"===t&&(e.chunk=t)},Vn=function(e,t,n,r){if(!0===e.tags.has(t))return null;if("."===t)return null;!0===e.frozen&&(r=!0);const o=n[t];if(o){if(o.not&&o.not.length>0)for(let t=0;t0)for(let t=0;t{const r=e.map((e=>e.text||"["+e.implicit+"]")).join(" ");var o;"string"!=typeof t&&t.length>2&&(t=t.slice(0,2).join(", #")+" +"),t="string"!=typeof t?t.join(", #"):t,console.log(` ${(o=r,""+o+"").padEnd(24)} → #${t.padEnd(22)} ${(e=>""+e+"")(n)}`)})(e,t,o),!0!=(s=t,"[object Array]"===Object.prototype.toString.call(s)))if("string"==typeof t)if(t=t.trim(),On.test(t))!function(e,t,n,r){const o=t.split(On);e.forEach(((e,t)=>{let a=o[t];a&&(a=a.replace(/^#/,""),Vn(e,a,n,r))}))}(e,t,a,r);else{t=t.replace(/^#/,"");for(let n=0;nzn(e,t,n,r)))},Bn=function(e){return e.children=e.children||[],e._cache=e._cache||{},e.props=e.props||{},e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],e},Sn=/^ *(#|\/\/)/,$n=function(e){let t=e.trim().split(/->/),n=[];t.forEach((e=>{n=n.concat(function(e){if(!(e=e.trim()))return null;if(/^\[/.test(e)&&/\]$/.test(e)){let t=(e=(e=e.replace(/^\[/,"")).replace(/\]$/,"")).split(/,/);return t=t.map((e=>e.trim())).filter((e=>e)),t=t.map((e=>Bn({id:e}))),t}return[Bn({id:e})]}(e))})),n=n.filter((e=>e));let r=n[0];for(let e=1;e{let n=[],r=[e];for(;r.length>0;){let e=r.pop();n.push(e),e.children&&e.children.forEach((n=>{t&&t(e,n),r.push(n)}))}return n},Ln=e=>"[object Array]"===Object.prototype.toString.call(e),Kn=e=>(e=e||"").trim(),Jn=function(e=[]){return"string"==typeof e?function(e){let t=e.split(/\r?\n/),n=[];t.forEach((e=>{if(!e.trim()||Sn.test(e))return;let t=(e=>{const t=/^( {2}|\t)/;let n=0;for(;t.test(e);)e=e.replace(t,""),n+=1;return n})(e);n.push({indent:t,node:$n(e)})}));let r=function(e){let t={children:[]};return e.forEach(((n,r)=>{0===n.indent?t.children=t.children.concat(n.node):e[r-1]&&function(e,t){let n=e[t].indent;for(;t>=0;t-=1)if(e[t].indent{t[e.id]=e}));let n=Bn({});return e.forEach((e=>{if((e=Bn(e)).parent)if(t.hasOwnProperty(e.parent)){let n=t[e.parent];delete e.parent,n.children.push(e)}else console.warn(`[Grad] - missing node '${e.parent}'`);else n.children.push(e)})),n}(e):(Mn(t=e).forEach(Bn),t);var t},Wn=function(e,t){let n="-> ";t&&(n=(e=>""+e+"")("→ "));let r="";return Mn(e).forEach(((e,o)=>{let a=e.id||"";if(t&&(a=(e=>""+e+"")(a)),0===o&&!e.id)return;let i=e._cache.parents.length;r+=" ".repeat(i)+n+a+"\n"})),r},qn=function(e){let t=Mn(e);t.forEach((e=>{delete(e=Object.assign({},e)).children}));let n=t[0];return n&&!n.id&&0===Object.keys(n.props).length&&t.shift(),t},Un={text:Wn,txt:Wn,array:qn,flat:qn},Rn=function(e,t){return"nested"===t||"json"===t?e:"debug"===t?(console.log(Wn(e,!0)),null):Un.hasOwnProperty(t)?Un[t](e):e},Qn=e=>{Mn(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],t._cache.parents=e._cache.parents.concat([e.id]))}))},Zn=/\//;let _n=class g{constructor(e={}){Object.defineProperty(this,"json",{enumerable:!1,value:e,writable:!0})}get children(){return this.json.children}get id(){return this.json.id}get found(){return this.json.id||this.json.children.length>0}props(e={}){let t=this.json.props||{};return"string"==typeof e&&(t[e]=!0),this.json.props=Object.assign(t,e),this}get(e){if(e=Kn(e),!Zn.test(e)){let t=this.json.children.find((t=>t.id===e));return new g(t)}let t=((e,t)=>{let n=(e=>"string"!=typeof e?e:(e=e.replace(/^\//,"")).split(/\//))(t=t||"");for(let t=0;te.id===n[t]));if(!r)return null;e=r}return e})(this.json,e)||Bn({});return new g(t)}add(e,t={}){if(Ln(e))return e.forEach((e=>this.add(Kn(e),t))),this;e=Kn(e);let n=Bn({id:e,props:t});return this.json.children.push(n),new g(n)}remove(e){return e=Kn(e),this.json.children=this.json.children.filter((t=>t.id!==e)),this}nodes(){return Mn(this.json).map((e=>(delete(e=Object.assign({},e)).children,e)))}cache(){return(e=>{let t=Mn(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],t._cache.parents=e._cache.parents.concat([e.id]))})),n={};t.forEach((e=>{e.id&&(n[e.id]=e)})),t.forEach((e=>{e._cache.parents.forEach((t=>{n.hasOwnProperty(t)&&n[t]._cache.children.push(e.id)}))})),e._cache.children=Object.keys(n)})(this.json),this}list(){return Mn(this.json)}fillDown(){var e;return e=this.json,Mn(e,((e,t)=>{t.props=((e,t)=>(Object.keys(t).forEach((n=>{if(t[n]instanceof Set){let r=e[n]||new Set;e[n]=new Set([...r,...t[n]])}else if((e=>e&&"object"==typeof e&&!Array.isArray(e))(t[n])){let r=e[n]||{};e[n]=Object.assign({},t[n],r)}else Ln(t[n])?e[n]=t[n].concat(e[n]||[]):void 0===e[n]&&(e[n]=t[n])})),e))(t.props,e.props)})),this}depth(){Qn(this.json);let e=Mn(this.json),t=e.length>1?1:0;return e.forEach((e=>{if(0===e._cache.parents.length)return;let n=e._cache.parents.length+1;n>t&&(t=n)})),t}out(e){return Qn(this.json),Rn(this.json,e)}debug(){return Qn(this.json),Rn(this.json,"debug"),this}};const Xn=function(e){let t=Jn(e);return new _n(t)};Xn.prototype.plugin=function(e){e(this)};const Yn={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Hyphenated:"cyan",Adverb:"cyan"},er=function(e){if(Yn.hasOwnProperty(e.id))return Yn[e.id];if(Yn.hasOwnProperty(e.is))return Yn[e.is];const t=e._cache.parents.find((e=>Yn[e]));return Yn[t]},tr=function(e){return e?"string"==typeof e?[e]:e:[]},nr=function(e,t){return e=function(e,t){return Object.keys(e).forEach((n=>{e[n].isA&&(e[n].is=e[n].isA),e[n].notA&&(e[n].not=e[n].notA),e[n].is&&"string"==typeof e[n].is&&(t.hasOwnProperty(e[n].is)||e.hasOwnProperty(e[n].is)||(e[e[n].is]={})),e[n].not&&"string"==typeof e[n].not&&!e.hasOwnProperty(e[n].not)&&(t.hasOwnProperty(e[n].not)||e.hasOwnProperty(e[n].not)||(e[e[n].not]={}))})),e}(e,t),Object.keys(e).forEach((t=>{e[t].children=tr(e[t].children),e[t].not=tr(e[t].not)})),Object.keys(e).forEach((t=>{(e[t].not||[]).forEach((n=>{e[n]&&e[n].not&&e[n].not.push(t)}))})),e};var rr={one:{setTag:zn,unTag:function(e,t,n){t=t.trim().replace(/^#/,"");for(let r=0;r0)for(let e=0;e0&&(e=function(e){return Object.keys(e).forEach((t=>{e[t]=Object.assign({},e[t]),e[t].novel=!0})),e}(e)),e=nr(e,t);const n=function(e){const t=Object.keys(e).map((t=>{const n=e[t],r={not:new Set(n.not),also:n.also,is:n.is,novel:n.novel};return{id:t,parent:n.is,props:r,children:[]}}));return Xn(t).cache().fillDown().out("array")}(Object.assign({},t,e)),r=function(e){const t={};return e.forEach((e=>{const{not:n,also:r,is:o,novel:a}=e.props;let i=e._cache.parents;r&&(i=i.concat(r)),t[e.id]={is:o,not:n,novel:a,also:r,parents:i,children:e._cache.children,color:er(e)}})),Object.keys(t).forEach((e=>{const n=new Set(t[e].not);t[e].not.forEach((e=>{t[e]&&t[e].children.forEach((e=>n.add(e)))})),t[e].not=Array.from(n)})),t}(n);return r},canBe:function(e,t,n){if(!n.hasOwnProperty(t))return!0;const r=n[t].not||[];for(let t=0;to.one.setTag(r,e,i,n,t))):o.one.setTag(r,e,i,n,t),this.uncache(),this},tagSafe:function(e,t=""){return this.tag(e,t,!0)},unTag:function(e,t){if(!this.found||!e)return this;const n=this.termList();if(0===n.length)return this;const{methods:r,verbose:o,model:a}=this;!0===o&&console.log(" - ",e,t||"");const i=a.one.tagSet;return or(e)?e.forEach((e=>r.one.unTag(n,e,i))):r.one.unTag(n,e,i),this.uncache(),this},canBe:function(e){e=e.replace(/^#/,"");const t=this.model.one.tagSet,n=this.methods.one.canBe,r=[];this.document.forEach(((o,a)=>{o.forEach(((o,i)=>{n(o,e,t)||r.push([a,i,i+1])}))}));const o=this.update(r);return this.difference(o)}};var ir={addTags:function(e){const{model:t,methods:n}=this.world(),r=t.one.tagSet,o=(0,n.one.addTags)(e,r);return t.one.tagSet=o,this}};const sr=new Set(["Auxiliary","Possessive"]);var lr={model:{one:{tagSet:{}}},compute:{tagRank:function(e){const{document:t,world:n}=e,r=n.model.one.tagSet;t.forEach((e=>{e.forEach((e=>{const t=Array.from(e.tags);e.tagRank=function(e,t){return e=e.sort(((e,n)=>{if(sr.has(e)||!t.hasOwnProperty(n))return 1;if(sr.has(n)||!t.hasOwnProperty(e))return-1;let r=t[e].children||[];const o=r.length;return r=t[n].children||[],o-r.length})),e}(t,r)}))}))}},methods:rr,api:function(e){Object.assign(e.prototype,ar)},lib:ir};const ur=/([.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s)/g,cr=/^[.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s$/,hr=/((?:\r?\n|\r)+)/,dr=/[a-z0-9\u00C0-\u00FF\u00a9\u00ae\u2000-\u3300\ud000-\udfff]/i,gr=/\S/,mr=function(e){return Boolean(e.match(/\n$/))},pr={'"':'"',""":""","“":"”","‟":"”","„":"”","⹂":"”","‚":"’","«":"»","‹":"›","‵":"′","‶":"″","‷":"‴","〝":"〞","〟":"〞"},fr=RegExp("["+Object.keys(pr).join("")+"]","g"),br=RegExp("["+Object.values(pr).join("")+"]","g"),vr=function(e){if(!e)return!1;const t=e.match(br);return null!==t&&1===t.length},yr=/\(/g,wr=/\)/g,kr=/\S/,Pr=/^\s+/,Ar=function(e,t){const n=e.split(/[-–—]/);if(n.length<=1)return!1;const{prefixes:r,suffixes:o}=t.one;if(1===n[0].length&&/[a-z]/i.test(n[0]))return!1;if(r.hasOwnProperty(n[0]))return!1;if(n[1]=n[1].trim().replace(/[.?!]$/,""),o.hasOwnProperty(n[1]))return!1;if(!0===/^([a-z\u00C0-\u00FF`"'/]+)[-–—]([a-z0-9\u00C0-\u00FF].*)/i.test(e))return!0;return!0===/^[('"]?([0-9]{1,4})[-–—]([a-z\u00C0-\u00FF`"'/-]+[)'"]?$)/i.test(e)},Cr=function(e){const t=[],n=e.split(/[-–—]/);let r="-";const o=e.match(/[-–—]/);o&&o[0]&&(r=o);for(let e=0;e(e[t]=!0,e)),{});const Dr=/\p{Letter}/u,Hr=/[\p{Number}\p{Currency_Symbol}]/u,Er=/^[a-z]\.([a-z]\.)+/i,Gr=/[sn]['’]$/,Or=/([A-Z]\.)+[A-Z]?,?$/,Fr=/^[A-Z]\.,?$/,Vr=/[A-Z]{2,}('s|,)?$/,zr=/([a-z]\.)+[a-z]\.?$/,Br=function(e){return function(e){return!0===Or.test(e)||!0===zr.test(e)||!0===Fr.test(e)||!0===Vr.test(e)}(e)&&(e=e.replace(/\./g,"")),e},Sr=function(e,t){const n=t.methods.one.killUnicode;let r=e.text||"";r=function(e){const t=e=(e=(e=e||"").toLowerCase()).trim();return e=(e=(e=e.replace(/[,;.!?]+$/,"")).replace(/\u2026/g,"...")).replace(/\u2013/g,"-"),!1===/^[:;]/.test(e)&&(e=(e=(e=e.replace(/\.{3,}$/g,"")).replace(/[",.!:;?)]+$/g,"")).replace(/^['"(]+/g,"")),""===(e=(e=e.replace(/[\u200B-\u200D\uFEFF]/g,"")).trim())&&(e=t),e.replace(/([0-9]),([0-9])/g,"$1$2")}(r),r=n(r,t),r=Br(r),e.normal=r},$r=/[ .][A-Z]\.? *$/i,Mr=/(?:\u2026|\.{2,}) *$/,Lr=/\p{L}/u,Kr=/\. *$/,Jr=/^[A-Z]\. $/;var Wr={one:{killUnicode:function(e,t){const n=t.model.one.unicode||{},r=(e=e||"").split("");return r.forEach(((e,t)=>{n[e]&&(r[t]=n[e])})),r.join("")},tokenize:{splitSentences:function(e,t){if(e=e||"",!(e=String(e))||"string"!=typeof e||!1===kr.test(e))return[];const n=function(e){const t=[],n=e.split(hr);for(let e=0;e0&&(o.push(a),e[t]=""):e[t+1]=a+(e[t+1]||"")}return o}(r,t),r=function(e){const t=[];for(let n=0;n0?(n[n.length-1]+=a,n.push(t)):n.push(a+t),a=""):a+=t}return a&&(0===n.length&&(n[0]=""),n[n.length-1]+=a),n=function(e){for(let t=1;te)),n},splitWhitespace:(e,t)=>{const{str:n,pre:r,post:o}=function(e,t){const{prePunctuation:n,postPunctuation:r,emoticons:o}=t.one;let a=e,i="",s="";const l=Array.from(e);if(o.hasOwnProperty(e.trim()))return{str:e.trim(),pre:i,post:" "};let u=l.length;for(let e=0;e(s=e||"",""))),e=a,i=""),{str:e,pre:i,post:s}}(e,t);return{text:n,pre:r,post:o,tags:new Set}},fromString:function(e,t){const{methods:n,model:r}=t,{splitSentences:o,splitTerms:a,splitWhitespace:i}=n.one.tokenize;return e=o(e=e||"",t).map((e=>{let n=a(e,r);return n=n.map((e=>i(e,r))),n.forEach((e=>{Sr(e,t)})),n})),e}}}};const qr={},Ur={};[[["approx","apt","bc","cyn","eg","esp","est","etc","ex","exp","prob","pron","gal","min","pseud","fig","jd","lat","lng","vol","fm","def","misc","plz","ea","ps","sec","pt","pref","pl","pp","qt","fr","sq","nee","ss","tel","temp","vet","ver","fem","masc","eng","adj","vb","rb","inf","situ","vivo","vitro","wr"]],[["dl","ml","gal","qt","pt","tbl","tsp","tbsp","km","dm","cm","mm","mi","td","hr","hrs","kg","hg","dg","cg","mg","µg","lb","oz","sq ft","hz","mps","mph","kmph","kb","mb","tb","lx","lm","fl oz","yb"],"Unit"],[["ad","al","arc","ba","bl","ca","cca","col","corp","ft","fy","ie","lit","ma","md","pd","tce"],"Noun"],[["adj","adm","adv","asst","atty","bldg","brig","capt","cmdr","comdr","cpl","det","dr","esq","gen","gov","hon","jr","llb","lt","maj","messrs","mlle","mme","mr","mrs","ms","mstr","phd","prof","pvt","rep","reps","res","rev","sen","sens","sfc","sgt","sir","sr","supt","surg"],"Honorific"],[["jan","feb","mar","apr","jun","jul","aug","sep","sept","oct","nov","dec"],"Month"],[["dept","univ","assn","bros","inc","ltd","co"],"Organization"],[["rd","st","dist","mt","ave","blvd","cl","cres","hwy","ariz","cal","calif","colo","conn","fla","fl","ga","ida","ia","kan","kans","minn","neb","nebr","okla","penna","penn","pa","dak","tenn","tex","ut","vt","va","wis","wisc","wy","wyo","usafa","alta","ont","que","sask"],"Place"]].forEach((e=>{e[0].forEach((t=>{qr[t]=!0,Ur[t]="Abbreviation",void 0!==e[1]&&(Ur[t]=[Ur[t],e[1]])}))}));var Rr=["anti","bi","co","contra","de","extra","infra","inter","intra","macro","micro","mis","mono","multi","peri","pre","pro","proto","pseudo","re","sub","supra","trans","tri","un","out","ex"].reduce(((e,t)=>(e[t]=!0,e)),{});const Qr={"!":"¡","?":"¿Ɂ",'"':'“”"❝❞',"'":"‘‛❛❜’","-":"—–",a:"ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАаѦѧӐӑӒӓƛæ",b:"ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ",c:"¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼϲϹϽϾСсєҀҁҪҫ",d:"ÐĎďĐđƉƊȡƋƌ",e:"ÈÉÊËèéêëĒēĔĕĖėĘęĚěƐȄȅȆȇȨȩɆɇΈΕΞΣέεξϵЀЁЕеѐёҼҽҾҿӖӗễ",f:"ƑƒϜϝӺӻҒғſ",g:"ĜĝĞğĠġĢģƓǤǥǦǧǴǵ",h:"ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ",I:"ÌÍÎÏ",i:"ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇіїi̇",j:"ĴĵǰȷɈɉϳЈј",k:"ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ",l:"ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ",m:"ΜϺϻМмӍӎ",n:"ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ",o:"ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϴОФоѲѳӦӧӨөӪӫ",p:"ƤΡρϷϸϼРрҎҏÞ",q:"Ɋɋ",r:"ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ",s:"ŚśŜŝŞşŠšƧƨȘșȿЅѕ",t:"ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт",u:"ÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰυϋύ",v:"νѴѵѶѷ",w:"ŴŵƜωώϖϢϣШЩшщѡѿ",x:"×ΧχϗϰХхҲҳӼӽӾӿ",y:"ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ",z:"ŹźŻżŽžƵƶȤȥɀΖ"},Zr={};Object.keys(Qr).forEach((function(e){Qr[e].split("").forEach((function(t){Zr[t]=e}))}));const _r=/\//,Xr=/[a-z]\.[a-z]/i,Yr=/[0-9]/,eo=function(e,t){const n=e.normal||e.text||e.machine,r=t.model.one.aliases;if(r.hasOwnProperty(n)&&(e.alias=e.alias||[],e.alias.push(r[n])),_r.test(n)&&!Xr.test(n)&&!Yr.test(n)){const t=n.split(_r);t.length<=3&&t.forEach((t=>{""!==(t=t.trim())&&(e.alias=e.alias||[],e.alias.push(t))}))}return e},to=/^\p{Letter}+-\p{Letter}+$/u,no=function(e){let t=e.implicit||e.normal||e.text;t=t.replace(/['’]s$/,""),t=t.replace(/s['’]$/,"s"),t=t.replace(/([aeiou][ktrp])in'$/,"$1ing"),to.test(t)&&(t=t.replace(/-/g,"")),t=t.replace(/^[#@]/,""),t!==e.normal&&(e.machine=t)},ro=function(e,t){const n=e.docs;for(let r=0;rro(e,eo),machine:e=>ro(e,no),normal:e=>ro(e,Sr),freq:function(e){const t=e.docs,n={};for(let e=0;e{let i=(e=e.toLowerCase().trim()).length;t.max&&i>t.max&&(i=t.max);for(let s=t.min;s{delete r[e]})),r}(e,t,this.world());return Object.keys(o).forEach((e=>{n.one.typeahead.hasOwnProperty(e)?delete n.one.typeahead[e]:n.one.typeahead[e]=o[e]})),this}};var co={model:{one:{typeahead:{}}},api:function(e){e.prototype.autoFill=so},lib:uo,compute:io,hooks:["typeahead"]};h.extend(J),h.extend(yn),h.extend(Jt),h.extend(Tn),h.extend(lr),h.plugin(ye),h.extend(ao),h.extend(Ce),h.plugin(p),h.extend(Be),h.extend(co),h.extend(Ee),h.extend(Gn);var ho={addendum:"addenda",corpus:"corpora",criterion:"criteria",curriculum:"curricula",genus:"genera",memorandum:"memoranda",opus:"opera",ovum:"ova",phenomenon:"phenomena",referendum:"referenda",alga:"algae",alumna:"alumnae",antenna:"antennae",formula:"formulae",larva:"larvae",nebula:"nebulae",vertebra:"vertebrae",analysis:"analyses",axis:"axes",diagnosis:"diagnoses",parenthesis:"parentheses",prognosis:"prognoses",synopsis:"synopses",thesis:"theses",neurosis:"neuroses",appendix:"appendices",index:"indices",matrix:"matrices",ox:"oxen",sex:"sexes",alumnus:"alumni",bacillus:"bacilli",cactus:"cacti",fungus:"fungi",hippopotamus:"hippopotami",libretto:"libretti",modulus:"moduli",nucleus:"nuclei",octopus:"octopi",radius:"radii",stimulus:"stimuli",syllabus:"syllabi",cookie:"cookies",calorie:"calories",auntie:"aunties",movie:"movies",pie:"pies",rookie:"rookies",tie:"ties",zombie:"zombies",leaf:"leaves",loaf:"loaves",thief:"thieves",foot:"feet",goose:"geese",tooth:"teeth",beau:"beaux",chateau:"chateaux",tableau:"tableaux",bus:"buses",gas:"gases",circus:"circuses",crisis:"crises",virus:"viruses",database:"databases",excuse:"excuses",abuse:"abuses",avocado:"avocados",barracks:"barracks",child:"children",clothes:"clothes",echo:"echoes",embargo:"embargoes",epoch:"epochs",deer:"deer",halo:"halos",man:"men",woman:"women",mosquito:"mosquitoes",mouse:"mice",person:"people",quiz:"quizzes",rodeo:"rodeos",shoe:"shoes",sombrero:"sombreros",stomach:"stomachs",tornado:"tornados",tuxedo:"tuxedos",volcano:"volcanoes"},go={Comparative:"true¦bett1f0;arth0ew0in0;er",Superlative:"true¦earlier",PresentTense:"true¦bests,sounds",Condition:"true¦lest,unless",PastTense:"true¦began,came,d4had,kneel3l2m0sa4we1;ea0sg2;nt;eap0i0;ed;id",Participle:"true¦0:09;a06b01cZdXeat0fSgQhPoJprov0rHs7t6u4w1;ak0ithdra02o2r1;i02uY;k0v0;nd1pr04;ergoJoJ;ak0hHo3;e9h7lain,o6p5t4un3w1;o1um;rn;g,k;ol0reS;iQok0;ught,wn;ak0o1runk;ne,wn;en,wn;ewriNi1uJ;dd0s0;ut3ver1;do4se0t1;ak0h2;do2g1;roG;ne;ast0i7;iv0o1;ne,tt0;all0loBor1;bi3g2s1;ak0e0;iv0o9;dd0;ove,r1;a5eamt,iv0;hos0lu1;ng;e4i3lo2ui1;lt;wn;tt0;at0en,gun;r2w1;ak0ok0;is0;en",Gerund:"true¦accord0be0doin,go0result0stain0;ing",Expression:"true¦a0Yb0Uc0Sd0Oe0Mfarew0Lg0FhZjeez,lWmVnToOpLsJtIuFvEw7y0;a5e3i1u0;ck,p;k04p0;ee,pee;a0p,s;!h;!a,h,y;a5h2o1t0;af,f;rd up,w;atsoever,e1o0;a,ops;e,w;hoo,t;ery w06oi0L;gh,h0;! 0h,m;huh,oh;here nPsk,ut tut;h0ic;eesh,hh,it,oo;ff,h1l0ow,sst;ease,s,z;ew,ooey;h1i,mg,o0uch,w,y;h,o,ps;! 0h;hTmy go0wT;d,sh;a7evertheless,o0;!pe;eh,mm;ah,eh,m1ol0;!s;ao,fao;aCeBi9o2u0;h,mph,rra0zzC;h,y;l1o0;r6y9;la,y0;! 0;c1moCsmok0;es;ow;!p hip hoor0;ay;ck,e,llo,y;ha1i,lleluj0;ah;!ha;ah,ee4o1r0;eat scott,r;l1od0sh; grief,bye;ly;! whiz;ell;e0h,t cetera,ureka,ww,xcuse me;k,p;'oh,a0rat,uh;m0ng;mit,n0;!it;mon,o0;ngratulations,wabunga;a2oo1r0tw,ye;avo,r;!ya;h,m; 1h0ka,las,men,rgh,ye;!a,em,h,oy;la",Negative:"true¦n0;ever,o0;n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Reflexive:"true¦h4it5my5o1the0your2;ir1m1;ne3ur0;sel0;f,ves;er0im0;self",Plural:"true¦dick0gre0ones,records;ens","Unit|Noun":"true¦cEfDgChBinchAk9lb,m6newt5oz,p4qt,t1y0;ardEd;able1b0ea1sp;!l,sp;spo1;a,t,x;on9;!b,g,i1l,m,p0;h,s;!les;!b,elvin,g,m;!es;g,z;al,b;eet,oot,t;m,up0;!s",Value:"true¦a few",Imperative:"true¦bewa0come he0;re","Plural|Verb":"true¦leaves",Demonym:"true¦0:15;1:12;a0Vb0Oc0Dd0Ce08f07g04h02iYjVkTlPmLnIomHpEqatari,rCs7t5u4v3welAz2;am0Gimbabwe0;enezuel0ietnam0I;gAkrai1;aiwTex0hai,rinida0Ju2;ni0Prkmen;a5cotti4e3ingapoOlovak,oma0Spaniard,udRw2y0W;ede,iss;negal0Cr09;sh;mo0uT;o5us0Jw2;and0;a2eru0Fhilippi0Nortugu07uerto r0S;kist3lesti1na2raguay0;ma1;ani;ami00i2orweP;caragu0geri2;an,en;a3ex0Lo2;ngo0Drocc0;cedo1la2;gasy,y07;a4eb9i2;b2thua1;e0Cy0;o,t01;azakh,eny0o2uwaiI;re0;a2orda1;ma0Ap2;anO;celandic,nd4r2sraeli,ta01vo05;a2iB;ni0qi;i0oneU;aiAin2ondur0unO;di;amEe2hanai0reek,uatemal0;or2rm0;gi0;ilipino,ren8;cuadoVgyp4mira3ngli2sto1thiopi0urope0;shm0;ti;ti0;aPominUut3;a9h6o4roat3ub0ze2;ch;!i0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el6o4r3ul2;gaE;azi9it;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;genti2me1;ne;ba1ge2;ri0;ni0;gh0r2;ic0;an",Organization:"true¦0:4Q;a3Tb3Bc2Od2He2Df27g1Zh1Ti1Pj1Nk1Ll1Gm12n0Po0Mp0Cqu0Br02sTtHuCv9w3xiaomi,y1;amaha,m1Bou1w1B;gov,tu3C;a4e2iki1orld trade organizati33;leaRped0O;lls fargo,st1;fie2Hinghou2R;l1rner br3U;gree3Jl street journ2Im1E;an halOeriz2Xisa,o1;dafo2Yl1;kswagMvo;b4kip,n2ps,s1;a tod3Aps;es3Mi1;lev3Fted natio3C;er,s; mobi32aco beRd bOe9gi frida3Lh3im horto3Amz,o1witt3D;shi49y1;ota,s r 05;e 1in lizzy;b3carpen3Jdaily ma3Dguess w2holli0s1w2;mashing pumpki35uprem0;ho;ea1lack eyed pe3Xyr0Q;ch bo3Dtl0;l2n3Qs1xas instrumen1U;co,la m1F;efoni0Kus;a8cientology,e5ieme2Ymirnoff,np,o3pice gir6quare0Ata1ubaru;rbuc1to34;ks;ny,undgard1;en;a2x pisto1;ls;g1Wrs;few2Minsbur31lesfor03msu2E;adiohead,b8e4o1yana3C;man empi1Xyal 1;b1dutch she4;ank;a3d 1max,vl20;bu1c2Ahot chili peppe2Ylobst2N;ll;ders dige1Ll madrid;c,s;ant3Aizn2Q;a8bs,e5fiz2Ihilip4i3r1;emier 1udenti1D;leagTo2K;nk floyd,zza hut; morrBs;psi2tro1uge0E;br33chi0Tn33;!co;lant2Un1yp16; 2ason27da2P;ld navy,pec,range juli2xf1;am;us;aAb9e6fl,h5i4o1sa,vid3wa;k2tre dame,vart1;is;ia;ke,ntendo,ss0QvZ;l,s;c,st1Otflix,w1; 1sweek;kids on the block,york0D;a,c;nd22s2t1;ional aca2Po,we0U;a,c02d0S;aDcdonalCe9i6lb,o3tv,y1;spa1;ce;b1Tnsanto,ody blu0t1;ley cr1or0T;ue;c2t1;as,subisO;helin,rosoft;dica2rcedes benz,talli1;ca;id,re;ds;cs milk,tt19z24;a3e1g,ittle caesa1P; ore09novo,x1;is,mark,us; 1bour party;pres0Dz boy;atv,fc,kk,lm,m1od1O;art;iffy lu0Roy divisi0Jpmorgan1sa;! cha09;bm,hop,k3n1tv;g,te1;l,rpol;ea;a5ewlett pack1Vi3o1sbc,yundai;me dep1n1P;ot;tac1zbollah;hi;lliburt08sbro;eneral 6hq,ithub,l5mb,o2reen d0Ou1;cci,ns n ros0;ldman sachs,o1;dye1g0H;ar;axo smith kli04encoW;electr0Nm1;oto0Z;a5bi,c barcelo4da,edex,i2leetwood m03o1rito l0G;rd,xcY;at,fa,nancial1restoZ; tim0;na;cebook,nnie mae;b0Asa,u3xxon1; m1m1;ob0J;!rosceptics;aiml0De5isney,o4u1;nkin donu2po0Zran dur1;an;ts;j,w jon0;a,f lepp12ll,peche mode,r spieg02stiny's chi1;ld;aJbc,hFiDloudflaCnn,o3r1;aigsli5eedence clearwater reviv1ossra09;al;c7inba6l4m1o0Est09;ca2p1;aq;st;dplSg1;ate;se;a c1o chanQ;ola;re;a,sco1tigroup;! systems;ev2i1;ck fil a,na daily;r1y;on;d2pital o1rls jr;ne;bury,ill1;ac;aEbc,eBf9l5mw,ni,o1p,rexiteeU;ei3mbardiIston 1;glo1pizza;be;ng;o2ue c1;roV;ckbuster video,omingda1;le; g1g1;oodriL;cht2e ge0rkshire hathaw1;ay;el;cardi,idu,nana republ3s1xt5y5;f,kin robbi1;ns;ic;bYcTdidSerosmith,iRlKmEnheuser busDol,ppleAr6s4u3v2y1;er;is,on;di,todesk;hland o1sociated E;il;b3g2m1;co;os;ys; compu1be0;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 5catel2ta1;ir;! lu1;ce1;nt;jazeera,qae1;da;g,rbnb;as;/dc,a3er,tivision1;! blizz1;ard;demy of scienc0;es;ba",Possessive:"true¦its,my,our0thy;!s","Noun|Verb":"true¦0:9W;1:AA;2:96;3:A3;4:9R;5:A2;6:9K;7:8N;8:7L;9:A8;A:93;B:8D;C:8X;a9Ob8Qc7Id6Re6Gf5Sg5Hh55i4Xj4Uk4Rl4Em40n3Vo3Sp2Squ2Rr21s0Jt02u00vVwGyFzD;ip,oD;ne,om;awn,e6Fie68;aOeMhJiHoErD;ap,e9Oink2;nd0rDuC;kDry,sh5Hth;!shop;ck,nDpe,re,sh;!d,g;e86iD;p,sD;k,p0t2;aDed,lco8W;r,th0;it,lk,rEsDt4ve,x;h,te;!ehou1ra9;aGen5FiFoD;iDmAte,w;ce,d;be,ew,sA;cuum,l4B;pDr7;da5gra6Elo6A;aReQhrPiOoMrGuEwiDy5Z;n,st;nDrn;e,n7O;aGeFiEoDu6;t,ub2;bu5ck4Jgg0m,p;at,k,nd;ck,de,in,nsDp,v7J;f0i8R;ll,ne,p,r4Yss,t94uD;ch,r;ck,de,e,le,me,p,re;e5Wow,u6;ar,e,ll,mp0st,xt;g,lDng2rg7Ps5x;k,ly;a0Sc0Ne0Kh0Fi0Dk0Cl0Am08n06o05pXquaBtKuFwD;ea88iD;ng,pe,t4;bGit,m,ppErD;fa3ge,pri1v2U;lDo6S;e6Py;!je8;aMeLiKoHrEuDy2;dy,ff,mb2;a85eEiDo5Pugg2;ke,ng;am,ss,t4;ckEop,p,rD;e,m;ing,pi2;ck,nk,t4;er,m,p;ck,ff,ge,in,ke,lEmp,nd,p2rDte,y;!e,t;k,l;aJeIiHlGoFrDur,y;ay,e56inDu3;g,k2;ns8Bt;a5Qit;ll,n,r87te;ed,ll;m,n,rk;b,uC;aDee1Tow;ke,p;a5Je4FiDo53;le,rk;eep,iDou4;ce,p,t;ateboa7Ii;de,gnDl2Vnk,p,ze;!al;aGeFiEoDuff2;ck,p,re,w;ft,p,v0;d,i3Ylt0;ck,de,pe,re,ve;aEed,nDrv1It;se,t2N;l,r4t;aGhedu2oBrD;aEeDibb2o3Z;en,w;pe,t4;le,n,r2M;cDfegua72il,mp2;k,rifi3;aZeHhy6LiGoEuD;b,in,le,n,s5X;a6ck,ll,oDpe,u5;f,t;de,ng,ot,p,s1W;aTcSdo,el,fQgPje8lOmMnLo17pJque6sFturn,vDwa6V;eDi27;al,r1;er74oFpe8tEuD;lt,me;!a55;l71rt;air,eaDly,o53;l,t;dezvo2Zt;aDedy;ke,rk;ea1i4G;a6Iist0r5N;act6Yer1Vo71uD;nd,se;a38o6F;ch,s6G;c1Dge,iEke,lly,nDp1Wt1W;ge,k,t;n,se;es6Biv0;a04e00hYiXlToNrEsy4uD;mp,n4rcha1sh;aKeIiHoDu4O;be,ceFdu3fi2grDje8mi1p,te6;amDe6W;!me;ed,ss;ce,de,nt;sDy;er6Cs;cti3i1;iHlFoEp,re,sDuCw0;e,i5Yt;l,p;iDl;ce,sh;nt,s5V;aEce,e32uD;g,mp,n7;ce,nDy;!t;ck,le,n17pe,tNvot;a1oD;ne,tograph;ak,eFnErDt;fu55mA;!c32;!l,r;ckJiInHrFsEtDu1y;ch,e9;s,te;k,tD;!y;!ic;nt,r,se;!a7;bje8ff0il,oErDutli3Qver4B;bAd0ie9;ze;a4ReFoDur1;d,tD;e,i3;ed,gle8tD;!work;aMeKiIoEuD;rd0;ck,d3Rld,nEp,uDve;nt,th;it5EkD;ey;lk,n4Brr5CsDx;s,ta2B;asuBn4UrDss;ge,it;il,nFp,rk3WsEtD;ch,t0;h,k,t0;da5n0oeuvB;aLeJiHoEuD;mp,st;aEbby,ck,g,oDve;k,t;d,n;cDe,ft,mAnIst;en1k;aDc0Pe4vK;ch,d,k,p,se;bFcEnd,p,t4uD;gh,n4;e,k;el,o2U;eEiDno4E;ck,d,ll,ss;el,y;aEo1OuD;i3mp;m,zz;mpJnEr46ssD;ue;c1Rdex,fluGha2k,se2HteDvoi3;nt,rD;e6fa3viD;ew;en3;a8le2A;aJeHiGoEuD;g,nt;l3Ano2Dok,pDr1u1;!e;ghli1Fke,nt,re,t;aDd7lp;d,t;ck,mGndFrEsh,tDu9;ch,e;bo3Xm,ne4Eve6;!le;!m0;aMear,ift,lKossJrFuD;arDe4Alp,n;antee,d;aFiEoDumb2;uCwth;ll,nd,p;de,sp;ip;aBoDue;ss,w;g,in,me,ng,s,te,ze;aZeWiRlNoJrFuD;ck,el,nDss,zz;c38d;aEoDy;st,wn;cDgme,me,nchi1;tuB;cFg,il,ld,rD;ce,e29mDwa31;!at;us;aFe0Vip,oDy;at,ck,od,wD;!er;g,ke,me,re,sh,vo1E;eGgFlEnDre,sh,t,x;an3i0Q;e,m,t0;ht,uB;ld;aEeDn3;d,l;r,tuB;ce,il,ll,rm,vo2W;cho,d7ffe8nMsKxFyeD;!baD;ll;cGerci1hFpDtra8;eriDo0W;en3me9;au6ibA;el,han7u1;caDtima5;pe;count0d,vy;a01eSiMoJrEuDye;b,el,mp,pli2X;aGeFiEoD;ne,p;ft,ll,nk,p,ve;am,ss;ft,g,in;cEd7ubt,wnloD;ad;k,u0E;ge6p,sFt4vD;e,iDor3;de;char7gui1h,liEpD;at4lay,u5;ke;al,bKcJfeIlGmaCposAsEtaD;il;e07iD;gn,re;ay,ega5iD;ght;at,ct;li04rea1;a5ut;b,ma7n3rDte;e,t;a0Eent0Dh06irc2l03oKrFuD;be,e,rDt;b,e,l,ve;aGeFoEuDy;sh;p,ss,wd;dAep;ck,ft,sh;at,de,in,lTmMnFordina5py,re,st,uDv0;gh,nDp2rt;s01t;ceHdu8fli8glomeIsFtDveN;a8rD;a6ol;e9tru8;ct;ntDrn;ra5;bHfoGmFpD;leDouCromi1;me9;aCe9it,u5;rt;at,iD;ne;lap1oD;r,ur;aEiDoud,ub;ck,p;im,w;aEeDip;at,ck,er;iGllen7nErD;ge,m,t;ge,nD;el;n,r;er,re;ke,ll,mp,noe,pGrXsFtEuDve;se,ti0I;alog,ch;h,t;!tuB;re;a03eZiXlToPrHuEyD;pa11;bb2ck2dgEff0mp,rDst,zz;den,n;et;anJeHiFoadEuD;i1sh;ca6;be,d7;ge;aDed;ch,k;ch,d;aFg,mb,nEoDrd0tt2x,ycott;k,st,t;d,e;rd,st;aFeCiDoYur;nk,tz;nd;me;as,d,ke,nd,opsy,tD;!ch,e;aFef,lt,nDt;d,efA;it;r,t;ck,il,lan3nIrFsEtt2;le;e,h;!gDk;aDe;in;!d,g,k;bu1c05dZge,iYlVnTppQrLsIttGucEwaD;rd;tiD;on;aDempt;ck;k,sD;i6ocia5;st;chFmD;!oD;ur;!iD;ve;eEroa4;ch;al;chDg0sw0;or;aEt0;er;rm;d,m,r;dreHvD;an3oD;ca5;te;ce;ss;cDe,he,t;eFoD;rd,u9;nt;nt,ss;se",Actor:"true¦0:7B;1:7G;2:6A;3:7F;4:7O;5:7K;a6Nb62c4Ud4Be41f3Sg3Bh30i2Uj2Qkin2Pl2Km26n1Zo1Sp0Vqu0Tr0JsQtJuHvEw8yo6;gi,ut6;h,ub0;aAe9i8o7r6;estl0it0;m2rk0;fe,nn0t2Bza2H;atherm2ld0;ge earn0it0nder0rri1;eter7i6oyF;ll5Qp,s3Z;an,ina2U;n6s0;c6Uder03;aoisea23e9herapi5iktok0o8r6ut1yco6S;a6endseLo43;d0mp,nscri0Bvel0;ddl0u1G;a0Qchn7en6na4st0;ag0;i3Oo0D;aiXcUeRhPiMki0mu26oJpGquaFtBu7wee6;p0theart;lt2per7r6;f0ge6Iviv1;h6inten0Ist5Ivis1;ero,um2;a8ep7r6;ang0eam0;bro2Nc2Ofa2Nmo2Nsi20;ff0tesm2;tt0;ec7ir2Do6;kesp59u0M;ia5Jt3;l7me6An,rcere6ul;r,ss;di0oi5;n7s6;sy,t0;g0n0;am2ephe1Iow6;girl,m2r2Q;cretInior cit3Fr6;gea4v6;a4it1;hol4Xi7reen6ulpt1;wr2C;e01on;l1nt;aEe9o8u6;l0nn6;er up,ingE;g40le mod3Zof0;a4Zc8fug2Ppo32searQv6;ere4Uolution6;ary;e6luYru22;ptio3T;bbi,dic5Vpp0;arter6e2Z;back;aYeWhSiRlOoKr8sycho7u6;nk,p31;logi5;aGeDiBo6;d9fess1g7ph47s6;pe2Ktitu51;en6ramm0;it1y;igy,uc0;est4Nme mini0Unce6s3E;!ss;a7si6;de4;ch0;ctiti39nk0P;dca0Oet,li6pula50rnst42;c2Itic6;al scie6i2;nti5;a6umb0;nn0y6;er,ma4Lwright;lgrim,one0;a8iloso7otogra7ra6ysi1V;se;ph0;ntom,rmaci5;r6ssi1T;form0s4O;i3El,nel3Yr8st1tr6wn;i6on;arWot;ent4Wi42tn0;ccupa4ffBp8r7ut6;ca5l0B;ac4Iganiz0ig2Fph2;er3t6;i1Jomet6;ri5;ic0spring;aBe9ie4Xo7u6;n,rser3J;b6mad,vi4V;le2Vo4D;i6mesis,phew;ce,ghb1;nny,rr3t1X;aEeDiAo7u6yst1Y;m8si16;der3gul,m7n6th0;arDk;!my;ni7s6;f02s0Jt0;on,st0;chan1Qnt1rcha4;gi9k0n8rtyr,t6y1;e,riar6;ch;ag0iac;ci2stra3I;a7e2Aieutena4o6;rd,s0v0;bor0d7ndlo6ss,urea3Fwy0ym2;rd;!y;!s28;e8o7u6;ggl0;gg0urna2U;st0;c3Hdol,llu3Ummigra4n6; l9c1Qfa4habi42nov3s7ve6;nt1stig3;pe0Nt6;a1Fig3ru0M;aw;airFeBistoAo8u6ygie1K;man6sba2H;!ita8;bo,st6usekN;age,e3P;ri2;ir,r6;m7o6;!ine;it;dress0sty2C;aLeIhostGirl26ladi3oCrand7u6;e5ru;c9daug0Jfa8m7pa6s2Y;!re4;a,o6;th0;hi1B;al7d6lf0;!de3A;ie,k6te26;eep0;!wr6;it0;isha,n6;i6tl04;us;mbl0rden0;aDella,iAo7r6;eela2Nie1P;e,re6ster pare4;be1Hm2r6st0;unn0;an2ZgZlmm17nanci0r6tt0;e6st la2H; marsh2OfigXm2;rm0th0;conoEdDlectriCm8n7x6;amin0cellency,i2A;emy,trepreneur,vironmenta1J;c8p6;er1loye6;e,r;ee;ci2;it1;mi5;aKeBi8ork,ri7u6we02;de,tche2H;ft0v0;ct3eti7plom2Hre6va;ct1;ci2ti2;aDcor3fencCi0InAput9s7tectLvel6;op0;ce1Ge6ign0;rt0;ee,y;iz6;en;em2;c1Ml0;d8nc0redev7ug6;ht0;il;!dy;a06e04fo,hXitizenWlToBr9u6;r3stomer6;! representat6;ive;e3it6;ic;lJmGnAord9rpor1Nu7w6;boy,ork0;n6ri0;ciTte1Q;in3;fidantAgressSs9t6;e0Kr6;ibut1o6;ll0;tab13ul1O;!e;edi2m6pos0rade;a0EeQissi6;on0;leag8on7um6;ni5;el;ue;e6own;an0r6;ic,k;!s;a9e7i6um;ld;erle6f;ad0;ir7nce6plFract0;ll1;m2wI;lebri6o;ty;dBptAr6shi0;e7pe6;nt0;r,t6;ak0;ain;et;aMeLiJlogg0oErBu6;dd0Fild0rgl9siness6;m2p7w6;om2;ers05;ar;i7o6;!k0th0;cklay0de,gadi0;hemi2oge8y6;!frie6;nd;ym2;an;cyc6sR;li5;atbox0ings;by,nk0r6;b0on7te6;nd0;!e07;c04dWge4nQpLrHsFtAu7yatull6;ah;nt7t6;h1oG;!ie;h8t6;e6orney;nda4;ie5le6;te;sis00tron6;aut,om0;chbis8isto7tis6;an,t;crU;hop;ost9p6;ari6rentiS;ti6;on;le;a9cest1im3nou8y6;bo6;dy;nc0;ly5rc6;hi5;mi8v6;entur0is1;er;ni7r6;al;str3;at1;or;counBquaintanArob9t6;ivi5or,re6;ss;st;at;ce;ta4;nt","Adj|Noun":"true¦0:16;a1Db17c0Ud0Re0Mf0Dg0Ah08i06ju05l02mWnUoSpNrIsBt7u4v1watershed;a1ision0Z;gabo4nilla,ria1;b0Vnt;ndergr1pstairs;adua14ou1;nd;a3e1oken,ri0;en,r1;min0rori13;boo,n;age,e5ilv0Flack,o3quat,ta2u1well;bordina0Xper5;b0Lndard;ciali0Yl1vereign;e,ve16;cret,n1ri0;ior;a4e2ou1ubbiL;nd,tiY;ar,bBl0Wnt0p1side11;resent0Vublican;ci0Qsh;a4eriodic0last0Zotenti0r1;emi2incip0o1;!fession0;er,um;rall4st,tie0U;ff1pposi0Hv0;ens0Oi0C;agg01ov1uts;el;a5e3iniatJo1;bi01der07r1;al,t0;di1tr0N;an,um;le,riG;attOi2u1;sh;ber0ght,qC;stice,veniT;de0mpressioYn1;cumbe0Edividu0no0Dsta0Eterim;alf,o1umdrum;bby,melF;en2old,ra1;ph0Bve;er0ious;a7e5i4l3u1;git03t1;ure;uid;ne;llow,m1;aFiL;ir,t,vo1;riOuriO;l3p00x1;c1ecutUpeV;ess;d1iK;er;ar2e1;mographUrivO;k,l2;hiGlassSo2rude,unn1;ing;m5n1operK;creCstitueOte2vertab1;le;mpor1nt;ary;ic,m2p1;anion,lex;er2u1;ni8;ci0;al;e5lank,o4r1;i2u1;te;ef;ttom,urgeois;st;cadem9d6l2ntarct9r1;ab,ct8;e3tern1;at1;ive;rt;oles1ult;ce1;nt;ic","Adj|Past":"true¦0:4Q;1:4C;2:4H;3:4E;a44b3Tc36d2Je29f20g1Wh1Si1Jj1Gkno1Fl1Am15n12o0Xp0Mqu0Kr08sLtEuAv9w4yellow0;a7ea6o4rinkl0;r4u3Y;n,ri0;k31th3;rp0sh0tZ;ari0e1O;n5p4s0;d1li1Rset;cov3derstood,i4;fi0t0;a8e3Rhr7i6ouTr4urn0wi4C;a4imm0ou2G;ck0in0pp0;ed,r0;eat2Qi37;m0nn0r4;get0ni2T;aOcKeIhGimFm0Hoak0pDt7u4;bsid3Ogge44s4;pe4ta2Y;ct0nd0;a8e7i2Eok0r5u4;ff0mp0nn0;ength2Hip4;ed,p0;am0reotyp0;in0t0;eci4ik0oH;al3Efi0;pRul1;a4ock0ut;d0r0;a4c1Jle2t31;l0s3Ut0;a6or5r4;at4e25;ch0;r0tt3;t4ut0;is2Mur1;aEe5o4;tt0;cAdJf2Bg9je2l8m0Knew0p7qu6s4;eTpe2t4;or0ri2;e3Dir0;e1lac0;at0e2Q;i0Rul1;eiv0o4ycl0;mme2Lrd0v3;in0lli0ti2A;a4ot0;li28;aCer30iBlAo9r5u4;mp0zzl0;e6i2Oo4;ce2Fd4lo1Anou30pos0te2v0;uc0;fe1CocCp0Iss0;i2Kli1L;ann0e2CuS;ck0erc0ss0;ck0i2Hr4st0;allLk0;bse7c6pp13rgan2Dver4;lo4whelm0;ok0;cupi0;rv0;aJe5o4;t0uri1A;ed0gle2;a6e5ix0o4ut0ys1N;di1Nt15u26;as0Clt0;n4rk0;ag0ufact0A;e6i5o4;ad0ck0st,v0;cens0m04st0;ft,v4;el0;tt0wn;a5o15u4;dg0s1B;gg0;llumSmpAn4sol1;br0cre1Ldebt0f8jZspir0t5v4;it0olv0;e4ox0Y;gr1n4re23;d0si15;e2l1o1Wuri1;li0o01r4;ov0;a6e1o4um03;ok0r4;ri0Z;mm3rm0;i6r5u4;a1Bid0;a0Ui0Rown;ft0;aAe9i8l6oc0Ir4;a4i0oz0Y;ctHg19m0;avo0Ju4;st3;ni08tt0x0;ar0;d0il0sc4;in1;dCl1mBn9quipp0s8x4;agger1c6p4te0T;a0Se4os0;ct0rie1D;it0;cap0tabliZ;cha0XgFha1As4;ur0;a0Zbarra0N;i0Buc1;aMeDi5r4;a01i0;gni08miniSre2s4;a9c6grun0Ft4;o4re0Hu17;rt0;iplWou4;nt0r4;ag0;bl0;cBdRf9l8p7ra6t5v4;elop0ot0;ail0ermQ;ng0;re07;ay0ight0;e4in0o0M;rr0;ay0enTor1;m5t0z4;ed,zl0;ag0p4;en0;aPeLhIlHo9r6u4;lt4r0stom03;iv1;a5owd0u4;sh0;ck0mp0;d0loAm7n4ok0v3;centr1f5s4troC;id3olid1;us0;b5pl4;ic1;in0;r0ur0;assi9os0utt3;ar5i4;ll0;g0m0;lebr1n6r4;ti4;fi0;tralJ;g0lcul1;aDewild3iCl9o7r5urn4;ed,t;ok4uis0;en;il0r0t4und;tl0;e5i4;nd0;ss0;as0;ffl0k0laMs0tt3;bPcNdKfIg0lFmaz0nDppBrm0ss9u5wa4;rd0;g5thor4;iz0;me4;nt0;o6u4;m0r0;li0re4;ci1;im1ticip1;at0;a5leg0t3;er0;rm0;fe2;ct0;ju5o7va4;nc0;st0;ce4knowledg0;pt0;and5so4;rb0;on0;ed",Singular:"true¦0:5J;1:5H;2:4W;3:4S;4:52;5:57;6:5L;7:56;8:5B;a52b4Lc3Nd35e2Xf2Og2Jh28in24j23k22l1Um1Ln1Ho1Bp0Rqu0Qr0FsZtMuHvCw9x r58yo yo;a9ha3Po3Q;f3i4Rt0Gy9;! arou39;arCeAideo ga2Qo9;cabu4Jl5C;gOr9t;di4Zt1Y;iety,ni4P;nBp30rAs 9;do43s5E;bani1in0;coordinat3Ader9;estima1to24we41; rex,aKeJhHiFoErBuAv9;! show;m2On2rntLto1D;agedy,ib9o4E;e,u9;n0ta46;ni1p2rq3L;c,er,m9;etF;ing9ree26;!y;am,mp3F;ct2le6x return;aNcMeKhor4QiJkHoGpin off,tDuBy9;ll9ner7st4T;ab2X;b9i1n28per bowl,rro1X;st3Ltot0;atAipe2Go1Lrate7udent9;! lo0I;i39u1;ft ser4Lmeo1I;elet5i9;ll,r3V;b38gn2Tte;ab2Jc9min3B;t,urity gua2N;e6ho2Y;bbatic0la3Jndwi0Qpi5;av5eDhetor2iAo9;de6om,w;tAv9;erb2C;e,u0;bDcBf9publ2r10spi1;er9orm3;e6r0;i9ord label;p2Ht0;a1u46;estion mark,ot2F;aPeMhoLiIlGoErAu9yram1F;ddi3HpErpo1Js3J;eBo9;bl3Zs9;pe3Jta1;dic1Rmi1Fp1Qroga8ss relea1F;p9rt0;py;a9ebisci1;q2Dte;cn2eAg9;!gy;!r;ne call,tocoK;anut,dAr9t0yo1;cen3Jsp3K;al,est0;nop4rAt9;e,hog5;adi11i2V;atme0bj3FcBpia1rde0thers,utspok5ve9wn3;n,r9;ti0Pview;cuAe9;an;pi3;arBitAot9umb3;a2Fhi2R;e,ra1;cot2ra8;aFeCiAo9ur0;nopo4p18rni2Nsq1Rti36uld;c,li11n0As9tt5;chief,si34;dAnu,t9;al,i3;al,ic;gna1mm0nd15rsupi0te9yf4;ri0;aDegCiBu9;ddi1n9;ch;me,p09; Be0M;bor14y9; 9er;up;eyno1itt5;el4ourn0;cBdices,itia8ni25sAtel0Lvert9;eb1J;e28titu1;en8i2T;aIeEighDoAu9;man right,s22;me9rmoFsp1Ftb0K;! r9;un; scho0YriY;a9i1N;d9v5; start,pho9;ne;ndful,sh brown,v5ze;aBelat0Ilaci3r9ul4yp1S;an9enadi3id;a1Cd slam,ny;df4r9;l2ni1I;aGeti1HiFlu1oCrAun9;er0;ee market,i9onti3;ga1;l4ur9;so9;me;ePref4;br2mi4;conoFffi7gg,lecto0Rmbas1EnCpidem2s1Zth2venBxAyel9;id;ampZempl0Nte6;i19t;er7terp9;ri9;se;my;eLiEoBr9ump tru0U;agonf4i9;er,ve thru;cAg7i4or,ssi3wn9;side;to0EumenE;aEgniDnn3sAvide9;nd;conte6incen8p9tri11;osi9;ti0C;ta0H;le0X;athBcAf9ni0terre6;ault 05err0;al,im0;!b9;ed;aWeThMiLlJoDr9;edit caBuc9;ib9;le;rd;efficDke,lCmmuniqLnsApi3rr0t0Xus9yo1;in;erv9uI;ato02;ic,lQ;ie6;er7i9oth;e6n2;ty,vil wM;aDeqCick5ocoBr9;istmas car9ysanthemum;ol;la1;ue;ndeli3racteri9;st2;iAllEr9;e0tifica1;liZ;hi3nFpErCt9ucus;erpi9hedr0;ll9;ar;!bohyd9ri3;ra1;it0;aAe,nib0t9;on;l,ry;aMeLiop2leJoHrDu9;nny,r9tterf4;g9i0;la9;ry;eakAi9;ck;fa9throB;st;dy,ro9wl;ugh;mi9;sh;an,l4;nkiArri3;er;ng;cSdMlInFppeti1rDsBtt2utop9;sy;ic;ce6pe9;ct;r9sen0;ay;ecAoma4tiA;ly;do1;i5l9;er7y;gy;en; hominDjAvan9;tage;ec8;ti9;ve;em;cCeAqui9;tt0;ta1;te;iAru0;al;de6;nt","Person|Noun":"true¦a0Eb07c03dWeUfQgOhLjHkiGlFmCnBolive,p7r4s3trini06v1wa0;ng,rd,tts;an,enus,iol0;a,et;ky,onPumm09;ay,e1o0uby;bin,d,se;ed,x;a2e1o0;l,tt04;aLnJ;dYge,tR;at,orm;a0eloW;t0x,ya;!s;a9eo,iH;ng,tP;a2e1o0;lGy;an,w3;de,smi4y;a0erb,iOolBuntR;ll,z0;el;ail,e0iLuy;ne;a1ern,i0lo;elds,nn;ith,n0;ny;a0dEmir,ula,ve;rl;a4e3i1j,ol0;ly;ck,x0;ie;an,ja;i0wn;sy;am,h0liff,rystal;a0in,ristian;mbers,ri0;ty;a4e3i2o,r0ud;an0ook;dy;ll;nedict,rg;k0nks;er;l0rt;fredo,ma","Actor|Verb":"true¦aCb8c5doctor,engineAfool,g3host,judge,m2nerd,p1recruit,scout,ushAvolunteAwi0;mp,tneA;arent,ilot;an,ime;eek,oof,r0uide;adu8oom;ha1o0;ach,nscript,ok;mpion,uffeur;o2u0;lly,tch0;er;ss;ddi1ffili0rchite1;ate;ct",MaleName:"true¦0:H6;1:FZ;2:DS;3:GQ;4:CZ;5:FV;6:GM;7:FP;8:GW;9:ET;A:C2;B:GD;aF8bE1cCQdBMeASfA1g8Yh88i7Uj6Sk6Bl5Mm48n3So3Ip33qu31r26s1Et0Ru0Ov0CwTxSyHzC;aCor0;cChC1karia,nAT;!hDkC;!aF6;!ar7CeF5;aJevgenBSoEuC;en,rFVsCu3FvEF;if,uf;nDs6OusC;ouf,s6N;aCg;s,tC;an,h0;hli,nCrosE1ss09;is,nC;!iBU;avi2ho5;aPeNiDoCyaEL;jcieBJlfgang,odrFutR;lFnC;f8TsC;lCt1;ow;bGey,frEhe4QlC;aE5iCy;am,e,s;ed8iC;d,ed;eAur;i,ndeD2rn2sC;!l9t1;lDyC;l1ne;lDtC;!er;aCHy;aKernDAiFladDoC;jteB0lodymyr;!iC;mFQsDB;cFha0ktBZnceDrgCOvC;a0ek;!nC;t,zo;!e4StBV;lCnC7sily;!entC;in9J;ghE2lCm70nax,ri,sm0;riCyss87;ch,k;aWeRhNiLoGrEuDyC;!l2roEDs1;n6r6E;avD0eCist0oy,um0;ntCRvBKy;bFdAWmCny;!asDmCoharu;aFFie,y;!z;iA6y;mCt4;!my,othy;adEeoDia0SomC;!as;!dor91;!de4;dFrC;enBKrC;anBJeCy;ll,nBI;!dy;dgh,ha,iCnn2req,tsu5V;cDAka;aYcotWeThPiMlobod0oKpenc2tEurDvenAEyCzym1;ed,lvest2;aj,e9V;anFeDuC;!aA;fan17phEQvCwaA;e77ie;!islaCl9;v,w;lom1rBuC;leymaDHta;dDgmu9UlCm1yabonga;as,v8B;!dhart8Yn9;aEeClo75;lCrm0;d1t1;h9Jne,qu1Jun,wn,yne;aDbastiEDk2Yl5Mpp,rgCth,ymoCU;e1Dio;m4n;!tC;!ie,y;eDPlFmEnCq67tosCMul;dCj2UtiA5;e01ro;!iATkeB6mC4u5;!ik,vato9K;aZeUheC8iRoGuDyC;an,ou;b99dDf4peAssC;!elEG;ol00y;an,bLc7MdJel,geIh0lHmGnEry,sDyC;!ce;ar7Ocoe,s;!aCnBU;ld,n;an,eo;a7Ef;l7Jr;e3Eg2n9olfo,riC;go;bBNeDH;cCl9;ar87c86h54kCo;!ey,ie,y;cFeA3gDid,ubByCza;an8Ln06;g85iC;naC6s;ep;ch8Kfa5hHin2je8HlGmFndEoHpha5sDul,wi36yC;an,mo8O;h9Im4;alDSol3O;iD0on;f,ph;ul;e9CinC;cy,t1;aOeLhilJiFrCyoG;aDeC;m,st1;ka85v2O;eDoC;tr;r8GtC;er,ro;!ipCl6H;!p6U;dCLrcy,tC;ar,e9JrC;!o7;b9Udra8So9UscAHtri62ulCv8I;!ie,o7;ctav6Ji2lImHndrBRrGsDtCum6wB;is,to;aDc6k6m0vCwaBE;al79;ma;i,vR;ar,er;aDeksandr,ivC;er,i2;f,v;aNeLguyBiFoCu3O;aDel,j4l0ma0rC;beAm0;h,m;cFels,g5i9EkDlC;es,s;!au,h96l78olaC;!i,y;hCkCol76;ol75;al,d,il,ls1vC;ilAF;hom,tC;e,hC;anCy;!a5i5;aYeViLoGuDyC;l4Nr1;hamDr84staC;fa,p6E;ed,mG;di10e,hamEis4JntDritz,sCussa;es,he;e,y;ad,ed,mC;ad,ed;cGgu5hai,kFlEnDtchC;!e8O;a9Pik;house,o7t1;ae73eC3ha8Iolaj;ah,hDkC;!ey,y;aDeC;al,l;el,l;hDlv3rC;le,ri8Ev4T;di,met;ay0c00gn4hWjd,ks2NlTmadZnSrKsXtDuric7VxC;imilBKwe8B;eHhEi69tCus,y69;!eo,hCia7;ew,i67;eDiC;as,eu,s;us,w;j,o;cHiGkFlEqu8Qsha83tCv3;iCy;!m,n;in,on;el,o7us;a6Yo7us;!elCin,o7us;!l8o;frAEi5Zny,u5;achDcoCik;lm;ai,y;amDdi,e5VmC;oud;adCm6W;ou;aulCi9P;ay;aWeOiMloyd,oJuDyC;le,nd1;cFdEiDkCth2uk;a7e;gi,s,z;ov7Cv6Hw6H;!as,iC;a6Een;g0nn52renDuCvA4we7D;!iS;!zo;am,n4oC;n5r;a9Yevi,la5KnHoFst2thaEvC;eCi;nte;bo;nCpo8V;!a82el,id;!nC;aAy;mEnd1rDsz73urenCwr6K;ce,t;ry,s;ar,beAont;aOeIhalHiFla4onr63rDu5SylC;e,s;istCzysztof;i0oph2;er0ngsl9p,rC;ilA9k,ollos;ed,id;en0iGnDrmCv4Z;it;!dDnCt1;e2Ny;ri4Z;r,th;cp2j4mEna8BrDsp6them,uC;ri;im,l;al,il;a03eXiVoFuC;an,lCst3;en,iC;an,en,o,us;aQeOhKkub4AnIrGsDzC;ef;eDhCi9Wue;!ua;!f,ph;dCge;i,on;!aCny;h,s,th6J;anDnC;!ath6Hie,n72;!nC;!es;!l,sCy;ph;o,qu3;an,mC;!i,m6V;d,ffFns,rCs4;a7JemDmai7QoCry;me,ni1H;i9Dy;!e73rC;ey,y;cKdBkImHrEsDvi2yC;dBs1;on,p2;ed,oDrCv67;e6Qod;d,s61;al,es5Wis1;a,e,oCub;b,v;ob,qu13;aTbNchiMgLke53lija,nuKonut,rIsEtCv0;ai,suC;ki;aDha0i8XmaCsac;el,il;ac,iaC;h,s;a,vinCw3;!g;k,nngu6X;nac1Xor;ka;ai,rahC;im;aReLoIuCyd6;beAgGmFsC;eyDsC;a3e3;in,n;ber5W;h,o;m2raDsse3wC;a5Pie;c49t1K;a0Qct3XiGnDrC;beAman08;dr7VrC;iCy2N;!k,q1R;n0Tt3S;bKlJmza,nIo,rEsDyC;a5KdB;an,s0;lEo67r2IuCv9;hi5Hki,tC;a,o;an,ey;k,s;!im;ib;a08e00iUlenToQrMuCyorgy;iHnFsC;!taC;f,vC;!e,o;n6tC;er,h2;do,lC;herDlC;auCerQ;me;aEegCov2;!g,orC;!io,y;dy,h7C;dfr9nza3XrDttfC;ri6C;an,d47;!n;acoGlEno,oCuseppe;rgiCvan6O;!o,s;be6Ies,lC;es;mo;oFrC;aDha4HrCt;it,y;ld,rd8;ffErgC;!e7iCy;!os;!r9;bElBrCv3;eCla1Nr4Hth,y;th;e,rC;e3YielC;!i4;aXeSiQlOorrest,rCyod2E;aHedFiC;edDtC;s,z;ri18;!d42eri11riC;ck,k;nCs2;cEkC;ie,lC;in,yn;esLisC;!co,z3M;etch2oC;ri0yd;d5lConn;ip;deriFliEng,rC;dinaCg4nan0B;nd8;pe,x;co;bCdi,hd;iEriC;ce,zC;io;an,en,o;benez2dZfrYit0lTmMnJo3rFsteb0th0ugenEvCymBzra;an,eCge4D;ns,re3K;!e;gi,iDnCrol,v3w3;est8ie,st;cCk;!h,k;o0DriCzo;co,qC;ue;aHerGiDmC;aGe3A;lCrh0;!iC;a10o,s;s1y;nu5;beAd1iEliDm2t1viCwood;n,s;ot28s;!as,j5Hot,sC;ha;a3en;!dGg6mFoDua2QwC;a2Pin;arC;do;oZuZ;ie;a04eTiOmitrNoFrag0uEwDylC;an,l0;ay3Hig4D;a3Gdl9nc0st3;minFnDri0ugCvydGy2S;!lF;!a36nCov0;e1Eie,y;go,iDykC;as;cCk;!k;i,y;armuFetDll1mitri7neCon,rk;sh;er,m6riC;ch;id;andLepak,j0lbeAmetri4nIon,rGsEvDwCxt2;ay30ey;en,in;hawn,moC;nd;ek,riC;ck;is,nC;is,y;rt;re;an,le,mKnIrEvC;e,iC;!d;en,iEne0PrCyl;eCin,yl;l45n;n,o,us;!iCny;el,lo;iCon;an,en,on;a0Fe0Ch03iar0lRoJrFuDyrC;il,us;rtC;!is;aEistC;iaCob12;no;ig;dy,lInErC;ey,neliCy;s,us;nEor,rDstaC;nt3;ad;or;by,e,in,l3t1;aHeEiCyde;fCnt,ve;fo0Xt1;menDt4;us;s,t;rFuDyC;!t1;dCs;e,io;enC;ce;aHeGrisC;!toC;phCs;!eC;!r;st2t;d,rCs;b5leC;s,y;cDdrCs6;ic;il;lHmFrC;ey,lDroCy;ll;!o7t1;er1iC;lo;!eb,v3;a09eZiVjorn,laUoSrEuCyr1;ddy,rtKst2;er;aKeFiEuDyC;an,ce,on;ce,no;an,ce;nDtC;!t;dDtC;!on;an,on;dFnC;dDisC;lav;en,on;!foOl9y;bby,gd0rCyd;is;i0Lke;bElDshC;al;al,lL;ek;nIrCshoi;at,nEtC;!raC;m,nd;aDhaCie;rd;rd8;!iDjam3nCs1;ie,y;to;kaMlazs,nHrC;n9rDtC;!holomew;eCy;tt;ey;dCeD;ar,iC;le;ar1Nb1Dd16fon15gust3hm12i0Zja0Yl0Bm07nTputsiSrGsaFugustEveDyCziz;a0kh0;ry;o,us;hi;aMchiKiJjun,mHnEon,tCy0;em,hCie,ur8;ur;aDoC;!ld;ud,v;aCin;an,nd8;!el,ki;baCe;ld;ta;aq;aMdHgel8tCw6;hoFoC;iDnC;!i8y;ne;ny;er7rCy;eDzC;ej;!as,i,j,s,w;!s;s,tolC;iCy;!y;ar,iEmaCos;nu5r;el;ne,r,t;aVbSdBeJfHiGl01onFphonsEt1vC;aPin;on;e,o;so,zo;!sR;!onZrC;ed;c,jaHksFssaHxC;!andC;er,rC;e,os,u;andCei;ar,er,r;ndC;ro;en;eDrecC;ht;rt8;dd3in,n,sC;taC;ir;ni;dDm6;ar;an,en;ad,eC;d,t;in;so;aGi,olErDvC;ik;ian8;f8ph;!o;mCn;!a;dGeFraDuC;!bakr,lfazl;hCm;am;!l;allFel,oulaye,ulC;!lDrahm0;an;ah,o;ah;av,on",Uncountable:"true¦0:2E;1:2L;2:33;a2Ub2Lc29d22e1Rf1Ng1Eh16i11j0Yk0Wl0Rm0Hn0Do0Cp03rZsLt9uran2Jv7w3you gu0E;a5his17i4oo3;d,l;ldlife,ne;rm8t1;apor,ernacul29i3;neg28ol1Otae;eDhBiAo8r4un3yranny;a,gst1B;aff2Oea1Ko4ue nor3;th;o08u3;bleshoot2Ose1Tt;night,othpas1Vwn3;foEsfoE;me off,n;er3und1;e,mod2S;a,nnis;aDcCeBhAi9ki8o7p6t4u3weepstak0;g1Unshi2Hshi;ati08e3;am,el;ace2Keci0;ap,cc1meth2C;n,ttl0;lk;eep,ingl0or1C;lf,na1Gri0;ene1Kisso1C;d0Wfe2l4nd,t3;i0Iurn;m1Ut;abi0e4ic3;e,ke15;c3i01laxa11search;ogni10rea10;a9e8hys7luto,o5re3ut2;amble,mis0s3ten20;en1Zs0L;l3rk;i28l0EyH; 16i28;a24tr0F;nt3ti0M;i0s;bstetri24vercrowd1Qxyg09;a5e4owada3utella;ys;ptu1Ows;il poliZtional securi2;aAe8o5u3;m3s1H;ps;n3o1K;ey,o3;gamy;a3cha0Elancholy,rchandi1Htallurgy;sl0t;chine3g1Aj1Hrs,thema1Q; learn1Cry;aught1e6i5ogi4u3;ck,g12;c,s1M;ce,ghtn18nguis1LteratWv1;ath1isVss;ara0EindergartPn3;icke0Aowled0Y;e3upit1;a3llyfiGwel0G;ns;ce,gnor6mp5n3;forma00ter3;net,sta07;atiSort3rov;an18;a7e6isto09o3ung1;ckey,mework,ne4o3rseradi8spitali2use arrest;ky;s2y;adquarteXre;ir,libut,ppiHs3;hi3te;sh;ene8l6o5r3um,ymnas11;a3eZ;niUss;lf,re;ut3yce0F;en; 3ti0W;edit0Hpo3;ol;aNicFlour,o4urnit3;ure;od,rgive3uri1wl;ness;arCcono0LducaBlectr9n7quip8thi0Pvery6x3;ist4per3;ti0B;en0J;body,o08th07;joy3tertain3;ment;ici2o3;ni0H;tiS;nings,th;emi02i6o4raugh3ynas2;ts;pe,wnstai3;rs;abet0ce,s3;honZrepu3;te;aDelciChAivi07l8o3urrency;al,ld w6mmenta5n3ral,ttIuscoB;fusiHt 3;ed;ry;ar;assi01oth0;es;aos,e3;eMwK;us;d,rO;a8i6lood,owlHread5u3;ntGtt1;er;!th;lliarJs3;on;g3ss;ga3;ge;cKdviJeroGirFmBn6ppeal court,r4spi3thleL;rin;ithmet3sen3;ic;i6y3;o4th3;ing;ne;se;en5n3;es2;ty;ds;craft;bi8d3nau7;yna3;mi6;ce;id,ous3;ti3;cs",Infinitive:"true¦0:9G;1:9T;2:AD;3:90;4:9Z;5:84;6:AH;7:A9;8:92;9:A0;A:AG;B:AI;C:9V;D:8R;E:8O;F:97;G:6H;H:7D;a94b8Hc7Jd68e4Zf4Mg4Gh4Ai3Qj3Nk3Kl3Bm34nou48o2Vp2Equ2Dr1Es0CtZuTvRwI;aOeNiLors5rI;eJiI;ng,te;ak,st3;d5e8TthI;draw,er;a2d,ep;i2ke,nIrn;d1t;aIie;liADniAry;nJpI;ho8Llift;cov1dJear8Hfound8DlIplug,rav82tie,ve94;eaAo3X;erIo;cut,go,staAFvalA3w2G;aSeQhNoMrIu73;aIe72;ffi3Smp3nsI;aBfo7CpI;i8oD;pp3ugh5;aJiJrIwaD;eat5i2;nk;aImA0;ch,se;ck3ilor,keImp1r8L;! paD;a0Ic0He0Fh0Bi0Al08mugg3n07o05p02qu01tUuLwI;aJeeIim;p,t5;ll7Wy;bNccMffLggeCmmKppJrI;mouFpa6Zvi2;o0re6Y;ari0on;er,i4;e7Numb;li9KmJsiIveD;de,st;er9it;aMe8MiKrI;ang3eIi2;ng27w;fIng;f5le;b,gg1rI;t3ve;a4AiA;a4UeJit,l7DoI;il,of;ak,nd;lIot7Kw;icEve;atGeak,i0O;aIi6;m,y;ft,ng,t;aKi6CoJriIun;nk,v6Q;ot,rt5;ke,rp5tt1;eIll,nd,que8Gv1w;!k,m;aven9ul8W;dd5tis1Iy;a0FeKiJoI;am,t,ut;d,p5;a0Ab08c06d05f01group,hea00iZjoi4lXmWnVpTq3MsOtMup,vI;amp,eJiIo3B;sEve;l,rI;e,t;i8rI;ie2ofE;eLiKpo8PtIurfa4;o24rI;aHiBuctu8;de,gn,st;mb3nt;el,hra0lIreseF;a4e71;d1ew,o07;aHe3Fo2;a7eFiIo6Jy;e2nq41ve;mbur0nf38;r0t;inKleBocus,rJuI;el,rbiA;aBeA;an4e;aBu4;ei2k8Bla43oIyc3;gni39nci3up,v1;oot,uI;ff;ct,d,liIp;se,ze;tt3viA;aAenGit,o7;aWerUinpoiFlumm1LoTrLuI;b47ke,niArIt;poDsuI;aFe;eMoI;cKd,fe4XhibEmo7noJpo0sp1tru6vI;e,i6o5L;un4;la3Nu8;aGclu6dJf1occupy,sup0JvI;a6BeF;etermi4TiB;aGllu7rtr5Ksse4Q;cei2fo4NiAmea7plex,sIva6;eve8iCua6;mp1rItrol,ve;a6It6E;bOccuNmEpMutLverIwe;l07sJtu6Yu0wI;helm;ee,h1F;gr5Cnu2Cpa4;era7i4Ipo0;py,r;ey,seItaH;r2ss;aMe0ViJoIultiply;leCu6Pw;micJnIspla4;ce,g3us;!k;iIke,na9;m,ntaH;aPeLiIo0u3N;ke,ng1quIv5;eIi6S;fy;aKnIss5;d,gI;th5;rn,ve;ng2Gu1N;eep,idnJnI;e4Cow;ap;oHuI;gg3xtaI;po0;gno8mVnIrk;cTdRfQgeChPitia7ju8q1CsNtKun6EvI;a6eIo11;nt,rt,st;erJimi6BoxiPrI;odu4u6;aBn,pr03ru6C;iCpi8tIu8;all,il,ruB;abEibE;eCo3Eu0;iIul9;ca7;i7lu6;b5Xmer0pI;aLer4Uin9ly,oJrI;e3Ais6Bo2;rt,se,veI;riA;le,rt;aLeKiIoiCuD;de,jaInd1;ck;ar,iT;mp1ng,pp5raIve;ng5Mss;ath1et,iMle27oLrI;aJeIow;et;b,pp3ze;!ve5A;gg3ve;aTer45i5RlSorMrJuI;lf4Cndrai0r48;eJiIolic;ght5;e0Qsh5;b3XeLfeEgJsI;a3Dee;eIi2;!t;clo0go,shIwa4Z;ad3F;att1ee,i36;lt1st5;a0OdEl0Mm0FnXquip,rWsVtGvTxI;aRcPeDhOiNpJtIu6;ing0Yol;eKi8lIo0un9;aHoI;it,re;ct,di7l;st,t;a3oDu3B;e30lI;a10u6;lt,mi28;alua7oI;ke,l2;chew,pou0tab19;a0u4U;aYcVdTfSgQhan4joy,lPqOrNsuMtKvI;e0YisI;a9i50;er,i4rI;aHenGuC;e,re;iGol0F;ui8;ar9iC;a9eIra2ulf;nd1;or4;ang1oIu8;r0w;irc3lo0ou0ErJuI;mb1;oaGy4D;b3ct;bKer9pI;hasiIow1;ze;aKody,rI;a4oiI;d1l;lm,rk;ap0eBuI;ci40de;rIt;ma0Rn;a0Re04iKo,rIwind3;aw,ed9oI;wn;agno0e,ff1g,mi2Kne,sLvI;eIul9;rIst;ge,t;aWbVcQlod9mant3pNru3TsMtI;iIoDu37;lJngI;uiA;!l;ol2ua6;eJlIo0ro2;a4ea0;n0r0;a2Xe36lKoIu0S;uIv1;ra9;aIo0;im;a3Kur0;b3rm;af5b01cVduBep5fUliTmQnOpMrLsiCtaGvI;eIol2;lop;ch;a20i2;aDiBloIoD;re,y;oIy;te,un4;eJoI;liA;an;mEv1;a4i0Ao06raud,y;ei2iMla8oKrI;ee,yI;!pt;de,mIup3;missi34po0;de,ma7ph1;aJrief,uI;g,nk;rk;mp5rk5uF;a0Dea0h0Ai09l08oKrIurta1G;a2ea7ipp3uI;mb3;ales4e04habEinci6ll03m00nIrro6;cXdUfQju8no7qu1sLtKvI;eIin4;ne,r9y;aHin2Bribu7;er2iLoli2Epi8tJuI;lt,me;itu7raH;in;d1st;eKiJoIroFu0;rm;de,gu8rm;ss;eJoI;ne;mn,n0;eIlu6ur;al,i2;buCe,men4pI;eIi3ly;l,te;eBi6u6;r4xiC;ean0iT;rcumveFte;eJirp,oI;o0p;riAw;ncIre5t1ulk;el;a02eSi6lQoPrKuI;iXrIy;st,y;aLeaKiJoad5;en;ng;stfeLtX;ke;il,l11mba0WrrMth1;eIow;ed;!coQfrie1LgPhMliLqueaKstJtrIwild1;ay;ow;th;e2tt3;a2eJoI;ld;ad;!in,ui3;me;bysEckfi8ff3tI;he;b15c0Rd0Iff0Ggree,l0Cm09n03ppZrXsQttOuMvJwaE;it;eDoI;id;rt;gIto0X;meF;aIeCraB;ch,in;pi8sJtoI;niA;aKeIi04u8;mb3rt,ss;le;il;re;g0Hi0ou0rI;an9i2;eaKly,oiFrI;ai0o2;nt;r,se;aMi0GnJtI;icipa7;eJoIul;un4y;al;ly0;aJu0;se;lga08ze;iKlI;e9oIu6;t,w;gn;ix,oI;rd;a03jNmiKoJsoI;rb;pt,rn;niIt;st1;er;ouJuC;st;rn;cLhie2knowled9quiItiva7;es4re;ce;ge;eQliOoKrJusI;e,tom;ue;mIst;moJpI;any,liA;da7;ma7;te;pt;andPduBet,i6oKsI;coKol2;ve;liArt,uI;nd;sh;de;ct;on",Person:"true¦0:1Q;a29b1Zc1Md1Ee18f15g13h0Ri0Qj0Nk0Jl0Gm09n06o05p00rPsItCusain bolt,v9w4xzibit,y1;anni,oko on2uji,v1;an,es;en,o;a3ednesday adams,i2o1;lfram,o0Q;ll ferrell,z khalifa;lt disn1Qr1;hol,r0G;a2i1oltai06;n dies0Zrginia wo17;lentino rossi,n goG;a4h3i2ripp,u1yra banks;lZpac shakur;ger woods,mba07;eresa may,or;kashi,t1ylor;um,ya1B;a5carlett johanss0h4i3lobodan milosevic,no2ocr1Lpider1uperm0Fwami; m0Em0E;op dogg,w whi1H;egfried,nbad;akespeaTerlock holm1Sia labeouf;ddam hussa16nt1;a cla11ig9;aAe6i5o3u1za;mi,n dmc,paul,sh limbau1;gh;bin hood,d stew16nald1thko;in0Mo;han0Yngo starr,valdo;ese witherspo0i1mbrandt;ll2nh1;old;ey,y;chmaninoff,ffi,iJshid,y roma1H;a4e3i2la16o1uff daddy;cahont0Ie;lar,p19;le,rZ;lm17ris hilt0;leg,prah winfr0Sra;a2e1iles cra1Bostradam0J; yo,l5tt06wmQ;pole0s;a5e4i2o1ubar03;by,lie5net,rriss0N;randa ju1tt romn0M;ly;rl0GssiaB;cklemo1rkov,s0ta hari,ya angelou;re;ady gaga,e1ibera0Pu;bron jam0Xch wale1e;sa;anye west,e3i1obe bryant;d cudi,efer suther1;la0P;ats,sha;a2effers0fk,k rowling,rr tolki1;en;ck the ripp0Mwaharlal nehru,y z;liTnez,ron m7;a7e5i3u1;lk hog5mphrey1sa01;! bog05;l1tl0H;de; m1dwig,nry 4;an;ile selassFlle ber4m3rrison1;! 1;ford;id,mo09;ry;ast0iannis,o1;odwPtye;ergus0lorence nightinga08r1;an1ederic chopN;s,z;ff5m2nya,ustaXzeki1;el;eril lagasse,i1;le zatop1nem;ek;ie;a6e4i2octor w1rake;ho;ck w1ego maradoC;olf;g1mi lovaOnzel washingt0;as;l1nHrth vadR;ai lNt0;a8h5lint0o1thulhu;n1olio;an,fuci1;us;on;aucKop2ristian baMy1;na;in;millo,ptain beefhe4r1;dinal wols2son1;! palmF;ey;art;a8e5hatt,i3oHro1;ck,n1;te;ll g1ng crosby;atB;ck,nazir bhut2rtil,yon1;ce;to;nksy,rack ob1;ama;l 6r3shton kutch2vril lavig8yn ra1;nd;er;chimed2istot1;le;es;capo2paci1;no;ne",Adjective:"true¦0:AI;1:BS;2:BI;3:BA;4:A8;5:84;6:AV;7:AN;8:AF;9:7H;A:BQ;B:AY;C:BC;D:BH;E:9Y;aA2b9Ec8Fd7We79f6Ng6Eh61i4Xj4Wk4Tl4Im41n3Po36p2Oquart7Pr2Ds1Dt14uSvOwFye29;aMeKhIiHoF;man5oFrth7G;dADzy;despreB1n w97s86;acked1UoleF;!sa6;ather1PeFll o70ste1D;!k5;nt1Ist6Ate4;aHeGiFola5T;bBUce versa,gi3Lle;ng67rsa5R;ca1gBSluAV;lt0PnLpHrGsFttermoBL;ef9Ku3;b96ge1; Hb32pGsFtiAH;ca6ide d4R;er,i85;f52to da2;a0Fbeco0Hc0Bd04e02f01gu1XheaBGiXkn4OmUnTopp06pRrNsJtHus0wF;aFiel3K;nt0rra0P;app0eXoF;ld,uS;eHi37o5ApGuF;perv06spec39;e1ok9O;en,ttl0;eFu5;cogn06gul2RlGqu84sF;erv0olv0;at0en33;aFrecede0E;id,rallel0;am0otic0;aFet;rri0tF;ch0;nFq26vers3;sur0terFv7U;eFrupt0;st0;air,inish0orese98;mploy0n7Ov97xpF;ect0lain0;eHisFocume01ue;clFput0;os0;cid0rF;!a8Scov9ha8Jlyi8nea8Gprivileg0sMwF;aFei9I;t9y;hGircumcFonvin2U;is0;aFeck0;lleng0rt0;b20ppea85ssuGttend0uthorF;iz0;mi8;i4Ara;aLeIhoHip 25oGrF;anspare1encha1i2;geth9leADp notch,rpB;rny,ugh6H;ena8DmpGrFs6U;r49tia4;eCo8P;leFst4M;nt0;a0Dc09e07h06i04ki03l01mug,nobbi4XoVpRqueami4XtKuFymb94;bHccinAi generis,pFr5;erFre7N;! dup9b,vi70;du0li7Lp6IsFurb7J;eq9Atanda9X;aKeJi16o2QrGubboFy4Q;rn;aightFin5GungS; fFfF;or7V;adfa9Pri6;lwa6Ftu82;arHeGir6NlendBot Fry;on;c3Qe1S;k5se; call0lImb9phistic16rHuFviV;ndFth1B;proof;dBry;dFub6; o2A;e60ipF;pe4shod;ll0n d7R;g2HnF;ceEg6ist9;am3Se9;co1Zem5lfFn6Are7; suf4Xi43;aGholFient3A;ar5;rlFt4A;et;cr0me,tisfac7F;aOeIheumatoBiGoF;bu8Ztt7Gy3;ghtFv3; 1Sf6X;cJdu8PlInown0pro69sGtF;ard0;is47oF;lu2na1;e1Suc45;alcit8Xe1ondi2;bBci3mpa1;aSePicayu7laOoNrGuF;bl7Tnjabi;eKiIoF;b7VfGmi49pFxi2M;er,ort81;a7uD;maFor,sti7va2;!ry;ciDexis0Ima2CpaB;in55puli8G;cBid;ac2Ynt 3IrFti2;ma40tFv7W;!i3Z;i2YrFss7R;anoBtF; 5XiF;al,s5V;bSffQkPld OnMrLth9utKverF;!aIbMdHhGni75seas,t,wF;ei74rou74;a63e7A;ue;ll;do1Ger,si6A;d3Qg2Aotu5Z; bFbFe on o7g3Uli7;oa80;fashion0school;!ay; gua7XbFha5Uli7;eat;eHligGsF;ce7er0So1C;at0;diFse;a1e1;aOeNiMoGuF;anc0de; moEnHrthFt6V;!eFwe7L;a7Krn;chaGdescri7Iprof30sF;top;la1;ght5;arby,cessa4ighbor5wlyw0xt;k0usiaFv3;ti8;aQeNiLoHuF;dIltiF;facet0p6;deHlGnFot,rbBst;ochro4Xth5;dy;rn,st;ddle ag0nF;dbloZi,or;ag9diocEga,naGrFtropolit4Q;e,ry;ci8;cIgenta,inHj0Fkeshift,mmGnFri4Oscu61ver18;da5Dy;ali4Lo4U;!stream;abEho;aOeLiIoFumberi8;ngFuti1R;stan3RtF;erm,i4H;ghtGteraF;l,ry,te;heart0wei5O;ft JgFss9th3;al,eFi0M;nda4;nguBps0te5;apGind5noF;wi8;ut;ad0itte4uniW;ce co0Hgno6Mll0Cm04nHpso 2UrF;a2releF;va1; ZaYcoWdReQfOgrNhibi4Ri05nMoLsHtFvalu5M;aAeF;nDrdepe2K;a7iGolFuboI;ub6ve1;de,gF;nifica1;rdi5N;a2er;own;eriIiLluenVrF;ar0eq5H;pt,rt;eHiGoFul1O;or;e,reA;fiFpe26termi5E;ni2;mpFnsideCrreA;le2;ccuCdeq5Ene,ppr4J;fFsitu,vitro;ro1;mJpF;arHeGl15oFrop9;li2r11;n2LrfeA;ti3;aGeFi18;d4BnD;tuE;egGiF;c0YteC;al,iF;tiF;ma2;ld;aOelNiLoFuma7;a4meInHrrGsFur5;ti6;if4E;e58o3U; ma3GsF;ick;ghfalut2HspF;an49;li00pf33;i4llow0ndGrdFtM; 05coEworki8;sy,y;aLener44iga3Blob3oKrGuF;il1Nng ho;aFea1Fizzl0;cGtF;ef2Vis;ef2U;ld3Aod;iFuc2D;nf2R;aVeSiQlOoJrF;aGeFil5ug3;q43tf2O;gFnt3S;i6ra1;lk13oHrF; keeps,eFge0Vm9tu41;g0Ei2Ds3R;liF;sh;ag4Mowe4uF;e1or45;e4nF;al,i2;d Gmini7rF;ti6ve1;up;bl0lDmIr Fst pac0ux;oGreacF;hi8;ff;ed,ili0R;aXfVlTmQnOqu3rMthere3veryday,xF;aApIquisi2traHuF;be48lF;ta1;!va2L;edRlF;icF;it;eAstF;whi6; Famor0ough,tiE;rou2sui2;erGiF;ne1;ge1;dFe2Aoq34;er5;ficF;ie1;g9sF;t,ygF;oi8;er;aWeMiHoGrFue;ea4owY;ci6mina1ne,r31ti8ubQ;dact2Jfficult,m,sGverF;ge1se;creGePjoi1paCtF;a1inA;et,te; Nadp0WceMfiLgeneCliJmuEpeIreliAsGvoF;id,ut;pFtitu2ul1L;eCoF;nde1;ca2ghF;tf13;a1ni2;as0;facto;i5ngero0I;ar0Ce09h07i06l05oOrIuF;rmudgeon5stoma4teF;sy;ly;aIeHu1EystalF; cleFli7;ar;epy;fFv17z0;ty;erUgTloSmPnGrpoCunterclVveFy;rt;cLdJgr21jIsHtrF;aFi2;dic0Yry;eq1Yta1;oi1ug3;escenFuN;di8;a1QeFiD;it0;atoDmensuCpF;ass1SulF;so4;ni3ss3;e1niza1;ci1J;ockwiD;rcumspeAvil;eFintzy;e4wy;leGrtaF;in;ba2;diac,ef00;a00ePiLliJoGrFuck nak0;and new,isk,on22;gGldface,naF; fi05fi05;us;nd,tF;he;gGpartisFzarE;an;tiF;me;autifOhiNlLnHsFyoN;iWtselF;li8;eGiFt;gn;aFfi03;th;at0oF;v0w;nd;ul;ckwards,rF;e,rT; priori,b13c0Zd0Tf0Ng0Ihe0Hl09mp6nt06pZrTsQttracti0MuLvIwF;aGkF;wa1B;ke,re;ant garGeraF;ge;de;diIsteEtF;heFoimmu7;nt07;re;to4;hGlFtu2;eep;en;bitIchiv3roHtF;ifiFsy;ci3;ga1;ra4;ry;pFt;aHetizi8rF;oprF;ia2;llFre1;ed,i8;ng;iquFsy;at0e;ed;cohKiJkaHl,oGriFterX;ght;ne,of;li7;ne;ke,ve;olF;ic;ad;ain07gressiIi6rF;eeF;ab6;le;ve;fGraB;id;ectGlF;ue1;ioF;na2; JaIeGvF;erD;pt,qF;ua2;ma1;hoc,infinitum;cuCquiGtu3u2;al;esce1;ra2;erSjeAlPoNrKsGuF;nda1;e1olu2trF;aAuD;se;te;eaGuF;pt;st;aFve;rd;aFe;ze;ct;ra1;nt",Pronoun:"true¦elle,h3i2me,she,th0us,we,you;e0ou;e,m,y;!l,t;e,im",Preposition:"true¦aPbMcLdKexcept,fIinGmid,notwithstandiWoDpXqua,sCt7u4v2w0;/o,hereSith0;! whHin,oW;ersus,i0;a,s a vis;n1p0;!on;like,til;h1ill,oward0;!s;an,ereby,r0;ough0u;!oM;ans,ince,o that,uch G;f1n0ut;!to;!f;! 0to;effect,part;or,r0;om;espite,own,u3;hez,irca;ar1e0oBy;sides,tween;ri7;bo8cross,ft7lo6m4propos,round,s1t0;!op;! 0;a whole,long 0;as;id0ong0;!st;ng;er;ut",SportsTeam:"true¦0:18;1:1E;2:1D;3:14;a1Db15c0Sd0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Am01new UoRpKqueens parkJreal salt lake,sBt6utah jazz,vancouver whitecaps,w4yW;ashington 4h10;natio1Mredski2wizar0W;ampa bay 7e6o4;ronto 4ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasD;buccanee0ra0K;a8eattle 6porting kansas0Wt4; louis 4oke0V;c1Drams;marine0s4;eah13ounH;cramento Rn 4;antonio spu0diego 4francisco gJjose earthquak1;char08paB; ran07;a9h6ittsburgh 5ortland t4;imbe0rail blaze0;pirat1steele0;il4oenix su2;adelphia 4li1;eagl1philNunE;dr1;akland 4klahoma city thunder,rlando magic;athle0Lrai4;de0;england 8orleans 7york 4;g5je3knYme3red bul0Xy4;anke1;ian3;pelica2sain3;patrio3revolut4;ion;anchEeAi4ontreal impact;ami 8lwaukee b7nnesota 4;t5vi4;kings;imberwolv1wi2;rewe0uc0J;dolphi2heat,marli2;mphis grizz4ts;li1;a6eic5os angeles 4;clippe0dodFlaB;esterV; galaxy,ke0;ansas city 4nF;chiefs,roya0D; pace0polis col3;astr05dynamo,rocke3texa2;olden state warrio0reen bay pac4;ke0;allas 8e4i04od6;nver 6troit 4;lio2pisto2ti4;ge0;broncYnugge3;cowbo5maver4;icZ;ys;arEelLhAincinnati 8leveland 6ol4;orado r4umbus crew sc;api7ocki1;brow2cavalie0guar4in4;dia2;bengaVre4;ds;arlotte horAicago 4;b5cubs,fire,wh4;iteB;ea0ulQ;diff4olina panthe0; city;altimore Alackburn rove0oston 6rooklyn 4uffalo bilN;ne3;ts;cel5red4; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 4;brav1falco2h4;awA;ns;es;on villa,r4;os;c6di4;amondbac4;ks;ardi4;na4;ls",Unit:"true¦a07b04cXdWexVfTgRhePinYjoule0BkMlJmDnan08oCp9quart0Bsq ft,t7volts,w6y2ze3°1µ0;g,s;c,f,n;dVear1o0;ttR; 0s 0;old;att,b;erNon0;!ne02;ascals,e1i0;cXnt00;rcent,tJ;hms,unceY;/s,e4i0m²,²,³;/h,cro2l0;e0liK;!²;grLsR;gCtJ;it1u0;menQx;erPreP;b5elvins,ilo1m0notO;/h,ph,²;!byGgrEmCs;ct0rtzL;aJogrC;allonJb0ig3rB;ps;a0emtEl oz,t4;hrenheit,radG;aby9;eci3m1;aratDe1m0oulombD;²,³;lsius,nti0;gr2lit1m0;et0;er8;am7;b1y0;te5;l,ps;c2tt0;os0;econd1;re0;!s","Noun|Gerund":"true¦0:3O;1:3M;2:3N;3:3D;4:32;5:2V;6:3E;7:3K;8:36;9:3J;A:3B;a3Pb37c2Jd27e23f1Vg1Sh1Mi1Ij1Gk1Dl18m13n11o0Wp0Pques0Sr0EsTtNunderMvKwFyDzB;eroi0oB;ni0o3P;aw2eB;ar2l3;aEed4hispe5i5oCrB;ap8est3i1;n0ErB;ki0r31;i1r2s9tc9;isualizi0oB;lunt1Vti0;stan4ta6;aFeDhin6iCraBy8;c6di0i2vel1M;mi0p8;aBs1;c9si0;l6n2s1;aUcReQhOiMkatKl2Wmo6nowJpeItFuCwB;ea5im37;b35f0FrB;fi0vB;e2Mi2J;aAoryt1KrCuB;d2KfS;etc9ugg3;l3n4;bCi0;ebBi0;oar4;gnBnAt1;a3i0;ip8oB;p8rte2u1;a1r27t1;hCo5reBulp1;a2Qe2;edu3oo3;i3yi0;aKeEi4oCuB;li0n2;oBwi0;fi0;aFcEhear7laxi0nDpor1sB;pon4tructB;r2Iu5;de5;or4yc3;di0so2;p8ti0;aFeacek20laEoCrBublis9;a1Teten4in1oces7;iso2siB;tio2;n2yi0;ckaAin1rB;ki0t1O;fEpeDrganiCvB;erco24ula1;si0zi0;ni0ra1;fe5;avi0QeBur7;gotia1twor6;aDeCi2oB;de3nito5;a2dita1e1ssaA;int0XnBrke1;ifUufactu5;aEeaDiBodAyi0;cen7f1mi1stB;e2i0;r2si0;n4ug9;iCnB;ea4it1;c6l3;ogAuB;dAgg3stif12;ci0llust0VmDnBro2;nova1sp0NterBven1;ac1vie02;agi2plo4;aDea1iCoBun1;l4w3;ki0ri0;nd3rB;roWvB;es1;aCene0Lli4rBui4;ee1ie0N;rde2the5;aHeGiDlCorBros1un4;e0Pmat1;ir1oo4;gh1lCnBs9;anZdi0;i0li0;e3nX;r0Zscina1;a1du01nCxB;erci7plo5;chan1di0ginB;ee5;aLeHiGoub1rCum8wB;el3;aDeCiB;bb3n6vi0;a0Qs7;wi0;rTscoDvi0;ba1coZlBvelo8;eCiB;ve5;ga1;nGti0;aVelebUhSlPoDrBur3yc3;aBos7yi0;f1w3;aLdi0lJmFnBo6pi0ve5;dDsCvinB;ci0;trBul1;uc1;muniDpB;lBo7;ai2;ca1;lBo5;ec1;c9ti0;ap8eaCimToBubT;ni0t9;ni0ri0;aBee5;n1t1;ra1;m8rCs1te5;ri0;vi0;aPeNitMlLoGrDuB;dge1il4llBr8;yi0;an4eat9oadB;cas1;di0;a1mEokB;i0kB;ee8;pi0;bi0;es7oa1;c9i0;gin2lonAt1;gi0;bysit1c6ki0tt3;li0;ki0;bando2cGdverti7gi0pproac9rgDssuCtB;trac1;mi0;ui0;hi0;si0;coun1ti0;ti0;ni0;ng",PhrasalVerb:"true¦0:92;1:96;2:8H;3:8V;4:8A;5:83;6:85;7:98;8:90;9:8G;A:8X;B:8R;C:8U;D:8S;E:70;F:97;G:8Y;H:81;I:7H;J:79;a9Fb7Uc6Rd6Le6Jf5Ig50h4Biron0j47k40l3Em31n2Yo2Wp2Cquiet Hr1Xs0KtZuXvacuu6QwNyammerBzK;ero Dip LonK;e0k0;by,ov9up;aQeMhLiKor0Mrit19;mp0n3Fpe0r5s5;ackAeel Di0S;aLiKn33;gh 3Wrd0;n Dr K;do1in,oJ;it 79k5lk Lrm 69sh Kt83v60;aw3do1o7up;aw3in,oC;rgeBsK;e 2herE;a00eYhViRoQrMuKypP;ckErn K;do1in,oJup;aLiKot0y 30;ckl7Zp F;ck HdK;e 5Y;n7Wp 3Es5K;ck MdLe Kghten 6me0p o0Rre0;aw3ba4do1in,up;e Iy 2;by,oG;ink Lrow K;aw3ba4in,up;ba4ov9up;aKe 77ll62;m 2r 5M;ckBke Llk K;ov9shit,u47;aKba4do1in,leave,o4Dup;ba4ft9pa69w3;a0Vc0Te0Mh0Ii0Fl09m08n07o06p01quar5GtQuOwK;earMiK;ngLtch K;aw3ba4o8K; by;cKi6Bm 2ss0;k 64;aReQiPoNrKud35;aigh2Det75iK;ke 7Sng K;al6Yup;p Krm2F;by,in,oG;c3Ln3Lr 2tc4O;p F;c3Jmp0nd LrKveAy 2O;e Ht 2L;ba4do1up;ar3GeNiMlLrKurB;ead0ingBuc5;a49it 6H;c5ll o3Cn 2;ak Fe1Xll0;a3Bber 2rt0und like;ap 5Vow Duggl5;ash 6Noke0;eep NiKow 6;cLp K;o6Dup;e 68;in,oK;ff,v9;de19gn 4NnKt 6Gz5;gKkE; al6Ale0;aMoKu5W;ot Kut0w 7M;aw3ba4f48oC;c2WdeEk6EveA;e Pll1Nnd Orv5tK; Ktl5J;do1foLin,o7upK;!on;ot,r5Z;aw3ba4do1in,o33up;oCto;al66out0rK;ap65ew 6J;ilAv5;aXeUiSoOuK;b 5Yle0n Kstl5;aLba4do1inKo2Ith4Nu5P;!to;c2Xr8w3;ll Mot LpeAuK;g3Ind17;a2Wf3Po7;ar8in,o7up;ng 68p oKs5;ff,p18;aKelAinEnt0;c6Hd K;o4Dup;c27t0;aZeYiWlToQrOsyc35uK;ll Mn5Kt K;aKba4do1in,oJto47up;pa4Dw3;a3Jdo1in,o21to45up;attleBess KiNop 2;ah2Fon;iLp Kr4Zu1Gwer 6N;do1in,o6Nup;nt0;aLuK;gEmp 6;ce u20y 6D;ck Kg0le 4An 6p5B;oJup;el 5NncilE;c53ir 39n0ss MtLy K;ba4oG; Hc2R;aw3ba4in,oJ;pKw4Y;e4Xt D;aLerd0oK;dAt53;il Hrrow H;aTeQiPoLuK;ddl5ll I;c1FnkeyMp 6uthAve K;aKdo1in,o4Lup;l4Nw3; wi4K;ss0x 2;asur5e3SlLss K;a21up;t 6;ke Ln 6rKs2Ax0;k 6ryA;do,fun,oCsure,up;a02eViQoLuK;ck0st I;aNc4Fg MoKse0;k Kse4D;aft9ba4do1forw37in56o0Zu46;in,oJ;d 6;e NghtMnLsKve 00;ten F;e 2k 2; 2e46;ar8do1in;aMt LvelK; oC;do1go,in,o7up;nEve K;in,oK;pKut;en;c5p 2sh LtchBughAy K;do1o59;in4Po7;eMick Lnock K;do1oCup;oCup;eLy K;in,up;l Ip K;aw3ba4do1f04in,oJto,up;aMoLuK;ic5mpE;ke3St H;c43zz 2;a01eWiToPuK;nLrrKsh 6;y 2;keLt K;ar8do1;r H;lKneErse3K;d Ke 2;ba4dKfast,o0Cup;ear,o1;de Lt K;ba4on,up;aw3o7;aKlp0;d Ml Ir Kt 2;fKof;rom;f11in,o03uW;cPm 2nLsh0ve Kz2P;at,it,to;d Lg KkerP;do1in,o2Tup;do1in,oK;ut,v9;k 2;aZeTive Rloss IoMrLunK; f0S;ab hold,in43ow 2U; Kof 2I;aMb1Mit,oLr8th1IuK;nd9;ff,n,v9;bo7ft9hQw3;aw3bKdo1in,oJrise,up,w3;a4ir2H;ar 6ek0t K;aLb1Fdo1in,oKr8up;ff,n,ut,v9;cLhKl2Fr8t,w3;ead;ross;d aKng 2;bo7;a0Ee07iYlUoQrMuK;ck Ke2N;ar8up;eLighten KownBy 2;aw3oG;eKshe27; 2z5;g 2lMol Krk I;aKwi20;bo7r8;d 6low 2;aLeKip0;sh0;g 6ke0mKrKtten H;e F;gRlPnNrLsKzzle0;h F;e Km 2;aw3ba4up;d0isK;h 2;e Kl 1T;aw3fPin,o7;ht ba4ure0;ePnLsK;s 2;cMd K;fKoG;or;e D;d04l 2;cNll Krm0t1G;aLbKdo1in,o09sho0Eth08victim;a4ehi2O;pa0C;e K;do1oGup;at Kdge0nd 12y5;in,o7up;aOi1HoNrK;aLess 6op KuN;aw3b03in,oC;gBwB; Ile0ubl1B;m 2;a0Ah05l02oOrLut K;aw3ba4do1oCup;ackBeep LoKy0;ss Dwd0;by,do1in,o0Uup;me NoLuntK; o2A;k 6l K;do1oG;aRbQforOin,oNtKu0O;hLoKrue;geth9;rough;ff,ut,v9;th,wK;ard;a4y;paKr8w3;rt;eaLose K;in,oCup;n 6r F;aNeLiK;ll0pE;ck Der Kw F;on,up;t 2;lRncel0rOsMtch LveE; in;o1Nup;h Dt K;doubt,oG;ry LvK;e 08;aw3oJ;l Km H;aLba4do1oJup;ff,n,ut;r8w3;a0Ve0MiteAl0Fo04rQuK;bblNckl05il0Dlk 6ndl05rLsKtMy FzzA;t 00;n 0HsK;t D;e I;ov9;anWeaUiLush K;oGup;ghQng K;aNba4do1forMin,oLuK;nd9p;n,ut;th;bo7lKr8w3;ong;teK;n 2;k K;do1in,o7up;ch0;arTg 6iRn5oPrNssMttlLunce Kx D;aw3ba4;e 6; ar8;e H;do1;k Dt 2;e 2;l 6;do1up;d 2;aPeed0oKurt0;cMw K;aw3ba4do1o7up;ck;k K;in,oC;ck0nk0stA; oQaNef 2lt0nd K;do1ov9up;er;up;r Lt K;do1in,oCup;do1o7;ff,nK;to;ck Pil0nMrgLsK;h D;ainBe D;g DkB; on;in,o7;aw3do1in,oCup;ff,ut;ay;ct FdQir0sk MuctionA; oG;ff;ar8o7;ouK;nd; o7;d K;do1oKup;ff,n;wn;o7up;ut",ProperNoun:"true¦aIbDc8dalhousHe7f5gosford,h4iron maiden,kirby,landsdowne,m2nis,r1s0wembF;herwood,paldiB;iel,othwe1;cgi0ercedes,issy;ll;intBudsB;airview,lorence,ra0;mpt9nco;lmo,uro;a1h0;arlt6es5risti;rl0talina;et4i0;ng;arb3e0;et1nt0rke0;ley;on;ie;bid,jax","Person|Place":"true¦a8d6h4jordan,k3orlando,s1vi0;ctor9rgin9;a0ydney;lvador,mara,ntia4;ent,obe;amil0ous0;ton;arw2ie0;go;lexandr1ust0;in;ia",LastName:"true¦0:BR;1:BF;2:B5;3:BH;4:AX;5:9Y;6:B6;7:BK;8:B0;9:AV;A:AL;B:8Q;C:8G;D:7K;E:BM;F:AH;aBDb9Zc8Wd88e81f7Kg6Wh64i60j5Lk4Vl4Dm39n2Wo2Op25quispe,r1Ls0Pt0Ev03wTxSyKzG;aIhGimmerm6A;aGou,u;ng,o;khar5ytsE;aKeun9BiHoGun;koya32shiBU;!lG;diGmaz;rim,z;maGng;da,g52mo83sGzaC;aChiBV;iao,u;aLeJiHoGright,u;jcA5lff,ng;lGmm0nkl0sniewsC;kiB1liams33s3;bGiss,lt0;b,er,st0;a6Vgn0lHtG;anabe,s3;k0sh,tG;e2Non;aLeKiHoGukD;gt,lk5roby5;dHllalGnogr3Kr1Css0val3S;ba,ob1W;al,ov4;lasHsel8W;lJn dIrgBEsHzG;qu7;ilyEqu7siljE;en b6Aijk,yk;enzueAIverde;aPeix1VhKi2j8ka43oJrIsui,uG;om5UrG;c2n0un1;an,emblA7ynisC;dorAMlst3Km4rrAth;atch0i8UoG;mHrG;are84laci79;ps3sG;en,on;hirDkah9Mnaka,te,varA;a06ch01eYhUiRmOoMtIuHvGzabo;en9Jobod3N;ar7bot4lliv2zuC;aIeHoG;i7Bj4AyanAB;ele,in2FpheBvens25;l8rm0;kol5lovy5re7Tsa,to,uG;ng,sa;iGy72;rn5tG;!h;l71mHnGrbu;at9cla9Egh;moBo7M;aIeGimizu;hu,vchG;en8Luk;la,r1G;gu9infe5YmGoh,pulveA7rra5P;jGyG;on5;evi6iltz,miHneid0roed0uGwarz;be3Elz;dHtG;!t,z;!t;ar4Th8ito,ka4OlJnGr4saCto,unde19v4;ch7dHtGz;a5Le,os;b53e16;as,ihDm4Po0Y;aVeSiPoJuHyG;a6oo,u;bio,iz,sG;so,u;bKc8Fdrigue67ge10j9YmJosevelt,sItHux,wG;e,li6;a9Ch;enb4Usi;a54e4L;erts15i93;bei4JcHes,vGzzo;as,e9;ci,hards12;ag2es,iHut0yG;es,nol5N;s,t0;dImHnGsmu97v6C;tan1;ir7os;ic,u;aUeOhMiJoHrGut8;asad,if6Zochazk27;lishc2GpGrti72u10we76;e3Aov51;cHe45nG;as,to;as70hl0;aGillips;k,m,n6I;a3Hde3Wete0Bna,rJtG;ersHrovGters54;!a,ic;!en,on;eGic,kiBss3;i9ra,tz,z;h86k,padopoulIrk0tHvG;ic,l4N;el,te39;os;bMconn2Ag2TlJnei6PrHsbor6XweBzG;dem7Rturk;ella4DtGwe6N;ega,iz;iGof7Hs8I;vGyn1R;ei9;aSri1;aPeNiJoGune50ym2;rHvGwak;ak4Qik5otn66;odahl,r4S;cholsZeHkolGls4Jx3;ic,ov84;ls1miG;!n1;ils3mG;co4Xec;gy,kaGray2sh,var38;jiGmu9shiG;ma;a07c04eZiWoMuHyeG;rs;lJnIrGssoli6S;atGp03r7C;i,ov4;oz,te58;d0l0;h2lOnNo0RrHsGza1A;er,s;aKeJiIoz5risHtG;e56on;!on;!n7K;au,i9no,t5J;!lA;r1Btgome59;i3El0;cracFhhail5kkeHlG;l0os64;ls1;hmeJiIj30lHn3Krci0ssiGyer2N;!er;n0Po;er,j0;dDti;cartHlG;aughl8e2;hy;dQe7Egnu68i0jer3TkPmNnMrItHyG;er,r;ei,ic,su21thews;iHkDquAroqu8tinG;ez,s;a5Xc,nG;!o;ci5Vn;a5UmG;ad5;ar5e6Kin1;rig77s1;aVeOiLoJuHyG;!nch;k4nGo;d,gu;mbarGpe3Fvr4we;di;!nGu,yana2B;coln,dG;b21holm,strom;bedEfeKhIitn0kaHn8rGw35;oy;!j;m11tG;in1on1;bvGvG;re;iGmmy,ng,rs2Qu,voie,ws3;ne,t1F;aZeYh2iWlUnez50oNrJuHvar2woG;k,n;cerGmar68znets5;a,o34;aHem0isGyeziu;h23t3O;m0sni4Fus3KvG;ch4O;bay57ch,rh0Usk16vaIwalGzl5;czGsC;yk;cIlG;!cGen4K;huk;!ev4ic,s;e8uiveG;rt;eff0kGl4mu9nnun1;ucF;ll0nnedy;hn,llKminsCne,pIrHstra3Qto,ur,yGzl5;a,s0;j0Rls22;l2oG;or;oe;aPenOha6im14oHuG;ng,r4;e32hInHrge32u6vG;anD;es,ss3;anHnsG;en,on,t3;nesGs1R;en,s1;kiBnings,s1;cJkob4EnGrv0E;kDsG;en,sG;en0Ion;ks3obs2A;brahimDglesi5Nke5Fl0Qno07oneIshikHto,vanoG;u,v54;awa;scu;aVeOiNjaltal8oIrist50uG;!aGb0ghAynh;m2ng;a6dz4fIjgaa3Hk,lHpUrGwe,x3X;ak1Gvat;mAt;er,fm3WmG;ann;ggiBtchcock;iJmingw4BnHrGss;nand7re9;deGriks1;rs3;kkiHnG;on1;la,n1;dz4g1lvoQmOns0ZqNrMsJuIwHyG;asFes;kiB;g1ng;anHhiG;mo14;i,ov0J;di6p0r10t;ue;alaG;in1;rs1;aVeorgUheorghe,iSjonRoLrJuGw3;errGnnar3Co,staf3Ctierr7zm2;a,eG;ro;ayli6ee2Lg4iffithGub0;!s;lIme0UnHodGrbachE;e,m2;calvAzale0S;dGubE;bGs0E;erg;aj,i;bs3l,mGordaO;en7;iev3U;gnMlJmaIndFo,rGsFuthi0;cGdn0za;ia;ge;eaHlG;agh0i,o;no;e,on;aVerQiLjeldsted,lKoIrHuG;chs,entAji41ll0;eem2iedm2;ntaGrt8urni0wl0;na;emi6orA;lipIsHtzgeraG;ld;ch0h0;ovG;!ic;hatDnanIrG;arGei9;a,i;deY;ov4;b0rre1D;dKinsJriksIsGvaB;cob3GpGtra3D;inoza,osiQ;en,s3;te8;er,is3warG;ds;aXePiNjurhuMoKrisco15uHvorakG;!oT;arte,boHmitru,nn,rGt3C;and,ic;is;g2he0Omingu7nErd1ItG;to;us;aGcki2Hmitr2Ossanayake,x3;s,z; JbnaIlHmirGrvisFvi,w2;!ov4;gado,ic;th;bo0groot,jo6lHsilGvriA;va;a cruz,e3uG;ca;hl,mcevsCnIt2WviG;dGes,s;ov,s3;ielsGku22;!en;ki;a0Be06hRiobQlarkPoIrGunningh1H;awfo0RivGuz;elli;h1lKntJoIrGs2Nx;byn,reG;a,ia;ke,p0;i,rer2K;em2liB;ns;!e;anu;aOeMiu,oIristGu6we;eGiaG;ns1;i,ng,p9uHwGy;!dH;dGng;huJ;!n,onGu6;!g;kJnIpm2ttHudhGv7;ry;erjee,o14;!d,g;ma,raboG;rty;bJl0Cng4rG;eghetHnG;a,y;ti;an,ota1C;cerAlder3mpbeLrIstGvadi0B;iGro;llo;doHl0Er,t0uGvalho;so;so,zo;ll;a0Fe01hYiXlUoNrKuIyG;rLtyG;qi;chan2rG;ke,ns;ank5iem,oGyant;oks,wG;ne;gdan5nIruya,su,uchaHyKziG;c,n5;rd;darGik;enG;ko;ov;aGond15;nco,zG;ev4;ancFshw16;a08oGuiy2;umGwmG;ik;ckRethov1gu,ktPnNrG;gJisInG;ascoGds1;ni;ha;er,mG;anG;!n;gtGit7nP;ss3;asF;hi;er,hG;am;b4ch,ez,hRiley,kk0ldw8nMrIshHtAu0;es;ir;bInHtlGua;ett;es,i0;ieYosa;dGik;a9yoG;padhyG;ay;ra;k,ng;ic;bb0Acos09d07g04kht05lZnPrLsl2tJyG;aHd8;in;la;chis3kiG;ns3;aImstro6sl2;an;ng;ujo,ya;dJgelHsaG;ri;ovG;!a;ersJov,reG;aGjEws;ss1;en;en,on,s3;on;eksejEiyEmeiIvG;ar7es;ez;da;ev;arwHuilG;ar;al;ams,l0;er;ta;as",Ordinal:"true¦eBf7nin5s3t0zeroE;enDhir1we0;lfCn7;d,t3;e0ixt8;cond,vent7;et0th;e6ie7;i2o0;r0urt3;tie4;ft1rst;ight0lev1;e0h,ie1;en0;th",Cardinal:"true¦bEeBf5mEnine7one,s4t0zero;en,h2rDw0;e0o;lve,n5;irt6ousands,ree;even2ix2;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illions",Multiple:"true¦b3hundred,m3qu2se1t0;housand,r2;pt1xt1;adr0int0;illion",City:"true¦0:74;1:61;2:6G;3:6J;4:5S;a68b53c4Id48e44f3Wg3Hh39i31j2Wk2Fl23m1Mn1Co19p0Wq0Ur0Os05tRuQvLwDxiBy9z5;a7h5i4Muri4O;a5e5ongsh0;ng3H;greb,nzib5G;ang2e5okoha3Sunfu;katerin3Hrev0;a5n0Q;m5Hn;arsBeAi6roclBu5;h0xi,zh5P;c7n5;d5nipeg,terth4;hoek,s1L;hi5Zkl3A;l63xford;aw;a8e6i5ladivost5Molgogr6L;en3lni6S;ni22r5;o3saill4N;lenc4Wncouv3Sr3ughn;lan bat1Crumqi,trecht;aFbilisi,eEheDiBo9r7u5;l21n63r5;in,ku;i5ondh62;es51poli;kyo,m2Zron1Pulo5;n,uS;an5jua3l2Tmisoa6Bra3;j4Tshui; hag62ssaloni2H;gucigal26hr0l av1U;briz,i6llinn,mpe56ng5rtu,shk2R;i3Esh0;an,chu1n0p2Eyu0;aEeDh8kopje,owe1Gt7u5;ra5zh4X;ba0Ht;aten is55ockholm,rasbou67uttga2V;an8e6i5;jiazhua1llo1m5Xy0;f50n5;ya1zh4H;gh3Kt4Q;att45o1Vv44;cramen16int ClBn5o paulo,ppo3Rrajevo; 7aa,t5;a 5o domin3E;a3fe,m1M;antonio,die3Cfrancisco,j5ped3Nsalvad0J;o5u0;se;em,t lake ci5Fz25;lou58peters24;a9e8i6o5;me,t59;ga,o5yadh;! de janei3F;cife,ims,nn3Jykjavik;b4Sip4lei2Inc2Pwalpindi;ingdao,u5;ez2i0Q;aFeEhDiCo9r7u6yong5;ya1;eb59ya1;a5etor3M;g52to;rt5zn0; 5la4Co;au prin0Melizabe24sa03;ls3Prae5Atts26;iladelph3Gnom pe1Aoenix;ki1tah tik3E;dua,lerYnaji,r4Ot5;na,r32;ak44des0Km1Mr6s5ttawa;a3Vlo;an,d06;a7ew5ing2Fovosibir1Jyc; 5cast36;del24orlea44taip14;g8iro4Wn5pl2Wshv33v0;ch6ji1t5;es,o1;a1o1;a6o5p4;ya;no,sa0W;aEeCi9o6u5;mb2Ani26sc3Y;gadishu,nt6s5;c13ul;evideo,pelli1Rre2Z;ami,l6n14s5;kolc,sissauga;an,waukee;cca,d5lbour2Mmph41ndo1Cssi3;an,ell2Xi3;cau,drAkass2Sl9n8r5shh4A;aca6ib5rakesh,se2L;or;i1Sy;a4EchFdal0Zi47;mo;id;aDeAi8o6u5vSy2;anMckn0Odhia3;n5s angel26;d2g bea1N;brev2Be3Lma5nz,sb2verpo28;!ss27; ma39i5;c5pzig;est16; p6g5ho2Wn0Cusan24;os;az,la33;aHharFiClaipeBo9rak0Du7y5;iv,o5;to;ala lump4n5;mi1sh0;hi0Hlka2Xpavog4si5wlo2;ce;da;ev,n5rkuk;gst2sha5;sa;k5toum;iv;bHdu3llakuric0Qmpa3Fn6ohsiu1ra5un1Iwaguc0Q;c0Pj;d5o,p4;ah1Ty;a7e6i5ohannesV;l1Vn0;dd36rusalem;ip4k5;ar2H;bad0mph1OnArkutUs7taXz5;mir,tapala5;pa;fah0l6tanb5;ul;am2Zi2H;che2d5;ianap2Mo20;aAe7o5yder2W; chi mi5ms,nolulu;nh;f6lsin5rakli2;ki;ei;ifa,lifax,mCn5rb1Dva3;g8nov01oi;aFdanEenDhCiPlasgBo9raz,u5;a5jr23;dal6ng5yaquil;zh1J;aja2Oupe;ld coa1Bthen5;bu2S;ow;ent;e0Uoa;sk;lw7n5za;dhi5gt1E;nag0U;ay;aisal29es,o8r6ukuya5;ma;ankfu5esno;rt;rt5sh0; wor6ale5;za;th;d5indhov0Pl paso;in5mont2;bur5;gh;aBe8ha0Xisp4o7resd0Lu5;b5esseldorf,nkirk,rb0shanbe;ai,l0I;ha,nggu0rtmu13;hradSl6nv5troit;er;hi;donghIe6k09l5masc1Zr es sala1KugavpiY;i0lU;gu,je2;aJebu,hAleve0Vo5raio02uriti1Q;lo7n6penhag0Ar5;do1Ok;akKst0V;gUm5;bo;aBen8i6ongqi1ristchur5;ch;ang m7ca5ttago1;go;g6n5;ai;du,zho1;ng5ttogr14;ch8sha,zh07;gliari,i9lga8mayenJn6pe town,r5tanO;acCdiff;ber1Ac5;un;ry;ro;aWeNhKirmingh0WoJr9u5;chareTdapeTenos air7r5s0tu0;g5sa;as;es;a9is6usse5;ls;ba6t5;ol;ne;sil8tisla7zzav5;il5;le;va;ia;goZst2;op6ubaneshw5;ar;al;iCl9ng8r5;g6l5n;in;en;aluru,hazi;fa6grade,o horizon5;te;st;ji1rut;ghd0BkFn9ot8r7s6yan n4;ur;el,r07;celo3i,ranquil09;ou;du1g6ja lu5;ka;alo6k5;ok;re;ng;ers5u;field;a05b02cc01ddis aba00gartaZhmedXizawl,lSmPnHqa00rEsBt7uck5;la5;nd;he7l5;an5;ta;ns;h5unci2;dod,gab5;at;li5;ngt2;on;a8c5kaOtwerp;hora6o3;na;ge;h7p5;ol5;is;eim;aravati,m0s5;terd5;am; 7buquerq6eppo,giers,ma5;ty;ue;basrah al qadim5mawsil al jadid5;ah;ab5;ad;la;ba;ra;idj0u dha5;bi;an;lbo6rh5;us;rg",Region:"true¦0:2O;1:2L;2:2U;3:2F;a2Sb2Fc21d1Wes1Vf1Tg1Oh1Ki1Fj1Bk16l13m0Sn09o07pYqVrSsJtEuBverAw6y4zacatec2W;akut0o0Fu4;cat1k09;a5est 4isconsin,yomi1O;bengal,virgin0;rwick3shington4;! dc;acruz,mont;dmurt0t4;ah,tar4; 2Pa12;a6e5laxca1Vripu21u4;scaEva;langa2nnessee,x2J;bas10m4smQtar29;aulip2Hil nadu;a9elang07i7o5taf16u4ylh1J;ff02rr09s1E;me1Gno1Uuth 4;cZdY;ber0c4kkim,naloa;hu1ily;n5rawak,skatchew1xo4;ny; luis potosi,ta catari2;a4hodeA;j4ngp0C;asth1shahi;ingh29u4;e4intana roo;bec,en6retaro;aAe6rince edward4unjab; i4;sl0G;i,n5r4;ak,nambu0F;a0Rnsylv4;an0;ha0Pra4;!na;axa0Zdisha,h4klaho21ntar4reg7ss0Dx0I;io;aLeEo6u4;evo le4nav0X;on;r4tt18va scot0;f9mandy,th4; 4ampton3;c6d5yo4;rk3;ako1O;aroli2;olk;bras1Nva0Dw4; 6foundland4;! and labrad4;or;brunswick,hamp3jers5mexiTyork4;! state;ey;galPyarit;aAeghala0Mi6o4;nta2r4;dov0elos;ch6dlanDn5ss4zor11;issippi,ouri;as geraPneso18;ig1oac1;dhy12harasht0Gine,lac07ni5r4ssachusetts;anhao,i el,ylG;p4toba;ur;anca3e4incoln3ouisI;e4iR;ds;a6e5h4omi;aka06ul2;dah,lant1ntucky,ra01;bardino,lmyk0ns0Qr4;achay,el0nata0X;alis6har4iangxi;kh4;and;co;daho,llino7n4owa;d5gush4;et0;ia2;is;a6ert5i4un1;dalFm0D;ford3;mp3rya2waii;ansu,eorg0lou7oa,u4;an4izhou,jarat;ajuato,gdo4;ng;cester3;lori4uji1;da;sex;ageUe7o5uran4;go;rs4;et;lawaMrby3;aFeaEh9o4rim08umbr0;ahui7l6nnectic5rsi4ventry;ca;ut;i03orado;la;e5hattisgarh,i4uvash0;apRhuahua;chn5rke4;ss0;ya;ra;lGm4;bridge3peche;a9ihar,r8u4;ck4ryat0;ingham3;shi4;re;emen,itish columb0;h0ja cal8lk7s4v7;hkorto4que;st1;an;ar0;iforn0;ia;dygHguascalientes,lBndhr9r5ss4;am;izo2kans5un4;achal 7;as;na;a 4;pradesh;a6ber5t4;ai;ta;ba5s4;ka;ma;ea",Place:"true¦0:4T;1:4V;2:44;3:4B;4:3I;a4Eb3Gc2Td2Ge26f25g1Vh1Ji1Fk1Cl14m0Vn0No0Jp08r04sTtNuLvJw7y5;a5o0Syz;kut1Bngtze;aDeChitBi9o5upatki,ycom2P;ki26o5;d5l1B;b3Ps5;i4to3Y;c0SllowbroCn5;c2Qgh2;by,chur1P;ed0ntw3Gs22;ke6r3St5;erf1f1; is0Gf3V;auxha3Mirgin is0Jost5;ok;laanbaatar,pto5xb3E;n,wn;a9eotihuac43h7ive49o6ru2Nsarskoe selo,u5;l2Dzigo47;nto,rquay,tt2J;am3e 5orn3E;bronx,hamptons;hiti,j mah0Iu1N;aEcotts bluff,eCfo,herbroQoApring9t7u5yd2F;dbu1Wn5;der03set3B;aff1ock2Nr5;atf1oud;hi37w24;ho,uth5; 1Iam1Zwo3E;a5i2O;f2Tt0;int lawrence riv3Pkhal2D;ayleigh,ed7i5oc1Z;chmo1Eo gran4ver5;be1Dfr09si4; s39cliffe,hi2Y;aCe9h8i5ompeii,utn2;c6ne5tcai2T; 2Pc0G;keri13t0;l,x;k,lh2mbr6n5r2J;n1Hzance;oke;cif38pahanaumokuak30r5;k5then0;si4w1K;ak7r6x5;f1l2X;ange county,d,f1inoco;mTw1G;e8i1Uo5;r5tt2N;th5wi0E; 0Sam19;uschwanste1Pw5; eng6a5h2market,po36;rk;la0P;a8co,e6i5uc;dt1Yll0Z;adow5ko0H;lands;chu picchu,gad2Ridsto1Ql8n7ple6r5;kh2; g1Cw11;hatt2Osf2B;ibu,t0ve1Z;a8e7gw,hr,in5owlOynd02;coln memori5dl2C;al;asi4w3;kefr7mbe1On5s,x;ca2Ig5si05;f1l27t0;ont;azan kreml14e6itchen2Gosrae,rasnoyar5ul;sk;ns0Hs1U;ax,cn,lf1n6ps5st;wiN;d5glew0Lverness;ian27ochina;aDeBi6kg,nd,ov5unti2H;d,enweep;gh6llc5;reL;bu03l5;and5;!s;r5yw0C;ef1tf1;libu24mp6r5stings;f1lem,row;stead,t0;aDodavari,r5uelph;avenAe5imsS;at 8en5; 6f1Fwi5;ch;acr3vall1H;brita0Flak3;hur5;st;ng3y villa0W;airhavHco,ra;aAgli9nf17ppi8u7ver6x5;et1Lf1;glad3t0;rope,st0;ng;nt0;rls1Ls5;t 5;e5si4;nd;aCe9fw,ig8o7ryd6u5xb;mfri3nstab00rh2tt0;en;nca18rcKv19wnt0B;by;n6r5vonpo1D;ry;!h2;nu8r5;l6t5;f1moor;ingt0;be;aLdg,eIgk,hClBo5royd0;l6m5rnwa0B;pt0;c7lingw6osse5;um;ood;he0S;earwat0St;a8el6i5uuk;chen itza,mney ro07natSricahua;m0Zt5;enh2;mor5rlottetPth2;ro;dar 5ntervilA;breaks,faZg5;rove;ld9m8r5versh2;lis6rizo pla5;in;le;bLpbellf1;weQ;aZcn,eNingl01kk,lackLolt0r5uckV;aGiAo5;ckt0ok5wns cany0;lyn,s5;i4to5;ne;de;dge6gh5;am,t0;n6t5;own;or5;th;ceb6m5;lNpt0;rid5;ge;bu5pool,wa8;rn;aconsfEdf1lBr9verly7x5;hi5;ll; hi5;lls;wi5;ck; air,l5;ingh2;am;ie5;ld;ltimore,rnsl6tters5;ea;ey;bLct0driadic,frica,ginJlGmFn9rc8s7tl6yleOzor3;es;!ant8;hcroft,ia; de triomphe,t6;adyr,ca8dov9tarct5;ic5; oce5;an;st5;er;ericas,s;be6dersh5hambra,list0;ot;rt0;cou5;rt;bot7i5;ngd0;on;sf1;ord",Country:"true¦0:38;1:2L;2:3B;a2Xb2Ec22d1Ye1Sf1Mg1Ch1Ai14j12k0Zl0Um0Gn05om2pZqat1KrXsKtCu7v5wal4yemTz3;a25imbabwe;es,lis and futu2Y;a3enezue32ietnam;nuatu,tican city;gTk6nited 4ruXs3zbeE; 2Ca,sr;arab emirat0Kkingdom,states3;! of am2Y;!raiV;a8haCimor les0Co7rinidad 5u3;nis0rk3valu;ey,me2Zs and caic1V;and t3t3;oba1L;go,kel10nga;iw2ji3nz2T;ki2V;aDcotl1eCi9lov8o6pa2Dri lanka,u5w3yr0;az3edAitzerl1;il1;d2riname;lomon1Xmal0uth 3;afr2KkMsud2;ak0en0;erra leoFn3;gapo1Yt maart3;en;negLrb0ychellZ;int 3moa,n marino,udi arab0;hele26luc0mart21;epublic of ir0Eom2Euss0w3;an27;a4eIhilippinUitcairn1Mo3uerto riN;l1rtugF;ki2Dl4nama,pua new0Vra3;gu7;au,esti3;ne;aBe9i7or3;folk1Ith4w3;ay; k3ern mariana1D;or0O;caragua,ger3ue;!ia;p3ther1Aw zeal1;al;mib0u3;ru;a7exi6icro0Bo3yanm06;ldova,n3roc5zambA;a4gol0t3;enegro,serrat;co;cAdagasc01l7r5urit4yot3;te;an0i16;shall0Xtin3;ique;a4div3i,ta;es;wi,ys0;ao,ed02;a6e5i3uxembourg;b3echtenste12thu1G;er0ya;ban0Isotho;os,tv0;azakh1Fe4iriba04o3uwait,yrgyz1F;rXsovo;eling0Knya;a3erG;ma16p2;c7nd6r4s3taly,vory coast;le of m2rael;a3el1;n,q;ia,oJ;el1;aiTon3ungary;dur0Ng kong;aBermany,ha0QibraltAre8u3;a6ern5inea3ya0P;! biss3;au;sey;deloupe,m,tema0Q;e3na0N;ce,nl1;ar;bUmb0;a7i6r3;ance,ench 3;guia0Epoly3;nes0;ji,nl1;lklandUroeU;ast tim7cu6gypt,l salv6ngl1quatorial4ritr5st3thiop0;on0; guin3;ea;ad3;or;enmark,jibou5ominica4r con3;go;!n C;ti;aBentral african Ah8o5roat0u4yprRzech3; 9ia;ba,racao;c4lo3morQngo brazzaville,okGsta r04te de ivoiL;mb0;osE;i3ristmasG;le,na;republic;m3naUpe verde,ymanA;bod0ero3;on;aGeDhut2o9r5u3;lgar0r3;kina faso,ma,undi;azil,itish 3unei;virgin3; is3;lands;liv0nai5snia and herzegoviHtswaHuvet3; isl1;and;re;l3n8rmuG;ar3gium,ize;us;h4ngladesh,rbad3;os;am4ra3;in;as;fghaGlDmBn6r4ustr3zerbaij2;al0ia;genti3men0uba;na;dorra,g5t3;arct7igua and barbu3;da;o3uil3;la;er3;ica;b3ger0;an0;ia;ni3;st2;an",FirstName:"true¦aTblair,cQdOfrancoZgabMhinaLilya,jHkClBm6ni4quinn,re3s0;h0umit,yd;ay,e0iloh;a,lby;g9ne;co,ko0;!s;a1el0ina,org6;!okuhF;ds,naia,r1tt0xiB;i,y;ion,lo;ashawn,eif,uca;a3e1ir0rM;an;lsFn0rry;dall,yat5;i,sD;a0essIie,ude;i1m0;ie,mG;me;ta;rie0y;le;arcy,ev0;an,on;as1h0;arl8eyenne;ey,sidy;drien,kira,l4nd1ubr0vi;ey;i,r0;a,e0;a,y;ex2f1o0;is;ie;ei,is",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦dec0february,july,nov0octo1sept0;em0;ber",Date:"true¦ago,on4som4t1week0yesterd5; end,ends;mr1o0;d2morrow;!w;ed0;ay",Duration:"true¦centurAd8h7m5q4se3w1y0;ear8r8;eek0k7;!end,s;ason,c5;tr,uarter;i0onth3;llisecond2nute2;our1r1;ay0ecade0;!s;ies,y",FemaleName:"true¦0:J7;1:JB;2:IJ;3:IK;4:J1;5:IO;6:JS;7:JO;8:HB;9:JK;A:H4;B:I2;C:IT;D:JH;E:IX;F:BA;G:I4;aGTbFLcDRdD0eBMfB4gADh9Ti9Gj8Dk7Cl5Wm48n3Lo3Hp33qu32r29s15t0Eu0Cv02wVxiTyOzH;aLeIineb,oHsof3;e3Sf3la,ra;h2iKlIna,ynH;ab,ep;da,ma;da,h2iHra;nab;aKeJi0FolB7uIvH;et8onDP;i0na;le0sen3;el,gm3Hn,rGLs8W;aoHme0nyi;m5XyAD;aMendDZhiDGiH;dele9lJnH;if48niHo0;e,f47;a,helmi0lHma;a,ow;ka0nB;aNeKiHusa5;ck84kIl8oleAviH;anFenJ4;ky,toriBK;da,lA8rHs0;a,nHoniH9;a,iFR;leHnesH9;nILrH;i1y;g9rHs6xHA;su5te;aYeUhRiNoLrIuHy2;i,la;acJ3iHu0J;c3na,sH;hFta;nHr0F;iFya;aJffaEOnHs6;a,gtiH;ng;!nFSra;aIeHomasi0;a,l9Oo8Ares1;l3ndolwethu;g9Fo88rIssH;!a,ie;eHi,ri7;sa,za;bOlMmKnIrHs6tia0wa0;a60yn;iHya;a,ka,s6;arFe2iHm77ra;!ka;a,iH;a,t6;at6it6;a0Ecarlett,e0AhWiSkye,neza0oQri,tNuIyH;bIGlvi1;ha,mayIJniAsIzH;an3Net8ie,y;anHi7;!a,e,nH;aCe;aIeH;fan4l5Dphan6E;cI5r5;b3fiAAm0LnHphi1;d2ia,ja,ya;er2lJmon1nIobh8QtH;a,i;dy;lETv3;aMeIirHo0risFDy5;a,lDM;ba,e0i5lJrH;iHr6Jyl;!d8Ifa;ia,lDZ;hd,iMki2nJrIu0w0yH;la,ma,na;i,le9on,ron,yn;aIda,ia,nHon;a,on;!ya;k6mH;!aa;lJrItaye82vH;da,inj;e0ife;en1i0ma;anA9bLd5Oh1SiBkKlJmInd2rHs6vannaC;aCi0;ant6i2;lDOma,ome;ee0in8Tu2;in1ri0;a05eZhXiUoHuthDM;bScRghQl8LnPsJwIxH;anB3ie,y;an,e0;aIeHie,lD;ann7ll1marDGtA;!lHnn1;iHyn;e,nH;a,dF;da,i,na;ayy8G;hel67io;bDRerAyn;a,cIkHmas,nFta,ya;ki,o;h8Xki;ea,iannGMoH;da,n1P;an0bJemFgi0iInHta,y0;a8Bee;han86na;a,eH;cHkaC;a,ca;bi0chIe,i0mo0nHquETy0;di,ia;aERelHiB;!e,le;een4ia0;aPeOhMiLoJrHute6A;iHudenCV;scil3LyamvaB;lHrt3;i0ly;a,paluk;ilome0oebe,ylH;is,lis;ggy,nelope,r5t2;ige,m0VnKo5rvaDMtIulH;a,et8in1;ricHt4T;a,e,ia;do2i07;ctav3dIfD3is6ksa0lHphD3umC5yunbileg;a,ga,iv3;eHvAF;l3t8;aWeUiMoIurHy5;!ay,ul;a,eJor,rIuH;f,r;aCeEma;ll1mi;aNcLhariBQkKlaJna,sHta,vi;anHha;ur;!y;a,iDZki;hoGk9YolH;a,e4P;!mh;hir,lHna,risDEsreE;!a,iDDlBV;asuMdLh3i6Dl5nKomi7rgEVtH;aHhal4;lHs6;i1ya;cy,et8;e9iF0ya;nngu2X;a0Ackenz4e02iMoJrignayani,uriDJyH;a,rH;a,iOlNna,tG;bi0i2llBJnH;a,iH;ca,ka,qD9;a,cUdo4ZkaTlOmi,nMrItzi,yH;ar;aJiIlH;anET;am;!l,nB;dy,eHh,n4;nhGrva;aKdJe0iCUlH;iHy;cent,e;red;!gros;!e5;ae5hH;ae5el3Z;ag5DgNi,lKrH;edi7AiIjem,on,yH;em,l;em,sCG;an4iHliCF;nHsCJ;a,da;!an,han;b09cASd07e,g05ha,i04ja,l02n00rLsoum5YtKuIv84xBKyHz4;bell,ra,soBB;d7rH;a,eE;h8Gild1t4;a,cUgQiKjor4l7Un4s6tJwa,yH;!aHbe6Xja9lAE;m,nBL;a,ha,in1;!aJbCGeIja,lDna,sHt63;!a,ol,sa;!l1D;!h,mInH;!a,e,n1;!awit,i;arJeIie,oHr48ueri8;!t;!ry;et46i3B;el4Xi7Cy;dHon,ue5;akranAy;ak,en,iHlo3S;a,ka,nB;a,re,s4te;daHg4;!l3E;alDd4elHge,isDJon0;ei9in1yn;el,le;a0Ne0CiXoQuLyH;d3la,nH;!a,dIe2OnHsCT;!a,e2N;a,sCR;aD4cJel0Pis1lIna,pHz;e,iA;a,u,wa;iHy;a0Se,ja,l2NnB;is,l1UrItt1LuHvel4;el5is1;aKeIi7na,rH;aADi7;lHn1tA;ei;!in1;aTbb9HdSepa,lNnKsJvIzH;!a,be5Ret8z4;!ia;a,et8;!a,dH;a,sHy;ay,ey,i,y;a,iJja,lH;iHy;aA8e;!aH;!nF;ia,ya;!nH;!a,ne;aPda,e0iNjYla,nMoKsJtHx93y5;iHt4;c3t3;e2PlCO;la,nHra;a,ie,o2;a,or1;a,gh,laH;!ni;!h,nH;a,d2e,n5V;cOdon9DiNkes6mi9Gna,rMtJurIvHxmi,y5;ern1in3;a,e5Aie,yn;as6iIoH;nya,ya;fa,s6;a,isA9;a,la;ey,ie,y;a04eZhXiOlASoNrJyH;lHra;a,ee,ie;istHy6I;a,en,iIyH;!na;!e,n5F;nul,ri,urtnB8;aOerNlB7mJrHzzy;a,stH;en,in;!berlImernH;aq;eHi,y;e,y;a,stE;!na,ra;aHei2ongordzol;dij1w5;el7UiKjsi,lJnIrH;a,i,ri;d2na,za;ey,i,lBLs4y;ra,s6;biAcARdiat7MeBAiSlQmPnyakuma1DrNss6NtKviAyH;!e,lH;a,eH;e,i8T;!a6HeIhHi4TlDri0y;ar8Her8Hie,leErBAy;!lyn8Ori0;a,en,iHl5Xoli0yn;!ma,nFs95;a5il1;ei8Mi,lH;e,ie;a,tl6O;a0AeZiWoOuH;anMdLlHst88;es,iH;a8NeHs8X;!n9tH;!a,te;e5Mi3My;a,iA;!anNcelDdMelGhan7VleLni,sIva0yH;a,ce;eHie;fHlDph7Y;a,in1;en,n1;i7y;!a,e,n45;lHng;!i1DlH;!i1C;anNle0nKrJsH;i8JsH;!e,i8I;i,ri;!a,elGif2CnH;a,et8iHy;!e,f2A;a,eJiInH;a,eIiH;e,n1;!t8;cMda,mi,nIque4YsminFvie2y9zH;min7;a7eIiH;ce,e,n1s;!lHs82t0F;e,le;inIk6HlDquelH;in1yn;da,ta;da,lRmPnOo0rNsIvaHwo0zaro;!a0lu,na;aJiIlaHob89;!n9R;do2;belHdo2;!a,e,l3B;a7Ben1i0ma;di2es,gr72ji;a9elBogH;en1;a,e9iHo0se;a0na;aSeOiJoHus7Kyacin2C;da,ll4rten24snH;a,i9U;lImaH;ri;aIdHlaI;a,egard;ry;ath1BiJlInrietArmi9sH;sa,t1A;en2Uga,mi;di;bi2Fil8MlNnMrJsItHwa,yl8M;i5Tt4;n60ti;iHmo51ri53;etH;!te;aCnaC;a,ey,l4;a02eWiRlPoNrKunJwH;enHyne1R;!dolD;ay,el;acieIetHiselB;a,chE;!la;ld1CogooH;sh;adys,enHor3yn2K;a,da,na;aKgi,lIna,ov8EselHta;a,e,le;da,liH;an;!n0;mLnJorgIrH;ald5Si,m3Etrud7;et8i4X;a,eHna;s29vieve;ma;bIle,mHrnet,yG;al5Si5;iIrielH;a,l1;!ja;aTeQiPlorOoz3rH;anJeIiH;da,eB;da,ja;!cH;esIiHoi0P;n1s66;!ca;a,enc3;en,o0;lIn0rnH;anB;ec3ic3;jr,nArKtHy7;emIiHma,oumaA;ha,ma,n;eh;ah,iBrah,za0;cr4Rd0Re0Qi0Pk0Ol07mXn54rUsOtNuMvHwa;aKelIiH;!e,ta;inFyn;!a;!ngel4V;geni1ni47;h5Yien9ta;mLperanKtH;eIhHrel5;er;l31r7;za;a,eralB;iHma,ne4Lyn;cHka,n;a,ka;aPeNiKmH;aHe21ie,y;!li9nuH;elG;lHn1;e7iHy;a,e,ja;lHrald;da,y;!nue5;aWeUiNlMma,no2oKsJvH;a,iH;na,ra;a,ie;iHuiH;se;a,en,ie,y;a0c3da,e,f,nMsJzaH;!betHveA;e,h;aHe,ka;!beH;th;!a,or;anor,nH;!a,i;!in1na;ate1Rta;leEs6;vi;eIiHna,wi0;e,th;l,n;aYeMh3iLjeneKoH;lor5Vminiq4Ln3FrHtt4;a,eEis,la,othHthy;ea,y;ba;an09naCon9ya;anQbPde,eOiMlJmetr3nHsir5M;a,iH;ce,se;a,iIla,orHphi9;es,is;a,l6F;dHrdH;re;!d5Ena;!b2ForaCraC;a,d2nH;!a,e;hl3i0l0GmNnLphn1rIvi1WyH;le,na;a,by,cIia,lH;a,en1;ey,ie;a,et8iH;!ca,el1Aka,z;arHia;is;a0Re0Nh04i02lUoJristIynH;di,th3;al,i0;lPnMrIurH;tn1D;aJd2OiHn2Ori9;!nH;a,e,n1;!l4;cepci5Cn4sH;tanHuelo;ce,za;eHleE;en,t8;aJeoIotH;il54;!pat2;ir7rJudH;et8iH;a,ne;a,e,iH;ce,sZ;a2er2ndH;i,y;aReNloe,rH;isJyH;stH;al;sy,tH;a1Sen,iHy;an1e,n1;deJlseIrH;!i7yl;a,y;li9;nMrH;isKlImH;ai9;a,eHot8;n1t8;!sa;d2elGtH;al,elG;cIlH;es8i47;el3ilH;e,ia,y;itlYlXmilWndVrMsKtHy5;aIeIhHri0;er1IleErDy;ri0;a38sH;a37ie;a,iOlLmeJolIrH;ie,ol;!e,in1yn;lHn;!a,la;a,eIie,otHy;a,ta;ne,y;na,s1X;a0Ii0I;a,e,l1;isAl4;in,yn;a0Ke02iZlXoUrH;andi7eRiJoIyH;an0nn;nwDoke;an3HdgMgiLtH;n31tH;!aInH;ey,i,y;ny;d,t8;etH;!t7;an0e,nH;da,na;bbi7glarIlo07nH;iAn4;ka;ancHythe;a,he;an1Clja0nHsm3M;iAtH;ou;aWcVlinUniArPssOtJulaCvH;!erlH;ey,y;hJsy,tH;e,iHy7;e,na;!anH;ie,y;!ie;nItHyl;ha,ie;adIiH;ce;et8i9;ay,da;ca,ky;!triH;ce,z;rbJyaH;rmH;aa;a2o2ra;a2Ub2Od25g21i1Sj5l18m0Zn0Boi,r06sWtVuPvOwa,yIzH;ra,u0;aKes6gJlIn,seH;!l;in;un;!nH;a,na;a,i2K;drLguJrIsteH;ja;el3;stH;in1;a,ey,i,y;aahua,he0;hIi2Gja,miAs2DtrH;id;aMlIraqHt21;at;eIi7yH;!n;e,iHy;gh;!nH;ti;iJleIo6piA;ta;en,n1t8;aHelG;!n1J;a01dje5eZgViTjRnKohito,toHya;inet8nH;el5ia;te;!aKeIiHmJ;e,ka;!mHtt7;ar4;!belIliHmU;sa;!l1;a,eliH;ca;ka,sHta;a,sa;elHie;a,iH;a,ca,n1qH;ue;!tH;a,te;!bImHstasiMya;ar3;el;aLberKeliJiHy;e,l3naH;!ta;a,ja;!ly;hGiIl3nB;da;a,ra;le;aWba,ePiMlKthJyH;a,c3sH;a,on,sa;ea;iHys0N;e,s0M;a,cIn1sHza;a,e,ha,on,sa;e,ia,ja;c3is6jaKksaKna,sJxH;aHia;!nd2;ia,saH;nd2;ra;ia;i0nIyH;ah,na;a,is,naCoud;la;c6da,leEmNnLsH;haClH;inHyY;g,n;!h;a,o,slH;ey;ee;en;at6g4nIusH;ti0;es;ie;aWdiTelMrH;eJiH;anMenH;a,e,ne;an0;na;!aLeKiIyH;nn;a,n1;a,e;!ne;!iH;de;e,lDsH;on;yn;!lH;i9yn;ne;aKbIiHrL;!e,gaK;ey,i7y;!e;gaH;il;dKliyJradhIs6;ha;ya;ah;a,ya",Honorific:"true¦director1field marsh2lieutenant1rear0sergeant major,vice0; admir1; gener0;al","Adj|Gerund":"true¦0:3F;1:3H;2:31;3:2X;4:35;5:33;6:3C;7:2Z;8:36;9:29;a33b2Tc2Bd1Te1If19g12h0Zi0Rl0Nm0Gnu0Fo0Ap04rYsKtEuBvAw1Ayiel3;ar6e08;nBpA;l1Rs0B;fol3n1Zsett2;aEeDhrBi4ouc7rAwis0;e0Bif2oub2us0yi1;ea1SiA;l2vi1;l2mp0rr1J;nt1Vxi1;aMcreec7enten2NhLkyrocke0lo0Vmi2oJpHtDuBweA;e0Ul2;pp2ArA;gi1pri5roun3;aBea8iAri2Hun9;mula0r4;gge4rA;t2vi1;ark2eAraw2;e3llb2F;aAot7;ki1ri1;i9oc29;dYtisf6;aEeBive0oAus7;a4l2;assu4defi9fres7ig9juve07mai9s0vAwar3;ea2italiAol1G;si1zi1;gi1ll6mb2vi1;a6eDier23lun1VrAun2C;eBoA;mi5vo1Z;ce3s5vai2;n3rpleA;xi1;ffCpWutBverAwi1;arc7lap04p0Pri3whel8;goi1l6st1J;en3sA;et0;m2Jrtu4;aEeDiCoBuAyst0L;mb2;t1Jvi1;s5tiga0;an1Rl0n3smeri26;dAtu4;de9;aCeaBiAo0U;fesa0Tvi1;di1ni1;c1Fg19s0;llumiGmFnArri0R;cDfurHsCtBviA;go23ti1;e1Oimi21oxica0rig0V;pi4ul0;orpo20r0K;po5;na0;eaBorr02umilA;ia0;li1rtwar8;lFrA;atiDipCoBuelA;i1li1;undbrea10wi1;pi1;f6ng;a4ea8;a3etc7it0lEoCrBulfA;il2;ee1FighXust1L;rAun3;ebo3thco8;aCoA;a0wA;e4i1;mi1tte4;lectrJmHnExA;aCci0hBis0pA;an3lo3;aOila1B;c0spe1A;ab2coura0CdBergi13ga0Clive9ric7s02tA;hral2i0J;ea4u4;barras5er09pA;owe4;if6;aQeIiBrA;if0;sAzz6;aEgDhearCsen0tA;rAur11;ac0es5;te9;us0;ppoin0r8;biliGcDfi9gra3ligh0mBpres5sAvasG;erE;an3ea9orA;ali0L;a6eiBli9rA;ea5;vi1;ta0;maPri1s7un0zz2;aPhMlo5oAripp2ut0;mGnArrespon3;cer9fDspi4tA;inBrA;as0ibu0ol2;ui1;lic0u5;ni1;fDmCpA;eAromi5;l2ti1;an3;or0;aAil2;llenAnAr8;gi1;l8ptAri1;iva0;aff2eGin3lFoDrBuA;d3st2;eathtaAui5;ki1;gg2i2o8ri1unA;ci1;in3;co8wiA;lAtc7;de4;bsorVcOgonMlJmHnno6ppea2rFsA;pi4su4toA;nBun3;di1;is7;hi1;res0;li1;aFu5;si1;ar8lu4;ri1;mi1;iAzi1;zi1;cAhi1;eleDomA;moBpan6;yi1;da0;ra0;ti1;bi1;ng",Comparable:"true¦0:3C;1:3Q;2:3F;a3Tb3Cc33d2Te2Mf2Ag1Wh1Li1Fj1Ek1Bl13m0Xn0So0Rp0Iqu0Gr07sHtCug0vAw4y3za0Q;el10ouN;ary,e6hi5i3ry;ck0Cde,l3n1ry,se;d,y;ny,te;a3i3R;k,ry;a3erda2ulgar;gue,in,st;a6en2Xhi5i4ouZr3;anqu2Cen1ue;dy,g36me0ny;ck,rs28;ll,me,rt,wd3I;aRcaPeOhMiLkin0BlImGoEpDt6u4w3;eet,ift;b3dd0Wperfi21rre28;sta26t21;a8e7iff,r4u3;pUr1;a4ict,o3;ng;ig2Vn0N;a1ep,rn;le,rk,te0;e1Si2Vright0;ci1Yft,l3on,re;emn,id;a3el0;ll,rt;e4i3y;g2Mm0Z;ek,nd2T;ck24l0mp1L;a3iRrill,y;dy,l01rp;ve0Jxy;n1Jr3;ce,y;d,fe,int0l1Hv0V;a8e6i5o3ude;mantic,o19sy,u3;gh;pe,t1P;a3d,mo0A;dy,l;gg4iFndom,p3re,w;id;ed;ai2i3;ck,et;hoAi1Fl9o8r5u3;ny,r3;e,p11;egna2ic4o3;fouSud;ey,k0;liXor;ain,easa2;ny;dd,i0ld,ranL;aive,e5i4o3u14;b0Sisy,rm0Ysy;bb0ce,mb0R;a3r1w;r,t;ad,e5ild,o4u3;nda12te;ist,o1;a4ek,l3;low;s0ty;a8e7i6o3ucky;f0Jn4o15u3ve0w10y0N;d,sy;e0g;ke0l,mp,tt0Eve0;e1Qwd;me,r3te;ge;e4i3;nd;en;ol0ui19;cy,ll,n3;secu6t3;e3ima4;llege2rmedia3;te;re;aAe7i6o5u3;ge,m3ng1C;bYid;me0t;gh,l0;a3fXsita2;dy,rWv3;en0y;nd13ppy,r3;d3sh;!y;aFenEhCiBlAoofy,r3;a8e6i5o3ue0Z;o3ss;vy;m,s0;at,e3y;dy,n;nd,y;ad,ib,ooD;a2d1;a3o3;st0;tDuiS;u1y;aCeebBi9l8o6r5u3;ll,n3r0N;!ny;aCesh,iend0;a3nd,rmD;my;at,ir7;erce,nan3;ci9;le;r,ul3;ty;a6erie,sse4v3xtre0B;il;nti3;al;r4s3;tern,y;ly,th0;appZe9i5ru4u3;mb;nk;r5vi4z3;zy;ne;e,ty;a3ep,n9;d3f,r;!ly;agey,h8l7o5r4u3;dd0r0te;isp,uel;ar3ld,mmon,st0ward0zy;se;evKou1;e3il0;ap,e3;sy;aHiFlCoAr5u3;ff,r0sy;ly;a6i3oad;g4llia2;nt;ht;sh,ve;ld,un3;cy;a4o3ue;nd,o1;ck,nd;g,tt3;er;d,ld,w1;dy;bsu6ng5we3;so3;me;ry;rd",Adverb:"true¦a08b05d00eYfSheQinPjustOkinda,likewiZmMnJoEpCquite,r9s5t2u0very,well;ltima01p0; to,wards5;h1iny bit,o0wiO;o,t6;en,us;eldom,o0uch;!me1rt0; of;how,times,w0C;a1e0;alS;ndomRth05;ar excellenEer0oint blank; Lhaps;f3n0utright;ce0ly;! 0;ag05moX; courGten;ewJo0; longWt 0;onHwithstand9;aybe,eanwhiNore0;!ovT;! aboX;deed,steY;lla,n0;ce;or3u0;ck1l9rther0;!moK;ing; 0evK;exampCgood,suH;n mas0vI;se;e0irect2; 2fini0;te0;ly;juAtrop;ackward,y 0;far,no0; means,w; GbroFd nauseam,gEl7ny5part,s4t 2w0;ay,hi0;le;be7l0mo7wor7;arge,ea6; soon,i4;mo0way;re;l 3mo2ongsi1ready,so,togeth0ways;er;de;st;b1t0;hat;ut;ain;ad;lot,posteriori",Conjunction:"true¦aXbTcReNhowMiEjust00noBo9p8supposing,t5wh0yet;e1il0o3;e,st;n1re0thN; if,by,vM;evL;h0il,o;erefOo0;!uU;lus,rovided th9;r0therwiM;! not; mattEr,w0;! 0;since,th4w7;f4n0; 0asmuch;as mIcaForder t0;h0o;at;! 0;only,t0w0;hen;!ev3;ith2ven0;! 0;if,tB;er;o0uz;s,z;e0ut,y the time;cau1f0;ore;se;lt3nd,s 0;far1if,m0soon1t2;uch0; as;hou0;gh",Currency:"true¦$,aud,bQcOdJeurIfHgbp,hkd,iGjpy,kElDp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotyQł;en,uanP;af,of;h0t5;e0il5;k0q0;elK;oubleJp,upeeJ;e2ound st0;er0;lingG;n0soF;ceEnies;empi7i7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!os;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;e0ny;nt1;aht,itcoin0;!s",Determiner:"true¦aBboth,d9e6few,le5mu8neiDplenty,s4th2various,wh0;at0ich0;evC;a0e4is,ose;!t;everal,ome;!ast,s;a1l0very;!se;ch;e0u;!s;!n0;!o0y;th0;er","Adj|Present":"true¦a07b04cVdQeNfJhollIidRlEmCnarrIoBp9qua8r7s3t2uttFw0;aKet,ro0;ng,u08;endChin;e2hort,l1mooth,our,pa9tray,u0;re,speU;i2ow;cu6da02leSpaN;eplica01i02;ck;aHerfePr0;eseUime,omV;bscu1pen,wn;atu0e3odeH;re;a2e1ive,ow0;er;an;st,y;ow;a2i1oul,r0;ee,inge;rm;iIke,ncy,st;l1mpty,x0;emHpress;abo4ic7;amp,e2i1oub0ry,ull;le;ffu9re6;fu8libe0;raE;alm,l5o0;mpleCn3ol,rr1unterfe0;it;e0u7;ct;juga8sum7;ea1o0;se;n,r;ankru1lu0;nt;pt;li2pproxi0rticula1;ma0;te;ght","Person|Adj":"true¦b3du2earnest,frank,mi2r0san1woo1;an0ich,u1;dy;sty;ella,rown",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to,a;ight,ust;an,o0;uld",Verb:"true¦born,cannot,gonna,has,keep tabs,msg","Person|Verb":"true¦b8ch7dr6foster,gra5ja9lan4ma2ni9ollie,p1rob,s0wade;kip,pike,t5ue;at,eg,ier2;ck,r0;k,shal;ce;ce,nt;ew;ase,u1;iff,l1ob,u0;ck;aze,ossom","Person|Date":"true¦a2j0sep;an0une;!uary;p0ugust,v0;ril"};const mo=36,po="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",fo=po.split("").reduce((function(e,t,n){return e[t]=n,e}),{});var bo=function(e){if(void 0!==fo[e])return fo[e];let t=0,n=1,r=mo,o=1;for(;n=0;n--,o*=mo){let r=e.charCodeAt(n)-48;r>10&&(r-=7),t+=r*o}return t};const vo=function(e,t,n){const r=bo(t);return r{let a=e.nodes[r];"!"===a[0]&&(t.push(o),a=a.slice(1));const i=a.split(/([A-Z0-9,]+)/g);for(let a=0;a{const t=function(e){if(!e)return{};const t=e.split("|").reduce(((e,t)=>{const n=t.split("¦");return e[n[0]]=n[1],e}),{}),n={};return Object.keys(t).forEach((function(e){const r=yo(t[e]);"true"===e&&(e=!0);for(let t=0;t{if(jo[t]=e,"Noun|Verb"===e){const e=Ao(t,xo);jo[e]="Plural|Verb"}})):Object.keys(t).forEach((t=>{No[t]=e}))})),[":(",":)",":P",":p",":O",";(",";)",";P",";p",";O",":3",":|",":/",":\\",":$",":*",":@",":-(",":-)",":-P",":-p",":-O",":-3",":-|",":-/",":-\\",":-$",":-*",":-@",":^(",":^)",":^P",":^p",":^O",":^3",":^|",":^/",":^\\",":^$",":^*",":^@","):","(:","$:","*:",")-:","(-:","$-:","*-:",")^:","(^:","$^:","*^:","<3","No[e]="Emoticon")),delete No[""],delete No.null,delete No[" "];const Io="Singular";var To={beforeTags:{Determiner:Io,Possessive:Io,Acronym:Io,Noun:Io,Adjective:Io,PresentTense:Io,Gerund:Io,PastTense:Io,Infinitive:Io,Date:Io,Ordinal:Io,Demonym:Io},afterTags:{Value:Io,Modal:Io,Copula:Io,PresentTense:Io,PastTense:Io,Demonym:Io,Actor:Io},beforeWords:{the:Io,with:Io,without:Io,of:Io,for:Io,any:Io,all:Io,on:Io,cut:Io,cuts:Io,increase:Io,decrease:Io,raise:Io,drop:Io,save:Io,saved:Io,saves:Io,make:Io,makes:Io,made:Io,minus:Io,plus:Io,than:Io,another:Io,versus:Io,neither:Io,about:Io,favorite:Io,best:Io,daily:Io,weekly:Io,linear:Io,binary:Io,mobile:Io,lexical:Io,technical:Io,computer:Io,scientific:Io,security:Io,government:Io,popular:Io,formal:Io,no:Io,more:Io,one:Io,let:Io,her:Io,his:Io,their:Io,our:Io,us:Io,sheer:Io,monthly:Io,yearly:Io,current:Io,previous:Io,upcoming:Io,last:Io,next:Io,main:Io,initial:Io,final:Io,beginning:Io,end:Io,top:Io,bottom:Io,future:Io,past:Io,major:Io,minor:Io,side:Io,central:Io,peripheral:Io,public:Io,private:Io},afterWords:{of:Io,system:Io,aid:Io,method:Io,utility:Io,tool:Io,reform:Io,therapy:Io,philosophy:Io,room:Io,authority:Io,says:Io,said:Io,wants:Io,wanted:Io,is:Io,did:Io,do:Io,can:Io,wise:Io}};const Do="Infinitive";var Ho={beforeTags:{Modal:Do,Adverb:Do,Negative:Do,Plural:Do},afterTags:{Determiner:Do,Adverb:Do,Possessive:Do,Reflexive:Do,Preposition:Do,Cardinal:Do,Comparative:Do,Superlative:Do},beforeWords:{i:Do,we:Do,you:Do,they:Do,to:Do,please:Do,will:Do,have:Do,had:Do,would:Do,could:Do,should:Do,do:Do,did:Do,does:Do,can:Do,must:Do,us:Do,me:Do,let:Do,even:Do,when:Do,help:Do,he:Do,she:Do,it:Do,being:Do,bi:Do,co:Do,contra:Do,de:Do,inter:Do,intra:Do,mis:Do,pre:Do,out:Do,counter:Do,nobody:Do,somebody:Do,anybody:Do,everybody:Do},afterWords:{the:Do,me:Do,you:Do,him:Do,us:Do,her:Do,his:Do,them:Do,they:Do,it:Do,himself:Do,herself:Do,itself:Do,myself:Do,ourselves:Do,themselves:Do,something:Do,anything:Do,a:Do,an:Do,up:Do,down:Do,by:Do,out:Do,off:Do,under:Do,what:Do,all:Do,to:Do,because:Do,although:Do,how:Do,otherwise:Do,together:Do,though:Do,into:Do,yet:Do,more:Do,here:Do,there:Do,away:Do}};const Eo={beforeTags:Object.assign({},Ho.beforeTags,To.beforeTags,{}),afterTags:Object.assign({},Ho.afterTags,To.afterTags,{}),beforeWords:Object.assign({},Ho.beforeWords,To.beforeWords,{}),afterWords:Object.assign({},Ho.afterWords,To.afterWords,{})},Go="Adjective";var Oo={beforeTags:{Determiner:Go,Possessive:Go,Hyphenated:Go},afterTags:{Adjective:Go},beforeWords:{seem:Go,seemed:Go,seems:Go,feel:Go,feels:Go,felt:Go,stay:Go,appear:Go,appears:Go,appeared:Go,also:Go,over:Go,under:Go,too:Go,it:Go,but:Go,still:Go,really:Go,quite:Go,well:Go,very:Go,truly:Go,how:Go,deeply:Go,hella:Go,profoundly:Go,extremely:Go,so:Go,badly:Go,mostly:Go,totally:Go,awfully:Go,rather:Go,nothing:Go,something:Go,anything:Go,not:Go,me:Go,is:Go,face:Go,faces:Go,faced:Go,look:Go,looks:Go,looked:Go,reveal:Go,reveals:Go,revealed:Go,sound:Go,sounded:Go,sounds:Go,remains:Go,remained:Go,prove:Go,proves:Go,proved:Go,becomes:Go,stays:Go,tastes:Go,taste:Go,smells:Go,smell:Go,gets:Go,grows:Go,as:Go,rings:Go,radiates:Go,conveys:Go,convey:Go,conveyed:Go,of:Go},afterWords:{too:Go,also:Go,or:Go,enough:Go,as:Go}};const Fo="Gerund";var Vo={beforeTags:{Adverb:Fo,Preposition:Fo,Conjunction:Fo},afterTags:{Adverb:Fo,Possessive:Fo,Person:Fo,Pronoun:Fo,Determiner:Fo,Copula:Fo,Preposition:Fo,Conjunction:Fo,Comparative:Fo},beforeWords:{been:Fo,keep:Fo,continue:Fo,stop:Fo,am:Fo,be:Fo,me:Fo,began:Fo,start:Fo,starts:Fo,started:Fo,stops:Fo,stopped:Fo,help:Fo,helps:Fo,avoid:Fo,avoids:Fo,love:Fo,loves:Fo,loved:Fo,hate:Fo,hates:Fo,hated:Fo},afterWords:{you:Fo,me:Fo,her:Fo,him:Fo,his:Fo,them:Fo,their:Fo,it:Fo,this:Fo,there:Fo,on:Fo,about:Fo,for:Fo,up:Fo,down:Fo}};const zo="Gerund",Bo="Adjective",So={beforeTags:Object.assign({},Oo.beforeTags,Vo.beforeTags,{Imperative:zo,Infinitive:Bo,Plural:zo}),afterTags:Object.assign({},Oo.afterTags,Vo.afterTags,{Noun:Bo}),beforeWords:Object.assign({},Oo.beforeWords,Vo.beforeWords,{is:Bo,are:zo,was:Bo,of:Bo,suggest:zo,suggests:zo,suggested:zo,recommend:zo,recommends:zo,recommended:zo,imagine:zo,imagines:zo,imagined:zo,consider:zo,considered:zo,considering:zo,resist:zo,resists:zo,resisted:zo,avoid:zo,avoided:zo,avoiding:zo,except:Bo,accept:Bo,assess:zo,explore:zo,fear:zo,fears:zo,appreciate:zo,question:zo,help:zo,embrace:zo,with:Bo}),afterWords:Object.assign({},Oo.afterWords,Vo.afterWords,{to:zo,not:zo,the:zo})},$o={beforeTags:{Determiner:void 0,Cardinal:"Noun",PhrasalVerb:"Adjective"},afterTags:{}},Mo={beforeTags:Object.assign({},Oo.beforeTags,To.beforeTags,$o.beforeTags),afterTags:Object.assign({},Oo.afterTags,To.afterTags,$o.afterTags),beforeWords:Object.assign({},Oo.beforeWords,To.beforeWords,{are:"Adjective",is:"Adjective",was:"Adjective",be:"Adjective",off:"Adjective",out:"Adjective"}),afterWords:Object.assign({},Oo.afterWords,To.afterWords)},Lo="PastTense",Ko="Adjective",Jo={beforeTags:{Adverb:Lo,Pronoun:Lo,ProperNoun:Lo,Auxiliary:Lo,Noun:Lo},afterTags:{Possessive:Lo,Pronoun:Lo,Determiner:Lo,Adverb:Lo,Comparative:Lo,Date:Lo,Gerund:Lo},beforeWords:{be:Lo,who:Lo,get:Ko,had:Lo,has:Lo,have:Lo,been:Lo,it:Lo,as:Lo,for:Ko,more:Ko,always:Ko},afterWords:{by:Lo,back:Lo,out:Lo,in:Lo,up:Lo,down:Lo,before:Lo,after:Lo,for:Lo,the:Lo,with:Lo,as:Lo,on:Lo,at:Lo,between:Lo,to:Lo,into:Lo,us:Lo,them:Lo,his:Lo,her:Lo,their:Lo,our:Lo,me:Lo,about:Ko}};var Wo={beforeTags:Object.assign({},Oo.beforeTags,Jo.beforeTags),afterTags:Object.assign({},Oo.afterTags,Jo.afterTags),beforeWords:Object.assign({},Oo.beforeWords,Jo.beforeWords),afterWords:Object.assign({},Oo.afterWords,Jo.afterWords)};const qo={afterTags:{Noun:"Adjective",Conjunction:void 0}},Uo={beforeTags:Object.assign({},Oo.beforeTags,Ho.beforeTags,{Adverb:void 0,Negative:void 0}),afterTags:Object.assign({},Oo.afterTags,Ho.afterTags,qo.afterTags),beforeWords:Object.assign({},Oo.beforeWords,Ho.beforeWords,{have:void 0,had:void 0,not:void 0,went:"Adjective",goes:"Adjective",got:"Adjective",be:"Adjective"}),afterWords:Object.assign({},Oo.afterWords,Ho.afterWords,{to:void 0,as:"Adjective"})},Ro={Copula:"Gerund",PastTense:"Gerund",PresentTense:"Gerund",Infinitive:"Gerund"},Qo={Value:"Gerund"},Zo={are:"Gerund",were:"Gerund",be:"Gerund",no:"Gerund",without:"Gerund",you:"Gerund",we:"Gerund",they:"Gerund",he:"Gerund",she:"Gerund",us:"Gerund",them:"Gerund"},_o={the:"Gerund",this:"Gerund",that:"Gerund",me:"Gerund",us:"Gerund",them:"Gerund"},Xo={beforeTags:Object.assign({},Vo.beforeTags,To.beforeTags,Ro),afterTags:Object.assign({},Vo.afterTags,To.afterTags,Qo),beforeWords:Object.assign({},Vo.beforeWords,To.beforeWords,Zo),afterWords:Object.assign({},Vo.afterWords,To.afterWords,_o)},Yo="Singular",ea="Infinitive",ta={beforeTags:Object.assign({},Ho.beforeTags,To.beforeTags,{Adjective:Yo,Particle:Yo}),afterTags:Object.assign({},Ho.afterTags,To.afterTags,{ProperNoun:ea,Gerund:ea,Adjective:ea,Copula:Yo}),beforeWords:Object.assign({},Ho.beforeWords,To.beforeWords,{is:Yo,was:Yo,of:Yo,have:null}),afterWords:Object.assign({},Ho.afterWords,To.afterWords,{instead:ea,about:ea,his:ea,her:ea,to:null,by:null,in:null})},na="Person";var ra={beforeTags:{Honorific:na,Person:na},afterTags:{Person:na,ProperNoun:na,Verb:na},beforeWords:{hi:na,hey:na,yo:na,dear:na,hello:na},afterWords:{said:na,says:na,told:na,tells:na,feels:na,felt:na,seems:na,thinks:na,thought:na,spends:na,spendt:na,plays:na,played:na,sing:na,sang:na,learn:na,learned:na,wants:na,wanted:na}};const oa="Month",aa={beforeTags:{Date:oa,Value:oa},afterTags:{Date:oa,Value:oa},beforeWords:{by:oa,in:oa,on:oa,during:oa,after:oa,before:oa,between:oa,until:oa,til:oa,sometime:oa,of:oa,this:oa,next:oa,last:oa,previous:oa,following:oa,with:"Person"},afterWords:{sometime:oa,in:oa,of:oa,until:oa,the:oa}};var ia={beforeTags:Object.assign({},ra.beforeTags,aa.beforeTags),afterTags:Object.assign({},ra.afterTags,aa.afterTags),beforeWords:Object.assign({},ra.beforeWords,aa.beforeWords),afterWords:Object.assign({},ra.afterWords,aa.afterWords)};const sa="Place",la={beforeTags:{Place:sa},afterTags:{Place:sa,Abbreviation:sa},beforeWords:{in:sa,by:sa,near:sa,from:sa,to:sa},afterWords:{in:sa,by:sa,near:sa,from:sa,to:sa,government:sa,council:sa,region:sa,city:sa}},ua="Unit",ca={"Actor|Verb":Eo,"Adj|Gerund":So,"Adj|Noun":Mo,"Adj|Past":Wo,"Adj|Present":Uo,"Noun|Verb":ta,"Noun|Gerund":Xo,"Person|Noun":{beforeTags:Object.assign({},To.beforeTags,ra.beforeTags),afterTags:Object.assign({},To.afterTags,ra.afterTags),beforeWords:Object.assign({},To.beforeWords,ra.beforeWords,{i:"Infinitive",we:"Infinitive"}),afterWords:Object.assign({},To.afterWords,ra.afterWords)},"Person|Date":ia,"Person|Verb":{beforeTags:Object.assign({},To.beforeTags,ra.beforeTags,Ho.beforeTags),afterTags:Object.assign({},To.afterTags,ra.afterTags,Ho.afterTags),beforeWords:Object.assign({},To.beforeWords,ra.beforeWords,Ho.beforeWords),afterWords:Object.assign({},To.afterWords,ra.afterWords,Ho.afterWords)},"Person|Place":{beforeTags:Object.assign({},la.beforeTags,ra.beforeTags),afterTags:Object.assign({},la.afterTags,ra.afterTags),beforeWords:Object.assign({},la.beforeWords,ra.beforeWords),afterWords:Object.assign({},la.afterWords,ra.afterWords)},"Person|Adj":{beforeTags:Object.assign({},ra.beforeTags,Oo.beforeTags),afterTags:Object.assign({},ra.afterTags,Oo.afterTags),beforeWords:Object.assign({},ra.beforeWords,Oo.beforeWords),afterWords:Object.assign({},ra.afterWords,Oo.afterWords)},"Unit|Noun":{beforeTags:{Value:ua},afterTags:{},beforeWords:{per:ua,every:ua,each:ua,square:ua,cubic:ua,sq:ua,metric:ua},afterWords:{per:ua,squared:ua,cubed:ua,long:ua}}},ha=(e,t)=>{const n=Object.keys(e).reduce(((t,n)=>(t[n]="Infinitive"===e[n]?"PresentTense":"Plural",t)),{});return Object.assign(n,t)};ca["Plural|Verb"]={beforeWords:ha(ca["Noun|Verb"].beforeWords,{had:"Plural",have:"Plural"}),afterWords:ha(ca["Noun|Verb"].afterWords,{his:"PresentTense",her:"PresentTense",its:"PresentTense",in:null,to:null,is:"PresentTense",by:"PresentTense"}),beforeTags:ha(ca["Noun|Verb"].beforeTags,{Conjunction:"PresentTense",Noun:void 0,ProperNoun:"PresentTense"}),afterTags:ha(ca["Noun|Verb"].afterTags,{Gerund:"Plural",Noun:"PresentTense",Value:"PresentTense"})};const da="Adjective",ga="Infinitive",ma="PresentTense",pa="Singular",fa="PastTense",ba="Adverb",va="Plural",ya="Actor",wa="Verb",ka="Noun",Pa="LastName",Aa="Modal",Ca="Place",Na="Participle";var ja=[null,null,{ea:pa,ia:ka,ic:da,ly:ba,"'n":wa,"'t":wa},{oed:fa,ued:fa,xed:fa," so":ba,"'ll":Aa,"'re":"Copula",azy:da,eer:ka,end:wa,ped:fa,ffy:da,ify:ga,ing:"Gerund",ize:ga,ibe:ga,lar:da,mum:da,nes:ma,nny:da,ous:da,que:da,ger:ka,ber:ka,rol:pa,sis:pa,ogy:pa,oid:pa,ian:pa,zes:ma,eld:fa,ken:Na,ven:Na,ten:Na,ect:ga,ict:ga,ign:ga,oze:ga,ful:da,bal:da,ton:ka,pur:Ca},{amed:fa,aped:fa,ched:fa,lked:fa,rked:fa,reed:fa,nded:fa,mned:da,cted:fa,dged:fa,ield:pa,akis:Pa,cede:ga,chuk:Pa,czyk:Pa,ects:ma,iend:pa,ends:wa,enko:Pa,ette:pa,iary:pa,wner:pa,fies:ma,fore:ba,gate:ga,gone:da,ices:va,ints:va,ruct:ga,ines:va,ions:va,ners:va,pers:va,lers:va,less:da,llen:da,made:da,nsen:Pa,oses:ma,ould:Aa,some:da,sson:Pa,ians:va,tion:pa,tage:ka,ique:pa,tive:da,tors:ka,vice:pa,lier:pa,fier:pa,wned:fa,gent:pa,tist:ya,pist:ya,rist:ya,mist:ya,yist:ya,vist:ya,ists:ya,lite:pa,site:pa,rite:pa,mite:pa,bite:pa,mate:pa,date:pa,ndal:pa,vent:pa,uist:ya,gist:ya,note:pa,cide:pa,ence:pa,wide:da,vide:ga,ract:ga,duce:ga,pose:ga,eive:ga,lyze:ga,lyse:ga,iant:da,nary:da,ghty:da,uent:da,erer:ya,bury:Ca,dorf:ka,esty:ka,wych:Ca,dale:Ca,folk:Ca,vale:Ca,abad:Ca,sham:Ca,wick:Ca,view:Ca},{elist:ya,holic:pa,phite:pa,tized:fa,urned:fa,eased:fa,ances:va,bound:da,ettes:va,fully:ba,ishes:ma,ities:va,marek:Pa,nssen:Pa,ology:ka,osome:pa,tment:pa,ports:va,rough:da,tches:ma,tieth:"Ordinal",tures:va,wards:ba,where:ba,archy:ka,pathy:ka,opoly:ka,embly:ka,phate:ka,ndent:pa,scent:pa,onist:ya,anist:ya,alist:ya,olist:ya,icist:ya,ounce:ga,iable:da,borne:da,gnant:da,inant:da,igent:da,atory:da,rient:pa,dient:pa,maker:ya,burgh:Ca,mouth:Ca,ceter:Ca,ville:Ca,hurst:Ca,stead:Ca,endon:Ca,brook:Ca,shire:Ca,worth:ka,field:"ProperNoun",ridge:Ca},{auskas:Pa,parent:pa,cedent:pa,ionary:pa,cklist:pa,brooke:Ca,keeper:ya,logist:ya,teenth:"Value",worker:ya,master:ya,writer:ya,brough:Ca,cester:Ca,ington:Ca,cliffe:Ca,ingham:Ca},{chester:Ca,logists:ya,opoulos:Pa,borough:Ca,sdottir:Pa}];const xa="Adjective",Ia="Noun",Ta="Verb";var Da=[null,null,{},{neo:Ia,bio:Ia,"de-":Ta,"re-":Ta,"un-":Ta,"ex-":Ia},{anti:Ia,auto:Ia,faux:xa,hexa:Ia,kilo:Ia,mono:Ia,nano:Ia,octa:Ia,poly:Ia,semi:xa,tele:Ia,"pro-":xa,"mis-":Ta,"dis-":Ta,"pre-":xa},{anglo:Ia,centi:Ia,ethno:Ia,ferro:Ia,grand:Ia,hepta:Ia,hydro:Ia,intro:Ia,macro:Ia,micro:Ia,milli:Ia,nitro:Ia,penta:Ia,quasi:xa,radio:Ia,tetra:Ia,"omni-":xa,"post-":xa},{pseudo:xa,"extra-":xa,"hyper-":xa,"inter-":xa,"intra-":xa,"deca-":xa},{electro:Ia}];const Ha="Adjective",Ea="Infinitive",Ga="PresentTense",Oa="Singular",Fa="PastTense",Va="Adverb",za="Expression",Ba="Actor",Sa="Verb",$a="Noun",Ma="LastName";var La={a:[[/.[aeiou]na$/,$a,"tuna"],[/.[oau][wvl]ska$/,Ma],[/.[^aeiou]ica$/,Oa,"harmonica"],[/^([hyj]a+)+$/,za,"haha"]],c:[[/.[^aeiou]ic$/,Ha]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,Fa,"popped"],[/.[aeo]{2}[bdgmnprvz]ed$/,Fa,"rammed"],[/.[aeiou][sg]hed$/,Fa,"gushed"],[/.[aeiou]red$/,Fa,"hired"],[/.[aeiou]r?ried$/,Fa,"hurried"],[/[^aeiou]ard$/,Oa,"steward"],[/[aeiou][^aeiou]id$/,Ha,""],[/.[vrl]id$/,Ha,"livid"],[/..led$/,Fa,"hurled"],[/.[iao]sed$/,Fa,""],[/[aeiou]n?[cs]ed$/,Fa,""],[/[aeiou][rl]?[mnf]ed$/,Fa,""],[/[aeiou][ns]?c?ked$/,Fa,"bunked"],[/[aeiou]gned$/,Fa],[/[aeiou][nl]?ged$/,Fa],[/.[tdbwxyz]ed$/,Fa],[/[^aeiou][aeiou][tvx]ed$/,Fa],[/.[cdflmnprstv]ied$/,Fa,"emptied"]],e:[[/.[lnr]ize$/,Ea,"antagonize"],[/.[^aeiou]ise$/,Ea,"antagonise"],[/.[aeiou]te$/,Ea,"bite"],[/.[^aeiou][ai]ble$/,Ha,"fixable"],[/.[^aeiou]eable$/,Ha,"maleable"],[/.[ts]ive$/,Ha,"festive"],[/[a-z]-like$/,Ha,"woman-like"]],h:[[/.[^aeiouf]ish$/,Ha,"cornish"],[/.v[iy]ch$/,Ma,"..ovich"],[/^ug?h+$/,za,"ughh"],[/^uh[ -]?oh$/,za,"uhoh"],[/[a-z]-ish$/,Ha,"cartoon-ish"]],i:[[/.[oau][wvl]ski$/,Ma,"polish-male"]],k:[[/^(k){2}$/,za,"kkkk"]],l:[[/.[gl]ial$/,Ha,"familial"],[/.[^aeiou]ful$/,Ha,"fitful"],[/.[nrtumcd]al$/,Ha,"natal"],[/.[^aeiou][ei]al$/,Ha,"familial"]],m:[[/.[^aeiou]ium$/,Oa,"magnesium"],[/[^aeiou]ism$/,Oa,"schism"],[/^[hu]m+$/,za,"hmm"],[/^\d+ ?[ap]m$/,"Date","3am"]],n:[[/.[lsrnpb]ian$/,Ha,"republican"],[/[^aeiou]ician$/,Ba,"musician"],[/[aeiou][ktrp]in'$/,"Gerund","cookin'"]],o:[[/^no+$/,za,"noooo"],[/^(yo)+$/,za,"yoo"],[/^wo{2,}[pt]?$/,za,"woop"]],r:[[/.[bdfklmst]ler$/,"Noun"],[/[aeiou][pns]er$/,Oa],[/[^i]fer$/,Ea],[/.[^aeiou][ao]pher$/,Ba],[/.[lk]er$/,"Noun"],[/.ier$/,"Comparative"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,Ha],[/[aeiou].*ist$/,Ha],[/^[a-z]et$/,Sa]],s:[[/.[^aeiou]ises$/,Ga],[/.[rln]ates$/,Ga],[/.[^z]ens$/,Sa],[/.[lstrn]us$/,Oa],[/.[aeiou]sks$/,Ga],[/.[aeiou]kes$/,Ga],[/[aeiou][^aeiou]is$/,Oa],[/[a-z]'s$/,$a],[/^yes+$/,za]],v:[[/.[^aeiou][ai][kln]ov$/,Ma]],y:[[/.[cts]hy$/,Ha],[/.[st]ty$/,Ha],[/.[tnl]ary$/,Ha],[/.[oe]ry$/,Oa],[/[rdntkbhs]ly$/,Va],[/.(gg|bb|zz)ly$/,Ha],[/...lly$/,Va],[/.[gk]y$/,Ha],[/[bszmp]{2}y$/,Ha],[/.[ai]my$/,Ha],[/[ea]{2}zy$/,Ha],[/.[^aeiou]ity$/,Oa]]};const Ka="Verb",Ja="Noun";var Wa={leftTags:[["Adjective",Ja],["Possessive",Ja],["Determiner",Ja],["Adverb",Ka],["Pronoun",Ka],["Value",Ja],["Ordinal",Ja],["Modal",Ka],["Superlative",Ja],["Demonym",Ja],["Honorific","Person"]],leftWords:[["i",Ka],["first",Ja],["it",Ka],["there",Ka],["not",Ka],["because",Ja],["if",Ja],["but",Ja],["who",Ka],["this",Ja],["his",Ja],["when",Ja],["you",Ka],["very","Adjective"],["old",Ja],["never",Ka],["before",Ja],["a",Ja],["the",Ja],["been",Ka]],rightTags:[["Copula",Ja],["PastTense",Ja],["Conjunction",Ja],["Modal",Ja]],rightWords:[["there",Ka],["me",Ka],["man","Adjective"],["him",Ka],["it",Ka],["were",Ja],["took",Ja],["himself",Ka],["went",Ja],["who",Ja],["jr","Person"]]},qa={fwd:"3:ser,ier¦1er:h,t,f,l,n¦1r:e¦2er:ss,or,om",both:"3er:ver,ear,alm¦3ner:hin¦3ter:lat¦2mer:im¦2er:ng,rm,mb¦2ber:ib¦2ger:ig¦1er:w,p,k,d¦ier:y",rev:"1:tter,yer¦2:uer,ver,ffer,oner,eler,ller,iler,ster,cer,uler,sher,ener,gher,aner,adder,nter,eter,rter,hter,rner,fter¦3:oser,ooler,eafer,user,airer,bler,maler,tler,eater,uger,rger,ainer,urer,ealer,icher,pler,emner,icter,nser,iser¦4:arser,viner,ucher,rosser,somer,ndomer,moter,oother,uarer,hiter¦5:nuiner,esser,emier¦ar:urther",ex:"worse:bad¦better:good¦4er:fair,gray,poor¦1urther:far¦3ter:fat,hot,wet¦3der:mad,sad¦3er:shy,fun¦4der:glad¦:¦4r:cute,dire,fake,fine,free,lame,late,pale,rare,ripe,rude,safe,sore,tame,wide¦5r:eerie,stale"},Ua={fwd:"1:nning,tting,rring,pping,eing,mming,gging,dding,bbing,kking¦2:eking,oling,eling,eming¦3:velling,siting,uiting,fiting,loting,geting,ialing,celling¦4:graming",both:"1:aing,iing,fing,xing,ying,oing,hing,wing¦2:tzing,rping,izzing,bting,mning,sping,wling,rling,wding,rbing,uping,lming,wning,mping,oning,lting,mbing,lking,fting,hting,sking,gning,pting,cking,ening,nking,iling,eping,ering,rting,rming,cting,lping,ssing,nting,nding,lding,sting,rning,rding,rking¦3:belling,siping,toming,yaking,uaking,oaning,auling,ooping,aiding,naping,euring,tolling,uzzing,ganing,haning,ualing,halling,iasing,auding,ieting,ceting,ouling,voring,ralling,garing,joring,oaming,oaking,roring,nelling,ooring,uelling,eaming,ooding,eaping,eeting,ooting,ooming,xiting,keting,ooking,ulling,airing,oaring,biting,outing,oiting,earing,naling,oading,eeding,ouring,eaking,aiming,illing,oining,eaning,onging,ealing,aining,eading¦4:thoming,melling,aboring,ivoting,weating,dfilling,onoring,eriting,imiting,tialling,rgining,otoring,linging,winging,lleting,louding,spelling,mpelling,heating,feating,opelling,choring,welling,ymaking,ctoring,calling,peating,iloring,laiting,utoring,uditing,mmaking,loating,iciting,waiting,mbating,voiding,otalling,nsoring,nselling,ocusing,itoring,eloping¦5:rselling,umpeting,atrolling,treating,tselling,rpreting,pringing,ummeting,ossoming,elmaking,eselling,rediting,totyping,onmaking,rfeiting,ntrolling¦5e:chmaking,dkeeping,severing,erouting,ecreting,ephoning,uthoring,ravening,reathing,pediting,erfering,eotyping,fringing,entoring,ombining,ompeting¦4e:emaking,eething,twining,rruling,chuting,xciting,rseding,scoping,edoring,pinging,lunging,agining,craping,pleting,eleting,nciting,nfining,ncoding,tponing,ecoding,writing,esaling,nvening,gnoring,evoting,mpeding,rvening,dhering,mpiling,storing,nviting,ploring¦3e:tining,nuring,saking,miring,haling,ceding,xuding,rining,nuting,laring,caring,miling,riding,hoking,piring,lading,curing,uading,noting,taping,futing,paring,hading,loding,siring,guring,vading,voking,during,niting,laning,caping,luting,muting,ruding,ciding,juring,laming,caling,hining,uoting,liding,ciling,duling,tuting,puting,cuting,coring,uiding,tiring,turing,siding,rading,enging,haping,buting,lining,taking,anging,haring,uiring,coming,mining,moting,suring,viding,luding¦2e:tring,zling,uging,oging,gling,iging,vring,fling,lging,obing,psing,pling,ubing,cling,dling,wsing,iking,rsing,dging,kling,ysing,tling,rging,eging,nsing,uning,osing,uming,using,ibing,bling,aging,ising,asing,ating¦2ie:rlying¦1e:zing,uing,cing,ving",rev:"ying:ie¦1ing:se,ke,te,we,ne,re,de,pe,me,le,c,he¦2ing:ll,ng,dd,ee,ye,oe,rg,us¦2ning:un¦2ging:og,ag,ug,ig,eg¦2ming:um¦2bing:ub,ab,eb,ob¦3ning:lan,can,hin,pin,win¦3ring:cur,lur,tir,tar,pur,car¦3ing:ait,del,eel,fin,eat,oat,eem,lel,ool,ein,uin¦3ping:rop,rap,top,uip,wap,hip,hop,lap,rip,cap¦3ming:tem,wim,rim,kim,lim¦3ting:mat,cut,pot,lit,lot,hat,set,pit,put¦3ding:hed,bed,bid¦3king:rek¦3ling:cil,pel¦3bing:rib¦4ning:egin¦4ing:isit,ruit,ilot,nsit,dget,rkel,ival,rcel¦4ring:efer,nfer¦4ting:rmit,mmit,ysit,dmit,emit,bmit,tfit,gret¦4ling:evel,xcel,ivel¦4ding:hred¦5ing:arget,posit,rofit¦5ring:nsfer¦5ting:nsmit,orget,cquit¦5ling:ancel,istil",ex:"3:adding,eating,aiming,aiding,airing,outing,gassing,setting,getting,putting,cutting,winning,sitting,betting,mapping,tapping,letting,bidding,hitting,tanning,netting,popping,fitting,capping,lapping,barring,banning,vetting,topping,rotting,tipping,potting,wetting,pitting,dipping,budding,hemming,pinning,jetting,kidding,padding,podding,sipping,wedding,bedding,donning,warring,penning,gutting,cueing,wadding,petting,ripping,napping,matting,tinning,binning,dimming,hopping,mopping,nodding,panning,rapping,ridding,sinning¦4:selling,falling,calling,waiting,editing,telling,rolling,heating,boating,hanging,beating,coating,singing,tolling,felling,polling,discing,seating,voiding,gelling,yelling,baiting,reining,ruining,seeking,spanning,stepping,knitting,emitting,slipping,quitting,dialing,omitting,clipping,shutting,skinning,abutting,flipping,trotting,cramming,fretting,suiting¦5:bringing,treating,spelling,stalling,trolling,expelling,rivaling,wringing,deterring,singeing,befitting,refitting¦6:enrolling,distilling,scrolling,strolling,caucusing,travelling¦7:installing,redefining,stencilling,recharging,overeating,benefiting,unraveling,programing¦9:reprogramming¦is:being¦2e:using,aging,owing¦3e:making,taking,coming,noting,hiring,filing,coding,citing,doping,baking,coping,hoping,lading,caring,naming,voting,riding,mining,curing,lining,ruling,typing,boring,dining,firing,hiding,piling,taping,waning,baling,boning,faring,honing,wiping,luring,timing,wading,piping,fading,biting,zoning,daring,waking,gaming,raking,ceding,tiring,coking,wining,joking,paring,gaping,poking,pining,coring,liming,toting,roping,wiring,aching¦4e:writing,storing,eroding,framing,smoking,tasting,wasting,phoning,shaking,abiding,braking,flaking,pasting,priming,shoring,sloping,withing,hinging¦5e:defining,refining,renaming,swathing,fringing,reciting¦1ie:dying,tying,lying,vying¦7e:sunbathing"},Ra={fwd:"1:mt¦2:llen¦3:iven,aken¦:ne¦y:in",both:"1:wn¦2:me,aten¦3:seen,bidden,isen¦4:roven,asten¦3l:pilt¦3d:uilt¦2e:itten¦1im:wum¦1eak:poken¦1ine:hone¦1ose:osen¦1in:gun¦1ake:woken¦ear:orn¦eal:olen¦eeze:ozen¦et:otten¦ink:unk¦ing:ung",rev:"2:un¦oken:eak¦ought:eek¦oven:eave¦1ne:o¦1own:ly¦1den:de¦1in:ay¦2t:am¦2n:ee¦3en:all¦4n:rive,sake,take¦5n:rgive",ex:"2:been¦3:seen,run¦4:given,taken¦5:shaken¦2eak:broken¦1ive:dove¦2y:flown¦3e:hidden,ridden¦1eek:sought¦1ake:woken¦1eave:woven"},Qa={fwd:"1:oes¦1ve:as",both:"1:xes¦2:zzes,ches,shes,sses¦3:iases¦2y:llies,plies¦1y:cies,bies,ties,vies,nies,pies,dies,ries,fies¦:s",rev:"1ies:ly¦2es:us,go,do¦3es:cho,eto",ex:"2:does,goes¦3:gasses¦5:focuses¦is:are¦3y:relies¦2y:flies¦2ve:has"},Za={fwd:"1st:e¦1est:l,m,f,s¦1iest:cey¦2est:or,ir¦3est:ver",both:"4:east¦5:hwest¦5lest:erful¦4est:weet,lgar,tter,oung¦4most:uter¦3est:ger,der,rey,iet,ong,ear¦3test:lat¦3most:ner¦2est:pt,ft,nt,ct,rt,ht¦2test:it¦2gest:ig¦1est:b,k,n,p,h,d,w¦iest:y",rev:"1:ttest,nnest,yest¦2:sest,stest,rmest,cest,vest,lmest,olest,ilest,ulest,ssest,imest,uest¦3:rgest,eatest,oorest,plest,allest,urest,iefest,uelest,blest,ugest,amest,yalest,ealest,illest,tlest,itest¦4:cerest,eriest,somest,rmalest,ndomest,motest,uarest,tiffest¦5:leverest,rangest¦ar:urthest¦3ey:riciest",ex:"best:good¦worst:bad¦5est:great¦4est:fast,full,fair,dull¦3test:hot,wet,fat¦4nest:thin¦1urthest:far¦3est:gay,shy,ill¦4test:neat¦4st:late,wide,fine,safe,cute,fake,pale,rare,rude,sore,ripe,dire¦6st:severe"},_a={fwd:"1:tistic,eable,lful,sful,ting,tty¦2:onate,rtable,geous,ced,seful,ctful¦3:ortive,ented¦arity:ear¦y:etic¦fulness:begone¦1ity:re¦1y:tiful,gic¦2ity:ile,imous,ilous,ime¦2ion:ated¦2eness:iving¦2y:trious¦2ation:iring¦2tion:vant¦3ion:ect¦3ce:mant,mantic¦3tion:irable¦3y:est,estic¦3m:mistic,listic¦3ess:ning¦4n:utious¦4on:rative,native,vative,ective¦4ce:erant",both:"1:king,wing¦2:alous,ltuous,oyful,rdous¦3:gorous,ectable,werful,amatic¦4:oised,usical,agical,raceful,ocused,lined,ightful¦5ness:stful,lding,itous,nuous,ulous,otous,nable,gious,ayful,rvous,ntous,lsive,peful,entle,ciful,osive,leful,isive,ncise,reful,mious¦5ty:ivacious¦5ties:ubtle¦5ce:ilient,adiant,atient¦5cy:icient¦5sm:gmatic¦5on:sessive,dictive¦5ity:pular,sonal,eative,entic¦5sity:uminous¦5ism:conic¦5nce:mperate¦5ility:mitable¦5ment:xcited¦5n:bitious¦4cy:brant,etent,curate¦4ility:erable,acable,icable,ptable¦4ty:nacious,aive,oyal,dacious¦4n:icious¦4ce:vient,erent,stent,ndent,dient,quent,ident¦4ness:adic,ound,hing,pant,sant,oing,oist,tute¦4icity:imple¦4ment:fined,mused¦4ism:otic¦4ry:dantic¦4ity:tund,eral¦4edness:hand¦4on:uitive¦4lity:pitable¦4sm:eroic,namic¦4sity:nerous¦3th:arm¦3ility:pable,bable,dable,iable¦3cy:hant,nant,icate¦3ness:red,hin,nse,ict,iet,ite,oud,ind,ied,rce¦3ion:lute¦3ity:ual,gal,volous,ial¦3ce:sent,fensive,lant,gant,gent,lent,dant¦3on:asive¦3m:fist,sistic,iastic¦3y:terious,xurious,ronic,tastic¦3ur:amorous¦3e:tunate¦3ation:mined¦3sy:rteous¦3ty:ain¦3ry:ave¦3ment:azed¦2ness:de,on,ue,rn,ur,ft,rp,pe,om,ge,rd,od,ay,ss,er,ll,oy,ap,ht,ld,ad,rt¦2inousness:umous¦2ity:neous,ene,id,ane¦2cy:bate,late¦2ation:ized¦2ility:oble,ible¦2y:odic¦2e:oving,aring¦2s:ost¦2itude:pt¦2dom:ee¦2ance:uring¦2tion:reet¦2ion:oted¦2sion:ending¦2liness:an¦2or:rdent¦1th:ung¦1e:uable¦1ness:w,h,k,f¦1ility:mble¦1or:vent¦1ement:ging¦1tiquity:ncient¦1ment:hed¦verty:or¦ength:ong¦eat:ot¦pth:ep¦iness:y",rev:"",ex:"5:forceful,humorous¦8:charismatic¦13:understanding¦5ity:active¦11ness:adventurous,inquisitive,resourceful¦8on:aggressive,automatic,perceptive¦7ness:amorous,fatuous,furtive,ominous,serious¦5ness:ample,sweet¦12ness:apprehensive,cantankerous,contemptuous,ostentatious¦13ness:argumentative,conscientious¦9ness:assertive,facetious,imperious,inventive,oblivious,rapacious,receptive,seditious,whimsical¦10ness:attractive,expressive,impressive,loquacious,salubrious,thoughtful¦3edom:boring¦4ness:calm,fast,keen,tame¦8ness:cheerful,gracious,specious,spurious,timorous,unctuous¦5sity:curious¦9ion:deliberate¦8ion:desperate¦6e:expensive¦7ce:fragrant¦3y:furious¦9ility:ineluctable¦6ism:mystical¦8ity:physical,proactive,sensitive,vertical¦5cy:pliant¦7ity:positive¦9ity:practical¦12ism:professional¦6ce:prudent¦3ness:red¦6cy:vagrant¦3dom:wise"};const Xa=function(e="",t={}){let n=function(e,t={}){return t.hasOwnProperty(e)?t[e]:null}(e,t.ex);return n=n||function(e,t=[]){for(let n=0;n=1;r-=1){let o=e.length-r,a=e.substring(o,e.length);if(!0===t.hasOwnProperty(a))return e.slice(0,o)+t[a];if(!0===n.hasOwnProperty(a))return e.slice(0,o)+n[a]}return t.hasOwnProperty("")?e+t[""]:n.hasOwnProperty("")?e+n[""]:null}(e,t.fwd,t.both),n=n||e,n},Ya=function(e){return Object.entries(e).reduce(((e,t)=>(e[t[1]]=t[0],e)),{})},ei=function(e={}){return{reversed:!0,both:Ya(e.both),ex:Ya(e.ex),fwd:e.rev||{}}},ti=/^([0-9]+)/,ni=function(e){let t=function(e){let t={};return e.split("¦").forEach((e=>{let[n,r]=e.split(":");r=(r||"").split(","),r.forEach((e=>{t[e]=n}))})),t}(e);return Object.keys(t).reduce(((e,n)=>(e[n]=function(e="",t=""){let n=(t=String(t)).match(ti);if(null===n)return t;let r=Number(n[1])||0;return e.substring(0,r)+t.replace(ti,"")}(n,t[n]),e)),{})},ri=function(e={}){return"string"==typeof e&&(e=JSON.parse(e)),e.fwd=ni(e.fwd||""),e.both=ni(e.both||""),e.rev=ni(e.rev||""),e.ex=ni(e.ex||""),e},oi=ri({fwd:"1:tted,wed,gged,nned,een,rred,pped,yed,bbed,oed,dded,rd,wn,mmed¦2:eed,nded,et,hted,st,oled,ut,emed,eled,lded,ken,rt,nked,apt,ant,eped,eked¦3:eared,eat,eaded,nelled,ealt,eeded,ooted,eaked,eaned,eeted,mited,bid,uit,ead,uited,ealed,geted,velled,ialed,belled¦4:ebuted,hined,comed¦y:ied¦ome:ame¦ear:ore¦ind:ound¦ing:ung,ang¦ep:pt¦ink:ank,unk¦ig:ug¦all:ell¦ee:aw¦ive:ave¦eeze:oze¦old:eld¦ave:ft¦ake:ook¦ell:old¦ite:ote¦ide:ode¦ine:one¦in:un,on¦eal:ole¦im:am¦ie:ay¦and:ood¦1ise:rose¦1eak:roke¦1ing:rought¦1ive:rove¦1el:elt¦1id:bade¦1et:got¦1y:aid¦1it:sat¦3e:lid¦3d:pent",both:"1:aed,fed,xed,hed¦2:sged,xted,wled,rped,lked,kied,lmed,lped,uped,bted,rbed,rked,wned,rled,mped,fted,mned,mbed,zzed,omed,ened,cked,gned,lted,sked,ued,zed,nted,ered,rted,rmed,ced,sted,rned,ssed,rded,pted,ved,cted¦3:cled,eined,siped,ooned,uked,ymed,jored,ouded,ioted,oaned,lged,asped,iged,mured,oided,eiled,yped,taled,moned,yled,lit,kled,oaked,gled,naled,fled,uined,oared,valled,koned,soned,aided,obed,ibed,meted,nicked,rored,micked,keted,vred,ooped,oaded,rited,aired,auled,filled,ouled,ooded,ceted,tolled,oited,bited,aped,tled,vored,dled,eamed,nsed,rsed,sited,owded,pled,sored,rged,osed,pelled,oured,psed,oated,loned,aimed,illed,eured,tred,ioned,celled,bled,wsed,ooked,oiled,itzed,iked,iased,onged,ased,ailed,uned,umed,ained,auded,nulled,ysed,eged,ised,aged,oined,ated,used,dged,doned¦4:ntied,efited,uaked,caded,fired,roped,halled,roked,himed,culed,tared,lared,tuted,uared,routed,pited,naked,miled,houted,helled,hared,cored,caled,tired,peated,futed,ciled,called,tined,moted,filed,sided,poned,iloted,honed,lleted,huted,ruled,cured,named,preted,vaded,sured,talled,haled,peded,gined,nited,uided,ramed,feited,laked,gured,ctored,unged,pired,cuted,voked,eloped,ralled,rined,coded,icited,vided,uaded,voted,mined,sired,noted,lined,nselled,luted,jured,fided,puted,piled,pared,olored,cided,hoked,enged,tured,geoned,cotted,lamed,uiled,waited,udited,anged,luded,mired,uired,raded¦5:modelled,izzled,eleted,umpeted,ailored,rseded,treated,eduled,ecited,rammed,eceded,atrolled,nitored,basted,twined,itialled,ncited,gnored,ploded,xcited,nrolled,namelled,plored,efeated,redited,ntrolled,nfined,pleted,llided,lcined,eathed,ibuted,lloted,dhered,cceded¦3ad:sled¦2aw:drew¦2ot:hot¦2ke:made¦2ow:hrew,grew¦2ose:hose¦2d:ilt¦2in:egan¦1un:ran¦1ink:hought¦1ick:tuck¦1ike:ruck¦1eak:poke,nuck¦1it:pat¦1o:did¦1ow:new¦1ake:woke¦go:went",rev:"3:rst,hed,hut,cut,set¦4:tbid¦5:dcast,eread,pread,erbid¦ought:uy,eek¦1ied:ny,ly,dy,ry,fy,py,vy,by,ty,cy¦1ung:ling,ting,wing¦1pt:eep¦1ank:rink¦1ore:bear,wear¦1ave:give¦1oze:reeze¦1ound:rind,wind¦1ook:take,hake¦1aw:see¦1old:sell¦1ote:rite¦1ole:teal¦1unk:tink¦1am:wim¦1ay:lie¦1ood:tand¦1eld:hold¦2d:he,ge,re,le,leed,ne,reed,be,ye,lee,pe,we¦2ed:dd,oy,or,ey,gg,rr,us,ew,to¦2ame:ecome,rcome¦2ped:ap¦2ged:ag,og,ug,eg¦2bed:ub,ab,ib,ob¦2lt:neel¦2id:pay¦2ang:pring¦2ove:trive¦2med:um¦2ode:rride¦2at:ysit¦3ted:mit,hat,mat,lat,pot,rot,bat¦3ed:low,end,tow,und,ond,eem,lay,cho,dow,xit,eld,ald,uld,law,lel,eat,oll,ray,ank,fin,oam,out,how,iek,tay,haw,ait,vet,say,cay,bow¦3d:ste,ede,ode,ete,ree,ude,ame,oke,ote,ime,ute,ade¦3red:lur,cur,pur,car¦3ped:hop,rop,uip,rip,lip,tep,top¦3ded:bed,rod,kid¦3ade:orbid¦3led:uel¦3ned:lan,can,kin,pan,tun¦3med:rim,lim¦4ted:quit,llot¦4ed:pear,rrow,rand,lean,mand,anel,pand,reet,link,abel,evel,imit,ceed,ruit,mind,peal,veal,hool,head,pell,well,mell,uell,band,hear,weak¦4led:nnel,qual,ebel,ivel¦4red:nfer,efer,sfer¦4n:sake,trew¦4d:ntee¦4ded:hred¦4ned:rpin¦5ed:light,nceal,right,ndear,arget,hread,eight,rtial,eboot¦5d:edite,nvite¦5ted:egret¦5led:ravel",ex:"2:been,upped¦3:added,aged,aided,aimed,aired,bid,died,dyed,egged,erred,eyed,fit,gassed,hit,lied,owed,pent,pied,tied,used,vied,oiled,outed,banned,barred,bet,canned,cut,dipped,donned,ended,feed,inked,jarred,let,manned,mowed,netted,padded,panned,pitted,popped,potted,put,set,sewn,sowed,tanned,tipped,topped,vowed,weed,bowed,jammed,binned,dimmed,hopped,mopped,nodded,pinned,rigged,sinned,towed,vetted¦4:ached,baked,baled,boned,bored,called,caned,cared,ceded,cited,coded,cored,cubed,cured,dared,dined,edited,exited,faked,fared,filed,fined,fired,fuelled,gamed,gelled,hired,hoped,joked,lined,mined,named,noted,piled,poked,polled,pored,pulled,reaped,roamed,rolled,ruled,seated,shed,sided,timed,tolled,toned,voted,waited,walled,waned,winged,wiped,wired,zoned,yelled,tamed,lubed,roped,faded,mired,caked,honed,banged,culled,heated,raked,welled,banded,beat,cast,cooled,cost,dealt,feared,folded,footed,handed,headed,heard,hurt,knitted,landed,leaked,leapt,linked,meant,minded,molded,neared,needed,peaked,plodded,plotted,pooled,quit,read,rooted,sealed,seeded,seeped,shipped,shunned,skimmed,slammed,sparred,stemmed,stirred,suited,thinned,twinned,swayed,winked,dialed,abutted,blotted,fretted,healed,heeded,peeled,reeled¦5:basted,cheated,equalled,eroded,exiled,focused,opined,pleated,primed,quoted,scouted,shored,sloped,smoked,sniped,spelled,spouted,routed,staked,stored,swelled,tasted,treated,wasted,smelled,dwelled,honored,prided,quelled,eloped,scared,coveted,sweated,breaded,cleared,debuted,deterred,freaked,modeled,pleaded,rebutted,speeded¦6:anchored,defined,endured,impaled,invited,refined,revered,strolled,cringed,recast,thrust,unfolded¦7:authored,combined,competed,conceded,convened,excreted,extruded,redefined,restored,secreted,rescinded,welcomed¦8:expedited,infringed¦9:interfered,intervened,persevered¦10:contravened¦eat:ate¦is:was¦go:went¦are:were¦3d:bent,lent,rent,sent¦3e:bit,fled,hid,lost¦3ed:bled,bred¦2ow:blew,grew¦1uy:bought¦2tch:caught¦1o:did¦1ive:dove,gave¦2aw:drew¦2ed:fed¦2y:flew,laid,paid,said¦1ight:fought¦1et:got¦2ve:had¦1ang:hung¦2ad:led¦2ght:lit¦2ke:made¦2et:met¦1un:ran¦1ise:rose¦1it:sat¦1eek:sought¦1each:taught¦1ake:woke,took¦1eave:wove¦2ise:arose¦1ear:bore,tore,wore¦1ind:bound,found,wound¦2eak:broke¦2ing:brought,wrung¦1ome:came¦2ive:drove¦1ig:dug¦1all:fell¦2el:felt¦4et:forgot¦1old:held¦2ave:left¦1ing:rang,sang¦1ide:rode¦1ink:sank¦1ee:saw¦2ine:shone¦4e:slid¦1ell:sold,told¦4d:spent¦2in:spun¦1in:won"}),ai=ri(Qa),ii=ri(Ua),si=ri(Ra),li=ei(oi),ui=ei(ai),ci=ei(ii),hi=ei(si),di=ri(qa),gi=ri(Za);var mi={fromPast:oi,fromPresent:ai,fromGerund:ii,fromParticiple:si,toPast:li,toPresent:ui,toGerund:ci,toParticiple:hi,toComparative:di,toSuperlative:gi,fromComparative:ei(di),fromSuperlative:ei(gi),adjToNoun:ri(_a)},pi=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","bureau","cafe","co","caisse","capital","care","cathedral","center","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","data","departement","department","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","faculty","faction","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","llc","ltd","limited","machines","magazine","management","marine","marketing","markets","media","memorial","ministere","ministry","military","mobile","motor","motors","musee","museum","news","observatory","office","oil","optical","orchestra","organization","partners","partnership","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","politburo","polytechnic","post","power","press","productions","quartet","radio","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","societe","subsidiary","society","sons","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce(((e,t)=>(e[t]=!0,e)),{}),fi=["atoll","basin","bay","beach","bluff","bog","camp","canyon","canyons","cape","cave","caves","cliffs","coast","cove","coves","crater","crossing","creek","desert","dune","dunes","downs","estates","escarpment","estuary","falls","fjord","fjords","forest","forests","glacier","gorge","gorges","grove","gulf","gully","highland","heights","hollow","hill","hills","inlet","island","islands","isthmus","junction","knoll","lagoon","lake","lakeshore","marsh","marshes","mount","mountain","mountains","narrows","peninsula","plains","plateau","pond","rapids","ravine","reef","reefs","ridge","river","rivers","sandhill","shoal","shore","shoreline","shores","strait","straits","springs","stream","swamp","tombolo","trail","trails","trench","valley","vallies","village","volcano","waterfall","watershed","wetland","woods","acres","burough","county","district","municipality","prefecture","province","region","reservation","state","territory","borough","metropolis","downtown","uptown","midtown","city","town","township","hamlet","country","kingdom","enclave","neighbourhood","neighborhood","kingdom","ward","zone","airport","amphitheater","arch","arena","auditorium","bar","barn","basilica","battlefield","bridge","building","castle","centre","coliseum","cineplex","complex","dam","farm","field","fort","garden","gardens","gymnasium","hall","house","levee","library","manor","memorial","monument","museum","gallery","palace","pillar","pits","plantation","playhouse","quarry","sportsfield","sportsplex","stadium","terrace","terraces","theater","tower","park","parks","site","ranch","raceway","sportsplex","ave","st","street","rd","road","lane","landing","crescent","cr","way","tr","terrace","avenue"].reduce(((e,t)=>(e[t]=!0,e)),{}),bi=[[/([^v])ies$/i,"$1y"],[/(ise)s$/i,"$1"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(ause)s$/i,"$1"],[/(ease)s$/i,"$1"],[/(ious)es$/i,"$1"],[/(ouse)s$/i,"$1"],[/(ose)s$/i,"$1"],[/(..ase)s$/i,"$1"],[/(..[aeiu]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/([xo]|ch|ss|sh)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ic)s$/i,"$1"],[/s$/i,""]];const vi=function(e,t){const{irregularPlurals:n}=t.two,r=(o=n,Object.keys(o).reduce(((e,t)=>(e[o[t]]=t,e)),{}));var o;if(r.hasOwnProperty(e))return r[e];for(let t=0;t(wi[t].forEach((n=>e[n]=t)),e)),{});const ki=function(e){const t=e.substring(e.length-3);if(!0===wi.hasOwnProperty(t))return wi[t];const n=e.substring(e.length-2);if(!0===wi.hasOwnProperty(n))return wi[n];return"s"===e.substring(e.length-1)?"PresentTense":null},Pi={are:"be",were:"be",been:"be",is:"be",am:"be",was:"be",be:"be",being:"be"},Ai=function(e,t,n){const{fromPast:r,fromPresent:o,fromGerund:a,fromParticiple:i}=t.two.models,{prefix:s,verb:l,particle:u}=function(e,t){let n="",r={};t.one&&t.one.prefixes&&(r=t.one.prefixes);let[o,a]=e.split(/ /);return a&&!0===r[o]&&(n=o,o=a,a=""),{prefix:n,verb:o,particle:a}}(e,t);let c="";if(n||(n=ki(e)),Pi.hasOwnProperty(e))c=Pi[e];else if("Participle"===n)c=Xa(l,i);else if("PastTense"===n)c=Xa(l,r);else if("PresentTense"===n)c=Xa(l,o);else{if("Gerund"!==n)return e;c=Xa(l,a)}return u&&(c+=" "+u),s&&(c=s+" "+c),c},Ci=function(e,t){const{toPast:n,toPresent:r,toGerund:o,toParticiple:a}=t.two.models;if("be"===e)return{Infinitive:e,Gerund:"being",PastTense:"was",PresentTense:"is"};const[i,s]=(e=>/ /.test(e)?e.split(/ /):[e,""])(e),l={Infinitive:i,PastTense:Xa(i,n),PresentTense:Xa(i,r),Gerund:Xa(i,o),FutureTense:"will "+i};let u=Xa(i,a);if(u!==e&&u!==l.PastTense){const n=t.one.lexicon||{};"Participle"!==n[u]&&"Adjective"!==n[u]||("play"===e&&(u="played"),l.Participle=u)}return s&&Object.keys(l).forEach((e=>{l[e]+=" "+s})),l};var Ni={toInfinitive:Ai,conjugate:Ci,all:function(e,t){const n=Ci(e,t);return delete n.FutureTense,Object.values(n).filter((e=>e))}};const ji=function(e,t){const n=t.two.models.toSuperlative;return Xa(e,n)},xi=function(e,t){const n=t.two.models.toComparative;return Xa(e,n)},Ii=function(e="",t=[]){const n=e.length;for(let r=n<=6?n-1:6;r>=1;r-=1){const o=e.substring(n-r,e.length);if(!0===t[o.length].hasOwnProperty(o)){return e.slice(0,n-r)+t[o.length][o]}}return null},Ti="ically",Di=new Set(["analyt"+Ti,"chem"+Ti,"class"+Ti,"clin"+Ti,"crit"+Ti,"ecolog"+Ti,"electr"+Ti,"empir"+Ti,"frant"+Ti,"grammat"+Ti,"ident"+Ti,"ideolog"+Ti,"log"+Ti,"mag"+Ti,"mathemat"+Ti,"mechan"+Ti,"med"+Ti,"method"+Ti,"method"+Ti,"mus"+Ti,"phys"+Ti,"phys"+Ti,"polit"+Ti,"pract"+Ti,"rad"+Ti,"satir"+Ti,"statist"+Ti,"techn"+Ti,"technolog"+Ti,"theoret"+Ti,"typ"+Ti,"vert"+Ti,"whims"+Ti]),Hi=[null,{},{ly:""},{ily:"y",bly:"ble",ply:"ple"},{ally:"al",rply:"rp"},{ually:"ual",ially:"ial",cally:"cal",eally:"eal",rally:"ral",nally:"nal",mally:"mal",eeply:"eep",eaply:"eap"},{ically:"ic"}],Ei=new Set(["early","only","hourly","daily","weekly","monthly","yearly","mostly","duly","unduly","especially","undoubtedly","conversely","namely","exceedingly","presumably","accordingly","overly","best","latter","little","long","low"]),Gi={wholly:"whole",fully:"full",truly:"true",gently:"gentle",singly:"single",customarily:"customary",idly:"idle",publically:"public",quickly:"quick",superbly:"superb",cynically:"cynical",well:"good"},Oi=[null,{y:"ily"},{ly:"ly",ic:"ically"},{ial:"ially",ual:"ually",tle:"tly",ble:"bly",ple:"ply",ary:"arily"},{},{},{}],Fi={cool:"cooly",whole:"wholly",full:"fully",good:"well",idle:"idly",public:"publicly",single:"singly",special:"especially"},Vi=function(e){if(Fi.hasOwnProperty(e))return Fi[e];let t=Ii(e,Oi);return t||(t=e+"ly"),t};var zi={toSuperlative:ji,toComparative:xi,toAdverb:Vi,toNoun:function(e,t){const n=t.two.models.adjToNoun;return Xa(e,n)},fromAdverb:function(e){return e.endsWith("ly")?Di.has(e)?e.replace(/ically/,"ical"):Ei.has(e)?null:Gi.hasOwnProperty(e)?Gi[e]:Ii(e,Hi)||e:null},fromSuperlative:function(e,t){const n=t.two.models.fromSuperlative;return Xa(e,n)},fromComparative:function(e,t){const n=t.two.models.fromComparative;return Xa(e,n)},all:function(e,t){let n=[e];return n.push(ji(e,t)),n.push(xi(e,t)),n.push(Vi(e)),n=n.filter((e=>e)),n=new Set(n),Array.from(n)}},Bi={noun:yi,verb:Ni,adjective:zi},Si={Singular:(e,t,n,r)=>{const o=r.one.lexicon,a=n.two.transform.noun.toPlural(e,r);o[a]||(t[a]=t[a]||"Plural")},Actor:(e,t,n,r)=>{const o=r.one.lexicon,a=n.two.transform.noun.toPlural(e,r);o[a]||(t[a]=t[a]||["Plural","Actor"])},Comparable:(e,t,n,r)=>{const o=r.one.lexicon,{toSuperlative:a,toComparative:i}=n.two.transform.adjective,s=a(e,r);o[s]||(t[s]=t[s]||"Superlative");const l=i(e,r);o[l]||(t[l]=t[l]||"Comparative"),t[e]="Adjective"},Demonym:(e,t,n,r)=>{const o=n.two.transform.noun.toPlural(e,r);t[o]=t[o]||["Demonym","Plural"]},Infinitive:(e,t,n,r)=>{const o=r.one.lexicon,a=n.two.transform.verb.conjugate(e,r);Object.entries(a).forEach((e=>{o[e[1]]||t[e[1]]||"FutureTense"===e[0]||(t[e[1]]=e[0])}))},PhrasalVerb:(e,t,n,r)=>{const o=r.one.lexicon;t[e]=["PhrasalVerb","Infinitive"];const a=r.one._multiCache,[i,s]=e.split(" ");o[i]||(t[i]=t[i]||"Infinitive");const l=n.two.transform.verb.conjugate(i,r);delete l.FutureTense,Object.entries(l).forEach((e=>{if("Actor"===e[0]||""===e[1])return;t[e[1]]||o[e[1]]||(t[e[1]]=e[0]),a[e[1]]=2;const n=e[1]+" "+s;t[n]=t[n]||[e[0],"PhrasalVerb"]}))},Multiple:(e,t)=>{t[e]=["Multiple","Cardinal"],t[e+"th"]=["Multiple","Ordinal"],t[e+"ths"]=["Multiple","Fraction"]},Cardinal:(e,t)=>{t[e]=["TextValue","Cardinal"]},Ordinal:(e,t)=>{t[e]=["TextValue","Ordinal"],t[e+"s"]=["TextValue","Fraction"]},Place:(e,t)=>{t[e]=["Place","ProperNoun"]},Region:(e,t)=>{t[e]=["Region","ProperNoun"]}};const $i={e:["mice","louse","antennae","formulae","nebulae","vertebrae","vitae"],i:["tia","octopi","viri","radii","nuclei","fungi","cacti","stimuli"],n:["men"],t:["feet"]},Mi=new Set(["israelis","menus","logos"]),Li=["bus","mas","was","ias","xas","vas","cis","lis","nis","ois","ris","sis","tis","xis","aus","cus","eus","fus","gus","ius","lus","nus","das","ous","pus","rus","sus","tus","xus","aos","igos","ados","ogos","'s","ss"],Ki=function(e){if(!e||e.length<=3)return!1;if(Mi.has(e))return!0;const t=e[e.length-1];return $i.hasOwnProperty(t)?$i[t].find((t=>e.endsWith(t))):"s"===t&&!Li.find((t=>e.endsWith(t)))};var Ji={two:{quickSplit:function(e){const t=/[,:;]/,n=[];return e.forEach((e=>{let r=0;e.forEach(((o,a)=>{t.test(o.post)&&function(e,t){const n=/^[0-9]+$/,r=e[t];if(!r)return!1;const o=new Set(["may","april","august","jan"]);if("like"===r.normal||o.has(r.normal))return!1;if(r.tags.has("Place")||r.tags.has("Date"))return!1;if(e[t-1]){const n=e[t-1];if(n.tags.has("Date")||o.has(n.normal))return!1;if(n.tags.has("Adjective")||r.tags.has("Adjective"))return!1}const a=r.normal;return 1!==a.length&&2!==a.length&&4!==a.length||!n.test(a)}(e,a+1)&&(n.push(e.slice(r,a+1)),r=a+1)})),r{const i=e[t],s=(t=(t=t.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);s.length>1&&(void 0===a[s[0]]||s.length>a[s[0]])&&(a[s[0]]=s.length),!0===Si.hasOwnProperty(i)&&Si[i](t,o,n,r),o[t]=o[t]||i})),delete o[""],delete o.null,delete o[" "],{lex:o,_multi:a}},transform:Bi,looksPlural:Ki}};const Wi={one:{lexicon:{}},two:{models:mi}},qi={"Actor|Verb":"Actor","Adj|Gerund":"Adjective","Adj|Noun":"Adjective","Adj|Past":"Adjective","Adj|Present":"Adjective","Noun|Verb":"Singular","Noun|Gerund":"Gerund","Person|Noun":"Noun","Person|Date":"Month","Person|Verb":"FirstName","Person|Place":"Person","Person|Adj":"Comparative","Plural|Verb":"Plural","Unit|Noun":"Noun"},Ui=function(e,t){const n={model:t,methods:Ji},{lex:r,_multi:o}=Ji.two.expandLexicon(e,n);return Object.assign(t.one.lexicon,r),Object.assign(t.one._multiCache,o),t},Ri=function(e,t,n){const r=Ci(e,Wi);t[r.PastTense]=t[r.PastTense]||"PastTense",t[r.Gerund]=t[r.Gerund]||"Gerund",!0===n&&(t[r.PresentTense]=t[r.PresentTense]||"PresentTense")},Qi=function(e,t,n){const r=ji(e,n);t[r]=t[r]||"Superlative";const o=xi(e,n);t[o]=t[o]||"Comparative"},Zi=function(e,t){const n={},r=t.one.lexicon;return Object.keys(e).forEach((o=>{const a=e[o];if(n[o]=qi[a],"Noun|Verb"!==a&&"Person|Verb"!==a&&"Actor|Verb"!==a||Ri(o,r,!1),"Adj|Present"===a&&(Ri(o,r,!0),Qi(o,r,t)),"Person|Adj"===a&&Qi(o,r,t),"Adj|Gerund"===a||"Noun|Gerund"===a){const e=Ai(o,Wi,"Gerund");r[e]||(n[e]="Infinitive")}if("Noun|Gerund"!==a&&"Adj|Noun"!==a&&"Person|Noun"!==a||function(e,t,n){const r=Ao(e,n);t[r]=t[r]||"Plural"}(o,r,t),"Adj|Past"===a){const e=Ai(o,Wi,"PastTense");r[e]||(n[e]="Infinitive")}})),t=Ui(n,t)};let _i={one:{_multiCache:{},lexicon:No,frozenLex:{"20th century fox":"Organization","7 eleven":"Organization","motel 6":"Organization","excuse me":"Expression","financial times":"Organization","guns n roses":"Organization","la z boy":"Organization","labour party":"Organization","new kids on the block":"Organization","new york times":"Organization","the guess who":"Organization","thin lizzy":"Organization","prime minister":"Actor","free market":"Singular","lay up":"Singular","living room":"Singular","living rooms":"Plural","spin off":"Singular","appeal court":"Uncountable","cold war":"Uncountable","gene pool":"Uncountable","machine learning":"Uncountable","nail polish":"Uncountable","time off":"Uncountable","take part":"Infinitive","bill gates":"Person","doctor who":"Person","dr who":"Person","he man":"Person","iron man":"Person","kid cudi":"Person","run dmc":"Person","rush limbaugh":"Person","snow white":"Person","tiger woods":"Person","brand new":"Adjective","en route":"Adjective","left wing":"Adjective","off guard":"Adjective","on board":"Adjective","part time":"Adjective","right wing":"Adjective","so called":"Adjective","spot on":"Adjective","straight forward":"Adjective","super duper":"Adjective","tip top":"Adjective","top notch":"Adjective","up to date":"Adjective","win win":"Adjective","brooklyn nets":"SportsTeam","chicago bears":"SportsTeam","houston astros":"SportsTeam","houston dynamo":"SportsTeam","houston rockets":"SportsTeam","houston texans":"SportsTeam","minnesota twins":"SportsTeam","orlando magic":"SportsTeam","san antonio spurs":"SportsTeam","san diego chargers":"SportsTeam","san diego padres":"SportsTeam","iron maiden":"ProperNoun","isle of man":"Country","united states":"Country","united states of america":"Country","prince edward island":"Region","cedar breaks":"Place","cedar falls":"Place","point blank":"Adverb","tiny bit":"Adverb","by the time":"Conjunction","no matter":"Conjunction","civil wars":"Plural","credit cards":"Plural","default rates":"Plural","free markets":"Plural","head starts":"Plural","home runs":"Plural","lay ups":"Plural","phone calls":"Plural","press releases":"Plural","record labels":"Plural","soft serves":"Plural","student loans":"Plural","tax returns":"Plural","tv shows":"Plural","video games":"Plural","took part":"PastTense","takes part":"PresentTense","taking part":"Gerund","taken part":"Participle","light bulb":"Noun","rush hour":"Noun","fluid ounce":"Unit","the rolling stones":"Organization"}},two:{irregularPlurals:ho,models:mi,suffixPatterns:ja,prefixPatterns:Da,endsWith:La,neighbours:Wa,regexNormal:[[/^[\w.]+@[\w.]+\.[a-z]{2,3}$/,"Email"],[/^(https?:\/\/|www\.)+\w+\.[a-z]{2,3}/,"Url","http.."],[/^[a-z0-9./].+\.(com|net|gov|org|ly|edu|info|biz|dev|ru|jp|de|in|uk|br|io|ai)/,"Url",".com"],[/^[PMCE]ST$/,"Timezone","EST"],[/^ma?c'[a-z]{3}/,"LastName","mc'neil"],[/^o'[a-z]{3}/,"LastName","o'connor"],[/^ma?cd[aeiou][a-z]{3}/,"LastName","mcdonald"],[/^(lol)+[sz]$/,"Expression","lol"],[/^wo{2,}a*h?$/,"Expression","wooah"],[/^(hee?){2,}h?$/,"Expression","hehe"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb","un-vite"],[/^(m|k|cm|km)\/(s|h|hr)$/,"Unit","5 k/m"],[/^(ug|ng|mg)\/(l|m3|ft3)$/,"Unit","ug/L"],[/[^:/]\/\p{Letter}/u,"SlashedTerm","love/hate"]],regexText:[[/^#[\p{Number}_]*\p{Letter}/u,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^([A-Z]\.){2}[A-Z]?/i,["Acronym","Noun"],"F.B.I"],[/.{3}[lkmnp]in['‘’‛‵′`´]$/,"Gerund","chillin'"],[/.{4}s['‘’‛‵′`´]$/,"Possessive","flanders'"],[/^[\p{Emoji_Presentation}\p{Extended_Pictographic}]/u,"Emoji","emoji-class"]],regexNumbers:[[/^@1?[0-9](am|pm)$/i,"Time","3pm"],[/^@1?[0-9]:[0-9]{2}(am|pm)?$/i,"Time","3:30pm"],[/^'[0-9]{2}$/,"Year"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time","3:12:31"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/i,"Time","1:12pm"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/i,"Time","1:12:31pm"],[/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}/i,"Date","iso-date"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date","iso-dash"],[/^[0-9]{1,4}\/[0-9]{1,2}\/([0-9]{4}|[0-9]{2})$/,"Date","iso-slash"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date","iso-dot"],[/^[0-9]{1,4}-[a-z]{2,9}-[0-9]{1,4}$/i,"Date","12-dec-2019"],[/^utc ?[+-]?[0-9]+$/,"Timezone","utc-9"],[/^(gmt|utc)[+-][0-9]{1,2}$/i,"Timezone","gmt-3"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber","421-0029"],[/^(\+?[0-9][ -])?[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber","1-800-"],[/^[-+]?\p{Currency_Symbol}[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?([kmb]|bn)?\+?$/u,["Money","Value"],"$5.30"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\p{Currency_Symbol}\+?$/u,["Money","Value"],"5.30£"],[/^[-+]?[$£]?[0-9]([0-9,.])+(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"],"$400usd"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"],"5,999"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|r?th)$/,["Ordinal","NumericValue"],"53rd"],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"],".73th"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"],"-4%"],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"],".3%"],[/^[0-9]{1,4}\/[0-9]{1,4}(st|nd|rd|th)?s?$/,["Fraction","NumericValue"],"2/3rds"],[/^[0-9.]{1,3}[a-z]{0,2}[-–—][0-9]{1,3}[a-z]{0,2}$/,["Value","NumberRange"],"3-4"],[/^[0-9]{1,2}(:[0-9][0-9])?(am|pm)? ?[-–—] ?[0-9]{1,2}(:[0-9][0-9])?(am|pm)$/,["Time","NumberRange"],"3-4pm"],[/^[0-9.]+([a-z°]{1,4})$/,"NumericValue","9km"]],switches:jo,clues:ca,uncountable:{},orgWords:pi,placeWords:fi}};_i=function(e){return e=function(e,t){return Object.keys(e).forEach((n=>{"Uncountable"===e[n]&&(t.two.uncountable[n]=!0,e[n]="Uncountable")})),t}((e=Ui(e.one.lexicon,e)).one.lexicon,e),e=function(e){const{irregularPlurals:t}=e.two,{lexicon:n}=e.one;return Object.entries(t).forEach((e=>{n[e[0]]=n[e[0]]||"Singular",n[e[1]]=n[e[1]]||"Plural"})),e}(e=Zi(e.two.switches,e)),e}(_i);const Xi=function(e,t,n,r){const o=r.methods.one.setTag;"-"===e[t].post&&e[t+1]&&o([e[t],e[t+1]],"Hyphenated",r,null,"1-punct-hyphen''")},Yi=/^(under|over|mis|re|un|dis|semi)-?/,es=function(e,t,n){const r=n.two.switches,o=e[t];if(r.hasOwnProperty(o.normal))o.switch=r[o.normal];else if(Yi.test(o.normal)){const e=o.normal.replace(Yi,"");e.length>3&&r.hasOwnProperty(e)&&(o.switch=r[e])}},ts=function(e,t,n){if(!t||0===t.length)return;if(!0===e.frozen)return;const r="undefined"!=typeof process&&process.env?process.env:self.env||{};r&&r.DEBUG_TAGS&&((e,t,n="")=>{const r=e.text||"["+e.implicit+"]";var o;"string"!=typeof t&&t.length>2&&(t=t.slice(0,2).join(", #")+" +"),t="string"!=typeof t?t.join(", #"):t,console.log(` ${(o=r,""+o+"").padEnd(24)} → #${t.padEnd(22)} ${(e=>""+e+"")(n)}`)})(e,t,n),e.tags=e.tags||new Set,"string"==typeof t?e.tags.add(t):t.forEach((t=>e.tags.add(t)))},ns=["Acronym","Abbreviation","ProperNoun","Uncountable","Possessive","Pronoun","Activity","Honorific","Month"],rs=function(e,t,n){const r=e[t],o=Array.from(r.tags);for(let e=0;ee.tags.has(t)))||(Ki(e.normal)?ts(e,"Plural","3-plural-guess"):ts(e,"Singular","3-singular-guess"))}(r),function(e){const t=e.tags;if(t.has("Verb")&&1===t.size){const t=ki(e.normal);t&&ts(e,t,"3-verb-tense-guess")}}(r)},os=/^\p{Lu}[\p{Ll}'’]/u,as=/[0-9]/,is=["Date","Month","WeekDay","Unit","Expression"],ss=/[IVX]/,ls=/^[IVXLCDM]{2,}$/,us=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,cs={li:!0,dc:!0,md:!0,dm:!0,ml:!0},hs=function(e,t,n){const r=e[t];r.index=r.index||[0,0];const o=r.index[1],a=r.text||"";return 0!==o&&!0===os.test(a)&&!1===as.test(a)?is.find((e=>r.tags.has(e)))||r.pre.match(/["']$/)||"the"===r.normal?null:(rs(e,t,n),r.tags.has("Noun")||r.frozen||r.tags.clear(),ts(r,"ProperNoun","2-titlecase"),!0):a.length>=2&&ls.test(a)&&ss.test(a)&&us.test(a)&&!cs[r.normal]?(ts(r,"RomanNumeral","2-xvii"),!0):null},ds=function(e="",t=[]){const n=e.length;let r=7;n<=r&&(r=n-1);for(let o=r;o>1;o-=1){const r=e.substring(n-o,n);if(!0===t[r.length].hasOwnProperty(r)){return t[r.length][r]}}return null},gs=function(e,t,n){const r=e[t];if(0===r.tags.size){let e=ds(r.normal,n.two.suffixPatterns);if(null!==e)return ts(r,e,"2-suffix"),r.confidence=.7,!0;if(r.implicit&&(e=ds(r.implicit,n.two.suffixPatterns),null!==e))return ts(r,e,"2-implicit-suffix"),r.confidence=.7,!0}return null},ms=/['‘’‛‵′`´]/,ps=function(e,t){for(let n=0;nn-3&&(r=n-3);for(let n=r;n>2;n-=1){const r=e.substring(0,n);if(!0===t[r.length].hasOwnProperty(r))return t[r.length][r]}return null}(r.normal,n.two.prefixPatterns);if(null!==e)return ts(r,e,"2-prefix"),r.confidence=.5,!0}return null},vs=new Set(["in","on","by","until","for","to","during","throughout","through","within","before","after","of","this","next","last","circa","around","post","pre","budget","classic","plan","may"]),ys=function(e){if(!e)return!1;const t=e.normal||e.implicit;return!!vs.has(t)||(!!(e.tags.has("Date")||e.tags.has("Month")||e.tags.has("WeekDay")||e.tags.has("Year"))||!!e.tags.has("ProperNoun"))},ws=function(e){return!!e&&(!!e.tags.has("Ordinal")||(!!(e.tags.has("Cardinal")&&e.normal.length<3)||("is"===e.normal||"was"===e.normal)))},ks=function(e){return e&&(e.tags.has("Date")||e.tags.has("Month")||e.tags.has("WeekDay")||e.tags.has("Year"))},Ps=function(e,t){const n=e[t];if(n.tags.has("NumericValue")&&n.tags.has("Cardinal")&&4===n.normal.length){const r=Number(n.normal);if(r&&!isNaN(r)&&r>1400&&r<2100){const o=e[t-1],a=e[t+1];if(ys(o)||ys(a))return ts(n,"Year","2-tagYear");if(r>=1920&&r<2025){if(ws(o)||ws(a))return ts(n,"Year","2-tagYear-close");if(ks(e[t-2])||ks(e[t+2]))return ts(n,"Year","2-tagYear-far");if(o&&(o.tags.has("Determiner")||o.tags.has("Possessive"))&&a&&a.tags.has("Noun")&&!a.tags.has("Plural"))return ts(n,"Year","2-tagYear-noun")}}}return null},As=function(e,t,n,r){const o=r.methods.one.setTag,a=e[t],i=["PastTense","PresentTense","Auxiliary","Modal","Particle"];if(a.tags.has("Verb")){i.find((e=>a.tags.has(e)))||o([a],"Infinitive",r,null,"2-verb-type''")}},Cs=/^[A-Z]('s|,)?$/,Ns=/^[A-Z-]+$/,js=/^[A-Z]+s$/,xs=/([A-Z]\.)+[A-Z]?,?$/,Is=/[A-Z]{2,}('s|,)?$/,Ts=/([a-z]\.)+[a-z]\.?$/,Ds={I:!0,A:!0},Hs={la:!0,ny:!0,us:!0,dc:!0,gb:!0},Es=function(e,t,n){const r=e[t];return r.tags.has("RomanNumeral")||r.tags.has("Acronym")||r.frozen?null:function(e,t){let n=e.text;if(!1===Ns.test(n)){if(!(n.length>3&&!0===js.test(n)))return!1;n=n.replace(/s$/,"")}return!(n.length>5||Ds.hasOwnProperty(n)||t.one.lexicon.hasOwnProperty(e.normal)||!0!==xs.test(n)&&!0!==Ts.test(n)&&!0!==Cs.test(n)&&!0!==Is.test(n))}(r,n)?(r.tags.clear(),ts(r,["Acronym","Noun"],"3-no-period-acronym"),!0===Hs[r.normal]&&ts(r,"Place","3-place-acronym"),!0===js.test(r.text)&&ts(r,"Plural","3-plural-acronym"),!0):!Ds.hasOwnProperty(r.text)&&Cs.test(r.text)?(r.tags.clear(),ts(r,["Acronym","Noun"],"3-one-letter-acronym"),!0):r.tags.has("Organization")&&r.text.length<=3?(ts(r,"Acronym","3-org-acronym"),!0):r.tags.has("Organization")&&Ns.test(r.text)&&r.text.length<=6?(ts(r,"Acronym","3-titlecase-acronym"),!0):null},Gs=function(e,t){if(!e)return null;const n=t.find((t=>e.normal===t[0]));return n?n[1]:null},Os=function(e,t){if(!e)return null;const n=t.find((t=>e.tags.has(t[0])));return n?n[1]:null},Fs=function(e,t,n){const{leftTags:r,leftWords:o,rightWords:a,rightTags:i}=n.two.neighbours,s=e[t];if(0===s.tags.size){let l=null;if(l=l||Gs(e[t-1],o),l=l||Gs(e[t+1],a),l=l||Os(e[t-1],r),l=l||Os(e[t+1],i),l)return ts(s,l,"3-[neighbour]"),rs(e,t,n),e[t].confidence=.2,!0}return null},Vs=function(e,t,n){return!!e&&(!e.tags.has("FirstName")&&!e.tags.has("Place")&&(!!(e.tags.has("ProperNoun")||e.tags.has("Organization")||e.tags.has("Acronym"))||!(n||(r=e.text,!/^\p{Lu}[\p{Ll}'’]/u.test(r)))&&(0!==t||e.tags.has("Singular"))));var r},zs=function(e,t,n,r){const o=n.model.two.orgWords,a=n.methods.one.setTag,i=e[t];if(!0===o[i.machine||i.normal]&&Vs(e[t-1],t-1,r)){a([e[t]],"Organization",n,null,"3-[org-word]");for(let o=t;o>=0&&Vs(e[o],o,r);o-=1)a([e[o]],"Organization",n,null,"3-[org-word]")}return null},Bs=/'s$/,Ss=new Set(["athletic","city","community","eastern","federal","financial","great","historic","historical","local","memorial","municipal","national","northern","provincial","southern","state","western","spring","pine","sunset","view","oak","maple","spruce","cedar","willow"]),$s=new Set(["center","centre","way","range","bar","bridge","field","pit"]),Ms=function(e,t,n){if(!e)return!1;const r=e.tags;return!(r.has("Organization")||r.has("Possessive")||Bs.test(e.normal))&&(!(!r.has("ProperNoun")&&!r.has("Place"))||!(n||(o=e.text,!/^\p{Lu}[\p{Ll}'’]/u.test(o)))&&(0!==t||r.has("Singular")));var o},Ls=function(e,t,n,r){const o=n.model.two.placeWords,a=n.methods.one.setTag,i=e[t],s=i.machine||i.normal;if(!0===o[s]){for(let o=t-1;o>=0;o-=1)if(!Ss.has(e[o].normal)){if(!Ms(e[o],o,r))break;a(e.slice(o,t+1),"Place",n,null,"3-[place-of-foo]")}if($s.has(s))return!1;for(let o=t+1;oe[t].tags.has("ProperNoun")&&Js.test(e[t].text)?"Noun":null,qs=(e,t,n)=>0!==t||e[1]?null:n,Us={"Adj|Gerund":(e,t)=>Ws(e,t),"Adj|Noun":(e,t)=>Ws(e,t)||function(e,t){return!e[t+1]&&e[t-1]&&e[t-1].tags.has("Determiner")?"Noun":null}(e,t),"Actor|Verb":(e,t)=>Ws(e,t),"Adj|Past":(e,t)=>Ws(e,t),"Adj|Present":(e,t)=>Ws(e,t),"Noun|Gerund":(e,t)=>Ws(e,t),"Noun|Verb":(e,t)=>t>0&&Ws(e,t)||qs(e,t,"Infinitive"),"Plural|Verb":(e,t)=>Ws(e,t)||qs(e,t,"PresentTense")||function(e,t,n){return 0===t&&e.length>3?n:null}(e,t,"Plural"),"Person|Noun":(e,t)=>Ws(e,t),"Person|Verb":(e,t)=>0!==t?Ws(e,t):null,"Person|Adj":(e,t)=>0===t&&e.length>1||Ws(e,t)?"Person":null},Rs="undefined"!=typeof process&&process.env?process.env:self.env||{},Qs=/^(under|over|mis|re|un|dis|semi)-?/,Zs=(e,t)=>{if(!e||!t)return null;const n=e.normal||e.implicit;let r=null;return t.hasOwnProperty(n)&&(r=t[n]),r&&Rs.DEBUG_TAGS&&console.log(`\n  ↓ - '${n}' `),r},_s=(e,t={},n)=>{if(!e||!t)return null;const r=Array.from(e.tags).sort(((e,t)=>(n[e]?n[e].parents.length:0)>(n[t]?n[t].parents.length:0)?-1:1));let o=r.find((e=>t[e]));return o&&Rs.DEBUG_TAGS&&console.log(`  ↓ - '${e.normal||e.implicit}' (#${o}) `),o=t[o],o},Xs=function(e,t,n){const r=n.model,o=n.methods.one.setTag,{switches:a,clues:i}=r.two,s=e[t];let l=s.normal||s.implicit||"";if(Qs.test(l)&&!a[l]&&(l=l.replace(Qs,"")),s.switch){const a=s.switch;if(s.tags.has("Acronym")||s.tags.has("PhrasalVerb"))return;let u=function(e,t,n,r){if(!n)return null;const o="also"!==e[t-1]?.text?t-1:Math.max(0,t-2),a=r.one.tagSet;let i=Zs(e[t+1],n.afterWords);return i=i||Zs(e[o],n.beforeWords),i=i||_s(e[o],n.beforeTags,a),i=i||_s(e[t+1],n.afterTags,a),i}(e,t,i[a],r);Us[a]&&(u=Us[a](e,t)||u),u?(o([s],u,n,null,`3-[switch] (${a})`),rs(e,t,r)):Rs.DEBUG_TAGS&&console.log(`\n -> X - '${l}' : (${a}) `)}},Ys={there:!0,this:!0,it:!0,him:!0,her:!0,us:!0},el=function(e){if(e.filter((e=>!e.tags.has("ProperNoun"))).length<=3)return!1;const t=/^[a-z]/;return e.every((e=>!t.test(e.text)))},tl=function(e,t,n,r){for(let o=0;o=2){if(e.length<4&&!Ys[e[1].normal])return;if(!o.tags.has("PhrasalVerb")&&r.hasOwnProperty(o.normal))return;(e[1].tags.has("Noun")||e[1].tags.has("Determiner"))&&(e.slice(1,3).some((e=>e.tags.has("Verb")))&&!o.tags.has("#PhrasalVerb")||n([o],"Imperative",t,null,"3-[imperative]"))}}(e,n)},rl={Possessive:e=>{let t=e.machine||e.normal||e.text;return t=t.replace(/'s$/,""),t},Plural:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.noun.toSingular(n,t.model)},Copula:()=>"is",PastTense:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.verb.toInfinitive(n,t.model,"PastTense")},Gerund:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.verb.toInfinitive(n,t.model,"Gerund")},PresentTense:(e,t)=>{const n=e.machine||e.normal||e.text;return e.tags.has("Infinitive")?n:t.methods.two.transform.verb.toInfinitive(n,t.model,"PresentTense")},Comparative:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.adjective.fromComparative(n,t.model)},Superlative:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.adjective.fromSuperlative(n,t.model)},Adverb:(e,t)=>{const{fromAdverb:n}=t.methods.two.transform.adjective;return n(e.machine||e.normal||e.text)}},ol={Adverb:"RB",Comparative:"JJR",Superlative:"JJS",Adjective:"JJ",TO:"Conjunction",Modal:"MD",Auxiliary:"MD",Gerund:"VBG",PastTense:"VBD",Participle:"VBN",PresentTense:"VBZ",Infinitive:"VB",Particle:"RP",Verb:"VB",Pronoun:"PRP",Cardinal:"CD",Conjunction:"CC",Determiner:"DT",Preposition:"IN",QuestionWord:"WP",Expression:"UH",Possessive:"POS",ProperNoun:"NNP",Person:"NNP",Place:"NNP",Organization:"NNP",Singular:"NN",Plural:"NNS",Noun:"NN",There:"EX"};var al={preTagger:function(e){const{methods:t,model:n,world:r}=e,o=e.docs;!function(e,t,n){e.forEach((e=>{!function(e,t,n,r){const o=r.methods.one.setTag;if(e.length>=3){const t=/:/;if(e[0].post.match(t)){const t=e[1];if(t.tags.has("Value")||t.tags.has("Email")||t.tags.has("PhoneNumber"))return;o([e[0]],"Expression",r,null,"2-punct-colon''")}}}(e,0,0,n)}))}(o,0,r);const a=t.two.quickSplit(o);for(let e=0;e{for(let r=0;r{e.forEach((e=>{e.penn=function(e){if(e.tags.has("ProperNoun")&&e.tags.has("Plural"))return"NNPS";if(e.tags.has("Possessive")&&e.tags.has("Pronoun"))return"PRP$";if("there"===e.normal)return"EX";if("to"===e.normal)return"TO";const t=e.tagRank||[];for(let e=0;e{e.implicit=e.normal,e.text="",e.normal=""}));for(let e=0;e(e.implicit=e.text,e.machine=e.text,e.pre="",e.post="",e.text="",e.normal="",e.index=[r,o+t],e))),n[0]&&(n[0].pre=e[r][o].pre,n[n.length-1].post=e[r][o].post,n[0].text=e[r][o].text,n[0].normal=e[r][o].normal),e[r].splice(o,1,...n))},fl=/'/,bl=new Set(["been","become"]),vl=new Set(["what","how","when","if","too"]),yl=new Set(["too","also","enough"]),wl=function(e,t){const n=e[t].normal.split(fl)[0];if("let"===n)return[n,"us"];if("there"===n){const r=e[t+1];if(r&&r.tags.has("Plural"))return[n,"are"]}return"has"===((e,t)=>{for(let n=t+1;n{for(let n=t+1;n0&&(n-=1),e[a]&&(a+=1),o.ptrs=[[0,n,a]],o.compute(["freeze","lexicon","preTagger","unfreeze"]),function(e){e.forEach(((e,t)=>{e.index&&(e.index[1]=t)}))}(e)},Hl={d:(e,t)=>Cl(e,t),t:(e,t)=>function(e,t){if("ain't"===e[t].normal||"aint"===e[t].normal){if(e[t+1]&&"never"===e[t+1].normal)return["have"];const n=function(e,t){for(let n=t-1;n>=0;n-=1)if(e[n].tags.has("Noun")||e[n].tags.has("Pronoun")||e[n].tags.has("Plural")||e[n].tags.has("Singular"))return e[n];return null}(e,t);if(n){if("we"===n.normal||"they"===n.normal)return["are","not"];if("i"===n.normal)return["am","not"];if(n.tags&&n.tags.has("Plural"))return["are","not"]}return["is","not"]}return[e[t].normal.replace(/n't/,""),"not"]}(e,t),s:(e,t,n)=>((e,t)=>{const n=e[t];if(Nl.hasOwnProperty(n.machine||n.normal))return!1;if(n.tags.has("Possessive"))return!0;if(n.tags.has("QuestionWord"))return!1;if("he's"===n.normal||"she's"===n.normal)return!1;const r=e[t+1];if(!r)return!0;if("it's"===n.normal)return!!r.tags.has("#Noun");if("Noun|Gerund"==r.switch){const r=e[t+2];return r?!!r.tags.has("Copula")||("on"===r.normal||r.normal,!1):!(!n.tags.has("Actor")&&!n.tags.has("ProperNoun"))}if(r.tags.has("Verb"))return!!r.tags.has("Infinitive")||!r.tags.has("Gerund")&&!!r.tags.has("PresentTense");if("Adj|Noun"===r.switch){const n=e[t+2];if(!n)return!1;if(Il.has(n.normal))return!0;if(xl.has(n.normal))return!1}if(r.tags.has("Noun")){const e=r.machine||r.normal;return!("here"===e||"there"===e||"everywhere"===e||r.tags.has("Possessive")||r.tags.has("ProperNoun")&&!n.tags.has("ProperNoun"))}if(e[t-1]&&!0===jl[e[t-1].normal])return!0;if(r.tags.has("Adjective")){const n=e[t+2];if(!n)return!1;if(n.tags.has("Noun")&&!n.tags.has("Pronoun")){const e=r.normal;return"above"!==e&&"below"!==e&&"behind"!==e}return"Noun|Verb"===n.switch}return!!r.tags.has("Value")})(e,t)?n.methods.one.setTag([e[t]],"Possessive",n,null,"2-contraction"):wl(e,t)},El=function(e,t){const n=t.fromText(e.join(" "));return n.compute("id"),n.docs[0]};var Gl={contractionTwo:e=>{const{world:t,document:n}=e;n.forEach(((r,o)=>{for(let a=r.length-1;a>=0;a-=1){if(r[a].implicit)continue;let i=null;!0===Tl.test(r[a].normal)&&(i=r[a].normal.split(Tl)[1]);let s=null;Hl.hasOwnProperty(i)&&(s=Hl[i](r,a,t)),s&&(s=El(s,e),pl(n,[o,a],s),Dl(n[o],e,a,s.length))}}))}},Ol={compute:Gl,api:function(e){class Contractions extends e{constructor(e,t,n){super(e,t,n),this.viewType="Contraction"}expand(){return this.docs.forEach((e=>{const t=ml.test(e[0].text);e.forEach(((t,n)=>{t.text=t.implicit||"",delete t.implicit,ne.toUpperCase()))}(e[0].text))})),this.compute("normal"),this}}e.prototype.contractions=function(){const e=this.match("@hasContraction+");return new Contractions(this.document,e.pointer)},e.prototype.contract=gl},hooks:["contractionTwo"]};const Fl="(hard|fast|late|early|high|right|deep|close|direct)";const Vl="(i|we|they)";const zl=[].concat([{match:"(got|were|was|is|are|am) (#PastTense|#Participle)",tag:"Passive",reason:"got-walked"},{match:"(was|were|is|are|am) being (#PastTense|#Participle)",tag:"Passive",reason:"was-being"},{match:"(had|have|has) been (#PastTense|#Participle)",tag:"Passive",reason:"had-been"},{match:"will be being? (#PastTense|#Participle)",tag:"Passive",reason:"will-be-cleaned"},{match:"#Noun [(#PastTense|#Participle)] by (the|a) #Noun",group:0,tag:"Passive",reason:"suffered-by"}],[{match:"[(all|both)] #Determiner #Noun",group:0,tag:"Noun",reason:"all-noun"},{match:"#Copula [(just|alone)]$",group:0,tag:"Adjective",reason:"not-adverb"},{match:"#Singular is #Adverb? [#PastTense$]",group:0,tag:"Adjective",reason:"is-filled"},{match:"[#PastTense] #Singular is",group:0,tag:"Adjective",reason:"smoked-poutine"},{match:"[#PastTense] #Plural are",group:0,tag:"Adjective",reason:"baked-onions"},{match:"well [#PastTense]",group:0,tag:"Adjective",reason:"well-made"},{match:"#Copula [fucked up?]",group:0,tag:"Adjective",reason:"swears-adjective"},{match:"#Singular (seems|appears) #Adverb? [#PastTense$]",group:0,tag:"Adjective",reason:"seems-filled"},{match:"#Copula #Adjective? [(out|in|through)]$",group:0,tag:"Adjective",reason:"still-out"},{match:"^[#Adjective] (the|your) #Noun",group:0,notIf:"(all|even)",tag:"Infinitive",reason:"shut-the"},{match:"the [said] #Noun",group:0,tag:"Adjective",reason:"the-said-card"},{match:"[#Hyphenated (#Hyphenated && #PastTense)] (#Noun|#Conjunction)",group:0,tag:"Adjective",notIf:"#Adverb",reason:"faith-based"},{match:"[#Hyphenated (#Hyphenated && #Gerund)] (#Noun|#Conjunction)",group:0,tag:"Adjective",notIf:"#Adverb",reason:"self-driving"},{match:"[#PastTense (#Hyphenated && #PhrasalVerb)] (#Noun|#Conjunction)",group:0,tag:"Adjective",reason:"dammed-up"},{match:"(#Hyphenated && #Value) fold",tag:"Adjective",reason:"two-fold"},{match:"must (#Hyphenated && #Infinitive)",tag:"Adjective",reason:"must-win"},{match:"(#Hyphenated && #Infinitive) #Hyphenated",tag:"Adjective",notIf:"#PhrasalVerb",reason:"vacuum-sealed"},{match:"too much",tag:"Adverb Adjective",reason:"bit-4"},{match:"a bit much",tag:"Determiner Adverb Adjective",reason:"bit-3"},{match:"[(un|contra|extra|inter|intra|macro|micro|mid|mis|mono|multi|pre|sub|tri|ex)] #Adjective",group:0,tag:["Adjective","Prefix"],reason:"un-skilled"}],[{match:"#Adverb [#Adverb] (and|or|then)",group:0,tag:"Adjective",reason:"kinda-sparkly-and"},{match:"[(dark|bright|flat|light|soft|pale|dead|dim|faux|little|wee|sheer|most|near|good|extra|all)] #Adjective",group:0,tag:"Adverb",reason:"dark-green"},{match:"#Copula [far too] #Adjective",group:0,tag:"Adverb",reason:"far-too"},{match:"#Copula [still] (in|#Gerund|#Adjective)",group:0,tag:"Adverb",reason:"was-still-walking"},{match:`#Plural ${Fl}`,tag:"#PresentTense #Adverb",reason:"studies-hard"},{match:`#Verb [${Fl}] !#Noun?`,group:0,notIf:"(#Copula|get|got|getting|become|became|becoming|feel|feels|feeling|#Determiner|#Preposition)",tag:"Adverb",reason:"shops-direct"},{match:"[#Plural] a lot",tag:"PresentTense",reason:"studies-a-lot"}],[{match:"as [#Gerund] as",group:0,tag:"Adjective",reason:"as-gerund-as"},{match:"more [#Gerund] than",group:0,tag:"Adjective",reason:"more-gerund-than"},{match:"(so|very|extremely) [#Gerund]",group:0,tag:"Adjective",reason:"so-gerund"},{match:"(found|found) it #Adverb? [#Gerund]",group:0,tag:"Adjective",reason:"found-it-gerund"},{match:"a (little|bit|wee) bit? [#Gerund]",group:0,tag:"Adjective",reason:"a-bit-gerund"},{match:"#Gerund [#Gerund]",group:0,tag:"Adjective",notIf:"(impersonating|practicing|considering|assuming)",reason:"looking-annoying"},{match:"(looked|look|looks) #Adverb? [%Adj|Gerund%]",group:0,tag:"Adjective",notIf:"(impersonating|practicing|considering|assuming)",reason:"looked-amazing"},{match:"[%Adj|Gerund%] #Determiner",group:0,tag:"Gerund",reason:"developing-a"},{match:"#Possessive [%Adj|Gerund%] #Noun",group:0,tag:"Adjective",reason:"leading-manufacturer"},{match:"%Noun|Gerund% %Adj|Gerund%",tag:"Gerund #Adjective",reason:"meaning-alluring"},{match:"(face|embrace|reveal|stop|start|resume) %Adj|Gerund%",tag:"#PresentTense #Adjective",reason:"face-shocking"},{match:"(are|were) [%Adj|Gerund%] #Plural",group:0,tag:"Adjective",reason:"are-enduring-symbols"}],[{match:"#Determiner [#Adjective] #Copula",group:0,tag:"Noun",reason:"the-adj-is"},{match:"#Adjective [#Adjective] #Copula",group:0,tag:"Noun",reason:"adj-adj-is"},{match:"(his|its) [%Adj|Noun%]",group:0,tag:"Noun",notIf:"#Hyphenated",reason:"his-fine"},{match:"#Copula #Adverb? [all]",group:0,tag:"Noun",reason:"is-all"},{match:"(have|had) [#Adjective] #Preposition .",group:0,tag:"Noun",reason:"have-fun"},{match:"#Gerund (giant|capital|center|zone|application)",tag:"Noun",reason:"brewing-giant"},{match:"#Preposition (a|an) [#Adjective]$",group:0,tag:"Noun",reason:"an-instant"},{match:"no [#Adjective] #Modal",group:0,tag:"Noun",reason:"no-golden"},{match:"[brand #Gerund?] new",group:0,tag:"Adverb",reason:"brand-new"},{match:"(#Determiner|#Comparative|new|different) [kind]",group:0,tag:"Noun",reason:"some-kind"},{match:"#Possessive [%Adj|Noun%] #Noun",group:0,tag:"Adjective",reason:"her-favourite"},{match:"must && #Hyphenated .",tag:"Adjective",reason:"must-win"},{match:"#Determiner [#Adjective]$",tag:"Noun",notIf:"(this|that|#Comparative|#Superlative)",reason:"the-south"},{match:"(#Noun && #Hyphenated) (#Adjective && #Hyphenated)",tag:"Adjective",notIf:"(this|that|#Comparative|#Superlative)",reason:"company-wide"},{match:"#Determiner [#Adjective] (#Copula|#Determiner)",notIf:"(#Comparative|#Superlative)",group:0,tag:"Noun",reason:"the-poor"},{match:"[%Adj|Noun%] #Noun",notIf:"(#Pronoun|#ProperNoun)",group:0,tag:"Adjective",reason:"stable-foundations"}],[{match:"[still] #Adjective",group:0,tag:"Adverb",reason:"still-advb"},{match:"[still] #Verb",group:0,tag:"Adverb",reason:"still-verb"},{match:"[so] #Adjective",group:0,tag:"Adverb",reason:"so-adv"},{match:"[way] #Comparative",group:0,tag:"Adverb",reason:"way-adj"},{match:"[way] #Adverb #Adjective",group:0,tag:"Adverb",reason:"way-too-adj"},{match:"[all] #Verb",group:0,tag:"Adverb",reason:"all-verb"},{match:"#Verb [like]",group:0,notIf:"(#Modal|#PhrasalVerb)",tag:"Adverb",reason:"verb-like"},{match:"(barely|hardly) even",tag:"Adverb",reason:"barely-even"},{match:"[even] #Verb",group:0,tag:"Adverb",reason:"even-walk"},{match:"[even] #Comparative",group:0,tag:"Adverb",reason:"even-worse"},{match:"[even] (#Determiner|#Possessive)",group:0,tag:"#Adverb",reason:"even-the"},{match:"even left",tag:"#Adverb #Verb",reason:"even-left"},{match:"[way] #Adjective",group:0,tag:"#Adverb",reason:"way-over"},{match:"#PresentTense [(hard|quick|bright|slow|fast|backwards|forwards)]",notIf:"#Copula",group:0,tag:"Adverb",reason:"lazy-ly"},{match:"[much] #Adjective",group:0,tag:"Adverb",reason:"bit-1"},{match:"#Copula [#Adverb]$",group:0,tag:"Adjective",reason:"is-well"},{match:"a [(little|bit|wee) bit?] #Adjective",group:0,tag:"Adverb",reason:"a-bit-cold"},{match:"[(super|pretty)] #Adjective",group:0,tag:"Adverb",reason:"super-strong"},{match:"(become|fall|grow) #Adverb? [#PastTense]",group:0,tag:"Adjective",reason:"overly-weakened"},{match:"(a|an) #Adverb [#Participle] #Noun",group:0,tag:"Adjective",reason:"completely-beaten"},{match:"#Determiner #Adverb? [close]",group:0,tag:"Adjective",reason:"a-close"},{match:"#Gerund #Adverb? [close]",group:0,tag:"Adverb",notIf:"(getting|becoming|feeling)",reason:"being-close"},{match:"(the|those|these|a|an) [#Participle] #Noun",group:0,tag:"Adjective",reason:"blown-motor"},{match:"(#PresentTense|#PastTense) [back]",group:0,tag:"Adverb",notIf:"(#PhrasalVerb|#Copula)",reason:"charge-back"},{match:"#Verb [around]",group:0,tag:"Adverb",notIf:"#PhrasalVerb",reason:"send-around"},{match:"[later] #PresentTense",group:0,tag:"Adverb",reason:"later-say"},{match:"#Determiner [well] !#PastTense?",group:0,tag:"Noun",reason:"the-well"},{match:"#Adjective [enough]",group:0,tag:"Adverb",reason:"high-enough"}],[{match:"[sun] the #Ordinal",tag:"WeekDay",reason:"sun-the-5th"},{match:"[sun] #Date",group:0,tag:"WeekDay",reason:"sun-feb"},{match:"#Date (on|this|next|last|during)? [sun]",group:0,tag:"WeekDay",reason:"1pm-sun"},{match:"(in|by|before|during|on|until|after|of|within|all) [sat]",group:0,tag:"WeekDay",reason:"sat"},{match:"(in|by|before|during|on|until|after|of|within|all) [wed]",group:0,tag:"WeekDay",reason:"wed"},{match:"(in|by|before|during|on|until|after|of|within|all) [march]",group:0,tag:"Month",reason:"march"},{match:"[sat] #Date",group:0,tag:"WeekDay",reason:"sat-feb"},{match:"#Preposition [(march|may)]",group:0,tag:"Month",reason:"in-month"},{match:"(this|next|last) (march|may) !#Infinitive?",tag:"#Date #Month",reason:"this-month"},{match:"(march|may) the? #Value",tag:"#Month #Date #Date",reason:"march-5th"},{match:"#Value of? (march|may)",tag:"#Date #Date #Month",reason:"5th-of-march"},{match:"[(march|may)] .? #Date",group:0,tag:"Month",reason:"march-and-feb"},{match:"#Date .? [(march|may)]",group:0,tag:"Month",reason:"feb-and-march"},{match:"#Adverb [(march|may)]",group:0,tag:"Verb",reason:"quickly-march"},{match:"[(march|may)] #Adverb",group:0,tag:"Verb",reason:"march-quickly"},{match:"#Value (am|pm)",tag:"Time",reason:"2-am"}],[{match:"#Holiday (day|eve)",tag:"Holiday",reason:"holiday-day"},{match:"#Value of #Month",tag:"Date",reason:"value-of-month"},{match:"#Cardinal #Month",tag:"Date",reason:"cardinal-month"},{match:"#Month #Value to #Value",tag:"Date",reason:"value-to-value"},{match:"#Month the #Value",tag:"Date",reason:"month-the-value"},{match:"(#WeekDay|#Month) #Value",tag:"Date",reason:"date-value"},{match:"#Value (#WeekDay|#Month)",tag:"Date",reason:"value-date"},{match:"(#TextValue && #Date) #TextValue",tag:"Date",reason:"textvalue-date"},{match:"#Month #NumberRange",tag:"Date",reason:"aug 20-21"},{match:"#WeekDay #Month #Ordinal",tag:"Date",reason:"week mm-dd"},{match:"#Month #Ordinal #Cardinal",tag:"Date",reason:"mm-dd-yyy"},{match:"(#Place|#Demonmym|#Time) (standard|daylight|central|mountain)? time",tag:"Timezone",reason:"std-time"},{match:"(eastern|mountain|pacific|central|atlantic) (standard|daylight|summer)? time",tag:"Timezone",reason:"eastern-time"},{match:"#Time [(eastern|mountain|pacific|central|est|pst|gmt)]",group:0,tag:"Timezone",reason:"5pm-central"},{match:"(central|western|eastern) european time",tag:"Timezone",reason:"cet"}],[{match:"(the|any) [more]",group:0,tag:"Singular",reason:"more-noun"},{match:"[more] #Noun",group:0,tag:"Adjective",reason:"more-noun"},{match:"(right|rights) of .",tag:"Noun",reason:"right-of"},{match:"a [bit]",group:0,tag:"Singular",reason:"bit-2"},{match:"a [must]",group:0,tag:"Singular",reason:"must-2"},{match:"(we|us) [all]",group:0,tag:"Noun",reason:"we all"},{match:"due to [#Verb]",group:0,tag:"Noun",reason:"due-to"},{match:"some [#Verb] #Plural",group:0,tag:"Noun",reason:"determiner6"},{match:"#Possessive #Ordinal [#PastTense]",group:0,tag:"Noun",reason:"first-thought"},{match:"(the|this|those|these) #Adjective [%Verb|Noun%]",group:0,tag:"Noun",notIf:"#Copula",reason:"the-adj-verb"},{match:"(the|this|those|these) #Adverb #Adjective [#Verb]",group:0,tag:"Noun",reason:"determiner4"},{match:"the [#Verb] #Preposition .",group:0,tag:"Noun",reason:"determiner1"},{match:"(a|an|the) [#Verb] of",group:0,tag:"Noun",reason:"the-verb-of"},{match:"#Determiner #Noun of [#Verb]",group:0,tag:"Noun",notIf:"#Gerund",reason:"noun-of-noun"},{match:"#PastTense #Preposition [#PresentTense]",group:0,notIf:"#Gerund",tag:"Noun",reason:"ended-in-ruins"},{match:"#Conjunction [u]",group:0,tag:"Pronoun",reason:"u-pronoun-2"},{match:"[u] #Verb",group:0,tag:"Pronoun",reason:"u-pronoun-1"},{match:"#Determiner [(western|eastern|northern|southern|central)] #Noun",group:0,tag:"Noun",reason:"western-line"},{match:"(#Singular && @hasHyphen) #PresentTense",tag:"Noun",reason:"hyphen-verb"},{match:"is no [#Verb]",group:0,tag:"Noun",reason:"is-no-verb"},{match:"do [so]",group:0,tag:"Noun",reason:"so-noun"},{match:"#Determiner [(shit|damn|hell)]",group:0,tag:"Noun",reason:"swears-noun"},{match:"to [(shit|hell)]",group:0,tag:"Noun",reason:"to-swears"},{match:"(the|these) [#Singular] (were|are)",group:0,tag:"Plural",reason:"singular-were"},{match:"a #Noun+ or #Adverb+? [#Verb]",group:0,tag:"Noun",reason:"noun-or-noun"},{match:"(the|those|these|a|an) #Adjective? [#PresentTense #Particle?]",group:0,tag:"Noun",notIf:"(seem|appear|include|#Gerund|#Copula)",reason:"det-inf"},{match:"#Noun #Actor",tag:"Actor",notIf:"(#Person|#Pronoun)",reason:"thing-doer"},{match:"#Gerund #Actor",tag:"Actor",reason:"gerund-doer"},{match:"co #Singular",tag:"Actor",reason:"co-noun"},{match:"[#Noun+] #Actor",group:0,tag:"Actor",notIf:"(#Honorific|#Pronoun|#Possessive)",reason:"air-traffic-controller"},{match:"(urban|cardiac|cardiovascular|respiratory|medical|clinical|visual|graphic|creative|dental|exotic|fine|certified|registered|technical|virtual|professional|amateur|junior|senior|special|pharmaceutical|theoretical)+ #Noun? #Actor",tag:"Actor",reason:"fine-artist"},{match:"#Noun+ (coach|chef|king|engineer|fellow|personality|boy|girl|man|woman|master)",tag:"Actor",reason:"dance-coach"},{match:"chief . officer",tag:"Actor",reason:"chief-x-officer"},{match:"chief of #Noun+",tag:"Actor",reason:"chief-of-police"},{match:"senior? vice? president of #Noun+",tag:"Actor",reason:"president-of"},{match:"#Determiner [sun]",group:0,tag:"Singular",reason:"the-sun"},{match:"#Verb (a|an) [#Value]$",group:0,tag:"Singular",reason:"did-a-value"},{match:"the [(can|will|may)]",group:0,tag:"Singular",reason:"the can"},{match:"#FirstName #Acronym? (#Possessive && #LastName)",tag:"Possessive",reason:"name-poss"},{match:"#Organization+ #Possessive",tag:"Possessive",reason:"org-possessive"},{match:"#Place+ #Possessive",tag:"Possessive",reason:"place-possessive"},{match:"#Possessive #PresentTense #Particle?",notIf:"(#Gerund|her)",tag:"Noun",reason:"possessive-verb"},{match:"(my|our|their|her|his|its) [(#Plural && #Actor)] #Noun",tag:"Possessive",reason:"my-dads"},{match:"#Value of a [second]",group:0,unTag:"Value",tag:"Singular",reason:"10th-of-a-second"},{match:"#Value [seconds]",group:0,unTag:"Value",tag:"Plural",reason:"10-seconds"},{match:"in [#Infinitive]",group:0,tag:"Singular",reason:"in-age"},{match:"a [#Adjective] #Preposition",group:0,tag:"Noun",reason:"a-minor-in"},{match:"#Determiner [#Singular] said",group:0,tag:"Actor",reason:"the-actor-said"},{match:"#Determiner #Noun [(feel|sense|process|rush|side|bomb|bully|challenge|cover|crush|dump|exchange|flow|function|issue|lecture|limit|march|process)] !(#Preposition|to|#Adverb)?",group:0,tag:"Noun",reason:"the-noun-sense"},{match:"[#PresentTense] (of|by|for) (a|an|the) #Noun #Copula",group:0,tag:"Plural",reason:"photographs-of"},{match:"#Infinitive and [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"fight and win"},{match:"#Noun and [#Verb] and #Noun",group:0,tag:"Noun",reason:"peace-and-flowers"},{match:"the #Cardinal [%Adj|Noun%]",group:0,tag:"Noun",reason:"the-1992-classic"},{match:"#Copula the [%Adj|Noun%] #Noun",group:0,tag:"Adjective",reason:"the-premier-university"},{match:"i #Verb [me] #Noun",group:0,tag:"Possessive",reason:"scottish-me"},{match:"[#PresentTense] (music|class|lesson|night|party|festival|league|ceremony)",group:0,tag:"Noun",reason:"dance-music"},{match:"[wit] (me|it)",group:0,tag:"Presposition",reason:"wit-me"},{match:"#PastTense #Possessive [#Verb]",group:0,tag:"Noun",notIf:"(saw|made)",reason:"left-her-boots"},{match:"#Value [%Plural|Verb%]",group:0,tag:"Plural",notIf:"(one|1|a|an)",reason:"35-signs"},{match:"had [#PresentTense]",group:0,tag:"Noun",notIf:"(#Gerund|come|become)",reason:"had-time"},{match:"%Adj|Noun% %Noun|Verb%",tag:"#Adjective #Noun",notIf:"#ProperNoun #Noun",reason:"instant-access"},{match:"#Determiner [%Adj|Noun%] #Conjunction",group:0,tag:"Noun",reason:"a-rep-to"},{match:"#Adjective #Noun [%Plural|Verb%]$",group:0,tag:"Plural",notIf:"#Pronoun",reason:"near-death-experiences"},{match:"#Possessive #Noun [%Plural|Verb%]$",group:0,tag:"Plural",reason:"your-guild-colors"}],[{match:"(this|that|the|a|an) [#Gerund #Infinitive]",group:0,tag:"Singular",reason:"the-planning-process"},{match:"(that|the) [#Gerund #PresentTense]",group:0,ifNo:"#Copula",tag:"Plural",reason:"the-paving-stones"},{match:"#Determiner [#Gerund] #Noun",group:0,tag:"Adjective",reason:"the-gerund-noun"},{match:"#Pronoun #Infinitive [#Gerund] #PresentTense",group:0,tag:"Noun",reason:"tipping-sucks"},{match:"#Adjective [#Gerund]",group:0,tag:"Noun",notIf:"(still|even|just)",reason:"early-warning"},{match:"[#Gerund] #Adverb? not? #Copula",group:0,tag:"Activity",reason:"gerund-copula"},{match:"#Copula [(#Gerund|#Activity)] #Copula",group:0,tag:"Gerund",reason:"are-doing-is"},{match:"[#Gerund] #Modal",group:0,tag:"Activity",reason:"gerund-modal"},{match:"#Singular for [%Noun|Gerund%]",group:0,tag:"Gerund",reason:"noun-for-gerund"},{match:"#Comparative (for|at) [%Noun|Gerund%]",group:0,tag:"Gerund",reason:"better-for-gerund"},{match:"#PresentTense the [#Gerund]",group:0,tag:"Noun",reason:"keep-the-touching"}],[{match:"#Infinitive (this|that|the) [#Infinitive]",group:0,tag:"Noun",reason:"do-this-dance"},{match:"#Gerund #Determiner [#Infinitive]",group:0,tag:"Noun",reason:"running-a-show"},{match:"#Determiner (only|further|just|more|backward) [#Infinitive]",group:0,tag:"Noun",reason:"the-only-reason"},{match:"(the|this|a|an) [#Infinitive] #Adverb? #Verb",group:0,tag:"Noun",reason:"determiner5"},{match:"#Determiner #Adjective #Adjective? [#Infinitive]",group:0,tag:"Noun",reason:"a-nice-inf"},{match:"#Determiner #Demonym [#PresentTense]",group:0,tag:"Noun",reason:"mexican-train"},{match:"#Adjective #Noun+ [#Infinitive] #Copula",group:0,tag:"Noun",reason:"career-move"},{match:"at some [#Infinitive]",group:0,tag:"Noun",reason:"at-some-inf"},{match:"(go|goes|went) to [#Infinitive]",group:0,tag:"Noun",reason:"goes-to-verb"},{match:"(a|an) #Adjective? #Noun [#Infinitive] (#Preposition|#Noun)",group:0,notIf:"from",tag:"Noun",reason:"a-noun-inf"},{match:"(a|an) #Noun [#Infinitive]$",group:0,tag:"Noun",reason:"a-noun-inf2"},{match:"#Gerund #Adjective? for [#Infinitive]",group:0,tag:"Noun",reason:"running-for"},{match:"about [#Infinitive]",group:0,tag:"Singular",reason:"about-love"},{match:"#Plural on [#Infinitive]",group:0,tag:"Noun",reason:"on-stage"},{match:"any [#Infinitive]",group:0,tag:"Noun",reason:"any-charge"},{match:"no [#Infinitive]",group:0,tag:"Noun",reason:"no-doubt"},{match:"number of [#PresentTense]",group:0,tag:"Noun",reason:"number-of-x"},{match:"(taught|teaches|learns|learned) [#PresentTense]",group:0,tag:"Noun",reason:"teaches-x"},{match:"(try|use|attempt|build|make) [#Verb #Particle?]",notIf:"(#Copula|#Noun|sure|fun|up)",group:0,tag:"Noun",reason:"do-verb"},{match:"^[#Infinitive] (is|was)",group:0,tag:"Noun",reason:"checkmate-is"},{match:"#Infinitive much [#Infinitive]",group:0,tag:"Noun",reason:"get-much"},{match:"[cause] #Pronoun #Verb",group:0,tag:"Conjunction",reason:"cause-cuz"},{match:"the #Singular [#Infinitive] #Noun",group:0,tag:"Noun",notIf:"#Pronoun",reason:"cardio-dance"},{match:"#Determiner #Modal [#Noun]",group:0,tag:"PresentTense",reason:"should-smoke"},{match:"this [#Plural]",group:0,tag:"PresentTense",notIf:"(#Preposition|#Date)",reason:"this-verbs"},{match:"#Noun that [#Plural]",group:0,tag:"PresentTense",notIf:"(#Preposition|#Pronoun|way)",reason:"voice-that-rocks"},{match:"that [#Plural] to",group:0,tag:"PresentTense",notIf:"#Preposition",reason:"that-leads-to"},{match:"(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)",group:0,tag:"Infinitive",reason:"let-him-glue"},{match:"#Verb (all|every|each|most|some|no) [#PresentTense]",notIf:"#Modal",group:0,tag:"Noun",reason:"all-presentTense"},{match:"(had|have|#PastTense) #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"better",reason:"adj-presentTense"},{match:"#Value #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"one-big-reason"},{match:"#PastTense #Adjective+ [#PresentTense]",group:0,tag:"Noun",notIf:"(#Copula|better)",reason:"won-wide-support"},{match:"(many|few|several|couple) [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"many-poses"},{match:"#Determiner #Adverb #Adjective [%Noun|Verb%]",group:0,tag:"Noun",notIf:"#Copula",reason:"very-big-dream"},{match:"from #Noun to [%Noun|Verb%]",group:0,tag:"Noun",reason:"start-to-finish"},{match:"(for|with|of) #Noun (and|or|not) [%Noun|Verb%]",group:0,tag:"Noun",notIf:"#Pronoun",reason:"for-food-and-gas"},{match:"#Adjective #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"adorable-little-store"},{match:"#Gerund #Adverb? #Comparative [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"higher-costs"},{match:"(#Noun && @hasComma) #Noun (and|or) [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"noun-list"},{match:"(many|any|some|several) [#PresentTense] for",group:0,tag:"Noun",reason:"any-verbs-for"},{match:"to #PresentTense #Noun [#PresentTense] #Preposition",group:0,tag:"Noun",reason:"gas-exchange"},{match:"#PastTense (until|as|through|without) [#PresentTense]",group:0,tag:"Noun",reason:"waited-until-release"},{match:"#Gerund like #Adjective? [#PresentTense]",group:0,tag:"Plural",reason:"like-hot-cakes"},{match:"some #Adjective [#PresentTense]",group:0,tag:"Noun",reason:"some-reason"},{match:"for some [#PresentTense]",group:0,tag:"Noun",reason:"for-some-reason"},{match:"(same|some|the|that|a) kind of [#PresentTense]",group:0,tag:"Noun",reason:"some-kind-of"},{match:"(same|some|the|that|a) type of [#PresentTense]",group:0,tag:"Noun",reason:"some-type-of"},{match:"#Gerund #Adjective #Preposition [#PresentTense]",group:0,tag:"Noun",reason:"doing-better-for-x"},{match:"(get|got|have) #Comparative [#PresentTense]",group:0,tag:"Noun",reason:"got-better-aim"},{match:"whose [#PresentTense] #Copula",group:0,tag:"Noun",reason:"whos-name-was"},{match:"#PhrasalVerb #Particle #Preposition [#PresentTense]",group:0,tag:"Noun",reason:"given-up-on-x"},{match:"there (are|were) #Adjective? [#PresentTense]",group:0,tag:"Plural",reason:"there-are"},{match:"#Value [#PresentTense] of",group:0,notIf:"(one|1|#Copula|#Infinitive)",tag:"Plural",reason:"2-trains"},{match:"[#PresentTense] (are|were) #Adjective",group:0,tag:"Plural",reason:"compromises-are-possible"},{match:"^[(hope|guess|thought|think)] #Pronoun #Verb",group:0,tag:"Infinitive",reason:"suppose-i"},{match:"#Possessive #Adjective [#Verb]",group:0,tag:"Noun",notIf:"#Copula",reason:"our-full-support"},{match:"[(tastes|smells)] #Adverb? #Adjective",group:0,tag:"PresentTense",reason:"tastes-good"},{match:"#Copula #Gerund [#PresentTense] !by?",group:0,tag:"Noun",notIf:"going",reason:"ignoring-commute"},{match:"#Determiner #Adjective? [(shed|thought|rose|bid|saw|spelt)]",group:0,tag:"Noun",reason:"noun-past"},{match:"how to [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"how-to-noun"},{match:"which [%Noun|Verb%] #Noun",group:0,tag:"Infinitive",reason:"which-boost-it"},{match:"#Gerund [%Plural|Verb%]",group:0,tag:"Plural",reason:"asking-questions"},{match:"(ready|available|difficult|hard|easy|made|attempt|try) to [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"ready-to-noun"},{match:"(bring|went|go|drive|run|bike) to [%Noun|Verb%]",group:0,tag:"Noun",reason:"bring-to-noun"},{match:"#Modal #Noun [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"would-you-look"},{match:"#Copula just [#Infinitive]",group:0,tag:"Noun",reason:"is-just-spam"},{match:"^%Noun|Verb% %Plural|Verb%",tag:"Imperative #Plural",reason:"request-copies"},{match:"#Adjective #Plural and [%Plural|Verb%]",group:0,tag:"#Plural",reason:"pickles-and-drinks"},{match:"#Determiner #Year [#Verb]",group:0,tag:"Noun",reason:"the-1968-film"},{match:"#Determiner [#PhrasalVerb #Particle]",group:0,tag:"Noun",reason:"the-break-up"},{match:"#Determiner [%Adj|Noun%] #Noun",group:0,tag:"Adjective",notIf:"(#Pronoun|#Possessive|#ProperNoun)",reason:"the-individual-goals"},{match:"[%Noun|Verb%] or #Infinitive",group:0,tag:"Infinitive",reason:"work-or-prepare"},{match:"to #Infinitive [#PresentTense]",group:0,tag:"Noun",notIf:"(#Gerund|#Copula|help)",reason:"to-give-thanks"},{match:"[#Noun] me",group:0,tag:"Verb",reason:"kills-me"},{match:"%Plural|Verb% %Plural|Verb%",tag:"#PresentTense #Plural",reason:"removes-wrinkles"}],[{match:"#Money and #Money #Currency?",tag:"Money",reason:"money-and-money"},{match:"#Value #Currency [and] #Value (cents|ore|centavos|sens)",group:0,tag:"money",reason:"and-5-cents"},{match:"#Value (mark|rand|won|rub|ore)",tag:"#Money #Currency",reason:"4-mark"},{match:"a pound",tag:"#Money #Unit",reason:"a-pound"},{match:"#Value (pound|pounds)",tag:"#Money #Unit",reason:"4-pounds"}],[{match:"[(half|quarter)] of? (a|an)",group:0,tag:"Fraction",reason:"millionth"},{match:"#Adverb [half]",group:0,tag:"Fraction",reason:"nearly-half"},{match:"[half] the",group:0,tag:"Fraction",reason:"half-the"},{match:"#Cardinal and a half",tag:"Fraction",reason:"and-a-half"},{match:"#Value (halves|halfs|quarters)",tag:"Fraction",reason:"two-halves"},{match:"a #Ordinal",tag:"Fraction",reason:"a-quarter"},{match:"[#Cardinal+] (#Fraction && /s$/)",tag:"Fraction",reason:"seven-fifths"},{match:"[#Cardinal+ #Ordinal] of .",group:0,tag:"Fraction",reason:"ordinal-of"},{match:"[(#NumericValue && #Ordinal)] of .",group:0,tag:"Fraction",reason:"num-ordinal-of"},{match:"(a|one) #Cardinal?+ #Ordinal",tag:"Fraction",reason:"a-ordinal"},{match:"#Cardinal+ out? of every? #Cardinal",tag:"Fraction",reason:"out-of"}],[{match:"#Cardinal [second]",tag:"Unit",reason:"one-second"},{match:"!once? [(a|an)] (#Duration|hundred|thousand|million|billion|trillion)",group:0,tag:"Value",reason:"a-is-one"},{match:"1 #Value #PhoneNumber",tag:"PhoneNumber",reason:"1-800-Value"},{match:"#NumericValue #PhoneNumber",tag:"PhoneNumber",reason:"(800) PhoneNumber"},{match:"#Demonym #Currency",tag:"Currency",reason:"demonym-currency"},{match:"#Value [(buck|bucks|grand)]",group:0,tag:"Currency",reason:"value-bucks"},{match:"[#Value+] #Currency",group:0,tag:"Money",reason:"15 usd"},{match:"[second] #Noun",group:0,tag:"Ordinal",reason:"second-noun"},{match:"#Value+ [#Currency]",group:0,tag:"Unit",reason:"5-yan"},{match:"#Value [(foot|feet)]",group:0,tag:"Unit",reason:"foot-unit"},{match:"#Value [#Abbreviation]",group:0,tag:"Unit",reason:"value-abbr"},{match:"#Value [k]",group:0,tag:"Unit",reason:"value-k"},{match:"#Unit an hour",tag:"Unit",reason:"unit-an-hour"},{match:"(minus|negative) #Value",tag:"Value",reason:"minus-value"},{match:"#Value (point|decimal) #Value",tag:"Value",reason:"value-point-value"},{match:"#Determiner [(half|quarter)] #Ordinal",group:0,tag:"Value",reason:"half-ordinal"},{match:"#Multiple+ and #Value",tag:"Value",reason:"magnitude-and-value"},{match:"#Value #Unit [(per|an) (hr|hour|sec|second|min|minute)]",group:0,tag:"Unit",reason:"12-miles-per-second"},{match:"#Value [(square|cubic)] #Unit",group:0,tag:"Unit",reason:"square-miles"}],[{match:"#Copula [(#Noun|#PresentTense)] #LastName",group:0,tag:"FirstName",reason:"copula-noun-lastname"},{match:"(sister|pope|brother|father|aunt|uncle|grandpa|grandfather|grandma) #ProperNoun",tag:"Person",reason:"lady-titlecase",safe:!0},{match:"#FirstName [#Determiner #Noun] #LastName",group:0,tag:"Person",reason:"first-noun-last"},{match:"#ProperNoun (b|c|d|e|f|g|h|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z) #ProperNoun",tag:"Person",reason:"titlecase-acronym-titlecase",safe:!0},{match:"#Acronym #LastName",tag:"Person",reason:"acronym-lastname",safe:!0},{match:"#Person (jr|sr|md)",tag:"Person",reason:"person-honorific"},{match:"#Honorific #Acronym",tag:"Person",reason:"Honorific-TitleCase"},{match:"#Person #Person the? #RomanNumeral",tag:"Person",reason:"roman-numeral"},{match:"#FirstName [/^[^aiurck]$/]",group:0,tag:["Acronym","Person"],reason:"john-e"},{match:"#Noun van der? #Noun",tag:"Person",reason:"van der noun",safe:!0},{match:"(king|queen|prince|saint|lady) of #Noun",tag:"Person",reason:"king-of-noun",safe:!0},{match:"(prince|lady) #Place",tag:"Person",reason:"lady-place"},{match:"(king|queen|prince|saint) #ProperNoun",tag:"Person",notIf:"#Place",reason:"saint-foo"},{match:"al (#Person|#ProperNoun)",tag:"Person",reason:"al-borlen",safe:!0},{match:"#FirstName de #Noun",tag:"Person",reason:"bill-de-noun"},{match:"#FirstName (bin|al) #Noun",tag:"Person",reason:"bill-al-noun"},{match:"#FirstName #Acronym #ProperNoun",tag:"Person",reason:"bill-acronym-title"},{match:"#FirstName #FirstName #ProperNoun",tag:"Person",reason:"bill-firstname-title"},{match:"#Honorific #FirstName? #ProperNoun",tag:"Person",reason:"dr-john-Title"},{match:"#FirstName the #Adjective",tag:"Person",reason:"name-the-great"},{match:"#ProperNoun (van|al|bin) #ProperNoun",tag:"Person",reason:"title-van-title",safe:!0},{match:"#ProperNoun (de|du) la? #ProperNoun",tag:"Person",notIf:"#Place",reason:"title-de-title"},{match:"#Singular #Acronym #LastName",tag:"#FirstName #Person .",reason:"title-acro-noun",safe:!0},{match:"[#ProperNoun] #Person",group:0,tag:"Person",reason:"proper-person",safe:!0},{match:"#Person [#ProperNoun #ProperNoun]",group:0,tag:"Person",notIf:"#Possessive",reason:"three-name-person",safe:!0},{match:"#FirstName #Acronym? [#ProperNoun]",group:0,tag:"LastName",notIf:"#Possessive",reason:"firstname-titlecase"},{match:"#FirstName [#FirstName]",group:0,tag:"LastName",reason:"firstname-firstname"},{match:"#FirstName #Acronym #Noun",tag:"Person",reason:"n-acro-noun",safe:!0},{match:"#FirstName [(de|di|du|van|von)] #Person",group:0,tag:"LastName",reason:"de-firstname"},{match:"[(lieutenant|corporal|sergeant|captain|qeen|king|admiral|major|colonel|marshal|president|queen|king)+] #ProperNoun",group:0,tag:"Honorific",reason:"seargeant-john"},{match:"[(private|general|major|rear|prime|field|count|miss)] #Honorific? #Person",group:0,tag:["Honorific","Person"],reason:"ambg-honorifics"},{match:"#Honorific #FirstName [#Singular]",group:0,tag:"LastName",notIf:"#Possessive",reason:"dr-john-foo",safe:!0},{match:"[(his|her) (majesty|honour|worship|excellency|honorable)] #Person",group:0,tag:"Honorific",reason:"his-excellency"},{match:"#Honorific #Actor",tag:"Honorific",reason:"Lieutenant colonel"},{match:"(first|second|third|1st|2nd|3rd) #Actor",tag:"Honorific",reason:"first lady"},{match:"#Person #RomanNumeral",tag:"Person",reason:"louis-IV"}],[{match:"#FirstName #Noun$",tag:". #LastName",notIf:"(#Possessive|#Organization|#Place|#Pronoun|@hasTitleCase)",reason:"firstname-noun"},{match:"%Person|Date% #Acronym? #ProperNoun",tag:"Person",reason:"jan-thierson"},{match:"%Person|Noun% #Acronym? #ProperNoun",tag:"Person",reason:"switch-person",safe:!0},{match:"%Person|Noun% #Organization",tag:"Organization",reason:"olive-garden"},{match:"%Person|Verb% #Acronym? #ProperNoun",tag:"Person",reason:"verb-propernoun",ifNo:"#Actor"},{match:"[%Person|Verb%] (will|had|has|said|says|told|did|learned|wants|wanted)",group:0,tag:"Person",reason:"person-said"},{match:"[%Person|Place%] (harbor|harbour|pier|town|city|place|dump|landfill)",group:0,tag:"Place",reason:"sydney-harbour"},{match:"(west|east|north|south) [%Person|Place%]",group:0,tag:"Place",reason:"east-sydney"},{match:"#Modal [%Person|Verb%]",group:0,tag:"Verb",reason:"would-mark"},{match:"#Adverb [%Person|Verb%]",group:0,tag:"Verb",reason:"really-mark"},{match:"[%Person|Verb%] (#Adverb|#Comparative)",group:0,tag:"Verb",reason:"drew-closer"},{match:"%Person|Verb% #Person",tag:"Person",reason:"rob-smith"},{match:"%Person|Verb% #Acronym #ProperNoun",tag:"Person",reason:"rob-a-smith"},{match:"[will] #Verb",group:0,tag:"Modal",reason:"will-verb"},{match:"(will && @isTitleCase) #ProperNoun",tag:"Person",reason:"will-name"},{match:"(#FirstName && !#Possessive) [#Singular] #Verb",group:0,safe:!0,tag:"LastName",reason:"jack-layton"},{match:"^[#Singular] #Person #Verb",group:0,safe:!0,tag:"Person",reason:"sherwood-anderson"},{match:"(a|an) [#Person]$",group:0,unTag:"Person",reason:"a-warhol"}],[{match:"#Copula (pretty|dead|full|well|sure) (#Adjective|#Noun)",tag:"#Copula #Adverb #Adjective",reason:"sometimes-adverb"},{match:"(#Pronoun|#Person) (had|#Adverb)? [better] #PresentTense",group:0,tag:"Modal",reason:"i-better"},{match:"(#Modal|i|they|we|do) not? [like]",group:0,tag:"PresentTense",reason:"modal-like"},{match:"#Noun #Adverb? [left]",group:0,tag:"PastTense",reason:"left-verb"},{match:"will #Adverb? not? #Adverb? [be] #Gerund",group:0,tag:"Copula",reason:"will-be-copula"},{match:"will #Adverb? not? #Adverb? [be] #Adjective",group:0,tag:"Copula",reason:"be-copula"},{match:"[march] (up|down|back|toward)",notIf:"#Date",group:0,tag:"Infinitive",reason:"march-to"},{match:"#Modal [march]",group:0,tag:"Infinitive",reason:"must-march"},{match:"[may] be",group:0,tag:"Verb",reason:"may-be"},{match:"[(subject|subjects|subjected)] to",group:0,tag:"Verb",reason:"subject to"},{match:"[home] to",group:0,tag:"PresentTense",reason:"home to"},{match:"[open] #Determiner",group:0,tag:"Infinitive",reason:"open-the"},{match:"(were|was) being [#PresentTense]",group:0,tag:"PastTense",reason:"was-being"},{match:"(had|has|have) [been /en$/]",group:0,tag:"Auxiliary Participle",reason:"had-been-broken"},{match:"(had|has|have) [been /ed$/]",group:0,tag:"Auxiliary PastTense",reason:"had-been-smoked"},{match:"(had|has) #Adverb? [been] #Adverb? #PastTense",group:0,tag:"Auxiliary",reason:"had-been-adj"},{match:"(had|has) to [#Noun] (#Determiner|#Possessive)",group:0,tag:"Infinitive",reason:"had-to-noun"},{match:"have [#PresentTense]",group:0,tag:"PastTense",notIf:"(come|gotten)",reason:"have-read"},{match:"(does|will|#Modal) that [work]",group:0,tag:"PastTense",reason:"does-that-work"},{match:"[(sound|sounds)] #Adjective",group:0,tag:"PresentTense",reason:"sounds-fun"},{match:"[(look|looks)] #Adjective",group:0,tag:"PresentTense",reason:"looks-good"},{match:"[(start|starts|stop|stops|begin|begins)] #Gerund",group:0,tag:"Verb",reason:"starts-thinking"},{match:"(have|had) read",tag:"Modal #PastTense",reason:"read-read"},{match:"(is|was|were) [(under|over) #PastTense]",group:0,tag:"Adverb Adjective",reason:"was-under-cooked"},{match:"[shit] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear1-verb"},{match:"[damn] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear2-verb"},{match:"[fuck] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear3-verb"},{match:"#Plural that %Noun|Verb%",tag:". #Preposition #Infinitive",reason:"jobs-that-work"},{match:"[works] for me",group:0,tag:"PresentTense",reason:"works-for-me"},{match:"as #Pronoun [please]",group:0,tag:"Infinitive",reason:"as-we-please"},{match:"[(co|mis|de|inter|intra|pre|re|un|out|under|over|counter)] #Verb",group:0,tag:["Verb","Prefix"],notIf:"(#Copula|#PhrasalVerb)",reason:"co-write"},{match:"#PastTense and [%Adj|Past%]",group:0,tag:"PastTense",reason:"dressed-and-left"},{match:"[%Adj|Past%] and #PastTense",group:0,tag:"PastTense",reason:"dressed-and-left"},{match:"#Copula #Pronoun [%Adj|Past%]",group:0,tag:"Adjective",reason:"is-he-stoked"},{match:"to [%Noun|Verb%] #Preposition",group:0,tag:"Infinitive",reason:"to-dream-of"}],[{match:"(slowly|quickly) [#Adjective]",group:0,tag:"Verb",reason:"slowly-adj"},{match:"does (#Adverb|not)? [#Adjective]",group:0,tag:"PresentTense",reason:"does-mean"},{match:"[(fine|okay|cool|ok)] by me",group:0,tag:"Adjective",reason:"okay-by-me"},{match:"i (#Adverb|do)? not? [mean]",group:0,tag:"PresentTense",reason:"i-mean"},{match:"will #Adjective",tag:"Auxiliary Infinitive",reason:"will-adj"},{match:"#Pronoun [#Adjective] #Determiner #Adjective? #Noun",group:0,tag:"Verb",reason:"he-adj-the"},{match:"#Copula [%Adj|Present%] to #Verb",group:0,tag:"Verb",reason:"adj-to"},{match:"#Copula [#Adjective] (well|badly|quickly|slowly)",group:0,tag:"Verb",reason:"done-well"},{match:"#Adjective and [#Gerund] !#Preposition?",group:0,tag:"Adjective",reason:"rude-and-x"},{match:"#Copula #Adverb? (over|under) [#PastTense]",group:0,tag:"Adjective",reason:"over-cooked"},{match:"#Copula #Adjective+ (and|or) [#PastTense]$",group:0,tag:"Adjective",reason:"bland-and-overcooked"},{match:"got #Adverb? [#PastTense] of",group:0,tag:"Adjective",reason:"got-tired-of"},{match:"(seem|seems|seemed|appear|appeared|appears|feel|feels|felt|sound|sounds|sounded) (#Adverb|#Adjective)? [#PastTense]",group:0,tag:"Adjective",reason:"felt-loved"},{match:"(seem|feel|seemed|felt) [#PastTense #Particle?]",group:0,tag:"Adjective",reason:"seem-confused"},{match:"a (bit|little|tad) [#PastTense #Particle?]",group:0,tag:"Adjective",reason:"a-bit-confused"},{match:"not be [%Adj|Past% #Particle?]",group:0,tag:"Adjective",reason:"do-not-be-confused"},{match:"#Copula just [%Adj|Past% #Particle?]",group:0,tag:"Adjective",reason:"is-just-right"},{match:"as [#Infinitive] as",group:0,tag:"Adjective",reason:"as-pale-as"},{match:"[%Adj|Past%] and #Adjective",group:0,tag:"Adjective",reason:"faled-and-oppressive"},{match:"or [#PastTense] #Noun",group:0,tag:"Adjective",notIf:"(#Copula|#Pronoun)",reason:"or-heightened-emotion"},{match:"(become|became|becoming|becomes) [#Verb]",group:0,tag:"Adjective",reason:"become-verb"},{match:"#Possessive [#PastTense] #Noun",group:0,tag:"Adjective",reason:"declared-intentions"},{match:"#Copula #Pronoun [%Adj|Present%]",group:0,tag:"Adjective",reason:"is-he-cool"},{match:"#Copula [%Adj|Past%] with",group:0,tag:"Adjective",notIf:"(associated|worn|baked|aged|armed|bound|fried|loaded|mixed|packed|pumped|filled|sealed)",reason:"is-crowded-with"},{match:"#Copula #Adverb? [%Adj|Present%]$",group:0,tag:"Adjective",reason:"was-empty$"}],[{match:"will (#Adverb|not)+? [have] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"will-have-vb"},{match:"[#Copula] (#Adverb|not)+? (#Gerund|#PastTense)",group:0,tag:"Auxiliary",reason:"copula-walking"},{match:"[(#Modal|did)+] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"modal-verb"},{match:"#Modal (#Adverb|not)+? [have] (#Adverb|not)+? [had] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"would-have"},{match:"[(has|had)] (#Adverb|not)+? #PastTense",group:0,tag:"Auxiliary",reason:"had-walked"},{match:"[(do|does|did|will|have|had|has|got)] (not|#Adverb)+? #Verb",group:0,tag:"Auxiliary",reason:"have-had"},{match:"[about to] #Adverb? #Verb",group:0,tag:["Auxiliary","Verb"],reason:"about-to"},{match:"#Modal (#Adverb|not)+? [be] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"would-be"},{match:"[(#Modal|had|has)] (#Adverb|not)+? [been] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"had-been"},{match:"[(be|being|been)] #Participle",group:0,tag:"Auxiliary",reason:"being-driven"},{match:"[may] #Adverb? #Infinitive",group:0,tag:"Auxiliary",reason:"may-want"},{match:"#Copula (#Adverb|not)+? [(be|being|been)] #Adverb+? #PastTense",group:0,tag:"Auxiliary",reason:"being-walked"},{match:"will [be] #PastTense",group:0,tag:"Auxiliary",reason:"will-be-x"},{match:"[(be|been)] (#Adverb|not)+? #Gerund",group:0,tag:"Auxiliary",reason:"been-walking"},{match:"[used to] #PresentTense",group:0,tag:"Auxiliary",reason:"used-to-walk"},{match:"#Copula (#Adverb|not)+? [going to] #Adverb+? #PresentTense",group:0,tag:"Auxiliary",reason:"going-to-walk"},{match:"#Imperative [(me|him|her)]",group:0,tag:"Reflexive",reason:"tell-him"},{match:"(is|was) #Adverb? [no]",group:0,tag:"Negative",reason:"is-no"},{match:"[(been|had|became|came)] #PastTense",group:0,notIf:"#PhrasalVerb",tag:"Auxiliary",reason:"been-told"},{match:"[(being|having|getting)] #Verb",group:0,tag:"Auxiliary",reason:"being-born"},{match:"[be] #Gerund",group:0,tag:"Auxiliary",reason:"be-walking"},{match:"[better] #PresentTense",group:0,tag:"Modal",notIf:"(#Copula|#Gerund)",reason:"better-go"},{match:"even better",tag:"Adverb #Comparative",reason:"even-better"}],[{match:"(#Verb && @hasHyphen) up",tag:"PhrasalVerb",reason:"foo-up"},{match:"(#Verb && @hasHyphen) off",tag:"PhrasalVerb",reason:"foo-off"},{match:"(#Verb && @hasHyphen) over",tag:"PhrasalVerb",reason:"foo-over"},{match:"(#Verb && @hasHyphen) out",tag:"PhrasalVerb",reason:"foo-out"},{match:"[#Verb (in|out|up|down|off|back)] (on|in)",notIf:"#Copula",tag:"PhrasalVerb Particle",reason:"walk-in-on"},{match:"(lived|went|crept|go) [on] for",group:0,tag:"PhrasalVerb",reason:"went-on"},{match:"#Verb (up|down|in|on|for)$",tag:"PhrasalVerb #Particle",notIf:"#PhrasalVerb",reason:"come-down$"},{match:"help [(stop|end|make|start)]",group:0,tag:"Infinitive",reason:"help-stop"},{match:"#PhrasalVerb (in && #Particle) #Determiner",tag:"#Verb #Preposition #Determiner",unTag:"PhrasalVerb",reason:"work-in-the"},{match:"[(stop|start|finish|help)] #Gerund",group:0,tag:"Infinitive",reason:"start-listening"},{match:"#Verb (him|her|it|us|himself|herself|itself|everything|something) [(up|down)]",group:0,tag:"Adverb",reason:"phrasal-pronoun-advb"}],[{match:"^do not? [#Infinitive #Particle?]",notIf:Vl,group:0,tag:"Imperative",reason:"do-eat"},{match:"^please do? not? [#Infinitive #Particle?]",group:0,tag:"Imperative",reason:"please-go"},{match:"^just do? not? [#Infinitive #Particle?]",group:0,tag:"Imperative",reason:"just-go"},{match:"^[#Infinitive] it #Comparative",notIf:Vl,group:0,tag:"Imperative",reason:"do-it-better"},{match:"^[#Infinitive] it (please|now|again|plz)",notIf:Vl,group:0,tag:"Imperative",reason:"do-it-please"},{match:"^[#Infinitive] (#Adjective|#Adverb)$",group:0,tag:"Imperative",notIf:"(so|such|rather|enough)",reason:"go-quickly"},{match:"^[#Infinitive] (up|down|over) #Determiner",group:0,tag:"Imperative",reason:"turn-down"},{match:"^[#Infinitive] (your|my|the|a|an|any|each|every|some|more|with|on)",group:0,notIf:"like",tag:"Imperative",reason:"eat-my-shorts"},{match:"^[#Infinitive] (him|her|it|us|me|there)",group:0,tag:"Imperative",reason:"tell-him"},{match:"^[#Infinitive] #Adjective #Noun$",group:0,tag:"Imperative",reason:"avoid-loud-noises"},{match:"^[#Infinitive] (#Adjective|#Adverb)? and #Infinitive",group:0,tag:"Imperative",reason:"call-and-reserve"},{match:"^(go|stop|wait|hurry) please?$",tag:"Imperative",reason:"go"},{match:"^(somebody|everybody) [#Infinitive]",group:0,tag:"Imperative",reason:"somebody-call"},{match:"^let (us|me) [#Infinitive]",group:0,tag:"Imperative",reason:"lets-leave"},{match:"^[(shut|close|open|start|stop|end|keep)] #Determiner #Noun",group:0,tag:"Imperative",reason:"shut-the-door"},{match:"^[#PhrasalVerb #Particle] #Determiner #Noun",group:0,tag:"Imperative",reason:"turn-off-the-light"},{match:"^[go] to .",group:0,tag:"Imperative",reason:"go-to-toronto"},{match:"^#Modal you [#Infinitive]",group:0,tag:"Imperative",reason:"would-you-"},{match:"^never [#Infinitive]",group:0,tag:"Imperative",reason:"never-stop"},{match:"^come #Infinitive",tag:"Imperative",notIf:"on",reason:"come-have"},{match:"^come and? #Infinitive",tag:"Imperative . Imperative",notIf:"#PhrasalVerb",reason:"come-and-have"},{match:"^stay (out|away|back)",tag:"Imperative",reason:"stay-away"},{match:"^[(stay|be|keep)] #Adjective",group:0,tag:"Imperative",reason:"stay-cool"},{match:"^[keep it] #Adjective",group:0,tag:"Imperative",reason:"keep-it-cool"},{match:"^do not [#Infinitive]",group:0,tag:"Imperative",reason:"do-not-be"},{match:"[#Infinitive] (yourself|yourselves)",group:0,tag:"Imperative",reason:"allow-yourself"},{match:"[#Infinitive] what .",group:0,tag:"Imperative",reason:"look-what"},{match:"^[#Infinitive] #Gerund",group:0,tag:"Imperative",reason:"keep-playing"},{match:"^[#Infinitive] (to|for|into|toward|here|there)",group:0,tag:"Imperative",reason:"go-to"},{match:"^[#Infinitive] (and|or) #Infinitive",group:0,tag:"Imperative",reason:"inf-and-inf"},{match:"^[%Noun|Verb%] to",group:0,tag:"Imperative",reason:"commit-to"},{match:"^[#Infinitive] #Adjective? #Singular #Singular",group:0,tag:"Imperative",reason:"maintain-eye-contact"},{match:"do not (forget|omit|neglect) to [#Infinitive]",group:0,tag:"Imperative",reason:"do-not-forget"},{match:"^[(ask|wear|pay|look|help|show|watch|act|fix|kill|stop|start|turn|try|win)] #Noun",group:0,tag:"Imperative",reason:"pay-attention"}],[{match:"(that|which) were [%Adj|Gerund%]",group:0,tag:"Gerund",reason:"that-were-growing"},{match:"#Gerund [#Gerund] #Plural",group:0,tag:"Adjective",reason:"hard-working-fam"}],[{match:"u r",tag:"#Pronoun #Copula",reason:"u r"},{match:"#Noun [(who|whom)]",group:0,tag:"Determiner",reason:"captain-who"},{match:"[had] #Noun+ #PastTense",group:0,tag:"Condition",reason:"had-he"},{match:"[were] #Noun+ to #Infinitive",group:0,tag:"Condition",reason:"were-he"},{match:"some sort of",tag:"Adjective Noun Conjunction",reason:"some-sort-of"},{match:"of some sort",tag:"Conjunction Adjective Noun",reason:"of-some-sort"},{match:"[such] (a|an|is)? #Noun",group:0,tag:"Determiner",reason:"such-skill"},{match:"[right] (before|after|in|into|to|toward)",group:0,tag:"#Adverb",reason:"right-into"},{match:"#Preposition [about]",group:0,tag:"Adjective",reason:"at-about"},{match:"(are|#Modal|see|do|for) [ya]",group:0,tag:"Pronoun",reason:"are-ya"},{match:"[long live] .",group:0,tag:"#Adjective #Infinitive",reason:"long-live"},{match:"[plenty] of",group:0,tag:"#Uncountable",reason:"plenty-of"},{match:"(always|nearly|barely|practically) [there]",group:0,tag:"Adjective",reason:"always-there"},{match:"[there] (#Adverb|#Pronoun)? #Copula",group:0,tag:"There",reason:"there-is"},{match:"#Copula [there] .",group:0,tag:"There",reason:"is-there"},{match:"#Modal #Adverb? [there]",group:0,tag:"There",reason:"should-there"},{match:"^[do] (you|we|they)",group:0,tag:"QuestionWord",reason:"do-you"},{match:"^[does] (he|she|it|#ProperNoun)",group:0,tag:"QuestionWord",reason:"does-he"},{match:"#Determiner #Noun+ [who] #Verb",group:0,tag:"Preposition",reason:"the-x-who"},{match:"#Determiner #Noun+ [which] #Verb",group:0,tag:"Preposition",reason:"the-x-which"},{match:"a [while]",group:0,tag:"Noun",reason:"a-while"},{match:"guess who",tag:"#Infinitive #QuestionWord",reason:"guess-who"},{match:"[fucking] !#Verb",group:0,tag:"#Gerund",reason:"f-as-gerund"}],[{match:"university of #Place",tag:"Organization",reason:"university-of-Foo"},{match:"#Noun (&|n) #Noun",tag:"Organization",reason:"Noun-&-Noun"},{match:"#Organization of the? #ProperNoun",tag:"Organization",reason:"org-of-place",safe:!0},{match:"#Organization #Country",tag:"Organization",reason:"org-country"},{match:"#ProperNoun #Organization",tag:"Organization",notIf:"#FirstName",reason:"titlecase-org"},{match:"#ProperNoun (ltd|co|inc|dept|assn|bros)",tag:"Organization",reason:"org-abbrv"},{match:"the [#Acronym]",group:0,tag:"Organization",reason:"the-acronym",safe:!0},{match:"government of the? [#Place+]",tag:"Organization",reason:"government-of-x"},{match:"(health|school|commerce) board",tag:"Organization",reason:"school-board"},{match:"(nominating|special|conference|executive|steering|central|congressional) committee",tag:"Organization",reason:"special-comittee"},{match:"(world|global|international|national|#Demonym) #Organization",tag:"Organization",reason:"global-org"},{match:"#Noun+ (public|private) school",tag:"School",reason:"noun-public-school"},{match:"#Place+ #SportsTeam",tag:"SportsTeam",reason:"place-sportsteam"},{match:"(dc|atlanta|minnesota|manchester|newcastle|sheffield) united",tag:"SportsTeam",reason:"united-sportsteam"},{match:"#Place+ fc",tag:"SportsTeam",reason:"fc-sportsteam"},{match:"#Place+ #Noun{0,2} (club|society|group|team|committee|commission|association|guild|crew)",tag:"Organization",reason:"place-noun-society"}],[{match:"(west|north|south|east|western|northern|southern|eastern)+ #Place",tag:"Region",reason:"west-norfolk"},{match:"#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|pa|sc|tn|tx|ut|vt|pr)]",group:0,tag:"Region",reason:"us-state"},{match:"portland [or]",group:0,tag:"Region",reason:"portland-or"},{match:"#ProperNoun+ (cliff|place|range|pit|place|point|room|grounds|ruins)",tag:"Place",reason:"foo-point"},{match:"in [#ProperNoun] #Place",group:0,tag:"Place",reason:"propernoun-place"},{match:"#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)",tag:"Address",reason:"address-st"},{match:"(port|mount|mt) #ProperName",tag:"Place",reason:"port-name"}],[{match:"[so] #Noun",group:0,tag:"Conjunction",reason:"so-conj"},{match:"[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)",group:0,tag:"Conjunction",reason:"how-he-is-x"},{match:"#Copula [(who|what|where|why|how|when)] #Noun",group:0,tag:"Conjunction",reason:"when-he"},{match:"#Verb [that] #Pronoun",group:0,tag:"Conjunction",reason:"said-that-he"},{match:"#Noun [that] #Copula",group:0,tag:"Conjunction",reason:"that-are"},{match:"#Noun [that] #Verb #Adjective",group:0,tag:"Conjunction",reason:"that-seem"},{match:"#Noun #Copula not? [that] #Adjective",group:0,tag:"Adverb",reason:"that-adj"},{match:"#Verb #Adverb? #Noun [(that|which)]",group:0,tag:"Preposition",reason:"that-prep"},{match:"@hasComma [which] (#Pronoun|#Verb)",group:0,tag:"Preposition",reason:"which-copula"},{match:"#Noun [like] #Noun",group:0,tag:"Preposition",reason:"noun-like"},{match:"^[like] #Determiner",group:0,tag:"Preposition",reason:"like-the"},{match:"a #Noun [like] (#Noun|#Determiner)",group:0,tag:"Preposition",reason:"a-noun-like"},{match:"#Adverb [like]",group:0,tag:"Verb",reason:"really-like"},{match:"(not|nothing|never) [like]",group:0,tag:"Preposition",reason:"nothing-like"},{match:"#Infinitive #Pronoun [like]",group:0,tag:"Preposition",reason:"treat-them-like"},{match:"[#QuestionWord] (#Pronoun|#Determiner)",group:0,tag:"Preposition",reason:"how-he"},{match:"[#QuestionWord] #Participle",group:0,tag:"Preposition",reason:"when-stolen"},{match:"[how] (#Determiner|#Copula|#Modal|#PastTense)",group:0,tag:"QuestionWord",reason:"how-is"},{match:"#Plural [(who|which|when)] .",group:0,tag:"Preposition",reason:"people-who"}],[{match:"holy (shit|fuck|hell)",tag:"Expression",reason:"swears-expression"},{match:"^[(well|so|okay|now)] !#Adjective?",group:0,tag:"Expression",reason:"well-"},{match:"^come on",tag:"Expression",reason:"come-on"},{match:"(say|says|said) [sorry]",group:0,tag:"Expression",reason:"say-sorry"},{match:"^(ok|alright|shoot|hell|anyways)",tag:"Expression",reason:"ok-"},{match:"^(say && @hasComma)",tag:"Expression",reason:"say-"},{match:"^(like && @hasComma)",tag:"Expression",reason:"like-"},{match:"^[(dude|man|girl)] #Pronoun",group:0,tag:"Expression",reason:"dude-i"}]);let Bl=null;var Sl={postTagger:function(e){const{world:t}=e,{model:n,methods:r}=t;Bl=Bl||r.one.buildNet(n.two.matches,t);const o=r.two.quickSplit(e.document).map((e=>{const t=e[0];return[t.index[0],t.index[1],t.index[1]+e.length]})),a=e.update(o);return a.cache(),a.sweep(Bl),e.uncache(),e.unfreeze(),e},tagger:e=>e.compute(["freeze","lexicon","preTagger","postTagger","unfreeze"])};const $l={api:function(e){e.prototype.confidence=function(){let e=0,t=0;return this.docs.forEach((n=>{n.forEach((n=>{t+=1,e+=n.confidence||1}))})),0===t?1:(e=>Math.round(100*e)/100)(e/t)},e.prototype.tagger=function(){return this.compute(["tagger"])}},compute:Sl,model:{two:{matches:zl}},hooks:["postTagger"]},Ml=function(e,t){const n=function(e){return Object.keys(e.hooks).filter((e=>!e.startsWith("#")&&!e.startsWith("%")))}(t);if(0===n.length)return e;e._cache||e.cache();const r=e._cache;return e.filter(((e,t)=>n.some((e=>r[t].has(e)))))};var Ll={lib:{lazy:function(e,t){let n=t;"string"==typeof t&&(n=this.buildNet([{match:t}]));const r=this.tokenize(e),o=Ml(r,n);return o.found?(o.compute(["index","tagger"]),o.match(t)):r.none()}}};const Kl=function(e,t,n){let r=e.split(/ /g).map((e=>e.toLowerCase().trim()));r=r.filter((e=>e)),r=r.map((e=>`{${e}}`)).join(" ");let o=this.match(r);return n&&(o=o.if(n)),o.has("#Verb")?function(e,t){let n=t;return e.forEach((e=>{e.has("#Infinitive")||(n=function(e,t){const n=(0,e.methods.two.transform.verb.conjugate)(t,e.model);return e.has("#Gerund")?n.Gerund:e.has("#PastTense")?n.PastTense:e.has("#PresentTense")?n.PresentTense:e.has("#Gerund")?n.Gerund:t}(e,t)),e.replaceWith(n)})),e}(o,t):o.has("#Noun")?function(e,t){let n=t;e.has("#Plural")&&(n=(0,e.methods.two.transform.noun.toPlural)(t,e.model));e.replaceWith(n,{possessives:!0})}(o,t):o.has("#Adverb")?function(e,t){const{toAdverb:n}=e.methods.two.transform.adjective,r=n(t);r&&e.replaceWith(r)}(o,t):o.has("#Adjective")?function(e,t){const{toComparative:n,toSuperlative:r}=e.methods.two.transform.adjective;let o=t;e.has("#Comparative")?o=n(o,e.model):e.has("#Superlative")&&(o=r(o,e.model)),o&&e.replaceWith(o)}(o,t):this};var Jl={api:function(e){e.prototype.swap=Kl}};h.plugin(cl),h.plugin(Ol),h.plugin($l),h.plugin(Ll),h.plugin(Jl);const Wl=function(e){const{fromComparative:t,fromSuperlative:n}=e.methods.two.transform.adjective,r=e.text("normal");return e.has("#Comparative")?t(r,e.model):e.has("#Superlative")?n(r,e.model):r};var ql={api:function(e){class Adjectives extends e{constructor(e,t,n){super(e,t,n),this.viewType="Adjectives"}json(e={}){const{toAdverb:t,toNoun:n,toSuperlative:r,toComparative:o}=this.methods.two.transform.adjective;return e.normal=!0,this.map((a=>{const i=a.toView().json(e)[0]||{},s=Wl(a);return i.adjective={adverb:t(s,this.model),noun:n(s,this.model),superlative:r(s,this.model),comparative:o(s,this.model)},i}),[])}adverbs(){return this.before("#Adverb+$").concat(this.after("^#Adverb+"))}conjugate(e){const{toComparative:t,toSuperlative:n,toNoun:r,toAdverb:o}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const a=Wl(e);return{Adjective:a,Comparative:t(a,this.model),Superlative:n(a,this.model),Noun:r(a,this.model),Adverb:o(a,this.model)}}),[])}toComparative(e){const{toComparative:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}toSuperlative(e){const{toSuperlative:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}toAdverb(e){const{toAdverb:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}toNoun(e){const{toNoun:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}}e.prototype.adjectives=function(e){let t=this.match("#Adjective");return t=t.getNth(e),new Adjectives(t.document,t.pointer)},e.prototype.superlatives=function(e){let t=this.match("#Superlative");return t=t.getNth(e),new Adjectives(t.document,t.pointer)},e.prototype.comparatives=function(e){let t=this.match("#Comparative");return t=t.getNth(e),new Adjectives(t.document,t.pointer)}}};var Ul={api:function(e){class Adverbs extends e{constructor(e,t,n){super(e,t,n),this.viewType="Adverbs"}conjugate(e){return this.getNth(e).map((e=>{const t=function(e){return e.compute("root").text("root")}(e);return{Adverb:e.text("normal"),Adjective:t}}),[])}json(e={}){const t=this.methods.two.transform.adjective.fromAdverb;return e.normal=!0,this.map((n=>{const r=n.toView().json(e)[0]||{};return r.adverb={adjective:t(r.normal)},r}),[])}}e.prototype.adverbs=function(e){let t=this.match("#Adverb");return t=t.getNth(e),new Adverbs(t.document,t.pointer)}}};const Rl=function(e){let t=this;t=function(e){let t=e.parentheses();return t=t.filter((e=>e.wordCount()>=3&&e.has("#Verb")&&e.has("#Noun"))),e.splitOn(t)}(t),t=function(e){let t=e.quotations();return t=t.filter((e=>e.wordCount()>=3&&e.has("#Verb")&&e.has("#Noun"))),e.splitOn(t)}(t),t=function(e){let t=e.match("@hasComma");return t=t.filter((e=>{if(1===e.growLeft(".").wordCount())return!1;if(1===e.growRight(". .").wordCount())return!1;let t=e.grow(".");return t=t.ifNo("@hasComma @hasComma"),t=t.ifNo("@hasComma (and|or) ."),t=t.ifNo("(#City && @hasComma) #Country"),t=t.ifNo("(#WeekDay && @hasComma) #Date"),t=t.ifNo("(#Date+ && @hasComma) #Value"),t=t.ifNo("(#Adjective && @hasComma) #Adjective"),t.found})),e.splitAfter(t)}(t),t=t.splitAfter("(@hasEllipses|@hasSemicolon|@hasDash|@hasColon)"),t=t.splitAfter("^#Pronoun (said|says)"),t=t.splitBefore("(said|says) #ProperNoun$"),t=t.splitBefore(". . if .{4}"),t=t.splitBefore("and while"),t=t.splitBefore("now that"),t=t.splitBefore("ever since"),t=t.splitBefore("(supposing|although)"),t=t.splitBefore("even (while|if|though)"),t=t.splitBefore("(whereas|whose)"),t=t.splitBefore("as (though|if)"),t=t.splitBefore("(til|until)");const n=t.match("#Verb .* [but] .* #Verb",0);n.found&&(t=t.splitBefore(n));const r=t.if("if .{2,9} then .").match("then");return t=t.splitBefore(r),"number"==typeof e&&(t=t.get(e)),t},Ql={this:"Noun",then:"Pivot"},Zl=[{match:"[that] #Determiner #Noun",group:0,chunk:"Pivot"},{match:"#PastTense [that]",group:0,chunk:"Pivot"},{match:"[so] #Determiner",group:0,chunk:"Pivot"},{match:"#Copula #Adverb+? [#Adjective]",group:0,chunk:"Adjective"},{match:"#Adjective and #Adjective",chunk:"Adjective"},{match:"#Adverb+ and #Adverb #Verb",chunk:"Verb"},{match:"#Gerund #Adjective$",chunk:"Verb"},{match:"#Gerund to #Verb",chunk:"Verb"},{match:"#PresentTense and #PresentTense",chunk:"Verb"},{match:"#Adverb #Negative",chunk:"Verb"},{match:"(want|wants|wanted) to #Infinitive",chunk:"Verb"},{match:"#Verb #Reflexive",chunk:"Verb"},{match:"#Verb [to] #Adverb? #Infinitive",group:0,chunk:"Verb"},{match:"[#Preposition] #Gerund",group:0,chunk:"Verb"},{match:"#Infinitive [that] ",group:0,chunk:"Verb"},{match:"#Noun of #Determiner? #Noun",chunk:"Noun"},{match:"#Value+ #Adverb? #Adjective",chunk:"Noun"},{match:"the [#Adjective] #Noun",chunk:"Noun"},{match:"#Singular in #Determiner? #Singular",chunk:"Noun"},{match:"#Plural [in] #Determiner? #Noun",group:0,chunk:"Pivot"},{match:"#Noun and #Determiner? #Noun",notIf:"(#Possessive|#Pronoun)",chunk:"Noun"}];let _l=null;const Xl=function(e,t){if(("undefined"!=typeof process&&process.env?process.env:self.env||{}).DEBUG_CHUNKS){const n=(e.normal+"'").padEnd(8);console.log(` | '${n} → ${t.padEnd(12)}  -fallback- `)}e.chunk=t};var Yl={chunks:function(e){const{document:t,world:n}=e;!function(e){for(let t=0;t{for(let r=0;r{if("Verb"===e.chunk){const t=e.terms.find((e=>e.tags.has("Verb")));t||e.terms.forEach((e=>e.chunk=null))}}))}(t)}},eu={compute:Yl,api:function(e){class Chunks extends e{constructor(e,t,n){super(e,t,n),this.viewType="Chunks"}isVerb(){return this.filter((e=>e.has("")))}isNoun(){return this.filter((e=>e.has("")))}isAdjective(){return this.filter((e=>e.has("")))}isPivot(){return this.filter((e=>e.has("")))}debug(){return this.toView().debug("chunks"),this}update(e){const t=new Chunks(this.document,e);return t._cache=this._cache,t}}e.prototype.chunks=function(e){let t=function(e){const t=[];let n=null;return e.clauses().docs.forEach((e=>{e.forEach((e=>{e.chunk&&e.chunk===n?t[t.length-1][2]=e.index[1]+1:(n=e.chunk,t.push([e.index[0],e.index[1],e.index[1]+1]))})),n=null})),e.update(t)}(this);return t=t.getNth(e),new Chunks(this.document,t.pointer)},e.prototype.clauses=Rl},hooks:["chunks"]};const tu=/\./g,nu=/\(/,ru=/\)/,ou=function(e,t){for(;t{e[0].pre=e[0].pre.replace(nu,"");const t=e[e.length-1];t.post=t.post.replace(ru,"")})),e}(this)}}e.prototype.parentheses=function(e){let t=function(e){const t=[];return e.docs.forEach((e=>{for(let n=0;n{e[0].pre=e[0].pre.replace(lu,"");const t=e[e.length-1];t.post=t.post.replace(uu,"")}))}(this)}}e.prototype.quotations=function(e){let t=function(e){const t=[];return e.docs.forEach((e=>{for(let n=0;n{e.forEach((e=>{e.text=e.text.replace(tu,""),e.normal=e.normal.replace(tu,"")}))})),this}addPeriods(){return this.docs.forEach((e=>{e.forEach((e=>{e.text=e.text.replace(tu,""),e.normal=e.normal.replace(tu,""),e.text=e.text.split("").join(".")+".",e.normal=e.normal.split("").join(".")+"."}))})),this}}e.prototype.acronyms=function(e){let t=this.match("#Acronym");return t=t.getNth(e),new Acronyms(t.document,t.pointer)}}(e),au(e),function(e){class Possessives extends e{constructor(e,t,n){super(e,t,n),this.viewType="Possessives"}strip(){return this.docs.forEach((e=>{e.forEach((e=>{e.text=e.text.replace(iu,""),e.normal=e.normal.replace(iu,"")}))})),this}}e.prototype.possessives=function(e){let t=function(e){let t=e.match("#Possessive+");return t.has("#Person")&&(t=t.growLeft("#Person+")),t.has("#Place")&&(t=t.growLeft("#Place+")),t.has("#Organization")&&(t=t.growLeft("#Organization+")),t}(this);return t=t.getNth(e),new Possessives(t.document,t.pointer)}}(e),hu(e),function(e){gu.forEach((t=>{e.prototype[t[0]]=function(e){const n=this.match(t[1]);return"number"==typeof e?n.get(e):n}})),e.prototype.phoneNumbers=du,mu.forEach((t=>{e.prototype[t[0]]=e.prototype[t[1]]}))}(e),function(e){class Slashes extends e{constructor(e,t,n){super(e,t,n),this.viewType="Slashes"}split(){return this.map((e=>{const t=e.text().split(pu);return(e=e.replaceWith(t.join(" "))).growRight("("+t.join("|")+")+")}))}}e.prototype.slashes=function(e){let t=this.match("#SlashedTerm");return t=t.getNth(e),new Slashes(t.document,t.pointer)}}(e)}};const bu=function(e,t){e.docs.forEach((e=>{e.forEach(t)}))};var vu={case:e=>{bu(e,(e=>{e.text=e.text.toLowerCase()}))},unicode:e=>{const t=e.world,n=t.methods.one.killUnicode;bu(e,(e=>e.text=n(e.text,t)))},whitespace:e=>{bu(e,(e=>{e.post=e.post.replace(/\s+/g," "),e.post=e.post.replace(/\s([.,?!:;])/g,"$1"),e.pre=e.pre.replace(/\s+/g,"")}))},punctuation:e=>{bu(e,(e=>{e.post=e.post.replace(/[–—-]/g," "),e.post=e.post.replace(/[,:;]/g,""),e.post=e.post.replace(/\.{2,}/g,""),e.post=e.post.replace(/\?{2,}/g,"?"),e.post=e.post.replace(/!{2,}/g,"!"),e.post=e.post.replace(/\?!+/g,"?")}));const t=e.docs,n=t[t.length-1];if(n&&n.length>0){const e=n[n.length-1];e.post=e.post.replace(/ /g,"")}},contractions:e=>{e.contractions().expand()},acronyms:e=>{e.acronyms().strip()},parentheses:e=>{e.parentheses().strip()},possessives:e=>{e.possessives().strip()},quotations:e=>{e.quotations().strip()},emoji:e=>{e.emojis().remove()},honorifics:e=>{e.match("#Honorific+ #Person").honorifics().remove()},adverbs:e=>{e.adverbs().remove()},nouns:e=>{e.nouns().toSingular()},verbs:e=>{e.verbs().toInfinitive()},numbers:e=>{e.numbers().toNumber()},debullet:e=>{const t=/^\s*([-–—*•])\s*$/;return e.docs.forEach((e=>{t.test(e[0].pre)&&(e[0].pre=e[0].pre.replace(t,""))})),e}};const yu=e=>e.split("|").reduce(((e,t)=>(e[t]=!0,e)),{}),wu="unicode|punctuation|whitespace|acronyms",ku="|case|contractions|parentheses|quotations|emoji|honorifics|debullet",Pu={light:yu(wu),medium:yu(wu+ku),heavy:yu(wu+ku+"|possessives|adverbs|nouns|verbs")};var Au={api:function(e){e.prototype.normalize=function(e="light"){return"string"==typeof e&&(e=Pu[e]),Object.keys(e).forEach((t=>{vu.hasOwnProperty(t)&&vu[t](this,e[t])})),this}}};const Cu=["after","although","as if","as long as","as","because","before","even if","even though","ever since","if","in order that","provided that","since","so that","than","that","though","unless","until","what","whatever","when","whenever","where","whereas","wherever","whether","which","whichever","who","whoever","whom","whomever","whose"],Nu=function(e){if(e.before("#Preposition$").found)return!0;if(!e.before().found)return!1;for(let t=0;t3&&n.endsWith("s")&&!n.endsWith("ss")},xu=function(e){const t=function(e){let t=e.clone();return t=t.match("#Noun+"),t=t.remove("(#Adjective|#Preposition|#Determiner|#Value)"),t=t.not("#Possessive"),t=t.first(),t.found?t:e}(e);return{determiner:e.match("#Determiner").eq(0),adjectives:e.match("#Adjective"),number:e.values(),isPlural:ju(e,t),isSubordinate:Nu(e),root:t}},Iu=e=>e.text(),Tu=e=>e.json({terms:!1,normal:!0}).map((e=>e.normal)),Du=function(e){if(!e.found)return null;const t=e.values(0);if(t.found){return(t.parse()[0]||{}).num}return null},Hu=function(e){return!e.has("^(#Uncountable|#ProperNoun|#Place|#Pronoun|#Acronym)+$")},Eu={tags:!0},Gu={tags:!0};var Ou={api:function(e){class Nouns extends e{constructor(e,t,n){super(e,t,n),this.viewType="Nouns"}parse(e){return this.getNth(e).map(xu)}json(e){const t="object"==typeof e?e:{};return this.getNth(e).map((e=>{const n=e.toView().json(t)[0]||{};return t&&!1!==t.noun&&(n.noun=function(e){const t=xu(e);return{root:Iu(t.root),number:Du(t.number),determiner:Iu(t.determiner),adjectives:Tu(t.adjectives),isPlural:t.isPlural,isSubordinate:t.isSubordinate}}(e)),n}),[])}conjugate(e){const t=this.world.methods.two.transform.noun;return this.getNth(e).map((e=>{const n=xu(e),r=n.root.compute("root").text("root"),o={Singular:r};return Hu(n.root)&&(o.Plural=t.toPlural(r,this.model)),o.Singular===o.Plural&&delete o.Plural,o}),[])}isPlural(e){const t=this.filter((e=>xu(e).isPlural));return t.getNth(e)}isSingular(e){const t=this.filter((e=>!xu(e).isPlural));return t.getNth(e)}adjectives(e){let t=this.update([]);return this.forEach((e=>{const n=xu(e).adjectives;n.found&&(t=t.concat(n))})),t.getNth(e)}toPlural(e){return this.getNth(e).map((e=>function(e,t){if(!0===t.isPlural)return e;if(t.root.has("#Possessive")&&(t.root=t.root.possessives().strip()),!Hu(t.root))return e;const{methods:n,model:r}=e.world,{toPlural:o}=n.two.transform.noun,a=o(t.root.text({keepPunct:!1}),r);e.match(t.root).replaceWith(a,Eu).tag("Plural","toPlural"),t.determiner.has("(a|an)")&&e.remove(t.determiner);const i=t.root.after("not? #Adverb+? [#Copula]",0);return i.found&&(i.has("is")?e.replace(i,"are"):i.has("was")&&e.replace(i,"were")),e}(e,xu(e))))}toSingular(e){return this.getNth(e).map((e=>function(e,t){if(!1===t.isPlural)return e;const{methods:n,model:r}=e.world,{toSingular:o}=n.two.transform.noun,a=o(t.root.text("normal"),r);return e.replace(t.root,a,Gu).tag("Singular","toPlural"),e}(e,xu(e))))}update(e){const t=new Nouns(this.document,e);return t._cache=this._cache,t}}e.prototype.nouns=function(e){let t=function(e){let t=e.clauses().match(""),n=t.match("@hasComma");return n=n.not("#Place"),n.found&&(t=t.splitAfter(n)),t=t.splitOn("#Expression"),t=t.splitOn("(he|she|we|you|they|i)"),t=t.splitOn("(#Noun|#Adjective) [(he|him|she|it)]",0),t=t.splitOn("[(he|him|she|it)] (#Determiner|#Value)",0),t=t.splitBefore("#Noun [(the|a|an)] #Adjective? #Noun",0),t=t.splitOn("[(here|there)] #Noun",0),t=t.splitOn("[#Noun] (here|there)",0),t=t.splitBefore("(our|my|their|your)"),t=t.splitOn("#Noun [#Determiner]",0),t=t.if("#Noun"),t}(this);return t=t.getNth(e),new Nouns(this.document,t.pointer)}}};var Fu={ones:{zeroth:0,first:1,second:2,third:3,fourth:4,fifth:5,sixth:6,seventh:7,eighth:8,ninth:9,zero:0,one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9},teens:{tenth:10,eleventh:11,twelfth:12,thirteenth:13,fourteenth:14,fifteenth:15,sixteenth:16,seventeenth:17,eighteenth:18,nineteenth:19,ten:10,eleven:11,twelve:12,thirteen:13,fourteen:14,fifteen:15,sixteen:16,seventeen:17,eighteen:18,nineteen:19},tens:{twentieth:20,thirtieth:30,fortieth:40,fourtieth:40,fiftieth:50,sixtieth:60,seventieth:70,eightieth:80,ninetieth:90,twenty:20,thirty:30,forty:40,fourty:40,fifty:50,sixty:60,seventy:70,eighty:80,ninety:90},multiples:{hundredth:100,thousandth:1e3,millionth:1e6,billionth:1e9,trillionth:1e12,quadrillionth:1e15,quintillionth:1e18,sextillionth:1e21,septillionth:1e24,hundred:100,thousand:1e3,million:1e6,billion:1e9,trillion:1e12,quadrillion:1e15,quintillion:1e18,sextillion:1e21,septillion:1e24,grand:1e3}};const Vu=(e,t)=>{if(Fu.ones.hasOwnProperty(e)){if(t.ones||t.teens)return!1}else if(Fu.teens.hasOwnProperty(e)){if(t.ones||t.teens||t.tens)return!1}else if(Fu.tens.hasOwnProperty(e)&&(t.ones||t.teens||t.tens))return!1;return!0},zu=function(e){let t="0.";for(let n=0;ne=(e=(e=(e=(e=(e=(e=(e=e.replace(/1st$/,"1")).replace(/2nd$/,"2")).replace(/3rd$/,"3")).replace(/([4567890])r?th$/,"$1")).replace(/^[$€¥£¢]/,"")).replace(/[%$€¥£¢]$/,"")).replace(/,/g,"")).replace(/([0-9])([a-z\u00C0-\u00FF]{1,2})$/,"$1"),Su=/^([0-9,. ]+)\/([0-9,. ]+)$/,$u={"a few":3,"a couple":2,"a dozen":12,"two dozen":24,zero:0},Mu=e=>Object.keys(e).reduce(((t,n)=>t+=e[n]),0),Lu=function(e){if(!0===$u.hasOwnProperty(e))return $u[e];if("a"===e||"an"===e)return 1;const t=(e=>{const t=[{reg:/^(minus|negative)[\s-]/i,mult:-1},{reg:/^(a\s)?half[\s-](of\s)?/i,mult:.5}];for(let n=0;n#Value+] out of every? [#Value+]");if(!0!==t.found)return null;let{num:n,den:r}=t.groups();return n&&r?(n=Ju(n),r=Ju(r),n&&r&&"number"==typeof n&&"number"==typeof r?{numerator:n,denominator:r}:null):null}(e)||function(e){const t=e.match("[(#Cardinal|a)+] [#Fraction+]");if(!0!==t.found)return null;let{num:n,den:r}=t.groups();n=n.has("a")?1:Ju(n);let o=r.text("reduced");return Ku.test(o)&&(o=o.replace(Ku,""),r=r.replaceWith(o)),r=Wu.hasOwnProperty(o)?Wu[o]:Ju(r),"number"==typeof n&&"number"==typeof r?{numerator:n,denominator:r}:null}(e)||function(e){const t=e.match("^#Ordinal$");if(!0!==t.found)return null;if(e.lookAhead("^of ."))return{numerator:1,denominator:Ju(t)};return null}(e)||null;return null!==t&&t.numerator&&t.denominator&&(t.decimal=t.numerator/t.denominator,t.decimal=(e=>{const t=Math.round(1e3*e)/1e3;return 0===t&&0!==e?e:t})(t.decimal)),t},Uu=function(e){if(e<1e6)return String(e);let t;return t="number"==typeof e?e.toFixed(0):e,-1===t.indexOf("e+")?t:t.replace(".","").split("e+").reduce((function(e,t){return e+Array(t-e.length+2).join(0)}))},Ru=[["ninety",90],["eighty",80],["seventy",70],["sixty",60],["fifty",50],["forty",40],["thirty",30],["twenty",20]],Qu=["","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"],Zu=[[1e24,"septillion"],[1e20,"hundred sextillion"],[1e21,"sextillion"],[1e20,"hundred quintillion"],[1e18,"quintillion"],[1e17,"hundred quadrillion"],[1e15,"quadrillion"],[1e14,"hundred trillion"],[1e12,"trillion"],[1e11,"hundred billion"],[1e9,"billion"],[1e8,"hundred million"],[1e6,"million"],[1e5,"hundred thousand"],[1e3,"thousand"],[100,"hundred"],[1,"one"]],_u=function(e){const t=[];if(e>100)return t;for(let n=0;n=Ru[n][1]&&(e-=Ru[n][1],t.push(Ru[n][0]));return Qu[e]&&t.push(Qu[e]),t},Xu=function(e){let t=e.num;if(0===t||"0"===t)return"zero";t>1e21&&(t=Uu(t));let n=[];t<0&&(n.push("minus"),t=Math.abs(t));const r=function(e){let t=e;const n=[];return Zu.forEach((r=>{if(e>=r[0]){const e=Math.floor(t/r[0]);t-=e*r[0],e&&n.push({unit:r[1],count:e})}})),n}(t);for(let e=0;e1&&n.push("and")),n=n.concat(_u(r[e].count)),n.push(t)}return n=n.concat((e=>{const t=["zero","one","two","three","four","five","six","seven","eight","nine"],n=[],r=Uu(e).match(/\.([0-9]+)/);if(!r||!r[0])return n;n.push("point");const o=r[0].split("");for(let e=0;ee)),0===n.length&&(n[0]=""),n.join(" ")},Yu={one:"first",two:"second",three:"third",five:"fifth",eight:"eighth",nine:"ninth",twelve:"twelfth",twenty:"twentieth",thirty:"thirtieth",forty:"fortieth",fourty:"fourtieth",fifty:"fiftieth",sixty:"sixtieth",seventy:"seventieth",eighty:"eightieth",ninety:"ninetieth"},ec=e=>{const t=Xu(e).split(" "),n=t[t.length-1];return Yu.hasOwnProperty(n)?t[t.length-1]=Yu[n]:t[t.length-1]=n.replace(/y$/,"i")+"th",t.join(" ")},tc=function(e){class Fractions extends e{constructor(e,t,n){super(e,t,n),this.viewType="Fractions"}parse(e){return this.getNth(e).map(qu)}get(e){return this.getNth(e).map(qu)}json(e){return this.getNth(e).map((t=>{const n=t.toView().json(e)[0],r=qu(t);return n.fraction=r,n}),[])}toDecimal(e){return this.getNth(e).forEach((e=>{const{decimal:t}=qu(e);(e=e.replaceWith(String(t),!0)).tag("NumericValue"),e.unTag("Fraction")})),this}toFraction(e){return this.getNth(e).forEach((e=>{const t=qu(e);if(t&&"number"==typeof t.numerator&&"number"==typeof t.denominator){const n=`${t.numerator}/${t.denominator}`;this.replace(e,n)}})),this}toOrdinal(e){return this.getNth(e).forEach((e=>{let t=function(e){if(!e.numerator||!e.denominator)return"";const t=Xu({num:e.numerator});let n=ec({num:e.denominator});return 2===e.denominator&&(n="half"),t&&n?(1!==e.numerator&&(n+="s"),`${t} ${n}`):""}(qu(e));e.after("^#Noun").found&&(t+=" of"),e.replaceWith(t)})),this}toCardinal(e){return this.getNth(e).forEach((e=>{const t=function(e){return e.numerator&&e.denominator?`${Xu({num:e.numerator})} out of ${Xu({num:e.denominator})}`:""}(qu(e));e.replaceWith(t)})),this}toPercentage(e){return this.getNth(e).forEach((e=>{const{decimal:t}=qu(e);let n=100*t;n=Math.round(100*n)/100,e.replaceWith(`${n}%`)})),this}}e.prototype.fractions=function(e){let t=function(e,t){let n=e.match("#Fraction+");return n=n.filter((e=>!e.lookBehind("#Value and$").found)),n=n.notIf("#Value seconds"),n}(this);return t=t.getNth(e),new Fractions(this.document,t.pointer)}},nc="twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|fourty",rc=function(e){let t=e.match("#Value+");if(t.has("#NumericValue #NumericValue")&&(t.has("#Value @hasComma #Value")?t.splitAfter("@hasComma"):t.has("#NumericValue #Fraction")?t.splitAfter("#NumericValue #Fraction"):t=t.splitAfter("#NumericValue")),t.has("#Value #Value #Value")&&!t.has("#Multiple")&&t.has("("+nc+") #Cardinal #Cardinal")&&(t=t.splitAfter("("+nc+") #Cardinal")),t.has("#Value #Value")){t.has("#NumericValue #NumericValue")&&(t=t.splitOn("#Year")),t.has("("+nc+") (eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen)")&&(t=t.splitAfter("("+nc+")"));const e=t.match("#Cardinal #Cardinal");if(e.found&&!t.has("(point|decimal|#Fraction)")&&!e.has("#Cardinal (#Multiple|point|decimal)")){const n=t.has(`(one|two|three|four|five|six|seven|eight|nine) (${nc})`),r=e.has("("+nc+") #Cardinal"),o=e.has("#Multiple #Value");n||r||o||e.terms().forEach((e=>{t=t.splitOn(e)}))}t.match("#Ordinal #Ordinal").match("#TextValue").found&&!t.has("#Multiple")&&(t.has("("+nc+") #Ordinal")||(t=t.splitAfter("#Ordinal"))),t.has("#Time")&&(t=t.splitOn("#Time")),t=t.splitBefore("#Ordinal [#Cardinal]",0),t.has("#TextValue #NumericValue")&&!t.has("("+nc+"|#Multiple)")&&(t=t.splitBefore("#TextValue #NumericValue"))}return t=t.splitAfter("#NumberRange"),t=t.splitBefore("#Year"),t},oc=function(e){if("string"==typeof e)return{num:Lu(e)};let t=e.text("reduced");const n=e.growRight("#Unit").match("#Unit$").text("machine"),r=/[0-9],[0-9]/.test(e.text("text"));if(1===e.terms().length&&!e.has("#Multiple")){const o=function(e,t){const n=(e=e.replace(/,/g,"")).split(/([0-9.,]*)/);let[r,o]=n,a=n.slice(2).join("");return""!==o&&t.length<2?(o=Number(o||e),"number"!=typeof o&&(o=null),a=a||"","st"!==a&&"nd"!==a&&"rd"!==a&&"th"!==a||(a=""),{prefix:r||"",num:o,suffix:a}):null}(t,e);if(null!==o)return o.hasComma=r,o.unit=n,o}let o=e.match("#Fraction{2,}$");o=!1===o.found?e.match("^#Fraction$"):o;let a=null;o.found&&(o.has("#Value and #Value #Fraction")&&(o=o.match("and #Value #Fraction")),a=qu(o),t=(e=(e=e.not(o)).not("and$")).text("reduced"));let i=0;return t&&(i=Lu(t)||0),a&&a.decimal&&(i+=a.decimal),{hasComma:r,prefix:"",num:i,suffix:"",isOrdinal:e.has("#Ordinal"),isText:e.has("#TextValue"),isFraction:e.has("#Fraction"),isMoney:e.has("#Money"),unit:n}},ac={"¢":"cents",$:"dollars","£":"pounds","¥":"yen","€":"euros","₡":"colón","฿":"baht","₭":"kip","₩":"won","₹":"rupees","₽":"ruble","₺":"liras"},ic={"%":"percent","°":"degrees"},sc=function(e){const t={suffix:"",prefix:e.prefix};return ac.hasOwnProperty(e.prefix)&&(t.suffix+=" "+ac[e.prefix],t.prefix=""),ic.hasOwnProperty(e.suffix)&&(t.suffix+=" "+ic[e.suffix]),t.suffix&&1===e.num&&(t.suffix=t.suffix.replace(/s$/,"")),!t.suffix&&e.suffix&&(t.suffix+=" "+e.suffix),t},lc=function(e,t){if("TextOrdinal"===t){const{prefix:t,suffix:n}=sc(e);return t+ec(e)+n}if("Ordinal"===t)return e.prefix+function(e){const t=e.num;if(!t&&0!==t)return null;const n=t%100;if(n>10&&n<20)return String(t)+"th";const r={0:"th",1:"st",2:"nd",3:"rd"};let o=Uu(t);const a=o.slice(o.length-1,o.length);return o+=r[a]?r[a]:"th",o}(e)+e.suffix;if("TextCardinal"===t){const{prefix:t,suffix:n}=sc(e);return t+Xu(e)+n}let n=e.num;return e.hasComma&&(n=n.toLocaleString()),e.prefix+String(n)+e.suffix},uc=function(e){if("string"==typeof e||"number"==typeof e){const t={};return t[e]=!0,t}return t=e,"[object Array]"===Object.prototype.toString.call(t)?e.reduce(((e,t)=>(e[t]=!0,e)),{}):e||{};var t},cc=function(e){class Numbers extends e{constructor(e,t,n){super(e,t,n),this.viewType="Numbers"}parse(e){return this.getNth(e).map(oc)}get(e){return this.getNth(e).map(oc).map((e=>e.num))}json(e){const t="object"==typeof e?e:{};return this.getNth(e).map((e=>{const n=e.toView().json(t)[0],r=oc(e);return n.number={prefix:r.prefix,num:r.num,suffix:r.suffix,hasComma:r.hasComma,unit:r.unit},n}),[])}units(){return this.growRight("#Unit").match("#Unit$")}isUnit(e){return function(e,t={}){return t=uc(t),e.filter((e=>{const{unit:n}=oc(e);return!(!n||!0!==t[n])}))}(this,e)}isOrdinal(){return this.if("#Ordinal")}isCardinal(){return this.if("#Cardinal")}toNumber(){const e=this.map((e=>{if(!this.has("#TextValue"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#Ordinal")?"Ordinal":"Cardinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("NumericValue")}));return new Numbers(e.document,e.pointer)}toLocaleString(){return this.forEach((e=>{const t=oc(e);if(null===t.num)return;let n=t.num.toLocaleString();if(e.has("#Ordinal")){const e=lc(t,"Ordinal").match(/[a-z]+$/);e&&(n+=e[0]||"")}e.replaceWith(n,{tags:!0})})),this}toText(){const e=this.map((e=>{if(e.has("#TextValue"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#Ordinal")?"TextOrdinal":"TextCardinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("TextValue"),e}));return new Numbers(e.document,e.pointer)}toCardinal(){const e=this.map((e=>{if(!e.has("#Ordinal"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#TextValue")?"TextCardinal":"Cardinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("Cardinal"),e}));return new Numbers(e.document,e.pointer)}toOrdinal(){const e=this.map((e=>{if(e.has("#Ordinal"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#TextValue")?"TextOrdinal":"Ordinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("Ordinal"),e}));return new Numbers(e.document,e.pointer)}isEqual(e){return this.filter((t=>oc(t).num===e))}greaterThan(e){return this.filter((t=>oc(t).num>e))}lessThan(e){return this.filter((t=>oc(t).num{const r=oc(n).num;return r>e&&r{const n=oc(t);if(n.num=e,null===n.num)return t;let r=t.has("#Ordinal")?"Ordinal":"Cardinal";t.has("#TextValue")&&(r=t.has("#Ordinal")?"TextOrdinal":"TextCardinal");let o=lc(n,r);return n.hasComma&&"Cardinal"===r&&(o=Number(o).toLocaleString()),(t=t.not("#Currency")).replaceWith(o,{tags:!0}),t}));return new Numbers(t.document,t.pointer)}add(e){if(!e)return this;"string"==typeof e&&(e=oc(e).num);const t=this.map((t=>{const n=oc(t);if(null===n.num)return t;n.num+=e;let r=t.has("#Ordinal")?"Ordinal":"Cardinal";n.isText&&(r=t.has("#Ordinal")?"TextOrdinal":"TextCardinal");const o=lc(n,r);return t.replaceWith(o,{tags:!0}),t}));return new Numbers(t.document,t.pointer)}subtract(e,t){return this.add(-1*e,t)}increment(e){return this.add(1,e)}decrement(e){return this.add(-1,e)}update(e){const t=new Numbers(this.document,e);return t._cache=this._cache,t}}Numbers.prototype.toNice=Numbers.prototype.toLocaleString,Numbers.prototype.isBetween=Numbers.prototype.between,Numbers.prototype.minus=Numbers.prototype.subtract,Numbers.prototype.plus=Numbers.prototype.add,Numbers.prototype.equals=Numbers.prototype.isEqual,e.prototype.numbers=function(e){let t=rc(this);return t=t.getNth(e),new Numbers(this.document,t.pointer)},e.prototype.percentages=function(e){let t=rc(this);return t=t.filter((e=>e.has("#Percent")||e.after("^percent"))),t=t.getNth(e),new Numbers(this.document,t.pointer)},e.prototype.money=function(e){let t=rc(this);return t=t.filter((e=>e.has("#Money")||e.after("^#Currency"))),t=t.getNth(e),new Numbers(this.document,t.pointer)},e.prototype.values=e.prototype.numbers};var hc={api:function(e){tc(e),cc(e)}};const dc={people:!0,emails:!0,phoneNumbers:!0,places:!0},gc=function(e={}){return!1!==(e=Object.assign({},dc,e)).people&&this.people().replaceWith("██████████"),!1!==e.emails&&this.emails().replaceWith("██████████"),!1!==e.places&&this.places().replaceWith("██████████"),!1!==e.phoneNumbers&&this.phoneNumbers().replaceWith("███████"),this},mc={api:function(e){e.prototype.redact=gc}},pc=function(e){let t=null;return e.has("#PastTense")?t="PastTense":e.has("#FutureTense")?t="FutureTense":e.has("#PresentTense")&&(t="PresentTense"),{tense:t}},fc=function(e){const t=function(e){let t=e;return 1===t.length?t:(t=t.if("#Verb"),1===t.length?t:(t=t.ifNo("(after|although|as|because|before|if|since|than|that|though|when|whenever|where|whereas|wherever|whether|while|why|unless|until|once)"),t=t.ifNo("^even (if|though)"),t=t.ifNo("^so that"),t=t.ifNo("^rather than"),t=t.ifNo("^provided that"),1===t.length?t:(t=t.ifNo("(that|which|whichever|who|whoever|whom|whose|whomever)"),1===t.length?t:(t=t.ifNo("(^despite|^during|^before|^through|^throughout)"),1===t.length?t:(t=t.ifNo("^#Gerund"),1===t.length?t:(0===t.length&&(t=e),t.eq(0)))))))}(e.clauses()),n=t.chunks();let r=e.none(),o=e.none(),a=e.none();return n.forEach(((e,t)=>{0!==t||e.has("")?o.found||!e.has("")?o.found&&(a=a.concat(e)):o=e:r=e})),o.found&&!r.found&&(r=o.before("+").first()),{subj:r,verb:o,pred:a,grammar:pc(o)}};var bc={api:function(e){class Sentences extends e{constructor(e,t,n){super(e,t,n),this.viewType="Sentences"}json(e={}){return this.map((t=>{const n=t.toView().json(e)[0]||{},{subj:r,verb:o,pred:a,grammar:i}=fc(t);return n.sentence={subject:r.text("normal"),verb:o.text("normal"),predicate:a.text("normal"),grammar:i},n}),[])}toPastTense(e){return this.getNth(e).map((e=>(fc(e),function(e){let t=e.verbs();const n=t.eq(0);if(n.has("#PastTense"))return e;if(n.toPastTense(),t.length>1){t=t.slice(1),t=t.filter((e=>!e.lookBehind("to$").found)),t=t.if("#PresentTense"),t=t.notIf("#Gerund");const n=e.match("to #Verb+ #Conjunction #Verb").terms();t=t.not(n),t.found&&t.verbs().toPastTense()}return e}(e))))}toPresentTense(e){return this.getNth(e).map((e=>(fc(e),function(e){let t=e.verbs();return t.eq(0).toPresentTense(),t.length>1&&(t=t.slice(1),t=t.filter((e=>!e.lookBehind("to$").found)),t=t.notIf("#Gerund"),t.found&&t.verbs().toPresentTense()),e}(e))))}toFutureTense(e){return this.getNth(e).map((e=>(fc(e),e=function(e){let t=e.verbs();if(t.eq(0).toFutureTense(),t=(e=e.fullSentence()).verbs(),t.length>1){t=t.slice(1);const e=t.filter((e=>!(e.lookBehind("to$").found||!e.has("#Copula #Gerund")&&(e.has("#Gerund")||!e.has("#Copula")&&e.has("#PresentTense")&&!e.has("#Infinitive")&&e.lookBefore("(he|she|it|that|which)$").found))));e.found&&e.forEach((e=>{if(e.has("#Copula"))return e.match("was").replaceWith("is"),void e.match("is").replaceWith("will be");e.toInfinitive()}))}return e}(e),e)))}toInfinitive(e){return this.getNth(e).map((e=>(fc(e),function(e){return e.verbs().toInfinitive(),e}(e))))}toNegative(e){return this.getNth(e).map((e=>(fc(e),function(e){return e.verbs().first().toNegative().compute("chunks"),e}(e))))}toPositive(e){return this.getNth(e).map((e=>(fc(e),function(e){return e.verbs().first().toPositive().compute("chunks"),e}(e))))}isQuestion(e){return this.questions(e)}isExclamation(e){const t=this.filter((e=>e.lastTerm().has("@hasExclamation")));return t.getNth(e)}isStatement(e){const t=this.filter((e=>!e.isExclamation().found&&!e.isQuestion().found));return t.getNth(e)}update(e){const t=new Sentences(this.document,e);return t._cache=this._cache,t}}Sentences.prototype.toPresent=Sentences.prototype.toPresentTense,Sentences.prototype.toPast=Sentences.prototype.toPastTense,Sentences.prototype.toFuture=Sentences.prototype.toFutureTense;const t={sentences:function(e){let t=this.map((e=>e.fullSentence()));return t=t.getNth(e),new Sentences(this.document,t.pointer)},questions:function(e){const t=function(e){const t=/\?/,{document:n}=e;return e.filter((e=>{const r=e.docs[0]||[],o=r[r.length-1];return!(!o||n[o.index[0]].length!==r.length)&&(!!t.test(o.post)||function(e){const t=e.clauses();return!(/\.\.$/.test(e.out("text"))||e.has("^#QuestionWord")&&e.has("@hasComma")||!e.has("or not$")&&!e.has("^#QuestionWord")&&!e.has("^(do|does|did|is|was|can|could|will|would|may) #Noun")&&!e.has("^(have|must) you")&&!t.has("(do|does|is|was) #Noun+ #Adverb? (#Adjective|#Infinitive)$"))}(e))}))}(this);return t.getNth(e)}};Object.assign(e.prototype,t)}};const vc=function(e){const t={};t.firstName=e.match("#FirstName+"),t.lastName=e.match("#LastName+"),t.honorific=e.match("#Honorific+");const n=t.lastName,r=t.firstName;return r.found&&n.found||r.found||n.found||!e.has("^#Honorific .$")||(t.lastName=e.match(".$")),t},yc="male",wc="female",kc={mr:yc,mrs:wc,miss:wc,madam:wc,king:yc,queen:wc,duke:yc,duchess:wc,baron:yc,baroness:wc,count:yc,countess:wc,prince:yc,princess:wc,sire:yc,dame:wc,lady:wc,ayatullah:yc,congressman:yc,congresswoman:wc,"first lady":wc,mx:null},Pc=function(e,t){const{firstName:n,honorific:r}=e;if(n.has("#FemaleName"))return wc;if(n.has("#MaleName"))return yc;if(r.found){let e=r.text("normal");if(e=e.replace(/\./g,""),kc.hasOwnProperty(e))return kc[e];if(/^her /.test(e))return wc;if(/^his /.test(e))return yc}const o=t.after();if(!o.has("#Person")&&o.has("#Pronoun")){const e=o.match("#Pronoun");if(e.has("(they|their)"))return null;const t=e.has("(he|his)"),n=e.has("(she|her|hers)");if(t&&!n)return yc;if(n&&!t)return wc}return null},Ac=function(e){const t=this.clauses();let n=t.people();return n=n.concat(t.places()),n=n.concat(t.organizations()),n=n.not("(someone|man|woman|mother|brother|sister|father)"),n=n.sort("seq"),n=n.getNth(e),n};var Cc={api:function(e){!function(e){class People extends e{constructor(e,t,n){super(e,t,n),this.viewType="People"}parse(e){return this.getNth(e).map(vc)}json(e){const t="object"==typeof e?e:{};return this.getNth(e).map((e=>{const n=e.toView().json(t)[0],r=vc(e);return n.person={firstName:r.firstName.text("normal"),lastName:r.lastName.text("normal"),honorific:r.honorific.text("normal"),presumed_gender:Pc(r,e)},n}),[])}presumedMale(){return this.filter((e=>e.has("(#MaleName|mr|mister|sr|jr|king|pope|prince|sir)")))}presumedFemale(){return this.filter((e=>e.has("(#FemaleName|mrs|miss|queen|princess|madam)")))}update(e){const t=new People(this.document,e);return t._cache=this._cache,t}}e.prototype.people=function(e){let t=function(e){let t=e.splitAfter("@hasComma");t=t.match("#Honorific+? #Person+");const n=t.match("#Possessive").notIf("(his|her)");return t=t.splitAfter(n),t}(this);return t=t.getNth(e),new People(this.document,t.pointer)}}(e),function(e){e.prototype.places=function(t){let n=function(e){let t=e.match("(#Place|#Address)+"),n=t.match("@hasComma");return n=n.filter((e=>!!e.has("(asia|africa|europe|america)$")||!e.has("(#City|#Region|#ProperNoun)$")||!e.after("^(#Country|#Region)").found)),t=t.splitAfter(n),t}(this);return n=n.getNth(t),new e(this.document,n.pointer)}}(e),function(e){e.prototype.organizations=function(e){return this.match("#Organization+").getNth(e)}}(e),function(e){e.prototype.topics=Ac}(e)}};const Nc=function(e,t){const n={pre:e.none(),post:e.none()};if(!e.has("#Adverb"))return n;const r=e.splitOn(t);return 3===r.length?{pre:r.eq(0).adverbs(),post:r.eq(2).adverbs()}:r.eq(0).isDoc(t)?(n.post=r.eq(1).adverbs(),n):(n.pre=r.eq(0).adverbs(),n)},jc=function(e,t){const n=e.splitBefore(t);if(n.length<=1)return e.none();let r=n.eq(0);return r=r.not("(#Adverb|#Negative|#Prefix)"),r},xc=function(e){return e.match("#Negative")},Ic=function(e){if(!e.has("(#Particle|#PhrasalVerb)"))return{verb:e.none(),particle:e.none()};const t=e.match("#Particle$");return{verb:e.not(t),particle:t}},Tc=function(e){const t=e.clone();t.contractions().expand();const n=function(e){let t=e;return e.wordCount()>1&&(t=e.not("(#Negative|#Auxiliary|#Modal|#Adverb|#Prefix)")),t.length>1&&!t.has("#Phrasal #Particle")&&(t=t.last()),t=t.not("(want|wants|wanted) to"),t.found||(t=e.not("#Negative")),t}(t);return{root:n,prefix:t.match("#Prefix"),adverbs:Nc(t,n),auxiliary:jc(t,n),negative:xc(t),phrasal:Ic(n)}},Dc={tense:"PresentTense"},Hc={conditional:!0},Ec={tense:"FutureTense"},Gc={progressive:!0},Oc={tense:"PastTense"},Fc={complete:!0,progressive:!1},Vc={passive:!0},zc=function(e){const t={};return e.forEach((e=>{Object.assign(t,e)})),t},Bc={imperative:[["#Imperative",[]]],"want-infinitive":[["^(want|wants|wanted) to #Infinitive$",[Dc]],["^wanted to #Infinitive$",[Oc]],["^will want to #Infinitive$",[Ec]]],"gerund-phrase":[["^#PastTense #Gerund$",[Oc]],["^#PresentTense #Gerund$",[Dc]],["^#Infinitive #Gerund$",[Dc]],["^will #Infinitive #Gerund$",[Ec]],["^have #PastTense #Gerund$",[Oc]],["^will have #PastTense #Gerund$",[Oc]]],"simple-present":[["^#PresentTense$",[Dc]],["^#Infinitive$",[Dc]]],"simple-past":[["^#PastTense$",[Oc]]],"simple-future":[["^will #Adverb? #Infinitive",[Ec]]],"present-progressive":[["^(is|are|am) #Gerund$",[Dc,Gc]]],"past-progressive":[["^(was|were) #Gerund$",[Oc,Gc]]],"future-progressive":[["^will be #Gerund$",[Ec,Gc]]],"present-perfect":[["^(has|have) #PastTense$",[Oc,Fc]]],"past-perfect":[["^had #PastTense$",[Oc,Fc]],["^had #PastTense to #Infinitive",[Oc,Fc]]],"future-perfect":[["^will have #PastTense$",[Ec,Fc]]],"present-perfect-progressive":[["^(has|have) been #Gerund$",[Oc,Gc]]],"past-perfect-progressive":[["^had been #Gerund$",[Oc,Gc]]],"future-perfect-progressive":[["^will have been #Gerund$",[Ec,Gc]]],"passive-past":[["(got|were|was) #Passive",[Oc,Vc]],["^(was|were) being #Passive",[Oc,Vc]],["^(had|have) been #Passive",[Oc,Vc]]],"passive-present":[["^(is|are|am) #Passive",[Dc,Vc]],["^(is|are|am) being #Passive",[Dc,Vc]],["^has been #Passive",[Dc,Vc]]],"passive-future":[["will have been #Passive",[Ec,Vc,Hc]],["will be being? #Passive",[Ec,Vc,Hc]]],"present-conditional":[["would be #PastTense",[Dc,Hc]]],"past-conditional":[["would have been #PastTense",[Oc,Hc]]],"auxiliary-future":[["(is|are|am|was) going to (#Infinitive|#PresentTense)",[Ec]]],"auxiliary-past":[["^did #Infinitive$",[Oc,{plural:!1}]],["^used to #Infinitive$",[Oc,Fc]]],"auxiliary-present":[["^(does|do) #Infinitive$",[Dc,Fc,{plural:!0}]]],"modal-past":[["^(could|must|should|shall) have #PastTense$",[Oc]]],"modal-infinitive":[["^#Modal #Infinitive$",[]]],infinitive:[["^#Infinitive$",[]]]},Sc=[];Object.keys(Bc).map((e=>{Bc[e].forEach((t=>{Sc.push({name:e,match:t[0],data:zc(t[1])})}))}));const $c=function(e,t){const n={};e=function(e,t){return e=e.clone(),t.adverbs.post&&t.adverbs.post.found&&e.remove(t.adverbs.post),t.adverbs.pre&&t.adverbs.pre.found&&e.remove(t.adverbs.pre),e.has("#Negative")&&(e=e.remove("#Negative")),e.has("#Prefix")&&(e=e.remove("#Prefix")),t.root.has("#PhrasalVerb #Particle")&&e.remove("#Particle$"),e.not("#Adverb")}(e,t);for(let t=0;t!(e.has("^(if|unless|while|but|for|per|at|by|that|which|who|from)")||t>0&&e.has("^#Verb . #Noun+$")||t>0&&e.has("^#Adverb")))),0===t.length?e:t}(t);const n=t.nouns();let r=n.last();const o=r.match("(i|he|she|we|you|they)");if(o.found)return o.nouns();let a=n.if("^(that|this|those)");return a.found||!1===n.found&&(a=t.match("^(that|this|those)"),a.found)?a:(r=n.last(),Mc(r)&&(n.remove(r),r=n.last()),Mc(r)&&(n.remove(r),r=n.last()),r)}(e);return{subject:t,plural:Lc(t,e)}},Jc=e=>e,Wc=(e,t)=>{const n=Kc(e),r=n.subject;return!(!r.has("i")&&!r.has("we"))||n.plural},qc=function(e,t){if(e.has("were"))return"are";const{subject:n,plural:r}=Kc(e);return n.has("i")?"am":n.has("we")||r?"are":"is"},Uc=function(e,t){const n=Kc(e),r=n.subject;return r.has("i")||r.has("we")||n.plural?"do":"does"},Rc=function(e){return e.has("#Infinitive")?"Infinitive":e.has("#Participle")?"Participle":e.has("#PastTense")?"PastTense":e.has("#Gerund")?"Gerund":e.has("#PresentTense")?"PresentTense":void 0},Qc=function(e,t){const{toInfinitive:n}=e.methods.two.transform.verb;let r=t.root.text({keepPunct:!1});return r=n(r,e.model,Rc(e)),r&&e.replace(t.root,r),e},Zc=e=>e.has("will not")?e.replace("will not","have not"):e.remove("will"),_c=function(e){if(!e||!e.isView)return[];return e.json({normal:!0,terms:!1,text:!1}).map((e=>e.normal))},Xc=function(e){return e&&e.isView?e.text("normal"):""},Yc=function(e){const{toInfinitive:t}=e.methods.two.transform.verb;return t(e.text("normal"),e.model,Rc(e))},eh={tags:!0},th={tags:!0},nh={noAux:(e,t)=>(t.auxiliary.found&&(e=e.remove(t.auxiliary)),e),simple:(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;if(o.has("#Modal"))return e;let a=o.text({keepPunct:!1});a=r(a,e.model,Rc(o));return a=n(a,e.model).PastTense,a="been"===a?"was":a,"was"===a&&(a=((e,t)=>{const{subject:n,plural:r}=Kc(e);return r||n.has("we")?"were":"was"})(e)),a&&e.replace(o,a,th),e},both:function(e,t){return t.negative.found?(e.replace("will","did"),e):(e=nh.simple(e,t),e=nh.noAux(e,t))},hasHad:e=>(e.replace("has","had",th),e),hasParticiple:(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;let a=o.text("normal");return a=r(a,e.model,Rc(o)),n(a,e.model).Participle}},rh={infinitive:nh.simple,"simple-present":nh.simple,"simple-past":Jc,"simple-future":nh.both,"present-progressive":e=>(e.replace("are","were",th),e.replace("(is|are|am)","was",th),e),"past-progressive":Jc,"future-progressive":(e,t)=>(e.match(t.root).insertBefore("was"),e.remove("(will|be)"),e),"present-perfect":nh.hasHad,"past-perfect":Jc,"future-perfect":(e,t)=>(e.match(t.root).insertBefore("had"),e.has("will")&&(e=Zc(e)),e.remove("have"),e),"present-perfect-progressive":nh.hasHad,"past-perfect-progressive":Jc,"future-perfect-progressive":e=>(e.remove("will"),e.replace("have","had",th),e),"passive-past":e=>(e.replace("have","had",th),e),"passive-present":e=>(e.replace("(is|are)","was",th),e),"passive-future":(e,t)=>(t.auxiliary.has("will be")&&(e.match(t.root).insertBefore("had been"),e.remove("(will|be)")),t.auxiliary.has("will have been")&&(e.replace("have","had",th),e.remove("will")),e),"present-conditional":e=>(e.replace("be","have been"),e),"past-conditional":Jc,"auxiliary-future":e=>(e.replace("(is|are|am)","was",th),e),"auxiliary-past":Jc,"auxiliary-present":e=>(e.replace("(do|does)","did",th),e),"modal-infinitive":(e,t)=>(e.has("can")?e.replace("can","could",th):(nh.simple(e,t),e.match("#Modal").insertAfter("have").tag("Auxiliary")),e),"modal-past":Jc,"want-infinitive":e=>(e.replace("(want|wants)","wanted",th),e.remove("will"),e),"gerund-phrase":(e,t)=>(t.root=t.root.not("#Gerund$"),nh.simple(e,t),Zc(e),e)},oh=function(e,t){const n=Kc(e),r=n.subject;return r.has("(i|we|you)")?"have":!1===n.plural||r.has("he")||r.has("she")||r.has("#Person")?"has":"have"},ah=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,{root:o,auxiliary:a}=t;if(o.has("#Modal"))return e;let i=o.text({keepPunct:!1});i=r(i,e.model,Rc(o));const s=n(i,e.model);if(i=s.Participle||s.PastTense,i){e=e.replace(o,i);const t=oh(e);e.prepend(t).match(t).tag("Auxiliary"),e.remove(a)}return e},ih={infinitive:ah,"simple-present":ah,"simple-future":(e,t)=>e.replace("will",oh(e)),"present-perfect":Jc,"past-perfect":Jc,"future-perfect":(e,t)=>e.replace("will have",oh(e)),"present-perfect-progressive":Jc,"past-perfect-progressive":Jc,"future-perfect-progressive":Jc},sh={tags:!0},lh=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;let a=o.text("normal");return a=r(a,e.model,Rc(o)),!1===Wc(e)&&(a=n(a,e.model).PresentTense),o.has("#Copula")&&(a=qc(e)),a&&(e=e.replace(o,a,sh)).not("#Particle").tag("PresentTense"),e},uh=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;let a=o.text("normal");return a=r(a,e.model,Rc(o)),!1===Wc(e)&&(a=n(a,e.model).Gerund),a&&(e=e.replace(o,a,sh)).not("#Particle").tag("Gerund"),e},ch={infinitive:lh,"simple-present":(e,t)=>{const{conjugate:n}=e.methods.two.transform.verb,{root:r}=t;if(!r.has("#Infinitive"))return lh(e,t);{const t=Kc(e).subject;if(Wc(e)||t.has("i"))return e;const o=r.text("normal"),a=n(o,e.model).PresentTense;o!==a&&e.replace(r,a,sh)}return e},"simple-past":lh,"simple-future":(e,t)=>{const{root:n,auxiliary:r}=t;if(r.has("will")&&n.has("be")){const t=qc(e);e.replace(n,t),(e=e.remove("will")).replace("not "+t,t+" not")}else lh(e,t),e=e.remove("will");return e},"present-progressive":Jc,"past-progressive":(e,t)=>{const n=qc(e);return e.replace("(were|was)",n,sh)},"future-progressive":e=>(e.match("will").insertBefore("is"),e.remove("be"),e.remove("will")),"present-perfect":(e,t)=>(lh(e,t),e=e.remove("(have|had|has)")),"past-perfect":(e,t)=>{const n=Kc(e).subject;return Wc(e)||n.has("i")?((e=Qc(e,t)).remove("had"),e):(e.replace("had","has",sh),e)},"future-perfect":e=>(e.match("will").insertBefore("has"),e.remove("have").remove("will")),"present-perfect-progressive":Jc,"past-perfect-progressive":e=>e.replace("had","has",sh),"future-perfect-progressive":e=>(e.match("will").insertBefore("has"),e.remove("have").remove("will")),"passive-past":(e,t)=>{const n=qc(e);return e.has("(had|have|has)")&&e.has("been")?(e.replace("(had|have|has)",n,sh),e.replace("been","being"),e):e.replace("(got|was|were)",n)},"passive-present":Jc,"passive-future":e=>(e.replace("will","is"),e.replace("be","being")),"present-conditional":Jc,"past-conditional":e=>(e.replace("been","be"),e.remove("have")),"auxiliary-future":(e,t)=>(uh(e,t),e.remove("(going|to)"),e),"auxiliary-past":(e,t)=>{if(t.auxiliary.has("did")){const n=Uc(e);return e.replace(t.auxiliary,n),e}return uh(e,t),e.replace(t.auxiliary,"is"),e},"auxiliary-present":Jc,"modal-infinitive":Jc,"modal-past":(e,t)=>(((e,t)=>{const{toInfinitive:n}=e.methods.two.transform.verb,r=t.root;let o=t.root.text("normal");o=n(o,e.model,Rc(r)),o&&(e=e.replace(t.root,o,sh))})(e,t),e.remove("have")),"gerund-phrase":(e,t)=>(t.root=t.root.not("#Gerund$"),lh(e,t),e.remove("(will|have)")),"want-infinitive":(e,t)=>{let n="wants";return Wc(e)&&(n="want"),e.replace("(want|wanted|wants)",n,sh),e.remove("will"),e}},hh={tags:!0},dh=(e,t)=>{const{toInfinitive:n}=e.methods.two.transform.verb,{root:r,auxiliary:o}=t;if(r.has("#Modal"))return e;let a=r.text("normal");return a=n(a,e.model,Rc(r)),a&&(e=e.replace(r,a,hh)).not("#Particle").tag("Verb"),e.prepend("will").match("will").tag("Auxiliary"),e.remove(o),e},gh=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,{root:o,auxiliary:a}=t;let i=o.text("normal");return i=r(i,e.model,Rc(o)),i&&(i=n(i,e.model).Gerund,e.replace(o,i,hh),e.not("#Particle").tag("PresentTense")),e.remove(a),e.prepend("will be").match("will be").tag("Auxiliary"),e},mh={infinitive:dh,"simple-present":dh,"simple-past":dh,"simple-future":Jc,"present-progressive":gh,"past-progressive":gh,"future-progressive":Jc,"present-perfect":e=>(e.match("(have|has)").replaceWith("will have"),e),"past-perfect":e=>e.replace("(had|has)","will have"),"future-perfect":Jc,"present-perfect-progressive":e=>e.replace("has","will have"),"past-perfect-progressive":e=>e.replace("had","will have"),"future-perfect-progressive":Jc,"passive-past":e=>e.has("got")?e.replace("got","will get"):e.has("(was|were)")?(e.replace("(was|were)","will be"),e.remove("being")):e.has("(have|has|had) been")?e.replace("(have|has|had) been","will be"):e,"passive-present":e=>(e.replace("being","will be"),e.remove("(is|are|am)"),e),"passive-future":Jc,"present-conditional":e=>e.replace("would","will"),"past-conditional":e=>e.replace("would","will"),"auxiliary-future":Jc,"auxiliary-past":e=>e.has("used")&&e.has("to")?(e.replace("used","will"),e.remove("to")):(e.replace("did","will"),e),"auxiliary-present":e=>e.replace("(do|does)","will"),"modal-infinitive":Jc,"modal-past":Jc,"gerund-phrase":(e,t)=>(t.root=t.root.not("#Gerund$"),dh(e,t),e.remove("(had|have)")),"want-infinitive":e=>(e.replace("(want|wants|wanted)","will want"),e)},ph={tags:!0},fh={tags:!0},bh=function(e,t){const n=Uc(e);return e.prepend(n+" not"),e},vh=function(e){let t=e.match("be");return t.found?(t.prepend("not"),e):(t=e.match("(is|was|am|are|will|were)"),t.found?(t.append("not"),e):e)},yh=e=>e.has("(is|was|am|are|will|were|be)"),wh={"simple-present":(e,t)=>!0===yh(e)?vh(e):(e=Qc(e,t),e=bh(e)),"simple-past":(e,t)=>!0===yh(e)?vh(e):((e=Qc(e,t)).prepend("did not"),e),imperative:e=>(e.prepend("do not"),e),infinitive:(e,t)=>!0===yh(e)?vh(e):bh(e),"passive-past":e=>{if(e.has("got"))return e.replace("got","get",fh),e.prepend("did not"),e;const t=e.match("(was|were|had|have)");return t.found&&t.append("not"),e},"auxiliary-past":e=>{if(e.has("used"))return e.prepend("did not"),e;const t=e.match("(did|does|do)");return t.found&&t.append("not"),e},"want-infinitive":(e,t)=>e=(e=bh(e)).replace("wants","want",fh)};var kh={api:function(e){class Verbs extends e{constructor(e,t,n){super(e,t,n),this.viewType="Verbs"}parse(e){return this.getNth(e).map(Tc)}json(e,t){const n=this.getNth(t).map((t=>{const n=t.toView().json(e)[0]||{};return n.verb=function(e){const t=Tc(e);e=e.clone().toView();const n=$c(e,t);return{root:t.root.text(),preAdverbs:_c(t.adverbs.pre),postAdverbs:_c(t.adverbs.post),auxiliary:Xc(t.auxiliary),negative:t.negative.found,prefix:Xc(t.prefix),infinitive:Yc(t.root),grammar:n}}(t),n}),[]);return n}subjects(e){return this.getNth(e).map((e=>(Tc(e),Kc(e).subject)))}adverbs(e){return this.getNth(e).map((e=>e.match("#Adverb")))}isSingular(e){return this.getNth(e).filter((e=>!0!==Kc(e).plural))}isPlural(e){return this.getNth(e).filter((e=>!0===Kc(e).plural))}isImperative(e){return this.getNth(e).filter((e=>e.has("#Imperative")))}toInfinitive(e){return this.getNth(e).map((e=>{const t=Tc(e);return function(e,t){const{toInfinitive:n}=e.methods.two.transform.verb,{root:r,auxiliary:o}=t,a=o.terms().harden();let i=r.text("normal");if(i=n(i,e.model,Rc(r)),i&&e.replace(r,i,eh).tag("Verb").firstTerm().tag("Infinitive"),a.found&&e.remove(a),t.negative.found){e.has("not")||e.prepend("not");const t=Uc(e);e.prepend(t)}return e.fullSentence().compute(["freeze","lexicon","preTagger","postTagger","unfreeze","chunks"]),e}(e,t,$c(e,t).form)}))}toPresentTense(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return ch.hasOwnProperty(n)?((e=ch[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):e}(e,t,n.form)}))}toPastTense(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return rh.hasOwnProperty(n)?((e=rh[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):e}(e,t,n.form)}))}toFutureTense(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return e.has("will")||e.has("going to")?e:mh.hasOwnProperty(n)?((e=mh[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):e}(e,t,n.form)}))}toGerund(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t){const{toInfinitive:n,conjugate:r}=e.methods.two.transform.verb,{root:o,auxiliary:a}=t;if(e.has("#Gerund"))return e;let i=o.text("normal");i=n(i,e.model,Rc(o));const s=r(i,e.model).Gerund;if(s){const t=qc(e);e.replace(o,s,ph),e.remove(a),e.prepend(t)}return e.replace("not is","is not"),e.replace("not are","are not"),e.fullSentence().compute(["tagger","chunks"]),e}(e,t,n.form)}))}toPastParticiple(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return ih.hasOwnProperty(n)?((e=ih[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):((e=ah(e,t)).fullSentence().compute(["tagger","chunks"]),e)}(e,t,n.form)}))}conjugate(e){const{conjugate:t,toInfinitive:n}=this.world.methods.two.transform.verb;return this.getNth(e).map((e=>{const r=Tc(e),o=$c(e,r);"imperative"===o.form&&(o.form="simple-present");let a=r.root.text("normal");if(!r.root.has("#Infinitive")){const t=Rc(r.root);a=n(a,e.model,t)||a}return t(a,e.model)}),[])}isNegative(){return this.if("#Negative")}isPositive(){return this.ifNo("#Negative")}toPositive(){const e=this.match("do not #Verb");return e.found&&e.remove("do not"),this.remove("#Negative")}toNegative(e){return this.getNth(e).map((e=>{const t=Tc(e);return function(e,t,n){if(e.has("#Negative"))return e;if(wh.hasOwnProperty(n))return wh[n](e,t);let r=e.matchOne("be");return r.found?(r.prepend("not"),e):!0===yh(e)?vh(e):(r=e.matchOne("(will|had|have|has|did|does|do|#Modal)"),r.found?(r.append("not"),e):e)}(e,t,$c(e,t).form)}))}update(e){const t=new Verbs(this.document,e);return t._cache=this._cache,t}}Verbs.prototype.toPast=Verbs.prototype.toPastTense,Verbs.prototype.toPresent=Verbs.prototype.toPresentTense,Verbs.prototype.toFuture=Verbs.prototype.toFutureTense,e.prototype.verbs=function(e){let t=function(e){let t=e.match("");return t=t.not("#Conjunction"),t=t.not("#Preposition"),t=t.splitAfter("@hasComma"),t=t.splitAfter("[(do|did|am|was|is|will)] (is|was)",0),t=t.splitBefore("(#Verb && !#Copula) [being] #Verb",0),t=t.splitBefore("#Verb [to be] #Verb",0),t=t.splitAfter("[help] #PresentTense",0),t=t.splitBefore("(#PresentTense|#PastTense) [#Copula]$",0),t=t.splitBefore("(#PresentTense|#PastTense) [will be]$",0),t=t.splitBefore("(#PresentTense|#PastTense) [(had|has)]",0),t=t.not("#Reflexive$"),t=t.not("#Adjective"),t=t.splitAfter("[#PastTense] #PastTense",0),t=t.splitAfter("[#PastTense] #Auxiliary+ #PastTense",0),t=t.splitAfter("#Copula [#Gerund] #PastTense",0),t=t.if("#Verb"),t.has("(#Verb && !#Auxiliary) #Adverb+? #Copula")&&(t=t.splitBefore("#Copula")),t}(this);return t=t.getNth(e),new Verbs(this.document,t.pointer)}}};const Ph=function(e,t){const n=t.match(e);if(n.found){const e=n.pronouns().refersTo();if(e.found)return e}return t.none()},Ah=function(e){if(!e.found)return e;const[t]=e.fullPointer[0];return t&&t>0?e.update([[t-1]]):e.none()},Ch=function(e,t){let n=e.people();return n=function(e,t){return"m"===t?e.filter((e=>!e.presumedFemale().found)):"f"===t?e.filter((e=>!e.presumedMale().found)):e}(n,t),n.found?n.last():(n=e.nouns("#Actor"),n.found?n.last():"f"===t?Ph("(she|her|hers)",e):"m"===t?Ph("(he|him|his)",e):e.none())},Nh=function(e){const t=e.nouns();let n=t.isPlural().notIf("#Pronoun");if(n.found)return n.last();const r=Ph("(they|their|theirs)",e);return r.found?r:(n=t.match("(somebody|nobody|everybody|anybody|someone|noone|everyone|anyone)"),n.found?n.last():e.none())},jh=function(e,t){let n=e.before(),r=t(n);return r.found?r:(n=Ah(e),r=t(n),r.found?r:(n=Ah(n),r=t(n),r.found?r:e.none()))};var xh={compute:{coreference:function(e){e.pronouns().if("(he|him|his|she|her|hers|they|their|theirs|it|its)").forEach((e=>{let t=null;e.has("(he|him|his)")?t=jh(e,(e=>Ch(e,"m"))):e.has("(she|her|hers)")?t=jh(e,(e=>Ch(e,"f"))):e.has("(they|their|theirs)")&&(t=jh(e,Nh)),t&&t.found&&function(e,t){t&&t.found&&(e.docs[0][0].reference=t.ptrs[0])}(e,t)}))}},api:function(e){class Pronouns extends e{constructor(e,t,n){super(e,t,n),this.viewType="Pronouns"}hasReference(){return this.compute("coreference"),this.filter((e=>e.docs[0][0].reference))}refersTo(){return this.compute("coreference"),this.map((e=>{if(!e.found)return e.none();const t=e.docs[0][0];return t.reference?e.update([t.reference]):e.none()}))}update(e){const t=new Pronouns(this.document,e);return t._cache=this._cache,t}}e.prototype.pronouns=function(e){let t=this.match("#Pronoun");return t=t.getNth(e),new Pronouns(t.document,t.pointer)}}};return h.plugin(ql),h.plugin(Ul),h.plugin(eu),h.plugin(xh),h.plugin(fu),h.plugin(Au),h.plugin(Ou),h.plugin(hc),h.plugin(mc),h.plugin(bc),h.plugin(Cc),h.plugin(kh),h})); diff --git a/builds/three/compromise-three.mjs b/builds/three/compromise-three.mjs new file mode 100644 index 0000000..65323b6 --- /dev/null +++ b/builds/three/compromise-three.mjs @@ -0,0 +1 @@ +var e={methods:{one:{},two:{},three:{},four:{}},model:{one:{},two:{},three:{}},compute:{},hooks:[]};const t={compute:function(e){const{world:t}=this,n=t.compute;return"string"==typeof e&&n.hasOwnProperty(e)?n[e](this):(e=>"[object Array]"===Object.prototype.toString.call(e))(e)?e.forEach((r=>{t.compute.hasOwnProperty(r)?n[r](this):console.warn("no compute:",e)})):"function"==typeof e?e(this):console.warn("no compute:",e),this}};var n={forEach:function(e){return this.fullPointer.forEach(((t,n)=>{const r=this.update([t]);e(r,n)})),this},map:function(e,t){const n=this.fullPointer.map(((t,n)=>{const r=this.update([t]),o=e(r,n);return void 0===o?this.none():o}));if(0===n.length)return t||this.update([]);if(void 0!==n[0]){if("string"==typeof n[0])return n;if("object"==typeof n[0]&&(null===n[0]||!n[0].isView))return n}let r=[];return n.forEach((e=>{r=r.concat(e.fullPointer)})),this.toView(r)},filter:function(e){let t=this.fullPointer;t=t.filter(((t,n)=>{const r=this.update([t]);return e(r,n)}));return this.update(t)},find:function(e){const t=this.fullPointer.find(((t,n)=>{const r=this.update([t]);return e(r,n)}));return this.update([t])},some:function(e){return this.fullPointer.some(((t,n)=>{const r=this.update([t]);return e(r,n)}))},random:function(e=1){let t=this.fullPointer,n=Math.floor(Math.random()*t.length);return n+e>this.length&&(n=this.length-e,n=n<0?0:n),t=t.slice(n,n+e),this.update(t)}};const r={termList:function(){return this.methods.one.termList(this.docs)},terms:function(e){const t=this.match(".");return"number"==typeof e?t.eq(e):t},groups:function(e){if(e||0===e)return this.update(this._groups[e]||[]);const t={};return Object.keys(this._groups).forEach((e=>{t[e]=this.update(this._groups[e])})),t},eq:function(e){let t=this.pointer;return t||(t=this.docs.map(((e,t)=>[t]))),t[e]?this.update([t[e]]):this.none()},first:function(){return this.eq(0)},last:function(){const e=this.fullPointer.length-1;return this.eq(e)},firstTerms:function(){return this.match("^.")},lastTerms:function(){return this.match(".$")},slice:function(e,t){let n=this.pointer||this.docs.map(((e,t)=>[t]));return n=n.slice(e,t),this.update(n)},all:function(){return this.update().toView()},fullSentences:function(){const e=this.fullPointer.map((e=>[e[0]]));return this.update(e).toView()},none:function(){return this.update([])},isDoc:function(e){if(!e||!e.isView)return!1;const t=this.fullPointer,n=e.fullPointer;return!t.length!==n.length&&t.every(((e,t)=>!!n[t]&&(e[0]===n[t][0]&&e[1]===n[t][1]&&e[2]===n[t][2])))},wordCount:function(){return this.docs.reduce(((e,t)=>(e+=t.filter((e=>""!==e.text)).length,e)),0)},isFull:function(){const e=this.pointer;if(!e)return!0;if(0===e.length||0!==e[0][0])return!1;let t=0,n=0;return this.document.forEach((e=>t+=e.length)),this.docs.forEach((e=>n+=e.length)),t===n},getNth:function(e){return"number"==typeof e?this.eq(e):"string"==typeof e?this.if(e):this}};r.group=r.groups,r.fullSentence=r.fullSentences,r.sentence=r.fullSentences,r.lastTerm=r.lastTerms,r.firstTerm=r.firstTerms;const o=Object.assign({},r,t,n);o.get=o.eq;class View{constructor(t,n,r={}){[["document",t],["world",e],["_groups",r],["_cache",null],["viewType","View"]].forEach((e=>{Object.defineProperty(this,e[0],{value:e[1],writable:!0})})),this.ptrs=n}get docs(){let t=this.document;return this.ptrs&&(t=e.methods.one.getDoc(this.ptrs,this.document)),t}get pointer(){return this.ptrs}get methods(){return this.world.methods}get model(){return this.world.model}get hooks(){return this.world.hooks}get isView(){return!0}get found(){return this.docs.length>0}get length(){return this.docs.length}get fullPointer(){const{docs:e,ptrs:t,document:n}=this,r=t||e.map(((e,t)=>[t]));return r.map((e=>{let[t,r,o,a,i]=e;return r=r||0,o=o||(n[t]||[]).length,n[t]&&n[t][r]&&(a=a||n[t][r].id,n[t][o-1]&&(i=i||n[t][o-1].id)),[t,r,o,a,i]}))}update(e){const t=new View(this.document,e);if(this._cache&&e&&e.length>0){const n=[];e.forEach(((e,t)=>{const[r,o,a]=e;(1===e.length||0===o&&this.document[r].length===a)&&(n[t]=this._cache[r])})),n.length>0&&(t._cache=n)}return t.world=this.world,t}toView(e){return new View(this.document,e||this.pointer)}fromText(e){const{methods:t}=this,n=t.one.tokenize.fromString(e,this.world),r=new View(n);return r.world=this.world,r.compute(["normal","freeze","lexicon"]),this.world.compute.preTagger&&r.compute("preTagger"),r.compute("unfreeze"),r}clone(){let e=this.document.slice(0);e=e.map((e=>e.map((e=>((e=Object.assign({},e)).tags=new Set(e.tags),e)))));const t=this.update(this.pointer);return t.document=e,t._cache=this._cache,t}}Object.assign(View.prototype,o);const a=function(e){return e&&"object"==typeof e&&!Array.isArray(e)};function i(e,t){if(a(t))for(const n in t)a(t[n])?(e[n]||Object.assign(e,{[n]:{}}),i(e[n],t[n])):Object.assign(e,{[n]:t[n]});return e}const s=function(e,t,n,r){if(o=e,"[object Array]"===Object.prototype.toString.call(o))return void e.forEach((e=>s(e,t,n,r)));var o;const{methods:a,model:l,compute:u,hooks:c}=t;e.methods&&function(e,t){for(const n in t)e[n]=e[n]||{},Object.assign(e[n],t[n])}(a,e.methods),e.model&&i(l,e.model),e.irregulars&&function(e,t){const n=e.two.models||{};Object.keys(t).forEach((e=>{t[e].pastTense&&(n.toPast&&(n.toPast.ex[e]=t[e].pastTense),n.fromPast&&(n.fromPast.ex[t[e].pastTense]=e)),t[e].presentTense&&(n.toPresent&&(n.toPresent.ex[e]=t[e].presentTense),n.fromPresent&&(n.fromPresent.ex[t[e].presentTense]=e)),t[e].gerund&&(n.toGerund&&(n.toGerund.ex[e]=t[e].gerund),n.fromGerund&&(n.fromGerund.ex[t[e].gerund]=e)),t[e].comparative&&(n.toComparative&&(n.toComparative.ex[e]=t[e].comparative),n.fromComparative&&(n.fromComparative.ex[t[e].comparative]=e)),t[e].superlative&&(n.toSuperlative&&(n.toSuperlative.ex[e]=t[e].superlative),n.fromSuperlative&&(n.fromSuperlative.ex[t[e].superlative]=e))}))}(l,e.irregulars),e.compute&&Object.assign(u,e.compute),c&&(t.hooks=c.concat(e.hooks||[])),e.api&&e.api(n),e.lib&&Object.keys(e.lib).forEach((t=>r[t]=e.lib[t])),e.tags&&r.addTags(e.tags),e.words&&r.addWords(e.words),e.frozen&&r.addWords(e.frozen,!0),e.mutate&&e.mutate(t,r)},l=function(e){return"[object Array]"===Object.prototype.toString.call(e)},u=function(e,t,n){const{methods:r}=n,o=new t([]);if(o.world=n,"number"==typeof e&&(e=String(e)),!e)return o;if("string"==typeof e){return new t(r.one.tokenize.fromString(e,n))}if(a=e,"[object Object]"===Object.prototype.toString.call(a)&&e.isView)return new t(e.document,e.ptrs);var a;if(l(e)){if(l(e[0])){const n=e.map((e=>e.map((e=>({text:e,normal:e,pre:"",post:" ",tags:new Set})))));return new t(n)}const n=e.map((e=>e.terms.map((e=>(l(e.tags)&&(e.tags=new Set(e.tags)),e)))));return new t(n)}return o},c=Object.assign({},e),h=function(e,t){t&&h.addWords(t);const n=u(e,View,c);return e&&n.compute(c.hooks),n};Object.defineProperty(h,"_world",{value:c,writable:!0}),h.tokenize=function(e,t){const{compute:n}=this._world;t&&h.addWords(t);const r=u(e,View,c);return n.contractions&&r.compute(["alias","normal","machine","contractions"]),r},h.plugin=function(e){return s(e,this._world,View,this),this},h.extend=h.plugin,h.world=function(){return this._world},h.model=function(){return this._world.model},h.methods=function(){return this._world.methods},h.hooks=function(){return this._world.hooks},h.verbose=function(e){const t="undefined"!=typeof process&&process.env?process.env:self.env||{};return t.DEBUG_TAGS="tagger"===e||!0===e||"",t.DEBUG_MATCH="match"===e||!0===e||"",t.DEBUG_CHUNKS="chunker"===e||!0===e||"",this},h.version="14.15.1";var d={one:{cacheDoc:function(e){const t=e.map((e=>{const t=new Set;return e.forEach((e=>{""!==e.normal&&t.add(e.normal),e.switch&&t.add(`%${e.switch}%`),e.implicit&&t.add(e.implicit),e.machine&&t.add(e.machine),e.root&&t.add(e.root),e.alias&&e.alias.forEach((e=>t.add(e)));const n=Array.from(e.tags);for(let e=0;e/^\p{Lu}[\p{Ll}'’]/u.test(e)||/^\p{Lu}$/u.test(e),b=(e,t,n)=>{if(n.forEach((e=>e.dirty=!0)),e){const r=[t,0].concat(n);Array.prototype.splice.apply(e,r)}return e},v=function(e){const t=e[e.length-1];!t||/ $/.test(t.post)||/[-–—]/.test(t.post)||(t.post+=" ")},y=(e,t,n)=>{const r=/[-.?!,;:)–—'"]/g,o=e[t-1];if(!o)return;const a=o.post;if(r.test(a)){const e=a.match(r).join(""),t=n[n.length-1];t.post=e+t.post,o.post=o.post.replace(r,"")}},w=function(e,t,n,r){const[o,a,i]=t;0===a||i===r[o].length?v(n):(v(n),v([e[t[1]]])),function(e,t,n){const r=e[t];if(0!==t||!f(r.text))return;n[0].text=n[0].text.replace(/^\p{Ll}/u,(e=>e.toUpperCase()));const o=e[t];o.tags.has("ProperNoun")||o.tags.has("Acronym")||f(o.text)&&o.text.length>1&&(o.text=(a=o.text,a.replace(/^\p{Lu}/u,(e=>e.toLowerCase()))));var a}(e,a,n),b(e,a,n)};let k=0;const P=e=>(e=e.length<3?"0"+e:e).length<3?"0"+e:e,A=function(e){let[t,n]=e.index||[0,0];k+=1,k=k>46655?0:k,t=t>46655?0:t,n=n>1294?0:n;let r=P(k.toString(36));r+=P(t.toString(36));let o=n.toString(36);o=o.length<2?"0"+o:o,r+=o;return r+=parseInt(36*Math.random(),10).toString(36),e.normal+"|"+r.toUpperCase()},C=function(e){if(e.has("@hasContraction")&&"function"==typeof e.contractions){e.grow("@hasContraction").contractions().expand()}},N=e=>"[object Array]"===Object.prototype.toString.call(e),j=function(e,t,n){const{document:r,world:o}=t;t.uncache();const a=t.fullPointer,i=t.fullPointer;t.forEach(((s,l)=>{const u=s.fullPointer[0],[c]=u,h=r[c];let d=function(e,t){const{methods:n}=t;return"string"==typeof e?n.one.tokenize.fromString(e,t)[0]:"object"==typeof e&&e.isView?e.clone().docs[0]||[]:N(e)?N(e[0])?e[0]:e:[]}(e,o);0!==d.length&&(d=function(e){return e.map((e=>(e.id=A(e),e)))}(d),n?(C(t.update([u]).firstTerm()),w(h,u,d,r)):(C(t.update([u]).lastTerm()),function(e,t,n,r){const[o,,a]=t,i=(r[o]||[]).length;ae.replace(/^\p{Ll}/u,(e=>e.toUpperCase())),H=e=>e.replace(/^\p{Lu}/u,(e=>e.toLowerCase()));T.replaceWith=function(e,t={}){let n=this.fullPointer;const r=this;if(this.uncache(),"function"==typeof e)return function(e,t,n){return e.forEach((e=>{const r=t(e);e.replaceWith(r,n)})),e}(r,e,t);const o=r.docs[0];if(!o)return r;const a=t.possessives&&o[o.length-1].tags.has("Possessive"),i=t.case&&(s=o[0].text,/^\p{Lu}[\p{Ll}'’]/u.test(s)||/^\p{Lu}$/u.test(s));var s;e=function(e,t){if("string"!=typeof e)return e;const n=t.groups();return e=e.replace(I,(e=>{const t=e.replace(/\$/,"");return n.hasOwnProperty(t)?n[t].text():e})),e}(e,r);const l=this.update(n);n=n.map((e=>e.slice(0,3)));const u=(l.docs[0]||[]).map((e=>Array.from(e.tags))),c=l.docs[0][0].pre,h=l.docs[0][l.docs[0].length-1].post;if("string"==typeof e&&(e=this.fromText(e).compute("id")),r.insertAfter(e),l.has("@hasContraction")&&r.contractions){r.grow("@hasContraction+").contractions().expand()}if(r.delete(l),a){const e=r.docs[0],t=e[e.length-1];t.tags.has("Possessive")||(t.text+="'s",t.normal+="'s",t.tags.add("Possessive"))}if(c&&r.docs[0]&&(r.docs[0][0].pre=c),h&&r.docs[0]){const e=r.docs[0][r.docs[0].length-1];e.post.trim()||(e.post=h)}const d=r.toView(n).compute(["index","freeze","lexicon"]);if(d.world.compute.preTagger&&d.compute("preTagger"),d.compute("unfreeze"),t.tags&&d.terms().forEach(((e,t)=>{e.tagSafe(u[t])})),!d.docs[0]||!d.docs[0][0])return d;if(t.case){const e=i?D:H;d.docs[0][0].text=e(d.docs[0][0].text)}return d},T.replace=function(e,t,n){if(e&&!t)return this.replaceWith(e,n);const r=this.match(e);return r.found?(this.soften(),r.replaceWith(t,n)):this};const E={remove:function(e){const{indexN:t}=this.methods.one.pointer;this.uncache();let n=this.all(),r=this;e&&(n=this,r=this.match(e));const o=!n.ptrs;if(r.has("@hasContraction")&&r.contractions){r.grow("@hasContraction").contractions().expand()}let a=n.fullPointer;const i=r.fullPointer.reverse(),s=function(e,t){t.forEach((t=>{const[n,r,o]=t,a=o-r;e[n]&&(o===e[n].length&&o>1&&function(e,t){const n=e.length-1,r=e[n],o=e[n-t];o&&r&&(o.post+=r.post,o.post=o.post.replace(/ +([.?!,;:])/,"$1"),o.post=o.post.replace(/[,;:]+([.?!])/,"$1"))}(e[n],a),e[n].splice(r,a))}));for(let t=e.length-1;t>=0;t-=1)if(0===e[t].length&&(e.splice(t,1),t===e.length&&e[t-1])){const n=e[t-1],r=n[n.length-1];r&&(r.post=r.post.trimEnd())}return e}(this.document,i);if(a=function(e,t){return e=e.map((e=>{const[n]=e;return t[n]?(t[n].forEach((t=>{const n=t[2]-t[1];e[1]<=t[1]&&e[2]>=t[2]&&(e[2]-=n)})),e):e})),e.forEach(((t,n)=>{if(0===t[1]&&0==t[2])for(let t=n+1;te[2]-e[1]>0))).map((e=>(e[3]=null,e[4]=null,e)))}(a,t(i)),n.ptrs=a,n.document=s,n.compute("index"),o&&(n.ptrs=void 0),!e)return this.ptrs=[],n.none();return n.toView(a)}};E.delete=E.remove;const G={pre:function(e,t){return void 0===e&&this.found?this.docs[0][0].pre:(this.docs.forEach((n=>{const r=n[0];!0===t?r.pre+=e:r.pre=e})),this)},post:function(e,t){if(void 0===e){const e=this.docs[this.docs.length-1];return e[e.length-1].post}return this.docs.forEach((n=>{const r=n[n.length-1];!0===t?r.post+=e:r.post=e})),this},trim:function(){if(!this.found)return this;const e=this.docs,t=e[0][0];t.pre=t.pre.trimStart();const n=e[e.length-1],r=n[n.length-1];return r.post=r.post.trimEnd(),this},hyphenate:function(){return this.docs.forEach((e=>{e.forEach(((t,n)=>{0!==n&&(t.pre=""),e[n+1]&&(t.post="-")}))})),this},dehyphenate:function(){const e=/[-–—]/;return this.docs.forEach((t=>{t.forEach((t=>{e.test(t.post)&&(t.post=" ")}))})),this},toQuotations:function(e,t){return e=e||'"',t=t||'"',this.docs.forEach((n=>{n[0].pre=e+n[0].pre;const r=n[n.length-1];r.post=t+r.post})),this},toParentheses:function(e,t){return e=e||"(",t=t||")",this.docs.forEach((n=>{n[0].pre=e+n[0].pre;const r=n[n.length-1];r.post=t+r.post})),this}};G.deHyphenate=G.dehyphenate,G.toQuotation=G.toQuotations;var O={alpha:(e,t)=>e.normalt.normal?1:0,length:(e,t)=>{const n=e.normal.trim().length,r=t.normal.trim().length;return nr?-1:0},wordCount:(e,t)=>e.wordst.words?-1:0,sequential:(e,t)=>e[0]t[0]?-1:e[1]>t[1]?1:-1,byFreq:function(e){const t={};return e.forEach((e=>{t[e.normal]=t[e.normal]||0,t[e.normal]+=1})),e.sort(((e,n)=>{const r=t[e.normal],o=t[n.normal];return ro?-1:0})),e}};const F=new Set(["index","sequence","seq","sequential","chron","chronological"]),V=new Set(["freq","frequency","topk","repeats"]),z=new Set(["alpha","alphabetical"]);var B={unique:function(){const e=new Set,t=this.filter((t=>{const n=t.text("machine");return!e.has(n)&&(e.add(n),!0)}));return t},reverse:function(){let e=this.pointer||this.docs.map(((e,t)=>[t]));return e=[].concat(e),e=e.reverse(),this._cache&&(this._cache=this._cache.reverse()),this.update(e)},sort:function(e){const{docs:t,pointer:n}=this;if(this.uncache(),"function"==typeof e)return function(e,t){let n=e.fullPointer;return n=n.sort(((n,r)=>(n=e.update([n]),r=e.update([r]),t(n,r)))),e.ptrs=n,e}(this,e);e=e||"alpha";const r=n||t.map(((e,t)=>[t]));let o=t.map(((e,t)=>({index:t,words:e.length,normal:e.map((e=>e.machine||e.normal||"")).join(" "),pointer:r[t]})));return F.has(e)&&(e="sequential"),z.has(e)&&(e="alpha"),V.has(e)?(o=O.byFreq(o),this.update(o.map((e=>e.pointer)))):"function"==typeof O[e]?(o=o.sort(O[e]),this.update(o.map((e=>e.pointer)))):this}};const S=function(e,t){if(e.length>0){const t=e[e.length-1],n=t[t.length-1];!1===/ /.test(n.post)&&(n.post+=" ")}return e=e.concat(t)};var $={concat:function(e){if("string"==typeof e){const t=this.fromText(e);if(this.found&&this.ptrs){const e=this.fullPointer,n=e[e.length-1][0];this.document.splice(n,0,...t.document)}else this.document=this.document.concat(t.document);return this.all().compute("index")}if("object"==typeof e&&e.isView)return function(e,t){if(e.document===t.document){const n=e.fullPointer.concat(t.fullPointer);return e.toView(n).compute("index")}return t.fullPointer.forEach((t=>{t[0]+=e.document.length})),e.document=S(e.document,t.docs),e.all()}(this,e);if(t=e,"[object Array]"===Object.prototype.toString.call(t)){const t=S(this.document,e);return this.document=t,this.all()}var t;return this}};var M={harden:function(){return this.ptrs=this.fullPointer,this},soften:function(){let e=this.ptrs;return!e||e.length<1||(e=e.map((e=>e.slice(0,3))),this.ptrs=e),this}};const L=Object.assign({},{toLowerCase:function(){return this.termList().forEach((e=>{e.text=e.text.toLowerCase()})),this},toUpperCase:function(){return this.termList().forEach((e=>{e.text=e.text.toUpperCase()})),this},toTitleCase:function(){return this.termList().forEach((e=>{e.text=e.text.replace(/^ *[a-z\u00C0-\u00FF]/,(e=>e.toUpperCase()))})),this},toCamelCase:function(){return this.docs.forEach((e=>{e.forEach(((t,n)=>{0!==n&&(t.text=t.text.replace(/^ *[a-z\u00C0-\u00FF]/,(e=>e.toUpperCase()))),n!==e.length-1&&(t.post="")}))})),this}},x,T,E,G,B,$,M),K={id:function(e){const t=e.docs;for(let e=0;e(e.implicit=e.text,e.machine=e.text,e.pre="",e.post="",e.text="",e.normal="",e.index=[r,o+t],e))),n[0]&&(n[0].pre=e[r][o].pre,n[n.length-1].post=e[r][o].post,n[0].text=e[r][o].text,n[0].normal=e[r][o].normal),e[r].splice(o,1,...n))},R=/'/,Q=new Set(["what","how","when","where","why"]),Z=new Set(["be","go","start","think","need"]),_=new Set(["been","gone"]),X=/'/,Y=/(e|é|aison|sion|tion)$/,ee=/(age|isme|acle|ege|oire)$/;var te=(e,t)=>["je",e[t].normal.split(X)[1]],ne=(e,t)=>{const n=e[t].normal.split(X)[1];return n&&n.endsWith("e")?["la",n]:["le",n]},re=(e,t)=>{const n=e[t].normal.split(X)[1];return n&&Y.test(n)&&!ee.test(n)?["du",n]:n&&n.endsWith("s")?["des",n]:["de",n]};const oe=/^([0-9.]{1,4}[a-z]{0,2}) ?[-–—] ?([0-9]{1,4}[a-z]{0,2})$/i,ae=/^([0-9]{1,2}(:[0-9][0-9])?(am|pm)?) ?[-–—] ?([0-9]{1,2}(:[0-9][0-9])?(am|pm)?)$/i,ie=/^[0-9]{3}-[0-9]{4}$/,se=function(e,t){const n=e[t];let r=n.text.match(oe);return null!==r?!0===n.tags.has("PhoneNumber")||ie.test(n.text)?null:[r[1],"to",r[2]]:(r=n.text.match(ae),null!==r?[r[1],"to",r[4]]:null)},le=/^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/,ue=function(e,t,n){const r=n.model.one.numberSuffixes||{},o=e[t].text.match(le);if(null!==o){const e=o[2].toLowerCase().trim();return r.hasOwnProperty(e)?null:[o[1],e]}return null},ce=/'/,he=/^[0-9][^-–—]*[-–—].*?[0-9]/,de=function(e,t,n,r){const o=t.update();o.document=[e];let a=n+r;n>0&&(n-=1),e[a]&&(a+=1),o.ptrs=[[0,n,a]]},ge={t:(e,t)=>function(e,t){return"ain't"===e[t].normal||"aint"===e[t].normal?null:[e[t].normal.replace(/n't/,""),"not"]}(e,t),d:(e,t)=>function(e,t){const n=e[t].normal.split(R)[0];if(Q.has(n))return[n,"did"];if(e[t+1]){if(_.has(e[t+1].normal))return[n,"had"];if(Z.has(e[t+1].normal))return[n,"would"]}return null}(e,t)},me={j:(e,t)=>te(e,t),l:(e,t)=>ne(e,t),d:(e,t)=>re(e,t)},pe=function(e,t,n,r){for(let o=0;o2)return a.out.concat(r)}return null},fe=function(e,t){const n=t.fromText(e.join(" "));return n.compute(["id","alias"]),n.docs[0]},be=function(e,t){for(let n=t+1;n<5&&e[n];n+=1)if("been"===e[n].normal)return["there","has"];return["there","is"]};var ve={contractions:e=>{const{world:t,document:n}=e,{model:r,methods:o}=t,a=r.one.contractions||[];n.forEach(((r,i)=>{for(let s=r.length-1;s>=0;s-=1){let l=null,u=null;if(!0===ce.test(r[s].normal)){const e=r[s].normal.split(ce);l=e[0],u=e[1]}let c=pe(a,r[s],l,u);!c&&ge.hasOwnProperty(u)&&(c=ge[u](r,s,t)),!c&&me.hasOwnProperty(l)&&(c=me[l](r,s)),"there"===l&&"s"===u&&(c=be(r,s)),c?(c=fe(c,e),U(n,[i,s],c),de(n[i],e,s,c.length)):he.test(r[s].normal)?(c=se(r,s),c&&(c=fe(c,e),U(n,[i,s],c),o.one.setTag(c,"NumberRange",t),c[2]&&c[2].tags.has("Time")&&o.one.setTag([c[0]],"Time",t,null,"time-range"),de(n[i],e,s,c.length))):(c=ue(r,s,t),c&&(c=fe(c,e),U(n,[i,s],c),o.one.setTag([c[1]],"Unit",t,null,"contraction-unit")))}}))}};const ye={model:q,compute:ve,hooks:["contractions"]},we=function(e){const t=e.world,{model:n,methods:r}=e.world,o=r.one.setTag,{frozenLex:a}=n.one,i=n.one._multiCache||{};e.docs.forEach((e=>{for(let n=0;nn;r-=1){const i=e.slice(n,r+1),s=i.map((e=>e.machine||e.normal)).join(" ");!0!==a.hasOwnProperty(s)||(o(i,a[s],t,!1,"1-frozen-multi-lexicon"),i.forEach((e=>e.frozen=!0)))}}void 0!==a[s]&&a.hasOwnProperty(s)&&(o([r],a[s],t,!1,"1-freeze-lexicon"),r.frozen=!0)}}))};const ke=e=>""+e+"",Pe=e=>""+e+"",Ae=function(e){e.docs.forEach((e=>{console.log(ke("\n ┌─────────")),e.forEach((e=>{let t=` ${Pe("│")} `;const n=e.implicit||e.text||"-";!0===e.frozen?t+=`${ke(n)} ❄️`:t+=Pe(n),console.log(t)}))}))};var Ce={compute:{frozen:we,freeze:we,unfreeze:function(e){return e.docs.forEach((e=>{e.forEach((e=>{delete e.frozen}))})),e}},mutate:e=>{const t=e.methods.one;t.termMethods.isFrozen=e=>!0===e.frozen,t.debug.freeze=Ae,t.debug.frozen=Ae},api:function(e){e.prototype.freeze=function(){return this.docs.forEach((e=>{e.forEach((e=>{e.frozen=!0}))})),this},e.prototype.unfreeze=function(){this.compute("unfreeze")},e.prototype.isFrozen=function(){return this.match("@isFrozen+")}},hooks:["freeze"]};const Ne=function(e,t,n){const{model:r,methods:o}=n,a=o.one.setTag,i=r.one._multiCache||{},{lexicon:s}=r.one||{},l=e[t],u=l.machine||l.normal;if(void 0!==i[u]&&e[t+1]){for(let r=t+i[u]-1;r>t;r-=1){const o=e.slice(t,r+1);if(o.length<=1)return!1;const i=o.map((e=>e.machine||e.normal)).join(" ");if(!0===s.hasOwnProperty(i)){const e=s[i];return a(o,e,n,!1,"1-multi-lexicon"),!e||2!==e.length||"PhrasalVerb"!==e[0]&&"PhrasalVerb"!==e[1]||a([o[1]],"Particle",n,!1,"1-phrasal-particle"),!0}}return!1}return null},je=/^(under|over|mis|re|un|dis|semi|pre|post)-?/,xe=new Set(["Verb","Infinitive","PastTense","Gerund","PresentTense","Adjective","Participle"]),Ie=function(e,t,n){const{model:r,methods:o}=n,a=o.one.setTag,{lexicon:i}=r.one,s=e[t],l=s.machine||s.normal;if(void 0!==i[l]&&i.hasOwnProperty(l))return a([s],i[l],n,!1,"1-lexicon"),!0;if(s.alias){const e=s.alias.find((e=>i.hasOwnProperty(e)));if(e)return a([s],i[e],n,!1,"1-lexicon-alias"),!0}if(!0===je.test(l)){const e=l.replace(je,"");if(i.hasOwnProperty(e)&&e.length>3&&xe.has(i[e]))return a([s],i[e],n,!1,"1-lexicon-prefix"),!0}return null};var Te={lexicon:function(e){const t=e.world;e.docs.forEach((e=>{for(let n=0;n{const o=e[r],a=(r=(r=r.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);a.length>1&&(void 0===n[a[0]]||a.length>n[a[0]])&&(n[a[0]]=a.length),t[r]=t[r]||o})),delete t[""],delete t.null,delete t[" "],{lex:t,_multi:n}}}};var He={addWords:function(e,t=!1){const n=this.world(),{methods:r,model:o}=n;if(!e)return;if(Object.keys(e).forEach((t=>{"string"==typeof e[t]&&e[t].startsWith("#")&&(e[t]=e[t].replace(/^#/,""))})),!0===t){const{lex:t,_multi:a}=r.one.expandLexicon(e,n);return Object.assign(o.one._multiCache,a),void Object.assign(o.one.frozenLex,t)}if(r.two.expandLexicon){const{lex:t,_multi:a}=r.two.expandLexicon(e,n);Object.assign(o.one.lexicon,t),Object.assign(o.one._multiCache,a)}const{lex:a,_multi:i}=r.one.expandLexicon(e,n);Object.assign(o.one.lexicon,a),Object.assign(o.one._multiCache,i)}};var Ee={model:{one:{lexicon:{},_multiCache:{},frozenLex:{}}},methods:De,compute:Te,lib:He,hooks:["lexicon"]};const Ge=function(e,t){const n=[{}],r=[null],o=[0],a=[];let i=0;e.forEach((function(e){let o=0;const a=function(e,t){const{methods:n,model:r}=t,o=n.one.tokenize.splitTerms(e,r).map((e=>n.one.tokenize.splitWhitespace(e,r)));return o.map((e=>e.text.toLowerCase()))}(e,t);for(let e=0;e0&&!n[i].hasOwnProperty(l);)i=o[i];if(n.hasOwnProperty(i)){const e=n[i][l];o[u]=e,r[e]&&(r[u]=r[u]||[],r[u]=r[u].concat(r[e]))}else o[u]=0}}return{goNext:n,endAs:r,failTo:o}},Oe=function(e,t,n){let r=0;const o=[];for(let a=0;a0&&(void 0===t.goNext[r]||!t.goNext[r].hasOwnProperty(i));)r=t.failTo[r]||0;if(t.goNext[r].hasOwnProperty(i)&&(r=t.goNext[r][i],t.endAs[r])){const n=t.endAs[r];for(let t=0;t{for(let n=e.length-1;n>=0;n-=1)if(e[n]!==t)return e=e.slice(0,n+1);return e},ze={buildTrie:function(e){return function(e){return e.goNext=e.goNext.map((e=>{if(0!==Object.keys(e).length)return e})),e.goNext=Ve(e.goNext,void 0),e.failTo=Ve(e.failTo,0),e.endAs=Ve(e.endAs,null),e}(Ge(e,this.world()))}};ze.compile=ze.buildTrie;var Be={api:function(e){e.prototype.lookup=function(e,t={}){if(!e)return this.none();"string"==typeof e&&(e=[e]);var n;let r=function(e,t,n){let r=[];n.form=n.form||"normal";const o=e.docs;if(!t.goNext||!t.goNext[0])return console.error("Compromise invalid lookup trie"),e.none();const a=Object.keys(t.goNext[0]);for(let i=0;i0&&(r=r.concat(l))}return e.update(r)}(this,(n=e,"[object Object]"===Object.prototype.toString.call(n)?e:Ge(e,this.world)),t);return r=r.settle(),r}},lib:ze};const Se=function(e,t){return t?(e.forEach((e=>{const n=e[0];t[n]&&(e[0]=t[n][0],e[1]+=t[n][1],e[2]+=t[n][1])})),e):e},$e=function(e,t){let{ptrs:n}=e;const{byGroup:r}=e;return n=Se(n,t),Object.keys(r).forEach((e=>{r[e]=Se(r[e],t)})),{ptrs:n,byGroup:r}},Me=function(e,t,n){const r=n.methods.one;return"number"==typeof e&&(e=String(e)),"string"==typeof e&&(e=r.killUnicode(e,n),e=r.parseMatch(e,t,n)),e},Le=e=>"[object Object]"===Object.prototype.toString.call(e),Ke=e=>e&&Le(e)&&!0===e.isView,Je=e=>e&&Le(e)&&!0===e.isNet;var We={matchOne:function(e,t,n){const r=this.methods.one;if(Ke(e))return this.intersection(e).eq(0);if(Je(e))return this.sweep(e,{tagger:!1,matchOne:!0}).view;const o={regs:e=Me(e,n,this.world),group:t,justOne:!0},a=r.match(this.docs,o,this._cache),{ptrs:i,byGroup:s}=$e(a,this.fullPointer),l=this.toView(i);return l._groups=s,l},match:function(e,t,n){const r=this.methods.one;if(Ke(e))return this.intersection(e);if(Je(e))return this.sweep(e,{tagger:!1}).view.settle();const o={regs:e=Me(e,n,this.world),group:t},a=r.match(this.docs,o,this._cache),{ptrs:i,byGroup:s}=$e(a,this.fullPointer),l=this.toView(i);return l._groups=s,l},has:function(e,t,n){const r=this.methods.one;if(Ke(e)){return this.intersection(e).fullPointer.length>0}if(Je(e))return this.sweep(e,{tagger:!1}).view.found;const o={regs:e=Me(e,n,this.world),group:t,justOne:!0};return r.match(this.docs,o,this._cache).ptrs.length>0},if:function(e,t,n){const r=this.methods.one;if(Ke(e))return this.filter((t=>t.intersection(e).found));if(Je(e)){const t=this.sweep(e,{tagger:!1}).view.settle();return this.if(t)}const o={regs:e=Me(e,n,this.world),group:t,justOne:!0};let a=this.fullPointer;const i=this._cache||[];a=a.filter(((e,t)=>{const n=this.update([e]);return r.match(n.docs,o,i[t]).ptrs.length>0}));const s=this.update(a);return this._cache&&(s._cache=a.map((e=>i[e[0]]))),s},ifNo:function(e,t,n){const{methods:r}=this,o=r.one;if(Ke(e))return this.filter((t=>!t.intersection(e).found));if(Je(e)){const t=this.sweep(e,{tagger:!1}).view.settle();return this.ifNo(t)}e=Me(e,n,this.world);const a=this._cache||[],i=this.filter(((n,r)=>{const i={regs:e,group:t,justOne:!0};return 0===o.match(n.docs,i,a[r]).ptrs.length}));return this._cache&&(i._cache=i.ptrs.map((e=>a[e[0]]))),i}};var qe={before:function(e,t,n){const{indexN:r}=this.methods.one.pointer,o=[],a=r(this.fullPointer);Object.keys(a).forEach((e=>{const t=a[e].sort(((e,t)=>e[1]>t[1]?1:-1))[0];t[1]>0&&o.push([t[0],0,t[1]])}));const i=this.toView(o);return e?i.match(e,t,n):i},after:function(e,t,n){const{indexN:r}=this.methods.one.pointer,o=[],a=r(this.fullPointer),i=this.document;Object.keys(a).forEach((e=>{const t=a[e].sort(((e,t)=>e[1]>t[1]?-1:1))[0],[n,,r]=t;r{const a=n.before(e,t);if(a.found){const e=a.terms();r[o][1]-=e.length,r[o][3]=e.docs[0][0].id}})),this.update(r)},growRight:function(e,t,n){"string"==typeof e&&(e=this.world.methods.one.parseMatch(e,n,this.world)),e[0].start=!0;const r=this.fullPointer;return this.forEach(((n,o)=>{const a=n.after(e,t);if(a.found){const e=a.terms();r[o][2]+=e.length,r[o][4]=null}})),this.update(r)},grow:function(e,t,n){return this.growRight(e,t,n).growLeft(e,t,n)}};const Ue=function(e,t){return[e[0],e[1],t[2]]},Re=(e,t,n)=>{return"string"==typeof e||(r=e,"[object Array]"===Object.prototype.toString.call(r))?t.match(e,n):e||t.none();var r},Qe=function(e,t){const[n,r,o]=e;return t.document[n]&&t.document[n][r]&&(e[3]=e[3]||t.document[n][r].id,t.document[n][o-1]&&(e[4]=e[4]||t.document[n][o-1].id)),e},Ze={splitOn:function(e,t){const{splitAll:n}=this.methods.one.pointer,r=Re(e,this,t).fullPointer,o=n(this.fullPointer,r);let a=[];return o.forEach((e=>{a.push(e.passthrough),a.push(e.before),a.push(e.match),a.push(e.after)})),a=a.filter((e=>e)),a=a.map((e=>Qe(e,this))),this.update(a)},splitBefore:function(e,t){const{splitAll:n}=this.methods.one.pointer,r=Re(e,this,t).fullPointer,o=n(this.fullPointer,r);for(let e=0;e{a.push(e.passthrough),a.push(e.before),e.match&&e.after?a.push(Ue(e.match,e.after)):a.push(e.match)})),a=a.filter((e=>e)),a=a.map((e=>Qe(e,this))),this.update(a)},splitAfter:function(e,t){const{splitAll:n}=this.methods.one.pointer,r=Re(e,this,t).fullPointer,o=n(this.fullPointer,r);let a=[];return o.forEach((e=>{a.push(e.passthrough),e.before&&e.match?a.push(Ue(e.before,e.match)):(a.push(e.before),a.push(e.match)),a.push(e.after)})),a=a.filter((e=>e)),a=a.map((e=>Qe(e,this))),this.update(a)}};Ze.split=Ze.splitAfter;const _e=function(e,t){return!(!e||!t)&&(e[0]===t[0]&&e[2]===t[1])},Xe=function(e,t,n){const r=e.world,o=r.methods.one.parseMatch;n=n||"^.";const a=o(t=t||".$",{},r),i=o(n,{},r);a[a.length-1].end=!0,i[0].start=!0;const s=e.fullPointer,l=[s[0]];for(let t=1;t)?\/.*?[^\\/]\/[?\]+*$~]*)(?:\s|$)/,nt=/([!~[^]*(?:<[^<]*>)?\([^)]+[^\\)]\)[?\]+*$~]*)(?:\s|$)/,rt=/ /g,ot=e=>/^[![^]*(<[^<]*>)?\//.test(e)&&/\/[?\]+*$~]*$/.test(e),at=function(e){return e=(e=e.map((e=>e.trim()))).filter((e=>e))},it=/\{([0-9]+)?(, *[0-9]*)?\}/,st=/&&/,lt=new RegExp(/^<\s*(\S+)\s*>/),ut=e=>e.charAt(0).toUpperCase()+e.substring(1),ct=e=>e.charAt(e.length-1),ht=e=>e.charAt(0),dt=e=>e.substring(1),gt=e=>e.substring(0,e.length-1),mt=function(e){return e=dt(e),e=gt(e)},pt=function(e,t){const n={};for(let r=0;r<2;r+=1){if("$"===ct(e)&&(n.end=!0,e=gt(e)),"^"===ht(e)&&(n.start=!0,e=dt(e)),"?"===ct(e)&&(n.optional=!0,e=gt(e)),("["===ht(e)||"]"===ct(e))&&(n.group=null,"["===ht(e)&&(n.groupStart=!0),"]"===ct(e)&&(n.groupEnd=!0),e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===ht(e))){const t=lt.exec(e);t.length>=2&&(n.group=t[1],e=e.replace(t[0],""))}if("+"===ct(e)&&(n.greedy=!0,e=gt(e)),"*"!==e&&"*"===ct(e)&&"\\*"!==e&&(n.greedy=!0,e=gt(e)),"!"===ht(e)&&(n.negative=!0,e=dt(e)),"~"===ht(e)&&"~"===ct(e)&&e.length>2&&(e=mt(e),n.fuzzy=!0,n.min=t.fuzzy||.85,!1===/\(/.test(e)))return n.word=e,n;if("/"===ht(e)&&"/"===ct(e))return e=mt(e),t.caseSensitive&&(n.use="text"),n.regex=new RegExp(e),n;if(!0===it.test(e)&&(e=e.replace(it,((e,t,r)=>(void 0===r?(n.min=Number(t),n.max=Number(t)):(r=r.replace(/, */,""),void 0===t?(n.min=0,n.max=Number(r)):(n.min=Number(t),n.max=Number(r||999))),n.greedy=!0,n.min||(n.optional=!0),"")))),"("===ht(e)&&")"===ct(e)){st.test(e)?(n.choices=e.split(st),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=dt(n.choices[0]);const r=n.choices.length-1;n.choices[r]=gt(n.choices[r]),n.choices=n.choices.map((e=>e.trim())),n.choices=n.choices.filter((e=>e)),n.choices=n.choices.map((e=>e.split(/ /g).map((e=>pt(e,t))))),e=""}if("{"===ht(e)&&"}"===ct(e)){if(e=mt(e),n.root=e,/\//.test(e)){const e=n.root.split(/\//);n.root=e[0],n.pos=e[1],"adj"===n.pos&&(n.pos="Adjective"),n.pos=n.pos.charAt(0).toUpperCase()+n.pos.substr(1).toLowerCase(),void 0!==e[2]&&(n.sense=e[2])}return n}if("<"===ht(e)&&">"===ct(e))return e=mt(e),n.chunk=ut(e),n.greedy=!0,n;if("%"===ht(e)&&"%"===ct(e))return e=mt(e),n.switch=e,n}return"#"===ht(e)?(n.tag=dt(e),n.tag=ut(n.tag),n):"@"===ht(e)?(n.method=dt(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),t.caseSensitive?n.use="text":e=e.toLowerCase(),n.word=e),n)},ft=/[a-z0-9][-–—][a-z]/i,bt=function(e,t){const{all:n}=t.methods.two.transform.verb||{},r=e.root;return n?n(r,t.model):[]},vt=function(e,t){const{all:n}=t.methods.two.transform.noun||{};return n?n(e.root,t.model):[e.root]},yt=function(e,t){const{all:n}=t.methods.two.transform.adjective||{};return n?n(e.root,t.model):[e.root]},wt=function(e){return e=function(e){let t=0,n=null;for(let r=0;r(e.fuzzy&&e.choices&&e.choices.forEach((t=>{1===t.length&&t[0].word&&(t[0].fuzzy=!0,t[0].min=e.min)})),e)))}(e=e.map((e=>{if(void 0!==e.choices){if("or"!==e.operator)return e;if(!0===e.fuzzy)return e;!0===e.choices.every((e=>{if(1!==e.length)return!1;const t=e[0];return!0!==t.fuzzy&&!t.start&&!t.end&&void 0!==t.word&&!0!==t.negative&&!0!==t.optional&&!0!==t.method}))&&(e.fastOr=new Set,e.choices.forEach((t=>{e.fastOr.add(t[0].word)})),delete e.choices)}return e}))),e},kt=function(e,t){for(const n of t)if(e.has(n))return!0;return!1},Pt=function(e,t){for(let n=0;nn?r:n)+1;if(Math.abs(n-r)>(o||100))return o||100;const a=[];for(let e=0;e4)return n;l=t[i-1],u=s===l?0:1,c=a[o-1][i]+1,(h=a[o][i-1]+1)1&&i>1&&s===t[i-2]&&e[o-2]===l&&(h=a[o-2][i-2]+u)-1!==e.post.indexOf(t),Tt={hasQuote:e=>Ct.test(e.pre)||Nt.test(e.post),hasComma:e=>It(e,","),hasPeriod:e=>!0===It(e,".")&&!1===It(e,"..."),hasExclamation:e=>It(e,"!"),hasQuestionMark:e=>It(e,"?")||It(e,"¿"),hasEllipses:e=>It(e,"..")||It(e,"…"),hasSemicolon:e=>It(e,";"),hasColon:e=>It(e,":"),hasSlash:e=>/\//.test(e.text),hasHyphen:e=>jt.test(e.post)||jt.test(e.pre),hasDash:e=>xt.test(e.post)||xt.test(e.pre),hasContraction:e=>Boolean(e.implicit),isAcronym:e=>e.tags.has("Acronym"),isKnown:e=>e.tags.size>0,isTitleCase:e=>/^\p{Lu}[a-z'\u00C0-\u00FF]/u.test(e.text),isUpperCase:e=>/^\p{Lu}+$/u.test(e.text)};Tt.hasQuotation=Tt.hasQuote;let Dt=function(){};Dt=function(e,t,n,r){const o=function(e,t,n,r){if(!0===t.anything)return!0;if(!0===t.start&&0!==n)return!1;if(!0===t.end&&n!==r-1)return!1;if(void 0!==t.id&&t.id===e.id)return!0;if(void 0!==t.word){if(t.use)return t.word===e[t.use];if(null!==e.machine&&e.machine===t.word)return!0;if(void 0!==e.alias&&e.alias.hasOwnProperty(t.word))return!0;if(!0===t.fuzzy){if(t.word===e.root)return!0;if(At(t.word,e.normal)>=t.min)return!0}return!(!e.alias||!e.alias.some((e=>e===t.word)))||t.word===e.text||t.word===e.normal}if(void 0!==t.tag)return!0===e.tags.has(t.tag);if(void 0!==t.method)return"function"==typeof Tt[t.method]&&!0===Tt[t.method](e);if(void 0!==t.pre)return e.pre&&e.pre.includes(t.pre);if(void 0!==t.post)return e.post&&e.post.includes(t.post);if(void 0!==t.regex){let n=e.normal;return t.use&&(n=e[t.use]),t.regex.test(n)}if(void 0!==t.chunk)return e.chunk===t.chunk;if(void 0!==t.switch)return e.switch===t.switch;if(void 0!==t.machine)return e.normal===t.machine||e.machine===t.machine||e.root===t.machine;if(void 0!==t.sense)return e.sense===t.sense;if(void 0!==t.fastOr){if(t.pos&&!e.tags.has(t.pos))return null;const n=e.root||e.implicit||e.machine||e.normal;return t.fastOr.has(n)||t.fastOr.has(e.text)}return void 0!==t.choices&&("and"===t.operator?t.choices.every((t=>Dt(e,t,n,r))):t.choices.some((t=>Dt(e,t,n,r))))}(e,t,n,r);return!0===t.negative?!o:o};const Ht=function(e,t){if(!0===e.end&&!0===e.greedy&&t.start_i+t.tn.max)return e.t=e.t+n.max,!0;if(!0===e.hasGroup){Et(e,e.t).length=r-e.t}return e.t=r,!0},Ot=function(e,t=0){const n=e.regs[e.r];let r=!1;for(let a=0;a{let o=0;const a=e.t+r+t+o;if(void 0===e.terms[a])return!1;const i=Dt(e.terms[a],n,a+e.start_i,e.phrase_length);if(!0===i&&!0===n.greedy)for(let t=1;t{const r=n.every(((t,n)=>{const r=e.t+n;return void 0!==e.terms[r]&&Dt(e.terms[r],t,r,e.phrase_length)}));return!0===r&&n.length>t&&(t=n.length),r}))&&t}(e);if(r){if(!0===n.negative)return null;if(!0===e.hasGroup){Et(e,e.t).length+=r}if(!0===n.end){const t=e.phrase_length-1;if(e.t+e.start_i!==t)return null}return e.t+=r,!0}return!!n.optional||null},zt=function(e){const{regs:t}=e,n=t[e.r],r=Object.assign({},n);r.negative=!1;if(Dt(e.terms[e.t],r,e.start_i+e.t,e.phrase_length))return!1;if(n.optional){const n=t[e.r+1];if(n){if(Dt(e.terms[e.t],n,e.start_i+e.t,e.phrase_length))e.r+=1;else if(n.optional&&t[e.r+2]){Dt(e.terms[e.t],t[e.r+2],e.start_i+e.t,e.phrase_length)&&(e.r+=2)}}}return n.greedy?function(e,t,n){let r=0;for(let o=e.t;or||(e.t+=r,0))}(e,r,t[e.r+1]):(e.t+=1,!0)},Bt=function(e){const{regs:t,phrase_length:n}=e,r=t[e.r];return e.t=function(e,t){const n=Object.assign({},e.regs[e.r],{start:!1,end:!1}),r=e.t;for(;e.te.t?null:!0!==r.end||e.start_i+e.t===n||null},St=function(e){const{regs:t}=e,n=t[e.r],r=e.terms[e.t],o=e.t;if(n.optional&&t[e.r+1]&&n.negative)return!0;if(n.optional&&t[e.r+1]&&function(e){const{regs:t}=e,n=t[e.r],r=e.terms[e.t],o=Dt(r,t[e.r+1],e.start_i+e.t,e.phrase_length);if(n.negative||o){const n=e.terms[e.t+1];n&&Dt(n,t[e.r+1],e.start_i+e.t,e.phrase_length)||(e.r+=1)}}(e),r.implicit&&e.terms[e.t+1]&&function(e){const t=e.terms[e.t],n=e.regs[e.r];if(t.implicit&&e.terms[e.t+1]){if(!e.terms[e.t+1].implicit)return;n.word===t.normal&&(e.t+=1),"hasContraction"===n.method&&(e.t+=1)}}(e),e.t+=1,!0===n.end&&e.t!==e.terms.length&&!0!==n.greedy)return null;if(!0===n.greedy){if(!Bt(e))return null}return!0===e.hasGroup&&function(e,t){const n=e.regs[e.r],r=Et(e,t);e.t>1&&n.greedy?r.length+=e.t-t:r.length++}(e,o),!0},$t=function(e,t,n,r){if(0===e.length||0===t.length)return null;const o={t:0,terms:e,r:0,regs:t,groups:{},start_i:n,phrase_length:r,inGroup:null};for(;o.r!e.optional)))break;return null}if(!0===e.anything&&!0===e.greedy){if(!Gt(o))return null;continue}if(void 0!==e.choices&&"or"===e.operator){if(!Ft(o))return null;continue}if(void 0!==e.choices&&"and"===e.operator){if(!Vt(o))return null;continue}if(!0===e.anything){if(e.negative&&e.anything)return null;if(!St(o))return null;continue}if(!0===Ht(e,o)){if(!St(o))return null;continue}if(e.negative){if(!zt(o))return null;continue}if(!0!==Dt(o.terms[o.t],e,o.start_i+o.t,o.phrase_length)){if(!0!==e.optional)return null}else{if(!St(o))return null}}const a=[null,n,o.t+n];if(a[1]===a[2])return null;const i={};return Object.keys(o.groups).forEach((e=>{const t=o.groups[e],r=n+t.start;i[e]=[null,r,r+t.length]})),{pointer:a,groups:i}},Mt=function(e,t){return e.pointer[0]=t,Object.keys(e.groups).forEach((n=>{e.groups[n][0]=t})),e},Lt=function(e,t,n){let r=$t(e,t,0,e.length);return r?(r=Mt(r,n),r):null},Kt={one:{termMethods:Tt,parseMatch:function(e,t,n){if(null==e||""===e)return[];t=t||{},"number"==typeof e&&(e=String(e));let r=function(e){const t=e.split(tt);let n=[];t.forEach((e=>{ot(e)?n.push(e):n=n.concat(e.split(nt))})),n=at(n);let r=[];return n.forEach((e=>{(e=>/^[![^]*(<[^<]*>)?\(/.test(e)&&/\)[?\]+*$~]*$/.test(e))(e)||ot(e)?r.push(e):r=r.concat(e.split(rt))})),r=at(r),r}(e);return r=r.map((e=>pt(e,t))),r=function(e,t){const n=t.model.one.prefixes;for(let t=e.length-1;t>=0;t-=1){const r=e[t];if(r.word&&ft.test(r.word)){let o=r.word.split(/[-–—]/g);if(n.hasOwnProperty(o[0]))continue;o=o.filter((e=>e)).reverse(),e.splice(t,1),o.forEach((n=>{const o=Object.assign({},r);o.word=n,e.splice(t,0,o)}))}}return e}(r,n),r=function(e,t){return e.map((e=>{if(e.root)if(t.methods.two&&t.methods.two.transform){let n=[];e.pos?"Verb"===e.pos?n=n.concat(bt(e,t)):"Noun"===e.pos?n=n.concat(vt(e,t)):"Adjective"===e.pos&&(n=n.concat(yt(e,t))):(n=n.concat(bt(e,t)),n=n.concat(vt(e,t)),n=n.concat(yt(e,t))),n=n.filter((e=>e)),n.length>0&&(e.operator="or",e.fastOr=new Set(n))}else e.machine=e.root,delete e.id,delete e.root;return e}))}(r,n),r=wt(r),r},match:function(e,t,n){n=n||[];const{regs:r,group:o,justOne:a}=t;let i=[];if(!r||0===r.length)return{ptrs:[],byGroup:{}};const s=r.filter((e=>!0!==e.optional&&!0!==e.negative)).length;e:for(let t=0;te&&(e=Math.abs(n-1))}}else{const e=Lt(o,r,t);e&&i.push(e)}}return!0===r[r.length-1].end&&(i=i.filter((t=>{const n=t.pointer[0];return e[n].length===t.pointer[2]}))),t.notIf&&(i=function(e,t,n){return e=e.filter((e=>{const[r,o,a]=e.pointer,i=n[r].slice(o,a);for(let e=0;e{e.groups[t]&&n.push(e.groups[t])})):e.forEach((e=>{n.push(e.pointer),Object.keys(e.groups).forEach((t=>{r[t]=r[t]||[],r[t].push(e.groups[t])}))}))),{ptrs:n,byGroup:r}}(i,o),i.ptrs.forEach((t=>{const[n,r,o]=t;t[3]=e[n][r].id,t[4]=e[n][o-1].id})),i}}};var Jt={api:function(e){Object.assign(e.prototype,et)},methods:Kt,lib:{parseMatch:function(e,t){const n=this.world(),r=n.methods.one.killUnicode;return r&&(e=r(e,n)),n.methods.one.parseMatch(e,t,n)}}};const Wt=/^\../,qt=/^#./,Ut=function(e,t){const n={},r={};return Object.keys(t).forEach((o=>{let a=t[o];const i=function(e){let t="",n="";return e=e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),Wt.test(e)?t=``),t+=">",{start:t,end:n}}(o);"string"==typeof a&&(a=e.match(a)),a.docs.forEach((e=>{if(e.every((e=>e.implicit)))return;const t=e[0].id;n[t]=n[t]||[],n[t].push(i.start);const o=e[e.length-1].id;r[o]=r[o]||[],r[o].push(i.end)}))})),{starts:n,ends:r}};var Rt={html:function(e){const{starts:t,ends:n}=Ut(this,e);let r="";return this.docs.forEach((e=>{for(let o=0;o{let n=e.pre||"",o=e.post||"";"some"===t.punctuation&&(n=n.replace(Zt,""),Xt.test(o)&&(o=" "),o=o.replace(_t,""),o=o.replace(/\?!+/,"?"),o=o.replace(/!+/,"!"),o=o.replace(/\?+/,"?"),o=o.replace(/\.{2,}/,""),e.tags.has("Abbreviation")&&(o=o.replace(/\./,""))),"some"===t.whitespace&&(n=n.replace(/\s/,""),o=o.replace(/\s+/," ")),t.keepPunct||(n=n.replace(Zt,""),o="-"===o?" ":o.replace(Qt,""));let a=e[t.form||"text"]||e.normal||"";"implicit"===t.form&&(a=e.implicit||e.text),"root"===t.form&&e.implicit&&(a=e.root||e.implicit||e.normal),"machine"!==t.form&&"implicit"!==t.form&&"root"!==t.form||!e.implicit||o&&Yt.test(o)||(o+=" "),r+=n+a+o})),!1===n&&(r=r.trim()),!0===t.lowerCase&&(r=r.toLowerCase()),r},tn={text:{form:"text"},normal:{whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"normal"},machine:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"none",unicode:"some",form:"machine"},root:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"root"},implicit:{form:"implicit"}};tn.clean=tn.normal,tn.reduced=tn.root;const nn=[];let rn=0;for(;rn<64;)nn[rn]=0|4294967296*Math.sin(++rn%Math.PI);const on=function(e){let t,n,r,o=decodeURI(encodeURI(e))+"€",a=o.length;const i=[t=1732584193,n=4023233417,~t,~n],s=[];for(e=--a/4+2|15,s[--e]=8*a;~a;)s[a>>2]|=o.charCodeAt(a)<<8*a--;for(rn=o=0;rn>4]+nn[o]+~~s[rn|15&[o,5*o+1,3*o+5,7*o][a]])<<(a=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*a+o++%4])|r>>>-a),t,n])t=0|a[1],n=a[2];for(o=4;o;)i[--o]+=a[o]}for(e="";o<32;)e+=(i[o>>3]>>4*(1^o++)&15).toString(16);return e},an={text:!0,terms:!0},sn={case:"none",unicode:"some",form:"machine",punctuation:"some"},ln=function(e,t){return Object.assign({},e,t)},un={text:e=>en(e,{keepPunct:!0},!1),normal:e=>en(e,ln(tn.normal,{keepPunct:!0}),!1),implicit:e=>en(e,ln(tn.implicit,{keepPunct:!0}),!1),machine:e=>en(e,sn,!1),root:e=>en(e,ln(sn,{form:"root"}),!1),hash:e=>on(en(e,{keepPunct:!0},!1)),offset:e=>{const t=un.text(e).length;return{index:e[0].offset.index,start:e[0].offset.start,length:t}},terms:e=>e.map((e=>{const t=Object.assign({},e);return t.tags=Array.from(e.tags),t})),confidence:(e,t,n)=>t.eq(n).confidence(),syllables:(e,t,n)=>t.eq(n).syllables(),sentence:(e,t,n)=>t.eq(n).fullSentence().text(),dirty:e=>e.some((e=>!0===e.dirty))};un.sentences=un.sentence,un.clean=un.normal,un.reduced=un.root;const cn={json:function(e){const t=(n=this,"string"==typeof(r=(r=e)||{})&&(r={}),(r=Object.assign({},an,r)).offset&&n.compute("offset"),n.docs.map(((e,t)=>{const o={};return Object.keys(r).forEach((a=>{r[a]&&un[a]&&(o[a]=un[a](e,n,t))})),o})));var n,r;return"number"==typeof e?t[e]:t}};cn.data=cn.json;const hn=function(e){const t=e.pre||"",n=e.post||"";return t+e.text+n},dn=function(e,t){const n=function(e,t){const n={};return Object.keys(t).forEach((r=>{e.match(r).fullPointer.forEach((e=>{n[e[3]]={fn:t[r],end:e[2]}}))})),n}(e,t);let r="";return e.docs.forEach(((t,o)=>{for(let a=0;ae.reduce(((e,t)=>e+t.pre+t.text+t.post),"").trim()));return e.filter((e=>e))}if("freq"===e||"frequency"===e||"topk"===e)return function(e){const t={};e.forEach((e=>{t[e]=t[e]||0,t[e]+=1}));const n=Object.keys(t).map((e=>({normal:e,count:t[e]})));return n.sort(((e,t)=>e.count>t.count?-1:0))}(this.json({normal:!0}).map((e=>e.normal)));if("terms"===e){let e=[];return this.docs.forEach((t=>{let n=t.map((e=>e.text));n=n.filter((e=>e)),e=e.concat(n)})),e}return"tags"===e?this.docs.map((e=>e.reduce(((e,t)=>(e[t.implicit||t.normal]=Array.from(t.tags),e)),{}))):"debug"===e?this.debug():this.text()},wrap:function(e){return dn(this,e)}};var mn={text:function(e){let t={};var n;if(e&&"string"==typeof e&&tn.hasOwnProperty(e)?t=Object.assign({},tn[e]):e&&(n=e,"[object Object]"===Object.prototype.toString.call(n))&&(t=Object.assign({},e)),void 0!==t.keepSpace||this.isFull()||(t.keepSpace=!1),void 0===t.keepEndPunct&&this.pointer){const e=this.pointer[0];e&&e[1]?t.keepEndPunct=!1:t.keepEndPunct=!0}return void 0===t.keepPunct&&(t.keepPunct=!0),void 0===t.keepSpace&&(t.keepSpace=!0),function(e,t){let n="";if(!e||!e[0]||!e[0][0])return n;for(let r=0;r""+e+fn,red:e=>""+e+fn,blue:e=>""+e+fn,magenta:e=>""+e+fn,cyan:e=>""+e+fn,yellow:e=>""+e+fn,black:e=>""+e+fn,dim:e=>""+e+fn,i:e=>""+e+fn},vn={tags:function(e){const{docs:t,model:n}=e;0===t.length&&console.log(bn.blue("\n ──────")),t.forEach((t=>{console.log(bn.blue("\n ┌─────────")),t.forEach((t=>{const r=[...t.tags||[]];let o=t.text||"-";t.sense&&(o=`{${t.normal}/${t.sense}}`),t.implicit&&(o="["+t.implicit+"]"),o=bn.yellow(o);let a="'"+o+"'";if(t.reference){const n=e.update([t.reference]).text("normal");a+=` - ${bn.dim(bn.i("["+n+"]"))}`}a=a.padEnd(18);const i=bn.blue(" │ ")+bn.i(a)+" - "+function(e,t){return t.one.tagSet&&(e=e.map((e=>{if(!t.one.tagSet.hasOwnProperty(e))return e;const n=t.one.tagSet[e].color||"blue";return bn[n](e)}))),e.join(", ")}(r,n);console.log(i)}))})),console.log("\n")},clientSide:function(e){console.log("%c -=-=- ","background-color:#6699cc;"),e.forEach((e=>{console.groupCollapsed(e.text());const t=e.docs[0].map((e=>{let t=e.text||"-";e.implicit&&(t="["+e.implicit+"]");return{text:t,tags:"["+Array.from(e.tags).join(", ")+"]"}}));console.table(t,["text","tags"]),console.groupEnd()}))},chunks:function(e){const{docs:t}=e;console.log(""),t.forEach((e=>{const t=[];e.forEach((e=>{"Noun"===e.chunk?t.push(bn.blue(e.implicit||e.normal)):"Verb"===e.chunk?t.push(bn.green(e.implicit||e.normal)):"Adjective"===e.chunk?t.push(bn.yellow(e.implicit||e.normal)):"Pivot"===e.chunk?t.push(bn.red(e.implicit||e.normal)):t.push(e.implicit||e.normal)})),console.log(t.join(" "),"\n")})),console.log("\n")},highlight:function(e){if(!e.found)return;const t={};e.fullPointer.forEach((e=>{t[e[0]]=t[e[0]]||[],t[e[0]].push(e)})),Object.keys(t).forEach((n=>{let r=e.update([[Number(n)]]).text();e.update(t[n]).json({offset:!0}).forEach(((e,t)=>{r=function(e,t,n){const r=((e,t,n)=>{const r=9*n,o=t.start+r,a=o+t.length;return[e.substring(0,o),e.substring(o,a),e.substring(a,e.length)]})(e,t,n);return`${r[0]}${bn.blue(r[1])}${r[2]}`}(r,e.offset,t)})),console.log(r)})),console.log("\n")}};var yn={api:function(e){Object.assign(e.prototype,pn)},methods:{one:{hash:on,debug:vn}}};const wn=function(e,t){if(e[0]!==t[0])return!1;const[,n,r]=e,[,o,a]=t;return n<=o&&r>o||o<=n&&a>n},kn=function(e){const t={};return e.forEach((e=>{t[e[0]]=t[e[0]]||[],t[e[0]].push(e)})),t},Pn=function(e,t){const n=kn(t),r=[];return e.forEach((e=>{const[t]=e;let o=n[t]||[];if(o=o.filter((t=>function(e,t){return e[1]<=t[1]&&t[2]<=e[2]}(e,t))),0===o.length)return void r.push({passthrough:e});o=o.sort(((e,t)=>e[1]-t[1]));let a=e;o.forEach(((e,t)=>{const n=function(e,t){const[n,r]=e,o=t[1],a=t[2],i={};if(ra&&(i.after=[n,a,e[2]]),i}(a,e);o[t+1]?(r.push({before:n.before,match:n.match}),n.after&&(a=n.after)):r.push(n)}))})),r};var An={one:{termList:function(e){const t=[];for(let n=0;n{if(!r)return;let[a,i,s,l,u]=r,c=t[a]||[];if(void 0===i&&(i=0),void 0===s&&(s=c.length),!l||c[i]&&c[i].id===l)c=c.slice(i,s);else{const n=function(e,t,n){for(let r=0;r<20;r+=1){if(t[n-r]){const o=t[n-r].findIndex((t=>t.id===e));if(-1!==o)return[n-r,o]}if(t[n+r]){const o=t[n+r].findIndex((t=>t.id===e));if(-1!==o)return[n+r,o]}}return null}(l,t,a);if(null!==n){const r=s-i;c=t[n[0]].slice(n[1],n[1]+r);const a=c[0]?c[0].id:null;e[o]=[n[0],n[1],n[1]+r,a]}}0!==c.length&&i!==s&&(u&&c[c.length-1].id!==u&&(c=function(e,t){const[n,r,,,o]=e,a=t[n],i=a.findIndex((e=>e.id===o));return-1===i?(e[2]=t[n].length,e[4]=a.length?a[a.length-1].id:null):e[2]=i,t[n].slice(r,e[2]+1)}(r,t)),n.push(c))})),n=n.filter((e=>e.length>0)),n},pointer:{indexN:kn,splitAll:Pn}}};const Cn=function(e,t){const n=e.concat(t),r=kn(n);let o=[];return n.forEach((e=>{const[t]=e;if(1===r[t].length)return void o.push(e);const n=r[t].filter((t=>wn(e,t)));n.push(e);const a=function(e){let t=e[0][1],n=e[0][2];return e.forEach((e=>{e[1]n&&(n=e[2])})),[e[0][0],t,n]}(n);o.push(a)})),o=function(e){const t={};for(let n=0;n{e.passthrough&&n.push(e.passthrough),e.before&&n.push(e.before),e.after&&n.push(e.after)})),n},jn=(e,t)=>{return"string"==typeof e||(n=e,"[object Array]"===Object.prototype.toString.call(n))?t.match(e):e||t.none();var n},xn=function(e,t){return e.map((e=>{const[n,r]=e;return t[n]&&t[n][r]&&(e[3]=t[n][r].id),e}))},In={union:function(e){e=jn(e,this);let t=Cn(this.fullPointer,e.fullPointer);return t=xn(t,this.document),this.toView(t)}};In.and=In.union,In.intersection=function(e){e=jn(e,this);let t=function(e,t){const n=kn(t),r=[];return e.forEach((e=>{let t=n[e[0]]||[];t=t.filter((t=>wn(e,t))),0!==t.length&&t.forEach((t=>{const n=function(e,t){const n=e[1]t[2]?t[2]:e[2];return n{e=Cn(e,[t])})),e=xn(e,this.document),this.update(e)};var Tn={methods:An,api:function(e){Object.assign(e.prototype,In)}};const Dn=function(e){return!0===e.optional||!0===e.negative?null:e.tag?"#"+e.tag:e.word?e.word:e.switch?`%${e.switch}%`:null},Hn=function(e,t){const n=t.methods.one.parseMatch;return e.forEach((e=>{e.regs=n(e.match,{},t),"string"==typeof e.ifNo&&(e.ifNo=[e.ifNo]),e.notIf&&(e.notIf=n(e.notIf,{},t)),e.needs=function(e){const t=[];return e.forEach((e=>{t.push(Dn(e)),"and"===e.operator&&e.choices&&e.choices.forEach((e=>{e.forEach((e=>{t.push(Dn(e))}))}))})),t.filter((e=>e))}(e.regs);const{wants:r,count:o}=function(e){const t=[];let n=0;return e.forEach((e=>{"or"!==e.operator||e.optional||e.negative||(e.fastOr&&Array.from(e.fastOr).forEach((e=>{t.push(e)})),e.choices&&e.choices.forEach((e=>{e.forEach((e=>{const n=Dn(e);n&&t.push(n)}))})),n+=1)})),{wants:t,count:n}}(e.regs);e.wants=r,e.minWant=o,e.minWords=e.regs.filter((e=>!e.optional)).length})),e};var En={buildNet:function(e,t){e=Hn(e,t);const n={};e.forEach((e=>{e.needs.forEach((t=>{n[t]=Array.isArray(n[t])?n[t]:[],n[t].push(e)})),e.wants.forEach((t=>{n[t]=Array.isArray(n[t])?n[t]:[],n[t].push(e)}))})),Object.keys(n).forEach((e=>{const t={};n[e]=n[e].filter((e=>"boolean"!=typeof t[e.match]&&(t[e.match]=!0,!0)))}));const r=e.filter((e=>0===e.needs.length&&0===e.wants.length));return{hooks:n,always:r}},bulkMatch:function(e,t,n,r={}){const o=n.one.cacheDoc(e);let a=function(e,t){return e.map(((n,r)=>{let o=[];Object.keys(t).forEach((n=>{e[r].has(n)&&(o=o.concat(t[n]))}));const a={};return o=o.filter((e=>"boolean"!=typeof a[e.match]&&(a[e.match]=!0,!0))),o}))}(o,t.hooks);a=function(e,t){return e.map(((e,n)=>{const r=t[n];return(e=(e=e.filter((e=>e.needs.every((e=>r.has(e)))))).filter((e=>void 0===e.ifNo||!0!==e.ifNo.some((e=>r.has(e)))))).filter((e=>0===e.wants.length||e.wants.filter((e=>r.has(e))).length>=e.minWant))}))}(a,o),t.always.length>0&&(a=a.map((e=>e.concat(t.always)))),a=function(e,t){return e.map(((e,n)=>{const r=t[n].length;return e=e.filter((e=>r>=e.minWords)),e}))}(a,e);const i=function(e,t,n,r,o){const a=[];for(let n=0;n0&&(l.ptrs.forEach((e=>{e[0]=n;const t=Object.assign({},s,{pointer:e});void 0!==s.unTag&&(t.unTag=s.unTag),a.push(t)})),!0===o.matchOne))return[a[0]]}return a}(a,e,0,n,r);return i},bulkTagger:function(e,t,n){const{model:r,methods:o}=n,{getDoc:a,setTag:i,unTag:s}=o.one,l=o.two.looksPlural;if(0===e.length)return e;return("undefined"!=typeof process&&process.env?process.env:self.env||{}).DEBUG_TAGS&&console.log(`\n\n → ${e.length} post-tagger:`),e.map((e=>{if(!e.tag&&!e.chunk&&!e.unTag)return;const o=e.reason||e.match,u=a([e.pointer],t)[0];if(!0===e.safe){if(!1===function(e,t,n){const r=n.one.tagSet;if(!r.hasOwnProperty(t))return!0;const o=r[t].not||[];for(let t=0;te.frozen=!0))}void 0!==e.unTag&&s(u,e.unTag,n,e.safe,o),e.chunk&&u.forEach((t=>t.chunk=e.chunk))}))}},Gn={lib:{buildNet:function(e){const t=this.methods().one.buildNet(e,this.world());return t.isNet=!0,t}},api:function(e){e.prototype.sweep=function(e,t={}){const{world:n,docs:r}=this,{methods:o}=n;let a=o.one.bulkMatch(r,e,this.methods,t);!1!==t.tagger&&o.one.bulkTagger(a,r,this.world),a=a.map((e=>{const t=e.pointer,n=r[t[0]][t[1]],o=t[2]-t[1];return n.index&&(e.pointer=[n.index[0],n.index[1],t[1]+o]),e}));const i=a.map((e=>e.pointer));return a=a.map((e=>(e.view=this.update([e.pointer]),delete e.regs,delete e.needs,delete e.pointer,delete e._expanded,e))),{view:this.update(i),found:a}}},methods:{one:En}};const On=/ /,Fn=function(e,t){"Noun"===t&&(e.chunk=t),"Verb"===t&&(e.chunk=t)},Vn=function(e,t,n,r){if(!0===e.tags.has(t))return null;if("."===t)return null;!0===e.frozen&&(r=!0);const o=n[t];if(o){if(o.not&&o.not.length>0)for(let t=0;t0)for(let t=0;t{const r=e.map((e=>e.text||"["+e.implicit+"]")).join(" ");var o;"string"!=typeof t&&t.length>2&&(t=t.slice(0,2).join(", #")+" +"),t="string"!=typeof t?t.join(", #"):t,console.log(` ${(o=r,""+o+"").padEnd(24)} → #${t.padEnd(22)} ${(e=>""+e+"")(n)}`)})(e,t,o),!0!=(s=t,"[object Array]"===Object.prototype.toString.call(s)))if("string"==typeof t)if(t=t.trim(),On.test(t))!function(e,t,n,r){const o=t.split(On);e.forEach(((e,t)=>{let a=o[t];a&&(a=a.replace(/^#/,""),Vn(e,a,n,r))}))}(e,t,a,r);else{t=t.replace(/^#/,"");for(let n=0;nzn(e,t,n,r)))},Bn=function(e){return e.children=e.children||[],e._cache=e._cache||{},e.props=e.props||{},e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],e},Sn=/^ *(#|\/\/)/,$n=function(e){let t=e.trim().split(/->/),n=[];t.forEach((e=>{n=n.concat(function(e){if(!(e=e.trim()))return null;if(/^\[/.test(e)&&/\]$/.test(e)){let t=(e=(e=e.replace(/^\[/,"")).replace(/\]$/,"")).split(/,/);return t=t.map((e=>e.trim())).filter((e=>e)),t=t.map((e=>Bn({id:e}))),t}return[Bn({id:e})]}(e))})),n=n.filter((e=>e));let r=n[0];for(let e=1;e{let n=[],r=[e];for(;r.length>0;){let e=r.pop();n.push(e),e.children&&e.children.forEach((n=>{t&&t(e,n),r.push(n)}))}return n},Ln=e=>"[object Array]"===Object.prototype.toString.call(e),Kn=e=>(e=e||"").trim(),Jn=function(e=[]){return"string"==typeof e?function(e){let t=e.split(/\r?\n/),n=[];t.forEach((e=>{if(!e.trim()||Sn.test(e))return;let t=(e=>{const t=/^( {2}|\t)/;let n=0;for(;t.test(e);)e=e.replace(t,""),n+=1;return n})(e);n.push({indent:t,node:$n(e)})}));let r=function(e){let t={children:[]};return e.forEach(((n,r)=>{0===n.indent?t.children=t.children.concat(n.node):e[r-1]&&function(e,t){let n=e[t].indent;for(;t>=0;t-=1)if(e[t].indent{t[e.id]=e}));let n=Bn({});return e.forEach((e=>{if((e=Bn(e)).parent)if(t.hasOwnProperty(e.parent)){let n=t[e.parent];delete e.parent,n.children.push(e)}else console.warn(`[Grad] - missing node '${e.parent}'`);else n.children.push(e)})),n}(e):(Mn(t=e).forEach(Bn),t);var t},Wn=function(e,t){let n="-> ";t&&(n=(e=>""+e+"")("→ "));let r="";return Mn(e).forEach(((e,o)=>{let a=e.id||"";if(t&&(a=(e=>""+e+"")(a)),0===o&&!e.id)return;let i=e._cache.parents.length;r+=" ".repeat(i)+n+a+"\n"})),r},qn=function(e){let t=Mn(e);t.forEach((e=>{delete(e=Object.assign({},e)).children}));let n=t[0];return n&&!n.id&&0===Object.keys(n.props).length&&t.shift(),t},Un={text:Wn,txt:Wn,array:qn,flat:qn},Rn=function(e,t){return"nested"===t||"json"===t?e:"debug"===t?(console.log(Wn(e,!0)),null):Un.hasOwnProperty(t)?Un[t](e):e},Qn=e=>{Mn(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],t._cache.parents=e._cache.parents.concat([e.id]))}))},Zn=/\//;let _n=class g{constructor(e={}){Object.defineProperty(this,"json",{enumerable:!1,value:e,writable:!0})}get children(){return this.json.children}get id(){return this.json.id}get found(){return this.json.id||this.json.children.length>0}props(e={}){let t=this.json.props||{};return"string"==typeof e&&(t[e]=!0),this.json.props=Object.assign(t,e),this}get(e){if(e=Kn(e),!Zn.test(e)){let t=this.json.children.find((t=>t.id===e));return new g(t)}let t=((e,t)=>{let n=(e=>"string"!=typeof e?e:(e=e.replace(/^\//,"")).split(/\//))(t=t||"");for(let t=0;te.id===n[t]));if(!r)return null;e=r}return e})(this.json,e)||Bn({});return new g(t)}add(e,t={}){if(Ln(e))return e.forEach((e=>this.add(Kn(e),t))),this;e=Kn(e);let n=Bn({id:e,props:t});return this.json.children.push(n),new g(n)}remove(e){return e=Kn(e),this.json.children=this.json.children.filter((t=>t.id!==e)),this}nodes(){return Mn(this.json).map((e=>(delete(e=Object.assign({},e)).children,e)))}cache(){return(e=>{let t=Mn(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],t._cache.parents=e._cache.parents.concat([e.id]))})),n={};t.forEach((e=>{e.id&&(n[e.id]=e)})),t.forEach((e=>{e._cache.parents.forEach((t=>{n.hasOwnProperty(t)&&n[t]._cache.children.push(e.id)}))})),e._cache.children=Object.keys(n)})(this.json),this}list(){return Mn(this.json)}fillDown(){var e;return e=this.json,Mn(e,((e,t)=>{t.props=((e,t)=>(Object.keys(t).forEach((n=>{if(t[n]instanceof Set){let r=e[n]||new Set;e[n]=new Set([...r,...t[n]])}else if((e=>e&&"object"==typeof e&&!Array.isArray(e))(t[n])){let r=e[n]||{};e[n]=Object.assign({},t[n],r)}else Ln(t[n])?e[n]=t[n].concat(e[n]||[]):void 0===e[n]&&(e[n]=t[n])})),e))(t.props,e.props)})),this}depth(){Qn(this.json);let e=Mn(this.json),t=e.length>1?1:0;return e.forEach((e=>{if(0===e._cache.parents.length)return;let n=e._cache.parents.length+1;n>t&&(t=n)})),t}out(e){return Qn(this.json),Rn(this.json,e)}debug(){return Qn(this.json),Rn(this.json,"debug"),this}};const Xn=function(e){let t=Jn(e);return new _n(t)};Xn.prototype.plugin=function(e){e(this)};const Yn={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Hyphenated:"cyan",Adverb:"cyan"},er=function(e){if(Yn.hasOwnProperty(e.id))return Yn[e.id];if(Yn.hasOwnProperty(e.is))return Yn[e.is];const t=e._cache.parents.find((e=>Yn[e]));return Yn[t]},tr=function(e){return e?"string"==typeof e?[e]:e:[]},nr=function(e,t){return e=function(e,t){return Object.keys(e).forEach((n=>{e[n].isA&&(e[n].is=e[n].isA),e[n].notA&&(e[n].not=e[n].notA),e[n].is&&"string"==typeof e[n].is&&(t.hasOwnProperty(e[n].is)||e.hasOwnProperty(e[n].is)||(e[e[n].is]={})),e[n].not&&"string"==typeof e[n].not&&!e.hasOwnProperty(e[n].not)&&(t.hasOwnProperty(e[n].not)||e.hasOwnProperty(e[n].not)||(e[e[n].not]={}))})),e}(e,t),Object.keys(e).forEach((t=>{e[t].children=tr(e[t].children),e[t].not=tr(e[t].not)})),Object.keys(e).forEach((t=>{(e[t].not||[]).forEach((n=>{e[n]&&e[n].not&&e[n].not.push(t)}))})),e};var rr={one:{setTag:zn,unTag:function(e,t,n){t=t.trim().replace(/^#/,"");for(let r=0;r0)for(let e=0;e0&&(e=function(e){return Object.keys(e).forEach((t=>{e[t]=Object.assign({},e[t]),e[t].novel=!0})),e}(e)),e=nr(e,t);const n=function(e){const t=Object.keys(e).map((t=>{const n=e[t],r={not:new Set(n.not),also:n.also,is:n.is,novel:n.novel};return{id:t,parent:n.is,props:r,children:[]}}));return Xn(t).cache().fillDown().out("array")}(Object.assign({},t,e)),r=function(e){const t={};return e.forEach((e=>{const{not:n,also:r,is:o,novel:a}=e.props;let i=e._cache.parents;r&&(i=i.concat(r)),t[e.id]={is:o,not:n,novel:a,also:r,parents:i,children:e._cache.children,color:er(e)}})),Object.keys(t).forEach((e=>{const n=new Set(t[e].not);t[e].not.forEach((e=>{t[e]&&t[e].children.forEach((e=>n.add(e)))})),t[e].not=Array.from(n)})),t}(n);return r},canBe:function(e,t,n){if(!n.hasOwnProperty(t))return!0;const r=n[t].not||[];for(let t=0;to.one.setTag(r,e,i,n,t))):o.one.setTag(r,e,i,n,t),this.uncache(),this},tagSafe:function(e,t=""){return this.tag(e,t,!0)},unTag:function(e,t){if(!this.found||!e)return this;const n=this.termList();if(0===n.length)return this;const{methods:r,verbose:o,model:a}=this;!0===o&&console.log(" - ",e,t||"");const i=a.one.tagSet;return or(e)?e.forEach((e=>r.one.unTag(n,e,i))):r.one.unTag(n,e,i),this.uncache(),this},canBe:function(e){e=e.replace(/^#/,"");const t=this.model.one.tagSet,n=this.methods.one.canBe,r=[];this.document.forEach(((o,a)=>{o.forEach(((o,i)=>{n(o,e,t)||r.push([a,i,i+1])}))}));const o=this.update(r);return this.difference(o)}};var ir={addTags:function(e){const{model:t,methods:n}=this.world(),r=t.one.tagSet,o=(0,n.one.addTags)(e,r);return t.one.tagSet=o,this}};const sr=new Set(["Auxiliary","Possessive"]);var lr={model:{one:{tagSet:{}}},compute:{tagRank:function(e){const{document:t,world:n}=e,r=n.model.one.tagSet;t.forEach((e=>{e.forEach((e=>{const t=Array.from(e.tags);e.tagRank=function(e,t){return e=e.sort(((e,n)=>{if(sr.has(e)||!t.hasOwnProperty(n))return 1;if(sr.has(n)||!t.hasOwnProperty(e))return-1;let r=t[e].children||[];const o=r.length;return r=t[n].children||[],o-r.length})),e}(t,r)}))}))}},methods:rr,api:function(e){Object.assign(e.prototype,ar)},lib:ir};const ur=/([.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s)/g,cr=/^[.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s$/,hr=/((?:\r?\n|\r)+)/,dr=/[a-z0-9\u00C0-\u00FF\u00a9\u00ae\u2000-\u3300\ud000-\udfff]/i,gr=/\S/,mr=function(e){return Boolean(e.match(/\n$/))},pr={'"':'"',""":""","“":"”","‟":"”","„":"”","⹂":"”","‚":"’","«":"»","‹":"›","‵":"′","‶":"″","‷":"‴","〝":"〞","〟":"〞"},fr=RegExp("["+Object.keys(pr).join("")+"]","g"),br=RegExp("["+Object.values(pr).join("")+"]","g"),vr=function(e){if(!e)return!1;const t=e.match(br);return null!==t&&1===t.length},yr=/\(/g,wr=/\)/g,kr=/\S/,Pr=/^\s+/,Ar=function(e,t){const n=e.split(/[-–—]/);if(n.length<=1)return!1;const{prefixes:r,suffixes:o}=t.one;if(1===n[0].length&&/[a-z]/i.test(n[0]))return!1;if(r.hasOwnProperty(n[0]))return!1;if(n[1]=n[1].trim().replace(/[.?!]$/,""),o.hasOwnProperty(n[1]))return!1;if(!0===/^([a-z\u00C0-\u00FF`"'/]+)[-–—]([a-z0-9\u00C0-\u00FF].*)/i.test(e))return!0;return!0===/^[('"]?([0-9]{1,4})[-–—]([a-z\u00C0-\u00FF`"'/-]+[)'"]?$)/i.test(e)},Cr=function(e){const t=[],n=e.split(/[-–—]/);let r="-";const o=e.match(/[-–—]/);o&&o[0]&&(r=o);for(let e=0;e(e[t]=!0,e)),{});const Dr=/\p{Letter}/u,Hr=/[\p{Number}\p{Currency_Symbol}]/u,Er=/^[a-z]\.([a-z]\.)+/i,Gr=/[sn]['’]$/,Or=/([A-Z]\.)+[A-Z]?,?$/,Fr=/^[A-Z]\.,?$/,Vr=/[A-Z]{2,}('s|,)?$/,zr=/([a-z]\.)+[a-z]\.?$/,Br=function(e){return function(e){return!0===Or.test(e)||!0===zr.test(e)||!0===Fr.test(e)||!0===Vr.test(e)}(e)&&(e=e.replace(/\./g,"")),e},Sr=function(e,t){const n=t.methods.one.killUnicode;let r=e.text||"";r=function(e){const t=e=(e=(e=e||"").toLowerCase()).trim();return e=(e=(e=e.replace(/[,;.!?]+$/,"")).replace(/\u2026/g,"...")).replace(/\u2013/g,"-"),!1===/^[:;]/.test(e)&&(e=(e=(e=e.replace(/\.{3,}$/g,"")).replace(/[",.!:;?)]+$/g,"")).replace(/^['"(]+/g,"")),""===(e=(e=e.replace(/[\u200B-\u200D\uFEFF]/g,"")).trim())&&(e=t),e.replace(/([0-9]),([0-9])/g,"$1$2")}(r),r=n(r,t),r=Br(r),e.normal=r},$r=/[ .][A-Z]\.? *$/i,Mr=/(?:\u2026|\.{2,}) *$/,Lr=/\p{L}/u,Kr=/\. *$/,Jr=/^[A-Z]\. $/;var Wr={one:{killUnicode:function(e,t){const n=t.model.one.unicode||{},r=(e=e||"").split("");return r.forEach(((e,t)=>{n[e]&&(r[t]=n[e])})),r.join("")},tokenize:{splitSentences:function(e,t){if(e=e||"",!(e=String(e))||"string"!=typeof e||!1===kr.test(e))return[];const n=function(e){const t=[],n=e.split(hr);for(let e=0;e0&&(o.push(a),e[t]=""):e[t+1]=a+(e[t+1]||"")}return o}(r,t),r=function(e){const t=[];for(let n=0;n0?(n[n.length-1]+=a,n.push(t)):n.push(a+t),a=""):a+=t}return a&&(0===n.length&&(n[0]=""),n[n.length-1]+=a),n=function(e){for(let t=1;te)),n},splitWhitespace:(e,t)=>{const{str:n,pre:r,post:o}=function(e,t){const{prePunctuation:n,postPunctuation:r,emoticons:o}=t.one;let a=e,i="",s="";const l=Array.from(e);if(o.hasOwnProperty(e.trim()))return{str:e.trim(),pre:i,post:" "};let u=l.length;for(let e=0;e(s=e||"",""))),e=a,i=""),{str:e,pre:i,post:s}}(e,t);return{text:n,pre:r,post:o,tags:new Set}},fromString:function(e,t){const{methods:n,model:r}=t,{splitSentences:o,splitTerms:a,splitWhitespace:i}=n.one.tokenize;return e=o(e=e||"",t).map((e=>{let n=a(e,r);return n=n.map((e=>i(e,r))),n.forEach((e=>{Sr(e,t)})),n})),e}}}};const qr={},Ur={};[[["approx","apt","bc","cyn","eg","esp","est","etc","ex","exp","prob","pron","gal","min","pseud","fig","jd","lat","lng","vol","fm","def","misc","plz","ea","ps","sec","pt","pref","pl","pp","qt","fr","sq","nee","ss","tel","temp","vet","ver","fem","masc","eng","adj","vb","rb","inf","situ","vivo","vitro","wr"]],[["dl","ml","gal","qt","pt","tbl","tsp","tbsp","km","dm","cm","mm","mi","td","hr","hrs","kg","hg","dg","cg","mg","µg","lb","oz","sq ft","hz","mps","mph","kmph","kb","mb","tb","lx","lm","fl oz","yb"],"Unit"],[["ad","al","arc","ba","bl","ca","cca","col","corp","ft","fy","ie","lit","ma","md","pd","tce"],"Noun"],[["adj","adm","adv","asst","atty","bldg","brig","capt","cmdr","comdr","cpl","det","dr","esq","gen","gov","hon","jr","llb","lt","maj","messrs","mlle","mme","mr","mrs","ms","mstr","phd","prof","pvt","rep","reps","res","rev","sen","sens","sfc","sgt","sir","sr","supt","surg"],"Honorific"],[["jan","feb","mar","apr","jun","jul","aug","sep","sept","oct","nov","dec"],"Month"],[["dept","univ","assn","bros","inc","ltd","co"],"Organization"],[["rd","st","dist","mt","ave","blvd","cl","cres","hwy","ariz","cal","calif","colo","conn","fla","fl","ga","ida","ia","kan","kans","minn","neb","nebr","okla","penna","penn","pa","dak","tenn","tex","ut","vt","va","wis","wisc","wy","wyo","usafa","alta","ont","que","sask"],"Place"]].forEach((e=>{e[0].forEach((t=>{qr[t]=!0,Ur[t]="Abbreviation",void 0!==e[1]&&(Ur[t]=[Ur[t],e[1]])}))}));var Rr=["anti","bi","co","contra","de","extra","infra","inter","intra","macro","micro","mis","mono","multi","peri","pre","pro","proto","pseudo","re","sub","supra","trans","tri","un","out","ex"].reduce(((e,t)=>(e[t]=!0,e)),{});const Qr={"!":"¡","?":"¿Ɂ",'"':'“”"❝❞',"'":"‘‛❛❜’","-":"—–",a:"ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАаѦѧӐӑӒӓƛæ",b:"ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ",c:"¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼϲϹϽϾСсєҀҁҪҫ",d:"ÐĎďĐđƉƊȡƋƌ",e:"ÈÉÊËèéêëĒēĔĕĖėĘęĚěƐȄȅȆȇȨȩɆɇΈΕΞΣέεξϵЀЁЕеѐёҼҽҾҿӖӗễ",f:"ƑƒϜϝӺӻҒғſ",g:"ĜĝĞğĠġĢģƓǤǥǦǧǴǵ",h:"ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ",I:"ÌÍÎÏ",i:"ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇіїi̇",j:"ĴĵǰȷɈɉϳЈј",k:"ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ",l:"ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ",m:"ΜϺϻМмӍӎ",n:"ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ",o:"ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϴОФоѲѳӦӧӨөӪӫ",p:"ƤΡρϷϸϼРрҎҏÞ",q:"Ɋɋ",r:"ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ",s:"ŚśŜŝŞşŠšƧƨȘșȿЅѕ",t:"ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт",u:"ÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰυϋύ",v:"νѴѵѶѷ",w:"ŴŵƜωώϖϢϣШЩшщѡѿ",x:"×ΧχϗϰХхҲҳӼӽӾӿ",y:"ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ",z:"ŹźŻżŽžƵƶȤȥɀΖ"},Zr={};Object.keys(Qr).forEach((function(e){Qr[e].split("").forEach((function(t){Zr[t]=e}))}));const _r=/\//,Xr=/[a-z]\.[a-z]/i,Yr=/[0-9]/,eo=function(e,t){const n=e.normal||e.text||e.machine,r=t.model.one.aliases;if(r.hasOwnProperty(n)&&(e.alias=e.alias||[],e.alias.push(r[n])),_r.test(n)&&!Xr.test(n)&&!Yr.test(n)){const t=n.split(_r);t.length<=3&&t.forEach((t=>{""!==(t=t.trim())&&(e.alias=e.alias||[],e.alias.push(t))}))}return e},to=/^\p{Letter}+-\p{Letter}+$/u,no=function(e){let t=e.implicit||e.normal||e.text;t=t.replace(/['’]s$/,""),t=t.replace(/s['’]$/,"s"),t=t.replace(/([aeiou][ktrp])in'$/,"$1ing"),to.test(t)&&(t=t.replace(/-/g,"")),t=t.replace(/^[#@]/,""),t!==e.normal&&(e.machine=t)},ro=function(e,t){const n=e.docs;for(let r=0;rro(e,eo),machine:e=>ro(e,no),normal:e=>ro(e,Sr),freq:function(e){const t=e.docs,n={};for(let e=0;e{let i=(e=e.toLowerCase().trim()).length;t.max&&i>t.max&&(i=t.max);for(let s=t.min;s{delete r[e]})),r}(e,t,this.world());return Object.keys(o).forEach((e=>{n.one.typeahead.hasOwnProperty(e)?delete n.one.typeahead[e]:n.one.typeahead[e]=o[e]})),this}};var co={model:{one:{typeahead:{}}},api:function(e){e.prototype.autoFill=so},lib:uo,compute:io,hooks:["typeahead"]};h.extend(J),h.extend(yn),h.extend(Jt),h.extend(Tn),h.extend(lr),h.plugin(ye),h.extend(ao),h.extend(Ce),h.plugin(p),h.extend(Be),h.extend(co),h.extend(Ee),h.extend(Gn);var ho={addendum:"addenda",corpus:"corpora",criterion:"criteria",curriculum:"curricula",genus:"genera",memorandum:"memoranda",opus:"opera",ovum:"ova",phenomenon:"phenomena",referendum:"referenda",alga:"algae",alumna:"alumnae",antenna:"antennae",formula:"formulae",larva:"larvae",nebula:"nebulae",vertebra:"vertebrae",analysis:"analyses",axis:"axes",diagnosis:"diagnoses",parenthesis:"parentheses",prognosis:"prognoses",synopsis:"synopses",thesis:"theses",neurosis:"neuroses",appendix:"appendices",index:"indices",matrix:"matrices",ox:"oxen",sex:"sexes",alumnus:"alumni",bacillus:"bacilli",cactus:"cacti",fungus:"fungi",hippopotamus:"hippopotami",libretto:"libretti",modulus:"moduli",nucleus:"nuclei",octopus:"octopi",radius:"radii",stimulus:"stimuli",syllabus:"syllabi",cookie:"cookies",calorie:"calories",auntie:"aunties",movie:"movies",pie:"pies",rookie:"rookies",tie:"ties",zombie:"zombies",leaf:"leaves",loaf:"loaves",thief:"thieves",foot:"feet",goose:"geese",tooth:"teeth",beau:"beaux",chateau:"chateaux",tableau:"tableaux",bus:"buses",gas:"gases",circus:"circuses",crisis:"crises",virus:"viruses",database:"databases",excuse:"excuses",abuse:"abuses",avocado:"avocados",barracks:"barracks",child:"children",clothes:"clothes",echo:"echoes",embargo:"embargoes",epoch:"epochs",deer:"deer",halo:"halos",man:"men",woman:"women",mosquito:"mosquitoes",mouse:"mice",person:"people",quiz:"quizzes",rodeo:"rodeos",shoe:"shoes",sombrero:"sombreros",stomach:"stomachs",tornado:"tornados",tuxedo:"tuxedos",volcano:"volcanoes"},go={Comparative:"true¦bett1f0;arth0ew0in0;er",Superlative:"true¦earlier",PresentTense:"true¦bests,sounds",Condition:"true¦lest,unless",PastTense:"true¦began,came,d4had,kneel3l2m0sa4we1;ea0sg2;nt;eap0i0;ed;id",Participle:"true¦0:09;a06b01cZdXeat0fSgQhPoJprov0rHs7t6u4w1;ak0ithdra02o2r1;i02uY;k0v0;nd1pr04;ergoJoJ;ak0hHo3;e9h7lain,o6p5t4un3w1;o1um;rn;g,k;ol0reS;iQok0;ught,wn;ak0o1runk;ne,wn;en,wn;ewriNi1uJ;dd0s0;ut3ver1;do4se0t1;ak0h2;do2g1;roG;ne;ast0i7;iv0o1;ne,tt0;all0loBor1;bi3g2s1;ak0e0;iv0o9;dd0;ove,r1;a5eamt,iv0;hos0lu1;ng;e4i3lo2ui1;lt;wn;tt0;at0en,gun;r2w1;ak0ok0;is0;en",Gerund:"true¦accord0be0doin,go0result0stain0;ing",Expression:"true¦a0Yb0Uc0Sd0Oe0Mfarew0Lg0FhZjeez,lWmVnToOpLsJtIuFvEw7y0;a5e3i1u0;ck,p;k04p0;ee,pee;a0p,s;!h;!a,h,y;a5h2o1t0;af,f;rd up,w;atsoever,e1o0;a,ops;e,w;hoo,t;ery w06oi0L;gh,h0;! 0h,m;huh,oh;here nPsk,ut tut;h0ic;eesh,hh,it,oo;ff,h1l0ow,sst;ease,s,z;ew,ooey;h1i,mg,o0uch,w,y;h,o,ps;! 0h;hTmy go0wT;d,sh;a7evertheless,o0;!pe;eh,mm;ah,eh,m1ol0;!s;ao,fao;aCeBi9o2u0;h,mph,rra0zzC;h,y;l1o0;r6y9;la,y0;! 0;c1moCsmok0;es;ow;!p hip hoor0;ay;ck,e,llo,y;ha1i,lleluj0;ah;!ha;ah,ee4o1r0;eat scott,r;l1od0sh; grief,bye;ly;! whiz;ell;e0h,t cetera,ureka,ww,xcuse me;k,p;'oh,a0rat,uh;m0ng;mit,n0;!it;mon,o0;ngratulations,wabunga;a2oo1r0tw,ye;avo,r;!ya;h,m; 1h0ka,las,men,rgh,ye;!a,em,h,oy;la",Negative:"true¦n0;ever,o0;n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Reflexive:"true¦h4it5my5o1the0your2;ir1m1;ne3ur0;sel0;f,ves;er0im0;self",Plural:"true¦dick0gre0ones,records;ens","Unit|Noun":"true¦cEfDgChBinchAk9lb,m6newt5oz,p4qt,t1y0;ardEd;able1b0ea1sp;!l,sp;spo1;a,t,x;on9;!b,g,i1l,m,p0;h,s;!les;!b,elvin,g,m;!es;g,z;al,b;eet,oot,t;m,up0;!s",Value:"true¦a few",Imperative:"true¦bewa0come he0;re","Plural|Verb":"true¦leaves",Demonym:"true¦0:15;1:12;a0Vb0Oc0Dd0Ce08f07g04h02iYjVkTlPmLnIomHpEqatari,rCs7t5u4v3welAz2;am0Gimbabwe0;enezuel0ietnam0I;gAkrai1;aiwTex0hai,rinida0Ju2;ni0Prkmen;a5cotti4e3ingapoOlovak,oma0Spaniard,udRw2y0W;ede,iss;negal0Cr09;sh;mo0uT;o5us0Jw2;and0;a2eru0Fhilippi0Nortugu07uerto r0S;kist3lesti1na2raguay0;ma1;ani;ami00i2orweP;caragu0geri2;an,en;a3ex0Lo2;ngo0Drocc0;cedo1la2;gasy,y07;a4eb9i2;b2thua1;e0Cy0;o,t01;azakh,eny0o2uwaiI;re0;a2orda1;ma0Ap2;anO;celandic,nd4r2sraeli,ta01vo05;a2iB;ni0qi;i0oneU;aiAin2ondur0unO;di;amEe2hanai0reek,uatemal0;or2rm0;gi0;ilipino,ren8;cuadoVgyp4mira3ngli2sto1thiopi0urope0;shm0;ti;ti0;aPominUut3;a9h6o4roat3ub0ze2;ch;!i0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el6o4r3ul2;gaE;azi9it;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;genti2me1;ne;ba1ge2;ri0;ni0;gh0r2;ic0;an",Organization:"true¦0:4Q;a3Tb3Bc2Od2He2Df27g1Zh1Ti1Pj1Nk1Ll1Gm12n0Po0Mp0Cqu0Br02sTtHuCv9w3xiaomi,y1;amaha,m1Bou1w1B;gov,tu3C;a4e2iki1orld trade organizati33;leaRped0O;lls fargo,st1;fie2Hinghou2R;l1rner br3U;gree3Jl street journ2Im1E;an halOeriz2Xisa,o1;dafo2Yl1;kswagMvo;b4kip,n2ps,s1;a tod3Aps;es3Mi1;lev3Fted natio3C;er,s; mobi32aco beRd bOe9gi frida3Lh3im horto3Amz,o1witt3D;shi49y1;ota,s r 05;e 1in lizzy;b3carpen3Jdaily ma3Dguess w2holli0s1w2;mashing pumpki35uprem0;ho;ea1lack eyed pe3Xyr0Q;ch bo3Dtl0;l2n3Qs1xas instrumen1U;co,la m1F;efoni0Kus;a8cientology,e5ieme2Ymirnoff,np,o3pice gir6quare0Ata1ubaru;rbuc1to34;ks;ny,undgard1;en;a2x pisto1;ls;g1Wrs;few2Minsbur31lesfor03msu2E;adiohead,b8e4o1yana3C;man empi1Xyal 1;b1dutch she4;ank;a3d 1max,vl20;bu1c2Ahot chili peppe2Ylobst2N;ll;ders dige1Ll madrid;c,s;ant3Aizn2Q;a8bs,e5fiz2Ihilip4i3r1;emier 1udenti1D;leagTo2K;nk floyd,zza hut; morrBs;psi2tro1uge0E;br33chi0Tn33;!co;lant2Un1yp16; 2ason27da2P;ld navy,pec,range juli2xf1;am;us;aAb9e6fl,h5i4o1sa,vid3wa;k2tre dame,vart1;is;ia;ke,ntendo,ss0QvZ;l,s;c,st1Otflix,w1; 1sweek;kids on the block,york0D;a,c;nd22s2t1;ional aca2Po,we0U;a,c02d0S;aDcdonalCe9i6lb,o3tv,y1;spa1;ce;b1Tnsanto,ody blu0t1;ley cr1or0T;ue;c2t1;as,subisO;helin,rosoft;dica2rcedes benz,talli1;ca;id,re;ds;cs milk,tt19z24;a3e1g,ittle caesa1P; ore09novo,x1;is,mark,us; 1bour party;pres0Dz boy;atv,fc,kk,lm,m1od1O;art;iffy lu0Roy divisi0Jpmorgan1sa;! cha09;bm,hop,k3n1tv;g,te1;l,rpol;ea;a5ewlett pack1Vi3o1sbc,yundai;me dep1n1P;ot;tac1zbollah;hi;lliburt08sbro;eneral 6hq,ithub,l5mb,o2reen d0Ou1;cci,ns n ros0;ldman sachs,o1;dye1g0H;ar;axo smith kli04encoW;electr0Nm1;oto0Z;a5bi,c barcelo4da,edex,i2leetwood m03o1rito l0G;rd,xcY;at,fa,nancial1restoZ; tim0;na;cebook,nnie mae;b0Asa,u3xxon1; m1m1;ob0J;!rosceptics;aiml0De5isney,o4u1;nkin donu2po0Zran dur1;an;ts;j,w jon0;a,f lepp12ll,peche mode,r spieg02stiny's chi1;ld;aJbc,hFiDloudflaCnn,o3r1;aigsli5eedence clearwater reviv1ossra09;al;c7inba6l4m1o0Est09;ca2p1;aq;st;dplSg1;ate;se;a c1o chanQ;ola;re;a,sco1tigroup;! systems;ev2i1;ck fil a,na daily;r1y;on;d2pital o1rls jr;ne;bury,ill1;ac;aEbc,eBf9l5mw,ni,o1p,rexiteeU;ei3mbardiIston 1;glo1pizza;be;ng;o2ue c1;roV;ckbuster video,omingda1;le; g1g1;oodriL;cht2e ge0rkshire hathaw1;ay;el;cardi,idu,nana republ3s1xt5y5;f,kin robbi1;ns;ic;bYcTdidSerosmith,iRlKmEnheuser busDol,ppleAr6s4u3v2y1;er;is,on;di,todesk;hland o1sociated E;il;b3g2m1;co;os;ys; compu1be0;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 5catel2ta1;ir;! lu1;ce1;nt;jazeera,qae1;da;g,rbnb;as;/dc,a3er,tivision1;! blizz1;ard;demy of scienc0;es;ba",Possessive:"true¦its,my,our0thy;!s","Noun|Verb":"true¦0:9W;1:AA;2:96;3:A3;4:9R;5:A2;6:9K;7:8N;8:7L;9:A8;A:93;B:8D;C:8X;a9Ob8Qc7Id6Re6Gf5Sg5Hh55i4Xj4Uk4Rl4Em40n3Vo3Sp2Squ2Rr21s0Jt02u00vVwGyFzD;ip,oD;ne,om;awn,e6Fie68;aOeMhJiHoErD;ap,e9Oink2;nd0rDuC;kDry,sh5Hth;!shop;ck,nDpe,re,sh;!d,g;e86iD;p,sD;k,p0t2;aDed,lco8W;r,th0;it,lk,rEsDt4ve,x;h,te;!ehou1ra9;aGen5FiFoD;iDmAte,w;ce,d;be,ew,sA;cuum,l4B;pDr7;da5gra6Elo6A;aReQhrPiOoMrGuEwiDy5Z;n,st;nDrn;e,n7O;aGeFiEoDu6;t,ub2;bu5ck4Jgg0m,p;at,k,nd;ck,de,in,nsDp,v7J;f0i8R;ll,ne,p,r4Yss,t94uD;ch,r;ck,de,e,le,me,p,re;e5Wow,u6;ar,e,ll,mp0st,xt;g,lDng2rg7Ps5x;k,ly;a0Sc0Ne0Kh0Fi0Dk0Cl0Am08n06o05pXquaBtKuFwD;ea88iD;ng,pe,t4;bGit,m,ppErD;fa3ge,pri1v2U;lDo6S;e6Py;!je8;aMeLiKoHrEuDy2;dy,ff,mb2;a85eEiDo5Pugg2;ke,ng;am,ss,t4;ckEop,p,rD;e,m;ing,pi2;ck,nk,t4;er,m,p;ck,ff,ge,in,ke,lEmp,nd,p2rDte,y;!e,t;k,l;aJeIiHlGoFrDur,y;ay,e56inDu3;g,k2;ns8Bt;a5Qit;ll,n,r87te;ed,ll;m,n,rk;b,uC;aDee1Tow;ke,p;a5Je4FiDo53;le,rk;eep,iDou4;ce,p,t;ateboa7Ii;de,gnDl2Vnk,p,ze;!al;aGeFiEoDuff2;ck,p,re,w;ft,p,v0;d,i3Ylt0;ck,de,pe,re,ve;aEed,nDrv1It;se,t2N;l,r4t;aGhedu2oBrD;aEeDibb2o3Z;en,w;pe,t4;le,n,r2M;cDfegua72il,mp2;k,rifi3;aZeHhy6LiGoEuD;b,in,le,n,s5X;a6ck,ll,oDpe,u5;f,t;de,ng,ot,p,s1W;aTcSdo,el,fQgPje8lOmMnLo17pJque6sFturn,vDwa6V;eDi27;al,r1;er74oFpe8tEuD;lt,me;!a55;l71rt;air,eaDly,o53;l,t;dezvo2Zt;aDedy;ke,rk;ea1i4G;a6Iist0r5N;act6Yer1Vo71uD;nd,se;a38o6F;ch,s6G;c1Dge,iEke,lly,nDp1Wt1W;ge,k,t;n,se;es6Biv0;a04e00hYiXlToNrEsy4uD;mp,n4rcha1sh;aKeIiHoDu4O;be,ceFdu3fi2grDje8mi1p,te6;amDe6W;!me;ed,ss;ce,de,nt;sDy;er6Cs;cti3i1;iHlFoEp,re,sDuCw0;e,i5Yt;l,p;iDl;ce,sh;nt,s5V;aEce,e32uD;g,mp,n7;ce,nDy;!t;ck,le,n17pe,tNvot;a1oD;ne,tograph;ak,eFnErDt;fu55mA;!c32;!l,r;ckJiInHrFsEtDu1y;ch,e9;s,te;k,tD;!y;!ic;nt,r,se;!a7;bje8ff0il,oErDutli3Qver4B;bAd0ie9;ze;a4ReFoDur1;d,tD;e,i3;ed,gle8tD;!work;aMeKiIoEuD;rd0;ck,d3Rld,nEp,uDve;nt,th;it5EkD;ey;lk,n4Brr5CsDx;s,ta2B;asuBn4UrDss;ge,it;il,nFp,rk3WsEtD;ch,t0;h,k,t0;da5n0oeuvB;aLeJiHoEuD;mp,st;aEbby,ck,g,oDve;k,t;d,n;cDe,ft,mAnIst;en1k;aDc0Pe4vK;ch,d,k,p,se;bFcEnd,p,t4uD;gh,n4;e,k;el,o2U;eEiDno4E;ck,d,ll,ss;el,y;aEo1OuD;i3mp;m,zz;mpJnEr46ssD;ue;c1Rdex,fluGha2k,se2HteDvoi3;nt,rD;e6fa3viD;ew;en3;a8le2A;aJeHiGoEuD;g,nt;l3Ano2Dok,pDr1u1;!e;ghli1Fke,nt,re,t;aDd7lp;d,t;ck,mGndFrEsh,tDu9;ch,e;bo3Xm,ne4Eve6;!le;!m0;aMear,ift,lKossJrFuD;arDe4Alp,n;antee,d;aFiEoDumb2;uCwth;ll,nd,p;de,sp;ip;aBoDue;ss,w;g,in,me,ng,s,te,ze;aZeWiRlNoJrFuD;ck,el,nDss,zz;c38d;aEoDy;st,wn;cDgme,me,nchi1;tuB;cFg,il,ld,rD;ce,e29mDwa31;!at;us;aFe0Vip,oDy;at,ck,od,wD;!er;g,ke,me,re,sh,vo1E;eGgFlEnDre,sh,t,x;an3i0Q;e,m,t0;ht,uB;ld;aEeDn3;d,l;r,tuB;ce,il,ll,rm,vo2W;cho,d7ffe8nMsKxFyeD;!baD;ll;cGerci1hFpDtra8;eriDo0W;en3me9;au6ibA;el,han7u1;caDtima5;pe;count0d,vy;a01eSiMoJrEuDye;b,el,mp,pli2X;aGeFiEoD;ne,p;ft,ll,nk,p,ve;am,ss;ft,g,in;cEd7ubt,wnloD;ad;k,u0E;ge6p,sFt4vD;e,iDor3;de;char7gui1h,liEpD;at4lay,u5;ke;al,bKcJfeIlGmaCposAsEtaD;il;e07iD;gn,re;ay,ega5iD;ght;at,ct;li04rea1;a5ut;b,ma7n3rDte;e,t;a0Eent0Dh06irc2l03oKrFuD;be,e,rDt;b,e,l,ve;aGeFoEuDy;sh;p,ss,wd;dAep;ck,ft,sh;at,de,in,lTmMnFordina5py,re,st,uDv0;gh,nDp2rt;s01t;ceHdu8fli8glomeIsFtDveN;a8rD;a6ol;e9tru8;ct;ntDrn;ra5;bHfoGmFpD;leDouCromi1;me9;aCe9it,u5;rt;at,iD;ne;lap1oD;r,ur;aEiDoud,ub;ck,p;im,w;aEeDip;at,ck,er;iGllen7nErD;ge,m,t;ge,nD;el;n,r;er,re;ke,ll,mp,noe,pGrXsFtEuDve;se,ti0I;alog,ch;h,t;!tuB;re;a03eZiXlToPrHuEyD;pa11;bb2ck2dgEff0mp,rDst,zz;den,n;et;anJeHiFoadEuD;i1sh;ca6;be,d7;ge;aDed;ch,k;ch,d;aFg,mb,nEoDrd0tt2x,ycott;k,st,t;d,e;rd,st;aFeCiDoYur;nk,tz;nd;me;as,d,ke,nd,opsy,tD;!ch,e;aFef,lt,nDt;d,efA;it;r,t;ck,il,lan3nIrFsEtt2;le;e,h;!gDk;aDe;in;!d,g,k;bu1c05dZge,iYlVnTppQrLsIttGucEwaD;rd;tiD;on;aDempt;ck;k,sD;i6ocia5;st;chFmD;!oD;ur;!iD;ve;eEroa4;ch;al;chDg0sw0;or;aEt0;er;rm;d,m,r;dreHvD;an3oD;ca5;te;ce;ss;cDe,he,t;eFoD;rd,u9;nt;nt,ss;se",Actor:"true¦0:7B;1:7G;2:6A;3:7F;4:7O;5:7K;a6Nb62c4Ud4Be41f3Sg3Bh30i2Uj2Qkin2Pl2Km26n1Zo1Sp0Vqu0Tr0JsQtJuHvEw8yo6;gi,ut6;h,ub0;aAe9i8o7r6;estl0it0;m2rk0;fe,nn0t2Bza2H;atherm2ld0;ge earn0it0nder0rri1;eter7i6oyF;ll5Qp,s3Z;an,ina2U;n6s0;c6Uder03;aoisea23e9herapi5iktok0o8r6ut1yco6S;a6endseLo43;d0mp,nscri0Bvel0;ddl0u1G;a0Qchn7en6na4st0;ag0;i3Oo0D;aiXcUeRhPiMki0mu26oJpGquaFtBu7wee6;p0theart;lt2per7r6;f0ge6Iviv1;h6inten0Ist5Ivis1;ero,um2;a8ep7r6;ang0eam0;bro2Nc2Ofa2Nmo2Nsi20;ff0tesm2;tt0;ec7ir2Do6;kesp59u0M;ia5Jt3;l7me6An,rcere6ul;r,ss;di0oi5;n7s6;sy,t0;g0n0;am2ephe1Iow6;girl,m2r2Q;cretInior cit3Fr6;gea4v6;a4it1;hol4Xi7reen6ulpt1;wr2C;e01on;l1nt;aEe9o8u6;l0nn6;er up,ingE;g40le mod3Zof0;a4Zc8fug2Ppo32searQv6;ere4Uolution6;ary;e6luYru22;ptio3T;bbi,dic5Vpp0;arter6e2Z;back;aYeWhSiRlOoKr8sycho7u6;nk,p31;logi5;aGeDiBo6;d9fess1g7ph47s6;pe2Ktitu51;en6ramm0;it1y;igy,uc0;est4Nme mini0Unce6s3E;!ss;a7si6;de4;ch0;ctiti39nk0P;dca0Oet,li6pula50rnst42;c2Itic6;al scie6i2;nti5;a6umb0;nn0y6;er,ma4Lwright;lgrim,one0;a8iloso7otogra7ra6ysi1V;se;ph0;ntom,rmaci5;r6ssi1T;form0s4O;i3El,nel3Yr8st1tr6wn;i6on;arWot;ent4Wi42tn0;ccupa4ffBp8r7ut6;ca5l0B;ac4Iganiz0ig2Fph2;er3t6;i1Jomet6;ri5;ic0spring;aBe9ie4Xo7u6;n,rser3J;b6mad,vi4V;le2Vo4D;i6mesis,phew;ce,ghb1;nny,rr3t1X;aEeDiAo7u6yst1Y;m8si16;der3gul,m7n6th0;arDk;!my;ni7s6;f02s0Jt0;on,st0;chan1Qnt1rcha4;gi9k0n8rtyr,t6y1;e,riar6;ch;ag0iac;ci2stra3I;a7e2Aieutena4o6;rd,s0v0;bor0d7ndlo6ss,urea3Fwy0ym2;rd;!y;!s28;e8o7u6;ggl0;gg0urna2U;st0;c3Hdol,llu3Ummigra4n6; l9c1Qfa4habi42nov3s7ve6;nt1stig3;pe0Nt6;a1Fig3ru0M;aw;airFeBistoAo8u6ygie1K;man6sba2H;!ita8;bo,st6usekN;age,e3P;ri2;ir,r6;m7o6;!ine;it;dress0sty2C;aLeIhostGirl26ladi3oCrand7u6;e5ru;c9daug0Jfa8m7pa6s2Y;!re4;a,o6;th0;hi1B;al7d6lf0;!de3A;ie,k6te26;eep0;!wr6;it0;isha,n6;i6tl04;us;mbl0rden0;aDella,iAo7r6;eela2Nie1P;e,re6ster pare4;be1Hm2r6st0;unn0;an2ZgZlmm17nanci0r6tt0;e6st la2H; marsh2OfigXm2;rm0th0;conoEdDlectriCm8n7x6;amin0cellency,i2A;emy,trepreneur,vironmenta1J;c8p6;er1loye6;e,r;ee;ci2;it1;mi5;aKeBi8ork,ri7u6we02;de,tche2H;ft0v0;ct3eti7plom2Hre6va;ct1;ci2ti2;aDcor3fencCi0InAput9s7tectLvel6;op0;ce1Ge6ign0;rt0;ee,y;iz6;en;em2;c1Ml0;d8nc0redev7ug6;ht0;il;!dy;a06e04fo,hXitizenWlToBr9u6;r3stomer6;! representat6;ive;e3it6;ic;lJmGnAord9rpor1Nu7w6;boy,ork0;n6ri0;ciTte1Q;in3;fidantAgressSs9t6;e0Kr6;ibut1o6;ll0;tab13ul1O;!e;edi2m6pos0rade;a0EeQissi6;on0;leag8on7um6;ni5;el;ue;e6own;an0r6;ic,k;!s;a9e7i6um;ld;erle6f;ad0;ir7nce6plFract0;ll1;m2wI;lebri6o;ty;dBptAr6shi0;e7pe6;nt0;r,t6;ak0;ain;et;aMeLiJlogg0oErBu6;dd0Fild0rgl9siness6;m2p7w6;om2;ers05;ar;i7o6;!k0th0;cklay0de,gadi0;hemi2oge8y6;!frie6;nd;ym2;an;cyc6sR;li5;atbox0ings;by,nk0r6;b0on7te6;nd0;!e07;c04dWge4nQpLrHsFtAu7yatull6;ah;nt7t6;h1oG;!ie;h8t6;e6orney;nda4;ie5le6;te;sis00tron6;aut,om0;chbis8isto7tis6;an,t;crU;hop;ost9p6;ari6rentiS;ti6;on;le;a9cest1im3nou8y6;bo6;dy;nc0;ly5rc6;hi5;mi8v6;entur0is1;er;ni7r6;al;str3;at1;or;counBquaintanArob9t6;ivi5or,re6;ss;st;at;ce;ta4;nt","Adj|Noun":"true¦0:16;a1Db17c0Ud0Re0Mf0Dg0Ah08i06ju05l02mWnUoSpNrIsBt7u4v1watershed;a1ision0Z;gabo4nilla,ria1;b0Vnt;ndergr1pstairs;adua14ou1;nd;a3e1oken,ri0;en,r1;min0rori13;boo,n;age,e5ilv0Flack,o3quat,ta2u1well;bordina0Xper5;b0Lndard;ciali0Yl1vereign;e,ve16;cret,n1ri0;ior;a4e2ou1ubbiL;nd,tiY;ar,bBl0Wnt0p1side11;resent0Vublican;ci0Qsh;a4eriodic0last0Zotenti0r1;emi2incip0o1;!fession0;er,um;rall4st,tie0U;ff1pposi0Hv0;ens0Oi0C;agg01ov1uts;el;a5e3iniatJo1;bi01der07r1;al,t0;di1tr0N;an,um;le,riG;attOi2u1;sh;ber0ght,qC;stice,veniT;de0mpressioYn1;cumbe0Edividu0no0Dsta0Eterim;alf,o1umdrum;bby,melF;en2old,ra1;ph0Bve;er0ious;a7e5i4l3u1;git03t1;ure;uid;ne;llow,m1;aFiL;ir,t,vo1;riOuriO;l3p00x1;c1ecutUpeV;ess;d1iK;er;ar2e1;mographUrivO;k,l2;hiGlassSo2rude,unn1;ing;m5n1operK;creCstitueOte2vertab1;le;mpor1nt;ary;ic,m2p1;anion,lex;er2u1;ni8;ci0;al;e5lank,o4r1;i2u1;te;ef;ttom,urgeois;st;cadem9d6l2ntarct9r1;ab,ct8;e3tern1;at1;ive;rt;oles1ult;ce1;nt;ic","Adj|Past":"true¦0:4Q;1:4C;2:4H;3:4E;a44b3Tc36d2Je29f20g1Wh1Si1Jj1Gkno1Fl1Am15n12o0Xp0Mqu0Kr08sLtEuAv9w4yellow0;a7ea6o4rinkl0;r4u3Y;n,ri0;k31th3;rp0sh0tZ;ari0e1O;n5p4s0;d1li1Rset;cov3derstood,i4;fi0t0;a8e3Rhr7i6ouTr4urn0wi4C;a4imm0ou2G;ck0in0pp0;ed,r0;eat2Qi37;m0nn0r4;get0ni2T;aOcKeIhGimFm0Hoak0pDt7u4;bsid3Ogge44s4;pe4ta2Y;ct0nd0;a8e7i2Eok0r5u4;ff0mp0nn0;ength2Hip4;ed,p0;am0reotyp0;in0t0;eci4ik0oH;al3Efi0;pRul1;a4ock0ut;d0r0;a4c1Jle2t31;l0s3Ut0;a6or5r4;at4e25;ch0;r0tt3;t4ut0;is2Mur1;aEe5o4;tt0;cAdJf2Bg9je2l8m0Knew0p7qu6s4;eTpe2t4;or0ri2;e3Dir0;e1lac0;at0e2Q;i0Rul1;eiv0o4ycl0;mme2Lrd0v3;in0lli0ti2A;a4ot0;li28;aCer30iBlAo9r5u4;mp0zzl0;e6i2Oo4;ce2Fd4lo1Anou30pos0te2v0;uc0;fe1CocCp0Iss0;i2Kli1L;ann0e2CuS;ck0erc0ss0;ck0i2Hr4st0;allLk0;bse7c6pp13rgan2Dver4;lo4whelm0;ok0;cupi0;rv0;aJe5o4;t0uri1A;ed0gle2;a6e5ix0o4ut0ys1N;di1Nt15u26;as0Clt0;n4rk0;ag0ufact0A;e6i5o4;ad0ck0st,v0;cens0m04st0;ft,v4;el0;tt0wn;a5o15u4;dg0s1B;gg0;llumSmpAn4sol1;br0cre1Ldebt0f8jZspir0t5v4;it0olv0;e4ox0Y;gr1n4re23;d0si15;e2l1o1Wuri1;li0o01r4;ov0;a6e1o4um03;ok0r4;ri0Z;mm3rm0;i6r5u4;a1Bid0;a0Ui0Rown;ft0;aAe9i8l6oc0Ir4;a4i0oz0Y;ctHg19m0;avo0Ju4;st3;ni08tt0x0;ar0;d0il0sc4;in1;dCl1mBn9quipp0s8x4;agger1c6p4te0T;a0Se4os0;ct0rie1D;it0;cap0tabliZ;cha0XgFha1As4;ur0;a0Zbarra0N;i0Buc1;aMeDi5r4;a01i0;gni08miniSre2s4;a9c6grun0Ft4;o4re0Hu17;rt0;iplWou4;nt0r4;ag0;bl0;cBdRf9l8p7ra6t5v4;elop0ot0;ail0ermQ;ng0;re07;ay0ight0;e4in0o0M;rr0;ay0enTor1;m5t0z4;ed,zl0;ag0p4;en0;aPeLhIlHo9r6u4;lt4r0stom03;iv1;a5owd0u4;sh0;ck0mp0;d0loAm7n4ok0v3;centr1f5s4troC;id3olid1;us0;b5pl4;ic1;in0;r0ur0;assi9os0utt3;ar5i4;ll0;g0m0;lebr1n6r4;ti4;fi0;tralJ;g0lcul1;aDewild3iCl9o7r5urn4;ed,t;ok4uis0;en;il0r0t4und;tl0;e5i4;nd0;ss0;as0;ffl0k0laMs0tt3;bPcNdKfIg0lFmaz0nDppBrm0ss9u5wa4;rd0;g5thor4;iz0;me4;nt0;o6u4;m0r0;li0re4;ci1;im1ticip1;at0;a5leg0t3;er0;rm0;fe2;ct0;ju5o7va4;nc0;st0;ce4knowledg0;pt0;and5so4;rb0;on0;ed",Singular:"true¦0:5J;1:5H;2:4W;3:4S;4:52;5:57;6:5L;7:56;8:5B;a52b4Lc3Nd35e2Xf2Og2Jh28in24j23k22l1Um1Ln1Ho1Bp0Rqu0Qr0FsZtMuHvCw9x r58yo yo;a9ha3Po3Q;f3i4Rt0Gy9;! arou39;arCeAideo ga2Qo9;cabu4Jl5C;gOr9t;di4Zt1Y;iety,ni4P;nBp30rAs 9;do43s5E;bani1in0;coordinat3Ader9;estima1to24we41; rex,aKeJhHiFoErBuAv9;! show;m2On2rntLto1D;agedy,ib9o4E;e,u9;n0ta46;ni1p2rq3L;c,er,m9;etF;ing9ree26;!y;am,mp3F;ct2le6x return;aNcMeKhor4QiJkHoGpin off,tDuBy9;ll9ner7st4T;ab2X;b9i1n28per bowl,rro1X;st3Ltot0;atAipe2Go1Lrate7udent9;! lo0I;i39u1;ft ser4Lmeo1I;elet5i9;ll,r3V;b38gn2Tte;ab2Jc9min3B;t,urity gua2N;e6ho2Y;bbatic0la3Jndwi0Qpi5;av5eDhetor2iAo9;de6om,w;tAv9;erb2C;e,u0;bDcBf9publ2r10spi1;er9orm3;e6r0;i9ord label;p2Ht0;a1u46;estion mark,ot2F;aPeMhoLiIlGoErAu9yram1F;ddi3HpErpo1Js3J;eBo9;bl3Zs9;pe3Jta1;dic1Rmi1Fp1Qroga8ss relea1F;p9rt0;py;a9ebisci1;q2Dte;cn2eAg9;!gy;!r;ne call,tocoK;anut,dAr9t0yo1;cen3Jsp3K;al,est0;nop4rAt9;e,hog5;adi11i2V;atme0bj3FcBpia1rde0thers,utspok5ve9wn3;n,r9;ti0Pview;cuAe9;an;pi3;arBitAot9umb3;a2Fhi2R;e,ra1;cot2ra8;aFeCiAo9ur0;nopo4p18rni2Nsq1Rti36uld;c,li11n0As9tt5;chief,si34;dAnu,t9;al,i3;al,ic;gna1mm0nd15rsupi0te9yf4;ri0;aDegCiBu9;ddi1n9;ch;me,p09; Be0M;bor14y9; 9er;up;eyno1itt5;el4ourn0;cBdices,itia8ni25sAtel0Lvert9;eb1J;e28titu1;en8i2T;aIeEighDoAu9;man right,s22;me9rmoFsp1Ftb0K;! r9;un; scho0YriY;a9i1N;d9v5; start,pho9;ne;ndful,sh brown,v5ze;aBelat0Ilaci3r9ul4yp1S;an9enadi3id;a1Cd slam,ny;df4r9;l2ni1I;aGeti1HiFlu1oCrAun9;er0;ee market,i9onti3;ga1;l4ur9;so9;me;ePref4;br2mi4;conoFffi7gg,lecto0Rmbas1EnCpidem2s1Zth2venBxAyel9;id;ampZempl0Nte6;i19t;er7terp9;ri9;se;my;eLiEoBr9ump tru0U;agonf4i9;er,ve thru;cAg7i4or,ssi3wn9;side;to0EumenE;aEgniDnn3sAvide9;nd;conte6incen8p9tri11;osi9;ti0C;ta0H;le0X;athBcAf9ni0terre6;ault 05err0;al,im0;!b9;ed;aWeThMiLlJoDr9;edit caBuc9;ib9;le;rd;efficDke,lCmmuniqLnsApi3rr0t0Xus9yo1;in;erv9uI;ato02;ic,lQ;ie6;er7i9oth;e6n2;ty,vil wM;aDeqCick5ocoBr9;istmas car9ysanthemum;ol;la1;ue;ndeli3racteri9;st2;iAllEr9;e0tifica1;liZ;hi3nFpErCt9ucus;erpi9hedr0;ll9;ar;!bohyd9ri3;ra1;it0;aAe,nib0t9;on;l,ry;aMeLiop2leJoHrDu9;nny,r9tterf4;g9i0;la9;ry;eakAi9;ck;fa9throB;st;dy,ro9wl;ugh;mi9;sh;an,l4;nkiArri3;er;ng;cSdMlInFppeti1rDsBtt2utop9;sy;ic;ce6pe9;ct;r9sen0;ay;ecAoma4tiA;ly;do1;i5l9;er7y;gy;en; hominDjAvan9;tage;ec8;ti9;ve;em;cCeAqui9;tt0;ta1;te;iAru0;al;de6;nt","Person|Noun":"true¦a0Eb07c03dWeUfQgOhLjHkiGlFmCnBolive,p7r4s3trini06v1wa0;ng,rd,tts;an,enus,iol0;a,et;ky,onPumm09;ay,e1o0uby;bin,d,se;ed,x;a2e1o0;l,tt04;aLnJ;dYge,tR;at,orm;a0eloW;t0x,ya;!s;a9eo,iH;ng,tP;a2e1o0;lGy;an,w3;de,smi4y;a0erb,iOolBuntR;ll,z0;el;ail,e0iLuy;ne;a1ern,i0lo;elds,nn;ith,n0;ny;a0dEmir,ula,ve;rl;a4e3i1j,ol0;ly;ck,x0;ie;an,ja;i0wn;sy;am,h0liff,rystal;a0in,ristian;mbers,ri0;ty;a4e3i2o,r0ud;an0ook;dy;ll;nedict,rg;k0nks;er;l0rt;fredo,ma","Actor|Verb":"true¦aCb8c5doctor,engineAfool,g3host,judge,m2nerd,p1recruit,scout,ushAvolunteAwi0;mp,tneA;arent,ilot;an,ime;eek,oof,r0uide;adu8oom;ha1o0;ach,nscript,ok;mpion,uffeur;o2u0;lly,tch0;er;ss;ddi1ffili0rchite1;ate;ct",MaleName:"true¦0:H6;1:FZ;2:DS;3:GQ;4:CZ;5:FV;6:GM;7:FP;8:GW;9:ET;A:C2;B:GD;aF8bE1cCQdBMeASfA1g8Yh88i7Uj6Sk6Bl5Mm48n3So3Ip33qu31r26s1Et0Ru0Ov0CwTxSyHzC;aCor0;cChC1karia,nAT;!hDkC;!aF6;!ar7CeF5;aJevgenBSoEuC;en,rFVsCu3FvEF;if,uf;nDs6OusC;ouf,s6N;aCg;s,tC;an,h0;hli,nCrosE1ss09;is,nC;!iBU;avi2ho5;aPeNiDoCyaEL;jcieBJlfgang,odrFutR;lFnC;f8TsC;lCt1;ow;bGey,frEhe4QlC;aE5iCy;am,e,s;ed8iC;d,ed;eAur;i,ndeD2rn2sC;!l9t1;lDyC;l1ne;lDtC;!er;aCHy;aKernDAiFladDoC;jteB0lodymyr;!iC;mFQsDB;cFha0ktBZnceDrgCOvC;a0ek;!nC;t,zo;!e4StBV;lCnC7sily;!entC;in9J;ghE2lCm70nax,ri,sm0;riCyss87;ch,k;aWeRhNiLoGrEuDyC;!l2roEDs1;n6r6E;avD0eCist0oy,um0;ntCRvBKy;bFdAWmCny;!asDmCoharu;aFFie,y;!z;iA6y;mCt4;!my,othy;adEeoDia0SomC;!as;!dor91;!de4;dFrC;enBKrC;anBJeCy;ll,nBI;!dy;dgh,ha,iCnn2req,tsu5V;cDAka;aYcotWeThPiMlobod0oKpenc2tEurDvenAEyCzym1;ed,lvest2;aj,e9V;anFeDuC;!aA;fan17phEQvCwaA;e77ie;!islaCl9;v,w;lom1rBuC;leymaDHta;dDgmu9UlCm1yabonga;as,v8B;!dhart8Yn9;aEeClo75;lCrm0;d1t1;h9Jne,qu1Jun,wn,yne;aDbastiEDk2Yl5Mpp,rgCth,ymoCU;e1Dio;m4n;!tC;!ie,y;eDPlFmEnCq67tosCMul;dCj2UtiA5;e01ro;!iATkeB6mC4u5;!ik,vato9K;aZeUheC8iRoGuDyC;an,ou;b99dDf4peAssC;!elEG;ol00y;an,bLc7MdJel,geIh0lHmGnEry,sDyC;!ce;ar7Ocoe,s;!aCnBU;ld,n;an,eo;a7Ef;l7Jr;e3Eg2n9olfo,riC;go;bBNeDH;cCl9;ar87c86h54kCo;!ey,ie,y;cFeA3gDid,ubByCza;an8Ln06;g85iC;naC6s;ep;ch8Kfa5hHin2je8HlGmFndEoHpha5sDul,wi36yC;an,mo8O;h9Im4;alDSol3O;iD0on;f,ph;ul;e9CinC;cy,t1;aOeLhilJiFrCyoG;aDeC;m,st1;ka85v2O;eDoC;tr;r8GtC;er,ro;!ipCl6H;!p6U;dCLrcy,tC;ar,e9JrC;!o7;b9Udra8So9UscAHtri62ulCv8I;!ie,o7;ctav6Ji2lImHndrBRrGsDtCum6wB;is,to;aDc6k6m0vCwaBE;al79;ma;i,vR;ar,er;aDeksandr,ivC;er,i2;f,v;aNeLguyBiFoCu3O;aDel,j4l0ma0rC;beAm0;h,m;cFels,g5i9EkDlC;es,s;!au,h96l78olaC;!i,y;hCkCol76;ol75;al,d,il,ls1vC;ilAF;hom,tC;e,hC;anCy;!a5i5;aYeViLoGuDyC;l4Nr1;hamDr84staC;fa,p6E;ed,mG;di10e,hamEis4JntDritz,sCussa;es,he;e,y;ad,ed,mC;ad,ed;cGgu5hai,kFlEnDtchC;!e8O;a9Pik;house,o7t1;ae73eC3ha8Iolaj;ah,hDkC;!ey,y;aDeC;al,l;el,l;hDlv3rC;le,ri8Ev4T;di,met;ay0c00gn4hWjd,ks2NlTmadZnSrKsXtDuric7VxC;imilBKwe8B;eHhEi69tCus,y69;!eo,hCia7;ew,i67;eDiC;as,eu,s;us,w;j,o;cHiGkFlEqu8Qsha83tCv3;iCy;!m,n;in,on;el,o7us;a6Yo7us;!elCin,o7us;!l8o;frAEi5Zny,u5;achDcoCik;lm;ai,y;amDdi,e5VmC;oud;adCm6W;ou;aulCi9P;ay;aWeOiMloyd,oJuDyC;le,nd1;cFdEiDkCth2uk;a7e;gi,s,z;ov7Cv6Hw6H;!as,iC;a6Een;g0nn52renDuCvA4we7D;!iS;!zo;am,n4oC;n5r;a9Yevi,la5KnHoFst2thaEvC;eCi;nte;bo;nCpo8V;!a82el,id;!nC;aAy;mEnd1rDsz73urenCwr6K;ce,t;ry,s;ar,beAont;aOeIhalHiFla4onr63rDu5SylC;e,s;istCzysztof;i0oph2;er0ngsl9p,rC;ilA9k,ollos;ed,id;en0iGnDrmCv4Z;it;!dDnCt1;e2Ny;ri4Z;r,th;cp2j4mEna8BrDsp6them,uC;ri;im,l;al,il;a03eXiVoFuC;an,lCst3;en,iC;an,en,o,us;aQeOhKkub4AnIrGsDzC;ef;eDhCi9Wue;!ua;!f,ph;dCge;i,on;!aCny;h,s,th6J;anDnC;!ath6Hie,n72;!nC;!es;!l,sCy;ph;o,qu3;an,mC;!i,m6V;d,ffFns,rCs4;a7JemDmai7QoCry;me,ni1H;i9Dy;!e73rC;ey,y;cKdBkImHrEsDvi2yC;dBs1;on,p2;ed,oDrCv67;e6Qod;d,s61;al,es5Wis1;a,e,oCub;b,v;ob,qu13;aTbNchiMgLke53lija,nuKonut,rIsEtCv0;ai,suC;ki;aDha0i8XmaCsac;el,il;ac,iaC;h,s;a,vinCw3;!g;k,nngu6X;nac1Xor;ka;ai,rahC;im;aReLoIuCyd6;beAgGmFsC;eyDsC;a3e3;in,n;ber5W;h,o;m2raDsse3wC;a5Pie;c49t1K;a0Qct3XiGnDrC;beAman08;dr7VrC;iCy2N;!k,q1R;n0Tt3S;bKlJmza,nIo,rEsDyC;a5KdB;an,s0;lEo67r2IuCv9;hi5Hki,tC;a,o;an,ey;k,s;!im;ib;a08e00iUlenToQrMuCyorgy;iHnFsC;!taC;f,vC;!e,o;n6tC;er,h2;do,lC;herDlC;auCerQ;me;aEegCov2;!g,orC;!io,y;dy,h7C;dfr9nza3XrDttfC;ri6C;an,d47;!n;acoGlEno,oCuseppe;rgiCvan6O;!o,s;be6Ies,lC;es;mo;oFrC;aDha4HrCt;it,y;ld,rd8;ffErgC;!e7iCy;!os;!r9;bElBrCv3;eCla1Nr4Hth,y;th;e,rC;e3YielC;!i4;aXeSiQlOorrest,rCyod2E;aHedFiC;edDtC;s,z;ri18;!d42eri11riC;ck,k;nCs2;cEkC;ie,lC;in,yn;esLisC;!co,z3M;etch2oC;ri0yd;d5lConn;ip;deriFliEng,rC;dinaCg4nan0B;nd8;pe,x;co;bCdi,hd;iEriC;ce,zC;io;an,en,o;benez2dZfrYit0lTmMnJo3rFsteb0th0ugenEvCymBzra;an,eCge4D;ns,re3K;!e;gi,iDnCrol,v3w3;est8ie,st;cCk;!h,k;o0DriCzo;co,qC;ue;aHerGiDmC;aGe3A;lCrh0;!iC;a10o,s;s1y;nu5;beAd1iEliDm2t1viCwood;n,s;ot28s;!as,j5Hot,sC;ha;a3en;!dGg6mFoDua2QwC;a2Pin;arC;do;oZuZ;ie;a04eTiOmitrNoFrag0uEwDylC;an,l0;ay3Hig4D;a3Gdl9nc0st3;minFnDri0ugCvydGy2S;!lF;!a36nCov0;e1Eie,y;go,iDykC;as;cCk;!k;i,y;armuFetDll1mitri7neCon,rk;sh;er,m6riC;ch;id;andLepak,j0lbeAmetri4nIon,rGsEvDwCxt2;ay30ey;en,in;hawn,moC;nd;ek,riC;ck;is,nC;is,y;rt;re;an,le,mKnIrEvC;e,iC;!d;en,iEne0PrCyl;eCin,yl;l45n;n,o,us;!iCny;el,lo;iCon;an,en,on;a0Fe0Ch03iar0lRoJrFuDyrC;il,us;rtC;!is;aEistC;iaCob12;no;ig;dy,lInErC;ey,neliCy;s,us;nEor,rDstaC;nt3;ad;or;by,e,in,l3t1;aHeEiCyde;fCnt,ve;fo0Xt1;menDt4;us;s,t;rFuDyC;!t1;dCs;e,io;enC;ce;aHeGrisC;!toC;phCs;!eC;!r;st2t;d,rCs;b5leC;s,y;cDdrCs6;ic;il;lHmFrC;ey,lDroCy;ll;!o7t1;er1iC;lo;!eb,v3;a09eZiVjorn,laUoSrEuCyr1;ddy,rtKst2;er;aKeFiEuDyC;an,ce,on;ce,no;an,ce;nDtC;!t;dDtC;!on;an,on;dFnC;dDisC;lav;en,on;!foOl9y;bby,gd0rCyd;is;i0Lke;bElDshC;al;al,lL;ek;nIrCshoi;at,nEtC;!raC;m,nd;aDhaCie;rd;rd8;!iDjam3nCs1;ie,y;to;kaMlazs,nHrC;n9rDtC;!holomew;eCy;tt;ey;dCeD;ar,iC;le;ar1Nb1Dd16fon15gust3hm12i0Zja0Yl0Bm07nTputsiSrGsaFugustEveDyCziz;a0kh0;ry;o,us;hi;aMchiKiJjun,mHnEon,tCy0;em,hCie,ur8;ur;aDoC;!ld;ud,v;aCin;an,nd8;!el,ki;baCe;ld;ta;aq;aMdHgel8tCw6;hoFoC;iDnC;!i8y;ne;ny;er7rCy;eDzC;ej;!as,i,j,s,w;!s;s,tolC;iCy;!y;ar,iEmaCos;nu5r;el;ne,r,t;aVbSdBeJfHiGl01onFphonsEt1vC;aPin;on;e,o;so,zo;!sR;!onZrC;ed;c,jaHksFssaHxC;!andC;er,rC;e,os,u;andCei;ar,er,r;ndC;ro;en;eDrecC;ht;rt8;dd3in,n,sC;taC;ir;ni;dDm6;ar;an,en;ad,eC;d,t;in;so;aGi,olErDvC;ik;ian8;f8ph;!o;mCn;!a;dGeFraDuC;!bakr,lfazl;hCm;am;!l;allFel,oulaye,ulC;!lDrahm0;an;ah,o;ah;av,on",Uncountable:"true¦0:2E;1:2L;2:33;a2Ub2Lc29d22e1Rf1Ng1Eh16i11j0Yk0Wl0Rm0Hn0Do0Cp03rZsLt9uran2Jv7w3you gu0E;a5his17i4oo3;d,l;ldlife,ne;rm8t1;apor,ernacul29i3;neg28ol1Otae;eDhBiAo8r4un3yranny;a,gst1B;aff2Oea1Ko4ue nor3;th;o08u3;bleshoot2Ose1Tt;night,othpas1Vwn3;foEsfoE;me off,n;er3und1;e,mod2S;a,nnis;aDcCeBhAi9ki8o7p6t4u3weepstak0;g1Unshi2Hshi;ati08e3;am,el;ace2Keci0;ap,cc1meth2C;n,ttl0;lk;eep,ingl0or1C;lf,na1Gri0;ene1Kisso1C;d0Wfe2l4nd,t3;i0Iurn;m1Ut;abi0e4ic3;e,ke15;c3i01laxa11search;ogni10rea10;a9e8hys7luto,o5re3ut2;amble,mis0s3ten20;en1Zs0L;l3rk;i28l0EyH; 16i28;a24tr0F;nt3ti0M;i0s;bstetri24vercrowd1Qxyg09;a5e4owada3utella;ys;ptu1Ows;il poliZtional securi2;aAe8o5u3;m3s1H;ps;n3o1K;ey,o3;gamy;a3cha0Elancholy,rchandi1Htallurgy;sl0t;chine3g1Aj1Hrs,thema1Q; learn1Cry;aught1e6i5ogi4u3;ck,g12;c,s1M;ce,ghtn18nguis1LteratWv1;ath1isVss;ara0EindergartPn3;icke0Aowled0Y;e3upit1;a3llyfiGwel0G;ns;ce,gnor6mp5n3;forma00ter3;net,sta07;atiSort3rov;an18;a7e6isto09o3ung1;ckey,mework,ne4o3rseradi8spitali2use arrest;ky;s2y;adquarteXre;ir,libut,ppiHs3;hi3te;sh;ene8l6o5r3um,ymnas11;a3eZ;niUss;lf,re;ut3yce0F;en; 3ti0W;edit0Hpo3;ol;aNicFlour,o4urnit3;ure;od,rgive3uri1wl;ness;arCcono0LducaBlectr9n7quip8thi0Pvery6x3;ist4per3;ti0B;en0J;body,o08th07;joy3tertain3;ment;ici2o3;ni0H;tiS;nings,th;emi02i6o4raugh3ynas2;ts;pe,wnstai3;rs;abet0ce,s3;honZrepu3;te;aDelciChAivi07l8o3urrency;al,ld w6mmenta5n3ral,ttIuscoB;fusiHt 3;ed;ry;ar;assi01oth0;es;aos,e3;eMwK;us;d,rO;a8i6lood,owlHread5u3;ntGtt1;er;!th;lliarJs3;on;g3ss;ga3;ge;cKdviJeroGirFmBn6ppeal court,r4spi3thleL;rin;ithmet3sen3;ic;i6y3;o4th3;ing;ne;se;en5n3;es2;ty;ds;craft;bi8d3nau7;yna3;mi6;ce;id,ous3;ti3;cs",Infinitive:"true¦0:9G;1:9T;2:AD;3:90;4:9Z;5:84;6:AH;7:A9;8:92;9:A0;A:AG;B:AI;C:9V;D:8R;E:8O;F:97;G:6H;H:7D;a94b8Hc7Jd68e4Zf4Mg4Gh4Ai3Qj3Nk3Kl3Bm34nou48o2Vp2Equ2Dr1Es0CtZuTvRwI;aOeNiLors5rI;eJiI;ng,te;ak,st3;d5e8TthI;draw,er;a2d,ep;i2ke,nIrn;d1t;aIie;liADniAry;nJpI;ho8Llift;cov1dJear8Hfound8DlIplug,rav82tie,ve94;eaAo3X;erIo;cut,go,staAFvalA3w2G;aSeQhNoMrIu73;aIe72;ffi3Smp3nsI;aBfo7CpI;i8oD;pp3ugh5;aJiJrIwaD;eat5i2;nk;aImA0;ch,se;ck3ilor,keImp1r8L;! paD;a0Ic0He0Fh0Bi0Al08mugg3n07o05p02qu01tUuLwI;aJeeIim;p,t5;ll7Wy;bNccMffLggeCmmKppJrI;mouFpa6Zvi2;o0re6Y;ari0on;er,i4;e7Numb;li9KmJsiIveD;de,st;er9it;aMe8MiKrI;ang3eIi2;ng27w;fIng;f5le;b,gg1rI;t3ve;a4AiA;a4UeJit,l7DoI;il,of;ak,nd;lIot7Kw;icEve;atGeak,i0O;aIi6;m,y;ft,ng,t;aKi6CoJriIun;nk,v6Q;ot,rt5;ke,rp5tt1;eIll,nd,que8Gv1w;!k,m;aven9ul8W;dd5tis1Iy;a0FeKiJoI;am,t,ut;d,p5;a0Ab08c06d05f01group,hea00iZjoi4lXmWnVpTq3MsOtMup,vI;amp,eJiIo3B;sEve;l,rI;e,t;i8rI;ie2ofE;eLiKpo8PtIurfa4;o24rI;aHiBuctu8;de,gn,st;mb3nt;el,hra0lIreseF;a4e71;d1ew,o07;aHe3Fo2;a7eFiIo6Jy;e2nq41ve;mbur0nf38;r0t;inKleBocus,rJuI;el,rbiA;aBeA;an4e;aBu4;ei2k8Bla43oIyc3;gni39nci3up,v1;oot,uI;ff;ct,d,liIp;se,ze;tt3viA;aAenGit,o7;aWerUinpoiFlumm1LoTrLuI;b47ke,niArIt;poDsuI;aFe;eMoI;cKd,fe4XhibEmo7noJpo0sp1tru6vI;e,i6o5L;un4;la3Nu8;aGclu6dJf1occupy,sup0JvI;a6BeF;etermi4TiB;aGllu7rtr5Ksse4Q;cei2fo4NiAmea7plex,sIva6;eve8iCua6;mp1rItrol,ve;a6It6E;bOccuNmEpMutLverIwe;l07sJtu6Yu0wI;helm;ee,h1F;gr5Cnu2Cpa4;era7i4Ipo0;py,r;ey,seItaH;r2ss;aMe0ViJoIultiply;leCu6Pw;micJnIspla4;ce,g3us;!k;iIke,na9;m,ntaH;aPeLiIo0u3N;ke,ng1quIv5;eIi6S;fy;aKnIss5;d,gI;th5;rn,ve;ng2Gu1N;eep,idnJnI;e4Cow;ap;oHuI;gg3xtaI;po0;gno8mVnIrk;cTdRfQgeChPitia7ju8q1CsNtKun6EvI;a6eIo11;nt,rt,st;erJimi6BoxiPrI;odu4u6;aBn,pr03ru6C;iCpi8tIu8;all,il,ruB;abEibE;eCo3Eu0;iIul9;ca7;i7lu6;b5Xmer0pI;aLer4Uin9ly,oJrI;e3Ais6Bo2;rt,se,veI;riA;le,rt;aLeKiIoiCuD;de,jaInd1;ck;ar,iT;mp1ng,pp5raIve;ng5Mss;ath1et,iMle27oLrI;aJeIow;et;b,pp3ze;!ve5A;gg3ve;aTer45i5RlSorMrJuI;lf4Cndrai0r48;eJiIolic;ght5;e0Qsh5;b3XeLfeEgJsI;a3Dee;eIi2;!t;clo0go,shIwa4Z;ad3F;att1ee,i36;lt1st5;a0OdEl0Mm0FnXquip,rWsVtGvTxI;aRcPeDhOiNpJtIu6;ing0Yol;eKi8lIo0un9;aHoI;it,re;ct,di7l;st,t;a3oDu3B;e30lI;a10u6;lt,mi28;alua7oI;ke,l2;chew,pou0tab19;a0u4U;aYcVdTfSgQhan4joy,lPqOrNsuMtKvI;e0YisI;a9i50;er,i4rI;aHenGuC;e,re;iGol0F;ui8;ar9iC;a9eIra2ulf;nd1;or4;ang1oIu8;r0w;irc3lo0ou0ErJuI;mb1;oaGy4D;b3ct;bKer9pI;hasiIow1;ze;aKody,rI;a4oiI;d1l;lm,rk;ap0eBuI;ci40de;rIt;ma0Rn;a0Re04iKo,rIwind3;aw,ed9oI;wn;agno0e,ff1g,mi2Kne,sLvI;eIul9;rIst;ge,t;aWbVcQlod9mant3pNru3TsMtI;iIoDu37;lJngI;uiA;!l;ol2ua6;eJlIo0ro2;a4ea0;n0r0;a2Xe36lKoIu0S;uIv1;ra9;aIo0;im;a3Kur0;b3rm;af5b01cVduBep5fUliTmQnOpMrLsiCtaGvI;eIol2;lop;ch;a20i2;aDiBloIoD;re,y;oIy;te,un4;eJoI;liA;an;mEv1;a4i0Ao06raud,y;ei2iMla8oKrI;ee,yI;!pt;de,mIup3;missi34po0;de,ma7ph1;aJrief,uI;g,nk;rk;mp5rk5uF;a0Dea0h0Ai09l08oKrIurta1G;a2ea7ipp3uI;mb3;ales4e04habEinci6ll03m00nIrro6;cXdUfQju8no7qu1sLtKvI;eIin4;ne,r9y;aHin2Bribu7;er2iLoli2Epi8tJuI;lt,me;itu7raH;in;d1st;eKiJoIroFu0;rm;de,gu8rm;ss;eJoI;ne;mn,n0;eIlu6ur;al,i2;buCe,men4pI;eIi3ly;l,te;eBi6u6;r4xiC;ean0iT;rcumveFte;eJirp,oI;o0p;riAw;ncIre5t1ulk;el;a02eSi6lQoPrKuI;iXrIy;st,y;aLeaKiJoad5;en;ng;stfeLtX;ke;il,l11mba0WrrMth1;eIow;ed;!coQfrie1LgPhMliLqueaKstJtrIwild1;ay;ow;th;e2tt3;a2eJoI;ld;ad;!in,ui3;me;bysEckfi8ff3tI;he;b15c0Rd0Iff0Ggree,l0Cm09n03ppZrXsQttOuMvJwaE;it;eDoI;id;rt;gIto0X;meF;aIeCraB;ch,in;pi8sJtoI;niA;aKeIi04u8;mb3rt,ss;le;il;re;g0Hi0ou0rI;an9i2;eaKly,oiFrI;ai0o2;nt;r,se;aMi0GnJtI;icipa7;eJoIul;un4y;al;ly0;aJu0;se;lga08ze;iKlI;e9oIu6;t,w;gn;ix,oI;rd;a03jNmiKoJsoI;rb;pt,rn;niIt;st1;er;ouJuC;st;rn;cLhie2knowled9quiItiva7;es4re;ce;ge;eQliOoKrJusI;e,tom;ue;mIst;moJpI;any,liA;da7;ma7;te;pt;andPduBet,i6oKsI;coKol2;ve;liArt,uI;nd;sh;de;ct;on",Person:"true¦0:1Q;a29b1Zc1Md1Ee18f15g13h0Ri0Qj0Nk0Jl0Gm09n06o05p00rPsItCusain bolt,v9w4xzibit,y1;anni,oko on2uji,v1;an,es;en,o;a3ednesday adams,i2o1;lfram,o0Q;ll ferrell,z khalifa;lt disn1Qr1;hol,r0G;a2i1oltai06;n dies0Zrginia wo17;lentino rossi,n goG;a4h3i2ripp,u1yra banks;lZpac shakur;ger woods,mba07;eresa may,or;kashi,t1ylor;um,ya1B;a5carlett johanss0h4i3lobodan milosevic,no2ocr1Lpider1uperm0Fwami; m0Em0E;op dogg,w whi1H;egfried,nbad;akespeaTerlock holm1Sia labeouf;ddam hussa16nt1;a cla11ig9;aAe6i5o3u1za;mi,n dmc,paul,sh limbau1;gh;bin hood,d stew16nald1thko;in0Mo;han0Yngo starr,valdo;ese witherspo0i1mbrandt;ll2nh1;old;ey,y;chmaninoff,ffi,iJshid,y roma1H;a4e3i2la16o1uff daddy;cahont0Ie;lar,p19;le,rZ;lm17ris hilt0;leg,prah winfr0Sra;a2e1iles cra1Bostradam0J; yo,l5tt06wmQ;pole0s;a5e4i2o1ubar03;by,lie5net,rriss0N;randa ju1tt romn0M;ly;rl0GssiaB;cklemo1rkov,s0ta hari,ya angelou;re;ady gaga,e1ibera0Pu;bron jam0Xch wale1e;sa;anye west,e3i1obe bryant;d cudi,efer suther1;la0P;ats,sha;a2effers0fk,k rowling,rr tolki1;en;ck the ripp0Mwaharlal nehru,y z;liTnez,ron m7;a7e5i3u1;lk hog5mphrey1sa01;! bog05;l1tl0H;de; m1dwig,nry 4;an;ile selassFlle ber4m3rrison1;! 1;ford;id,mo09;ry;ast0iannis,o1;odwPtye;ergus0lorence nightinga08r1;an1ederic chopN;s,z;ff5m2nya,ustaXzeki1;el;eril lagasse,i1;le zatop1nem;ek;ie;a6e4i2octor w1rake;ho;ck w1ego maradoC;olf;g1mi lovaOnzel washingt0;as;l1nHrth vadR;ai lNt0;a8h5lint0o1thulhu;n1olio;an,fuci1;us;on;aucKop2ristian baMy1;na;in;millo,ptain beefhe4r1;dinal wols2son1;! palmF;ey;art;a8e5hatt,i3oHro1;ck,n1;te;ll g1ng crosby;atB;ck,nazir bhut2rtil,yon1;ce;to;nksy,rack ob1;ama;l 6r3shton kutch2vril lavig8yn ra1;nd;er;chimed2istot1;le;es;capo2paci1;no;ne",Adjective:"true¦0:AI;1:BS;2:BI;3:BA;4:A8;5:84;6:AV;7:AN;8:AF;9:7H;A:BQ;B:AY;C:BC;D:BH;E:9Y;aA2b9Ec8Fd7We79f6Ng6Eh61i4Xj4Wk4Tl4Im41n3Po36p2Oquart7Pr2Ds1Dt14uSvOwFye29;aMeKhIiHoF;man5oFrth7G;dADzy;despreB1n w97s86;acked1UoleF;!sa6;ather1PeFll o70ste1D;!k5;nt1Ist6Ate4;aHeGiFola5T;bBUce versa,gi3Lle;ng67rsa5R;ca1gBSluAV;lt0PnLpHrGsFttermoBL;ef9Ku3;b96ge1; Hb32pGsFtiAH;ca6ide d4R;er,i85;f52to da2;a0Fbeco0Hc0Bd04e02f01gu1XheaBGiXkn4OmUnTopp06pRrNsJtHus0wF;aFiel3K;nt0rra0P;app0eXoF;ld,uS;eHi37o5ApGuF;perv06spec39;e1ok9O;en,ttl0;eFu5;cogn06gul2RlGqu84sF;erv0olv0;at0en33;aFrecede0E;id,rallel0;am0otic0;aFet;rri0tF;ch0;nFq26vers3;sur0terFv7U;eFrupt0;st0;air,inish0orese98;mploy0n7Ov97xpF;ect0lain0;eHisFocume01ue;clFput0;os0;cid0rF;!a8Scov9ha8Jlyi8nea8Gprivileg0sMwF;aFei9I;t9y;hGircumcFonvin2U;is0;aFeck0;lleng0rt0;b20ppea85ssuGttend0uthorF;iz0;mi8;i4Ara;aLeIhoHip 25oGrF;anspare1encha1i2;geth9leADp notch,rpB;rny,ugh6H;ena8DmpGrFs6U;r49tia4;eCo8P;leFst4M;nt0;a0Dc09e07h06i04ki03l01mug,nobbi4XoVpRqueami4XtKuFymb94;bHccinAi generis,pFr5;erFre7N;! dup9b,vi70;du0li7Lp6IsFurb7J;eq9Atanda9X;aKeJi16o2QrGubboFy4Q;rn;aightFin5GungS; fFfF;or7V;adfa9Pri6;lwa6Ftu82;arHeGir6NlendBot Fry;on;c3Qe1S;k5se; call0lImb9phistic16rHuFviV;ndFth1B;proof;dBry;dFub6; o2A;e60ipF;pe4shod;ll0n d7R;g2HnF;ceEg6ist9;am3Se9;co1Zem5lfFn6Are7; suf4Xi43;aGholFient3A;ar5;rlFt4A;et;cr0me,tisfac7F;aOeIheumatoBiGoF;bu8Ztt7Gy3;ghtFv3; 1Sf6X;cJdu8PlInown0pro69sGtF;ard0;is47oF;lu2na1;e1Suc45;alcit8Xe1ondi2;bBci3mpa1;aSePicayu7laOoNrGuF;bl7Tnjabi;eKiIoF;b7VfGmi49pFxi2M;er,ort81;a7uD;maFor,sti7va2;!ry;ciDexis0Ima2CpaB;in55puli8G;cBid;ac2Ynt 3IrFti2;ma40tFv7W;!i3Z;i2YrFss7R;anoBtF; 5XiF;al,s5V;bSffQkPld OnMrLth9utKverF;!aIbMdHhGni75seas,t,wF;ei74rou74;a63e7A;ue;ll;do1Ger,si6A;d3Qg2Aotu5Z; bFbFe on o7g3Uli7;oa80;fashion0school;!ay; gua7XbFha5Uli7;eat;eHligGsF;ce7er0So1C;at0;diFse;a1e1;aOeNiMoGuF;anc0de; moEnHrthFt6V;!eFwe7L;a7Krn;chaGdescri7Iprof30sF;top;la1;ght5;arby,cessa4ighbor5wlyw0xt;k0usiaFv3;ti8;aQeNiLoHuF;dIltiF;facet0p6;deHlGnFot,rbBst;ochro4Xth5;dy;rn,st;ddle ag0nF;dbloZi,or;ag9diocEga,naGrFtropolit4Q;e,ry;ci8;cIgenta,inHj0Fkeshift,mmGnFri4Oscu61ver18;da5Dy;ali4Lo4U;!stream;abEho;aOeLiIoFumberi8;ngFuti1R;stan3RtF;erm,i4H;ghtGteraF;l,ry,te;heart0wei5O;ft JgFss9th3;al,eFi0M;nda4;nguBps0te5;apGind5noF;wi8;ut;ad0itte4uniW;ce co0Hgno6Mll0Cm04nHpso 2UrF;a2releF;va1; ZaYcoWdReQfOgrNhibi4Ri05nMoLsHtFvalu5M;aAeF;nDrdepe2K;a7iGolFuboI;ub6ve1;de,gF;nifica1;rdi5N;a2er;own;eriIiLluenVrF;ar0eq5H;pt,rt;eHiGoFul1O;or;e,reA;fiFpe26termi5E;ni2;mpFnsideCrreA;le2;ccuCdeq5Ene,ppr4J;fFsitu,vitro;ro1;mJpF;arHeGl15oFrop9;li2r11;n2LrfeA;ti3;aGeFi18;d4BnD;tuE;egGiF;c0YteC;al,iF;tiF;ma2;ld;aOelNiLoFuma7;a4meInHrrGsFur5;ti6;if4E;e58o3U; ma3GsF;ick;ghfalut2HspF;an49;li00pf33;i4llow0ndGrdFtM; 05coEworki8;sy,y;aLener44iga3Blob3oKrGuF;il1Nng ho;aFea1Fizzl0;cGtF;ef2Vis;ef2U;ld3Aod;iFuc2D;nf2R;aVeSiQlOoJrF;aGeFil5ug3;q43tf2O;gFnt3S;i6ra1;lk13oHrF; keeps,eFge0Vm9tu41;g0Ei2Ds3R;liF;sh;ag4Mowe4uF;e1or45;e4nF;al,i2;d Gmini7rF;ti6ve1;up;bl0lDmIr Fst pac0ux;oGreacF;hi8;ff;ed,ili0R;aXfVlTmQnOqu3rMthere3veryday,xF;aApIquisi2traHuF;be48lF;ta1;!va2L;edRlF;icF;it;eAstF;whi6; Famor0ough,tiE;rou2sui2;erGiF;ne1;ge1;dFe2Aoq34;er5;ficF;ie1;g9sF;t,ygF;oi8;er;aWeMiHoGrFue;ea4owY;ci6mina1ne,r31ti8ubQ;dact2Jfficult,m,sGverF;ge1se;creGePjoi1paCtF;a1inA;et,te; Nadp0WceMfiLgeneCliJmuEpeIreliAsGvoF;id,ut;pFtitu2ul1L;eCoF;nde1;ca2ghF;tf13;a1ni2;as0;facto;i5ngero0I;ar0Ce09h07i06l05oOrIuF;rmudgeon5stoma4teF;sy;ly;aIeHu1EystalF; cleFli7;ar;epy;fFv17z0;ty;erUgTloSmPnGrpoCunterclVveFy;rt;cLdJgr21jIsHtrF;aFi2;dic0Yry;eq1Yta1;oi1ug3;escenFuN;di8;a1QeFiD;it0;atoDmensuCpF;ass1SulF;so4;ni3ss3;e1niza1;ci1J;ockwiD;rcumspeAvil;eFintzy;e4wy;leGrtaF;in;ba2;diac,ef00;a00ePiLliJoGrFuck nak0;and new,isk,on22;gGldface,naF; fi05fi05;us;nd,tF;he;gGpartisFzarE;an;tiF;me;autifOhiNlLnHsFyoN;iWtselF;li8;eGiFt;gn;aFfi03;th;at0oF;v0w;nd;ul;ckwards,rF;e,rT; priori,b13c0Zd0Tf0Ng0Ihe0Hl09mp6nt06pZrTsQttracti0MuLvIwF;aGkF;wa1B;ke,re;ant garGeraF;ge;de;diIsteEtF;heFoimmu7;nt07;re;to4;hGlFtu2;eep;en;bitIchiv3roHtF;ifiFsy;ci3;ga1;ra4;ry;pFt;aHetizi8rF;oprF;ia2;llFre1;ed,i8;ng;iquFsy;at0e;ed;cohKiJkaHl,oGriFterX;ght;ne,of;li7;ne;ke,ve;olF;ic;ad;ain07gressiIi6rF;eeF;ab6;le;ve;fGraB;id;ectGlF;ue1;ioF;na2; JaIeGvF;erD;pt,qF;ua2;ma1;hoc,infinitum;cuCquiGtu3u2;al;esce1;ra2;erSjeAlPoNrKsGuF;nda1;e1olu2trF;aAuD;se;te;eaGuF;pt;st;aFve;rd;aFe;ze;ct;ra1;nt",Pronoun:"true¦elle,h3i2me,she,th0us,we,you;e0ou;e,m,y;!l,t;e,im",Preposition:"true¦aPbMcLdKexcept,fIinGmid,notwithstandiWoDpXqua,sCt7u4v2w0;/o,hereSith0;! whHin,oW;ersus,i0;a,s a vis;n1p0;!on;like,til;h1ill,oward0;!s;an,ereby,r0;ough0u;!oM;ans,ince,o that,uch G;f1n0ut;!to;!f;! 0to;effect,part;or,r0;om;espite,own,u3;hez,irca;ar1e0oBy;sides,tween;ri7;bo8cross,ft7lo6m4propos,round,s1t0;!op;! 0;a whole,long 0;as;id0ong0;!st;ng;er;ut",SportsTeam:"true¦0:18;1:1E;2:1D;3:14;a1Db15c0Sd0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Am01new UoRpKqueens parkJreal salt lake,sBt6utah jazz,vancouver whitecaps,w4yW;ashington 4h10;natio1Mredski2wizar0W;ampa bay 7e6o4;ronto 4ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasD;buccanee0ra0K;a8eattle 6porting kansas0Wt4; louis 4oke0V;c1Drams;marine0s4;eah13ounH;cramento Rn 4;antonio spu0diego 4francisco gJjose earthquak1;char08paB; ran07;a9h6ittsburgh 5ortland t4;imbe0rail blaze0;pirat1steele0;il4oenix su2;adelphia 4li1;eagl1philNunE;dr1;akland 4klahoma city thunder,rlando magic;athle0Lrai4;de0;england 8orleans 7york 4;g5je3knYme3red bul0Xy4;anke1;ian3;pelica2sain3;patrio3revolut4;ion;anchEeAi4ontreal impact;ami 8lwaukee b7nnesota 4;t5vi4;kings;imberwolv1wi2;rewe0uc0J;dolphi2heat,marli2;mphis grizz4ts;li1;a6eic5os angeles 4;clippe0dodFlaB;esterV; galaxy,ke0;ansas city 4nF;chiefs,roya0D; pace0polis col3;astr05dynamo,rocke3texa2;olden state warrio0reen bay pac4;ke0;allas 8e4i04od6;nver 6troit 4;lio2pisto2ti4;ge0;broncYnugge3;cowbo5maver4;icZ;ys;arEelLhAincinnati 8leveland 6ol4;orado r4umbus crew sc;api7ocki1;brow2cavalie0guar4in4;dia2;bengaVre4;ds;arlotte horAicago 4;b5cubs,fire,wh4;iteB;ea0ulQ;diff4olina panthe0; city;altimore Alackburn rove0oston 6rooklyn 4uffalo bilN;ne3;ts;cel5red4; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 4;brav1falco2h4;awA;ns;es;on villa,r4;os;c6di4;amondbac4;ks;ardi4;na4;ls",Unit:"true¦a07b04cXdWexVfTgRhePinYjoule0BkMlJmDnan08oCp9quart0Bsq ft,t7volts,w6y2ze3°1µ0;g,s;c,f,n;dVear1o0;ttR; 0s 0;old;att,b;erNon0;!ne02;ascals,e1i0;cXnt00;rcent,tJ;hms,unceY;/s,e4i0m²,²,³;/h,cro2l0;e0liK;!²;grLsR;gCtJ;it1u0;menQx;erPreP;b5elvins,ilo1m0notO;/h,ph,²;!byGgrEmCs;ct0rtzL;aJogrC;allonJb0ig3rB;ps;a0emtEl oz,t4;hrenheit,radG;aby9;eci3m1;aratDe1m0oulombD;²,³;lsius,nti0;gr2lit1m0;et0;er8;am7;b1y0;te5;l,ps;c2tt0;os0;econd1;re0;!s","Noun|Gerund":"true¦0:3O;1:3M;2:3N;3:3D;4:32;5:2V;6:3E;7:3K;8:36;9:3J;A:3B;a3Pb37c2Jd27e23f1Vg1Sh1Mi1Ij1Gk1Dl18m13n11o0Wp0Pques0Sr0EsTtNunderMvKwFyDzB;eroi0oB;ni0o3P;aw2eB;ar2l3;aEed4hispe5i5oCrB;ap8est3i1;n0ErB;ki0r31;i1r2s9tc9;isualizi0oB;lunt1Vti0;stan4ta6;aFeDhin6iCraBy8;c6di0i2vel1M;mi0p8;aBs1;c9si0;l6n2s1;aUcReQhOiMkatKl2Wmo6nowJpeItFuCwB;ea5im37;b35f0FrB;fi0vB;e2Mi2J;aAoryt1KrCuB;d2KfS;etc9ugg3;l3n4;bCi0;ebBi0;oar4;gnBnAt1;a3i0;ip8oB;p8rte2u1;a1r27t1;hCo5reBulp1;a2Qe2;edu3oo3;i3yi0;aKeEi4oCuB;li0n2;oBwi0;fi0;aFcEhear7laxi0nDpor1sB;pon4tructB;r2Iu5;de5;or4yc3;di0so2;p8ti0;aFeacek20laEoCrBublis9;a1Teten4in1oces7;iso2siB;tio2;n2yi0;ckaAin1rB;ki0t1O;fEpeDrganiCvB;erco24ula1;si0zi0;ni0ra1;fe5;avi0QeBur7;gotia1twor6;aDeCi2oB;de3nito5;a2dita1e1ssaA;int0XnBrke1;ifUufactu5;aEeaDiBodAyi0;cen7f1mi1stB;e2i0;r2si0;n4ug9;iCnB;ea4it1;c6l3;ogAuB;dAgg3stif12;ci0llust0VmDnBro2;nova1sp0NterBven1;ac1vie02;agi2plo4;aDea1iCoBun1;l4w3;ki0ri0;nd3rB;roWvB;es1;aCene0Lli4rBui4;ee1ie0N;rde2the5;aHeGiDlCorBros1un4;e0Pmat1;ir1oo4;gh1lCnBs9;anZdi0;i0li0;e3nX;r0Zscina1;a1du01nCxB;erci7plo5;chan1di0ginB;ee5;aLeHiGoub1rCum8wB;el3;aDeCiB;bb3n6vi0;a0Qs7;wi0;rTscoDvi0;ba1coZlBvelo8;eCiB;ve5;ga1;nGti0;aVelebUhSlPoDrBur3yc3;aBos7yi0;f1w3;aLdi0lJmFnBo6pi0ve5;dDsCvinB;ci0;trBul1;uc1;muniDpB;lBo7;ai2;ca1;lBo5;ec1;c9ti0;ap8eaCimToBubT;ni0t9;ni0ri0;aBee5;n1t1;ra1;m8rCs1te5;ri0;vi0;aPeNitMlLoGrDuB;dge1il4llBr8;yi0;an4eat9oadB;cas1;di0;a1mEokB;i0kB;ee8;pi0;bi0;es7oa1;c9i0;gin2lonAt1;gi0;bysit1c6ki0tt3;li0;ki0;bando2cGdverti7gi0pproac9rgDssuCtB;trac1;mi0;ui0;hi0;si0;coun1ti0;ti0;ni0;ng",PhrasalVerb:"true¦0:92;1:96;2:8H;3:8V;4:8A;5:83;6:85;7:98;8:90;9:8G;A:8X;B:8R;C:8U;D:8S;E:70;F:97;G:8Y;H:81;I:7H;J:79;a9Fb7Uc6Rd6Le6Jf5Ig50h4Biron0j47k40l3Em31n2Yo2Wp2Cquiet Hr1Xs0KtZuXvacuu6QwNyammerBzK;ero Dip LonK;e0k0;by,ov9up;aQeMhLiKor0Mrit19;mp0n3Fpe0r5s5;ackAeel Di0S;aLiKn33;gh 3Wrd0;n Dr K;do1in,oJ;it 79k5lk Lrm 69sh Kt83v60;aw3do1o7up;aw3in,oC;rgeBsK;e 2herE;a00eYhViRoQrMuKypP;ckErn K;do1in,oJup;aLiKot0y 30;ckl7Zp F;ck HdK;e 5Y;n7Wp 3Es5K;ck MdLe Kghten 6me0p o0Rre0;aw3ba4do1in,up;e Iy 2;by,oG;ink Lrow K;aw3ba4in,up;ba4ov9up;aKe 77ll62;m 2r 5M;ckBke Llk K;ov9shit,u47;aKba4do1in,leave,o4Dup;ba4ft9pa69w3;a0Vc0Te0Mh0Ii0Fl09m08n07o06p01quar5GtQuOwK;earMiK;ngLtch K;aw3ba4o8K; by;cKi6Bm 2ss0;k 64;aReQiPoNrKud35;aigh2Det75iK;ke 7Sng K;al6Yup;p Krm2F;by,in,oG;c3Ln3Lr 2tc4O;p F;c3Jmp0nd LrKveAy 2O;e Ht 2L;ba4do1up;ar3GeNiMlLrKurB;ead0ingBuc5;a49it 6H;c5ll o3Cn 2;ak Fe1Xll0;a3Bber 2rt0und like;ap 5Vow Duggl5;ash 6Noke0;eep NiKow 6;cLp K;o6Dup;e 68;in,oK;ff,v9;de19gn 4NnKt 6Gz5;gKkE; al6Ale0;aMoKu5W;ot Kut0w 7M;aw3ba4f48oC;c2WdeEk6EveA;e Pll1Nnd Orv5tK; Ktl5J;do1foLin,o7upK;!on;ot,r5Z;aw3ba4do1in,o33up;oCto;al66out0rK;ap65ew 6J;ilAv5;aXeUiSoOuK;b 5Yle0n Kstl5;aLba4do1inKo2Ith4Nu5P;!to;c2Xr8w3;ll Mot LpeAuK;g3Ind17;a2Wf3Po7;ar8in,o7up;ng 68p oKs5;ff,p18;aKelAinEnt0;c6Hd K;o4Dup;c27t0;aZeYiWlToQrOsyc35uK;ll Mn5Kt K;aKba4do1in,oJto47up;pa4Dw3;a3Jdo1in,o21to45up;attleBess KiNop 2;ah2Fon;iLp Kr4Zu1Gwer 6N;do1in,o6Nup;nt0;aLuK;gEmp 6;ce u20y 6D;ck Kg0le 4An 6p5B;oJup;el 5NncilE;c53ir 39n0ss MtLy K;ba4oG; Hc2R;aw3ba4in,oJ;pKw4Y;e4Xt D;aLerd0oK;dAt53;il Hrrow H;aTeQiPoLuK;ddl5ll I;c1FnkeyMp 6uthAve K;aKdo1in,o4Lup;l4Nw3; wi4K;ss0x 2;asur5e3SlLss K;a21up;t 6;ke Ln 6rKs2Ax0;k 6ryA;do,fun,oCsure,up;a02eViQoLuK;ck0st I;aNc4Fg MoKse0;k Kse4D;aft9ba4do1forw37in56o0Zu46;in,oJ;d 6;e NghtMnLsKve 00;ten F;e 2k 2; 2e46;ar8do1in;aMt LvelK; oC;do1go,in,o7up;nEve K;in,oK;pKut;en;c5p 2sh LtchBughAy K;do1o59;in4Po7;eMick Lnock K;do1oCup;oCup;eLy K;in,up;l Ip K;aw3ba4do1f04in,oJto,up;aMoLuK;ic5mpE;ke3St H;c43zz 2;a01eWiToPuK;nLrrKsh 6;y 2;keLt K;ar8do1;r H;lKneErse3K;d Ke 2;ba4dKfast,o0Cup;ear,o1;de Lt K;ba4on,up;aw3o7;aKlp0;d Ml Ir Kt 2;fKof;rom;f11in,o03uW;cPm 2nLsh0ve Kz2P;at,it,to;d Lg KkerP;do1in,o2Tup;do1in,oK;ut,v9;k 2;aZeTive Rloss IoMrLunK; f0S;ab hold,in43ow 2U; Kof 2I;aMb1Mit,oLr8th1IuK;nd9;ff,n,v9;bo7ft9hQw3;aw3bKdo1in,oJrise,up,w3;a4ir2H;ar 6ek0t K;aLb1Fdo1in,oKr8up;ff,n,ut,v9;cLhKl2Fr8t,w3;ead;ross;d aKng 2;bo7;a0Ee07iYlUoQrMuK;ck Ke2N;ar8up;eLighten KownBy 2;aw3oG;eKshe27; 2z5;g 2lMol Krk I;aKwi20;bo7r8;d 6low 2;aLeKip0;sh0;g 6ke0mKrKtten H;e F;gRlPnNrLsKzzle0;h F;e Km 2;aw3ba4up;d0isK;h 2;e Kl 1T;aw3fPin,o7;ht ba4ure0;ePnLsK;s 2;cMd K;fKoG;or;e D;d04l 2;cNll Krm0t1G;aLbKdo1in,o09sho0Eth08victim;a4ehi2O;pa0C;e K;do1oGup;at Kdge0nd 12y5;in,o7up;aOi1HoNrK;aLess 6op KuN;aw3b03in,oC;gBwB; Ile0ubl1B;m 2;a0Ah05l02oOrLut K;aw3ba4do1oCup;ackBeep LoKy0;ss Dwd0;by,do1in,o0Uup;me NoLuntK; o2A;k 6l K;do1oG;aRbQforOin,oNtKu0O;hLoKrue;geth9;rough;ff,ut,v9;th,wK;ard;a4y;paKr8w3;rt;eaLose K;in,oCup;n 6r F;aNeLiK;ll0pE;ck Der Kw F;on,up;t 2;lRncel0rOsMtch LveE; in;o1Nup;h Dt K;doubt,oG;ry LvK;e 08;aw3oJ;l Km H;aLba4do1oJup;ff,n,ut;r8w3;a0Ve0MiteAl0Fo04rQuK;bblNckl05il0Dlk 6ndl05rLsKtMy FzzA;t 00;n 0HsK;t D;e I;ov9;anWeaUiLush K;oGup;ghQng K;aNba4do1forMin,oLuK;nd9p;n,ut;th;bo7lKr8w3;ong;teK;n 2;k K;do1in,o7up;ch0;arTg 6iRn5oPrNssMttlLunce Kx D;aw3ba4;e 6; ar8;e H;do1;k Dt 2;e 2;l 6;do1up;d 2;aPeed0oKurt0;cMw K;aw3ba4do1o7up;ck;k K;in,oC;ck0nk0stA; oQaNef 2lt0nd K;do1ov9up;er;up;r Lt K;do1in,oCup;do1o7;ff,nK;to;ck Pil0nMrgLsK;h D;ainBe D;g DkB; on;in,o7;aw3do1in,oCup;ff,ut;ay;ct FdQir0sk MuctionA; oG;ff;ar8o7;ouK;nd; o7;d K;do1oKup;ff,n;wn;o7up;ut",ProperNoun:"true¦aIbDc8dalhousHe7f5gosford,h4iron maiden,kirby,landsdowne,m2nis,r1s0wembF;herwood,paldiB;iel,othwe1;cgi0ercedes,issy;ll;intBudsB;airview,lorence,ra0;mpt9nco;lmo,uro;a1h0;arlt6es5risti;rl0talina;et4i0;ng;arb3e0;et1nt0rke0;ley;on;ie;bid,jax","Person|Place":"true¦a8d6h4jordan,k3orlando,s1vi0;ctor9rgin9;a0ydney;lvador,mara,ntia4;ent,obe;amil0ous0;ton;arw2ie0;go;lexandr1ust0;in;ia",LastName:"true¦0:BR;1:BF;2:B5;3:BH;4:AX;5:9Y;6:B6;7:BK;8:B0;9:AV;A:AL;B:8Q;C:8G;D:7K;E:BM;F:AH;aBDb9Zc8Wd88e81f7Kg6Wh64i60j5Lk4Vl4Dm39n2Wo2Op25quispe,r1Ls0Pt0Ev03wTxSyKzG;aIhGimmerm6A;aGou,u;ng,o;khar5ytsE;aKeun9BiHoGun;koya32shiBU;!lG;diGmaz;rim,z;maGng;da,g52mo83sGzaC;aChiBV;iao,u;aLeJiHoGright,u;jcA5lff,ng;lGmm0nkl0sniewsC;kiB1liams33s3;bGiss,lt0;b,er,st0;a6Vgn0lHtG;anabe,s3;k0sh,tG;e2Non;aLeKiHoGukD;gt,lk5roby5;dHllalGnogr3Kr1Css0val3S;ba,ob1W;al,ov4;lasHsel8W;lJn dIrgBEsHzG;qu7;ilyEqu7siljE;en b6Aijk,yk;enzueAIverde;aPeix1VhKi2j8ka43oJrIsui,uG;om5UrG;c2n0un1;an,emblA7ynisC;dorAMlst3Km4rrAth;atch0i8UoG;mHrG;are84laci79;ps3sG;en,on;hirDkah9Mnaka,te,varA;a06ch01eYhUiRmOoMtIuHvGzabo;en9Jobod3N;ar7bot4lliv2zuC;aIeHoG;i7Bj4AyanAB;ele,in2FpheBvens25;l8rm0;kol5lovy5re7Tsa,to,uG;ng,sa;iGy72;rn5tG;!h;l71mHnGrbu;at9cla9Egh;moBo7M;aIeGimizu;hu,vchG;en8Luk;la,r1G;gu9infe5YmGoh,pulveA7rra5P;jGyG;on5;evi6iltz,miHneid0roed0uGwarz;be3Elz;dHtG;!t,z;!t;ar4Th8ito,ka4OlJnGr4saCto,unde19v4;ch7dHtGz;a5Le,os;b53e16;as,ihDm4Po0Y;aVeSiPoJuHyG;a6oo,u;bio,iz,sG;so,u;bKc8Fdrigue67ge10j9YmJosevelt,sItHux,wG;e,li6;a9Ch;enb4Usi;a54e4L;erts15i93;bei4JcHes,vGzzo;as,e9;ci,hards12;ag2es,iHut0yG;es,nol5N;s,t0;dImHnGsmu97v6C;tan1;ir7os;ic,u;aUeOhMiJoHrGut8;asad,if6Zochazk27;lishc2GpGrti72u10we76;e3Aov51;cHe45nG;as,to;as70hl0;aGillips;k,m,n6I;a3Hde3Wete0Bna,rJtG;ersHrovGters54;!a,ic;!en,on;eGic,kiBss3;i9ra,tz,z;h86k,padopoulIrk0tHvG;ic,l4N;el,te39;os;bMconn2Ag2TlJnei6PrHsbor6XweBzG;dem7Rturk;ella4DtGwe6N;ega,iz;iGof7Hs8I;vGyn1R;ei9;aSri1;aPeNiJoGune50ym2;rHvGwak;ak4Qik5otn66;odahl,r4S;cholsZeHkolGls4Jx3;ic,ov84;ls1miG;!n1;ils3mG;co4Xec;gy,kaGray2sh,var38;jiGmu9shiG;ma;a07c04eZiWoMuHyeG;rs;lJnIrGssoli6S;atGp03r7C;i,ov4;oz,te58;d0l0;h2lOnNo0RrHsGza1A;er,s;aKeJiIoz5risHtG;e56on;!on;!n7K;au,i9no,t5J;!lA;r1Btgome59;i3El0;cracFhhail5kkeHlG;l0os64;ls1;hmeJiIj30lHn3Krci0ssiGyer2N;!er;n0Po;er,j0;dDti;cartHlG;aughl8e2;hy;dQe7Egnu68i0jer3TkPmNnMrItHyG;er,r;ei,ic,su21thews;iHkDquAroqu8tinG;ez,s;a5Xc,nG;!o;ci5Vn;a5UmG;ad5;ar5e6Kin1;rig77s1;aVeOiLoJuHyG;!nch;k4nGo;d,gu;mbarGpe3Fvr4we;di;!nGu,yana2B;coln,dG;b21holm,strom;bedEfeKhIitn0kaHn8rGw35;oy;!j;m11tG;in1on1;bvGvG;re;iGmmy,ng,rs2Qu,voie,ws3;ne,t1F;aZeYh2iWlUnez50oNrJuHvar2woG;k,n;cerGmar68znets5;a,o34;aHem0isGyeziu;h23t3O;m0sni4Fus3KvG;ch4O;bay57ch,rh0Usk16vaIwalGzl5;czGsC;yk;cIlG;!cGen4K;huk;!ev4ic,s;e8uiveG;rt;eff0kGl4mu9nnun1;ucF;ll0nnedy;hn,llKminsCne,pIrHstra3Qto,ur,yGzl5;a,s0;j0Rls22;l2oG;or;oe;aPenOha6im14oHuG;ng,r4;e32hInHrge32u6vG;anD;es,ss3;anHnsG;en,on,t3;nesGs1R;en,s1;kiBnings,s1;cJkob4EnGrv0E;kDsG;en,sG;en0Ion;ks3obs2A;brahimDglesi5Nke5Fl0Qno07oneIshikHto,vanoG;u,v54;awa;scu;aVeOiNjaltal8oIrist50uG;!aGb0ghAynh;m2ng;a6dz4fIjgaa3Hk,lHpUrGwe,x3X;ak1Gvat;mAt;er,fm3WmG;ann;ggiBtchcock;iJmingw4BnHrGss;nand7re9;deGriks1;rs3;kkiHnG;on1;la,n1;dz4g1lvoQmOns0ZqNrMsJuIwHyG;asFes;kiB;g1ng;anHhiG;mo14;i,ov0J;di6p0r10t;ue;alaG;in1;rs1;aVeorgUheorghe,iSjonRoLrJuGw3;errGnnar3Co,staf3Ctierr7zm2;a,eG;ro;ayli6ee2Lg4iffithGub0;!s;lIme0UnHodGrbachE;e,m2;calvAzale0S;dGubE;bGs0E;erg;aj,i;bs3l,mGordaO;en7;iev3U;gnMlJmaIndFo,rGsFuthi0;cGdn0za;ia;ge;eaHlG;agh0i,o;no;e,on;aVerQiLjeldsted,lKoIrHuG;chs,entAji41ll0;eem2iedm2;ntaGrt8urni0wl0;na;emi6orA;lipIsHtzgeraG;ld;ch0h0;ovG;!ic;hatDnanIrG;arGei9;a,i;deY;ov4;b0rre1D;dKinsJriksIsGvaB;cob3GpGtra3D;inoza,osiQ;en,s3;te8;er,is3warG;ds;aXePiNjurhuMoKrisco15uHvorakG;!oT;arte,boHmitru,nn,rGt3C;and,ic;is;g2he0Omingu7nErd1ItG;to;us;aGcki2Hmitr2Ossanayake,x3;s,z; JbnaIlHmirGrvisFvi,w2;!ov4;gado,ic;th;bo0groot,jo6lHsilGvriA;va;a cruz,e3uG;ca;hl,mcevsCnIt2WviG;dGes,s;ov,s3;ielsGku22;!en;ki;a0Be06hRiobQlarkPoIrGunningh1H;awfo0RivGuz;elli;h1lKntJoIrGs2Nx;byn,reG;a,ia;ke,p0;i,rer2K;em2liB;ns;!e;anu;aOeMiu,oIristGu6we;eGiaG;ns1;i,ng,p9uHwGy;!dH;dGng;huJ;!n,onGu6;!g;kJnIpm2ttHudhGv7;ry;erjee,o14;!d,g;ma,raboG;rty;bJl0Cng4rG;eghetHnG;a,y;ti;an,ota1C;cerAlder3mpbeLrIstGvadi0B;iGro;llo;doHl0Er,t0uGvalho;so;so,zo;ll;a0Fe01hYiXlUoNrKuIyG;rLtyG;qi;chan2rG;ke,ns;ank5iem,oGyant;oks,wG;ne;gdan5nIruya,su,uchaHyKziG;c,n5;rd;darGik;enG;ko;ov;aGond15;nco,zG;ev4;ancFshw16;a08oGuiy2;umGwmG;ik;ckRethov1gu,ktPnNrG;gJisInG;ascoGds1;ni;ha;er,mG;anG;!n;gtGit7nP;ss3;asF;hi;er,hG;am;b4ch,ez,hRiley,kk0ldw8nMrIshHtAu0;es;ir;bInHtlGua;ett;es,i0;ieYosa;dGik;a9yoG;padhyG;ay;ra;k,ng;ic;bb0Acos09d07g04kht05lZnPrLsl2tJyG;aHd8;in;la;chis3kiG;ns3;aImstro6sl2;an;ng;ujo,ya;dJgelHsaG;ri;ovG;!a;ersJov,reG;aGjEws;ss1;en;en,on,s3;on;eksejEiyEmeiIvG;ar7es;ez;da;ev;arwHuilG;ar;al;ams,l0;er;ta;as",Ordinal:"true¦eBf7nin5s3t0zeroE;enDhir1we0;lfCn7;d,t3;e0ixt8;cond,vent7;et0th;e6ie7;i2o0;r0urt3;tie4;ft1rst;ight0lev1;e0h,ie1;en0;th",Cardinal:"true¦bEeBf5mEnine7one,s4t0zero;en,h2rDw0;e0o;lve,n5;irt6ousands,ree;even2ix2;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illions",Multiple:"true¦b3hundred,m3qu2se1t0;housand,r2;pt1xt1;adr0int0;illion",City:"true¦0:74;1:61;2:6G;3:6J;4:5S;a68b53c4Id48e44f3Wg3Hh39i31j2Wk2Fl23m1Mn1Co19p0Wq0Ur0Os05tRuQvLwDxiBy9z5;a7h5i4Muri4O;a5e5ongsh0;ng3H;greb,nzib5G;ang2e5okoha3Sunfu;katerin3Hrev0;a5n0Q;m5Hn;arsBeAi6roclBu5;h0xi,zh5P;c7n5;d5nipeg,terth4;hoek,s1L;hi5Zkl3A;l63xford;aw;a8e6i5ladivost5Molgogr6L;en3lni6S;ni22r5;o3saill4N;lenc4Wncouv3Sr3ughn;lan bat1Crumqi,trecht;aFbilisi,eEheDiBo9r7u5;l21n63r5;in,ku;i5ondh62;es51poli;kyo,m2Zron1Pulo5;n,uS;an5jua3l2Tmisoa6Bra3;j4Tshui; hag62ssaloni2H;gucigal26hr0l av1U;briz,i6llinn,mpe56ng5rtu,shk2R;i3Esh0;an,chu1n0p2Eyu0;aEeDh8kopje,owe1Gt7u5;ra5zh4X;ba0Ht;aten is55ockholm,rasbou67uttga2V;an8e6i5;jiazhua1llo1m5Xy0;f50n5;ya1zh4H;gh3Kt4Q;att45o1Vv44;cramen16int ClBn5o paulo,ppo3Rrajevo; 7aa,t5;a 5o domin3E;a3fe,m1M;antonio,die3Cfrancisco,j5ped3Nsalvad0J;o5u0;se;em,t lake ci5Fz25;lou58peters24;a9e8i6o5;me,t59;ga,o5yadh;! de janei3F;cife,ims,nn3Jykjavik;b4Sip4lei2Inc2Pwalpindi;ingdao,u5;ez2i0Q;aFeEhDiCo9r7u6yong5;ya1;eb59ya1;a5etor3M;g52to;rt5zn0; 5la4Co;au prin0Melizabe24sa03;ls3Prae5Atts26;iladelph3Gnom pe1Aoenix;ki1tah tik3E;dua,lerYnaji,r4Ot5;na,r32;ak44des0Km1Mr6s5ttawa;a3Vlo;an,d06;a7ew5ing2Fovosibir1Jyc; 5cast36;del24orlea44taip14;g8iro4Wn5pl2Wshv33v0;ch6ji1t5;es,o1;a1o1;a6o5p4;ya;no,sa0W;aEeCi9o6u5;mb2Ani26sc3Y;gadishu,nt6s5;c13ul;evideo,pelli1Rre2Z;ami,l6n14s5;kolc,sissauga;an,waukee;cca,d5lbour2Mmph41ndo1Cssi3;an,ell2Xi3;cau,drAkass2Sl9n8r5shh4A;aca6ib5rakesh,se2L;or;i1Sy;a4EchFdal0Zi47;mo;id;aDeAi8o6u5vSy2;anMckn0Odhia3;n5s angel26;d2g bea1N;brev2Be3Lma5nz,sb2verpo28;!ss27; ma39i5;c5pzig;est16; p6g5ho2Wn0Cusan24;os;az,la33;aHharFiClaipeBo9rak0Du7y5;iv,o5;to;ala lump4n5;mi1sh0;hi0Hlka2Xpavog4si5wlo2;ce;da;ev,n5rkuk;gst2sha5;sa;k5toum;iv;bHdu3llakuric0Qmpa3Fn6ohsiu1ra5un1Iwaguc0Q;c0Pj;d5o,p4;ah1Ty;a7e6i5ohannesV;l1Vn0;dd36rusalem;ip4k5;ar2H;bad0mph1OnArkutUs7taXz5;mir,tapala5;pa;fah0l6tanb5;ul;am2Zi2H;che2d5;ianap2Mo20;aAe7o5yder2W; chi mi5ms,nolulu;nh;f6lsin5rakli2;ki;ei;ifa,lifax,mCn5rb1Dva3;g8nov01oi;aFdanEenDhCiPlasgBo9raz,u5;a5jr23;dal6ng5yaquil;zh1J;aja2Oupe;ld coa1Bthen5;bu2S;ow;ent;e0Uoa;sk;lw7n5za;dhi5gt1E;nag0U;ay;aisal29es,o8r6ukuya5;ma;ankfu5esno;rt;rt5sh0; wor6ale5;za;th;d5indhov0Pl paso;in5mont2;bur5;gh;aBe8ha0Xisp4o7resd0Lu5;b5esseldorf,nkirk,rb0shanbe;ai,l0I;ha,nggu0rtmu13;hradSl6nv5troit;er;hi;donghIe6k09l5masc1Zr es sala1KugavpiY;i0lU;gu,je2;aJebu,hAleve0Vo5raio02uriti1Q;lo7n6penhag0Ar5;do1Ok;akKst0V;gUm5;bo;aBen8i6ongqi1ristchur5;ch;ang m7ca5ttago1;go;g6n5;ai;du,zho1;ng5ttogr14;ch8sha,zh07;gliari,i9lga8mayenJn6pe town,r5tanO;acCdiff;ber1Ac5;un;ry;ro;aWeNhKirmingh0WoJr9u5;chareTdapeTenos air7r5s0tu0;g5sa;as;es;a9is6usse5;ls;ba6t5;ol;ne;sil8tisla7zzav5;il5;le;va;ia;goZst2;op6ubaneshw5;ar;al;iCl9ng8r5;g6l5n;in;en;aluru,hazi;fa6grade,o horizon5;te;st;ji1rut;ghd0BkFn9ot8r7s6yan n4;ur;el,r07;celo3i,ranquil09;ou;du1g6ja lu5;ka;alo6k5;ok;re;ng;ers5u;field;a05b02cc01ddis aba00gartaZhmedXizawl,lSmPnHqa00rEsBt7uck5;la5;nd;he7l5;an5;ta;ns;h5unci2;dod,gab5;at;li5;ngt2;on;a8c5kaOtwerp;hora6o3;na;ge;h7p5;ol5;is;eim;aravati,m0s5;terd5;am; 7buquerq6eppo,giers,ma5;ty;ue;basrah al qadim5mawsil al jadid5;ah;ab5;ad;la;ba;ra;idj0u dha5;bi;an;lbo6rh5;us;rg",Region:"true¦0:2O;1:2L;2:2U;3:2F;a2Sb2Fc21d1Wes1Vf1Tg1Oh1Ki1Fj1Bk16l13m0Sn09o07pYqVrSsJtEuBverAw6y4zacatec2W;akut0o0Fu4;cat1k09;a5est 4isconsin,yomi1O;bengal,virgin0;rwick3shington4;! dc;acruz,mont;dmurt0t4;ah,tar4; 2Pa12;a6e5laxca1Vripu21u4;scaEva;langa2nnessee,x2J;bas10m4smQtar29;aulip2Hil nadu;a9elang07i7o5taf16u4ylh1J;ff02rr09s1E;me1Gno1Uuth 4;cZdY;ber0c4kkim,naloa;hu1ily;n5rawak,skatchew1xo4;ny; luis potosi,ta catari2;a4hodeA;j4ngp0C;asth1shahi;ingh29u4;e4intana roo;bec,en6retaro;aAe6rince edward4unjab; i4;sl0G;i,n5r4;ak,nambu0F;a0Rnsylv4;an0;ha0Pra4;!na;axa0Zdisha,h4klaho21ntar4reg7ss0Dx0I;io;aLeEo6u4;evo le4nav0X;on;r4tt18va scot0;f9mandy,th4; 4ampton3;c6d5yo4;rk3;ako1O;aroli2;olk;bras1Nva0Dw4; 6foundland4;! and labrad4;or;brunswick,hamp3jers5mexiTyork4;! state;ey;galPyarit;aAeghala0Mi6o4;nta2r4;dov0elos;ch6dlanDn5ss4zor11;issippi,ouri;as geraPneso18;ig1oac1;dhy12harasht0Gine,lac07ni5r4ssachusetts;anhao,i el,ylG;p4toba;ur;anca3e4incoln3ouisI;e4iR;ds;a6e5h4omi;aka06ul2;dah,lant1ntucky,ra01;bardino,lmyk0ns0Qr4;achay,el0nata0X;alis6har4iangxi;kh4;and;co;daho,llino7n4owa;d5gush4;et0;ia2;is;a6ert5i4un1;dalFm0D;ford3;mp3rya2waii;ansu,eorg0lou7oa,u4;an4izhou,jarat;ajuato,gdo4;ng;cester3;lori4uji1;da;sex;ageUe7o5uran4;go;rs4;et;lawaMrby3;aFeaEh9o4rim08umbr0;ahui7l6nnectic5rsi4ventry;ca;ut;i03orado;la;e5hattisgarh,i4uvash0;apRhuahua;chn5rke4;ss0;ya;ra;lGm4;bridge3peche;a9ihar,r8u4;ck4ryat0;ingham3;shi4;re;emen,itish columb0;h0ja cal8lk7s4v7;hkorto4que;st1;an;ar0;iforn0;ia;dygHguascalientes,lBndhr9r5ss4;am;izo2kans5un4;achal 7;as;na;a 4;pradesh;a6ber5t4;ai;ta;ba5s4;ka;ma;ea",Place:"true¦0:4T;1:4V;2:44;3:4B;4:3I;a4Eb3Gc2Td2Ge26f25g1Vh1Ji1Fk1Cl14m0Vn0No0Jp08r04sTtNuLvJw7y5;a5o0Syz;kut1Bngtze;aDeChitBi9o5upatki,ycom2P;ki26o5;d5l1B;b3Ps5;i4to3Y;c0SllowbroCn5;c2Qgh2;by,chur1P;ed0ntw3Gs22;ke6r3St5;erf1f1; is0Gf3V;auxha3Mirgin is0Jost5;ok;laanbaatar,pto5xb3E;n,wn;a9eotihuac43h7ive49o6ru2Nsarskoe selo,u5;l2Dzigo47;nto,rquay,tt2J;am3e 5orn3E;bronx,hamptons;hiti,j mah0Iu1N;aEcotts bluff,eCfo,herbroQoApring9t7u5yd2F;dbu1Wn5;der03set3B;aff1ock2Nr5;atf1oud;hi37w24;ho,uth5; 1Iam1Zwo3E;a5i2O;f2Tt0;int lawrence riv3Pkhal2D;ayleigh,ed7i5oc1Z;chmo1Eo gran4ver5;be1Dfr09si4; s39cliffe,hi2Y;aCe9h8i5ompeii,utn2;c6ne5tcai2T; 2Pc0G;keri13t0;l,x;k,lh2mbr6n5r2J;n1Hzance;oke;cif38pahanaumokuak30r5;k5then0;si4w1K;ak7r6x5;f1l2X;ange county,d,f1inoco;mTw1G;e8i1Uo5;r5tt2N;th5wi0E; 0Sam19;uschwanste1Pw5; eng6a5h2market,po36;rk;la0P;a8co,e6i5uc;dt1Yll0Z;adow5ko0H;lands;chu picchu,gad2Ridsto1Ql8n7ple6r5;kh2; g1Cw11;hatt2Osf2B;ibu,t0ve1Z;a8e7gw,hr,in5owlOynd02;coln memori5dl2C;al;asi4w3;kefr7mbe1On5s,x;ca2Ig5si05;f1l27t0;ont;azan kreml14e6itchen2Gosrae,rasnoyar5ul;sk;ns0Hs1U;ax,cn,lf1n6ps5st;wiN;d5glew0Lverness;ian27ochina;aDeBi6kg,nd,ov5unti2H;d,enweep;gh6llc5;reL;bu03l5;and5;!s;r5yw0C;ef1tf1;libu24mp6r5stings;f1lem,row;stead,t0;aDodavari,r5uelph;avenAe5imsS;at 8en5; 6f1Fwi5;ch;acr3vall1H;brita0Flak3;hur5;st;ng3y villa0W;airhavHco,ra;aAgli9nf17ppi8u7ver6x5;et1Lf1;glad3t0;rope,st0;ng;nt0;rls1Ls5;t 5;e5si4;nd;aCe9fw,ig8o7ryd6u5xb;mfri3nstab00rh2tt0;en;nca18rcKv19wnt0B;by;n6r5vonpo1D;ry;!h2;nu8r5;l6t5;f1moor;ingt0;be;aLdg,eIgk,hClBo5royd0;l6m5rnwa0B;pt0;c7lingw6osse5;um;ood;he0S;earwat0St;a8el6i5uuk;chen itza,mney ro07natSricahua;m0Zt5;enh2;mor5rlottetPth2;ro;dar 5ntervilA;breaks,faZg5;rove;ld9m8r5versh2;lis6rizo pla5;in;le;bLpbellf1;weQ;aZcn,eNingl01kk,lackLolt0r5uckV;aGiAo5;ckt0ok5wns cany0;lyn,s5;i4to5;ne;de;dge6gh5;am,t0;n6t5;own;or5;th;ceb6m5;lNpt0;rid5;ge;bu5pool,wa8;rn;aconsfEdf1lBr9verly7x5;hi5;ll; hi5;lls;wi5;ck; air,l5;ingh2;am;ie5;ld;ltimore,rnsl6tters5;ea;ey;bLct0driadic,frica,ginJlGmFn9rc8s7tl6yleOzor3;es;!ant8;hcroft,ia; de triomphe,t6;adyr,ca8dov9tarct5;ic5; oce5;an;st5;er;ericas,s;be6dersh5hambra,list0;ot;rt0;cou5;rt;bot7i5;ngd0;on;sf1;ord",Country:"true¦0:38;1:2L;2:3B;a2Xb2Ec22d1Ye1Sf1Mg1Ch1Ai14j12k0Zl0Um0Gn05om2pZqat1KrXsKtCu7v5wal4yemTz3;a25imbabwe;es,lis and futu2Y;a3enezue32ietnam;nuatu,tican city;gTk6nited 4ruXs3zbeE; 2Ca,sr;arab emirat0Kkingdom,states3;! of am2Y;!raiV;a8haCimor les0Co7rinidad 5u3;nis0rk3valu;ey,me2Zs and caic1V;and t3t3;oba1L;go,kel10nga;iw2ji3nz2T;ki2V;aDcotl1eCi9lov8o6pa2Dri lanka,u5w3yr0;az3edAitzerl1;il1;d2riname;lomon1Xmal0uth 3;afr2KkMsud2;ak0en0;erra leoFn3;gapo1Yt maart3;en;negLrb0ychellZ;int 3moa,n marino,udi arab0;hele26luc0mart21;epublic of ir0Eom2Euss0w3;an27;a4eIhilippinUitcairn1Mo3uerto riN;l1rtugF;ki2Dl4nama,pua new0Vra3;gu7;au,esti3;ne;aBe9i7or3;folk1Ith4w3;ay; k3ern mariana1D;or0O;caragua,ger3ue;!ia;p3ther1Aw zeal1;al;mib0u3;ru;a7exi6icro0Bo3yanm06;ldova,n3roc5zambA;a4gol0t3;enegro,serrat;co;cAdagasc01l7r5urit4yot3;te;an0i16;shall0Xtin3;ique;a4div3i,ta;es;wi,ys0;ao,ed02;a6e5i3uxembourg;b3echtenste12thu1G;er0ya;ban0Isotho;os,tv0;azakh1Fe4iriba04o3uwait,yrgyz1F;rXsovo;eling0Knya;a3erG;ma16p2;c7nd6r4s3taly,vory coast;le of m2rael;a3el1;n,q;ia,oJ;el1;aiTon3ungary;dur0Ng kong;aBermany,ha0QibraltAre8u3;a6ern5inea3ya0P;! biss3;au;sey;deloupe,m,tema0Q;e3na0N;ce,nl1;ar;bUmb0;a7i6r3;ance,ench 3;guia0Epoly3;nes0;ji,nl1;lklandUroeU;ast tim7cu6gypt,l salv6ngl1quatorial4ritr5st3thiop0;on0; guin3;ea;ad3;or;enmark,jibou5ominica4r con3;go;!n C;ti;aBentral african Ah8o5roat0u4yprRzech3; 9ia;ba,racao;c4lo3morQngo brazzaville,okGsta r04te de ivoiL;mb0;osE;i3ristmasG;le,na;republic;m3naUpe verde,ymanA;bod0ero3;on;aGeDhut2o9r5u3;lgar0r3;kina faso,ma,undi;azil,itish 3unei;virgin3; is3;lands;liv0nai5snia and herzegoviHtswaHuvet3; isl1;and;re;l3n8rmuG;ar3gium,ize;us;h4ngladesh,rbad3;os;am4ra3;in;as;fghaGlDmBn6r4ustr3zerbaij2;al0ia;genti3men0uba;na;dorra,g5t3;arct7igua and barbu3;da;o3uil3;la;er3;ica;b3ger0;an0;ia;ni3;st2;an",FirstName:"true¦aTblair,cQdOfrancoZgabMhinaLilya,jHkClBm6ni4quinn,re3s0;h0umit,yd;ay,e0iloh;a,lby;g9ne;co,ko0;!s;a1el0ina,org6;!okuhF;ds,naia,r1tt0xiB;i,y;ion,lo;ashawn,eif,uca;a3e1ir0rM;an;lsFn0rry;dall,yat5;i,sD;a0essIie,ude;i1m0;ie,mG;me;ta;rie0y;le;arcy,ev0;an,on;as1h0;arl8eyenne;ey,sidy;drien,kira,l4nd1ubr0vi;ey;i,r0;a,e0;a,y;ex2f1o0;is;ie;ei,is",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦dec0february,july,nov0octo1sept0;em0;ber",Date:"true¦ago,on4som4t1week0yesterd5; end,ends;mr1o0;d2morrow;!w;ed0;ay",Duration:"true¦centurAd8h7m5q4se3w1y0;ear8r8;eek0k7;!end,s;ason,c5;tr,uarter;i0onth3;llisecond2nute2;our1r1;ay0ecade0;!s;ies,y",FemaleName:"true¦0:J7;1:JB;2:IJ;3:IK;4:J1;5:IO;6:JS;7:JO;8:HB;9:JK;A:H4;B:I2;C:IT;D:JH;E:IX;F:BA;G:I4;aGTbFLcDRdD0eBMfB4gADh9Ti9Gj8Dk7Cl5Wm48n3Lo3Hp33qu32r29s15t0Eu0Cv02wVxiTyOzH;aLeIineb,oHsof3;e3Sf3la,ra;h2iKlIna,ynH;ab,ep;da,ma;da,h2iHra;nab;aKeJi0FolB7uIvH;et8onDP;i0na;le0sen3;el,gm3Hn,rGLs8W;aoHme0nyi;m5XyAD;aMendDZhiDGiH;dele9lJnH;if48niHo0;e,f47;a,helmi0lHma;a,ow;ka0nB;aNeKiHusa5;ck84kIl8oleAviH;anFenJ4;ky,toriBK;da,lA8rHs0;a,nHoniH9;a,iFR;leHnesH9;nILrH;i1y;g9rHs6xHA;su5te;aYeUhRiNoLrIuHy2;i,la;acJ3iHu0J;c3na,sH;hFta;nHr0F;iFya;aJffaEOnHs6;a,gtiH;ng;!nFSra;aIeHomasi0;a,l9Oo8Ares1;l3ndolwethu;g9Fo88rIssH;!a,ie;eHi,ri7;sa,za;bOlMmKnIrHs6tia0wa0;a60yn;iHya;a,ka,s6;arFe2iHm77ra;!ka;a,iH;a,t6;at6it6;a0Ecarlett,e0AhWiSkye,neza0oQri,tNuIyH;bIGlvi1;ha,mayIJniAsIzH;an3Net8ie,y;anHi7;!a,e,nH;aCe;aIeH;fan4l5Dphan6E;cI5r5;b3fiAAm0LnHphi1;d2ia,ja,ya;er2lJmon1nIobh8QtH;a,i;dy;lETv3;aMeIirHo0risFDy5;a,lDM;ba,e0i5lJrH;iHr6Jyl;!d8Ifa;ia,lDZ;hd,iMki2nJrIu0w0yH;la,ma,na;i,le9on,ron,yn;aIda,ia,nHon;a,on;!ya;k6mH;!aa;lJrItaye82vH;da,inj;e0ife;en1i0ma;anA9bLd5Oh1SiBkKlJmInd2rHs6vannaC;aCi0;ant6i2;lDOma,ome;ee0in8Tu2;in1ri0;a05eZhXiUoHuthDM;bScRghQl8LnPsJwIxH;anB3ie,y;an,e0;aIeHie,lD;ann7ll1marDGtA;!lHnn1;iHyn;e,nH;a,dF;da,i,na;ayy8G;hel67io;bDRerAyn;a,cIkHmas,nFta,ya;ki,o;h8Xki;ea,iannGMoH;da,n1P;an0bJemFgi0iInHta,y0;a8Bee;han86na;a,eH;cHkaC;a,ca;bi0chIe,i0mo0nHquETy0;di,ia;aERelHiB;!e,le;een4ia0;aPeOhMiLoJrHute6A;iHudenCV;scil3LyamvaB;lHrt3;i0ly;a,paluk;ilome0oebe,ylH;is,lis;ggy,nelope,r5t2;ige,m0VnKo5rvaDMtIulH;a,et8in1;ricHt4T;a,e,ia;do2i07;ctav3dIfD3is6ksa0lHphD3umC5yunbileg;a,ga,iv3;eHvAF;l3t8;aWeUiMoIurHy5;!ay,ul;a,eJor,rIuH;f,r;aCeEma;ll1mi;aNcLhariBQkKlaJna,sHta,vi;anHha;ur;!y;a,iDZki;hoGk9YolH;a,e4P;!mh;hir,lHna,risDEsreE;!a,iDDlBV;asuMdLh3i6Dl5nKomi7rgEVtH;aHhal4;lHs6;i1ya;cy,et8;e9iF0ya;nngu2X;a0Ackenz4e02iMoJrignayani,uriDJyH;a,rH;a,iOlNna,tG;bi0i2llBJnH;a,iH;ca,ka,qD9;a,cUdo4ZkaTlOmi,nMrItzi,yH;ar;aJiIlH;anET;am;!l,nB;dy,eHh,n4;nhGrva;aKdJe0iCUlH;iHy;cent,e;red;!gros;!e5;ae5hH;ae5el3Z;ag5DgNi,lKrH;edi7AiIjem,on,yH;em,l;em,sCG;an4iHliCF;nHsCJ;a,da;!an,han;b09cASd07e,g05ha,i04ja,l02n00rLsoum5YtKuIv84xBKyHz4;bell,ra,soBB;d7rH;a,eE;h8Gild1t4;a,cUgQiKjor4l7Un4s6tJwa,yH;!aHbe6Xja9lAE;m,nBL;a,ha,in1;!aJbCGeIja,lDna,sHt63;!a,ol,sa;!l1D;!h,mInH;!a,e,n1;!awit,i;arJeIie,oHr48ueri8;!t;!ry;et46i3B;el4Xi7Cy;dHon,ue5;akranAy;ak,en,iHlo3S;a,ka,nB;a,re,s4te;daHg4;!l3E;alDd4elHge,isDJon0;ei9in1yn;el,le;a0Ne0CiXoQuLyH;d3la,nH;!a,dIe2OnHsCT;!a,e2N;a,sCR;aD4cJel0Pis1lIna,pHz;e,iA;a,u,wa;iHy;a0Se,ja,l2NnB;is,l1UrItt1LuHvel4;el5is1;aKeIi7na,rH;aADi7;lHn1tA;ei;!in1;aTbb9HdSepa,lNnKsJvIzH;!a,be5Ret8z4;!ia;a,et8;!a,dH;a,sHy;ay,ey,i,y;a,iJja,lH;iHy;aA8e;!aH;!nF;ia,ya;!nH;!a,ne;aPda,e0iNjYla,nMoKsJtHx93y5;iHt4;c3t3;e2PlCO;la,nHra;a,ie,o2;a,or1;a,gh,laH;!ni;!h,nH;a,d2e,n5V;cOdon9DiNkes6mi9Gna,rMtJurIvHxmi,y5;ern1in3;a,e5Aie,yn;as6iIoH;nya,ya;fa,s6;a,isA9;a,la;ey,ie,y;a04eZhXiOlASoNrJyH;lHra;a,ee,ie;istHy6I;a,en,iIyH;!na;!e,n5F;nul,ri,urtnB8;aOerNlB7mJrHzzy;a,stH;en,in;!berlImernH;aq;eHi,y;e,y;a,stE;!na,ra;aHei2ongordzol;dij1w5;el7UiKjsi,lJnIrH;a,i,ri;d2na,za;ey,i,lBLs4y;ra,s6;biAcARdiat7MeBAiSlQmPnyakuma1DrNss6NtKviAyH;!e,lH;a,eH;e,i8T;!a6HeIhHi4TlDri0y;ar8Her8Hie,leErBAy;!lyn8Ori0;a,en,iHl5Xoli0yn;!ma,nFs95;a5il1;ei8Mi,lH;e,ie;a,tl6O;a0AeZiWoOuH;anMdLlHst88;es,iH;a8NeHs8X;!n9tH;!a,te;e5Mi3My;a,iA;!anNcelDdMelGhan7VleLni,sIva0yH;a,ce;eHie;fHlDph7Y;a,in1;en,n1;i7y;!a,e,n45;lHng;!i1DlH;!i1C;anNle0nKrJsH;i8JsH;!e,i8I;i,ri;!a,elGif2CnH;a,et8iHy;!e,f2A;a,eJiInH;a,eIiH;e,n1;!t8;cMda,mi,nIque4YsminFvie2y9zH;min7;a7eIiH;ce,e,n1s;!lHs82t0F;e,le;inIk6HlDquelH;in1yn;da,ta;da,lRmPnOo0rNsIvaHwo0zaro;!a0lu,na;aJiIlaHob89;!n9R;do2;belHdo2;!a,e,l3B;a7Ben1i0ma;di2es,gr72ji;a9elBogH;en1;a,e9iHo0se;a0na;aSeOiJoHus7Kyacin2C;da,ll4rten24snH;a,i9U;lImaH;ri;aIdHlaI;a,egard;ry;ath1BiJlInrietArmi9sH;sa,t1A;en2Uga,mi;di;bi2Fil8MlNnMrJsItHwa,yl8M;i5Tt4;n60ti;iHmo51ri53;etH;!te;aCnaC;a,ey,l4;a02eWiRlPoNrKunJwH;enHyne1R;!dolD;ay,el;acieIetHiselB;a,chE;!la;ld1CogooH;sh;adys,enHor3yn2K;a,da,na;aKgi,lIna,ov8EselHta;a,e,le;da,liH;an;!n0;mLnJorgIrH;ald5Si,m3Etrud7;et8i4X;a,eHna;s29vieve;ma;bIle,mHrnet,yG;al5Si5;iIrielH;a,l1;!ja;aTeQiPlorOoz3rH;anJeIiH;da,eB;da,ja;!cH;esIiHoi0P;n1s66;!ca;a,enc3;en,o0;lIn0rnH;anB;ec3ic3;jr,nArKtHy7;emIiHma,oumaA;ha,ma,n;eh;ah,iBrah,za0;cr4Rd0Re0Qi0Pk0Ol07mXn54rUsOtNuMvHwa;aKelIiH;!e,ta;inFyn;!a;!ngel4V;geni1ni47;h5Yien9ta;mLperanKtH;eIhHrel5;er;l31r7;za;a,eralB;iHma,ne4Lyn;cHka,n;a,ka;aPeNiKmH;aHe21ie,y;!li9nuH;elG;lHn1;e7iHy;a,e,ja;lHrald;da,y;!nue5;aWeUiNlMma,no2oKsJvH;a,iH;na,ra;a,ie;iHuiH;se;a,en,ie,y;a0c3da,e,f,nMsJzaH;!betHveA;e,h;aHe,ka;!beH;th;!a,or;anor,nH;!a,i;!in1na;ate1Rta;leEs6;vi;eIiHna,wi0;e,th;l,n;aYeMh3iLjeneKoH;lor5Vminiq4Ln3FrHtt4;a,eEis,la,othHthy;ea,y;ba;an09naCon9ya;anQbPde,eOiMlJmetr3nHsir5M;a,iH;ce,se;a,iIla,orHphi9;es,is;a,l6F;dHrdH;re;!d5Ena;!b2ForaCraC;a,d2nH;!a,e;hl3i0l0GmNnLphn1rIvi1WyH;le,na;a,by,cIia,lH;a,en1;ey,ie;a,et8iH;!ca,el1Aka,z;arHia;is;a0Re0Nh04i02lUoJristIynH;di,th3;al,i0;lPnMrIurH;tn1D;aJd2OiHn2Ori9;!nH;a,e,n1;!l4;cepci5Cn4sH;tanHuelo;ce,za;eHleE;en,t8;aJeoIotH;il54;!pat2;ir7rJudH;et8iH;a,ne;a,e,iH;ce,sZ;a2er2ndH;i,y;aReNloe,rH;isJyH;stH;al;sy,tH;a1Sen,iHy;an1e,n1;deJlseIrH;!i7yl;a,y;li9;nMrH;isKlImH;ai9;a,eHot8;n1t8;!sa;d2elGtH;al,elG;cIlH;es8i47;el3ilH;e,ia,y;itlYlXmilWndVrMsKtHy5;aIeIhHri0;er1IleErDy;ri0;a38sH;a37ie;a,iOlLmeJolIrH;ie,ol;!e,in1yn;lHn;!a,la;a,eIie,otHy;a,ta;ne,y;na,s1X;a0Ii0I;a,e,l1;isAl4;in,yn;a0Ke02iZlXoUrH;andi7eRiJoIyH;an0nn;nwDoke;an3HdgMgiLtH;n31tH;!aInH;ey,i,y;ny;d,t8;etH;!t7;an0e,nH;da,na;bbi7glarIlo07nH;iAn4;ka;ancHythe;a,he;an1Clja0nHsm3M;iAtH;ou;aWcVlinUniArPssOtJulaCvH;!erlH;ey,y;hJsy,tH;e,iHy7;e,na;!anH;ie,y;!ie;nItHyl;ha,ie;adIiH;ce;et8i9;ay,da;ca,ky;!triH;ce,z;rbJyaH;rmH;aa;a2o2ra;a2Ub2Od25g21i1Sj5l18m0Zn0Boi,r06sWtVuPvOwa,yIzH;ra,u0;aKes6gJlIn,seH;!l;in;un;!nH;a,na;a,i2K;drLguJrIsteH;ja;el3;stH;in1;a,ey,i,y;aahua,he0;hIi2Gja,miAs2DtrH;id;aMlIraqHt21;at;eIi7yH;!n;e,iHy;gh;!nH;ti;iJleIo6piA;ta;en,n1t8;aHelG;!n1J;a01dje5eZgViTjRnKohito,toHya;inet8nH;el5ia;te;!aKeIiHmJ;e,ka;!mHtt7;ar4;!belIliHmU;sa;!l1;a,eliH;ca;ka,sHta;a,sa;elHie;a,iH;a,ca,n1qH;ue;!tH;a,te;!bImHstasiMya;ar3;el;aLberKeliJiHy;e,l3naH;!ta;a,ja;!ly;hGiIl3nB;da;a,ra;le;aWba,ePiMlKthJyH;a,c3sH;a,on,sa;ea;iHys0N;e,s0M;a,cIn1sHza;a,e,ha,on,sa;e,ia,ja;c3is6jaKksaKna,sJxH;aHia;!nd2;ia,saH;nd2;ra;ia;i0nIyH;ah,na;a,is,naCoud;la;c6da,leEmNnLsH;haClH;inHyY;g,n;!h;a,o,slH;ey;ee;en;at6g4nIusH;ti0;es;ie;aWdiTelMrH;eJiH;anMenH;a,e,ne;an0;na;!aLeKiIyH;nn;a,n1;a,e;!ne;!iH;de;e,lDsH;on;yn;!lH;i9yn;ne;aKbIiHrL;!e,gaK;ey,i7y;!e;gaH;il;dKliyJradhIs6;ha;ya;ah;a,ya",Honorific:"true¦director1field marsh2lieutenant1rear0sergeant major,vice0; admir1; gener0;al","Adj|Gerund":"true¦0:3F;1:3H;2:31;3:2X;4:35;5:33;6:3C;7:2Z;8:36;9:29;a33b2Tc2Bd1Te1If19g12h0Zi0Rl0Nm0Gnu0Fo0Ap04rYsKtEuBvAw1Ayiel3;ar6e08;nBpA;l1Rs0B;fol3n1Zsett2;aEeDhrBi4ouc7rAwis0;e0Bif2oub2us0yi1;ea1SiA;l2vi1;l2mp0rr1J;nt1Vxi1;aMcreec7enten2NhLkyrocke0lo0Vmi2oJpHtDuBweA;e0Ul2;pp2ArA;gi1pri5roun3;aBea8iAri2Hun9;mula0r4;gge4rA;t2vi1;ark2eAraw2;e3llb2F;aAot7;ki1ri1;i9oc29;dYtisf6;aEeBive0oAus7;a4l2;assu4defi9fres7ig9juve07mai9s0vAwar3;ea2italiAol1G;si1zi1;gi1ll6mb2vi1;a6eDier23lun1VrAun2C;eBoA;mi5vo1Z;ce3s5vai2;n3rpleA;xi1;ffCpWutBverAwi1;arc7lap04p0Pri3whel8;goi1l6st1J;en3sA;et0;m2Jrtu4;aEeDiCoBuAyst0L;mb2;t1Jvi1;s5tiga0;an1Rl0n3smeri26;dAtu4;de9;aCeaBiAo0U;fesa0Tvi1;di1ni1;c1Fg19s0;llumiGmFnArri0R;cDfurHsCtBviA;go23ti1;e1Oimi21oxica0rig0V;pi4ul0;orpo20r0K;po5;na0;eaBorr02umilA;ia0;li1rtwar8;lFrA;atiDipCoBuelA;i1li1;undbrea10wi1;pi1;f6ng;a4ea8;a3etc7it0lEoCrBulfA;il2;ee1FighXust1L;rAun3;ebo3thco8;aCoA;a0wA;e4i1;mi1tte4;lectrJmHnExA;aCci0hBis0pA;an3lo3;aOila1B;c0spe1A;ab2coura0CdBergi13ga0Clive9ric7s02tA;hral2i0J;ea4u4;barras5er09pA;owe4;if6;aQeIiBrA;if0;sAzz6;aEgDhearCsen0tA;rAur11;ac0es5;te9;us0;ppoin0r8;biliGcDfi9gra3ligh0mBpres5sAvasG;erE;an3ea9orA;ali0L;a6eiBli9rA;ea5;vi1;ta0;maPri1s7un0zz2;aPhMlo5oAripp2ut0;mGnArrespon3;cer9fDspi4tA;inBrA;as0ibu0ol2;ui1;lic0u5;ni1;fDmCpA;eAromi5;l2ti1;an3;or0;aAil2;llenAnAr8;gi1;l8ptAri1;iva0;aff2eGin3lFoDrBuA;d3st2;eathtaAui5;ki1;gg2i2o8ri1unA;ci1;in3;co8wiA;lAtc7;de4;bsorVcOgonMlJmHnno6ppea2rFsA;pi4su4toA;nBun3;di1;is7;hi1;res0;li1;aFu5;si1;ar8lu4;ri1;mi1;iAzi1;zi1;cAhi1;eleDomA;moBpan6;yi1;da0;ra0;ti1;bi1;ng",Comparable:"true¦0:3C;1:3Q;2:3F;a3Tb3Cc33d2Te2Mf2Ag1Wh1Li1Fj1Ek1Bl13m0Xn0So0Rp0Iqu0Gr07sHtCug0vAw4y3za0Q;el10ouN;ary,e6hi5i3ry;ck0Cde,l3n1ry,se;d,y;ny,te;a3i3R;k,ry;a3erda2ulgar;gue,in,st;a6en2Xhi5i4ouZr3;anqu2Cen1ue;dy,g36me0ny;ck,rs28;ll,me,rt,wd3I;aRcaPeOhMiLkin0BlImGoEpDt6u4w3;eet,ift;b3dd0Wperfi21rre28;sta26t21;a8e7iff,r4u3;pUr1;a4ict,o3;ng;ig2Vn0N;a1ep,rn;le,rk,te0;e1Si2Vright0;ci1Yft,l3on,re;emn,id;a3el0;ll,rt;e4i3y;g2Mm0Z;ek,nd2T;ck24l0mp1L;a3iRrill,y;dy,l01rp;ve0Jxy;n1Jr3;ce,y;d,fe,int0l1Hv0V;a8e6i5o3ude;mantic,o19sy,u3;gh;pe,t1P;a3d,mo0A;dy,l;gg4iFndom,p3re,w;id;ed;ai2i3;ck,et;hoAi1Fl9o8r5u3;ny,r3;e,p11;egna2ic4o3;fouSud;ey,k0;liXor;ain,easa2;ny;dd,i0ld,ranL;aive,e5i4o3u14;b0Sisy,rm0Ysy;bb0ce,mb0R;a3r1w;r,t;ad,e5ild,o4u3;nda12te;ist,o1;a4ek,l3;low;s0ty;a8e7i6o3ucky;f0Jn4o15u3ve0w10y0N;d,sy;e0g;ke0l,mp,tt0Eve0;e1Qwd;me,r3te;ge;e4i3;nd;en;ol0ui19;cy,ll,n3;secu6t3;e3ima4;llege2rmedia3;te;re;aAe7i6o5u3;ge,m3ng1C;bYid;me0t;gh,l0;a3fXsita2;dy,rWv3;en0y;nd13ppy,r3;d3sh;!y;aFenEhCiBlAoofy,r3;a8e6i5o3ue0Z;o3ss;vy;m,s0;at,e3y;dy,n;nd,y;ad,ib,ooD;a2d1;a3o3;st0;tDuiS;u1y;aCeebBi9l8o6r5u3;ll,n3r0N;!ny;aCesh,iend0;a3nd,rmD;my;at,ir7;erce,nan3;ci9;le;r,ul3;ty;a6erie,sse4v3xtre0B;il;nti3;al;r4s3;tern,y;ly,th0;appZe9i5ru4u3;mb;nk;r5vi4z3;zy;ne;e,ty;a3ep,n9;d3f,r;!ly;agey,h8l7o5r4u3;dd0r0te;isp,uel;ar3ld,mmon,st0ward0zy;se;evKou1;e3il0;ap,e3;sy;aHiFlCoAr5u3;ff,r0sy;ly;a6i3oad;g4llia2;nt;ht;sh,ve;ld,un3;cy;a4o3ue;nd,o1;ck,nd;g,tt3;er;d,ld,w1;dy;bsu6ng5we3;so3;me;ry;rd",Adverb:"true¦a08b05d00eYfSheQinPjustOkinda,likewiZmMnJoEpCquite,r9s5t2u0very,well;ltima01p0; to,wards5;h1iny bit,o0wiO;o,t6;en,us;eldom,o0uch;!me1rt0; of;how,times,w0C;a1e0;alS;ndomRth05;ar excellenEer0oint blank; Lhaps;f3n0utright;ce0ly;! 0;ag05moX; courGten;ewJo0; longWt 0;onHwithstand9;aybe,eanwhiNore0;!ovT;! aboX;deed,steY;lla,n0;ce;or3u0;ck1l9rther0;!moK;ing; 0evK;exampCgood,suH;n mas0vI;se;e0irect2; 2fini0;te0;ly;juAtrop;ackward,y 0;far,no0; means,w; GbroFd nauseam,gEl7ny5part,s4t 2w0;ay,hi0;le;be7l0mo7wor7;arge,ea6; soon,i4;mo0way;re;l 3mo2ongsi1ready,so,togeth0ways;er;de;st;b1t0;hat;ut;ain;ad;lot,posteriori",Conjunction:"true¦aXbTcReNhowMiEjust00noBo9p8supposing,t5wh0yet;e1il0o3;e,st;n1re0thN; if,by,vM;evL;h0il,o;erefOo0;!uU;lus,rovided th9;r0therwiM;! not; mattEr,w0;! 0;since,th4w7;f4n0; 0asmuch;as mIcaForder t0;h0o;at;! 0;only,t0w0;hen;!ev3;ith2ven0;! 0;if,tB;er;o0uz;s,z;e0ut,y the time;cau1f0;ore;se;lt3nd,s 0;far1if,m0soon1t2;uch0; as;hou0;gh",Currency:"true¦$,aud,bQcOdJeurIfHgbp,hkd,iGjpy,kElDp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotyQł;en,uanP;af,of;h0t5;e0il5;k0q0;elK;oubleJp,upeeJ;e2ound st0;er0;lingG;n0soF;ceEnies;empi7i7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!os;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;e0ny;nt1;aht,itcoin0;!s",Determiner:"true¦aBboth,d9e6few,le5mu8neiDplenty,s4th2various,wh0;at0ich0;evC;a0e4is,ose;!t;everal,ome;!ast,s;a1l0very;!se;ch;e0u;!s;!n0;!o0y;th0;er","Adj|Present":"true¦a07b04cVdQeNfJhollIidRlEmCnarrIoBp9qua8r7s3t2uttFw0;aKet,ro0;ng,u08;endChin;e2hort,l1mooth,our,pa9tray,u0;re,speU;i2ow;cu6da02leSpaN;eplica01i02;ck;aHerfePr0;eseUime,omV;bscu1pen,wn;atu0e3odeH;re;a2e1ive,ow0;er;an;st,y;ow;a2i1oul,r0;ee,inge;rm;iIke,ncy,st;l1mpty,x0;emHpress;abo4ic7;amp,e2i1oub0ry,ull;le;ffu9re6;fu8libe0;raE;alm,l5o0;mpleCn3ol,rr1unterfe0;it;e0u7;ct;juga8sum7;ea1o0;se;n,r;ankru1lu0;nt;pt;li2pproxi0rticula1;ma0;te;ght","Person|Adj":"true¦b3du2earnest,frank,mi2r0san1woo1;an0ich,u1;dy;sty;ella,rown",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to,a;ight,ust;an,o0;uld",Verb:"true¦born,cannot,gonna,has,keep tabs,msg","Person|Verb":"true¦b8ch7dr6foster,gra5ja9lan4ma2ni9ollie,p1rob,s0wade;kip,pike,t5ue;at,eg,ier2;ck,r0;k,shal;ce;ce,nt;ew;ase,u1;iff,l1ob,u0;ck;aze,ossom","Person|Date":"true¦a2j0sep;an0une;!uary;p0ugust,v0;ril"};const mo=36,po="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",fo=po.split("").reduce((function(e,t,n){return e[t]=n,e}),{});var bo=function(e){if(void 0!==fo[e])return fo[e];let t=0,n=1,r=mo,o=1;for(;n=0;n--,o*=mo){let r=e.charCodeAt(n)-48;r>10&&(r-=7),t+=r*o}return t};const vo=function(e,t,n){const r=bo(t);return r{let a=e.nodes[r];"!"===a[0]&&(t.push(o),a=a.slice(1));const i=a.split(/([A-Z0-9,]+)/g);for(let a=0;a{const t=function(e){if(!e)return{};const t=e.split("|").reduce(((e,t)=>{const n=t.split("¦");return e[n[0]]=n[1],e}),{}),n={};return Object.keys(t).forEach((function(e){const r=yo(t[e]);"true"===e&&(e=!0);for(let t=0;t{if(jo[t]=e,"Noun|Verb"===e){const e=Ao(t,xo);jo[e]="Plural|Verb"}})):Object.keys(t).forEach((t=>{No[t]=e}))})),[":(",":)",":P",":p",":O",";(",";)",";P",";p",";O",":3",":|",":/",":\\",":$",":*",":@",":-(",":-)",":-P",":-p",":-O",":-3",":-|",":-/",":-\\",":-$",":-*",":-@",":^(",":^)",":^P",":^p",":^O",":^3",":^|",":^/",":^\\",":^$",":^*",":^@","):","(:","$:","*:",")-:","(-:","$-:","*-:",")^:","(^:","$^:","*^:","<3","No[e]="Emoticon")),delete No[""],delete No.null,delete No[" "];const Io="Singular";var To={beforeTags:{Determiner:Io,Possessive:Io,Acronym:Io,Noun:Io,Adjective:Io,PresentTense:Io,Gerund:Io,PastTense:Io,Infinitive:Io,Date:Io,Ordinal:Io,Demonym:Io},afterTags:{Value:Io,Modal:Io,Copula:Io,PresentTense:Io,PastTense:Io,Demonym:Io,Actor:Io},beforeWords:{the:Io,with:Io,without:Io,of:Io,for:Io,any:Io,all:Io,on:Io,cut:Io,cuts:Io,increase:Io,decrease:Io,raise:Io,drop:Io,save:Io,saved:Io,saves:Io,make:Io,makes:Io,made:Io,minus:Io,plus:Io,than:Io,another:Io,versus:Io,neither:Io,about:Io,favorite:Io,best:Io,daily:Io,weekly:Io,linear:Io,binary:Io,mobile:Io,lexical:Io,technical:Io,computer:Io,scientific:Io,security:Io,government:Io,popular:Io,formal:Io,no:Io,more:Io,one:Io,let:Io,her:Io,his:Io,their:Io,our:Io,us:Io,sheer:Io,monthly:Io,yearly:Io,current:Io,previous:Io,upcoming:Io,last:Io,next:Io,main:Io,initial:Io,final:Io,beginning:Io,end:Io,top:Io,bottom:Io,future:Io,past:Io,major:Io,minor:Io,side:Io,central:Io,peripheral:Io,public:Io,private:Io},afterWords:{of:Io,system:Io,aid:Io,method:Io,utility:Io,tool:Io,reform:Io,therapy:Io,philosophy:Io,room:Io,authority:Io,says:Io,said:Io,wants:Io,wanted:Io,is:Io,did:Io,do:Io,can:Io,wise:Io}};const Do="Infinitive";var Ho={beforeTags:{Modal:Do,Adverb:Do,Negative:Do,Plural:Do},afterTags:{Determiner:Do,Adverb:Do,Possessive:Do,Reflexive:Do,Preposition:Do,Cardinal:Do,Comparative:Do,Superlative:Do},beforeWords:{i:Do,we:Do,you:Do,they:Do,to:Do,please:Do,will:Do,have:Do,had:Do,would:Do,could:Do,should:Do,do:Do,did:Do,does:Do,can:Do,must:Do,us:Do,me:Do,let:Do,even:Do,when:Do,help:Do,he:Do,she:Do,it:Do,being:Do,bi:Do,co:Do,contra:Do,de:Do,inter:Do,intra:Do,mis:Do,pre:Do,out:Do,counter:Do,nobody:Do,somebody:Do,anybody:Do,everybody:Do},afterWords:{the:Do,me:Do,you:Do,him:Do,us:Do,her:Do,his:Do,them:Do,they:Do,it:Do,himself:Do,herself:Do,itself:Do,myself:Do,ourselves:Do,themselves:Do,something:Do,anything:Do,a:Do,an:Do,up:Do,down:Do,by:Do,out:Do,off:Do,under:Do,what:Do,all:Do,to:Do,because:Do,although:Do,how:Do,otherwise:Do,together:Do,though:Do,into:Do,yet:Do,more:Do,here:Do,there:Do,away:Do}};const Eo={beforeTags:Object.assign({},Ho.beforeTags,To.beforeTags,{}),afterTags:Object.assign({},Ho.afterTags,To.afterTags,{}),beforeWords:Object.assign({},Ho.beforeWords,To.beforeWords,{}),afterWords:Object.assign({},Ho.afterWords,To.afterWords,{})},Go="Adjective";var Oo={beforeTags:{Determiner:Go,Possessive:Go,Hyphenated:Go},afterTags:{Adjective:Go},beforeWords:{seem:Go,seemed:Go,seems:Go,feel:Go,feels:Go,felt:Go,stay:Go,appear:Go,appears:Go,appeared:Go,also:Go,over:Go,under:Go,too:Go,it:Go,but:Go,still:Go,really:Go,quite:Go,well:Go,very:Go,truly:Go,how:Go,deeply:Go,hella:Go,profoundly:Go,extremely:Go,so:Go,badly:Go,mostly:Go,totally:Go,awfully:Go,rather:Go,nothing:Go,something:Go,anything:Go,not:Go,me:Go,is:Go,face:Go,faces:Go,faced:Go,look:Go,looks:Go,looked:Go,reveal:Go,reveals:Go,revealed:Go,sound:Go,sounded:Go,sounds:Go,remains:Go,remained:Go,prove:Go,proves:Go,proved:Go,becomes:Go,stays:Go,tastes:Go,taste:Go,smells:Go,smell:Go,gets:Go,grows:Go,as:Go,rings:Go,radiates:Go,conveys:Go,convey:Go,conveyed:Go,of:Go},afterWords:{too:Go,also:Go,or:Go,enough:Go,as:Go}};const Fo="Gerund";var Vo={beforeTags:{Adverb:Fo,Preposition:Fo,Conjunction:Fo},afterTags:{Adverb:Fo,Possessive:Fo,Person:Fo,Pronoun:Fo,Determiner:Fo,Copula:Fo,Preposition:Fo,Conjunction:Fo,Comparative:Fo},beforeWords:{been:Fo,keep:Fo,continue:Fo,stop:Fo,am:Fo,be:Fo,me:Fo,began:Fo,start:Fo,starts:Fo,started:Fo,stops:Fo,stopped:Fo,help:Fo,helps:Fo,avoid:Fo,avoids:Fo,love:Fo,loves:Fo,loved:Fo,hate:Fo,hates:Fo,hated:Fo},afterWords:{you:Fo,me:Fo,her:Fo,him:Fo,his:Fo,them:Fo,their:Fo,it:Fo,this:Fo,there:Fo,on:Fo,about:Fo,for:Fo,up:Fo,down:Fo}};const zo="Gerund",Bo="Adjective",So={beforeTags:Object.assign({},Oo.beforeTags,Vo.beforeTags,{Imperative:zo,Infinitive:Bo,Plural:zo}),afterTags:Object.assign({},Oo.afterTags,Vo.afterTags,{Noun:Bo}),beforeWords:Object.assign({},Oo.beforeWords,Vo.beforeWords,{is:Bo,are:zo,was:Bo,of:Bo,suggest:zo,suggests:zo,suggested:zo,recommend:zo,recommends:zo,recommended:zo,imagine:zo,imagines:zo,imagined:zo,consider:zo,considered:zo,considering:zo,resist:zo,resists:zo,resisted:zo,avoid:zo,avoided:zo,avoiding:zo,except:Bo,accept:Bo,assess:zo,explore:zo,fear:zo,fears:zo,appreciate:zo,question:zo,help:zo,embrace:zo,with:Bo}),afterWords:Object.assign({},Oo.afterWords,Vo.afterWords,{to:zo,not:zo,the:zo})},$o={beforeTags:{Determiner:void 0,Cardinal:"Noun",PhrasalVerb:"Adjective"},afterTags:{}},Mo={beforeTags:Object.assign({},Oo.beforeTags,To.beforeTags,$o.beforeTags),afterTags:Object.assign({},Oo.afterTags,To.afterTags,$o.afterTags),beforeWords:Object.assign({},Oo.beforeWords,To.beforeWords,{are:"Adjective",is:"Adjective",was:"Adjective",be:"Adjective",off:"Adjective",out:"Adjective"}),afterWords:Object.assign({},Oo.afterWords,To.afterWords)},Lo="PastTense",Ko="Adjective",Jo={beforeTags:{Adverb:Lo,Pronoun:Lo,ProperNoun:Lo,Auxiliary:Lo,Noun:Lo},afterTags:{Possessive:Lo,Pronoun:Lo,Determiner:Lo,Adverb:Lo,Comparative:Lo,Date:Lo,Gerund:Lo},beforeWords:{be:Lo,who:Lo,get:Ko,had:Lo,has:Lo,have:Lo,been:Lo,it:Lo,as:Lo,for:Ko,more:Ko,always:Ko},afterWords:{by:Lo,back:Lo,out:Lo,in:Lo,up:Lo,down:Lo,before:Lo,after:Lo,for:Lo,the:Lo,with:Lo,as:Lo,on:Lo,at:Lo,between:Lo,to:Lo,into:Lo,us:Lo,them:Lo,his:Lo,her:Lo,their:Lo,our:Lo,me:Lo,about:Ko}};var Wo={beforeTags:Object.assign({},Oo.beforeTags,Jo.beforeTags),afterTags:Object.assign({},Oo.afterTags,Jo.afterTags),beforeWords:Object.assign({},Oo.beforeWords,Jo.beforeWords),afterWords:Object.assign({},Oo.afterWords,Jo.afterWords)};const qo={afterTags:{Noun:"Adjective",Conjunction:void 0}},Uo={beforeTags:Object.assign({},Oo.beforeTags,Ho.beforeTags,{Adverb:void 0,Negative:void 0}),afterTags:Object.assign({},Oo.afterTags,Ho.afterTags,qo.afterTags),beforeWords:Object.assign({},Oo.beforeWords,Ho.beforeWords,{have:void 0,had:void 0,not:void 0,went:"Adjective",goes:"Adjective",got:"Adjective",be:"Adjective"}),afterWords:Object.assign({},Oo.afterWords,Ho.afterWords,{to:void 0,as:"Adjective"})},Ro={Copula:"Gerund",PastTense:"Gerund",PresentTense:"Gerund",Infinitive:"Gerund"},Qo={Value:"Gerund"},Zo={are:"Gerund",were:"Gerund",be:"Gerund",no:"Gerund",without:"Gerund",you:"Gerund",we:"Gerund",they:"Gerund",he:"Gerund",she:"Gerund",us:"Gerund",them:"Gerund"},_o={the:"Gerund",this:"Gerund",that:"Gerund",me:"Gerund",us:"Gerund",them:"Gerund"},Xo={beforeTags:Object.assign({},Vo.beforeTags,To.beforeTags,Ro),afterTags:Object.assign({},Vo.afterTags,To.afterTags,Qo),beforeWords:Object.assign({},Vo.beforeWords,To.beforeWords,Zo),afterWords:Object.assign({},Vo.afterWords,To.afterWords,_o)},Yo="Singular",ea="Infinitive",ta={beforeTags:Object.assign({},Ho.beforeTags,To.beforeTags,{Adjective:Yo,Particle:Yo}),afterTags:Object.assign({},Ho.afterTags,To.afterTags,{ProperNoun:ea,Gerund:ea,Adjective:ea,Copula:Yo}),beforeWords:Object.assign({},Ho.beforeWords,To.beforeWords,{is:Yo,was:Yo,of:Yo,have:null}),afterWords:Object.assign({},Ho.afterWords,To.afterWords,{instead:ea,about:ea,his:ea,her:ea,to:null,by:null,in:null})},na="Person";var ra={beforeTags:{Honorific:na,Person:na},afterTags:{Person:na,ProperNoun:na,Verb:na},beforeWords:{hi:na,hey:na,yo:na,dear:na,hello:na},afterWords:{said:na,says:na,told:na,tells:na,feels:na,felt:na,seems:na,thinks:na,thought:na,spends:na,spendt:na,plays:na,played:na,sing:na,sang:na,learn:na,learned:na,wants:na,wanted:na}};const oa="Month",aa={beforeTags:{Date:oa,Value:oa},afterTags:{Date:oa,Value:oa},beforeWords:{by:oa,in:oa,on:oa,during:oa,after:oa,before:oa,between:oa,until:oa,til:oa,sometime:oa,of:oa,this:oa,next:oa,last:oa,previous:oa,following:oa,with:"Person"},afterWords:{sometime:oa,in:oa,of:oa,until:oa,the:oa}};var ia={beforeTags:Object.assign({},ra.beforeTags,aa.beforeTags),afterTags:Object.assign({},ra.afterTags,aa.afterTags),beforeWords:Object.assign({},ra.beforeWords,aa.beforeWords),afterWords:Object.assign({},ra.afterWords,aa.afterWords)};const sa="Place",la={beforeTags:{Place:sa},afterTags:{Place:sa,Abbreviation:sa},beforeWords:{in:sa,by:sa,near:sa,from:sa,to:sa},afterWords:{in:sa,by:sa,near:sa,from:sa,to:sa,government:sa,council:sa,region:sa,city:sa}},ua="Unit",ca={"Actor|Verb":Eo,"Adj|Gerund":So,"Adj|Noun":Mo,"Adj|Past":Wo,"Adj|Present":Uo,"Noun|Verb":ta,"Noun|Gerund":Xo,"Person|Noun":{beforeTags:Object.assign({},To.beforeTags,ra.beforeTags),afterTags:Object.assign({},To.afterTags,ra.afterTags),beforeWords:Object.assign({},To.beforeWords,ra.beforeWords,{i:"Infinitive",we:"Infinitive"}),afterWords:Object.assign({},To.afterWords,ra.afterWords)},"Person|Date":ia,"Person|Verb":{beforeTags:Object.assign({},To.beforeTags,ra.beforeTags,Ho.beforeTags),afterTags:Object.assign({},To.afterTags,ra.afterTags,Ho.afterTags),beforeWords:Object.assign({},To.beforeWords,ra.beforeWords,Ho.beforeWords),afterWords:Object.assign({},To.afterWords,ra.afterWords,Ho.afterWords)},"Person|Place":{beforeTags:Object.assign({},la.beforeTags,ra.beforeTags),afterTags:Object.assign({},la.afterTags,ra.afterTags),beforeWords:Object.assign({},la.beforeWords,ra.beforeWords),afterWords:Object.assign({},la.afterWords,ra.afterWords)},"Person|Adj":{beforeTags:Object.assign({},ra.beforeTags,Oo.beforeTags),afterTags:Object.assign({},ra.afterTags,Oo.afterTags),beforeWords:Object.assign({},ra.beforeWords,Oo.beforeWords),afterWords:Object.assign({},ra.afterWords,Oo.afterWords)},"Unit|Noun":{beforeTags:{Value:ua},afterTags:{},beforeWords:{per:ua,every:ua,each:ua,square:ua,cubic:ua,sq:ua,metric:ua},afterWords:{per:ua,squared:ua,cubed:ua,long:ua}}},ha=(e,t)=>{const n=Object.keys(e).reduce(((t,n)=>(t[n]="Infinitive"===e[n]?"PresentTense":"Plural",t)),{});return Object.assign(n,t)};ca["Plural|Verb"]={beforeWords:ha(ca["Noun|Verb"].beforeWords,{had:"Plural",have:"Plural"}),afterWords:ha(ca["Noun|Verb"].afterWords,{his:"PresentTense",her:"PresentTense",its:"PresentTense",in:null,to:null,is:"PresentTense",by:"PresentTense"}),beforeTags:ha(ca["Noun|Verb"].beforeTags,{Conjunction:"PresentTense",Noun:void 0,ProperNoun:"PresentTense"}),afterTags:ha(ca["Noun|Verb"].afterTags,{Gerund:"Plural",Noun:"PresentTense",Value:"PresentTense"})};const da="Adjective",ga="Infinitive",ma="PresentTense",pa="Singular",fa="PastTense",ba="Adverb",va="Plural",ya="Actor",wa="Verb",ka="Noun",Pa="LastName",Aa="Modal",Ca="Place",Na="Participle";var ja=[null,null,{ea:pa,ia:ka,ic:da,ly:ba,"'n":wa,"'t":wa},{oed:fa,ued:fa,xed:fa," so":ba,"'ll":Aa,"'re":"Copula",azy:da,eer:ka,end:wa,ped:fa,ffy:da,ify:ga,ing:"Gerund",ize:ga,ibe:ga,lar:da,mum:da,nes:ma,nny:da,ous:da,que:da,ger:ka,ber:ka,rol:pa,sis:pa,ogy:pa,oid:pa,ian:pa,zes:ma,eld:fa,ken:Na,ven:Na,ten:Na,ect:ga,ict:ga,ign:ga,oze:ga,ful:da,bal:da,ton:ka,pur:Ca},{amed:fa,aped:fa,ched:fa,lked:fa,rked:fa,reed:fa,nded:fa,mned:da,cted:fa,dged:fa,ield:pa,akis:Pa,cede:ga,chuk:Pa,czyk:Pa,ects:ma,iend:pa,ends:wa,enko:Pa,ette:pa,iary:pa,wner:pa,fies:ma,fore:ba,gate:ga,gone:da,ices:va,ints:va,ruct:ga,ines:va,ions:va,ners:va,pers:va,lers:va,less:da,llen:da,made:da,nsen:Pa,oses:ma,ould:Aa,some:da,sson:Pa,ians:va,tion:pa,tage:ka,ique:pa,tive:da,tors:ka,vice:pa,lier:pa,fier:pa,wned:fa,gent:pa,tist:ya,pist:ya,rist:ya,mist:ya,yist:ya,vist:ya,ists:ya,lite:pa,site:pa,rite:pa,mite:pa,bite:pa,mate:pa,date:pa,ndal:pa,vent:pa,uist:ya,gist:ya,note:pa,cide:pa,ence:pa,wide:da,vide:ga,ract:ga,duce:ga,pose:ga,eive:ga,lyze:ga,lyse:ga,iant:da,nary:da,ghty:da,uent:da,erer:ya,bury:Ca,dorf:ka,esty:ka,wych:Ca,dale:Ca,folk:Ca,vale:Ca,abad:Ca,sham:Ca,wick:Ca,view:Ca},{elist:ya,holic:pa,phite:pa,tized:fa,urned:fa,eased:fa,ances:va,bound:da,ettes:va,fully:ba,ishes:ma,ities:va,marek:Pa,nssen:Pa,ology:ka,osome:pa,tment:pa,ports:va,rough:da,tches:ma,tieth:"Ordinal",tures:va,wards:ba,where:ba,archy:ka,pathy:ka,opoly:ka,embly:ka,phate:ka,ndent:pa,scent:pa,onist:ya,anist:ya,alist:ya,olist:ya,icist:ya,ounce:ga,iable:da,borne:da,gnant:da,inant:da,igent:da,atory:da,rient:pa,dient:pa,maker:ya,burgh:Ca,mouth:Ca,ceter:Ca,ville:Ca,hurst:Ca,stead:Ca,endon:Ca,brook:Ca,shire:Ca,worth:ka,field:"ProperNoun",ridge:Ca},{auskas:Pa,parent:pa,cedent:pa,ionary:pa,cklist:pa,brooke:Ca,keeper:ya,logist:ya,teenth:"Value",worker:ya,master:ya,writer:ya,brough:Ca,cester:Ca,ington:Ca,cliffe:Ca,ingham:Ca},{chester:Ca,logists:ya,opoulos:Pa,borough:Ca,sdottir:Pa}];const xa="Adjective",Ia="Noun",Ta="Verb";var Da=[null,null,{},{neo:Ia,bio:Ia,"de-":Ta,"re-":Ta,"un-":Ta,"ex-":Ia},{anti:Ia,auto:Ia,faux:xa,hexa:Ia,kilo:Ia,mono:Ia,nano:Ia,octa:Ia,poly:Ia,semi:xa,tele:Ia,"pro-":xa,"mis-":Ta,"dis-":Ta,"pre-":xa},{anglo:Ia,centi:Ia,ethno:Ia,ferro:Ia,grand:Ia,hepta:Ia,hydro:Ia,intro:Ia,macro:Ia,micro:Ia,milli:Ia,nitro:Ia,penta:Ia,quasi:xa,radio:Ia,tetra:Ia,"omni-":xa,"post-":xa},{pseudo:xa,"extra-":xa,"hyper-":xa,"inter-":xa,"intra-":xa,"deca-":xa},{electro:Ia}];const Ha="Adjective",Ea="Infinitive",Ga="PresentTense",Oa="Singular",Fa="PastTense",Va="Adverb",za="Expression",Ba="Actor",Sa="Verb",$a="Noun",Ma="LastName";var La={a:[[/.[aeiou]na$/,$a,"tuna"],[/.[oau][wvl]ska$/,Ma],[/.[^aeiou]ica$/,Oa,"harmonica"],[/^([hyj]a+)+$/,za,"haha"]],c:[[/.[^aeiou]ic$/,Ha]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,Fa,"popped"],[/.[aeo]{2}[bdgmnprvz]ed$/,Fa,"rammed"],[/.[aeiou][sg]hed$/,Fa,"gushed"],[/.[aeiou]red$/,Fa,"hired"],[/.[aeiou]r?ried$/,Fa,"hurried"],[/[^aeiou]ard$/,Oa,"steward"],[/[aeiou][^aeiou]id$/,Ha,""],[/.[vrl]id$/,Ha,"livid"],[/..led$/,Fa,"hurled"],[/.[iao]sed$/,Fa,""],[/[aeiou]n?[cs]ed$/,Fa,""],[/[aeiou][rl]?[mnf]ed$/,Fa,""],[/[aeiou][ns]?c?ked$/,Fa,"bunked"],[/[aeiou]gned$/,Fa],[/[aeiou][nl]?ged$/,Fa],[/.[tdbwxyz]ed$/,Fa],[/[^aeiou][aeiou][tvx]ed$/,Fa],[/.[cdflmnprstv]ied$/,Fa,"emptied"]],e:[[/.[lnr]ize$/,Ea,"antagonize"],[/.[^aeiou]ise$/,Ea,"antagonise"],[/.[aeiou]te$/,Ea,"bite"],[/.[^aeiou][ai]ble$/,Ha,"fixable"],[/.[^aeiou]eable$/,Ha,"maleable"],[/.[ts]ive$/,Ha,"festive"],[/[a-z]-like$/,Ha,"woman-like"]],h:[[/.[^aeiouf]ish$/,Ha,"cornish"],[/.v[iy]ch$/,Ma,"..ovich"],[/^ug?h+$/,za,"ughh"],[/^uh[ -]?oh$/,za,"uhoh"],[/[a-z]-ish$/,Ha,"cartoon-ish"]],i:[[/.[oau][wvl]ski$/,Ma,"polish-male"]],k:[[/^(k){2}$/,za,"kkkk"]],l:[[/.[gl]ial$/,Ha,"familial"],[/.[^aeiou]ful$/,Ha,"fitful"],[/.[nrtumcd]al$/,Ha,"natal"],[/.[^aeiou][ei]al$/,Ha,"familial"]],m:[[/.[^aeiou]ium$/,Oa,"magnesium"],[/[^aeiou]ism$/,Oa,"schism"],[/^[hu]m+$/,za,"hmm"],[/^\d+ ?[ap]m$/,"Date","3am"]],n:[[/.[lsrnpb]ian$/,Ha,"republican"],[/[^aeiou]ician$/,Ba,"musician"],[/[aeiou][ktrp]in'$/,"Gerund","cookin'"]],o:[[/^no+$/,za,"noooo"],[/^(yo)+$/,za,"yoo"],[/^wo{2,}[pt]?$/,za,"woop"]],r:[[/.[bdfklmst]ler$/,"Noun"],[/[aeiou][pns]er$/,Oa],[/[^i]fer$/,Ea],[/.[^aeiou][ao]pher$/,Ba],[/.[lk]er$/,"Noun"],[/.ier$/,"Comparative"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,Ha],[/[aeiou].*ist$/,Ha],[/^[a-z]et$/,Sa]],s:[[/.[^aeiou]ises$/,Ga],[/.[rln]ates$/,Ga],[/.[^z]ens$/,Sa],[/.[lstrn]us$/,Oa],[/.[aeiou]sks$/,Ga],[/.[aeiou]kes$/,Ga],[/[aeiou][^aeiou]is$/,Oa],[/[a-z]'s$/,$a],[/^yes+$/,za]],v:[[/.[^aeiou][ai][kln]ov$/,Ma]],y:[[/.[cts]hy$/,Ha],[/.[st]ty$/,Ha],[/.[tnl]ary$/,Ha],[/.[oe]ry$/,Oa],[/[rdntkbhs]ly$/,Va],[/.(gg|bb|zz)ly$/,Ha],[/...lly$/,Va],[/.[gk]y$/,Ha],[/[bszmp]{2}y$/,Ha],[/.[ai]my$/,Ha],[/[ea]{2}zy$/,Ha],[/.[^aeiou]ity$/,Oa]]};const Ka="Verb",Ja="Noun";var Wa={leftTags:[["Adjective",Ja],["Possessive",Ja],["Determiner",Ja],["Adverb",Ka],["Pronoun",Ka],["Value",Ja],["Ordinal",Ja],["Modal",Ka],["Superlative",Ja],["Demonym",Ja],["Honorific","Person"]],leftWords:[["i",Ka],["first",Ja],["it",Ka],["there",Ka],["not",Ka],["because",Ja],["if",Ja],["but",Ja],["who",Ka],["this",Ja],["his",Ja],["when",Ja],["you",Ka],["very","Adjective"],["old",Ja],["never",Ka],["before",Ja],["a",Ja],["the",Ja],["been",Ka]],rightTags:[["Copula",Ja],["PastTense",Ja],["Conjunction",Ja],["Modal",Ja]],rightWords:[["there",Ka],["me",Ka],["man","Adjective"],["him",Ka],["it",Ka],["were",Ja],["took",Ja],["himself",Ka],["went",Ja],["who",Ja],["jr","Person"]]},qa={fwd:"3:ser,ier¦1er:h,t,f,l,n¦1r:e¦2er:ss,or,om",both:"3er:ver,ear,alm¦3ner:hin¦3ter:lat¦2mer:im¦2er:ng,rm,mb¦2ber:ib¦2ger:ig¦1er:w,p,k,d¦ier:y",rev:"1:tter,yer¦2:uer,ver,ffer,oner,eler,ller,iler,ster,cer,uler,sher,ener,gher,aner,adder,nter,eter,rter,hter,rner,fter¦3:oser,ooler,eafer,user,airer,bler,maler,tler,eater,uger,rger,ainer,urer,ealer,icher,pler,emner,icter,nser,iser¦4:arser,viner,ucher,rosser,somer,ndomer,moter,oother,uarer,hiter¦5:nuiner,esser,emier¦ar:urther",ex:"worse:bad¦better:good¦4er:fair,gray,poor¦1urther:far¦3ter:fat,hot,wet¦3der:mad,sad¦3er:shy,fun¦4der:glad¦:¦4r:cute,dire,fake,fine,free,lame,late,pale,rare,ripe,rude,safe,sore,tame,wide¦5r:eerie,stale"},Ua={fwd:"1:nning,tting,rring,pping,eing,mming,gging,dding,bbing,kking¦2:eking,oling,eling,eming¦3:velling,siting,uiting,fiting,loting,geting,ialing,celling¦4:graming",both:"1:aing,iing,fing,xing,ying,oing,hing,wing¦2:tzing,rping,izzing,bting,mning,sping,wling,rling,wding,rbing,uping,lming,wning,mping,oning,lting,mbing,lking,fting,hting,sking,gning,pting,cking,ening,nking,iling,eping,ering,rting,rming,cting,lping,ssing,nting,nding,lding,sting,rning,rding,rking¦3:belling,siping,toming,yaking,uaking,oaning,auling,ooping,aiding,naping,euring,tolling,uzzing,ganing,haning,ualing,halling,iasing,auding,ieting,ceting,ouling,voring,ralling,garing,joring,oaming,oaking,roring,nelling,ooring,uelling,eaming,ooding,eaping,eeting,ooting,ooming,xiting,keting,ooking,ulling,airing,oaring,biting,outing,oiting,earing,naling,oading,eeding,ouring,eaking,aiming,illing,oining,eaning,onging,ealing,aining,eading¦4:thoming,melling,aboring,ivoting,weating,dfilling,onoring,eriting,imiting,tialling,rgining,otoring,linging,winging,lleting,louding,spelling,mpelling,heating,feating,opelling,choring,welling,ymaking,ctoring,calling,peating,iloring,laiting,utoring,uditing,mmaking,loating,iciting,waiting,mbating,voiding,otalling,nsoring,nselling,ocusing,itoring,eloping¦5:rselling,umpeting,atrolling,treating,tselling,rpreting,pringing,ummeting,ossoming,elmaking,eselling,rediting,totyping,onmaking,rfeiting,ntrolling¦5e:chmaking,dkeeping,severing,erouting,ecreting,ephoning,uthoring,ravening,reathing,pediting,erfering,eotyping,fringing,entoring,ombining,ompeting¦4e:emaking,eething,twining,rruling,chuting,xciting,rseding,scoping,edoring,pinging,lunging,agining,craping,pleting,eleting,nciting,nfining,ncoding,tponing,ecoding,writing,esaling,nvening,gnoring,evoting,mpeding,rvening,dhering,mpiling,storing,nviting,ploring¦3e:tining,nuring,saking,miring,haling,ceding,xuding,rining,nuting,laring,caring,miling,riding,hoking,piring,lading,curing,uading,noting,taping,futing,paring,hading,loding,siring,guring,vading,voking,during,niting,laning,caping,luting,muting,ruding,ciding,juring,laming,caling,hining,uoting,liding,ciling,duling,tuting,puting,cuting,coring,uiding,tiring,turing,siding,rading,enging,haping,buting,lining,taking,anging,haring,uiring,coming,mining,moting,suring,viding,luding¦2e:tring,zling,uging,oging,gling,iging,vring,fling,lging,obing,psing,pling,ubing,cling,dling,wsing,iking,rsing,dging,kling,ysing,tling,rging,eging,nsing,uning,osing,uming,using,ibing,bling,aging,ising,asing,ating¦2ie:rlying¦1e:zing,uing,cing,ving",rev:"ying:ie¦1ing:se,ke,te,we,ne,re,de,pe,me,le,c,he¦2ing:ll,ng,dd,ee,ye,oe,rg,us¦2ning:un¦2ging:og,ag,ug,ig,eg¦2ming:um¦2bing:ub,ab,eb,ob¦3ning:lan,can,hin,pin,win¦3ring:cur,lur,tir,tar,pur,car¦3ing:ait,del,eel,fin,eat,oat,eem,lel,ool,ein,uin¦3ping:rop,rap,top,uip,wap,hip,hop,lap,rip,cap¦3ming:tem,wim,rim,kim,lim¦3ting:mat,cut,pot,lit,lot,hat,set,pit,put¦3ding:hed,bed,bid¦3king:rek¦3ling:cil,pel¦3bing:rib¦4ning:egin¦4ing:isit,ruit,ilot,nsit,dget,rkel,ival,rcel¦4ring:efer,nfer¦4ting:rmit,mmit,ysit,dmit,emit,bmit,tfit,gret¦4ling:evel,xcel,ivel¦4ding:hred¦5ing:arget,posit,rofit¦5ring:nsfer¦5ting:nsmit,orget,cquit¦5ling:ancel,istil",ex:"3:adding,eating,aiming,aiding,airing,outing,gassing,setting,getting,putting,cutting,winning,sitting,betting,mapping,tapping,letting,bidding,hitting,tanning,netting,popping,fitting,capping,lapping,barring,banning,vetting,topping,rotting,tipping,potting,wetting,pitting,dipping,budding,hemming,pinning,jetting,kidding,padding,podding,sipping,wedding,bedding,donning,warring,penning,gutting,cueing,wadding,petting,ripping,napping,matting,tinning,binning,dimming,hopping,mopping,nodding,panning,rapping,ridding,sinning¦4:selling,falling,calling,waiting,editing,telling,rolling,heating,boating,hanging,beating,coating,singing,tolling,felling,polling,discing,seating,voiding,gelling,yelling,baiting,reining,ruining,seeking,spanning,stepping,knitting,emitting,slipping,quitting,dialing,omitting,clipping,shutting,skinning,abutting,flipping,trotting,cramming,fretting,suiting¦5:bringing,treating,spelling,stalling,trolling,expelling,rivaling,wringing,deterring,singeing,befitting,refitting¦6:enrolling,distilling,scrolling,strolling,caucusing,travelling¦7:installing,redefining,stencilling,recharging,overeating,benefiting,unraveling,programing¦9:reprogramming¦is:being¦2e:using,aging,owing¦3e:making,taking,coming,noting,hiring,filing,coding,citing,doping,baking,coping,hoping,lading,caring,naming,voting,riding,mining,curing,lining,ruling,typing,boring,dining,firing,hiding,piling,taping,waning,baling,boning,faring,honing,wiping,luring,timing,wading,piping,fading,biting,zoning,daring,waking,gaming,raking,ceding,tiring,coking,wining,joking,paring,gaping,poking,pining,coring,liming,toting,roping,wiring,aching¦4e:writing,storing,eroding,framing,smoking,tasting,wasting,phoning,shaking,abiding,braking,flaking,pasting,priming,shoring,sloping,withing,hinging¦5e:defining,refining,renaming,swathing,fringing,reciting¦1ie:dying,tying,lying,vying¦7e:sunbathing"},Ra={fwd:"1:mt¦2:llen¦3:iven,aken¦:ne¦y:in",both:"1:wn¦2:me,aten¦3:seen,bidden,isen¦4:roven,asten¦3l:pilt¦3d:uilt¦2e:itten¦1im:wum¦1eak:poken¦1ine:hone¦1ose:osen¦1in:gun¦1ake:woken¦ear:orn¦eal:olen¦eeze:ozen¦et:otten¦ink:unk¦ing:ung",rev:"2:un¦oken:eak¦ought:eek¦oven:eave¦1ne:o¦1own:ly¦1den:de¦1in:ay¦2t:am¦2n:ee¦3en:all¦4n:rive,sake,take¦5n:rgive",ex:"2:been¦3:seen,run¦4:given,taken¦5:shaken¦2eak:broken¦1ive:dove¦2y:flown¦3e:hidden,ridden¦1eek:sought¦1ake:woken¦1eave:woven"},Qa={fwd:"1:oes¦1ve:as",both:"1:xes¦2:zzes,ches,shes,sses¦3:iases¦2y:llies,plies¦1y:cies,bies,ties,vies,nies,pies,dies,ries,fies¦:s",rev:"1ies:ly¦2es:us,go,do¦3es:cho,eto",ex:"2:does,goes¦3:gasses¦5:focuses¦is:are¦3y:relies¦2y:flies¦2ve:has"},Za={fwd:"1st:e¦1est:l,m,f,s¦1iest:cey¦2est:or,ir¦3est:ver",both:"4:east¦5:hwest¦5lest:erful¦4est:weet,lgar,tter,oung¦4most:uter¦3est:ger,der,rey,iet,ong,ear¦3test:lat¦3most:ner¦2est:pt,ft,nt,ct,rt,ht¦2test:it¦2gest:ig¦1est:b,k,n,p,h,d,w¦iest:y",rev:"1:ttest,nnest,yest¦2:sest,stest,rmest,cest,vest,lmest,olest,ilest,ulest,ssest,imest,uest¦3:rgest,eatest,oorest,plest,allest,urest,iefest,uelest,blest,ugest,amest,yalest,ealest,illest,tlest,itest¦4:cerest,eriest,somest,rmalest,ndomest,motest,uarest,tiffest¦5:leverest,rangest¦ar:urthest¦3ey:riciest",ex:"best:good¦worst:bad¦5est:great¦4est:fast,full,fair,dull¦3test:hot,wet,fat¦4nest:thin¦1urthest:far¦3est:gay,shy,ill¦4test:neat¦4st:late,wide,fine,safe,cute,fake,pale,rare,rude,sore,ripe,dire¦6st:severe"},_a={fwd:"1:tistic,eable,lful,sful,ting,tty¦2:onate,rtable,geous,ced,seful,ctful¦3:ortive,ented¦arity:ear¦y:etic¦fulness:begone¦1ity:re¦1y:tiful,gic¦2ity:ile,imous,ilous,ime¦2ion:ated¦2eness:iving¦2y:trious¦2ation:iring¦2tion:vant¦3ion:ect¦3ce:mant,mantic¦3tion:irable¦3y:est,estic¦3m:mistic,listic¦3ess:ning¦4n:utious¦4on:rative,native,vative,ective¦4ce:erant",both:"1:king,wing¦2:alous,ltuous,oyful,rdous¦3:gorous,ectable,werful,amatic¦4:oised,usical,agical,raceful,ocused,lined,ightful¦5ness:stful,lding,itous,nuous,ulous,otous,nable,gious,ayful,rvous,ntous,lsive,peful,entle,ciful,osive,leful,isive,ncise,reful,mious¦5ty:ivacious¦5ties:ubtle¦5ce:ilient,adiant,atient¦5cy:icient¦5sm:gmatic¦5on:sessive,dictive¦5ity:pular,sonal,eative,entic¦5sity:uminous¦5ism:conic¦5nce:mperate¦5ility:mitable¦5ment:xcited¦5n:bitious¦4cy:brant,etent,curate¦4ility:erable,acable,icable,ptable¦4ty:nacious,aive,oyal,dacious¦4n:icious¦4ce:vient,erent,stent,ndent,dient,quent,ident¦4ness:adic,ound,hing,pant,sant,oing,oist,tute¦4icity:imple¦4ment:fined,mused¦4ism:otic¦4ry:dantic¦4ity:tund,eral¦4edness:hand¦4on:uitive¦4lity:pitable¦4sm:eroic,namic¦4sity:nerous¦3th:arm¦3ility:pable,bable,dable,iable¦3cy:hant,nant,icate¦3ness:red,hin,nse,ict,iet,ite,oud,ind,ied,rce¦3ion:lute¦3ity:ual,gal,volous,ial¦3ce:sent,fensive,lant,gant,gent,lent,dant¦3on:asive¦3m:fist,sistic,iastic¦3y:terious,xurious,ronic,tastic¦3ur:amorous¦3e:tunate¦3ation:mined¦3sy:rteous¦3ty:ain¦3ry:ave¦3ment:azed¦2ness:de,on,ue,rn,ur,ft,rp,pe,om,ge,rd,od,ay,ss,er,ll,oy,ap,ht,ld,ad,rt¦2inousness:umous¦2ity:neous,ene,id,ane¦2cy:bate,late¦2ation:ized¦2ility:oble,ible¦2y:odic¦2e:oving,aring¦2s:ost¦2itude:pt¦2dom:ee¦2ance:uring¦2tion:reet¦2ion:oted¦2sion:ending¦2liness:an¦2or:rdent¦1th:ung¦1e:uable¦1ness:w,h,k,f¦1ility:mble¦1or:vent¦1ement:ging¦1tiquity:ncient¦1ment:hed¦verty:or¦ength:ong¦eat:ot¦pth:ep¦iness:y",rev:"",ex:"5:forceful,humorous¦8:charismatic¦13:understanding¦5ity:active¦11ness:adventurous,inquisitive,resourceful¦8on:aggressive,automatic,perceptive¦7ness:amorous,fatuous,furtive,ominous,serious¦5ness:ample,sweet¦12ness:apprehensive,cantankerous,contemptuous,ostentatious¦13ness:argumentative,conscientious¦9ness:assertive,facetious,imperious,inventive,oblivious,rapacious,receptive,seditious,whimsical¦10ness:attractive,expressive,impressive,loquacious,salubrious,thoughtful¦3edom:boring¦4ness:calm,fast,keen,tame¦8ness:cheerful,gracious,specious,spurious,timorous,unctuous¦5sity:curious¦9ion:deliberate¦8ion:desperate¦6e:expensive¦7ce:fragrant¦3y:furious¦9ility:ineluctable¦6ism:mystical¦8ity:physical,proactive,sensitive,vertical¦5cy:pliant¦7ity:positive¦9ity:practical¦12ism:professional¦6ce:prudent¦3ness:red¦6cy:vagrant¦3dom:wise"};const Xa=function(e="",t={}){let n=function(e,t={}){return t.hasOwnProperty(e)?t[e]:null}(e,t.ex);return n=n||function(e,t=[]){for(let n=0;n=1;r-=1){let o=e.length-r,a=e.substring(o,e.length);if(!0===t.hasOwnProperty(a))return e.slice(0,o)+t[a];if(!0===n.hasOwnProperty(a))return e.slice(0,o)+n[a]}return t.hasOwnProperty("")?e+t[""]:n.hasOwnProperty("")?e+n[""]:null}(e,t.fwd,t.both),n=n||e,n},Ya=function(e){return Object.entries(e).reduce(((e,t)=>(e[t[1]]=t[0],e)),{})},ei=function(e={}){return{reversed:!0,both:Ya(e.both),ex:Ya(e.ex),fwd:e.rev||{}}},ti=/^([0-9]+)/,ni=function(e){let t=function(e){let t={};return e.split("¦").forEach((e=>{let[n,r]=e.split(":");r=(r||"").split(","),r.forEach((e=>{t[e]=n}))})),t}(e);return Object.keys(t).reduce(((e,n)=>(e[n]=function(e="",t=""){let n=(t=String(t)).match(ti);if(null===n)return t;let r=Number(n[1])||0;return e.substring(0,r)+t.replace(ti,"")}(n,t[n]),e)),{})},ri=function(e={}){return"string"==typeof e&&(e=JSON.parse(e)),e.fwd=ni(e.fwd||""),e.both=ni(e.both||""),e.rev=ni(e.rev||""),e.ex=ni(e.ex||""),e},oi=ri({fwd:"1:tted,wed,gged,nned,een,rred,pped,yed,bbed,oed,dded,rd,wn,mmed¦2:eed,nded,et,hted,st,oled,ut,emed,eled,lded,ken,rt,nked,apt,ant,eped,eked¦3:eared,eat,eaded,nelled,ealt,eeded,ooted,eaked,eaned,eeted,mited,bid,uit,ead,uited,ealed,geted,velled,ialed,belled¦4:ebuted,hined,comed¦y:ied¦ome:ame¦ear:ore¦ind:ound¦ing:ung,ang¦ep:pt¦ink:ank,unk¦ig:ug¦all:ell¦ee:aw¦ive:ave¦eeze:oze¦old:eld¦ave:ft¦ake:ook¦ell:old¦ite:ote¦ide:ode¦ine:one¦in:un,on¦eal:ole¦im:am¦ie:ay¦and:ood¦1ise:rose¦1eak:roke¦1ing:rought¦1ive:rove¦1el:elt¦1id:bade¦1et:got¦1y:aid¦1it:sat¦3e:lid¦3d:pent",both:"1:aed,fed,xed,hed¦2:sged,xted,wled,rped,lked,kied,lmed,lped,uped,bted,rbed,rked,wned,rled,mped,fted,mned,mbed,zzed,omed,ened,cked,gned,lted,sked,ued,zed,nted,ered,rted,rmed,ced,sted,rned,ssed,rded,pted,ved,cted¦3:cled,eined,siped,ooned,uked,ymed,jored,ouded,ioted,oaned,lged,asped,iged,mured,oided,eiled,yped,taled,moned,yled,lit,kled,oaked,gled,naled,fled,uined,oared,valled,koned,soned,aided,obed,ibed,meted,nicked,rored,micked,keted,vred,ooped,oaded,rited,aired,auled,filled,ouled,ooded,ceted,tolled,oited,bited,aped,tled,vored,dled,eamed,nsed,rsed,sited,owded,pled,sored,rged,osed,pelled,oured,psed,oated,loned,aimed,illed,eured,tred,ioned,celled,bled,wsed,ooked,oiled,itzed,iked,iased,onged,ased,ailed,uned,umed,ained,auded,nulled,ysed,eged,ised,aged,oined,ated,used,dged,doned¦4:ntied,efited,uaked,caded,fired,roped,halled,roked,himed,culed,tared,lared,tuted,uared,routed,pited,naked,miled,houted,helled,hared,cored,caled,tired,peated,futed,ciled,called,tined,moted,filed,sided,poned,iloted,honed,lleted,huted,ruled,cured,named,preted,vaded,sured,talled,haled,peded,gined,nited,uided,ramed,feited,laked,gured,ctored,unged,pired,cuted,voked,eloped,ralled,rined,coded,icited,vided,uaded,voted,mined,sired,noted,lined,nselled,luted,jured,fided,puted,piled,pared,olored,cided,hoked,enged,tured,geoned,cotted,lamed,uiled,waited,udited,anged,luded,mired,uired,raded¦5:modelled,izzled,eleted,umpeted,ailored,rseded,treated,eduled,ecited,rammed,eceded,atrolled,nitored,basted,twined,itialled,ncited,gnored,ploded,xcited,nrolled,namelled,plored,efeated,redited,ntrolled,nfined,pleted,llided,lcined,eathed,ibuted,lloted,dhered,cceded¦3ad:sled¦2aw:drew¦2ot:hot¦2ke:made¦2ow:hrew,grew¦2ose:hose¦2d:ilt¦2in:egan¦1un:ran¦1ink:hought¦1ick:tuck¦1ike:ruck¦1eak:poke,nuck¦1it:pat¦1o:did¦1ow:new¦1ake:woke¦go:went",rev:"3:rst,hed,hut,cut,set¦4:tbid¦5:dcast,eread,pread,erbid¦ought:uy,eek¦1ied:ny,ly,dy,ry,fy,py,vy,by,ty,cy¦1ung:ling,ting,wing¦1pt:eep¦1ank:rink¦1ore:bear,wear¦1ave:give¦1oze:reeze¦1ound:rind,wind¦1ook:take,hake¦1aw:see¦1old:sell¦1ote:rite¦1ole:teal¦1unk:tink¦1am:wim¦1ay:lie¦1ood:tand¦1eld:hold¦2d:he,ge,re,le,leed,ne,reed,be,ye,lee,pe,we¦2ed:dd,oy,or,ey,gg,rr,us,ew,to¦2ame:ecome,rcome¦2ped:ap¦2ged:ag,og,ug,eg¦2bed:ub,ab,ib,ob¦2lt:neel¦2id:pay¦2ang:pring¦2ove:trive¦2med:um¦2ode:rride¦2at:ysit¦3ted:mit,hat,mat,lat,pot,rot,bat¦3ed:low,end,tow,und,ond,eem,lay,cho,dow,xit,eld,ald,uld,law,lel,eat,oll,ray,ank,fin,oam,out,how,iek,tay,haw,ait,vet,say,cay,bow¦3d:ste,ede,ode,ete,ree,ude,ame,oke,ote,ime,ute,ade¦3red:lur,cur,pur,car¦3ped:hop,rop,uip,rip,lip,tep,top¦3ded:bed,rod,kid¦3ade:orbid¦3led:uel¦3ned:lan,can,kin,pan,tun¦3med:rim,lim¦4ted:quit,llot¦4ed:pear,rrow,rand,lean,mand,anel,pand,reet,link,abel,evel,imit,ceed,ruit,mind,peal,veal,hool,head,pell,well,mell,uell,band,hear,weak¦4led:nnel,qual,ebel,ivel¦4red:nfer,efer,sfer¦4n:sake,trew¦4d:ntee¦4ded:hred¦4ned:rpin¦5ed:light,nceal,right,ndear,arget,hread,eight,rtial,eboot¦5d:edite,nvite¦5ted:egret¦5led:ravel",ex:"2:been,upped¦3:added,aged,aided,aimed,aired,bid,died,dyed,egged,erred,eyed,fit,gassed,hit,lied,owed,pent,pied,tied,used,vied,oiled,outed,banned,barred,bet,canned,cut,dipped,donned,ended,feed,inked,jarred,let,manned,mowed,netted,padded,panned,pitted,popped,potted,put,set,sewn,sowed,tanned,tipped,topped,vowed,weed,bowed,jammed,binned,dimmed,hopped,mopped,nodded,pinned,rigged,sinned,towed,vetted¦4:ached,baked,baled,boned,bored,called,caned,cared,ceded,cited,coded,cored,cubed,cured,dared,dined,edited,exited,faked,fared,filed,fined,fired,fuelled,gamed,gelled,hired,hoped,joked,lined,mined,named,noted,piled,poked,polled,pored,pulled,reaped,roamed,rolled,ruled,seated,shed,sided,timed,tolled,toned,voted,waited,walled,waned,winged,wiped,wired,zoned,yelled,tamed,lubed,roped,faded,mired,caked,honed,banged,culled,heated,raked,welled,banded,beat,cast,cooled,cost,dealt,feared,folded,footed,handed,headed,heard,hurt,knitted,landed,leaked,leapt,linked,meant,minded,molded,neared,needed,peaked,plodded,plotted,pooled,quit,read,rooted,sealed,seeded,seeped,shipped,shunned,skimmed,slammed,sparred,stemmed,stirred,suited,thinned,twinned,swayed,winked,dialed,abutted,blotted,fretted,healed,heeded,peeled,reeled¦5:basted,cheated,equalled,eroded,exiled,focused,opined,pleated,primed,quoted,scouted,shored,sloped,smoked,sniped,spelled,spouted,routed,staked,stored,swelled,tasted,treated,wasted,smelled,dwelled,honored,prided,quelled,eloped,scared,coveted,sweated,breaded,cleared,debuted,deterred,freaked,modeled,pleaded,rebutted,speeded¦6:anchored,defined,endured,impaled,invited,refined,revered,strolled,cringed,recast,thrust,unfolded¦7:authored,combined,competed,conceded,convened,excreted,extruded,redefined,restored,secreted,rescinded,welcomed¦8:expedited,infringed¦9:interfered,intervened,persevered¦10:contravened¦eat:ate¦is:was¦go:went¦are:were¦3d:bent,lent,rent,sent¦3e:bit,fled,hid,lost¦3ed:bled,bred¦2ow:blew,grew¦1uy:bought¦2tch:caught¦1o:did¦1ive:dove,gave¦2aw:drew¦2ed:fed¦2y:flew,laid,paid,said¦1ight:fought¦1et:got¦2ve:had¦1ang:hung¦2ad:led¦2ght:lit¦2ke:made¦2et:met¦1un:ran¦1ise:rose¦1it:sat¦1eek:sought¦1each:taught¦1ake:woke,took¦1eave:wove¦2ise:arose¦1ear:bore,tore,wore¦1ind:bound,found,wound¦2eak:broke¦2ing:brought,wrung¦1ome:came¦2ive:drove¦1ig:dug¦1all:fell¦2el:felt¦4et:forgot¦1old:held¦2ave:left¦1ing:rang,sang¦1ide:rode¦1ink:sank¦1ee:saw¦2ine:shone¦4e:slid¦1ell:sold,told¦4d:spent¦2in:spun¦1in:won"}),ai=ri(Qa),ii=ri(Ua),si=ri(Ra),li=ei(oi),ui=ei(ai),ci=ei(ii),hi=ei(si),di=ri(qa),gi=ri(Za);var mi={fromPast:oi,fromPresent:ai,fromGerund:ii,fromParticiple:si,toPast:li,toPresent:ui,toGerund:ci,toParticiple:hi,toComparative:di,toSuperlative:gi,fromComparative:ei(di),fromSuperlative:ei(gi),adjToNoun:ri(_a)},pi=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","bureau","cafe","co","caisse","capital","care","cathedral","center","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","data","departement","department","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","faculty","faction","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","llc","ltd","limited","machines","magazine","management","marine","marketing","markets","media","memorial","ministere","ministry","military","mobile","motor","motors","musee","museum","news","observatory","office","oil","optical","orchestra","organization","partners","partnership","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","politburo","polytechnic","post","power","press","productions","quartet","radio","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","societe","subsidiary","society","sons","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce(((e,t)=>(e[t]=!0,e)),{}),fi=["atoll","basin","bay","beach","bluff","bog","camp","canyon","canyons","cape","cave","caves","cliffs","coast","cove","coves","crater","crossing","creek","desert","dune","dunes","downs","estates","escarpment","estuary","falls","fjord","fjords","forest","forests","glacier","gorge","gorges","grove","gulf","gully","highland","heights","hollow","hill","hills","inlet","island","islands","isthmus","junction","knoll","lagoon","lake","lakeshore","marsh","marshes","mount","mountain","mountains","narrows","peninsula","plains","plateau","pond","rapids","ravine","reef","reefs","ridge","river","rivers","sandhill","shoal","shore","shoreline","shores","strait","straits","springs","stream","swamp","tombolo","trail","trails","trench","valley","vallies","village","volcano","waterfall","watershed","wetland","woods","acres","burough","county","district","municipality","prefecture","province","region","reservation","state","territory","borough","metropolis","downtown","uptown","midtown","city","town","township","hamlet","country","kingdom","enclave","neighbourhood","neighborhood","kingdom","ward","zone","airport","amphitheater","arch","arena","auditorium","bar","barn","basilica","battlefield","bridge","building","castle","centre","coliseum","cineplex","complex","dam","farm","field","fort","garden","gardens","gymnasium","hall","house","levee","library","manor","memorial","monument","museum","gallery","palace","pillar","pits","plantation","playhouse","quarry","sportsfield","sportsplex","stadium","terrace","terraces","theater","tower","park","parks","site","ranch","raceway","sportsplex","ave","st","street","rd","road","lane","landing","crescent","cr","way","tr","terrace","avenue"].reduce(((e,t)=>(e[t]=!0,e)),{}),bi=[[/([^v])ies$/i,"$1y"],[/(ise)s$/i,"$1"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(ause)s$/i,"$1"],[/(ease)s$/i,"$1"],[/(ious)es$/i,"$1"],[/(ouse)s$/i,"$1"],[/(ose)s$/i,"$1"],[/(..ase)s$/i,"$1"],[/(..[aeiu]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/([xo]|ch|ss|sh)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ic)s$/i,"$1"],[/s$/i,""]];const vi=function(e,t){const{irregularPlurals:n}=t.two,r=(o=n,Object.keys(o).reduce(((e,t)=>(e[o[t]]=t,e)),{}));var o;if(r.hasOwnProperty(e))return r[e];for(let t=0;t(wi[t].forEach((n=>e[n]=t)),e)),{});const ki=function(e){const t=e.substring(e.length-3);if(!0===wi.hasOwnProperty(t))return wi[t];const n=e.substring(e.length-2);if(!0===wi.hasOwnProperty(n))return wi[n];return"s"===e.substring(e.length-1)?"PresentTense":null},Pi={are:"be",were:"be",been:"be",is:"be",am:"be",was:"be",be:"be",being:"be"},Ai=function(e,t,n){const{fromPast:r,fromPresent:o,fromGerund:a,fromParticiple:i}=t.two.models,{prefix:s,verb:l,particle:u}=function(e,t){let n="",r={};t.one&&t.one.prefixes&&(r=t.one.prefixes);let[o,a]=e.split(/ /);return a&&!0===r[o]&&(n=o,o=a,a=""),{prefix:n,verb:o,particle:a}}(e,t);let c="";if(n||(n=ki(e)),Pi.hasOwnProperty(e))c=Pi[e];else if("Participle"===n)c=Xa(l,i);else if("PastTense"===n)c=Xa(l,r);else if("PresentTense"===n)c=Xa(l,o);else{if("Gerund"!==n)return e;c=Xa(l,a)}return u&&(c+=" "+u),s&&(c=s+" "+c),c},Ci=function(e,t){const{toPast:n,toPresent:r,toGerund:o,toParticiple:a}=t.two.models;if("be"===e)return{Infinitive:e,Gerund:"being",PastTense:"was",PresentTense:"is"};const[i,s]=(e=>/ /.test(e)?e.split(/ /):[e,""])(e),l={Infinitive:i,PastTense:Xa(i,n),PresentTense:Xa(i,r),Gerund:Xa(i,o),FutureTense:"will "+i};let u=Xa(i,a);if(u!==e&&u!==l.PastTense){const n=t.one.lexicon||{};"Participle"!==n[u]&&"Adjective"!==n[u]||("play"===e&&(u="played"),l.Participle=u)}return s&&Object.keys(l).forEach((e=>{l[e]+=" "+s})),l};var Ni={toInfinitive:Ai,conjugate:Ci,all:function(e,t){const n=Ci(e,t);return delete n.FutureTense,Object.values(n).filter((e=>e))}};const ji=function(e,t){const n=t.two.models.toSuperlative;return Xa(e,n)},xi=function(e,t){const n=t.two.models.toComparative;return Xa(e,n)},Ii=function(e="",t=[]){const n=e.length;for(let r=n<=6?n-1:6;r>=1;r-=1){const o=e.substring(n-r,e.length);if(!0===t[o.length].hasOwnProperty(o)){return e.slice(0,n-r)+t[o.length][o]}}return null},Ti="ically",Di=new Set(["analyt"+Ti,"chem"+Ti,"class"+Ti,"clin"+Ti,"crit"+Ti,"ecolog"+Ti,"electr"+Ti,"empir"+Ti,"frant"+Ti,"grammat"+Ti,"ident"+Ti,"ideolog"+Ti,"log"+Ti,"mag"+Ti,"mathemat"+Ti,"mechan"+Ti,"med"+Ti,"method"+Ti,"method"+Ti,"mus"+Ti,"phys"+Ti,"phys"+Ti,"polit"+Ti,"pract"+Ti,"rad"+Ti,"satir"+Ti,"statist"+Ti,"techn"+Ti,"technolog"+Ti,"theoret"+Ti,"typ"+Ti,"vert"+Ti,"whims"+Ti]),Hi=[null,{},{ly:""},{ily:"y",bly:"ble",ply:"ple"},{ally:"al",rply:"rp"},{ually:"ual",ially:"ial",cally:"cal",eally:"eal",rally:"ral",nally:"nal",mally:"mal",eeply:"eep",eaply:"eap"},{ically:"ic"}],Ei=new Set(["early","only","hourly","daily","weekly","monthly","yearly","mostly","duly","unduly","especially","undoubtedly","conversely","namely","exceedingly","presumably","accordingly","overly","best","latter","little","long","low"]),Gi={wholly:"whole",fully:"full",truly:"true",gently:"gentle",singly:"single",customarily:"customary",idly:"idle",publically:"public",quickly:"quick",superbly:"superb",cynically:"cynical",well:"good"},Oi=[null,{y:"ily"},{ly:"ly",ic:"ically"},{ial:"ially",ual:"ually",tle:"tly",ble:"bly",ple:"ply",ary:"arily"},{},{},{}],Fi={cool:"cooly",whole:"wholly",full:"fully",good:"well",idle:"idly",public:"publicly",single:"singly",special:"especially"},Vi=function(e){if(Fi.hasOwnProperty(e))return Fi[e];let t=Ii(e,Oi);return t||(t=e+"ly"),t};var zi={toSuperlative:ji,toComparative:xi,toAdverb:Vi,toNoun:function(e,t){const n=t.two.models.adjToNoun;return Xa(e,n)},fromAdverb:function(e){return e.endsWith("ly")?Di.has(e)?e.replace(/ically/,"ical"):Ei.has(e)?null:Gi.hasOwnProperty(e)?Gi[e]:Ii(e,Hi)||e:null},fromSuperlative:function(e,t){const n=t.two.models.fromSuperlative;return Xa(e,n)},fromComparative:function(e,t){const n=t.two.models.fromComparative;return Xa(e,n)},all:function(e,t){let n=[e];return n.push(ji(e,t)),n.push(xi(e,t)),n.push(Vi(e)),n=n.filter((e=>e)),n=new Set(n),Array.from(n)}},Bi={noun:yi,verb:Ni,adjective:zi},Si={Singular:(e,t,n,r)=>{const o=r.one.lexicon,a=n.two.transform.noun.toPlural(e,r);o[a]||(t[a]=t[a]||"Plural")},Actor:(e,t,n,r)=>{const o=r.one.lexicon,a=n.two.transform.noun.toPlural(e,r);o[a]||(t[a]=t[a]||["Plural","Actor"])},Comparable:(e,t,n,r)=>{const o=r.one.lexicon,{toSuperlative:a,toComparative:i}=n.two.transform.adjective,s=a(e,r);o[s]||(t[s]=t[s]||"Superlative");const l=i(e,r);o[l]||(t[l]=t[l]||"Comparative"),t[e]="Adjective"},Demonym:(e,t,n,r)=>{const o=n.two.transform.noun.toPlural(e,r);t[o]=t[o]||["Demonym","Plural"]},Infinitive:(e,t,n,r)=>{const o=r.one.lexicon,a=n.two.transform.verb.conjugate(e,r);Object.entries(a).forEach((e=>{o[e[1]]||t[e[1]]||"FutureTense"===e[0]||(t[e[1]]=e[0])}))},PhrasalVerb:(e,t,n,r)=>{const o=r.one.lexicon;t[e]=["PhrasalVerb","Infinitive"];const a=r.one._multiCache,[i,s]=e.split(" ");o[i]||(t[i]=t[i]||"Infinitive");const l=n.two.transform.verb.conjugate(i,r);delete l.FutureTense,Object.entries(l).forEach((e=>{if("Actor"===e[0]||""===e[1])return;t[e[1]]||o[e[1]]||(t[e[1]]=e[0]),a[e[1]]=2;const n=e[1]+" "+s;t[n]=t[n]||[e[0],"PhrasalVerb"]}))},Multiple:(e,t)=>{t[e]=["Multiple","Cardinal"],t[e+"th"]=["Multiple","Ordinal"],t[e+"ths"]=["Multiple","Fraction"]},Cardinal:(e,t)=>{t[e]=["TextValue","Cardinal"]},Ordinal:(e,t)=>{t[e]=["TextValue","Ordinal"],t[e+"s"]=["TextValue","Fraction"]},Place:(e,t)=>{t[e]=["Place","ProperNoun"]},Region:(e,t)=>{t[e]=["Region","ProperNoun"]}};const $i={e:["mice","louse","antennae","formulae","nebulae","vertebrae","vitae"],i:["tia","octopi","viri","radii","nuclei","fungi","cacti","stimuli"],n:["men"],t:["feet"]},Mi=new Set(["israelis","menus","logos"]),Li=["bus","mas","was","ias","xas","vas","cis","lis","nis","ois","ris","sis","tis","xis","aus","cus","eus","fus","gus","ius","lus","nus","das","ous","pus","rus","sus","tus","xus","aos","igos","ados","ogos","'s","ss"],Ki=function(e){if(!e||e.length<=3)return!1;if(Mi.has(e))return!0;const t=e[e.length-1];return $i.hasOwnProperty(t)?$i[t].find((t=>e.endsWith(t))):"s"===t&&!Li.find((t=>e.endsWith(t)))};var Ji={two:{quickSplit:function(e){const t=/[,:;]/,n=[];return e.forEach((e=>{let r=0;e.forEach(((o,a)=>{t.test(o.post)&&function(e,t){const n=/^[0-9]+$/,r=e[t];if(!r)return!1;const o=new Set(["may","april","august","jan"]);if("like"===r.normal||o.has(r.normal))return!1;if(r.tags.has("Place")||r.tags.has("Date"))return!1;if(e[t-1]){const n=e[t-1];if(n.tags.has("Date")||o.has(n.normal))return!1;if(n.tags.has("Adjective")||r.tags.has("Adjective"))return!1}const a=r.normal;return 1!==a.length&&2!==a.length&&4!==a.length||!n.test(a)}(e,a+1)&&(n.push(e.slice(r,a+1)),r=a+1)})),r{const i=e[t],s=(t=(t=t.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);s.length>1&&(void 0===a[s[0]]||s.length>a[s[0]])&&(a[s[0]]=s.length),!0===Si.hasOwnProperty(i)&&Si[i](t,o,n,r),o[t]=o[t]||i})),delete o[""],delete o.null,delete o[" "],{lex:o,_multi:a}},transform:Bi,looksPlural:Ki}};const Wi={one:{lexicon:{}},two:{models:mi}},qi={"Actor|Verb":"Actor","Adj|Gerund":"Adjective","Adj|Noun":"Adjective","Adj|Past":"Adjective","Adj|Present":"Adjective","Noun|Verb":"Singular","Noun|Gerund":"Gerund","Person|Noun":"Noun","Person|Date":"Month","Person|Verb":"FirstName","Person|Place":"Person","Person|Adj":"Comparative","Plural|Verb":"Plural","Unit|Noun":"Noun"},Ui=function(e,t){const n={model:t,methods:Ji},{lex:r,_multi:o}=Ji.two.expandLexicon(e,n);return Object.assign(t.one.lexicon,r),Object.assign(t.one._multiCache,o),t},Ri=function(e,t,n){const r=Ci(e,Wi);t[r.PastTense]=t[r.PastTense]||"PastTense",t[r.Gerund]=t[r.Gerund]||"Gerund",!0===n&&(t[r.PresentTense]=t[r.PresentTense]||"PresentTense")},Qi=function(e,t,n){const r=ji(e,n);t[r]=t[r]||"Superlative";const o=xi(e,n);t[o]=t[o]||"Comparative"},Zi=function(e,t){const n={},r=t.one.lexicon;return Object.keys(e).forEach((o=>{const a=e[o];if(n[o]=qi[a],"Noun|Verb"!==a&&"Person|Verb"!==a&&"Actor|Verb"!==a||Ri(o,r,!1),"Adj|Present"===a&&(Ri(o,r,!0),Qi(o,r,t)),"Person|Adj"===a&&Qi(o,r,t),"Adj|Gerund"===a||"Noun|Gerund"===a){const e=Ai(o,Wi,"Gerund");r[e]||(n[e]="Infinitive")}if("Noun|Gerund"!==a&&"Adj|Noun"!==a&&"Person|Noun"!==a||function(e,t,n){const r=Ao(e,n);t[r]=t[r]||"Plural"}(o,r,t),"Adj|Past"===a){const e=Ai(o,Wi,"PastTense");r[e]||(n[e]="Infinitive")}})),t=Ui(n,t)};let _i={one:{_multiCache:{},lexicon:No,frozenLex:{"20th century fox":"Organization","7 eleven":"Organization","motel 6":"Organization","excuse me":"Expression","financial times":"Organization","guns n roses":"Organization","la z boy":"Organization","labour party":"Organization","new kids on the block":"Organization","new york times":"Organization","the guess who":"Organization","thin lizzy":"Organization","prime minister":"Actor","free market":"Singular","lay up":"Singular","living room":"Singular","living rooms":"Plural","spin off":"Singular","appeal court":"Uncountable","cold war":"Uncountable","gene pool":"Uncountable","machine learning":"Uncountable","nail polish":"Uncountable","time off":"Uncountable","take part":"Infinitive","bill gates":"Person","doctor who":"Person","dr who":"Person","he man":"Person","iron man":"Person","kid cudi":"Person","run dmc":"Person","rush limbaugh":"Person","snow white":"Person","tiger woods":"Person","brand new":"Adjective","en route":"Adjective","left wing":"Adjective","off guard":"Adjective","on board":"Adjective","part time":"Adjective","right wing":"Adjective","so called":"Adjective","spot on":"Adjective","straight forward":"Adjective","super duper":"Adjective","tip top":"Adjective","top notch":"Adjective","up to date":"Adjective","win win":"Adjective","brooklyn nets":"SportsTeam","chicago bears":"SportsTeam","houston astros":"SportsTeam","houston dynamo":"SportsTeam","houston rockets":"SportsTeam","houston texans":"SportsTeam","minnesota twins":"SportsTeam","orlando magic":"SportsTeam","san antonio spurs":"SportsTeam","san diego chargers":"SportsTeam","san diego padres":"SportsTeam","iron maiden":"ProperNoun","isle of man":"Country","united states":"Country","united states of america":"Country","prince edward island":"Region","cedar breaks":"Place","cedar falls":"Place","point blank":"Adverb","tiny bit":"Adverb","by the time":"Conjunction","no matter":"Conjunction","civil wars":"Plural","credit cards":"Plural","default rates":"Plural","free markets":"Plural","head starts":"Plural","home runs":"Plural","lay ups":"Plural","phone calls":"Plural","press releases":"Plural","record labels":"Plural","soft serves":"Plural","student loans":"Plural","tax returns":"Plural","tv shows":"Plural","video games":"Plural","took part":"PastTense","takes part":"PresentTense","taking part":"Gerund","taken part":"Participle","light bulb":"Noun","rush hour":"Noun","fluid ounce":"Unit","the rolling stones":"Organization"}},two:{irregularPlurals:ho,models:mi,suffixPatterns:ja,prefixPatterns:Da,endsWith:La,neighbours:Wa,regexNormal:[[/^[\w.]+@[\w.]+\.[a-z]{2,3}$/,"Email"],[/^(https?:\/\/|www\.)+\w+\.[a-z]{2,3}/,"Url","http.."],[/^[a-z0-9./].+\.(com|net|gov|org|ly|edu|info|biz|dev|ru|jp|de|in|uk|br|io|ai)/,"Url",".com"],[/^[PMCE]ST$/,"Timezone","EST"],[/^ma?c'[a-z]{3}/,"LastName","mc'neil"],[/^o'[a-z]{3}/,"LastName","o'connor"],[/^ma?cd[aeiou][a-z]{3}/,"LastName","mcdonald"],[/^(lol)+[sz]$/,"Expression","lol"],[/^wo{2,}a*h?$/,"Expression","wooah"],[/^(hee?){2,}h?$/,"Expression","hehe"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb","un-vite"],[/^(m|k|cm|km)\/(s|h|hr)$/,"Unit","5 k/m"],[/^(ug|ng|mg)\/(l|m3|ft3)$/,"Unit","ug/L"],[/[^:/]\/\p{Letter}/u,"SlashedTerm","love/hate"]],regexText:[[/^#[\p{Number}_]*\p{Letter}/u,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^([A-Z]\.){2}[A-Z]?/i,["Acronym","Noun"],"F.B.I"],[/.{3}[lkmnp]in['‘’‛‵′`´]$/,"Gerund","chillin'"],[/.{4}s['‘’‛‵′`´]$/,"Possessive","flanders'"],[/^[\p{Emoji_Presentation}\p{Extended_Pictographic}]/u,"Emoji","emoji-class"]],regexNumbers:[[/^@1?[0-9](am|pm)$/i,"Time","3pm"],[/^@1?[0-9]:[0-9]{2}(am|pm)?$/i,"Time","3:30pm"],[/^'[0-9]{2}$/,"Year"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time","3:12:31"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/i,"Time","1:12pm"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/i,"Time","1:12:31pm"],[/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}/i,"Date","iso-date"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date","iso-dash"],[/^[0-9]{1,4}\/[0-9]{1,2}\/([0-9]{4}|[0-9]{2})$/,"Date","iso-slash"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date","iso-dot"],[/^[0-9]{1,4}-[a-z]{2,9}-[0-9]{1,4}$/i,"Date","12-dec-2019"],[/^utc ?[+-]?[0-9]+$/,"Timezone","utc-9"],[/^(gmt|utc)[+-][0-9]{1,2}$/i,"Timezone","gmt-3"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber","421-0029"],[/^(\+?[0-9][ -])?[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber","1-800-"],[/^[-+]?\p{Currency_Symbol}[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?([kmb]|bn)?\+?$/u,["Money","Value"],"$5.30"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\p{Currency_Symbol}\+?$/u,["Money","Value"],"5.30£"],[/^[-+]?[$£]?[0-9]([0-9,.])+(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"],"$400usd"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"],"5,999"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|r?th)$/,["Ordinal","NumericValue"],"53rd"],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"],".73th"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"],"-4%"],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"],".3%"],[/^[0-9]{1,4}\/[0-9]{1,4}(st|nd|rd|th)?s?$/,["Fraction","NumericValue"],"2/3rds"],[/^[0-9.]{1,3}[a-z]{0,2}[-–—][0-9]{1,3}[a-z]{0,2}$/,["Value","NumberRange"],"3-4"],[/^[0-9]{1,2}(:[0-9][0-9])?(am|pm)? ?[-–—] ?[0-9]{1,2}(:[0-9][0-9])?(am|pm)$/,["Time","NumberRange"],"3-4pm"],[/^[0-9.]+([a-z°]{1,4})$/,"NumericValue","9km"]],switches:jo,clues:ca,uncountable:{},orgWords:pi,placeWords:fi}};_i=function(e){return e=function(e,t){return Object.keys(e).forEach((n=>{"Uncountable"===e[n]&&(t.two.uncountable[n]=!0,e[n]="Uncountable")})),t}((e=Ui(e.one.lexicon,e)).one.lexicon,e),e=function(e){const{irregularPlurals:t}=e.two,{lexicon:n}=e.one;return Object.entries(t).forEach((e=>{n[e[0]]=n[e[0]]||"Singular",n[e[1]]=n[e[1]]||"Plural"})),e}(e=Zi(e.two.switches,e)),e}(_i);const Xi=function(e,t,n,r){const o=r.methods.one.setTag;"-"===e[t].post&&e[t+1]&&o([e[t],e[t+1]],"Hyphenated",r,null,"1-punct-hyphen''")},Yi=/^(under|over|mis|re|un|dis|semi)-?/,es=function(e,t,n){const r=n.two.switches,o=e[t];if(r.hasOwnProperty(o.normal))o.switch=r[o.normal];else if(Yi.test(o.normal)){const e=o.normal.replace(Yi,"");e.length>3&&r.hasOwnProperty(e)&&(o.switch=r[e])}},ts=function(e,t,n){if(!t||0===t.length)return;if(!0===e.frozen)return;const r="undefined"!=typeof process&&process.env?process.env:self.env||{};r&&r.DEBUG_TAGS&&((e,t,n="")=>{const r=e.text||"["+e.implicit+"]";var o;"string"!=typeof t&&t.length>2&&(t=t.slice(0,2).join(", #")+" +"),t="string"!=typeof t?t.join(", #"):t,console.log(` ${(o=r,""+o+"").padEnd(24)} → #${t.padEnd(22)} ${(e=>""+e+"")(n)}`)})(e,t,n),e.tags=e.tags||new Set,"string"==typeof t?e.tags.add(t):t.forEach((t=>e.tags.add(t)))},ns=["Acronym","Abbreviation","ProperNoun","Uncountable","Possessive","Pronoun","Activity","Honorific","Month"],rs=function(e,t,n){const r=e[t],o=Array.from(r.tags);for(let e=0;ee.tags.has(t)))||(Ki(e.normal)?ts(e,"Plural","3-plural-guess"):ts(e,"Singular","3-singular-guess"))}(r),function(e){const t=e.tags;if(t.has("Verb")&&1===t.size){const t=ki(e.normal);t&&ts(e,t,"3-verb-tense-guess")}}(r)},os=/^\p{Lu}[\p{Ll}'’]/u,as=/[0-9]/,is=["Date","Month","WeekDay","Unit","Expression"],ss=/[IVX]/,ls=/^[IVXLCDM]{2,}$/,us=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,cs={li:!0,dc:!0,md:!0,dm:!0,ml:!0},hs=function(e,t,n){const r=e[t];r.index=r.index||[0,0];const o=r.index[1],a=r.text||"";return 0!==o&&!0===os.test(a)&&!1===as.test(a)?is.find((e=>r.tags.has(e)))||r.pre.match(/["']$/)||"the"===r.normal?null:(rs(e,t,n),r.tags.has("Noun")||r.frozen||r.tags.clear(),ts(r,"ProperNoun","2-titlecase"),!0):a.length>=2&&ls.test(a)&&ss.test(a)&&us.test(a)&&!cs[r.normal]?(ts(r,"RomanNumeral","2-xvii"),!0):null},ds=function(e="",t=[]){const n=e.length;let r=7;n<=r&&(r=n-1);for(let o=r;o>1;o-=1){const r=e.substring(n-o,n);if(!0===t[r.length].hasOwnProperty(r)){return t[r.length][r]}}return null},gs=function(e,t,n){const r=e[t];if(0===r.tags.size){let e=ds(r.normal,n.two.suffixPatterns);if(null!==e)return ts(r,e,"2-suffix"),r.confidence=.7,!0;if(r.implicit&&(e=ds(r.implicit,n.two.suffixPatterns),null!==e))return ts(r,e,"2-implicit-suffix"),r.confidence=.7,!0}return null},ms=/['‘’‛‵′`´]/,ps=function(e,t){for(let n=0;nn-3&&(r=n-3);for(let n=r;n>2;n-=1){const r=e.substring(0,n);if(!0===t[r.length].hasOwnProperty(r))return t[r.length][r]}return null}(r.normal,n.two.prefixPatterns);if(null!==e)return ts(r,e,"2-prefix"),r.confidence=.5,!0}return null},vs=new Set(["in","on","by","until","for","to","during","throughout","through","within","before","after","of","this","next","last","circa","around","post","pre","budget","classic","plan","may"]),ys=function(e){if(!e)return!1;const t=e.normal||e.implicit;return!!vs.has(t)||(!!(e.tags.has("Date")||e.tags.has("Month")||e.tags.has("WeekDay")||e.tags.has("Year"))||!!e.tags.has("ProperNoun"))},ws=function(e){return!!e&&(!!e.tags.has("Ordinal")||(!!(e.tags.has("Cardinal")&&e.normal.length<3)||("is"===e.normal||"was"===e.normal)))},ks=function(e){return e&&(e.tags.has("Date")||e.tags.has("Month")||e.tags.has("WeekDay")||e.tags.has("Year"))},Ps=function(e,t){const n=e[t];if(n.tags.has("NumericValue")&&n.tags.has("Cardinal")&&4===n.normal.length){const r=Number(n.normal);if(r&&!isNaN(r)&&r>1400&&r<2100){const o=e[t-1],a=e[t+1];if(ys(o)||ys(a))return ts(n,"Year","2-tagYear");if(r>=1920&&r<2025){if(ws(o)||ws(a))return ts(n,"Year","2-tagYear-close");if(ks(e[t-2])||ks(e[t+2]))return ts(n,"Year","2-tagYear-far");if(o&&(o.tags.has("Determiner")||o.tags.has("Possessive"))&&a&&a.tags.has("Noun")&&!a.tags.has("Plural"))return ts(n,"Year","2-tagYear-noun")}}}return null},As=function(e,t,n,r){const o=r.methods.one.setTag,a=e[t],i=["PastTense","PresentTense","Auxiliary","Modal","Particle"];if(a.tags.has("Verb")){i.find((e=>a.tags.has(e)))||o([a],"Infinitive",r,null,"2-verb-type''")}},Cs=/^[A-Z]('s|,)?$/,Ns=/^[A-Z-]+$/,js=/^[A-Z]+s$/,xs=/([A-Z]\.)+[A-Z]?,?$/,Is=/[A-Z]{2,}('s|,)?$/,Ts=/([a-z]\.)+[a-z]\.?$/,Ds={I:!0,A:!0},Hs={la:!0,ny:!0,us:!0,dc:!0,gb:!0},Es=function(e,t,n){const r=e[t];return r.tags.has("RomanNumeral")||r.tags.has("Acronym")||r.frozen?null:function(e,t){let n=e.text;if(!1===Ns.test(n)){if(!(n.length>3&&!0===js.test(n)))return!1;n=n.replace(/s$/,"")}return!(n.length>5||Ds.hasOwnProperty(n)||t.one.lexicon.hasOwnProperty(e.normal)||!0!==xs.test(n)&&!0!==Ts.test(n)&&!0!==Cs.test(n)&&!0!==Is.test(n))}(r,n)?(r.tags.clear(),ts(r,["Acronym","Noun"],"3-no-period-acronym"),!0===Hs[r.normal]&&ts(r,"Place","3-place-acronym"),!0===js.test(r.text)&&ts(r,"Plural","3-plural-acronym"),!0):!Ds.hasOwnProperty(r.text)&&Cs.test(r.text)?(r.tags.clear(),ts(r,["Acronym","Noun"],"3-one-letter-acronym"),!0):r.tags.has("Organization")&&r.text.length<=3?(ts(r,"Acronym","3-org-acronym"),!0):r.tags.has("Organization")&&Ns.test(r.text)&&r.text.length<=6?(ts(r,"Acronym","3-titlecase-acronym"),!0):null},Gs=function(e,t){if(!e)return null;const n=t.find((t=>e.normal===t[0]));return n?n[1]:null},Os=function(e,t){if(!e)return null;const n=t.find((t=>e.tags.has(t[0])));return n?n[1]:null},Fs=function(e,t,n){const{leftTags:r,leftWords:o,rightWords:a,rightTags:i}=n.two.neighbours,s=e[t];if(0===s.tags.size){let l=null;if(l=l||Gs(e[t-1],o),l=l||Gs(e[t+1],a),l=l||Os(e[t-1],r),l=l||Os(e[t+1],i),l)return ts(s,l,"3-[neighbour]"),rs(e,t,n),e[t].confidence=.2,!0}return null},Vs=function(e,t,n){return!!e&&(!e.tags.has("FirstName")&&!e.tags.has("Place")&&(!!(e.tags.has("ProperNoun")||e.tags.has("Organization")||e.tags.has("Acronym"))||!(n||(r=e.text,!/^\p{Lu}[\p{Ll}'’]/u.test(r)))&&(0!==t||e.tags.has("Singular"))));var r},zs=function(e,t,n,r){const o=n.model.two.orgWords,a=n.methods.one.setTag,i=e[t];if(!0===o[i.machine||i.normal]&&Vs(e[t-1],t-1,r)){a([e[t]],"Organization",n,null,"3-[org-word]");for(let o=t;o>=0&&Vs(e[o],o,r);o-=1)a([e[o]],"Organization",n,null,"3-[org-word]")}return null},Bs=/'s$/,Ss=new Set(["athletic","city","community","eastern","federal","financial","great","historic","historical","local","memorial","municipal","national","northern","provincial","southern","state","western","spring","pine","sunset","view","oak","maple","spruce","cedar","willow"]),$s=new Set(["center","centre","way","range","bar","bridge","field","pit"]),Ms=function(e,t,n){if(!e)return!1;const r=e.tags;return!(r.has("Organization")||r.has("Possessive")||Bs.test(e.normal))&&(!(!r.has("ProperNoun")&&!r.has("Place"))||!(n||(o=e.text,!/^\p{Lu}[\p{Ll}'’]/u.test(o)))&&(0!==t||r.has("Singular")));var o},Ls=function(e,t,n,r){const o=n.model.two.placeWords,a=n.methods.one.setTag,i=e[t],s=i.machine||i.normal;if(!0===o[s]){for(let o=t-1;o>=0;o-=1)if(!Ss.has(e[o].normal)){if(!Ms(e[o],o,r))break;a(e.slice(o,t+1),"Place",n,null,"3-[place-of-foo]")}if($s.has(s))return!1;for(let o=t+1;oe[t].tags.has("ProperNoun")&&Js.test(e[t].text)?"Noun":null,qs=(e,t,n)=>0!==t||e[1]?null:n,Us={"Adj|Gerund":(e,t)=>Ws(e,t),"Adj|Noun":(e,t)=>Ws(e,t)||function(e,t){return!e[t+1]&&e[t-1]&&e[t-1].tags.has("Determiner")?"Noun":null}(e,t),"Actor|Verb":(e,t)=>Ws(e,t),"Adj|Past":(e,t)=>Ws(e,t),"Adj|Present":(e,t)=>Ws(e,t),"Noun|Gerund":(e,t)=>Ws(e,t),"Noun|Verb":(e,t)=>t>0&&Ws(e,t)||qs(e,t,"Infinitive"),"Plural|Verb":(e,t)=>Ws(e,t)||qs(e,t,"PresentTense")||function(e,t,n){return 0===t&&e.length>3?n:null}(e,t,"Plural"),"Person|Noun":(e,t)=>Ws(e,t),"Person|Verb":(e,t)=>0!==t?Ws(e,t):null,"Person|Adj":(e,t)=>0===t&&e.length>1||Ws(e,t)?"Person":null},Rs="undefined"!=typeof process&&process.env?process.env:self.env||{},Qs=/^(under|over|mis|re|un|dis|semi)-?/,Zs=(e,t)=>{if(!e||!t)return null;const n=e.normal||e.implicit;let r=null;return t.hasOwnProperty(n)&&(r=t[n]),r&&Rs.DEBUG_TAGS&&console.log(`\n  ↓ - '${n}' `),r},_s=(e,t={},n)=>{if(!e||!t)return null;const r=Array.from(e.tags).sort(((e,t)=>(n[e]?n[e].parents.length:0)>(n[t]?n[t].parents.length:0)?-1:1));let o=r.find((e=>t[e]));return o&&Rs.DEBUG_TAGS&&console.log(`  ↓ - '${e.normal||e.implicit}' (#${o}) `),o=t[o],o},Xs=function(e,t,n){const r=n.model,o=n.methods.one.setTag,{switches:a,clues:i}=r.two,s=e[t];let l=s.normal||s.implicit||"";if(Qs.test(l)&&!a[l]&&(l=l.replace(Qs,"")),s.switch){const a=s.switch;if(s.tags.has("Acronym")||s.tags.has("PhrasalVerb"))return;let u=function(e,t,n,r){if(!n)return null;const o="also"!==e[t-1]?.text?t-1:Math.max(0,t-2),a=r.one.tagSet;let i=Zs(e[t+1],n.afterWords);return i=i||Zs(e[o],n.beforeWords),i=i||_s(e[o],n.beforeTags,a),i=i||_s(e[t+1],n.afterTags,a),i}(e,t,i[a],r);Us[a]&&(u=Us[a](e,t)||u),u?(o([s],u,n,null,`3-[switch] (${a})`),rs(e,t,r)):Rs.DEBUG_TAGS&&console.log(`\n -> X - '${l}' : (${a}) `)}},Ys={there:!0,this:!0,it:!0,him:!0,her:!0,us:!0},el=function(e){if(e.filter((e=>!e.tags.has("ProperNoun"))).length<=3)return!1;const t=/^[a-z]/;return e.every((e=>!t.test(e.text)))},tl=function(e,t,n,r){for(let o=0;o=2){if(e.length<4&&!Ys[e[1].normal])return;if(!o.tags.has("PhrasalVerb")&&r.hasOwnProperty(o.normal))return;(e[1].tags.has("Noun")||e[1].tags.has("Determiner"))&&(e.slice(1,3).some((e=>e.tags.has("Verb")))&&!o.tags.has("#PhrasalVerb")||n([o],"Imperative",t,null,"3-[imperative]"))}}(e,n)},rl={Possessive:e=>{let t=e.machine||e.normal||e.text;return t=t.replace(/'s$/,""),t},Plural:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.noun.toSingular(n,t.model)},Copula:()=>"is",PastTense:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.verb.toInfinitive(n,t.model,"PastTense")},Gerund:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.verb.toInfinitive(n,t.model,"Gerund")},PresentTense:(e,t)=>{const n=e.machine||e.normal||e.text;return e.tags.has("Infinitive")?n:t.methods.two.transform.verb.toInfinitive(n,t.model,"PresentTense")},Comparative:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.adjective.fromComparative(n,t.model)},Superlative:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.adjective.fromSuperlative(n,t.model)},Adverb:(e,t)=>{const{fromAdverb:n}=t.methods.two.transform.adjective;return n(e.machine||e.normal||e.text)}},ol={Adverb:"RB",Comparative:"JJR",Superlative:"JJS",Adjective:"JJ",TO:"Conjunction",Modal:"MD",Auxiliary:"MD",Gerund:"VBG",PastTense:"VBD",Participle:"VBN",PresentTense:"VBZ",Infinitive:"VB",Particle:"RP",Verb:"VB",Pronoun:"PRP",Cardinal:"CD",Conjunction:"CC",Determiner:"DT",Preposition:"IN",QuestionWord:"WP",Expression:"UH",Possessive:"POS",ProperNoun:"NNP",Person:"NNP",Place:"NNP",Organization:"NNP",Singular:"NN",Plural:"NNS",Noun:"NN",There:"EX"};var al={preTagger:function(e){const{methods:t,model:n,world:r}=e,o=e.docs;!function(e,t,n){e.forEach((e=>{!function(e,t,n,r){const o=r.methods.one.setTag;if(e.length>=3){const t=/:/;if(e[0].post.match(t)){const t=e[1];if(t.tags.has("Value")||t.tags.has("Email")||t.tags.has("PhoneNumber"))return;o([e[0]],"Expression",r,null,"2-punct-colon''")}}}(e,0,0,n)}))}(o,0,r);const a=t.two.quickSplit(o);for(let e=0;e{for(let r=0;r{e.forEach((e=>{e.penn=function(e){if(e.tags.has("ProperNoun")&&e.tags.has("Plural"))return"NNPS";if(e.tags.has("Possessive")&&e.tags.has("Pronoun"))return"PRP$";if("there"===e.normal)return"EX";if("to"===e.normal)return"TO";const t=e.tagRank||[];for(let e=0;e{e.implicit=e.normal,e.text="",e.normal=""}));for(let e=0;e(e.implicit=e.text,e.machine=e.text,e.pre="",e.post="",e.text="",e.normal="",e.index=[r,o+t],e))),n[0]&&(n[0].pre=e[r][o].pre,n[n.length-1].post=e[r][o].post,n[0].text=e[r][o].text,n[0].normal=e[r][o].normal),e[r].splice(o,1,...n))},fl=/'/,bl=new Set(["been","become"]),vl=new Set(["what","how","when","if","too"]),yl=new Set(["too","also","enough"]),wl=function(e,t){const n=e[t].normal.split(fl)[0];if("let"===n)return[n,"us"];if("there"===n){const r=e[t+1];if(r&&r.tags.has("Plural"))return[n,"are"]}return"has"===((e,t)=>{for(let n=t+1;n{for(let n=t+1;n0&&(n-=1),e[a]&&(a+=1),o.ptrs=[[0,n,a]],o.compute(["freeze","lexicon","preTagger","unfreeze"]),function(e){e.forEach(((e,t)=>{e.index&&(e.index[1]=t)}))}(e)},Hl={d:(e,t)=>Cl(e,t),t:(e,t)=>function(e,t){if("ain't"===e[t].normal||"aint"===e[t].normal){if(e[t+1]&&"never"===e[t+1].normal)return["have"];const n=function(e,t){for(let n=t-1;n>=0;n-=1)if(e[n].tags.has("Noun")||e[n].tags.has("Pronoun")||e[n].tags.has("Plural")||e[n].tags.has("Singular"))return e[n];return null}(e,t);if(n){if("we"===n.normal||"they"===n.normal)return["are","not"];if("i"===n.normal)return["am","not"];if(n.tags&&n.tags.has("Plural"))return["are","not"]}return["is","not"]}return[e[t].normal.replace(/n't/,""),"not"]}(e,t),s:(e,t,n)=>((e,t)=>{const n=e[t];if(Nl.hasOwnProperty(n.machine||n.normal))return!1;if(n.tags.has("Possessive"))return!0;if(n.tags.has("QuestionWord"))return!1;if("he's"===n.normal||"she's"===n.normal)return!1;const r=e[t+1];if(!r)return!0;if("it's"===n.normal)return!!r.tags.has("#Noun");if("Noun|Gerund"==r.switch){const r=e[t+2];return r?!!r.tags.has("Copula")||("on"===r.normal||r.normal,!1):!(!n.tags.has("Actor")&&!n.tags.has("ProperNoun"))}if(r.tags.has("Verb"))return!!r.tags.has("Infinitive")||!r.tags.has("Gerund")&&!!r.tags.has("PresentTense");if("Adj|Noun"===r.switch){const n=e[t+2];if(!n)return!1;if(Il.has(n.normal))return!0;if(xl.has(n.normal))return!1}if(r.tags.has("Noun")){const e=r.machine||r.normal;return!("here"===e||"there"===e||"everywhere"===e||r.tags.has("Possessive")||r.tags.has("ProperNoun")&&!n.tags.has("ProperNoun"))}if(e[t-1]&&!0===jl[e[t-1].normal])return!0;if(r.tags.has("Adjective")){const n=e[t+2];if(!n)return!1;if(n.tags.has("Noun")&&!n.tags.has("Pronoun")){const e=r.normal;return"above"!==e&&"below"!==e&&"behind"!==e}return"Noun|Verb"===n.switch}return!!r.tags.has("Value")})(e,t)?n.methods.one.setTag([e[t]],"Possessive",n,null,"2-contraction"):wl(e,t)},El=function(e,t){const n=t.fromText(e.join(" "));return n.compute("id"),n.docs[0]};var Gl={contractionTwo:e=>{const{world:t,document:n}=e;n.forEach(((r,o)=>{for(let a=r.length-1;a>=0;a-=1){if(r[a].implicit)continue;let i=null;!0===Tl.test(r[a].normal)&&(i=r[a].normal.split(Tl)[1]);let s=null;Hl.hasOwnProperty(i)&&(s=Hl[i](r,a,t)),s&&(s=El(s,e),pl(n,[o,a],s),Dl(n[o],e,a,s.length))}}))}},Ol={compute:Gl,api:function(e){class Contractions extends e{constructor(e,t,n){super(e,t,n),this.viewType="Contraction"}expand(){return this.docs.forEach((e=>{const t=ml.test(e[0].text);e.forEach(((t,n)=>{t.text=t.implicit||"",delete t.implicit,ne.toUpperCase()))}(e[0].text))})),this.compute("normal"),this}}e.prototype.contractions=function(){const e=this.match("@hasContraction+");return new Contractions(this.document,e.pointer)},e.prototype.contract=gl},hooks:["contractionTwo"]};const Fl="(hard|fast|late|early|high|right|deep|close|direct)";const Vl="(i|we|they)";const zl=[].concat([{match:"(got|were|was|is|are|am) (#PastTense|#Participle)",tag:"Passive",reason:"got-walked"},{match:"(was|were|is|are|am) being (#PastTense|#Participle)",tag:"Passive",reason:"was-being"},{match:"(had|have|has) been (#PastTense|#Participle)",tag:"Passive",reason:"had-been"},{match:"will be being? (#PastTense|#Participle)",tag:"Passive",reason:"will-be-cleaned"},{match:"#Noun [(#PastTense|#Participle)] by (the|a) #Noun",group:0,tag:"Passive",reason:"suffered-by"}],[{match:"[(all|both)] #Determiner #Noun",group:0,tag:"Noun",reason:"all-noun"},{match:"#Copula [(just|alone)]$",group:0,tag:"Adjective",reason:"not-adverb"},{match:"#Singular is #Adverb? [#PastTense$]",group:0,tag:"Adjective",reason:"is-filled"},{match:"[#PastTense] #Singular is",group:0,tag:"Adjective",reason:"smoked-poutine"},{match:"[#PastTense] #Plural are",group:0,tag:"Adjective",reason:"baked-onions"},{match:"well [#PastTense]",group:0,tag:"Adjective",reason:"well-made"},{match:"#Copula [fucked up?]",group:0,tag:"Adjective",reason:"swears-adjective"},{match:"#Singular (seems|appears) #Adverb? [#PastTense$]",group:0,tag:"Adjective",reason:"seems-filled"},{match:"#Copula #Adjective? [(out|in|through)]$",group:0,tag:"Adjective",reason:"still-out"},{match:"^[#Adjective] (the|your) #Noun",group:0,notIf:"(all|even)",tag:"Infinitive",reason:"shut-the"},{match:"the [said] #Noun",group:0,tag:"Adjective",reason:"the-said-card"},{match:"[#Hyphenated (#Hyphenated && #PastTense)] (#Noun|#Conjunction)",group:0,tag:"Adjective",notIf:"#Adverb",reason:"faith-based"},{match:"[#Hyphenated (#Hyphenated && #Gerund)] (#Noun|#Conjunction)",group:0,tag:"Adjective",notIf:"#Adverb",reason:"self-driving"},{match:"[#PastTense (#Hyphenated && #PhrasalVerb)] (#Noun|#Conjunction)",group:0,tag:"Adjective",reason:"dammed-up"},{match:"(#Hyphenated && #Value) fold",tag:"Adjective",reason:"two-fold"},{match:"must (#Hyphenated && #Infinitive)",tag:"Adjective",reason:"must-win"},{match:"(#Hyphenated && #Infinitive) #Hyphenated",tag:"Adjective",notIf:"#PhrasalVerb",reason:"vacuum-sealed"},{match:"too much",tag:"Adverb Adjective",reason:"bit-4"},{match:"a bit much",tag:"Determiner Adverb Adjective",reason:"bit-3"},{match:"[(un|contra|extra|inter|intra|macro|micro|mid|mis|mono|multi|pre|sub|tri|ex)] #Adjective",group:0,tag:["Adjective","Prefix"],reason:"un-skilled"}],[{match:"#Adverb [#Adverb] (and|or|then)",group:0,tag:"Adjective",reason:"kinda-sparkly-and"},{match:"[(dark|bright|flat|light|soft|pale|dead|dim|faux|little|wee|sheer|most|near|good|extra|all)] #Adjective",group:0,tag:"Adverb",reason:"dark-green"},{match:"#Copula [far too] #Adjective",group:0,tag:"Adverb",reason:"far-too"},{match:"#Copula [still] (in|#Gerund|#Adjective)",group:0,tag:"Adverb",reason:"was-still-walking"},{match:`#Plural ${Fl}`,tag:"#PresentTense #Adverb",reason:"studies-hard"},{match:`#Verb [${Fl}] !#Noun?`,group:0,notIf:"(#Copula|get|got|getting|become|became|becoming|feel|feels|feeling|#Determiner|#Preposition)",tag:"Adverb",reason:"shops-direct"},{match:"[#Plural] a lot",tag:"PresentTense",reason:"studies-a-lot"}],[{match:"as [#Gerund] as",group:0,tag:"Adjective",reason:"as-gerund-as"},{match:"more [#Gerund] than",group:0,tag:"Adjective",reason:"more-gerund-than"},{match:"(so|very|extremely) [#Gerund]",group:0,tag:"Adjective",reason:"so-gerund"},{match:"(found|found) it #Adverb? [#Gerund]",group:0,tag:"Adjective",reason:"found-it-gerund"},{match:"a (little|bit|wee) bit? [#Gerund]",group:0,tag:"Adjective",reason:"a-bit-gerund"},{match:"#Gerund [#Gerund]",group:0,tag:"Adjective",notIf:"(impersonating|practicing|considering|assuming)",reason:"looking-annoying"},{match:"(looked|look|looks) #Adverb? [%Adj|Gerund%]",group:0,tag:"Adjective",notIf:"(impersonating|practicing|considering|assuming)",reason:"looked-amazing"},{match:"[%Adj|Gerund%] #Determiner",group:0,tag:"Gerund",reason:"developing-a"},{match:"#Possessive [%Adj|Gerund%] #Noun",group:0,tag:"Adjective",reason:"leading-manufacturer"},{match:"%Noun|Gerund% %Adj|Gerund%",tag:"Gerund #Adjective",reason:"meaning-alluring"},{match:"(face|embrace|reveal|stop|start|resume) %Adj|Gerund%",tag:"#PresentTense #Adjective",reason:"face-shocking"},{match:"(are|were) [%Adj|Gerund%] #Plural",group:0,tag:"Adjective",reason:"are-enduring-symbols"}],[{match:"#Determiner [#Adjective] #Copula",group:0,tag:"Noun",reason:"the-adj-is"},{match:"#Adjective [#Adjective] #Copula",group:0,tag:"Noun",reason:"adj-adj-is"},{match:"(his|its) [%Adj|Noun%]",group:0,tag:"Noun",notIf:"#Hyphenated",reason:"his-fine"},{match:"#Copula #Adverb? [all]",group:0,tag:"Noun",reason:"is-all"},{match:"(have|had) [#Adjective] #Preposition .",group:0,tag:"Noun",reason:"have-fun"},{match:"#Gerund (giant|capital|center|zone|application)",tag:"Noun",reason:"brewing-giant"},{match:"#Preposition (a|an) [#Adjective]$",group:0,tag:"Noun",reason:"an-instant"},{match:"no [#Adjective] #Modal",group:0,tag:"Noun",reason:"no-golden"},{match:"[brand #Gerund?] new",group:0,tag:"Adverb",reason:"brand-new"},{match:"(#Determiner|#Comparative|new|different) [kind]",group:0,tag:"Noun",reason:"some-kind"},{match:"#Possessive [%Adj|Noun%] #Noun",group:0,tag:"Adjective",reason:"her-favourite"},{match:"must && #Hyphenated .",tag:"Adjective",reason:"must-win"},{match:"#Determiner [#Adjective]$",tag:"Noun",notIf:"(this|that|#Comparative|#Superlative)",reason:"the-south"},{match:"(#Noun && #Hyphenated) (#Adjective && #Hyphenated)",tag:"Adjective",notIf:"(this|that|#Comparative|#Superlative)",reason:"company-wide"},{match:"#Determiner [#Adjective] (#Copula|#Determiner)",notIf:"(#Comparative|#Superlative)",group:0,tag:"Noun",reason:"the-poor"},{match:"[%Adj|Noun%] #Noun",notIf:"(#Pronoun|#ProperNoun)",group:0,tag:"Adjective",reason:"stable-foundations"}],[{match:"[still] #Adjective",group:0,tag:"Adverb",reason:"still-advb"},{match:"[still] #Verb",group:0,tag:"Adverb",reason:"still-verb"},{match:"[so] #Adjective",group:0,tag:"Adverb",reason:"so-adv"},{match:"[way] #Comparative",group:0,tag:"Adverb",reason:"way-adj"},{match:"[way] #Adverb #Adjective",group:0,tag:"Adverb",reason:"way-too-adj"},{match:"[all] #Verb",group:0,tag:"Adverb",reason:"all-verb"},{match:"#Verb [like]",group:0,notIf:"(#Modal|#PhrasalVerb)",tag:"Adverb",reason:"verb-like"},{match:"(barely|hardly) even",tag:"Adverb",reason:"barely-even"},{match:"[even] #Verb",group:0,tag:"Adverb",reason:"even-walk"},{match:"[even] #Comparative",group:0,tag:"Adverb",reason:"even-worse"},{match:"[even] (#Determiner|#Possessive)",group:0,tag:"#Adverb",reason:"even-the"},{match:"even left",tag:"#Adverb #Verb",reason:"even-left"},{match:"[way] #Adjective",group:0,tag:"#Adverb",reason:"way-over"},{match:"#PresentTense [(hard|quick|bright|slow|fast|backwards|forwards)]",notIf:"#Copula",group:0,tag:"Adverb",reason:"lazy-ly"},{match:"[much] #Adjective",group:0,tag:"Adverb",reason:"bit-1"},{match:"#Copula [#Adverb]$",group:0,tag:"Adjective",reason:"is-well"},{match:"a [(little|bit|wee) bit?] #Adjective",group:0,tag:"Adverb",reason:"a-bit-cold"},{match:"[(super|pretty)] #Adjective",group:0,tag:"Adverb",reason:"super-strong"},{match:"(become|fall|grow) #Adverb? [#PastTense]",group:0,tag:"Adjective",reason:"overly-weakened"},{match:"(a|an) #Adverb [#Participle] #Noun",group:0,tag:"Adjective",reason:"completely-beaten"},{match:"#Determiner #Adverb? [close]",group:0,tag:"Adjective",reason:"a-close"},{match:"#Gerund #Adverb? [close]",group:0,tag:"Adverb",notIf:"(getting|becoming|feeling)",reason:"being-close"},{match:"(the|those|these|a|an) [#Participle] #Noun",group:0,tag:"Adjective",reason:"blown-motor"},{match:"(#PresentTense|#PastTense) [back]",group:0,tag:"Adverb",notIf:"(#PhrasalVerb|#Copula)",reason:"charge-back"},{match:"#Verb [around]",group:0,tag:"Adverb",notIf:"#PhrasalVerb",reason:"send-around"},{match:"[later] #PresentTense",group:0,tag:"Adverb",reason:"later-say"},{match:"#Determiner [well] !#PastTense?",group:0,tag:"Noun",reason:"the-well"},{match:"#Adjective [enough]",group:0,tag:"Adverb",reason:"high-enough"}],[{match:"[sun] the #Ordinal",tag:"WeekDay",reason:"sun-the-5th"},{match:"[sun] #Date",group:0,tag:"WeekDay",reason:"sun-feb"},{match:"#Date (on|this|next|last|during)? [sun]",group:0,tag:"WeekDay",reason:"1pm-sun"},{match:"(in|by|before|during|on|until|after|of|within|all) [sat]",group:0,tag:"WeekDay",reason:"sat"},{match:"(in|by|before|during|on|until|after|of|within|all) [wed]",group:0,tag:"WeekDay",reason:"wed"},{match:"(in|by|before|during|on|until|after|of|within|all) [march]",group:0,tag:"Month",reason:"march"},{match:"[sat] #Date",group:0,tag:"WeekDay",reason:"sat-feb"},{match:"#Preposition [(march|may)]",group:0,tag:"Month",reason:"in-month"},{match:"(this|next|last) (march|may) !#Infinitive?",tag:"#Date #Month",reason:"this-month"},{match:"(march|may) the? #Value",tag:"#Month #Date #Date",reason:"march-5th"},{match:"#Value of? (march|may)",tag:"#Date #Date #Month",reason:"5th-of-march"},{match:"[(march|may)] .? #Date",group:0,tag:"Month",reason:"march-and-feb"},{match:"#Date .? [(march|may)]",group:0,tag:"Month",reason:"feb-and-march"},{match:"#Adverb [(march|may)]",group:0,tag:"Verb",reason:"quickly-march"},{match:"[(march|may)] #Adverb",group:0,tag:"Verb",reason:"march-quickly"},{match:"#Value (am|pm)",tag:"Time",reason:"2-am"}],[{match:"#Holiday (day|eve)",tag:"Holiday",reason:"holiday-day"},{match:"#Value of #Month",tag:"Date",reason:"value-of-month"},{match:"#Cardinal #Month",tag:"Date",reason:"cardinal-month"},{match:"#Month #Value to #Value",tag:"Date",reason:"value-to-value"},{match:"#Month the #Value",tag:"Date",reason:"month-the-value"},{match:"(#WeekDay|#Month) #Value",tag:"Date",reason:"date-value"},{match:"#Value (#WeekDay|#Month)",tag:"Date",reason:"value-date"},{match:"(#TextValue && #Date) #TextValue",tag:"Date",reason:"textvalue-date"},{match:"#Month #NumberRange",tag:"Date",reason:"aug 20-21"},{match:"#WeekDay #Month #Ordinal",tag:"Date",reason:"week mm-dd"},{match:"#Month #Ordinal #Cardinal",tag:"Date",reason:"mm-dd-yyy"},{match:"(#Place|#Demonmym|#Time) (standard|daylight|central|mountain)? time",tag:"Timezone",reason:"std-time"},{match:"(eastern|mountain|pacific|central|atlantic) (standard|daylight|summer)? time",tag:"Timezone",reason:"eastern-time"},{match:"#Time [(eastern|mountain|pacific|central|est|pst|gmt)]",group:0,tag:"Timezone",reason:"5pm-central"},{match:"(central|western|eastern) european time",tag:"Timezone",reason:"cet"}],[{match:"(the|any) [more]",group:0,tag:"Singular",reason:"more-noun"},{match:"[more] #Noun",group:0,tag:"Adjective",reason:"more-noun"},{match:"(right|rights) of .",tag:"Noun",reason:"right-of"},{match:"a [bit]",group:0,tag:"Singular",reason:"bit-2"},{match:"a [must]",group:0,tag:"Singular",reason:"must-2"},{match:"(we|us) [all]",group:0,tag:"Noun",reason:"we all"},{match:"due to [#Verb]",group:0,tag:"Noun",reason:"due-to"},{match:"some [#Verb] #Plural",group:0,tag:"Noun",reason:"determiner6"},{match:"#Possessive #Ordinal [#PastTense]",group:0,tag:"Noun",reason:"first-thought"},{match:"(the|this|those|these) #Adjective [%Verb|Noun%]",group:0,tag:"Noun",notIf:"#Copula",reason:"the-adj-verb"},{match:"(the|this|those|these) #Adverb #Adjective [#Verb]",group:0,tag:"Noun",reason:"determiner4"},{match:"the [#Verb] #Preposition .",group:0,tag:"Noun",reason:"determiner1"},{match:"(a|an|the) [#Verb] of",group:0,tag:"Noun",reason:"the-verb-of"},{match:"#Determiner #Noun of [#Verb]",group:0,tag:"Noun",notIf:"#Gerund",reason:"noun-of-noun"},{match:"#PastTense #Preposition [#PresentTense]",group:0,notIf:"#Gerund",tag:"Noun",reason:"ended-in-ruins"},{match:"#Conjunction [u]",group:0,tag:"Pronoun",reason:"u-pronoun-2"},{match:"[u] #Verb",group:0,tag:"Pronoun",reason:"u-pronoun-1"},{match:"#Determiner [(western|eastern|northern|southern|central)] #Noun",group:0,tag:"Noun",reason:"western-line"},{match:"(#Singular && @hasHyphen) #PresentTense",tag:"Noun",reason:"hyphen-verb"},{match:"is no [#Verb]",group:0,tag:"Noun",reason:"is-no-verb"},{match:"do [so]",group:0,tag:"Noun",reason:"so-noun"},{match:"#Determiner [(shit|damn|hell)]",group:0,tag:"Noun",reason:"swears-noun"},{match:"to [(shit|hell)]",group:0,tag:"Noun",reason:"to-swears"},{match:"(the|these) [#Singular] (were|are)",group:0,tag:"Plural",reason:"singular-were"},{match:"a #Noun+ or #Adverb+? [#Verb]",group:0,tag:"Noun",reason:"noun-or-noun"},{match:"(the|those|these|a|an) #Adjective? [#PresentTense #Particle?]",group:0,tag:"Noun",notIf:"(seem|appear|include|#Gerund|#Copula)",reason:"det-inf"},{match:"#Noun #Actor",tag:"Actor",notIf:"(#Person|#Pronoun)",reason:"thing-doer"},{match:"#Gerund #Actor",tag:"Actor",reason:"gerund-doer"},{match:"co #Singular",tag:"Actor",reason:"co-noun"},{match:"[#Noun+] #Actor",group:0,tag:"Actor",notIf:"(#Honorific|#Pronoun|#Possessive)",reason:"air-traffic-controller"},{match:"(urban|cardiac|cardiovascular|respiratory|medical|clinical|visual|graphic|creative|dental|exotic|fine|certified|registered|technical|virtual|professional|amateur|junior|senior|special|pharmaceutical|theoretical)+ #Noun? #Actor",tag:"Actor",reason:"fine-artist"},{match:"#Noun+ (coach|chef|king|engineer|fellow|personality|boy|girl|man|woman|master)",tag:"Actor",reason:"dance-coach"},{match:"chief . officer",tag:"Actor",reason:"chief-x-officer"},{match:"chief of #Noun+",tag:"Actor",reason:"chief-of-police"},{match:"senior? vice? president of #Noun+",tag:"Actor",reason:"president-of"},{match:"#Determiner [sun]",group:0,tag:"Singular",reason:"the-sun"},{match:"#Verb (a|an) [#Value]$",group:0,tag:"Singular",reason:"did-a-value"},{match:"the [(can|will|may)]",group:0,tag:"Singular",reason:"the can"},{match:"#FirstName #Acronym? (#Possessive && #LastName)",tag:"Possessive",reason:"name-poss"},{match:"#Organization+ #Possessive",tag:"Possessive",reason:"org-possessive"},{match:"#Place+ #Possessive",tag:"Possessive",reason:"place-possessive"},{match:"#Possessive #PresentTense #Particle?",notIf:"(#Gerund|her)",tag:"Noun",reason:"possessive-verb"},{match:"(my|our|their|her|his|its) [(#Plural && #Actor)] #Noun",tag:"Possessive",reason:"my-dads"},{match:"#Value of a [second]",group:0,unTag:"Value",tag:"Singular",reason:"10th-of-a-second"},{match:"#Value [seconds]",group:0,unTag:"Value",tag:"Plural",reason:"10-seconds"},{match:"in [#Infinitive]",group:0,tag:"Singular",reason:"in-age"},{match:"a [#Adjective] #Preposition",group:0,tag:"Noun",reason:"a-minor-in"},{match:"#Determiner [#Singular] said",group:0,tag:"Actor",reason:"the-actor-said"},{match:"#Determiner #Noun [(feel|sense|process|rush|side|bomb|bully|challenge|cover|crush|dump|exchange|flow|function|issue|lecture|limit|march|process)] !(#Preposition|to|#Adverb)?",group:0,tag:"Noun",reason:"the-noun-sense"},{match:"[#PresentTense] (of|by|for) (a|an|the) #Noun #Copula",group:0,tag:"Plural",reason:"photographs-of"},{match:"#Infinitive and [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"fight and win"},{match:"#Noun and [#Verb] and #Noun",group:0,tag:"Noun",reason:"peace-and-flowers"},{match:"the #Cardinal [%Adj|Noun%]",group:0,tag:"Noun",reason:"the-1992-classic"},{match:"#Copula the [%Adj|Noun%] #Noun",group:0,tag:"Adjective",reason:"the-premier-university"},{match:"i #Verb [me] #Noun",group:0,tag:"Possessive",reason:"scottish-me"},{match:"[#PresentTense] (music|class|lesson|night|party|festival|league|ceremony)",group:0,tag:"Noun",reason:"dance-music"},{match:"[wit] (me|it)",group:0,tag:"Presposition",reason:"wit-me"},{match:"#PastTense #Possessive [#Verb]",group:0,tag:"Noun",notIf:"(saw|made)",reason:"left-her-boots"},{match:"#Value [%Plural|Verb%]",group:0,tag:"Plural",notIf:"(one|1|a|an)",reason:"35-signs"},{match:"had [#PresentTense]",group:0,tag:"Noun",notIf:"(#Gerund|come|become)",reason:"had-time"},{match:"%Adj|Noun% %Noun|Verb%",tag:"#Adjective #Noun",notIf:"#ProperNoun #Noun",reason:"instant-access"},{match:"#Determiner [%Adj|Noun%] #Conjunction",group:0,tag:"Noun",reason:"a-rep-to"},{match:"#Adjective #Noun [%Plural|Verb%]$",group:0,tag:"Plural",notIf:"#Pronoun",reason:"near-death-experiences"},{match:"#Possessive #Noun [%Plural|Verb%]$",group:0,tag:"Plural",reason:"your-guild-colors"}],[{match:"(this|that|the|a|an) [#Gerund #Infinitive]",group:0,tag:"Singular",reason:"the-planning-process"},{match:"(that|the) [#Gerund #PresentTense]",group:0,ifNo:"#Copula",tag:"Plural",reason:"the-paving-stones"},{match:"#Determiner [#Gerund] #Noun",group:0,tag:"Adjective",reason:"the-gerund-noun"},{match:"#Pronoun #Infinitive [#Gerund] #PresentTense",group:0,tag:"Noun",reason:"tipping-sucks"},{match:"#Adjective [#Gerund]",group:0,tag:"Noun",notIf:"(still|even|just)",reason:"early-warning"},{match:"[#Gerund] #Adverb? not? #Copula",group:0,tag:"Activity",reason:"gerund-copula"},{match:"#Copula [(#Gerund|#Activity)] #Copula",group:0,tag:"Gerund",reason:"are-doing-is"},{match:"[#Gerund] #Modal",group:0,tag:"Activity",reason:"gerund-modal"},{match:"#Singular for [%Noun|Gerund%]",group:0,tag:"Gerund",reason:"noun-for-gerund"},{match:"#Comparative (for|at) [%Noun|Gerund%]",group:0,tag:"Gerund",reason:"better-for-gerund"},{match:"#PresentTense the [#Gerund]",group:0,tag:"Noun",reason:"keep-the-touching"}],[{match:"#Infinitive (this|that|the) [#Infinitive]",group:0,tag:"Noun",reason:"do-this-dance"},{match:"#Gerund #Determiner [#Infinitive]",group:0,tag:"Noun",reason:"running-a-show"},{match:"#Determiner (only|further|just|more|backward) [#Infinitive]",group:0,tag:"Noun",reason:"the-only-reason"},{match:"(the|this|a|an) [#Infinitive] #Adverb? #Verb",group:0,tag:"Noun",reason:"determiner5"},{match:"#Determiner #Adjective #Adjective? [#Infinitive]",group:0,tag:"Noun",reason:"a-nice-inf"},{match:"#Determiner #Demonym [#PresentTense]",group:0,tag:"Noun",reason:"mexican-train"},{match:"#Adjective #Noun+ [#Infinitive] #Copula",group:0,tag:"Noun",reason:"career-move"},{match:"at some [#Infinitive]",group:0,tag:"Noun",reason:"at-some-inf"},{match:"(go|goes|went) to [#Infinitive]",group:0,tag:"Noun",reason:"goes-to-verb"},{match:"(a|an) #Adjective? #Noun [#Infinitive] (#Preposition|#Noun)",group:0,notIf:"from",tag:"Noun",reason:"a-noun-inf"},{match:"(a|an) #Noun [#Infinitive]$",group:0,tag:"Noun",reason:"a-noun-inf2"},{match:"#Gerund #Adjective? for [#Infinitive]",group:0,tag:"Noun",reason:"running-for"},{match:"about [#Infinitive]",group:0,tag:"Singular",reason:"about-love"},{match:"#Plural on [#Infinitive]",group:0,tag:"Noun",reason:"on-stage"},{match:"any [#Infinitive]",group:0,tag:"Noun",reason:"any-charge"},{match:"no [#Infinitive]",group:0,tag:"Noun",reason:"no-doubt"},{match:"number of [#PresentTense]",group:0,tag:"Noun",reason:"number-of-x"},{match:"(taught|teaches|learns|learned) [#PresentTense]",group:0,tag:"Noun",reason:"teaches-x"},{match:"(try|use|attempt|build|make) [#Verb #Particle?]",notIf:"(#Copula|#Noun|sure|fun|up)",group:0,tag:"Noun",reason:"do-verb"},{match:"^[#Infinitive] (is|was)",group:0,tag:"Noun",reason:"checkmate-is"},{match:"#Infinitive much [#Infinitive]",group:0,tag:"Noun",reason:"get-much"},{match:"[cause] #Pronoun #Verb",group:0,tag:"Conjunction",reason:"cause-cuz"},{match:"the #Singular [#Infinitive] #Noun",group:0,tag:"Noun",notIf:"#Pronoun",reason:"cardio-dance"},{match:"#Determiner #Modal [#Noun]",group:0,tag:"PresentTense",reason:"should-smoke"},{match:"this [#Plural]",group:0,tag:"PresentTense",notIf:"(#Preposition|#Date)",reason:"this-verbs"},{match:"#Noun that [#Plural]",group:0,tag:"PresentTense",notIf:"(#Preposition|#Pronoun|way)",reason:"voice-that-rocks"},{match:"that [#Plural] to",group:0,tag:"PresentTense",notIf:"#Preposition",reason:"that-leads-to"},{match:"(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)",group:0,tag:"Infinitive",reason:"let-him-glue"},{match:"#Verb (all|every|each|most|some|no) [#PresentTense]",notIf:"#Modal",group:0,tag:"Noun",reason:"all-presentTense"},{match:"(had|have|#PastTense) #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"better",reason:"adj-presentTense"},{match:"#Value #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"one-big-reason"},{match:"#PastTense #Adjective+ [#PresentTense]",group:0,tag:"Noun",notIf:"(#Copula|better)",reason:"won-wide-support"},{match:"(many|few|several|couple) [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"many-poses"},{match:"#Determiner #Adverb #Adjective [%Noun|Verb%]",group:0,tag:"Noun",notIf:"#Copula",reason:"very-big-dream"},{match:"from #Noun to [%Noun|Verb%]",group:0,tag:"Noun",reason:"start-to-finish"},{match:"(for|with|of) #Noun (and|or|not) [%Noun|Verb%]",group:0,tag:"Noun",notIf:"#Pronoun",reason:"for-food-and-gas"},{match:"#Adjective #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"adorable-little-store"},{match:"#Gerund #Adverb? #Comparative [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"higher-costs"},{match:"(#Noun && @hasComma) #Noun (and|or) [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"noun-list"},{match:"(many|any|some|several) [#PresentTense] for",group:0,tag:"Noun",reason:"any-verbs-for"},{match:"to #PresentTense #Noun [#PresentTense] #Preposition",group:0,tag:"Noun",reason:"gas-exchange"},{match:"#PastTense (until|as|through|without) [#PresentTense]",group:0,tag:"Noun",reason:"waited-until-release"},{match:"#Gerund like #Adjective? [#PresentTense]",group:0,tag:"Plural",reason:"like-hot-cakes"},{match:"some #Adjective [#PresentTense]",group:0,tag:"Noun",reason:"some-reason"},{match:"for some [#PresentTense]",group:0,tag:"Noun",reason:"for-some-reason"},{match:"(same|some|the|that|a) kind of [#PresentTense]",group:0,tag:"Noun",reason:"some-kind-of"},{match:"(same|some|the|that|a) type of [#PresentTense]",group:0,tag:"Noun",reason:"some-type-of"},{match:"#Gerund #Adjective #Preposition [#PresentTense]",group:0,tag:"Noun",reason:"doing-better-for-x"},{match:"(get|got|have) #Comparative [#PresentTense]",group:0,tag:"Noun",reason:"got-better-aim"},{match:"whose [#PresentTense] #Copula",group:0,tag:"Noun",reason:"whos-name-was"},{match:"#PhrasalVerb #Particle #Preposition [#PresentTense]",group:0,tag:"Noun",reason:"given-up-on-x"},{match:"there (are|were) #Adjective? [#PresentTense]",group:0,tag:"Plural",reason:"there-are"},{match:"#Value [#PresentTense] of",group:0,notIf:"(one|1|#Copula|#Infinitive)",tag:"Plural",reason:"2-trains"},{match:"[#PresentTense] (are|were) #Adjective",group:0,tag:"Plural",reason:"compromises-are-possible"},{match:"^[(hope|guess|thought|think)] #Pronoun #Verb",group:0,tag:"Infinitive",reason:"suppose-i"},{match:"#Possessive #Adjective [#Verb]",group:0,tag:"Noun",notIf:"#Copula",reason:"our-full-support"},{match:"[(tastes|smells)] #Adverb? #Adjective",group:0,tag:"PresentTense",reason:"tastes-good"},{match:"#Copula #Gerund [#PresentTense] !by?",group:0,tag:"Noun",notIf:"going",reason:"ignoring-commute"},{match:"#Determiner #Adjective? [(shed|thought|rose|bid|saw|spelt)]",group:0,tag:"Noun",reason:"noun-past"},{match:"how to [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"how-to-noun"},{match:"which [%Noun|Verb%] #Noun",group:0,tag:"Infinitive",reason:"which-boost-it"},{match:"#Gerund [%Plural|Verb%]",group:0,tag:"Plural",reason:"asking-questions"},{match:"(ready|available|difficult|hard|easy|made|attempt|try) to [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"ready-to-noun"},{match:"(bring|went|go|drive|run|bike) to [%Noun|Verb%]",group:0,tag:"Noun",reason:"bring-to-noun"},{match:"#Modal #Noun [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"would-you-look"},{match:"#Copula just [#Infinitive]",group:0,tag:"Noun",reason:"is-just-spam"},{match:"^%Noun|Verb% %Plural|Verb%",tag:"Imperative #Plural",reason:"request-copies"},{match:"#Adjective #Plural and [%Plural|Verb%]",group:0,tag:"#Plural",reason:"pickles-and-drinks"},{match:"#Determiner #Year [#Verb]",group:0,tag:"Noun",reason:"the-1968-film"},{match:"#Determiner [#PhrasalVerb #Particle]",group:0,tag:"Noun",reason:"the-break-up"},{match:"#Determiner [%Adj|Noun%] #Noun",group:0,tag:"Adjective",notIf:"(#Pronoun|#Possessive|#ProperNoun)",reason:"the-individual-goals"},{match:"[%Noun|Verb%] or #Infinitive",group:0,tag:"Infinitive",reason:"work-or-prepare"},{match:"to #Infinitive [#PresentTense]",group:0,tag:"Noun",notIf:"(#Gerund|#Copula|help)",reason:"to-give-thanks"},{match:"[#Noun] me",group:0,tag:"Verb",reason:"kills-me"},{match:"%Plural|Verb% %Plural|Verb%",tag:"#PresentTense #Plural",reason:"removes-wrinkles"}],[{match:"#Money and #Money #Currency?",tag:"Money",reason:"money-and-money"},{match:"#Value #Currency [and] #Value (cents|ore|centavos|sens)",group:0,tag:"money",reason:"and-5-cents"},{match:"#Value (mark|rand|won|rub|ore)",tag:"#Money #Currency",reason:"4-mark"},{match:"a pound",tag:"#Money #Unit",reason:"a-pound"},{match:"#Value (pound|pounds)",tag:"#Money #Unit",reason:"4-pounds"}],[{match:"[(half|quarter)] of? (a|an)",group:0,tag:"Fraction",reason:"millionth"},{match:"#Adverb [half]",group:0,tag:"Fraction",reason:"nearly-half"},{match:"[half] the",group:0,tag:"Fraction",reason:"half-the"},{match:"#Cardinal and a half",tag:"Fraction",reason:"and-a-half"},{match:"#Value (halves|halfs|quarters)",tag:"Fraction",reason:"two-halves"},{match:"a #Ordinal",tag:"Fraction",reason:"a-quarter"},{match:"[#Cardinal+] (#Fraction && /s$/)",tag:"Fraction",reason:"seven-fifths"},{match:"[#Cardinal+ #Ordinal] of .",group:0,tag:"Fraction",reason:"ordinal-of"},{match:"[(#NumericValue && #Ordinal)] of .",group:0,tag:"Fraction",reason:"num-ordinal-of"},{match:"(a|one) #Cardinal?+ #Ordinal",tag:"Fraction",reason:"a-ordinal"},{match:"#Cardinal+ out? of every? #Cardinal",tag:"Fraction",reason:"out-of"}],[{match:"#Cardinal [second]",tag:"Unit",reason:"one-second"},{match:"!once? [(a|an)] (#Duration|hundred|thousand|million|billion|trillion)",group:0,tag:"Value",reason:"a-is-one"},{match:"1 #Value #PhoneNumber",tag:"PhoneNumber",reason:"1-800-Value"},{match:"#NumericValue #PhoneNumber",tag:"PhoneNumber",reason:"(800) PhoneNumber"},{match:"#Demonym #Currency",tag:"Currency",reason:"demonym-currency"},{match:"#Value [(buck|bucks|grand)]",group:0,tag:"Currency",reason:"value-bucks"},{match:"[#Value+] #Currency",group:0,tag:"Money",reason:"15 usd"},{match:"[second] #Noun",group:0,tag:"Ordinal",reason:"second-noun"},{match:"#Value+ [#Currency]",group:0,tag:"Unit",reason:"5-yan"},{match:"#Value [(foot|feet)]",group:0,tag:"Unit",reason:"foot-unit"},{match:"#Value [#Abbreviation]",group:0,tag:"Unit",reason:"value-abbr"},{match:"#Value [k]",group:0,tag:"Unit",reason:"value-k"},{match:"#Unit an hour",tag:"Unit",reason:"unit-an-hour"},{match:"(minus|negative) #Value",tag:"Value",reason:"minus-value"},{match:"#Value (point|decimal) #Value",tag:"Value",reason:"value-point-value"},{match:"#Determiner [(half|quarter)] #Ordinal",group:0,tag:"Value",reason:"half-ordinal"},{match:"#Multiple+ and #Value",tag:"Value",reason:"magnitude-and-value"},{match:"#Value #Unit [(per|an) (hr|hour|sec|second|min|minute)]",group:0,tag:"Unit",reason:"12-miles-per-second"},{match:"#Value [(square|cubic)] #Unit",group:0,tag:"Unit",reason:"square-miles"}],[{match:"#Copula [(#Noun|#PresentTense)] #LastName",group:0,tag:"FirstName",reason:"copula-noun-lastname"},{match:"(sister|pope|brother|father|aunt|uncle|grandpa|grandfather|grandma) #ProperNoun",tag:"Person",reason:"lady-titlecase",safe:!0},{match:"#FirstName [#Determiner #Noun] #LastName",group:0,tag:"Person",reason:"first-noun-last"},{match:"#ProperNoun (b|c|d|e|f|g|h|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z) #ProperNoun",tag:"Person",reason:"titlecase-acronym-titlecase",safe:!0},{match:"#Acronym #LastName",tag:"Person",reason:"acronym-lastname",safe:!0},{match:"#Person (jr|sr|md)",tag:"Person",reason:"person-honorific"},{match:"#Honorific #Acronym",tag:"Person",reason:"Honorific-TitleCase"},{match:"#Person #Person the? #RomanNumeral",tag:"Person",reason:"roman-numeral"},{match:"#FirstName [/^[^aiurck]$/]",group:0,tag:["Acronym","Person"],reason:"john-e"},{match:"#Noun van der? #Noun",tag:"Person",reason:"van der noun",safe:!0},{match:"(king|queen|prince|saint|lady) of #Noun",tag:"Person",reason:"king-of-noun",safe:!0},{match:"(prince|lady) #Place",tag:"Person",reason:"lady-place"},{match:"(king|queen|prince|saint) #ProperNoun",tag:"Person",notIf:"#Place",reason:"saint-foo"},{match:"al (#Person|#ProperNoun)",tag:"Person",reason:"al-borlen",safe:!0},{match:"#FirstName de #Noun",tag:"Person",reason:"bill-de-noun"},{match:"#FirstName (bin|al) #Noun",tag:"Person",reason:"bill-al-noun"},{match:"#FirstName #Acronym #ProperNoun",tag:"Person",reason:"bill-acronym-title"},{match:"#FirstName #FirstName #ProperNoun",tag:"Person",reason:"bill-firstname-title"},{match:"#Honorific #FirstName? #ProperNoun",tag:"Person",reason:"dr-john-Title"},{match:"#FirstName the #Adjective",tag:"Person",reason:"name-the-great"},{match:"#ProperNoun (van|al|bin) #ProperNoun",tag:"Person",reason:"title-van-title",safe:!0},{match:"#ProperNoun (de|du) la? #ProperNoun",tag:"Person",notIf:"#Place",reason:"title-de-title"},{match:"#Singular #Acronym #LastName",tag:"#FirstName #Person .",reason:"title-acro-noun",safe:!0},{match:"[#ProperNoun] #Person",group:0,tag:"Person",reason:"proper-person",safe:!0},{match:"#Person [#ProperNoun #ProperNoun]",group:0,tag:"Person",notIf:"#Possessive",reason:"three-name-person",safe:!0},{match:"#FirstName #Acronym? [#ProperNoun]",group:0,tag:"LastName",notIf:"#Possessive",reason:"firstname-titlecase"},{match:"#FirstName [#FirstName]",group:0,tag:"LastName",reason:"firstname-firstname"},{match:"#FirstName #Acronym #Noun",tag:"Person",reason:"n-acro-noun",safe:!0},{match:"#FirstName [(de|di|du|van|von)] #Person",group:0,tag:"LastName",reason:"de-firstname"},{match:"[(lieutenant|corporal|sergeant|captain|qeen|king|admiral|major|colonel|marshal|president|queen|king)+] #ProperNoun",group:0,tag:"Honorific",reason:"seargeant-john"},{match:"[(private|general|major|rear|prime|field|count|miss)] #Honorific? #Person",group:0,tag:["Honorific","Person"],reason:"ambg-honorifics"},{match:"#Honorific #FirstName [#Singular]",group:0,tag:"LastName",notIf:"#Possessive",reason:"dr-john-foo",safe:!0},{match:"[(his|her) (majesty|honour|worship|excellency|honorable)] #Person",group:0,tag:"Honorific",reason:"his-excellency"},{match:"#Honorific #Actor",tag:"Honorific",reason:"Lieutenant colonel"},{match:"(first|second|third|1st|2nd|3rd) #Actor",tag:"Honorific",reason:"first lady"},{match:"#Person #RomanNumeral",tag:"Person",reason:"louis-IV"}],[{match:"#FirstName #Noun$",tag:". #LastName",notIf:"(#Possessive|#Organization|#Place|#Pronoun|@hasTitleCase)",reason:"firstname-noun"},{match:"%Person|Date% #Acronym? #ProperNoun",tag:"Person",reason:"jan-thierson"},{match:"%Person|Noun% #Acronym? #ProperNoun",tag:"Person",reason:"switch-person",safe:!0},{match:"%Person|Noun% #Organization",tag:"Organization",reason:"olive-garden"},{match:"%Person|Verb% #Acronym? #ProperNoun",tag:"Person",reason:"verb-propernoun",ifNo:"#Actor"},{match:"[%Person|Verb%] (will|had|has|said|says|told|did|learned|wants|wanted)",group:0,tag:"Person",reason:"person-said"},{match:"[%Person|Place%] (harbor|harbour|pier|town|city|place|dump|landfill)",group:0,tag:"Place",reason:"sydney-harbour"},{match:"(west|east|north|south) [%Person|Place%]",group:0,tag:"Place",reason:"east-sydney"},{match:"#Modal [%Person|Verb%]",group:0,tag:"Verb",reason:"would-mark"},{match:"#Adverb [%Person|Verb%]",group:0,tag:"Verb",reason:"really-mark"},{match:"[%Person|Verb%] (#Adverb|#Comparative)",group:0,tag:"Verb",reason:"drew-closer"},{match:"%Person|Verb% #Person",tag:"Person",reason:"rob-smith"},{match:"%Person|Verb% #Acronym #ProperNoun",tag:"Person",reason:"rob-a-smith"},{match:"[will] #Verb",group:0,tag:"Modal",reason:"will-verb"},{match:"(will && @isTitleCase) #ProperNoun",tag:"Person",reason:"will-name"},{match:"(#FirstName && !#Possessive) [#Singular] #Verb",group:0,safe:!0,tag:"LastName",reason:"jack-layton"},{match:"^[#Singular] #Person #Verb",group:0,safe:!0,tag:"Person",reason:"sherwood-anderson"},{match:"(a|an) [#Person]$",group:0,unTag:"Person",reason:"a-warhol"}],[{match:"#Copula (pretty|dead|full|well|sure) (#Adjective|#Noun)",tag:"#Copula #Adverb #Adjective",reason:"sometimes-adverb"},{match:"(#Pronoun|#Person) (had|#Adverb)? [better] #PresentTense",group:0,tag:"Modal",reason:"i-better"},{match:"(#Modal|i|they|we|do) not? [like]",group:0,tag:"PresentTense",reason:"modal-like"},{match:"#Noun #Adverb? [left]",group:0,tag:"PastTense",reason:"left-verb"},{match:"will #Adverb? not? #Adverb? [be] #Gerund",group:0,tag:"Copula",reason:"will-be-copula"},{match:"will #Adverb? not? #Adverb? [be] #Adjective",group:0,tag:"Copula",reason:"be-copula"},{match:"[march] (up|down|back|toward)",notIf:"#Date",group:0,tag:"Infinitive",reason:"march-to"},{match:"#Modal [march]",group:0,tag:"Infinitive",reason:"must-march"},{match:"[may] be",group:0,tag:"Verb",reason:"may-be"},{match:"[(subject|subjects|subjected)] to",group:0,tag:"Verb",reason:"subject to"},{match:"[home] to",group:0,tag:"PresentTense",reason:"home to"},{match:"[open] #Determiner",group:0,tag:"Infinitive",reason:"open-the"},{match:"(were|was) being [#PresentTense]",group:0,tag:"PastTense",reason:"was-being"},{match:"(had|has|have) [been /en$/]",group:0,tag:"Auxiliary Participle",reason:"had-been-broken"},{match:"(had|has|have) [been /ed$/]",group:0,tag:"Auxiliary PastTense",reason:"had-been-smoked"},{match:"(had|has) #Adverb? [been] #Adverb? #PastTense",group:0,tag:"Auxiliary",reason:"had-been-adj"},{match:"(had|has) to [#Noun] (#Determiner|#Possessive)",group:0,tag:"Infinitive",reason:"had-to-noun"},{match:"have [#PresentTense]",group:0,tag:"PastTense",notIf:"(come|gotten)",reason:"have-read"},{match:"(does|will|#Modal) that [work]",group:0,tag:"PastTense",reason:"does-that-work"},{match:"[(sound|sounds)] #Adjective",group:0,tag:"PresentTense",reason:"sounds-fun"},{match:"[(look|looks)] #Adjective",group:0,tag:"PresentTense",reason:"looks-good"},{match:"[(start|starts|stop|stops|begin|begins)] #Gerund",group:0,tag:"Verb",reason:"starts-thinking"},{match:"(have|had) read",tag:"Modal #PastTense",reason:"read-read"},{match:"(is|was|were) [(under|over) #PastTense]",group:0,tag:"Adverb Adjective",reason:"was-under-cooked"},{match:"[shit] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear1-verb"},{match:"[damn] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear2-verb"},{match:"[fuck] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear3-verb"},{match:"#Plural that %Noun|Verb%",tag:". #Preposition #Infinitive",reason:"jobs-that-work"},{match:"[works] for me",group:0,tag:"PresentTense",reason:"works-for-me"},{match:"as #Pronoun [please]",group:0,tag:"Infinitive",reason:"as-we-please"},{match:"[(co|mis|de|inter|intra|pre|re|un|out|under|over|counter)] #Verb",group:0,tag:["Verb","Prefix"],notIf:"(#Copula|#PhrasalVerb)",reason:"co-write"},{match:"#PastTense and [%Adj|Past%]",group:0,tag:"PastTense",reason:"dressed-and-left"},{match:"[%Adj|Past%] and #PastTense",group:0,tag:"PastTense",reason:"dressed-and-left"},{match:"#Copula #Pronoun [%Adj|Past%]",group:0,tag:"Adjective",reason:"is-he-stoked"},{match:"to [%Noun|Verb%] #Preposition",group:0,tag:"Infinitive",reason:"to-dream-of"}],[{match:"(slowly|quickly) [#Adjective]",group:0,tag:"Verb",reason:"slowly-adj"},{match:"does (#Adverb|not)? [#Adjective]",group:0,tag:"PresentTense",reason:"does-mean"},{match:"[(fine|okay|cool|ok)] by me",group:0,tag:"Adjective",reason:"okay-by-me"},{match:"i (#Adverb|do)? not? [mean]",group:0,tag:"PresentTense",reason:"i-mean"},{match:"will #Adjective",tag:"Auxiliary Infinitive",reason:"will-adj"},{match:"#Pronoun [#Adjective] #Determiner #Adjective? #Noun",group:0,tag:"Verb",reason:"he-adj-the"},{match:"#Copula [%Adj|Present%] to #Verb",group:0,tag:"Verb",reason:"adj-to"},{match:"#Copula [#Adjective] (well|badly|quickly|slowly)",group:0,tag:"Verb",reason:"done-well"},{match:"#Adjective and [#Gerund] !#Preposition?",group:0,tag:"Adjective",reason:"rude-and-x"},{match:"#Copula #Adverb? (over|under) [#PastTense]",group:0,tag:"Adjective",reason:"over-cooked"},{match:"#Copula #Adjective+ (and|or) [#PastTense]$",group:0,tag:"Adjective",reason:"bland-and-overcooked"},{match:"got #Adverb? [#PastTense] of",group:0,tag:"Adjective",reason:"got-tired-of"},{match:"(seem|seems|seemed|appear|appeared|appears|feel|feels|felt|sound|sounds|sounded) (#Adverb|#Adjective)? [#PastTense]",group:0,tag:"Adjective",reason:"felt-loved"},{match:"(seem|feel|seemed|felt) [#PastTense #Particle?]",group:0,tag:"Adjective",reason:"seem-confused"},{match:"a (bit|little|tad) [#PastTense #Particle?]",group:0,tag:"Adjective",reason:"a-bit-confused"},{match:"not be [%Adj|Past% #Particle?]",group:0,tag:"Adjective",reason:"do-not-be-confused"},{match:"#Copula just [%Adj|Past% #Particle?]",group:0,tag:"Adjective",reason:"is-just-right"},{match:"as [#Infinitive] as",group:0,tag:"Adjective",reason:"as-pale-as"},{match:"[%Adj|Past%] and #Adjective",group:0,tag:"Adjective",reason:"faled-and-oppressive"},{match:"or [#PastTense] #Noun",group:0,tag:"Adjective",notIf:"(#Copula|#Pronoun)",reason:"or-heightened-emotion"},{match:"(become|became|becoming|becomes) [#Verb]",group:0,tag:"Adjective",reason:"become-verb"},{match:"#Possessive [#PastTense] #Noun",group:0,tag:"Adjective",reason:"declared-intentions"},{match:"#Copula #Pronoun [%Adj|Present%]",group:0,tag:"Adjective",reason:"is-he-cool"},{match:"#Copula [%Adj|Past%] with",group:0,tag:"Adjective",notIf:"(associated|worn|baked|aged|armed|bound|fried|loaded|mixed|packed|pumped|filled|sealed)",reason:"is-crowded-with"},{match:"#Copula #Adverb? [%Adj|Present%]$",group:0,tag:"Adjective",reason:"was-empty$"}],[{match:"will (#Adverb|not)+? [have] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"will-have-vb"},{match:"[#Copula] (#Adverb|not)+? (#Gerund|#PastTense)",group:0,tag:"Auxiliary",reason:"copula-walking"},{match:"[(#Modal|did)+] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"modal-verb"},{match:"#Modal (#Adverb|not)+? [have] (#Adverb|not)+? [had] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"would-have"},{match:"[(has|had)] (#Adverb|not)+? #PastTense",group:0,tag:"Auxiliary",reason:"had-walked"},{match:"[(do|does|did|will|have|had|has|got)] (not|#Adverb)+? #Verb",group:0,tag:"Auxiliary",reason:"have-had"},{match:"[about to] #Adverb? #Verb",group:0,tag:["Auxiliary","Verb"],reason:"about-to"},{match:"#Modal (#Adverb|not)+? [be] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"would-be"},{match:"[(#Modal|had|has)] (#Adverb|not)+? [been] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"had-been"},{match:"[(be|being|been)] #Participle",group:0,tag:"Auxiliary",reason:"being-driven"},{match:"[may] #Adverb? #Infinitive",group:0,tag:"Auxiliary",reason:"may-want"},{match:"#Copula (#Adverb|not)+? [(be|being|been)] #Adverb+? #PastTense",group:0,tag:"Auxiliary",reason:"being-walked"},{match:"will [be] #PastTense",group:0,tag:"Auxiliary",reason:"will-be-x"},{match:"[(be|been)] (#Adverb|not)+? #Gerund",group:0,tag:"Auxiliary",reason:"been-walking"},{match:"[used to] #PresentTense",group:0,tag:"Auxiliary",reason:"used-to-walk"},{match:"#Copula (#Adverb|not)+? [going to] #Adverb+? #PresentTense",group:0,tag:"Auxiliary",reason:"going-to-walk"},{match:"#Imperative [(me|him|her)]",group:0,tag:"Reflexive",reason:"tell-him"},{match:"(is|was) #Adverb? [no]",group:0,tag:"Negative",reason:"is-no"},{match:"[(been|had|became|came)] #PastTense",group:0,notIf:"#PhrasalVerb",tag:"Auxiliary",reason:"been-told"},{match:"[(being|having|getting)] #Verb",group:0,tag:"Auxiliary",reason:"being-born"},{match:"[be] #Gerund",group:0,tag:"Auxiliary",reason:"be-walking"},{match:"[better] #PresentTense",group:0,tag:"Modal",notIf:"(#Copula|#Gerund)",reason:"better-go"},{match:"even better",tag:"Adverb #Comparative",reason:"even-better"}],[{match:"(#Verb && @hasHyphen) up",tag:"PhrasalVerb",reason:"foo-up"},{match:"(#Verb && @hasHyphen) off",tag:"PhrasalVerb",reason:"foo-off"},{match:"(#Verb && @hasHyphen) over",tag:"PhrasalVerb",reason:"foo-over"},{match:"(#Verb && @hasHyphen) out",tag:"PhrasalVerb",reason:"foo-out"},{match:"[#Verb (in|out|up|down|off|back)] (on|in)",notIf:"#Copula",tag:"PhrasalVerb Particle",reason:"walk-in-on"},{match:"(lived|went|crept|go) [on] for",group:0,tag:"PhrasalVerb",reason:"went-on"},{match:"#Verb (up|down|in|on|for)$",tag:"PhrasalVerb #Particle",notIf:"#PhrasalVerb",reason:"come-down$"},{match:"help [(stop|end|make|start)]",group:0,tag:"Infinitive",reason:"help-stop"},{match:"#PhrasalVerb (in && #Particle) #Determiner",tag:"#Verb #Preposition #Determiner",unTag:"PhrasalVerb",reason:"work-in-the"},{match:"[(stop|start|finish|help)] #Gerund",group:0,tag:"Infinitive",reason:"start-listening"},{match:"#Verb (him|her|it|us|himself|herself|itself|everything|something) [(up|down)]",group:0,tag:"Adverb",reason:"phrasal-pronoun-advb"}],[{match:"^do not? [#Infinitive #Particle?]",notIf:Vl,group:0,tag:"Imperative",reason:"do-eat"},{match:"^please do? not? [#Infinitive #Particle?]",group:0,tag:"Imperative",reason:"please-go"},{match:"^just do? not? [#Infinitive #Particle?]",group:0,tag:"Imperative",reason:"just-go"},{match:"^[#Infinitive] it #Comparative",notIf:Vl,group:0,tag:"Imperative",reason:"do-it-better"},{match:"^[#Infinitive] it (please|now|again|plz)",notIf:Vl,group:0,tag:"Imperative",reason:"do-it-please"},{match:"^[#Infinitive] (#Adjective|#Adverb)$",group:0,tag:"Imperative",notIf:"(so|such|rather|enough)",reason:"go-quickly"},{match:"^[#Infinitive] (up|down|over) #Determiner",group:0,tag:"Imperative",reason:"turn-down"},{match:"^[#Infinitive] (your|my|the|a|an|any|each|every|some|more|with|on)",group:0,notIf:"like",tag:"Imperative",reason:"eat-my-shorts"},{match:"^[#Infinitive] (him|her|it|us|me|there)",group:0,tag:"Imperative",reason:"tell-him"},{match:"^[#Infinitive] #Adjective #Noun$",group:0,tag:"Imperative",reason:"avoid-loud-noises"},{match:"^[#Infinitive] (#Adjective|#Adverb)? and #Infinitive",group:0,tag:"Imperative",reason:"call-and-reserve"},{match:"^(go|stop|wait|hurry) please?$",tag:"Imperative",reason:"go"},{match:"^(somebody|everybody) [#Infinitive]",group:0,tag:"Imperative",reason:"somebody-call"},{match:"^let (us|me) [#Infinitive]",group:0,tag:"Imperative",reason:"lets-leave"},{match:"^[(shut|close|open|start|stop|end|keep)] #Determiner #Noun",group:0,tag:"Imperative",reason:"shut-the-door"},{match:"^[#PhrasalVerb #Particle] #Determiner #Noun",group:0,tag:"Imperative",reason:"turn-off-the-light"},{match:"^[go] to .",group:0,tag:"Imperative",reason:"go-to-toronto"},{match:"^#Modal you [#Infinitive]",group:0,tag:"Imperative",reason:"would-you-"},{match:"^never [#Infinitive]",group:0,tag:"Imperative",reason:"never-stop"},{match:"^come #Infinitive",tag:"Imperative",notIf:"on",reason:"come-have"},{match:"^come and? #Infinitive",tag:"Imperative . Imperative",notIf:"#PhrasalVerb",reason:"come-and-have"},{match:"^stay (out|away|back)",tag:"Imperative",reason:"stay-away"},{match:"^[(stay|be|keep)] #Adjective",group:0,tag:"Imperative",reason:"stay-cool"},{match:"^[keep it] #Adjective",group:0,tag:"Imperative",reason:"keep-it-cool"},{match:"^do not [#Infinitive]",group:0,tag:"Imperative",reason:"do-not-be"},{match:"[#Infinitive] (yourself|yourselves)",group:0,tag:"Imperative",reason:"allow-yourself"},{match:"[#Infinitive] what .",group:0,tag:"Imperative",reason:"look-what"},{match:"^[#Infinitive] #Gerund",group:0,tag:"Imperative",reason:"keep-playing"},{match:"^[#Infinitive] (to|for|into|toward|here|there)",group:0,tag:"Imperative",reason:"go-to"},{match:"^[#Infinitive] (and|or) #Infinitive",group:0,tag:"Imperative",reason:"inf-and-inf"},{match:"^[%Noun|Verb%] to",group:0,tag:"Imperative",reason:"commit-to"},{match:"^[#Infinitive] #Adjective? #Singular #Singular",group:0,tag:"Imperative",reason:"maintain-eye-contact"},{match:"do not (forget|omit|neglect) to [#Infinitive]",group:0,tag:"Imperative",reason:"do-not-forget"},{match:"^[(ask|wear|pay|look|help|show|watch|act|fix|kill|stop|start|turn|try|win)] #Noun",group:0,tag:"Imperative",reason:"pay-attention"}],[{match:"(that|which) were [%Adj|Gerund%]",group:0,tag:"Gerund",reason:"that-were-growing"},{match:"#Gerund [#Gerund] #Plural",group:0,tag:"Adjective",reason:"hard-working-fam"}],[{match:"u r",tag:"#Pronoun #Copula",reason:"u r"},{match:"#Noun [(who|whom)]",group:0,tag:"Determiner",reason:"captain-who"},{match:"[had] #Noun+ #PastTense",group:0,tag:"Condition",reason:"had-he"},{match:"[were] #Noun+ to #Infinitive",group:0,tag:"Condition",reason:"were-he"},{match:"some sort of",tag:"Adjective Noun Conjunction",reason:"some-sort-of"},{match:"of some sort",tag:"Conjunction Adjective Noun",reason:"of-some-sort"},{match:"[such] (a|an|is)? #Noun",group:0,tag:"Determiner",reason:"such-skill"},{match:"[right] (before|after|in|into|to|toward)",group:0,tag:"#Adverb",reason:"right-into"},{match:"#Preposition [about]",group:0,tag:"Adjective",reason:"at-about"},{match:"(are|#Modal|see|do|for) [ya]",group:0,tag:"Pronoun",reason:"are-ya"},{match:"[long live] .",group:0,tag:"#Adjective #Infinitive",reason:"long-live"},{match:"[plenty] of",group:0,tag:"#Uncountable",reason:"plenty-of"},{match:"(always|nearly|barely|practically) [there]",group:0,tag:"Adjective",reason:"always-there"},{match:"[there] (#Adverb|#Pronoun)? #Copula",group:0,tag:"There",reason:"there-is"},{match:"#Copula [there] .",group:0,tag:"There",reason:"is-there"},{match:"#Modal #Adverb? [there]",group:0,tag:"There",reason:"should-there"},{match:"^[do] (you|we|they)",group:0,tag:"QuestionWord",reason:"do-you"},{match:"^[does] (he|she|it|#ProperNoun)",group:0,tag:"QuestionWord",reason:"does-he"},{match:"#Determiner #Noun+ [who] #Verb",group:0,tag:"Preposition",reason:"the-x-who"},{match:"#Determiner #Noun+ [which] #Verb",group:0,tag:"Preposition",reason:"the-x-which"},{match:"a [while]",group:0,tag:"Noun",reason:"a-while"},{match:"guess who",tag:"#Infinitive #QuestionWord",reason:"guess-who"},{match:"[fucking] !#Verb",group:0,tag:"#Gerund",reason:"f-as-gerund"}],[{match:"university of #Place",tag:"Organization",reason:"university-of-Foo"},{match:"#Noun (&|n) #Noun",tag:"Organization",reason:"Noun-&-Noun"},{match:"#Organization of the? #ProperNoun",tag:"Organization",reason:"org-of-place",safe:!0},{match:"#Organization #Country",tag:"Organization",reason:"org-country"},{match:"#ProperNoun #Organization",tag:"Organization",notIf:"#FirstName",reason:"titlecase-org"},{match:"#ProperNoun (ltd|co|inc|dept|assn|bros)",tag:"Organization",reason:"org-abbrv"},{match:"the [#Acronym]",group:0,tag:"Organization",reason:"the-acronym",safe:!0},{match:"government of the? [#Place+]",tag:"Organization",reason:"government-of-x"},{match:"(health|school|commerce) board",tag:"Organization",reason:"school-board"},{match:"(nominating|special|conference|executive|steering|central|congressional) committee",tag:"Organization",reason:"special-comittee"},{match:"(world|global|international|national|#Demonym) #Organization",tag:"Organization",reason:"global-org"},{match:"#Noun+ (public|private) school",tag:"School",reason:"noun-public-school"},{match:"#Place+ #SportsTeam",tag:"SportsTeam",reason:"place-sportsteam"},{match:"(dc|atlanta|minnesota|manchester|newcastle|sheffield) united",tag:"SportsTeam",reason:"united-sportsteam"},{match:"#Place+ fc",tag:"SportsTeam",reason:"fc-sportsteam"},{match:"#Place+ #Noun{0,2} (club|society|group|team|committee|commission|association|guild|crew)",tag:"Organization",reason:"place-noun-society"}],[{match:"(west|north|south|east|western|northern|southern|eastern)+ #Place",tag:"Region",reason:"west-norfolk"},{match:"#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|pa|sc|tn|tx|ut|vt|pr)]",group:0,tag:"Region",reason:"us-state"},{match:"portland [or]",group:0,tag:"Region",reason:"portland-or"},{match:"#ProperNoun+ (cliff|place|range|pit|place|point|room|grounds|ruins)",tag:"Place",reason:"foo-point"},{match:"in [#ProperNoun] #Place",group:0,tag:"Place",reason:"propernoun-place"},{match:"#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)",tag:"Address",reason:"address-st"},{match:"(port|mount|mt) #ProperName",tag:"Place",reason:"port-name"}],[{match:"[so] #Noun",group:0,tag:"Conjunction",reason:"so-conj"},{match:"[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)",group:0,tag:"Conjunction",reason:"how-he-is-x"},{match:"#Copula [(who|what|where|why|how|when)] #Noun",group:0,tag:"Conjunction",reason:"when-he"},{match:"#Verb [that] #Pronoun",group:0,tag:"Conjunction",reason:"said-that-he"},{match:"#Noun [that] #Copula",group:0,tag:"Conjunction",reason:"that-are"},{match:"#Noun [that] #Verb #Adjective",group:0,tag:"Conjunction",reason:"that-seem"},{match:"#Noun #Copula not? [that] #Adjective",group:0,tag:"Adverb",reason:"that-adj"},{match:"#Verb #Adverb? #Noun [(that|which)]",group:0,tag:"Preposition",reason:"that-prep"},{match:"@hasComma [which] (#Pronoun|#Verb)",group:0,tag:"Preposition",reason:"which-copula"},{match:"#Noun [like] #Noun",group:0,tag:"Preposition",reason:"noun-like"},{match:"^[like] #Determiner",group:0,tag:"Preposition",reason:"like-the"},{match:"a #Noun [like] (#Noun|#Determiner)",group:0,tag:"Preposition",reason:"a-noun-like"},{match:"#Adverb [like]",group:0,tag:"Verb",reason:"really-like"},{match:"(not|nothing|never) [like]",group:0,tag:"Preposition",reason:"nothing-like"},{match:"#Infinitive #Pronoun [like]",group:0,tag:"Preposition",reason:"treat-them-like"},{match:"[#QuestionWord] (#Pronoun|#Determiner)",group:0,tag:"Preposition",reason:"how-he"},{match:"[#QuestionWord] #Participle",group:0,tag:"Preposition",reason:"when-stolen"},{match:"[how] (#Determiner|#Copula|#Modal|#PastTense)",group:0,tag:"QuestionWord",reason:"how-is"},{match:"#Plural [(who|which|when)] .",group:0,tag:"Preposition",reason:"people-who"}],[{match:"holy (shit|fuck|hell)",tag:"Expression",reason:"swears-expression"},{match:"^[(well|so|okay|now)] !#Adjective?",group:0,tag:"Expression",reason:"well-"},{match:"^come on",tag:"Expression",reason:"come-on"},{match:"(say|says|said) [sorry]",group:0,tag:"Expression",reason:"say-sorry"},{match:"^(ok|alright|shoot|hell|anyways)",tag:"Expression",reason:"ok-"},{match:"^(say && @hasComma)",tag:"Expression",reason:"say-"},{match:"^(like && @hasComma)",tag:"Expression",reason:"like-"},{match:"^[(dude|man|girl)] #Pronoun",group:0,tag:"Expression",reason:"dude-i"}]);let Bl=null;var Sl={postTagger:function(e){const{world:t}=e,{model:n,methods:r}=t;Bl=Bl||r.one.buildNet(n.two.matches,t);const o=r.two.quickSplit(e.document).map((e=>{const t=e[0];return[t.index[0],t.index[1],t.index[1]+e.length]})),a=e.update(o);return a.cache(),a.sweep(Bl),e.uncache(),e.unfreeze(),e},tagger:e=>e.compute(["freeze","lexicon","preTagger","postTagger","unfreeze"])};const $l={api:function(e){e.prototype.confidence=function(){let e=0,t=0;return this.docs.forEach((n=>{n.forEach((n=>{t+=1,e+=n.confidence||1}))})),0===t?1:(e=>Math.round(100*e)/100)(e/t)},e.prototype.tagger=function(){return this.compute(["tagger"])}},compute:Sl,model:{two:{matches:zl}},hooks:["postTagger"]},Ml=function(e,t){const n=function(e){return Object.keys(e.hooks).filter((e=>!e.startsWith("#")&&!e.startsWith("%")))}(t);if(0===n.length)return e;e._cache||e.cache();const r=e._cache;return e.filter(((e,t)=>n.some((e=>r[t].has(e)))))};var Ll={lib:{lazy:function(e,t){let n=t;"string"==typeof t&&(n=this.buildNet([{match:t}]));const r=this.tokenize(e),o=Ml(r,n);return o.found?(o.compute(["index","tagger"]),o.match(t)):r.none()}}};const Kl=function(e,t,n){let r=e.split(/ /g).map((e=>e.toLowerCase().trim()));r=r.filter((e=>e)),r=r.map((e=>`{${e}}`)).join(" ");let o=this.match(r);return n&&(o=o.if(n)),o.has("#Verb")?function(e,t){let n=t;return e.forEach((e=>{e.has("#Infinitive")||(n=function(e,t){const n=(0,e.methods.two.transform.verb.conjugate)(t,e.model);return e.has("#Gerund")?n.Gerund:e.has("#PastTense")?n.PastTense:e.has("#PresentTense")?n.PresentTense:e.has("#Gerund")?n.Gerund:t}(e,t)),e.replaceWith(n)})),e}(o,t):o.has("#Noun")?function(e,t){let n=t;e.has("#Plural")&&(n=(0,e.methods.two.transform.noun.toPlural)(t,e.model));e.replaceWith(n,{possessives:!0})}(o,t):o.has("#Adverb")?function(e,t){const{toAdverb:n}=e.methods.two.transform.adjective,r=n(t);r&&e.replaceWith(r)}(o,t):o.has("#Adjective")?function(e,t){const{toComparative:n,toSuperlative:r}=e.methods.two.transform.adjective;let o=t;e.has("#Comparative")?o=n(o,e.model):e.has("#Superlative")&&(o=r(o,e.model)),o&&e.replaceWith(o)}(o,t):this};var Jl={api:function(e){e.prototype.swap=Kl}};h.plugin(cl),h.plugin(Ol),h.plugin($l),h.plugin(Ll),h.plugin(Jl);const Wl=function(e){const{fromComparative:t,fromSuperlative:n}=e.methods.two.transform.adjective,r=e.text("normal");return e.has("#Comparative")?t(r,e.model):e.has("#Superlative")?n(r,e.model):r};var ql={api:function(e){class Adjectives extends e{constructor(e,t,n){super(e,t,n),this.viewType="Adjectives"}json(e={}){const{toAdverb:t,toNoun:n,toSuperlative:r,toComparative:o}=this.methods.two.transform.adjective;return e.normal=!0,this.map((a=>{const i=a.toView().json(e)[0]||{},s=Wl(a);return i.adjective={adverb:t(s,this.model),noun:n(s,this.model),superlative:r(s,this.model),comparative:o(s,this.model)},i}),[])}adverbs(){return this.before("#Adverb+$").concat(this.after("^#Adverb+"))}conjugate(e){const{toComparative:t,toSuperlative:n,toNoun:r,toAdverb:o}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const a=Wl(e);return{Adjective:a,Comparative:t(a,this.model),Superlative:n(a,this.model),Noun:r(a,this.model),Adverb:o(a,this.model)}}),[])}toComparative(e){const{toComparative:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}toSuperlative(e){const{toSuperlative:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}toAdverb(e){const{toAdverb:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}toNoun(e){const{toNoun:t}=this.methods.two.transform.adjective;return this.getNth(e).map((e=>{const n=Wl(e),r=t(n,this.model);return e.replaceWith(r)}))}}e.prototype.adjectives=function(e){let t=this.match("#Adjective");return t=t.getNth(e),new Adjectives(t.document,t.pointer)},e.prototype.superlatives=function(e){let t=this.match("#Superlative");return t=t.getNth(e),new Adjectives(t.document,t.pointer)},e.prototype.comparatives=function(e){let t=this.match("#Comparative");return t=t.getNth(e),new Adjectives(t.document,t.pointer)}}};var Ul={api:function(e){class Adverbs extends e{constructor(e,t,n){super(e,t,n),this.viewType="Adverbs"}conjugate(e){return this.getNth(e).map((e=>{const t=function(e){return e.compute("root").text("root")}(e);return{Adverb:e.text("normal"),Adjective:t}}),[])}json(e={}){const t=this.methods.two.transform.adjective.fromAdverb;return e.normal=!0,this.map((n=>{const r=n.toView().json(e)[0]||{};return r.adverb={adjective:t(r.normal)},r}),[])}}e.prototype.adverbs=function(e){let t=this.match("#Adverb");return t=t.getNth(e),new Adverbs(t.document,t.pointer)}}};const Rl=function(e){let t=this;t=function(e){let t=e.parentheses();return t=t.filter((e=>e.wordCount()>=3&&e.has("#Verb")&&e.has("#Noun"))),e.splitOn(t)}(t),t=function(e){let t=e.quotations();return t=t.filter((e=>e.wordCount()>=3&&e.has("#Verb")&&e.has("#Noun"))),e.splitOn(t)}(t),t=function(e){let t=e.match("@hasComma");return t=t.filter((e=>{if(1===e.growLeft(".").wordCount())return!1;if(1===e.growRight(". .").wordCount())return!1;let t=e.grow(".");return t=t.ifNo("@hasComma @hasComma"),t=t.ifNo("@hasComma (and|or) ."),t=t.ifNo("(#City && @hasComma) #Country"),t=t.ifNo("(#WeekDay && @hasComma) #Date"),t=t.ifNo("(#Date+ && @hasComma) #Value"),t=t.ifNo("(#Adjective && @hasComma) #Adjective"),t.found})),e.splitAfter(t)}(t),t=t.splitAfter("(@hasEllipses|@hasSemicolon|@hasDash|@hasColon)"),t=t.splitAfter("^#Pronoun (said|says)"),t=t.splitBefore("(said|says) #ProperNoun$"),t=t.splitBefore(". . if .{4}"),t=t.splitBefore("and while"),t=t.splitBefore("now that"),t=t.splitBefore("ever since"),t=t.splitBefore("(supposing|although)"),t=t.splitBefore("even (while|if|though)"),t=t.splitBefore("(whereas|whose)"),t=t.splitBefore("as (though|if)"),t=t.splitBefore("(til|until)");const n=t.match("#Verb .* [but] .* #Verb",0);n.found&&(t=t.splitBefore(n));const r=t.if("if .{2,9} then .").match("then");return t=t.splitBefore(r),"number"==typeof e&&(t=t.get(e)),t},Ql={this:"Noun",then:"Pivot"},Zl=[{match:"[that] #Determiner #Noun",group:0,chunk:"Pivot"},{match:"#PastTense [that]",group:0,chunk:"Pivot"},{match:"[so] #Determiner",group:0,chunk:"Pivot"},{match:"#Copula #Adverb+? [#Adjective]",group:0,chunk:"Adjective"},{match:"#Adjective and #Adjective",chunk:"Adjective"},{match:"#Adverb+ and #Adverb #Verb",chunk:"Verb"},{match:"#Gerund #Adjective$",chunk:"Verb"},{match:"#Gerund to #Verb",chunk:"Verb"},{match:"#PresentTense and #PresentTense",chunk:"Verb"},{match:"#Adverb #Negative",chunk:"Verb"},{match:"(want|wants|wanted) to #Infinitive",chunk:"Verb"},{match:"#Verb #Reflexive",chunk:"Verb"},{match:"#Verb [to] #Adverb? #Infinitive",group:0,chunk:"Verb"},{match:"[#Preposition] #Gerund",group:0,chunk:"Verb"},{match:"#Infinitive [that] ",group:0,chunk:"Verb"},{match:"#Noun of #Determiner? #Noun",chunk:"Noun"},{match:"#Value+ #Adverb? #Adjective",chunk:"Noun"},{match:"the [#Adjective] #Noun",chunk:"Noun"},{match:"#Singular in #Determiner? #Singular",chunk:"Noun"},{match:"#Plural [in] #Determiner? #Noun",group:0,chunk:"Pivot"},{match:"#Noun and #Determiner? #Noun",notIf:"(#Possessive|#Pronoun)",chunk:"Noun"}];let _l=null;const Xl=function(e,t){if(("undefined"!=typeof process&&process.env?process.env:self.env||{}).DEBUG_CHUNKS){const n=(e.normal+"'").padEnd(8);console.log(` | '${n} → ${t.padEnd(12)}  -fallback- `)}e.chunk=t};var Yl={chunks:function(e){const{document:t,world:n}=e;!function(e){for(let t=0;t{for(let r=0;r{if("Verb"===e.chunk){const t=e.terms.find((e=>e.tags.has("Verb")));t||e.terms.forEach((e=>e.chunk=null))}}))}(t)}},eu={compute:Yl,api:function(e){class Chunks extends e{constructor(e,t,n){super(e,t,n),this.viewType="Chunks"}isVerb(){return this.filter((e=>e.has("")))}isNoun(){return this.filter((e=>e.has("")))}isAdjective(){return this.filter((e=>e.has("")))}isPivot(){return this.filter((e=>e.has("")))}debug(){return this.toView().debug("chunks"),this}update(e){const t=new Chunks(this.document,e);return t._cache=this._cache,t}}e.prototype.chunks=function(e){let t=function(e){const t=[];let n=null;return e.clauses().docs.forEach((e=>{e.forEach((e=>{e.chunk&&e.chunk===n?t[t.length-1][2]=e.index[1]+1:(n=e.chunk,t.push([e.index[0],e.index[1],e.index[1]+1]))})),n=null})),e.update(t)}(this);return t=t.getNth(e),new Chunks(this.document,t.pointer)},e.prototype.clauses=Rl},hooks:["chunks"]};const tu=/\./g,nu=/\(/,ru=/\)/,ou=function(e,t){for(;t{e[0].pre=e[0].pre.replace(nu,"");const t=e[e.length-1];t.post=t.post.replace(ru,"")})),e}(this)}}e.prototype.parentheses=function(e){let t=function(e){const t=[];return e.docs.forEach((e=>{for(let n=0;n{e[0].pre=e[0].pre.replace(lu,"");const t=e[e.length-1];t.post=t.post.replace(uu,"")}))}(this)}}e.prototype.quotations=function(e){let t=function(e){const t=[];return e.docs.forEach((e=>{for(let n=0;n{e.forEach((e=>{e.text=e.text.replace(tu,""),e.normal=e.normal.replace(tu,"")}))})),this}addPeriods(){return this.docs.forEach((e=>{e.forEach((e=>{e.text=e.text.replace(tu,""),e.normal=e.normal.replace(tu,""),e.text=e.text.split("").join(".")+".",e.normal=e.normal.split("").join(".")+"."}))})),this}}e.prototype.acronyms=function(e){let t=this.match("#Acronym");return t=t.getNth(e),new Acronyms(t.document,t.pointer)}}(e),au(e),function(e){class Possessives extends e{constructor(e,t,n){super(e,t,n),this.viewType="Possessives"}strip(){return this.docs.forEach((e=>{e.forEach((e=>{e.text=e.text.replace(iu,""),e.normal=e.normal.replace(iu,"")}))})),this}}e.prototype.possessives=function(e){let t=function(e){let t=e.match("#Possessive+");return t.has("#Person")&&(t=t.growLeft("#Person+")),t.has("#Place")&&(t=t.growLeft("#Place+")),t.has("#Organization")&&(t=t.growLeft("#Organization+")),t}(this);return t=t.getNth(e),new Possessives(t.document,t.pointer)}}(e),hu(e),function(e){gu.forEach((t=>{e.prototype[t[0]]=function(e){const n=this.match(t[1]);return"number"==typeof e?n.get(e):n}})),e.prototype.phoneNumbers=du,mu.forEach((t=>{e.prototype[t[0]]=e.prototype[t[1]]}))}(e),function(e){class Slashes extends e{constructor(e,t,n){super(e,t,n),this.viewType="Slashes"}split(){return this.map((e=>{const t=e.text().split(pu);return(e=e.replaceWith(t.join(" "))).growRight("("+t.join("|")+")+")}))}}e.prototype.slashes=function(e){let t=this.match("#SlashedTerm");return t=t.getNth(e),new Slashes(t.document,t.pointer)}}(e)}};const bu=function(e,t){e.docs.forEach((e=>{e.forEach(t)}))};var vu={case:e=>{bu(e,(e=>{e.text=e.text.toLowerCase()}))},unicode:e=>{const t=e.world,n=t.methods.one.killUnicode;bu(e,(e=>e.text=n(e.text,t)))},whitespace:e=>{bu(e,(e=>{e.post=e.post.replace(/\s+/g," "),e.post=e.post.replace(/\s([.,?!:;])/g,"$1"),e.pre=e.pre.replace(/\s+/g,"")}))},punctuation:e=>{bu(e,(e=>{e.post=e.post.replace(/[–—-]/g," "),e.post=e.post.replace(/[,:;]/g,""),e.post=e.post.replace(/\.{2,}/g,""),e.post=e.post.replace(/\?{2,}/g,"?"),e.post=e.post.replace(/!{2,}/g,"!"),e.post=e.post.replace(/\?!+/g,"?")}));const t=e.docs,n=t[t.length-1];if(n&&n.length>0){const e=n[n.length-1];e.post=e.post.replace(/ /g,"")}},contractions:e=>{e.contractions().expand()},acronyms:e=>{e.acronyms().strip()},parentheses:e=>{e.parentheses().strip()},possessives:e=>{e.possessives().strip()},quotations:e=>{e.quotations().strip()},emoji:e=>{e.emojis().remove()},honorifics:e=>{e.match("#Honorific+ #Person").honorifics().remove()},adverbs:e=>{e.adverbs().remove()},nouns:e=>{e.nouns().toSingular()},verbs:e=>{e.verbs().toInfinitive()},numbers:e=>{e.numbers().toNumber()},debullet:e=>{const t=/^\s*([-–—*•])\s*$/;return e.docs.forEach((e=>{t.test(e[0].pre)&&(e[0].pre=e[0].pre.replace(t,""))})),e}};const yu=e=>e.split("|").reduce(((e,t)=>(e[t]=!0,e)),{}),wu="unicode|punctuation|whitespace|acronyms",ku="|case|contractions|parentheses|quotations|emoji|honorifics|debullet",Pu={light:yu(wu),medium:yu(wu+ku),heavy:yu(wu+ku+"|possessives|adverbs|nouns|verbs")};var Au={api:function(e){e.prototype.normalize=function(e="light"){return"string"==typeof e&&(e=Pu[e]),Object.keys(e).forEach((t=>{vu.hasOwnProperty(t)&&vu[t](this,e[t])})),this}}};const Cu=["after","although","as if","as long as","as","because","before","even if","even though","ever since","if","in order that","provided that","since","so that","than","that","though","unless","until","what","whatever","when","whenever","where","whereas","wherever","whether","which","whichever","who","whoever","whom","whomever","whose"],Nu=function(e){if(e.before("#Preposition$").found)return!0;if(!e.before().found)return!1;for(let t=0;t3&&n.endsWith("s")&&!n.endsWith("ss")},xu=function(e){const t=function(e){let t=e.clone();return t=t.match("#Noun+"),t=t.remove("(#Adjective|#Preposition|#Determiner|#Value)"),t=t.not("#Possessive"),t=t.first(),t.found?t:e}(e);return{determiner:e.match("#Determiner").eq(0),adjectives:e.match("#Adjective"),number:e.values(),isPlural:ju(e,t),isSubordinate:Nu(e),root:t}},Iu=e=>e.text(),Tu=e=>e.json({terms:!1,normal:!0}).map((e=>e.normal)),Du=function(e){if(!e.found)return null;const t=e.values(0);if(t.found){return(t.parse()[0]||{}).num}return null},Hu=function(e){return!e.has("^(#Uncountable|#ProperNoun|#Place|#Pronoun|#Acronym)+$")},Eu={tags:!0},Gu={tags:!0};var Ou={api:function(e){class Nouns extends e{constructor(e,t,n){super(e,t,n),this.viewType="Nouns"}parse(e){return this.getNth(e).map(xu)}json(e){const t="object"==typeof e?e:{};return this.getNth(e).map((e=>{const n=e.toView().json(t)[0]||{};return t&&!1!==t.noun&&(n.noun=function(e){const t=xu(e);return{root:Iu(t.root),number:Du(t.number),determiner:Iu(t.determiner),adjectives:Tu(t.adjectives),isPlural:t.isPlural,isSubordinate:t.isSubordinate}}(e)),n}),[])}conjugate(e){const t=this.world.methods.two.transform.noun;return this.getNth(e).map((e=>{const n=xu(e),r=n.root.compute("root").text("root"),o={Singular:r};return Hu(n.root)&&(o.Plural=t.toPlural(r,this.model)),o.Singular===o.Plural&&delete o.Plural,o}),[])}isPlural(e){const t=this.filter((e=>xu(e).isPlural));return t.getNth(e)}isSingular(e){const t=this.filter((e=>!xu(e).isPlural));return t.getNth(e)}adjectives(e){let t=this.update([]);return this.forEach((e=>{const n=xu(e).adjectives;n.found&&(t=t.concat(n))})),t.getNth(e)}toPlural(e){return this.getNth(e).map((e=>function(e,t){if(!0===t.isPlural)return e;if(t.root.has("#Possessive")&&(t.root=t.root.possessives().strip()),!Hu(t.root))return e;const{methods:n,model:r}=e.world,{toPlural:o}=n.two.transform.noun,a=o(t.root.text({keepPunct:!1}),r);e.match(t.root).replaceWith(a,Eu).tag("Plural","toPlural"),t.determiner.has("(a|an)")&&e.remove(t.determiner);const i=t.root.after("not? #Adverb+? [#Copula]",0);return i.found&&(i.has("is")?e.replace(i,"are"):i.has("was")&&e.replace(i,"were")),e}(e,xu(e))))}toSingular(e){return this.getNth(e).map((e=>function(e,t){if(!1===t.isPlural)return e;const{methods:n,model:r}=e.world,{toSingular:o}=n.two.transform.noun,a=o(t.root.text("normal"),r);return e.replace(t.root,a,Gu).tag("Singular","toPlural"),e}(e,xu(e))))}update(e){const t=new Nouns(this.document,e);return t._cache=this._cache,t}}e.prototype.nouns=function(e){let t=function(e){let t=e.clauses().match(""),n=t.match("@hasComma");return n=n.not("#Place"),n.found&&(t=t.splitAfter(n)),t=t.splitOn("#Expression"),t=t.splitOn("(he|she|we|you|they|i)"),t=t.splitOn("(#Noun|#Adjective) [(he|him|she|it)]",0),t=t.splitOn("[(he|him|she|it)] (#Determiner|#Value)",0),t=t.splitBefore("#Noun [(the|a|an)] #Adjective? #Noun",0),t=t.splitOn("[(here|there)] #Noun",0),t=t.splitOn("[#Noun] (here|there)",0),t=t.splitBefore("(our|my|their|your)"),t=t.splitOn("#Noun [#Determiner]",0),t=t.if("#Noun"),t}(this);return t=t.getNth(e),new Nouns(this.document,t.pointer)}}};var Fu={ones:{zeroth:0,first:1,second:2,third:3,fourth:4,fifth:5,sixth:6,seventh:7,eighth:8,ninth:9,zero:0,one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9},teens:{tenth:10,eleventh:11,twelfth:12,thirteenth:13,fourteenth:14,fifteenth:15,sixteenth:16,seventeenth:17,eighteenth:18,nineteenth:19,ten:10,eleven:11,twelve:12,thirteen:13,fourteen:14,fifteen:15,sixteen:16,seventeen:17,eighteen:18,nineteen:19},tens:{twentieth:20,thirtieth:30,fortieth:40,fourtieth:40,fiftieth:50,sixtieth:60,seventieth:70,eightieth:80,ninetieth:90,twenty:20,thirty:30,forty:40,fourty:40,fifty:50,sixty:60,seventy:70,eighty:80,ninety:90},multiples:{hundredth:100,thousandth:1e3,millionth:1e6,billionth:1e9,trillionth:1e12,quadrillionth:1e15,quintillionth:1e18,sextillionth:1e21,septillionth:1e24,hundred:100,thousand:1e3,million:1e6,billion:1e9,trillion:1e12,quadrillion:1e15,quintillion:1e18,sextillion:1e21,septillion:1e24,grand:1e3}};const Vu=(e,t)=>{if(Fu.ones.hasOwnProperty(e)){if(t.ones||t.teens)return!1}else if(Fu.teens.hasOwnProperty(e)){if(t.ones||t.teens||t.tens)return!1}else if(Fu.tens.hasOwnProperty(e)&&(t.ones||t.teens||t.tens))return!1;return!0},zu=function(e){let t="0.";for(let n=0;ne=(e=(e=(e=(e=(e=(e=(e=e.replace(/1st$/,"1")).replace(/2nd$/,"2")).replace(/3rd$/,"3")).replace(/([4567890])r?th$/,"$1")).replace(/^[$€¥£¢]/,"")).replace(/[%$€¥£¢]$/,"")).replace(/,/g,"")).replace(/([0-9])([a-z\u00C0-\u00FF]{1,2})$/,"$1"),Su=/^([0-9,. ]+)\/([0-9,. ]+)$/,$u={"a few":3,"a couple":2,"a dozen":12,"two dozen":24,zero:0},Mu=e=>Object.keys(e).reduce(((t,n)=>t+=e[n]),0),Lu=function(e){if(!0===$u.hasOwnProperty(e))return $u[e];if("a"===e||"an"===e)return 1;const t=(e=>{const t=[{reg:/^(minus|negative)[\s-]/i,mult:-1},{reg:/^(a\s)?half[\s-](of\s)?/i,mult:.5}];for(let n=0;n#Value+] out of every? [#Value+]");if(!0!==t.found)return null;let{num:n,den:r}=t.groups();return n&&r?(n=Ju(n),r=Ju(r),n&&r&&"number"==typeof n&&"number"==typeof r?{numerator:n,denominator:r}:null):null}(e)||function(e){const t=e.match("[(#Cardinal|a)+] [#Fraction+]");if(!0!==t.found)return null;let{num:n,den:r}=t.groups();n=n.has("a")?1:Ju(n);let o=r.text("reduced");return Ku.test(o)&&(o=o.replace(Ku,""),r=r.replaceWith(o)),r=Wu.hasOwnProperty(o)?Wu[o]:Ju(r),"number"==typeof n&&"number"==typeof r?{numerator:n,denominator:r}:null}(e)||function(e){const t=e.match("^#Ordinal$");if(!0!==t.found)return null;if(e.lookAhead("^of ."))return{numerator:1,denominator:Ju(t)};return null}(e)||null;return null!==t&&t.numerator&&t.denominator&&(t.decimal=t.numerator/t.denominator,t.decimal=(e=>{const t=Math.round(1e3*e)/1e3;return 0===t&&0!==e?e:t})(t.decimal)),t},Uu=function(e){if(e<1e6)return String(e);let t;return t="number"==typeof e?e.toFixed(0):e,-1===t.indexOf("e+")?t:t.replace(".","").split("e+").reduce((function(e,t){return e+Array(t-e.length+2).join(0)}))},Ru=[["ninety",90],["eighty",80],["seventy",70],["sixty",60],["fifty",50],["forty",40],["thirty",30],["twenty",20]],Qu=["","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"],Zu=[[1e24,"septillion"],[1e20,"hundred sextillion"],[1e21,"sextillion"],[1e20,"hundred quintillion"],[1e18,"quintillion"],[1e17,"hundred quadrillion"],[1e15,"quadrillion"],[1e14,"hundred trillion"],[1e12,"trillion"],[1e11,"hundred billion"],[1e9,"billion"],[1e8,"hundred million"],[1e6,"million"],[1e5,"hundred thousand"],[1e3,"thousand"],[100,"hundred"],[1,"one"]],_u=function(e){const t=[];if(e>100)return t;for(let n=0;n=Ru[n][1]&&(e-=Ru[n][1],t.push(Ru[n][0]));return Qu[e]&&t.push(Qu[e]),t},Xu=function(e){let t=e.num;if(0===t||"0"===t)return"zero";t>1e21&&(t=Uu(t));let n=[];t<0&&(n.push("minus"),t=Math.abs(t));const r=function(e){let t=e;const n=[];return Zu.forEach((r=>{if(e>=r[0]){const e=Math.floor(t/r[0]);t-=e*r[0],e&&n.push({unit:r[1],count:e})}})),n}(t);for(let e=0;e1&&n.push("and")),n=n.concat(_u(r[e].count)),n.push(t)}return n=n.concat((e=>{const t=["zero","one","two","three","four","five","six","seven","eight","nine"],n=[],r=Uu(e).match(/\.([0-9]+)/);if(!r||!r[0])return n;n.push("point");const o=r[0].split("");for(let e=0;ee)),0===n.length&&(n[0]=""),n.join(" ")},Yu={one:"first",two:"second",three:"third",five:"fifth",eight:"eighth",nine:"ninth",twelve:"twelfth",twenty:"twentieth",thirty:"thirtieth",forty:"fortieth",fourty:"fourtieth",fifty:"fiftieth",sixty:"sixtieth",seventy:"seventieth",eighty:"eightieth",ninety:"ninetieth"},ec=e=>{const t=Xu(e).split(" "),n=t[t.length-1];return Yu.hasOwnProperty(n)?t[t.length-1]=Yu[n]:t[t.length-1]=n.replace(/y$/,"i")+"th",t.join(" ")},tc=function(e){class Fractions extends e{constructor(e,t,n){super(e,t,n),this.viewType="Fractions"}parse(e){return this.getNth(e).map(qu)}get(e){return this.getNth(e).map(qu)}json(e){return this.getNth(e).map((t=>{const n=t.toView().json(e)[0],r=qu(t);return n.fraction=r,n}),[])}toDecimal(e){return this.getNth(e).forEach((e=>{const{decimal:t}=qu(e);(e=e.replaceWith(String(t),!0)).tag("NumericValue"),e.unTag("Fraction")})),this}toFraction(e){return this.getNth(e).forEach((e=>{const t=qu(e);if(t&&"number"==typeof t.numerator&&"number"==typeof t.denominator){const n=`${t.numerator}/${t.denominator}`;this.replace(e,n)}})),this}toOrdinal(e){return this.getNth(e).forEach((e=>{let t=function(e){if(!e.numerator||!e.denominator)return"";const t=Xu({num:e.numerator});let n=ec({num:e.denominator});return 2===e.denominator&&(n="half"),t&&n?(1!==e.numerator&&(n+="s"),`${t} ${n}`):""}(qu(e));e.after("^#Noun").found&&(t+=" of"),e.replaceWith(t)})),this}toCardinal(e){return this.getNth(e).forEach((e=>{const t=function(e){return e.numerator&&e.denominator?`${Xu({num:e.numerator})} out of ${Xu({num:e.denominator})}`:""}(qu(e));e.replaceWith(t)})),this}toPercentage(e){return this.getNth(e).forEach((e=>{const{decimal:t}=qu(e);let n=100*t;n=Math.round(100*n)/100,e.replaceWith(`${n}%`)})),this}}e.prototype.fractions=function(e){let t=function(e,t){let n=e.match("#Fraction+");return n=n.filter((e=>!e.lookBehind("#Value and$").found)),n=n.notIf("#Value seconds"),n}(this);return t=t.getNth(e),new Fractions(this.document,t.pointer)}},nc="twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|fourty",rc=function(e){let t=e.match("#Value+");if(t.has("#NumericValue #NumericValue")&&(t.has("#Value @hasComma #Value")?t.splitAfter("@hasComma"):t.has("#NumericValue #Fraction")?t.splitAfter("#NumericValue #Fraction"):t=t.splitAfter("#NumericValue")),t.has("#Value #Value #Value")&&!t.has("#Multiple")&&t.has("("+nc+") #Cardinal #Cardinal")&&(t=t.splitAfter("("+nc+") #Cardinal")),t.has("#Value #Value")){t.has("#NumericValue #NumericValue")&&(t=t.splitOn("#Year")),t.has("("+nc+") (eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen)")&&(t=t.splitAfter("("+nc+")"));const e=t.match("#Cardinal #Cardinal");if(e.found&&!t.has("(point|decimal|#Fraction)")&&!e.has("#Cardinal (#Multiple|point|decimal)")){const n=t.has(`(one|two|three|four|five|six|seven|eight|nine) (${nc})`),r=e.has("("+nc+") #Cardinal"),o=e.has("#Multiple #Value");n||r||o||e.terms().forEach((e=>{t=t.splitOn(e)}))}t.match("#Ordinal #Ordinal").match("#TextValue").found&&!t.has("#Multiple")&&(t.has("("+nc+") #Ordinal")||(t=t.splitAfter("#Ordinal"))),t.has("#Time")&&(t=t.splitOn("#Time")),t=t.splitBefore("#Ordinal [#Cardinal]",0),t.has("#TextValue #NumericValue")&&!t.has("("+nc+"|#Multiple)")&&(t=t.splitBefore("#TextValue #NumericValue"))}return t=t.splitAfter("#NumberRange"),t=t.splitBefore("#Year"),t},oc=function(e){if("string"==typeof e)return{num:Lu(e)};let t=e.text("reduced");const n=e.growRight("#Unit").match("#Unit$").text("machine"),r=/[0-9],[0-9]/.test(e.text("text"));if(1===e.terms().length&&!e.has("#Multiple")){const o=function(e,t){const n=(e=e.replace(/,/g,"")).split(/([0-9.,]*)/);let[r,o]=n,a=n.slice(2).join("");return""!==o&&t.length<2?(o=Number(o||e),"number"!=typeof o&&(o=null),a=a||"","st"!==a&&"nd"!==a&&"rd"!==a&&"th"!==a||(a=""),{prefix:r||"",num:o,suffix:a}):null}(t,e);if(null!==o)return o.hasComma=r,o.unit=n,o}let o=e.match("#Fraction{2,}$");o=!1===o.found?e.match("^#Fraction$"):o;let a=null;o.found&&(o.has("#Value and #Value #Fraction")&&(o=o.match("and #Value #Fraction")),a=qu(o),t=(e=(e=e.not(o)).not("and$")).text("reduced"));let i=0;return t&&(i=Lu(t)||0),a&&a.decimal&&(i+=a.decimal),{hasComma:r,prefix:"",num:i,suffix:"",isOrdinal:e.has("#Ordinal"),isText:e.has("#TextValue"),isFraction:e.has("#Fraction"),isMoney:e.has("#Money"),unit:n}},ac={"¢":"cents",$:"dollars","£":"pounds","¥":"yen","€":"euros","₡":"colón","฿":"baht","₭":"kip","₩":"won","₹":"rupees","₽":"ruble","₺":"liras"},ic={"%":"percent","°":"degrees"},sc=function(e){const t={suffix:"",prefix:e.prefix};return ac.hasOwnProperty(e.prefix)&&(t.suffix+=" "+ac[e.prefix],t.prefix=""),ic.hasOwnProperty(e.suffix)&&(t.suffix+=" "+ic[e.suffix]),t.suffix&&1===e.num&&(t.suffix=t.suffix.replace(/s$/,"")),!t.suffix&&e.suffix&&(t.suffix+=" "+e.suffix),t},lc=function(e,t){if("TextOrdinal"===t){const{prefix:t,suffix:n}=sc(e);return t+ec(e)+n}if("Ordinal"===t)return e.prefix+function(e){const t=e.num;if(!t&&0!==t)return null;const n=t%100;if(n>10&&n<20)return String(t)+"th";const r={0:"th",1:"st",2:"nd",3:"rd"};let o=Uu(t);const a=o.slice(o.length-1,o.length);return o+=r[a]?r[a]:"th",o}(e)+e.suffix;if("TextCardinal"===t){const{prefix:t,suffix:n}=sc(e);return t+Xu(e)+n}let n=e.num;return e.hasComma&&(n=n.toLocaleString()),e.prefix+String(n)+e.suffix},uc=function(e){if("string"==typeof e||"number"==typeof e){const t={};return t[e]=!0,t}return t=e,"[object Array]"===Object.prototype.toString.call(t)?e.reduce(((e,t)=>(e[t]=!0,e)),{}):e||{};var t},cc=function(e){class Numbers extends e{constructor(e,t,n){super(e,t,n),this.viewType="Numbers"}parse(e){return this.getNth(e).map(oc)}get(e){return this.getNth(e).map(oc).map((e=>e.num))}json(e){const t="object"==typeof e?e:{};return this.getNth(e).map((e=>{const n=e.toView().json(t)[0],r=oc(e);return n.number={prefix:r.prefix,num:r.num,suffix:r.suffix,hasComma:r.hasComma,unit:r.unit},n}),[])}units(){return this.growRight("#Unit").match("#Unit$")}isUnit(e){return function(e,t={}){return t=uc(t),e.filter((e=>{const{unit:n}=oc(e);return!(!n||!0!==t[n])}))}(this,e)}isOrdinal(){return this.if("#Ordinal")}isCardinal(){return this.if("#Cardinal")}toNumber(){const e=this.map((e=>{if(!this.has("#TextValue"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#Ordinal")?"Ordinal":"Cardinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("NumericValue")}));return new Numbers(e.document,e.pointer)}toLocaleString(){return this.forEach((e=>{const t=oc(e);if(null===t.num)return;let n=t.num.toLocaleString();if(e.has("#Ordinal")){const e=lc(t,"Ordinal").match(/[a-z]+$/);e&&(n+=e[0]||"")}e.replaceWith(n,{tags:!0})})),this}toText(){const e=this.map((e=>{if(e.has("#TextValue"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#Ordinal")?"TextOrdinal":"TextCardinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("TextValue"),e}));return new Numbers(e.document,e.pointer)}toCardinal(){const e=this.map((e=>{if(!e.has("#Ordinal"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#TextValue")?"TextCardinal":"Cardinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("Cardinal"),e}));return new Numbers(e.document,e.pointer)}toOrdinal(){const e=this.map((e=>{if(e.has("#Ordinal"))return e;const t=oc(e);if(null===t.num)return e;const n=e.has("#TextValue")?"TextOrdinal":"Ordinal",r=lc(t,n);return e.replaceWith(r,{tags:!0}),e.tag("Ordinal"),e}));return new Numbers(e.document,e.pointer)}isEqual(e){return this.filter((t=>oc(t).num===e))}greaterThan(e){return this.filter((t=>oc(t).num>e))}lessThan(e){return this.filter((t=>oc(t).num{const r=oc(n).num;return r>e&&r{const n=oc(t);if(n.num=e,null===n.num)return t;let r=t.has("#Ordinal")?"Ordinal":"Cardinal";t.has("#TextValue")&&(r=t.has("#Ordinal")?"TextOrdinal":"TextCardinal");let o=lc(n,r);return n.hasComma&&"Cardinal"===r&&(o=Number(o).toLocaleString()),(t=t.not("#Currency")).replaceWith(o,{tags:!0}),t}));return new Numbers(t.document,t.pointer)}add(e){if(!e)return this;"string"==typeof e&&(e=oc(e).num);const t=this.map((t=>{const n=oc(t);if(null===n.num)return t;n.num+=e;let r=t.has("#Ordinal")?"Ordinal":"Cardinal";n.isText&&(r=t.has("#Ordinal")?"TextOrdinal":"TextCardinal");const o=lc(n,r);return t.replaceWith(o,{tags:!0}),t}));return new Numbers(t.document,t.pointer)}subtract(e,t){return this.add(-1*e,t)}increment(e){return this.add(1,e)}decrement(e){return this.add(-1,e)}update(e){const t=new Numbers(this.document,e);return t._cache=this._cache,t}}Numbers.prototype.toNice=Numbers.prototype.toLocaleString,Numbers.prototype.isBetween=Numbers.prototype.between,Numbers.prototype.minus=Numbers.prototype.subtract,Numbers.prototype.plus=Numbers.prototype.add,Numbers.prototype.equals=Numbers.prototype.isEqual,e.prototype.numbers=function(e){let t=rc(this);return t=t.getNth(e),new Numbers(this.document,t.pointer)},e.prototype.percentages=function(e){let t=rc(this);return t=t.filter((e=>e.has("#Percent")||e.after("^percent"))),t=t.getNth(e),new Numbers(this.document,t.pointer)},e.prototype.money=function(e){let t=rc(this);return t=t.filter((e=>e.has("#Money")||e.after("^#Currency"))),t=t.getNth(e),new Numbers(this.document,t.pointer)},e.prototype.values=e.prototype.numbers};var hc={api:function(e){tc(e),cc(e)}};const dc={people:!0,emails:!0,phoneNumbers:!0,places:!0},gc=function(e={}){return!1!==(e=Object.assign({},dc,e)).people&&this.people().replaceWith("██████████"),!1!==e.emails&&this.emails().replaceWith("██████████"),!1!==e.places&&this.places().replaceWith("██████████"),!1!==e.phoneNumbers&&this.phoneNumbers().replaceWith("███████"),this},mc={api:function(e){e.prototype.redact=gc}},pc=function(e){let t=null;return e.has("#PastTense")?t="PastTense":e.has("#FutureTense")?t="FutureTense":e.has("#PresentTense")&&(t="PresentTense"),{tense:t}},fc=function(e){const t=function(e){let t=e;return 1===t.length?t:(t=t.if("#Verb"),1===t.length?t:(t=t.ifNo("(after|although|as|because|before|if|since|than|that|though|when|whenever|where|whereas|wherever|whether|while|why|unless|until|once)"),t=t.ifNo("^even (if|though)"),t=t.ifNo("^so that"),t=t.ifNo("^rather than"),t=t.ifNo("^provided that"),1===t.length?t:(t=t.ifNo("(that|which|whichever|who|whoever|whom|whose|whomever)"),1===t.length?t:(t=t.ifNo("(^despite|^during|^before|^through|^throughout)"),1===t.length?t:(t=t.ifNo("^#Gerund"),1===t.length?t:(0===t.length&&(t=e),t.eq(0)))))))}(e.clauses()),n=t.chunks();let r=e.none(),o=e.none(),a=e.none();return n.forEach(((e,t)=>{0!==t||e.has("")?o.found||!e.has("")?o.found&&(a=a.concat(e)):o=e:r=e})),o.found&&!r.found&&(r=o.before("+").first()),{subj:r,verb:o,pred:a,grammar:pc(o)}};var bc={api:function(e){class Sentences extends e{constructor(e,t,n){super(e,t,n),this.viewType="Sentences"}json(e={}){return this.map((t=>{const n=t.toView().json(e)[0]||{},{subj:r,verb:o,pred:a,grammar:i}=fc(t);return n.sentence={subject:r.text("normal"),verb:o.text("normal"),predicate:a.text("normal"),grammar:i},n}),[])}toPastTense(e){return this.getNth(e).map((e=>(fc(e),function(e){let t=e.verbs();const n=t.eq(0);if(n.has("#PastTense"))return e;if(n.toPastTense(),t.length>1){t=t.slice(1),t=t.filter((e=>!e.lookBehind("to$").found)),t=t.if("#PresentTense"),t=t.notIf("#Gerund");const n=e.match("to #Verb+ #Conjunction #Verb").terms();t=t.not(n),t.found&&t.verbs().toPastTense()}return e}(e))))}toPresentTense(e){return this.getNth(e).map((e=>(fc(e),function(e){let t=e.verbs();return t.eq(0).toPresentTense(),t.length>1&&(t=t.slice(1),t=t.filter((e=>!e.lookBehind("to$").found)),t=t.notIf("#Gerund"),t.found&&t.verbs().toPresentTense()),e}(e))))}toFutureTense(e){return this.getNth(e).map((e=>(fc(e),e=function(e){let t=e.verbs();if(t.eq(0).toFutureTense(),t=(e=e.fullSentence()).verbs(),t.length>1){t=t.slice(1);const e=t.filter((e=>!(e.lookBehind("to$").found||!e.has("#Copula #Gerund")&&(e.has("#Gerund")||!e.has("#Copula")&&e.has("#PresentTense")&&!e.has("#Infinitive")&&e.lookBefore("(he|she|it|that|which)$").found))));e.found&&e.forEach((e=>{if(e.has("#Copula"))return e.match("was").replaceWith("is"),void e.match("is").replaceWith("will be");e.toInfinitive()}))}return e}(e),e)))}toInfinitive(e){return this.getNth(e).map((e=>(fc(e),function(e){return e.verbs().toInfinitive(),e}(e))))}toNegative(e){return this.getNth(e).map((e=>(fc(e),function(e){return e.verbs().first().toNegative().compute("chunks"),e}(e))))}toPositive(e){return this.getNth(e).map((e=>(fc(e),function(e){return e.verbs().first().toPositive().compute("chunks"),e}(e))))}isQuestion(e){return this.questions(e)}isExclamation(e){const t=this.filter((e=>e.lastTerm().has("@hasExclamation")));return t.getNth(e)}isStatement(e){const t=this.filter((e=>!e.isExclamation().found&&!e.isQuestion().found));return t.getNth(e)}update(e){const t=new Sentences(this.document,e);return t._cache=this._cache,t}}Sentences.prototype.toPresent=Sentences.prototype.toPresentTense,Sentences.prototype.toPast=Sentences.prototype.toPastTense,Sentences.prototype.toFuture=Sentences.prototype.toFutureTense;const t={sentences:function(e){let t=this.map((e=>e.fullSentence()));return t=t.getNth(e),new Sentences(this.document,t.pointer)},questions:function(e){const t=function(e){const t=/\?/,{document:n}=e;return e.filter((e=>{const r=e.docs[0]||[],o=r[r.length-1];return!(!o||n[o.index[0]].length!==r.length)&&(!!t.test(o.post)||function(e){const t=e.clauses();return!(/\.\.$/.test(e.out("text"))||e.has("^#QuestionWord")&&e.has("@hasComma")||!e.has("or not$")&&!e.has("^#QuestionWord")&&!e.has("^(do|does|did|is|was|can|could|will|would|may) #Noun")&&!e.has("^(have|must) you")&&!t.has("(do|does|is|was) #Noun+ #Adverb? (#Adjective|#Infinitive)$"))}(e))}))}(this);return t.getNth(e)}};Object.assign(e.prototype,t)}};const vc=function(e){const t={};t.firstName=e.match("#FirstName+"),t.lastName=e.match("#LastName+"),t.honorific=e.match("#Honorific+");const n=t.lastName,r=t.firstName;return r.found&&n.found||r.found||n.found||!e.has("^#Honorific .$")||(t.lastName=e.match(".$")),t},yc="male",wc="female",kc={mr:yc,mrs:wc,miss:wc,madam:wc,king:yc,queen:wc,duke:yc,duchess:wc,baron:yc,baroness:wc,count:yc,countess:wc,prince:yc,princess:wc,sire:yc,dame:wc,lady:wc,ayatullah:yc,congressman:yc,congresswoman:wc,"first lady":wc,mx:null},Pc=function(e,t){const{firstName:n,honorific:r}=e;if(n.has("#FemaleName"))return wc;if(n.has("#MaleName"))return yc;if(r.found){let e=r.text("normal");if(e=e.replace(/\./g,""),kc.hasOwnProperty(e))return kc[e];if(/^her /.test(e))return wc;if(/^his /.test(e))return yc}const o=t.after();if(!o.has("#Person")&&o.has("#Pronoun")){const e=o.match("#Pronoun");if(e.has("(they|their)"))return null;const t=e.has("(he|his)"),n=e.has("(she|her|hers)");if(t&&!n)return yc;if(n&&!t)return wc}return null},Ac=function(e){const t=this.clauses();let n=t.people();return n=n.concat(t.places()),n=n.concat(t.organizations()),n=n.not("(someone|man|woman|mother|brother|sister|father)"),n=n.sort("seq"),n=n.getNth(e),n};var Cc={api:function(e){!function(e){class People extends e{constructor(e,t,n){super(e,t,n),this.viewType="People"}parse(e){return this.getNth(e).map(vc)}json(e){const t="object"==typeof e?e:{};return this.getNth(e).map((e=>{const n=e.toView().json(t)[0],r=vc(e);return n.person={firstName:r.firstName.text("normal"),lastName:r.lastName.text("normal"),honorific:r.honorific.text("normal"),presumed_gender:Pc(r,e)},n}),[])}presumedMale(){return this.filter((e=>e.has("(#MaleName|mr|mister|sr|jr|king|pope|prince|sir)")))}presumedFemale(){return this.filter((e=>e.has("(#FemaleName|mrs|miss|queen|princess|madam)")))}update(e){const t=new People(this.document,e);return t._cache=this._cache,t}}e.prototype.people=function(e){let t=function(e){let t=e.splitAfter("@hasComma");t=t.match("#Honorific+? #Person+");const n=t.match("#Possessive").notIf("(his|her)");return t=t.splitAfter(n),t}(this);return t=t.getNth(e),new People(this.document,t.pointer)}}(e),function(e){e.prototype.places=function(t){let n=function(e){let t=e.match("(#Place|#Address)+"),n=t.match("@hasComma");return n=n.filter((e=>!!e.has("(asia|africa|europe|america)$")||!e.has("(#City|#Region|#ProperNoun)$")||!e.after("^(#Country|#Region)").found)),t=t.splitAfter(n),t}(this);return n=n.getNth(t),new e(this.document,n.pointer)}}(e),function(e){e.prototype.organizations=function(e){return this.match("#Organization+").getNth(e)}}(e),function(e){e.prototype.topics=Ac}(e)}};const Nc=function(e,t){const n={pre:e.none(),post:e.none()};if(!e.has("#Adverb"))return n;const r=e.splitOn(t);return 3===r.length?{pre:r.eq(0).adverbs(),post:r.eq(2).adverbs()}:r.eq(0).isDoc(t)?(n.post=r.eq(1).adverbs(),n):(n.pre=r.eq(0).adverbs(),n)},jc=function(e,t){const n=e.splitBefore(t);if(n.length<=1)return e.none();let r=n.eq(0);return r=r.not("(#Adverb|#Negative|#Prefix)"),r},xc=function(e){return e.match("#Negative")},Ic=function(e){if(!e.has("(#Particle|#PhrasalVerb)"))return{verb:e.none(),particle:e.none()};const t=e.match("#Particle$");return{verb:e.not(t),particle:t}},Tc=function(e){const t=e.clone();t.contractions().expand();const n=function(e){let t=e;return e.wordCount()>1&&(t=e.not("(#Negative|#Auxiliary|#Modal|#Adverb|#Prefix)")),t.length>1&&!t.has("#Phrasal #Particle")&&(t=t.last()),t=t.not("(want|wants|wanted) to"),t.found||(t=e.not("#Negative")),t}(t);return{root:n,prefix:t.match("#Prefix"),adverbs:Nc(t,n),auxiliary:jc(t,n),negative:xc(t),phrasal:Ic(n)}},Dc={tense:"PresentTense"},Hc={conditional:!0},Ec={tense:"FutureTense"},Gc={progressive:!0},Oc={tense:"PastTense"},Fc={complete:!0,progressive:!1},Vc={passive:!0},zc=function(e){const t={};return e.forEach((e=>{Object.assign(t,e)})),t},Bc={imperative:[["#Imperative",[]]],"want-infinitive":[["^(want|wants|wanted) to #Infinitive$",[Dc]],["^wanted to #Infinitive$",[Oc]],["^will want to #Infinitive$",[Ec]]],"gerund-phrase":[["^#PastTense #Gerund$",[Oc]],["^#PresentTense #Gerund$",[Dc]],["^#Infinitive #Gerund$",[Dc]],["^will #Infinitive #Gerund$",[Ec]],["^have #PastTense #Gerund$",[Oc]],["^will have #PastTense #Gerund$",[Oc]]],"simple-present":[["^#PresentTense$",[Dc]],["^#Infinitive$",[Dc]]],"simple-past":[["^#PastTense$",[Oc]]],"simple-future":[["^will #Adverb? #Infinitive",[Ec]]],"present-progressive":[["^(is|are|am) #Gerund$",[Dc,Gc]]],"past-progressive":[["^(was|were) #Gerund$",[Oc,Gc]]],"future-progressive":[["^will be #Gerund$",[Ec,Gc]]],"present-perfect":[["^(has|have) #PastTense$",[Oc,Fc]]],"past-perfect":[["^had #PastTense$",[Oc,Fc]],["^had #PastTense to #Infinitive",[Oc,Fc]]],"future-perfect":[["^will have #PastTense$",[Ec,Fc]]],"present-perfect-progressive":[["^(has|have) been #Gerund$",[Oc,Gc]]],"past-perfect-progressive":[["^had been #Gerund$",[Oc,Gc]]],"future-perfect-progressive":[["^will have been #Gerund$",[Ec,Gc]]],"passive-past":[["(got|were|was) #Passive",[Oc,Vc]],["^(was|were) being #Passive",[Oc,Vc]],["^(had|have) been #Passive",[Oc,Vc]]],"passive-present":[["^(is|are|am) #Passive",[Dc,Vc]],["^(is|are|am) being #Passive",[Dc,Vc]],["^has been #Passive",[Dc,Vc]]],"passive-future":[["will have been #Passive",[Ec,Vc,Hc]],["will be being? #Passive",[Ec,Vc,Hc]]],"present-conditional":[["would be #PastTense",[Dc,Hc]]],"past-conditional":[["would have been #PastTense",[Oc,Hc]]],"auxiliary-future":[["(is|are|am|was) going to (#Infinitive|#PresentTense)",[Ec]]],"auxiliary-past":[["^did #Infinitive$",[Oc,{plural:!1}]],["^used to #Infinitive$",[Oc,Fc]]],"auxiliary-present":[["^(does|do) #Infinitive$",[Dc,Fc,{plural:!0}]]],"modal-past":[["^(could|must|should|shall) have #PastTense$",[Oc]]],"modal-infinitive":[["^#Modal #Infinitive$",[]]],infinitive:[["^#Infinitive$",[]]]},Sc=[];Object.keys(Bc).map((e=>{Bc[e].forEach((t=>{Sc.push({name:e,match:t[0],data:zc(t[1])})}))}));const $c=function(e,t){const n={};e=function(e,t){return e=e.clone(),t.adverbs.post&&t.adverbs.post.found&&e.remove(t.adverbs.post),t.adverbs.pre&&t.adverbs.pre.found&&e.remove(t.adverbs.pre),e.has("#Negative")&&(e=e.remove("#Negative")),e.has("#Prefix")&&(e=e.remove("#Prefix")),t.root.has("#PhrasalVerb #Particle")&&e.remove("#Particle$"),e.not("#Adverb")}(e,t);for(let t=0;t!(e.has("^(if|unless|while|but|for|per|at|by|that|which|who|from)")||t>0&&e.has("^#Verb . #Noun+$")||t>0&&e.has("^#Adverb")))),0===t.length?e:t}(t);const n=t.nouns();let r=n.last();const o=r.match("(i|he|she|we|you|they)");if(o.found)return o.nouns();let a=n.if("^(that|this|those)");return a.found||!1===n.found&&(a=t.match("^(that|this|those)"),a.found)?a:(r=n.last(),Mc(r)&&(n.remove(r),r=n.last()),Mc(r)&&(n.remove(r),r=n.last()),r)}(e);return{subject:t,plural:Lc(t,e)}},Jc=e=>e,Wc=(e,t)=>{const n=Kc(e),r=n.subject;return!(!r.has("i")&&!r.has("we"))||n.plural},qc=function(e,t){if(e.has("were"))return"are";const{subject:n,plural:r}=Kc(e);return n.has("i")?"am":n.has("we")||r?"are":"is"},Uc=function(e,t){const n=Kc(e),r=n.subject;return r.has("i")||r.has("we")||n.plural?"do":"does"},Rc=function(e){return e.has("#Infinitive")?"Infinitive":e.has("#Participle")?"Participle":e.has("#PastTense")?"PastTense":e.has("#Gerund")?"Gerund":e.has("#PresentTense")?"PresentTense":void 0},Qc=function(e,t){const{toInfinitive:n}=e.methods.two.transform.verb;let r=t.root.text({keepPunct:!1});return r=n(r,e.model,Rc(e)),r&&e.replace(t.root,r),e},Zc=e=>e.has("will not")?e.replace("will not","have not"):e.remove("will"),_c=function(e){if(!e||!e.isView)return[];return e.json({normal:!0,terms:!1,text:!1}).map((e=>e.normal))},Xc=function(e){return e&&e.isView?e.text("normal"):""},Yc=function(e){const{toInfinitive:t}=e.methods.two.transform.verb;return t(e.text("normal"),e.model,Rc(e))},eh={tags:!0},th={tags:!0},nh={noAux:(e,t)=>(t.auxiliary.found&&(e=e.remove(t.auxiliary)),e),simple:(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;if(o.has("#Modal"))return e;let a=o.text({keepPunct:!1});a=r(a,e.model,Rc(o));return a=n(a,e.model).PastTense,a="been"===a?"was":a,"was"===a&&(a=((e,t)=>{const{subject:n,plural:r}=Kc(e);return r||n.has("we")?"were":"was"})(e)),a&&e.replace(o,a,th),e},both:function(e,t){return t.negative.found?(e.replace("will","did"),e):(e=nh.simple(e,t),e=nh.noAux(e,t))},hasHad:e=>(e.replace("has","had",th),e),hasParticiple:(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;let a=o.text("normal");return a=r(a,e.model,Rc(o)),n(a,e.model).Participle}},rh={infinitive:nh.simple,"simple-present":nh.simple,"simple-past":Jc,"simple-future":nh.both,"present-progressive":e=>(e.replace("are","were",th),e.replace("(is|are|am)","was",th),e),"past-progressive":Jc,"future-progressive":(e,t)=>(e.match(t.root).insertBefore("was"),e.remove("(will|be)"),e),"present-perfect":nh.hasHad,"past-perfect":Jc,"future-perfect":(e,t)=>(e.match(t.root).insertBefore("had"),e.has("will")&&(e=Zc(e)),e.remove("have"),e),"present-perfect-progressive":nh.hasHad,"past-perfect-progressive":Jc,"future-perfect-progressive":e=>(e.remove("will"),e.replace("have","had",th),e),"passive-past":e=>(e.replace("have","had",th),e),"passive-present":e=>(e.replace("(is|are)","was",th),e),"passive-future":(e,t)=>(t.auxiliary.has("will be")&&(e.match(t.root).insertBefore("had been"),e.remove("(will|be)")),t.auxiliary.has("will have been")&&(e.replace("have","had",th),e.remove("will")),e),"present-conditional":e=>(e.replace("be","have been"),e),"past-conditional":Jc,"auxiliary-future":e=>(e.replace("(is|are|am)","was",th),e),"auxiliary-past":Jc,"auxiliary-present":e=>(e.replace("(do|does)","did",th),e),"modal-infinitive":(e,t)=>(e.has("can")?e.replace("can","could",th):(nh.simple(e,t),e.match("#Modal").insertAfter("have").tag("Auxiliary")),e),"modal-past":Jc,"want-infinitive":e=>(e.replace("(want|wants)","wanted",th),e.remove("will"),e),"gerund-phrase":(e,t)=>(t.root=t.root.not("#Gerund$"),nh.simple(e,t),Zc(e),e)},oh=function(e,t){const n=Kc(e),r=n.subject;return r.has("(i|we|you)")?"have":!1===n.plural||r.has("he")||r.has("she")||r.has("#Person")?"has":"have"},ah=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,{root:o,auxiliary:a}=t;if(o.has("#Modal"))return e;let i=o.text({keepPunct:!1});i=r(i,e.model,Rc(o));const s=n(i,e.model);if(i=s.Participle||s.PastTense,i){e=e.replace(o,i);const t=oh(e);e.prepend(t).match(t).tag("Auxiliary"),e.remove(a)}return e},ih={infinitive:ah,"simple-present":ah,"simple-future":(e,t)=>e.replace("will",oh(e)),"present-perfect":Jc,"past-perfect":Jc,"future-perfect":(e,t)=>e.replace("will have",oh(e)),"present-perfect-progressive":Jc,"past-perfect-progressive":Jc,"future-perfect-progressive":Jc},sh={tags:!0},lh=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;let a=o.text("normal");return a=r(a,e.model,Rc(o)),!1===Wc(e)&&(a=n(a,e.model).PresentTense),o.has("#Copula")&&(a=qc(e)),a&&(e=e.replace(o,a,sh)).not("#Particle").tag("PresentTense"),e},uh=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,o=t.root;let a=o.text("normal");return a=r(a,e.model,Rc(o)),!1===Wc(e)&&(a=n(a,e.model).Gerund),a&&(e=e.replace(o,a,sh)).not("#Particle").tag("Gerund"),e},ch={infinitive:lh,"simple-present":(e,t)=>{const{conjugate:n}=e.methods.two.transform.verb,{root:r}=t;if(!r.has("#Infinitive"))return lh(e,t);{const t=Kc(e).subject;if(Wc(e)||t.has("i"))return e;const o=r.text("normal"),a=n(o,e.model).PresentTense;o!==a&&e.replace(r,a,sh)}return e},"simple-past":lh,"simple-future":(e,t)=>{const{root:n,auxiliary:r}=t;if(r.has("will")&&n.has("be")){const t=qc(e);e.replace(n,t),(e=e.remove("will")).replace("not "+t,t+" not")}else lh(e,t),e=e.remove("will");return e},"present-progressive":Jc,"past-progressive":(e,t)=>{const n=qc(e);return e.replace("(were|was)",n,sh)},"future-progressive":e=>(e.match("will").insertBefore("is"),e.remove("be"),e.remove("will")),"present-perfect":(e,t)=>(lh(e,t),e=e.remove("(have|had|has)")),"past-perfect":(e,t)=>{const n=Kc(e).subject;return Wc(e)||n.has("i")?((e=Qc(e,t)).remove("had"),e):(e.replace("had","has",sh),e)},"future-perfect":e=>(e.match("will").insertBefore("has"),e.remove("have").remove("will")),"present-perfect-progressive":Jc,"past-perfect-progressive":e=>e.replace("had","has",sh),"future-perfect-progressive":e=>(e.match("will").insertBefore("has"),e.remove("have").remove("will")),"passive-past":(e,t)=>{const n=qc(e);return e.has("(had|have|has)")&&e.has("been")?(e.replace("(had|have|has)",n,sh),e.replace("been","being"),e):e.replace("(got|was|were)",n)},"passive-present":Jc,"passive-future":e=>(e.replace("will","is"),e.replace("be","being")),"present-conditional":Jc,"past-conditional":e=>(e.replace("been","be"),e.remove("have")),"auxiliary-future":(e,t)=>(uh(e,t),e.remove("(going|to)"),e),"auxiliary-past":(e,t)=>{if(t.auxiliary.has("did")){const n=Uc(e);return e.replace(t.auxiliary,n),e}return uh(e,t),e.replace(t.auxiliary,"is"),e},"auxiliary-present":Jc,"modal-infinitive":Jc,"modal-past":(e,t)=>(((e,t)=>{const{toInfinitive:n}=e.methods.two.transform.verb,r=t.root;let o=t.root.text("normal");o=n(o,e.model,Rc(r)),o&&(e=e.replace(t.root,o,sh))})(e,t),e.remove("have")),"gerund-phrase":(e,t)=>(t.root=t.root.not("#Gerund$"),lh(e,t),e.remove("(will|have)")),"want-infinitive":(e,t)=>{let n="wants";return Wc(e)&&(n="want"),e.replace("(want|wanted|wants)",n,sh),e.remove("will"),e}},hh={tags:!0},dh=(e,t)=>{const{toInfinitive:n}=e.methods.two.transform.verb,{root:r,auxiliary:o}=t;if(r.has("#Modal"))return e;let a=r.text("normal");return a=n(a,e.model,Rc(r)),a&&(e=e.replace(r,a,hh)).not("#Particle").tag("Verb"),e.prepend("will").match("will").tag("Auxiliary"),e.remove(o),e},gh=(e,t)=>{const{conjugate:n,toInfinitive:r}=e.methods.two.transform.verb,{root:o,auxiliary:a}=t;let i=o.text("normal");return i=r(i,e.model,Rc(o)),i&&(i=n(i,e.model).Gerund,e.replace(o,i,hh),e.not("#Particle").tag("PresentTense")),e.remove(a),e.prepend("will be").match("will be").tag("Auxiliary"),e},mh={infinitive:dh,"simple-present":dh,"simple-past":dh,"simple-future":Jc,"present-progressive":gh,"past-progressive":gh,"future-progressive":Jc,"present-perfect":e=>(e.match("(have|has)").replaceWith("will have"),e),"past-perfect":e=>e.replace("(had|has)","will have"),"future-perfect":Jc,"present-perfect-progressive":e=>e.replace("has","will have"),"past-perfect-progressive":e=>e.replace("had","will have"),"future-perfect-progressive":Jc,"passive-past":e=>e.has("got")?e.replace("got","will get"):e.has("(was|were)")?(e.replace("(was|were)","will be"),e.remove("being")):e.has("(have|has|had) been")?e.replace("(have|has|had) been","will be"):e,"passive-present":e=>(e.replace("being","will be"),e.remove("(is|are|am)"),e),"passive-future":Jc,"present-conditional":e=>e.replace("would","will"),"past-conditional":e=>e.replace("would","will"),"auxiliary-future":Jc,"auxiliary-past":e=>e.has("used")&&e.has("to")?(e.replace("used","will"),e.remove("to")):(e.replace("did","will"),e),"auxiliary-present":e=>e.replace("(do|does)","will"),"modal-infinitive":Jc,"modal-past":Jc,"gerund-phrase":(e,t)=>(t.root=t.root.not("#Gerund$"),dh(e,t),e.remove("(had|have)")),"want-infinitive":e=>(e.replace("(want|wants|wanted)","will want"),e)},ph={tags:!0},fh={tags:!0},bh=function(e,t){const n=Uc(e);return e.prepend(n+" not"),e},vh=function(e){let t=e.match("be");return t.found?(t.prepend("not"),e):(t=e.match("(is|was|am|are|will|were)"),t.found?(t.append("not"),e):e)},yh=e=>e.has("(is|was|am|are|will|were|be)"),wh={"simple-present":(e,t)=>!0===yh(e)?vh(e):(e=Qc(e,t),e=bh(e)),"simple-past":(e,t)=>!0===yh(e)?vh(e):((e=Qc(e,t)).prepend("did not"),e),imperative:e=>(e.prepend("do not"),e),infinitive:(e,t)=>!0===yh(e)?vh(e):bh(e),"passive-past":e=>{if(e.has("got"))return e.replace("got","get",fh),e.prepend("did not"),e;const t=e.match("(was|were|had|have)");return t.found&&t.append("not"),e},"auxiliary-past":e=>{if(e.has("used"))return e.prepend("did not"),e;const t=e.match("(did|does|do)");return t.found&&t.append("not"),e},"want-infinitive":(e,t)=>e=(e=bh(e)).replace("wants","want",fh)};var kh={api:function(e){class Verbs extends e{constructor(e,t,n){super(e,t,n),this.viewType="Verbs"}parse(e){return this.getNth(e).map(Tc)}json(e,t){const n=this.getNth(t).map((t=>{const n=t.toView().json(e)[0]||{};return n.verb=function(e){const t=Tc(e);e=e.clone().toView();const n=$c(e,t);return{root:t.root.text(),preAdverbs:_c(t.adverbs.pre),postAdverbs:_c(t.adverbs.post),auxiliary:Xc(t.auxiliary),negative:t.negative.found,prefix:Xc(t.prefix),infinitive:Yc(t.root),grammar:n}}(t),n}),[]);return n}subjects(e){return this.getNth(e).map((e=>(Tc(e),Kc(e).subject)))}adverbs(e){return this.getNth(e).map((e=>e.match("#Adverb")))}isSingular(e){return this.getNth(e).filter((e=>!0!==Kc(e).plural))}isPlural(e){return this.getNth(e).filter((e=>!0===Kc(e).plural))}isImperative(e){return this.getNth(e).filter((e=>e.has("#Imperative")))}toInfinitive(e){return this.getNth(e).map((e=>{const t=Tc(e);return function(e,t){const{toInfinitive:n}=e.methods.two.transform.verb,{root:r,auxiliary:o}=t,a=o.terms().harden();let i=r.text("normal");if(i=n(i,e.model,Rc(r)),i&&e.replace(r,i,eh).tag("Verb").firstTerm().tag("Infinitive"),a.found&&e.remove(a),t.negative.found){e.has("not")||e.prepend("not");const t=Uc(e);e.prepend(t)}return e.fullSentence().compute(["freeze","lexicon","preTagger","postTagger","unfreeze","chunks"]),e}(e,t,$c(e,t).form)}))}toPresentTense(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return ch.hasOwnProperty(n)?((e=ch[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):e}(e,t,n.form)}))}toPastTense(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return rh.hasOwnProperty(n)?((e=rh[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):e}(e,t,n.form)}))}toFutureTense(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return e.has("will")||e.has("going to")?e:mh.hasOwnProperty(n)?((e=mh[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):e}(e,t,n.form)}))}toGerund(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t){const{toInfinitive:n,conjugate:r}=e.methods.two.transform.verb,{root:o,auxiliary:a}=t;if(e.has("#Gerund"))return e;let i=o.text("normal");i=n(i,e.model,Rc(o));const s=r(i,e.model).Gerund;if(s){const t=qc(e);e.replace(o,s,ph),e.remove(a),e.prepend(t)}return e.replace("not is","is not"),e.replace("not are","are not"),e.fullSentence().compute(["tagger","chunks"]),e}(e,t,n.form)}))}toPastParticiple(e){return this.getNth(e).map((e=>{const t=Tc(e),n=$c(e,t);return n.isInfinitive?e:function(e,t,n){return ih.hasOwnProperty(n)?((e=ih[n](e,t)).fullSentence().compute(["tagger","chunks"]),e):((e=ah(e,t)).fullSentence().compute(["tagger","chunks"]),e)}(e,t,n.form)}))}conjugate(e){const{conjugate:t,toInfinitive:n}=this.world.methods.two.transform.verb;return this.getNth(e).map((e=>{const r=Tc(e),o=$c(e,r);"imperative"===o.form&&(o.form="simple-present");let a=r.root.text("normal");if(!r.root.has("#Infinitive")){const t=Rc(r.root);a=n(a,e.model,t)||a}return t(a,e.model)}),[])}isNegative(){return this.if("#Negative")}isPositive(){return this.ifNo("#Negative")}toPositive(){const e=this.match("do not #Verb");return e.found&&e.remove("do not"),this.remove("#Negative")}toNegative(e){return this.getNth(e).map((e=>{const t=Tc(e);return function(e,t,n){if(e.has("#Negative"))return e;if(wh.hasOwnProperty(n))return wh[n](e,t);let r=e.matchOne("be");return r.found?(r.prepend("not"),e):!0===yh(e)?vh(e):(r=e.matchOne("(will|had|have|has|did|does|do|#Modal)"),r.found?(r.append("not"),e):e)}(e,t,$c(e,t).form)}))}update(e){const t=new Verbs(this.document,e);return t._cache=this._cache,t}}Verbs.prototype.toPast=Verbs.prototype.toPastTense,Verbs.prototype.toPresent=Verbs.prototype.toPresentTense,Verbs.prototype.toFuture=Verbs.prototype.toFutureTense,e.prototype.verbs=function(e){let t=function(e){let t=e.match("");return t=t.not("#Conjunction"),t=t.not("#Preposition"),t=t.splitAfter("@hasComma"),t=t.splitAfter("[(do|did|am|was|is|will)] (is|was)",0),t=t.splitBefore("(#Verb && !#Copula) [being] #Verb",0),t=t.splitBefore("#Verb [to be] #Verb",0),t=t.splitAfter("[help] #PresentTense",0),t=t.splitBefore("(#PresentTense|#PastTense) [#Copula]$",0),t=t.splitBefore("(#PresentTense|#PastTense) [will be]$",0),t=t.splitBefore("(#PresentTense|#PastTense) [(had|has)]",0),t=t.not("#Reflexive$"),t=t.not("#Adjective"),t=t.splitAfter("[#PastTense] #PastTense",0),t=t.splitAfter("[#PastTense] #Auxiliary+ #PastTense",0),t=t.splitAfter("#Copula [#Gerund] #PastTense",0),t=t.if("#Verb"),t.has("(#Verb && !#Auxiliary) #Adverb+? #Copula")&&(t=t.splitBefore("#Copula")),t}(this);return t=t.getNth(e),new Verbs(this.document,t.pointer)}}};const Ph=function(e,t){const n=t.match(e);if(n.found){const e=n.pronouns().refersTo();if(e.found)return e}return t.none()},Ah=function(e){if(!e.found)return e;const[t]=e.fullPointer[0];return t&&t>0?e.update([[t-1]]):e.none()},Ch=function(e,t){let n=e.people();return n=function(e,t){return"m"===t?e.filter((e=>!e.presumedFemale().found)):"f"===t?e.filter((e=>!e.presumedMale().found)):e}(n,t),n.found?n.last():(n=e.nouns("#Actor"),n.found?n.last():"f"===t?Ph("(she|her|hers)",e):"m"===t?Ph("(he|him|his)",e):e.none())},Nh=function(e){const t=e.nouns();let n=t.isPlural().notIf("#Pronoun");if(n.found)return n.last();const r=Ph("(they|their|theirs)",e);return r.found?r:(n=t.match("(somebody|nobody|everybody|anybody|someone|noone|everyone|anyone)"),n.found?n.last():e.none())},jh=function(e,t){let n=e.before(),r=t(n);return r.found?r:(n=Ah(e),r=t(n),r.found?r:(n=Ah(n),r=t(n),r.found?r:e.none()))};var xh={compute:{coreference:function(e){e.pronouns().if("(he|him|his|she|her|hers|they|their|theirs|it|its)").forEach((e=>{let t=null;e.has("(he|him|his)")?t=jh(e,(e=>Ch(e,"m"))):e.has("(she|her|hers)")?t=jh(e,(e=>Ch(e,"f"))):e.has("(they|their|theirs)")&&(t=jh(e,Nh)),t&&t.found&&function(e,t){t&&t.found&&(e.docs[0][0].reference=t.ptrs[0])}(e,t)}))}},api:function(e){class Pronouns extends e{constructor(e,t,n){super(e,t,n),this.viewType="Pronouns"}hasReference(){return this.compute("coreference"),this.filter((e=>e.docs[0][0].reference))}refersTo(){return this.compute("coreference"),this.map((e=>{if(!e.found)return e.none();const t=e.docs[0][0];return t.reference?e.update([t.reference]):e.none()}))}update(e){const t=new Pronouns(this.document,e);return t._cache=this._cache,t}}e.prototype.pronouns=function(e){let t=this.match("#Pronoun");return t=t.getNth(e),new Pronouns(t.document,t.pointer)}}};h.plugin(ql),h.plugin(Ul),h.plugin(eu),h.plugin(xh),h.plugin(fu),h.plugin(Au),h.plugin(Ou),h.plugin(hc),h.plugin(mc),h.plugin(bc),h.plugin(Cc),h.plugin(kh);export{h as default}; diff --git a/builds/two/compromise-two.cjs b/builds/two/compromise-two.cjs new file mode 100644 index 0000000..0d33f50 --- /dev/null +++ b/builds/two/compromise-two.cjs @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).nlp=t()}(this,(function(){"use strict";var e={methods:{one:{},two:{},three:{},four:{}},model:{one:{},two:{},three:{}},compute:{},hooks:[]};const t={compute:function(e){const{world:t}=this,n=t.compute;return"string"==typeof e&&n.hasOwnProperty(e)?n[e](this):(e=>"[object Array]"===Object.prototype.toString.call(e))(e)?e.forEach((a=>{t.compute.hasOwnProperty(a)?n[a](this):console.warn("no compute:",e)})):"function"==typeof e?e(this):console.warn("no compute:",e),this}};var n={forEach:function(e){return this.fullPointer.forEach(((t,n)=>{const a=this.update([t]);e(a,n)})),this},map:function(e,t){const n=this.fullPointer.map(((t,n)=>{const a=this.update([t]),r=e(a,n);return void 0===r?this.none():r}));if(0===n.length)return t||this.update([]);if(void 0!==n[0]){if("string"==typeof n[0])return n;if("object"==typeof n[0]&&(null===n[0]||!n[0].isView))return n}let a=[];return n.forEach((e=>{a=a.concat(e.fullPointer)})),this.toView(a)},filter:function(e){let t=this.fullPointer;t=t.filter(((t,n)=>{const a=this.update([t]);return e(a,n)}));return this.update(t)},find:function(e){const t=this.fullPointer.find(((t,n)=>{const a=this.update([t]);return e(a,n)}));return this.update([t])},some:function(e){return this.fullPointer.some(((t,n)=>{const a=this.update([t]);return e(a,n)}))},random:function(e=1){let t=this.fullPointer,n=Math.floor(Math.random()*t.length);return n+e>this.length&&(n=this.length-e,n=n<0?0:n),t=t.slice(n,n+e),this.update(t)}};const a={termList:function(){return this.methods.one.termList(this.docs)},terms:function(e){const t=this.match(".");return"number"==typeof e?t.eq(e):t},groups:function(e){if(e||0===e)return this.update(this._groups[e]||[]);const t={};return Object.keys(this._groups).forEach((e=>{t[e]=this.update(this._groups[e])})),t},eq:function(e){let t=this.pointer;return t||(t=this.docs.map(((e,t)=>[t]))),t[e]?this.update([t[e]]):this.none()},first:function(){return this.eq(0)},last:function(){const e=this.fullPointer.length-1;return this.eq(e)},firstTerms:function(){return this.match("^.")},lastTerms:function(){return this.match(".$")},slice:function(e,t){let n=this.pointer||this.docs.map(((e,t)=>[t]));return n=n.slice(e,t),this.update(n)},all:function(){return this.update().toView()},fullSentences:function(){const e=this.fullPointer.map((e=>[e[0]]));return this.update(e).toView()},none:function(){return this.update([])},isDoc:function(e){if(!e||!e.isView)return!1;const t=this.fullPointer,n=e.fullPointer;return!t.length!==n.length&&t.every(((e,t)=>!!n[t]&&(e[0]===n[t][0]&&e[1]===n[t][1]&&e[2]===n[t][2])))},wordCount:function(){return this.docs.reduce(((e,t)=>(e+=t.filter((e=>""!==e.text)).length,e)),0)},isFull:function(){const e=this.pointer;if(!e)return!0;if(0===e.length||0!==e[0][0])return!1;let t=0,n=0;return this.document.forEach((e=>t+=e.length)),this.docs.forEach((e=>n+=e.length)),t===n},getNth:function(e){return"number"==typeof e?this.eq(e):"string"==typeof e?this.if(e):this}};a.group=a.groups,a.fullSentence=a.fullSentences,a.sentence=a.fullSentences,a.lastTerm=a.lastTerms,a.firstTerm=a.firstTerms;const r=Object.assign({},a,t,n);r.get=r.eq;class View{constructor(t,n,a={}){[["document",t],["world",e],["_groups",a],["_cache",null],["viewType","View"]].forEach((e=>{Object.defineProperty(this,e[0],{value:e[1],writable:!0})})),this.ptrs=n}get docs(){let t=this.document;return this.ptrs&&(t=e.methods.one.getDoc(this.ptrs,this.document)),t}get pointer(){return this.ptrs}get methods(){return this.world.methods}get model(){return this.world.model}get hooks(){return this.world.hooks}get isView(){return!0}get found(){return this.docs.length>0}get length(){return this.docs.length}get fullPointer(){const{docs:e,ptrs:t,document:n}=this,a=t||e.map(((e,t)=>[t]));return a.map((e=>{let[t,a,r,o,i]=e;return a=a||0,r=r||(n[t]||[]).length,n[t]&&n[t][a]&&(o=o||n[t][a].id,n[t][r-1]&&(i=i||n[t][r-1].id)),[t,a,r,o,i]}))}update(e){const t=new View(this.document,e);if(this._cache&&e&&e.length>0){const n=[];e.forEach(((e,t)=>{const[a,r,o]=e;(1===e.length||0===r&&this.document[a].length===o)&&(n[t]=this._cache[a])})),n.length>0&&(t._cache=n)}return t.world=this.world,t}toView(e){return new View(this.document,e||this.pointer)}fromText(e){const{methods:t}=this,n=t.one.tokenize.fromString(e,this.world),a=new View(n);return a.world=this.world,a.compute(["normal","freeze","lexicon"]),this.world.compute.preTagger&&a.compute("preTagger"),a.compute("unfreeze"),a}clone(){let e=this.document.slice(0);e=e.map((e=>e.map((e=>((e=Object.assign({},e)).tags=new Set(e.tags),e)))));const t=this.update(this.pointer);return t.document=e,t._cache=this._cache,t}}Object.assign(View.prototype,r);const o=function(e){return e&&"object"==typeof e&&!Array.isArray(e)};function i(e,t){if(o(t))for(const n in t)o(t[n])?(e[n]||Object.assign(e,{[n]:{}}),i(e[n],t[n])):Object.assign(e,{[n]:t[n]});return e}const s=function(e,t,n,a){if(r=e,"[object Array]"===Object.prototype.toString.call(r))return void e.forEach((e=>s(e,t,n,a)));var r;const{methods:o,model:l,compute:u,hooks:c}=t;e.methods&&function(e,t){for(const n in t)e[n]=e[n]||{},Object.assign(e[n],t[n])}(o,e.methods),e.model&&i(l,e.model),e.irregulars&&function(e,t){const n=e.two.models||{};Object.keys(t).forEach((e=>{t[e].pastTense&&(n.toPast&&(n.toPast.ex[e]=t[e].pastTense),n.fromPast&&(n.fromPast.ex[t[e].pastTense]=e)),t[e].presentTense&&(n.toPresent&&(n.toPresent.ex[e]=t[e].presentTense),n.fromPresent&&(n.fromPresent.ex[t[e].presentTense]=e)),t[e].gerund&&(n.toGerund&&(n.toGerund.ex[e]=t[e].gerund),n.fromGerund&&(n.fromGerund.ex[t[e].gerund]=e)),t[e].comparative&&(n.toComparative&&(n.toComparative.ex[e]=t[e].comparative),n.fromComparative&&(n.fromComparative.ex[t[e].comparative]=e)),t[e].superlative&&(n.toSuperlative&&(n.toSuperlative.ex[e]=t[e].superlative),n.fromSuperlative&&(n.fromSuperlative.ex[t[e].superlative]=e))}))}(l,e.irregulars),e.compute&&Object.assign(u,e.compute),c&&(t.hooks=c.concat(e.hooks||[])),e.api&&e.api(n),e.lib&&Object.keys(e.lib).forEach((t=>a[t]=e.lib[t])),e.tags&&a.addTags(e.tags),e.words&&a.addWords(e.words),e.frozen&&a.addWords(e.frozen,!0),e.mutate&&e.mutate(t,a)},l=function(e){return"[object Array]"===Object.prototype.toString.call(e)},u=function(e,t,n){const{methods:a}=n,r=new t([]);if(r.world=n,"number"==typeof e&&(e=String(e)),!e)return r;if("string"==typeof e){return new t(a.one.tokenize.fromString(e,n))}if(o=e,"[object Object]"===Object.prototype.toString.call(o)&&e.isView)return new t(e.document,e.ptrs);var o;if(l(e)){if(l(e[0])){const n=e.map((e=>e.map((e=>({text:e,normal:e,pre:"",post:" ",tags:new Set})))));return new t(n)}const n=e.map((e=>e.terms.map((e=>(l(e.tags)&&(e.tags=new Set(e.tags)),e)))));return new t(n)}return r},c=Object.assign({},e),d=function(e,t){t&&d.addWords(t);const n=u(e,View,c);return e&&n.compute(c.hooks),n};Object.defineProperty(d,"_world",{value:c,writable:!0}),d.tokenize=function(e,t){const{compute:n}=this._world;t&&d.addWords(t);const a=u(e,View,c);return n.contractions&&a.compute(["alias","normal","machine","contractions"]),a},d.plugin=function(e){return s(e,this._world,View,this),this},d.extend=d.plugin,d.world=function(){return this._world},d.model=function(){return this._world.model},d.methods=function(){return this._world.methods},d.hooks=function(){return this._world.hooks},d.verbose=function(e){const t="undefined"!=typeof process&&process.env?process.env:self.env||{};return t.DEBUG_TAGS="tagger"===e||!0===e||"",t.DEBUG_MATCH="match"===e||!0===e||"",t.DEBUG_CHUNKS="chunker"===e||!0===e||"",this},d.version="14.15.1";var h={one:{cacheDoc:function(e){const t=e.map((e=>{const t=new Set;return e.forEach((e=>{""!==e.normal&&t.add(e.normal),e.switch&&t.add(`%${e.switch}%`),e.implicit&&t.add(e.implicit),e.machine&&t.add(e.machine),e.root&&t.add(e.root),e.alias&&e.alias.forEach((e=>t.add(e)));const n=Array.from(e.tags);for(let e=0;e/^\p{Lu}[\p{Ll}'’]/u.test(e)||/^\p{Lu}$/u.test(e),b=(e,t,n)=>{if(n.forEach((e=>e.dirty=!0)),e){const a=[t,0].concat(n);Array.prototype.splice.apply(e,a)}return e},y=function(e){const t=e[e.length-1];!t||/ $/.test(t.post)||/[-–—]/.test(t.post)||(t.post+=" ")},v=(e,t,n)=>{const a=/[-.?!,;:)–—'"]/g,r=e[t-1];if(!r)return;const o=r.post;if(a.test(o)){const e=o.match(a).join(""),t=n[n.length-1];t.post=e+t.post,r.post=r.post.replace(a,"")}},w=function(e,t,n,a){const[r,o,i]=t;0===o||i===a[r].length?y(n):(y(n),y([e[t[1]]])),function(e,t,n){const a=e[t];if(0!==t||!f(a.text))return;n[0].text=n[0].text.replace(/^\p{Ll}/u,(e=>e.toUpperCase()));const r=e[t];r.tags.has("ProperNoun")||r.tags.has("Acronym")||f(r.text)&&r.text.length>1&&(r.text=(o=r.text,o.replace(/^\p{Lu}/u,(e=>e.toLowerCase()))));var o}(e,o,n),b(e,o,n)};let k=0;const P=e=>(e=e.length<3?"0"+e:e).length<3?"0"+e:e,A=function(e){let[t,n]=e.index||[0,0];k+=1,k=k>46655?0:k,t=t>46655?0:t,n=n>1294?0:n;let a=P(k.toString(36));a+=P(t.toString(36));let r=n.toString(36);r=r.length<2?"0"+r:r,a+=r;return a+=parseInt(36*Math.random(),10).toString(36),e.normal+"|"+a.toUpperCase()},C=function(e){if(e.has("@hasContraction")&&"function"==typeof e.contractions){e.grow("@hasContraction").contractions().expand()}},j=e=>"[object Array]"===Object.prototype.toString.call(e),N=function(e,t,n){const{document:a,world:r}=t;t.uncache();const o=t.fullPointer,i=t.fullPointer;t.forEach(((s,l)=>{const u=s.fullPointer[0],[c]=u,d=a[c];let h=function(e,t){const{methods:n}=t;return"string"==typeof e?n.one.tokenize.fromString(e,t)[0]:"object"==typeof e&&e.isView?e.clone().docs[0]||[]:j(e)?j(e[0])?e[0]:e:[]}(e,r);0!==h.length&&(h=function(e){return e.map((e=>(e.id=A(e),e)))}(h),n?(C(t.update([u]).firstTerm()),w(d,u,h,a)):(C(t.update([u]).lastTerm()),function(e,t,n,a){const[r,,o]=t,i=(a[r]||[]).length;oe.replace(/^\p{Ll}/u,(e=>e.toUpperCase())),G=e=>e.replace(/^\p{Lu}/u,(e=>e.toLowerCase()));H.replaceWith=function(e,t={}){let n=this.fullPointer;const a=this;if(this.uncache(),"function"==typeof e)return function(e,t,n){return e.forEach((e=>{const a=t(e);e.replaceWith(a,n)})),e}(a,e,t);const r=a.docs[0];if(!r)return a;const o=t.possessives&&r[r.length-1].tags.has("Possessive"),i=t.case&&(s=r[0].text,/^\p{Lu}[\p{Ll}'’]/u.test(s)||/^\p{Lu}$/u.test(s));var s;e=function(e,t){if("string"!=typeof e)return e;const n=t.groups();return e=e.replace(D,(e=>{const t=e.replace(/\$/,"");return n.hasOwnProperty(t)?n[t].text():e})),e}(e,a);const l=this.update(n);n=n.map((e=>e.slice(0,3)));const u=(l.docs[0]||[]).map((e=>Array.from(e.tags))),c=l.docs[0][0].pre,d=l.docs[0][l.docs[0].length-1].post;if("string"==typeof e&&(e=this.fromText(e).compute("id")),a.insertAfter(e),l.has("@hasContraction")&&a.contractions){a.grow("@hasContraction+").contractions().expand()}if(a.delete(l),o){const e=a.docs[0],t=e[e.length-1];t.tags.has("Possessive")||(t.text+="'s",t.normal+="'s",t.tags.add("Possessive"))}if(c&&a.docs[0]&&(a.docs[0][0].pre=c),d&&a.docs[0]){const e=a.docs[0][a.docs[0].length-1];e.post.trim()||(e.post=d)}const h=a.toView(n).compute(["index","freeze","lexicon"]);if(h.world.compute.preTagger&&h.compute("preTagger"),h.compute("unfreeze"),t.tags&&h.terms().forEach(((e,t)=>{e.tagSafe(u[t])})),!h.docs[0]||!h.docs[0][0])return h;if(t.case){const e=i?T:G;h.docs[0][0].text=e(h.docs[0][0].text)}return h},H.replace=function(e,t,n){if(e&&!t)return this.replaceWith(e,n);const a=this.match(e);return a.found?(this.soften(),a.replaceWith(t,n)):this};const x={remove:function(e){const{indexN:t}=this.methods.one.pointer;this.uncache();let n=this.all(),a=this;e&&(n=this,a=this.match(e));const r=!n.ptrs;if(a.has("@hasContraction")&&a.contractions){a.grow("@hasContraction").contractions().expand()}let o=n.fullPointer;const i=a.fullPointer.reverse(),s=function(e,t){t.forEach((t=>{const[n,a,r]=t,o=r-a;e[n]&&(r===e[n].length&&r>1&&function(e,t){const n=e.length-1,a=e[n],r=e[n-t];r&&a&&(r.post+=a.post,r.post=r.post.replace(/ +([.?!,;:])/,"$1"),r.post=r.post.replace(/[,;:]+([.?!])/,"$1"))}(e[n],o),e[n].splice(a,o))}));for(let t=e.length-1;t>=0;t-=1)if(0===e[t].length&&(e.splice(t,1),t===e.length&&e[t-1])){const n=e[t-1],a=n[n.length-1];a&&(a.post=a.post.trimEnd())}return e}(this.document,i);if(o=function(e,t){return e=e.map((e=>{const[n]=e;return t[n]?(t[n].forEach((t=>{const n=t[2]-t[1];e[1]<=t[1]&&e[2]>=t[2]&&(e[2]-=n)})),e):e})),e.forEach(((t,n)=>{if(0===t[1]&&0==t[2])for(let t=n+1;te[2]-e[1]>0))).map((e=>(e[3]=null,e[4]=null,e)))}(o,t(i)),n.ptrs=o,n.document=s,n.compute("index"),r&&(n.ptrs=void 0),!e)return this.ptrs=[],n.none();return n.toView(o)}};x.delete=x.remove;const E={pre:function(e,t){return void 0===e&&this.found?this.docs[0][0].pre:(this.docs.forEach((n=>{const a=n[0];!0===t?a.pre+=e:a.pre=e})),this)},post:function(e,t){if(void 0===e){const e=this.docs[this.docs.length-1];return e[e.length-1].post}return this.docs.forEach((n=>{const a=n[n.length-1];!0===t?a.post+=e:a.post=e})),this},trim:function(){if(!this.found)return this;const e=this.docs,t=e[0][0];t.pre=t.pre.trimStart();const n=e[e.length-1],a=n[n.length-1];return a.post=a.post.trimEnd(),this},hyphenate:function(){return this.docs.forEach((e=>{e.forEach(((t,n)=>{0!==n&&(t.pre=""),e[n+1]&&(t.post="-")}))})),this},dehyphenate:function(){const e=/[-–—]/;return this.docs.forEach((t=>{t.forEach((t=>{e.test(t.post)&&(t.post=" ")}))})),this},toQuotations:function(e,t){return e=e||'"',t=t||'"',this.docs.forEach((n=>{n[0].pre=e+n[0].pre;const a=n[n.length-1];a.post=t+a.post})),this},toParentheses:function(e,t){return e=e||"(",t=t||")",this.docs.forEach((n=>{n[0].pre=e+n[0].pre;const a=n[n.length-1];a.post=t+a.post})),this}};E.deHyphenate=E.dehyphenate,E.toQuotation=E.toQuotations;var F={alpha:(e,t)=>e.normalt.normal?1:0,length:(e,t)=>{const n=e.normal.trim().length,a=t.normal.trim().length;return na?-1:0},wordCount:(e,t)=>e.wordst.words?-1:0,sequential:(e,t)=>e[0]t[0]?-1:e[1]>t[1]?1:-1,byFreq:function(e){const t={};return e.forEach((e=>{t[e.normal]=t[e.normal]||0,t[e.normal]+=1})),e.sort(((e,n)=>{const a=t[e.normal],r=t[n.normal];return ar?-1:0})),e}};const O=new Set(["index","sequence","seq","sequential","chron","chronological"]),z=new Set(["freq","frequency","topk","repeats"]),V=new Set(["alpha","alphabetical"]);var B={unique:function(){const e=new Set,t=this.filter((t=>{const n=t.text("machine");return!e.has(n)&&(e.add(n),!0)}));return t},reverse:function(){let e=this.pointer||this.docs.map(((e,t)=>[t]));return e=[].concat(e),e=e.reverse(),this._cache&&(this._cache=this._cache.reverse()),this.update(e)},sort:function(e){const{docs:t,pointer:n}=this;if(this.uncache(),"function"==typeof e)return function(e,t){let n=e.fullPointer;return n=n.sort(((n,a)=>(n=e.update([n]),a=e.update([a]),t(n,a)))),e.ptrs=n,e}(this,e);e=e||"alpha";const a=n||t.map(((e,t)=>[t]));let r=t.map(((e,t)=>({index:t,words:e.length,normal:e.map((e=>e.machine||e.normal||"")).join(" "),pointer:a[t]})));return O.has(e)&&(e="sequential"),V.has(e)&&(e="alpha"),z.has(e)?(r=F.byFreq(r),this.update(r.map((e=>e.pointer)))):"function"==typeof F[e]?(r=r.sort(F[e]),this.update(r.map((e=>e.pointer)))):this}};const S=function(e,t){if(e.length>0){const t=e[e.length-1],n=t[t.length-1];!1===/ /.test(n.post)&&(n.post+=" ")}return e=e.concat(t)};var K={concat:function(e){if("string"==typeof e){const t=this.fromText(e);if(this.found&&this.ptrs){const e=this.fullPointer,n=e[e.length-1][0];this.document.splice(n,0,...t.document)}else this.document=this.document.concat(t.document);return this.all().compute("index")}if("object"==typeof e&&e.isView)return function(e,t){if(e.document===t.document){const n=e.fullPointer.concat(t.fullPointer);return e.toView(n).compute("index")}return t.fullPointer.forEach((t=>{t[0]+=e.document.length})),e.document=S(e.document,t.docs),e.all()}(this,e);if(t=e,"[object Array]"===Object.prototype.toString.call(t)){const t=S(this.document,e);return this.document=t,this.all()}var t;return this}};var $={harden:function(){return this.ptrs=this.fullPointer,this},soften:function(){let e=this.ptrs;return!e||e.length<1||(e=e.map((e=>e.slice(0,3))),this.ptrs=e),this}};const L=Object.assign({},{toLowerCase:function(){return this.termList().forEach((e=>{e.text=e.text.toLowerCase()})),this},toUpperCase:function(){return this.termList().forEach((e=>{e.text=e.text.toUpperCase()})),this},toTitleCase:function(){return this.termList().forEach((e=>{e.text=e.text.replace(/^ *[a-z\u00C0-\u00FF]/,(e=>e.toUpperCase()))})),this},toCamelCase:function(){return this.docs.forEach((e=>{e.forEach(((t,n)=>{0!==n&&(t.text=t.text.replace(/^ *[a-z\u00C0-\u00FF]/,(e=>e.toUpperCase()))),n!==e.length-1&&(t.post="")}))})),this}},I,H,x,E,B,K,$),M={id:function(e){const t=e.docs;for(let e=0;e(e.implicit=e.text,e.machine=e.text,e.pre="",e.post="",e.text="",e.normal="",e.index=[a,r+t],e))),n[0]&&(n[0].pre=e[a][r].pre,n[n.length-1].post=e[a][r].post,n[0].text=e[a][r].text,n[0].normal=e[a][r].normal),e[a].splice(r,1,...n))},R=/'/,Q=new Set(["what","how","when","where","why"]),Z=new Set(["be","go","start","think","need"]),X=new Set(["been","gone"]),_=/'/,Y=/(e|é|aison|sion|tion)$/,ee=/(age|isme|acle|ege|oire)$/;var te=(e,t)=>["je",e[t].normal.split(_)[1]],ne=(e,t)=>{const n=e[t].normal.split(_)[1];return n&&n.endsWith("e")?["la",n]:["le",n]},ae=(e,t)=>{const n=e[t].normal.split(_)[1];return n&&Y.test(n)&&!ee.test(n)?["du",n]:n&&n.endsWith("s")?["des",n]:["de",n]};const re=/^([0-9.]{1,4}[a-z]{0,2}) ?[-–—] ?([0-9]{1,4}[a-z]{0,2})$/i,oe=/^([0-9]{1,2}(:[0-9][0-9])?(am|pm)?) ?[-–—] ?([0-9]{1,2}(:[0-9][0-9])?(am|pm)?)$/i,ie=/^[0-9]{3}-[0-9]{4}$/,se=function(e,t){const n=e[t];let a=n.text.match(re);return null!==a?!0===n.tags.has("PhoneNumber")||ie.test(n.text)?null:[a[1],"to",a[2]]:(a=n.text.match(oe),null!==a?[a[1],"to",a[4]]:null)},le=/^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/,ue=function(e,t,n){const a=n.model.one.numberSuffixes||{},r=e[t].text.match(le);if(null!==r){const e=r[2].toLowerCase().trim();return a.hasOwnProperty(e)?null:[r[1],e]}return null},ce=/'/,de=/^[0-9][^-–—]*[-–—].*?[0-9]/,he=function(e,t,n,a){const r=t.update();r.document=[e];let o=n+a;n>0&&(n-=1),e[o]&&(o+=1),r.ptrs=[[0,n,o]]},ge={t:(e,t)=>function(e,t){return"ain't"===e[t].normal||"aint"===e[t].normal?null:[e[t].normal.replace(/n't/,""),"not"]}(e,t),d:(e,t)=>function(e,t){const n=e[t].normal.split(R)[0];if(Q.has(n))return[n,"did"];if(e[t+1]){if(X.has(e[t+1].normal))return[n,"had"];if(Z.has(e[t+1].normal))return[n,"would"]}return null}(e,t)},me={j:(e,t)=>te(e,t),l:(e,t)=>ne(e,t),d:(e,t)=>ae(e,t)},pe=function(e,t,n,a){for(let r=0;r2)return o.out.concat(a)}return null},fe=function(e,t){const n=t.fromText(e.join(" "));return n.compute(["id","alias"]),n.docs[0]},be=function(e,t){for(let n=t+1;n<5&&e[n];n+=1)if("been"===e[n].normal)return["there","has"];return["there","is"]};var ye={contractions:e=>{const{world:t,document:n}=e,{model:a,methods:r}=t,o=a.one.contractions||[];n.forEach(((a,i)=>{for(let s=a.length-1;s>=0;s-=1){let l=null,u=null;if(!0===ce.test(a[s].normal)){const e=a[s].normal.split(ce);l=e[0],u=e[1]}let c=pe(o,a[s],l,u);!c&&ge.hasOwnProperty(u)&&(c=ge[u](a,s,t)),!c&&me.hasOwnProperty(l)&&(c=me[l](a,s)),"there"===l&&"s"===u&&(c=be(a,s)),c?(c=fe(c,e),q(n,[i,s],c),he(n[i],e,s,c.length)):de.test(a[s].normal)?(c=se(a,s),c&&(c=fe(c,e),q(n,[i,s],c),r.one.setTag(c,"NumberRange",t),c[2]&&c[2].tags.has("Time")&&r.one.setTag([c[0]],"Time",t,null,"time-range"),he(n[i],e,s,c.length))):(c=ue(a,s,t),c&&(c=fe(c,e),q(n,[i,s],c),r.one.setTag([c[1]],"Unit",t,null,"contraction-unit")))}}))}};const ve={model:U,compute:ye,hooks:["contractions"]},we=function(e){const t=e.world,{model:n,methods:a}=e.world,r=a.one.setTag,{frozenLex:o}=n.one,i=n.one._multiCache||{};e.docs.forEach((e=>{for(let n=0;nn;a-=1){const i=e.slice(n,a+1),s=i.map((e=>e.machine||e.normal)).join(" ");!0!==o.hasOwnProperty(s)||(r(i,o[s],t,!1,"1-frozen-multi-lexicon"),i.forEach((e=>e.frozen=!0)))}}void 0!==o[s]&&o.hasOwnProperty(s)&&(r([a],o[s],t,!1,"1-freeze-lexicon"),a.frozen=!0)}}))};const ke=e=>""+e+"",Pe=e=>""+e+"",Ae=function(e){e.docs.forEach((e=>{console.log(ke("\n ┌─────────")),e.forEach((e=>{let t=` ${Pe("│")} `;const n=e.implicit||e.text||"-";!0===e.frozen?t+=`${ke(n)} ❄️`:t+=Pe(n),console.log(t)}))}))};var Ce={compute:{frozen:we,freeze:we,unfreeze:function(e){return e.docs.forEach((e=>{e.forEach((e=>{delete e.frozen}))})),e}},mutate:e=>{const t=e.methods.one;t.termMethods.isFrozen=e=>!0===e.frozen,t.debug.freeze=Ae,t.debug.frozen=Ae},api:function(e){e.prototype.freeze=function(){return this.docs.forEach((e=>{e.forEach((e=>{e.frozen=!0}))})),this},e.prototype.unfreeze=function(){this.compute("unfreeze")},e.prototype.isFrozen=function(){return this.match("@isFrozen+")}},hooks:["freeze"]};const je=function(e,t,n){const{model:a,methods:r}=n,o=r.one.setTag,i=a.one._multiCache||{},{lexicon:s}=a.one||{},l=e[t],u=l.machine||l.normal;if(void 0!==i[u]&&e[t+1]){for(let a=t+i[u]-1;a>t;a-=1){const r=e.slice(t,a+1);if(r.length<=1)return!1;const i=r.map((e=>e.machine||e.normal)).join(" ");if(!0===s.hasOwnProperty(i)){const e=s[i];return o(r,e,n,!1,"1-multi-lexicon"),!e||2!==e.length||"PhrasalVerb"!==e[0]&&"PhrasalVerb"!==e[1]||o([r[1]],"Particle",n,!1,"1-phrasal-particle"),!0}}return!1}return null},Ne=/^(under|over|mis|re|un|dis|semi|pre|post)-?/,Ie=new Set(["Verb","Infinitive","PastTense","Gerund","PresentTense","Adjective","Participle"]),De=function(e,t,n){const{model:a,methods:r}=n,o=r.one.setTag,{lexicon:i}=a.one,s=e[t],l=s.machine||s.normal;if(void 0!==i[l]&&i.hasOwnProperty(l))return o([s],i[l],n,!1,"1-lexicon"),!0;if(s.alias){const e=s.alias.find((e=>i.hasOwnProperty(e)));if(e)return o([s],i[e],n,!1,"1-lexicon-alias"),!0}if(!0===Ne.test(l)){const e=l.replace(Ne,"");if(i.hasOwnProperty(e)&&e.length>3&&Ie.has(i[e]))return o([s],i[e],n,!1,"1-lexicon-prefix"),!0}return null};var He={lexicon:function(e){const t=e.world;e.docs.forEach((e=>{for(let n=0;n{const r=e[a],o=(a=(a=a.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);o.length>1&&(void 0===n[o[0]]||o.length>n[o[0]])&&(n[o[0]]=o.length),t[a]=t[a]||r})),delete t[""],delete t.null,delete t[" "],{lex:t,_multi:n}}}};var Ge={addWords:function(e,t=!1){const n=this.world(),{methods:a,model:r}=n;if(!e)return;if(Object.keys(e).forEach((t=>{"string"==typeof e[t]&&e[t].startsWith("#")&&(e[t]=e[t].replace(/^#/,""))})),!0===t){const{lex:t,_multi:o}=a.one.expandLexicon(e,n);return Object.assign(r.one._multiCache,o),void Object.assign(r.one.frozenLex,t)}if(a.two.expandLexicon){const{lex:t,_multi:o}=a.two.expandLexicon(e,n);Object.assign(r.one.lexicon,t),Object.assign(r.one._multiCache,o)}const{lex:o,_multi:i}=a.one.expandLexicon(e,n);Object.assign(r.one.lexicon,o),Object.assign(r.one._multiCache,i)}};var xe={model:{one:{lexicon:{},_multiCache:{},frozenLex:{}}},methods:Te,compute:He,lib:Ge,hooks:["lexicon"]};const Ee=function(e,t){const n=[{}],a=[null],r=[0],o=[];let i=0;e.forEach((function(e){let r=0;const o=function(e,t){const{methods:n,model:a}=t,r=n.one.tokenize.splitTerms(e,a).map((e=>n.one.tokenize.splitWhitespace(e,a)));return r.map((e=>e.text.toLowerCase()))}(e,t);for(let e=0;e0&&!n[i].hasOwnProperty(l);)i=r[i];if(n.hasOwnProperty(i)){const e=n[i][l];r[u]=e,a[e]&&(a[u]=a[u]||[],a[u]=a[u].concat(a[e]))}else r[u]=0}}return{goNext:n,endAs:a,failTo:r}},Fe=function(e,t,n){let a=0;const r=[];for(let o=0;o0&&(void 0===t.goNext[a]||!t.goNext[a].hasOwnProperty(i));)a=t.failTo[a]||0;if(t.goNext[a].hasOwnProperty(i)&&(a=t.goNext[a][i],t.endAs[a])){const n=t.endAs[a];for(let t=0;t{for(let n=e.length-1;n>=0;n-=1)if(e[n]!==t)return e=e.slice(0,n+1);return e},Ve={buildTrie:function(e){return function(e){return e.goNext=e.goNext.map((e=>{if(0!==Object.keys(e).length)return e})),e.goNext=ze(e.goNext,void 0),e.failTo=ze(e.failTo,0),e.endAs=ze(e.endAs,null),e}(Ee(e,this.world()))}};Ve.compile=Ve.buildTrie;var Be={api:function(e){e.prototype.lookup=function(e,t={}){if(!e)return this.none();"string"==typeof e&&(e=[e]);var n;let a=function(e,t,n){let a=[];n.form=n.form||"normal";const r=e.docs;if(!t.goNext||!t.goNext[0])return console.error("Compromise invalid lookup trie"),e.none();const o=Object.keys(t.goNext[0]);for(let i=0;i0&&(a=a.concat(l))}return e.update(a)}(this,(n=e,"[object Object]"===Object.prototype.toString.call(n)?e:Ee(e,this.world)),t);return a=a.settle(),a}},lib:Ve};const Se=function(e,t){return t?(e.forEach((e=>{const n=e[0];t[n]&&(e[0]=t[n][0],e[1]+=t[n][1],e[2]+=t[n][1])})),e):e},Ke=function(e,t){let{ptrs:n}=e;const{byGroup:a}=e;return n=Se(n,t),Object.keys(a).forEach((e=>{a[e]=Se(a[e],t)})),{ptrs:n,byGroup:a}},$e=function(e,t,n){const a=n.methods.one;return"number"==typeof e&&(e=String(e)),"string"==typeof e&&(e=a.killUnicode(e,n),e=a.parseMatch(e,t,n)),e},Le=e=>"[object Object]"===Object.prototype.toString.call(e),Me=e=>e&&Le(e)&&!0===e.isView,Je=e=>e&&Le(e)&&!0===e.isNet;var We={matchOne:function(e,t,n){const a=this.methods.one;if(Me(e))return this.intersection(e).eq(0);if(Je(e))return this.sweep(e,{tagger:!1,matchOne:!0}).view;const r={regs:e=$e(e,n,this.world),group:t,justOne:!0},o=a.match(this.docs,r,this._cache),{ptrs:i,byGroup:s}=Ke(o,this.fullPointer),l=this.toView(i);return l._groups=s,l},match:function(e,t,n){const a=this.methods.one;if(Me(e))return this.intersection(e);if(Je(e))return this.sweep(e,{tagger:!1}).view.settle();const r={regs:e=$e(e,n,this.world),group:t},o=a.match(this.docs,r,this._cache),{ptrs:i,byGroup:s}=Ke(o,this.fullPointer),l=this.toView(i);return l._groups=s,l},has:function(e,t,n){const a=this.methods.one;if(Me(e)){return this.intersection(e).fullPointer.length>0}if(Je(e))return this.sweep(e,{tagger:!1}).view.found;const r={regs:e=$e(e,n,this.world),group:t,justOne:!0};return a.match(this.docs,r,this._cache).ptrs.length>0},if:function(e,t,n){const a=this.methods.one;if(Me(e))return this.filter((t=>t.intersection(e).found));if(Je(e)){const t=this.sweep(e,{tagger:!1}).view.settle();return this.if(t)}const r={regs:e=$e(e,n,this.world),group:t,justOne:!0};let o=this.fullPointer;const i=this._cache||[];o=o.filter(((e,t)=>{const n=this.update([e]);return a.match(n.docs,r,i[t]).ptrs.length>0}));const s=this.update(o);return this._cache&&(s._cache=o.map((e=>i[e[0]]))),s},ifNo:function(e,t,n){const{methods:a}=this,r=a.one;if(Me(e))return this.filter((t=>!t.intersection(e).found));if(Je(e)){const t=this.sweep(e,{tagger:!1}).view.settle();return this.ifNo(t)}e=$e(e,n,this.world);const o=this._cache||[],i=this.filter(((n,a)=>{const i={regs:e,group:t,justOne:!0};return 0===r.match(n.docs,i,o[a]).ptrs.length}));return this._cache&&(i._cache=i.ptrs.map((e=>o[e[0]]))),i}};var Ue={before:function(e,t,n){const{indexN:a}=this.methods.one.pointer,r=[],o=a(this.fullPointer);Object.keys(o).forEach((e=>{const t=o[e].sort(((e,t)=>e[1]>t[1]?1:-1))[0];t[1]>0&&r.push([t[0],0,t[1]])}));const i=this.toView(r);return e?i.match(e,t,n):i},after:function(e,t,n){const{indexN:a}=this.methods.one.pointer,r=[],o=a(this.fullPointer),i=this.document;Object.keys(o).forEach((e=>{const t=o[e].sort(((e,t)=>e[1]>t[1]?-1:1))[0],[n,,a]=t;a{const o=n.before(e,t);if(o.found){const e=o.terms();a[r][1]-=e.length,a[r][3]=e.docs[0][0].id}})),this.update(a)},growRight:function(e,t,n){"string"==typeof e&&(e=this.world.methods.one.parseMatch(e,n,this.world)),e[0].start=!0;const a=this.fullPointer;return this.forEach(((n,r)=>{const o=n.after(e,t);if(o.found){const e=o.terms();a[r][2]+=e.length,a[r][4]=null}})),this.update(a)},grow:function(e,t,n){return this.growRight(e,t,n).growLeft(e,t,n)}};const qe=function(e,t){return[e[0],e[1],t[2]]},Re=(e,t,n)=>{return"string"==typeof e||(a=e,"[object Array]"===Object.prototype.toString.call(a))?t.match(e,n):e||t.none();var a},Qe=function(e,t){const[n,a,r]=e;return t.document[n]&&t.document[n][a]&&(e[3]=e[3]||t.document[n][a].id,t.document[n][r-1]&&(e[4]=e[4]||t.document[n][r-1].id)),e},Ze={splitOn:function(e,t){const{splitAll:n}=this.methods.one.pointer,a=Re(e,this,t).fullPointer,r=n(this.fullPointer,a);let o=[];return r.forEach((e=>{o.push(e.passthrough),o.push(e.before),o.push(e.match),o.push(e.after)})),o=o.filter((e=>e)),o=o.map((e=>Qe(e,this))),this.update(o)},splitBefore:function(e,t){const{splitAll:n}=this.methods.one.pointer,a=Re(e,this,t).fullPointer,r=n(this.fullPointer,a);for(let e=0;e{o.push(e.passthrough),o.push(e.before),e.match&&e.after?o.push(qe(e.match,e.after)):o.push(e.match)})),o=o.filter((e=>e)),o=o.map((e=>Qe(e,this))),this.update(o)},splitAfter:function(e,t){const{splitAll:n}=this.methods.one.pointer,a=Re(e,this,t).fullPointer,r=n(this.fullPointer,a);let o=[];return r.forEach((e=>{o.push(e.passthrough),e.before&&e.match?o.push(qe(e.before,e.match)):(o.push(e.before),o.push(e.match)),o.push(e.after)})),o=o.filter((e=>e)),o=o.map((e=>Qe(e,this))),this.update(o)}};Ze.split=Ze.splitAfter;const Xe=function(e,t){return!(!e||!t)&&(e[0]===t[0]&&e[2]===t[1])},_e=function(e,t,n){const a=e.world,r=a.methods.one.parseMatch;n=n||"^.";const o=r(t=t||".$",{},a),i=r(n,{},a);o[o.length-1].end=!0,i[0].start=!0;const s=e.fullPointer,l=[s[0]];for(let t=1;t)?\/.*?[^\\/]\/[?\]+*$~]*)(?:\s|$)/,nt=/([!~[^]*(?:<[^<]*>)?\([^)]+[^\\)]\)[?\]+*$~]*)(?:\s|$)/,at=/ /g,rt=e=>/^[![^]*(<[^<]*>)?\//.test(e)&&/\/[?\]+*$~]*$/.test(e),ot=function(e){return e=(e=e.map((e=>e.trim()))).filter((e=>e))},it=/\{([0-9]+)?(, *[0-9]*)?\}/,st=/&&/,lt=new RegExp(/^<\s*(\S+)\s*>/),ut=e=>e.charAt(0).toUpperCase()+e.substring(1),ct=e=>e.charAt(e.length-1),dt=e=>e.charAt(0),ht=e=>e.substring(1),gt=e=>e.substring(0,e.length-1),mt=function(e){return e=ht(e),e=gt(e)},pt=function(e,t){const n={};for(let a=0;a<2;a+=1){if("$"===ct(e)&&(n.end=!0,e=gt(e)),"^"===dt(e)&&(n.start=!0,e=ht(e)),"?"===ct(e)&&(n.optional=!0,e=gt(e)),("["===dt(e)||"]"===ct(e))&&(n.group=null,"["===dt(e)&&(n.groupStart=!0),"]"===ct(e)&&(n.groupEnd=!0),e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===dt(e))){const t=lt.exec(e);t.length>=2&&(n.group=t[1],e=e.replace(t[0],""))}if("+"===ct(e)&&(n.greedy=!0,e=gt(e)),"*"!==e&&"*"===ct(e)&&"\\*"!==e&&(n.greedy=!0,e=gt(e)),"!"===dt(e)&&(n.negative=!0,e=ht(e)),"~"===dt(e)&&"~"===ct(e)&&e.length>2&&(e=mt(e),n.fuzzy=!0,n.min=t.fuzzy||.85,!1===/\(/.test(e)))return n.word=e,n;if("/"===dt(e)&&"/"===ct(e))return e=mt(e),t.caseSensitive&&(n.use="text"),n.regex=new RegExp(e),n;if(!0===it.test(e)&&(e=e.replace(it,((e,t,a)=>(void 0===a?(n.min=Number(t),n.max=Number(t)):(a=a.replace(/, */,""),void 0===t?(n.min=0,n.max=Number(a)):(n.min=Number(t),n.max=Number(a||999))),n.greedy=!0,n.min||(n.optional=!0),"")))),"("===dt(e)&&")"===ct(e)){st.test(e)?(n.choices=e.split(st),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=ht(n.choices[0]);const a=n.choices.length-1;n.choices[a]=gt(n.choices[a]),n.choices=n.choices.map((e=>e.trim())),n.choices=n.choices.filter((e=>e)),n.choices=n.choices.map((e=>e.split(/ /g).map((e=>pt(e,t))))),e=""}if("{"===dt(e)&&"}"===ct(e)){if(e=mt(e),n.root=e,/\//.test(e)){const e=n.root.split(/\//);n.root=e[0],n.pos=e[1],"adj"===n.pos&&(n.pos="Adjective"),n.pos=n.pos.charAt(0).toUpperCase()+n.pos.substr(1).toLowerCase(),void 0!==e[2]&&(n.sense=e[2])}return n}if("<"===dt(e)&&">"===ct(e))return e=mt(e),n.chunk=ut(e),n.greedy=!0,n;if("%"===dt(e)&&"%"===ct(e))return e=mt(e),n.switch=e,n}return"#"===dt(e)?(n.tag=ht(e),n.tag=ut(n.tag),n):"@"===dt(e)?(n.method=ht(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),t.caseSensitive?n.use="text":e=e.toLowerCase(),n.word=e),n)},ft=/[a-z0-9][-–—][a-z]/i,bt=function(e,t){const{all:n}=t.methods.two.transform.verb||{},a=e.root;return n?n(a,t.model):[]},yt=function(e,t){const{all:n}=t.methods.two.transform.noun||{};return n?n(e.root,t.model):[e.root]},vt=function(e,t){const{all:n}=t.methods.two.transform.adjective||{};return n?n(e.root,t.model):[e.root]},wt=function(e){return e=function(e){let t=0,n=null;for(let a=0;a(e.fuzzy&&e.choices&&e.choices.forEach((t=>{1===t.length&&t[0].word&&(t[0].fuzzy=!0,t[0].min=e.min)})),e)))}(e=e.map((e=>{if(void 0!==e.choices){if("or"!==e.operator)return e;if(!0===e.fuzzy)return e;!0===e.choices.every((e=>{if(1!==e.length)return!1;const t=e[0];return!0!==t.fuzzy&&!t.start&&!t.end&&void 0!==t.word&&!0!==t.negative&&!0!==t.optional&&!0!==t.method}))&&(e.fastOr=new Set,e.choices.forEach((t=>{e.fastOr.add(t[0].word)})),delete e.choices)}return e}))),e},kt=function(e,t){for(const n of t)if(e.has(n))return!0;return!1},Pt=function(e,t){for(let n=0;nn?a:n)+1;if(Math.abs(n-a)>(r||100))return r||100;const o=[];for(let e=0;e4)return n;l=t[i-1],u=s===l?0:1,c=o[r-1][i]+1,(d=o[r][i-1]+1)1&&i>1&&s===t[i-2]&&e[r-2]===l&&(d=o[r-2][i-2]+u)-1!==e.post.indexOf(t),Ht={hasQuote:e=>Ct.test(e.pre)||jt.test(e.post),hasComma:e=>Dt(e,","),hasPeriod:e=>!0===Dt(e,".")&&!1===Dt(e,"..."),hasExclamation:e=>Dt(e,"!"),hasQuestionMark:e=>Dt(e,"?")||Dt(e,"¿"),hasEllipses:e=>Dt(e,"..")||Dt(e,"…"),hasSemicolon:e=>Dt(e,";"),hasColon:e=>Dt(e,":"),hasSlash:e=>/\//.test(e.text),hasHyphen:e=>Nt.test(e.post)||Nt.test(e.pre),hasDash:e=>It.test(e.post)||It.test(e.pre),hasContraction:e=>Boolean(e.implicit),isAcronym:e=>e.tags.has("Acronym"),isKnown:e=>e.tags.size>0,isTitleCase:e=>/^\p{Lu}[a-z'\u00C0-\u00FF]/u.test(e.text),isUpperCase:e=>/^\p{Lu}+$/u.test(e.text)};Ht.hasQuotation=Ht.hasQuote;let Tt=function(){};Tt=function(e,t,n,a){const r=function(e,t,n,a){if(!0===t.anything)return!0;if(!0===t.start&&0!==n)return!1;if(!0===t.end&&n!==a-1)return!1;if(void 0!==t.id&&t.id===e.id)return!0;if(void 0!==t.word){if(t.use)return t.word===e[t.use];if(null!==e.machine&&e.machine===t.word)return!0;if(void 0!==e.alias&&e.alias.hasOwnProperty(t.word))return!0;if(!0===t.fuzzy){if(t.word===e.root)return!0;if(At(t.word,e.normal)>=t.min)return!0}return!(!e.alias||!e.alias.some((e=>e===t.word)))||t.word===e.text||t.word===e.normal}if(void 0!==t.tag)return!0===e.tags.has(t.tag);if(void 0!==t.method)return"function"==typeof Ht[t.method]&&!0===Ht[t.method](e);if(void 0!==t.pre)return e.pre&&e.pre.includes(t.pre);if(void 0!==t.post)return e.post&&e.post.includes(t.post);if(void 0!==t.regex){let n=e.normal;return t.use&&(n=e[t.use]),t.regex.test(n)}if(void 0!==t.chunk)return e.chunk===t.chunk;if(void 0!==t.switch)return e.switch===t.switch;if(void 0!==t.machine)return e.normal===t.machine||e.machine===t.machine||e.root===t.machine;if(void 0!==t.sense)return e.sense===t.sense;if(void 0!==t.fastOr){if(t.pos&&!e.tags.has(t.pos))return null;const n=e.root||e.implicit||e.machine||e.normal;return t.fastOr.has(n)||t.fastOr.has(e.text)}return void 0!==t.choices&&("and"===t.operator?t.choices.every((t=>Tt(e,t,n,a))):t.choices.some((t=>Tt(e,t,n,a))))}(e,t,n,a);return!0===t.negative?!r:r};const Gt=function(e,t){if(!0===e.end&&!0===e.greedy&&t.start_i+t.tn.max)return e.t=e.t+n.max,!0;if(!0===e.hasGroup){xt(e,e.t).length=a-e.t}return e.t=a,!0},Ft=function(e,t=0){const n=e.regs[e.r];let a=!1;for(let o=0;o{let r=0;const o=e.t+a+t+r;if(void 0===e.terms[o])return!1;const i=Tt(e.terms[o],n,o+e.start_i,e.phrase_length);if(!0===i&&!0===n.greedy)for(let t=1;t{const a=n.every(((t,n)=>{const a=e.t+n;return void 0!==e.terms[a]&&Tt(e.terms[a],t,a,e.phrase_length)}));return!0===a&&n.length>t&&(t=n.length),a}))&&t}(e);if(a){if(!0===n.negative)return null;if(!0===e.hasGroup){xt(e,e.t).length+=a}if(!0===n.end){const t=e.phrase_length-1;if(e.t+e.start_i!==t)return null}return e.t+=a,!0}return!!n.optional||null},Vt=function(e){const{regs:t}=e,n=t[e.r],a=Object.assign({},n);a.negative=!1;if(Tt(e.terms[e.t],a,e.start_i+e.t,e.phrase_length))return!1;if(n.optional){const n=t[e.r+1];if(n){if(Tt(e.terms[e.t],n,e.start_i+e.t,e.phrase_length))e.r+=1;else if(n.optional&&t[e.r+2]){Tt(e.terms[e.t],t[e.r+2],e.start_i+e.t,e.phrase_length)&&(e.r+=2)}}}return n.greedy?function(e,t,n){let a=0;for(let r=e.t;ra||(e.t+=a,0))}(e,a,t[e.r+1]):(e.t+=1,!0)},Bt=function(e){const{regs:t,phrase_length:n}=e,a=t[e.r];return e.t=function(e,t){const n=Object.assign({},e.regs[e.r],{start:!1,end:!1}),a=e.t;for(;e.te.t?null:!0!==a.end||e.start_i+e.t===n||null},St=function(e){const{regs:t}=e,n=t[e.r],a=e.terms[e.t],r=e.t;if(n.optional&&t[e.r+1]&&n.negative)return!0;if(n.optional&&t[e.r+1]&&function(e){const{regs:t}=e,n=t[e.r],a=e.terms[e.t],r=Tt(a,t[e.r+1],e.start_i+e.t,e.phrase_length);if(n.negative||r){const n=e.terms[e.t+1];n&&Tt(n,t[e.r+1],e.start_i+e.t,e.phrase_length)||(e.r+=1)}}(e),a.implicit&&e.terms[e.t+1]&&function(e){const t=e.terms[e.t],n=e.regs[e.r];if(t.implicit&&e.terms[e.t+1]){if(!e.terms[e.t+1].implicit)return;n.word===t.normal&&(e.t+=1),"hasContraction"===n.method&&(e.t+=1)}}(e),e.t+=1,!0===n.end&&e.t!==e.terms.length&&!0!==n.greedy)return null;if(!0===n.greedy){if(!Bt(e))return null}return!0===e.hasGroup&&function(e,t){const n=e.regs[e.r],a=xt(e,t);e.t>1&&n.greedy?a.length+=e.t-t:a.length++}(e,r),!0},Kt=function(e,t,n,a){if(0===e.length||0===t.length)return null;const r={t:0,terms:e,r:0,regs:t,groups:{},start_i:n,phrase_length:a,inGroup:null};for(;r.r!e.optional)))break;return null}if(!0===e.anything&&!0===e.greedy){if(!Et(r))return null;continue}if(void 0!==e.choices&&"or"===e.operator){if(!Ot(r))return null;continue}if(void 0!==e.choices&&"and"===e.operator){if(!zt(r))return null;continue}if(!0===e.anything){if(e.negative&&e.anything)return null;if(!St(r))return null;continue}if(!0===Gt(e,r)){if(!St(r))return null;continue}if(e.negative){if(!Vt(r))return null;continue}if(!0!==Tt(r.terms[r.t],e,r.start_i+r.t,r.phrase_length)){if(!0!==e.optional)return null}else{if(!St(r))return null}}const o=[null,n,r.t+n];if(o[1]===o[2])return null;const i={};return Object.keys(r.groups).forEach((e=>{const t=r.groups[e],a=n+t.start;i[e]=[null,a,a+t.length]})),{pointer:o,groups:i}},$t=function(e,t){return e.pointer[0]=t,Object.keys(e.groups).forEach((n=>{e.groups[n][0]=t})),e},Lt=function(e,t,n){let a=Kt(e,t,0,e.length);return a?(a=$t(a,n),a):null},Mt={one:{termMethods:Ht,parseMatch:function(e,t,n){if(null==e||""===e)return[];t=t||{},"number"==typeof e&&(e=String(e));let a=function(e){const t=e.split(tt);let n=[];t.forEach((e=>{rt(e)?n.push(e):n=n.concat(e.split(nt))})),n=ot(n);let a=[];return n.forEach((e=>{(e=>/^[![^]*(<[^<]*>)?\(/.test(e)&&/\)[?\]+*$~]*$/.test(e))(e)||rt(e)?a.push(e):a=a.concat(e.split(at))})),a=ot(a),a}(e);return a=a.map((e=>pt(e,t))),a=function(e,t){const n=t.model.one.prefixes;for(let t=e.length-1;t>=0;t-=1){const a=e[t];if(a.word&&ft.test(a.word)){let r=a.word.split(/[-–—]/g);if(n.hasOwnProperty(r[0]))continue;r=r.filter((e=>e)).reverse(),e.splice(t,1),r.forEach((n=>{const r=Object.assign({},a);r.word=n,e.splice(t,0,r)}))}}return e}(a,n),a=function(e,t){return e.map((e=>{if(e.root)if(t.methods.two&&t.methods.two.transform){let n=[];e.pos?"Verb"===e.pos?n=n.concat(bt(e,t)):"Noun"===e.pos?n=n.concat(yt(e,t)):"Adjective"===e.pos&&(n=n.concat(vt(e,t))):(n=n.concat(bt(e,t)),n=n.concat(yt(e,t)),n=n.concat(vt(e,t))),n=n.filter((e=>e)),n.length>0&&(e.operator="or",e.fastOr=new Set(n))}else e.machine=e.root,delete e.id,delete e.root;return e}))}(a,n),a=wt(a),a},match:function(e,t,n){n=n||[];const{regs:a,group:r,justOne:o}=t;let i=[];if(!a||0===a.length)return{ptrs:[],byGroup:{}};const s=a.filter((e=>!0!==e.optional&&!0!==e.negative)).length;e:for(let t=0;te&&(e=Math.abs(n-1))}}else{const e=Lt(r,a,t);e&&i.push(e)}}return!0===a[a.length-1].end&&(i=i.filter((t=>{const n=t.pointer[0];return e[n].length===t.pointer[2]}))),t.notIf&&(i=function(e,t,n){return e=e.filter((e=>{const[a,r,o]=e.pointer,i=n[a].slice(r,o);for(let e=0;e{e.groups[t]&&n.push(e.groups[t])})):e.forEach((e=>{n.push(e.pointer),Object.keys(e.groups).forEach((t=>{a[t]=a[t]||[],a[t].push(e.groups[t])}))}))),{ptrs:n,byGroup:a}}(i,r),i.ptrs.forEach((t=>{const[n,a,r]=t;t[3]=e[n][a].id,t[4]=e[n][r-1].id})),i}}};var Jt={api:function(e){Object.assign(e.prototype,et)},methods:Mt,lib:{parseMatch:function(e,t){const n=this.world(),a=n.methods.one.killUnicode;return a&&(e=a(e,n)),n.methods.one.parseMatch(e,t,n)}}};const Wt=/^\../,Ut=/^#./,qt=function(e,t){const n={},a={};return Object.keys(t).forEach((r=>{let o=t[r];const i=function(e){let t="",n="";return e=e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),Wt.test(e)?t=``),t+=">",{start:t,end:n}}(r);"string"==typeof o&&(o=e.match(o)),o.docs.forEach((e=>{if(e.every((e=>e.implicit)))return;const t=e[0].id;n[t]=n[t]||[],n[t].push(i.start);const r=e[e.length-1].id;a[r]=a[r]||[],a[r].push(i.end)}))})),{starts:n,ends:a}};var Rt={html:function(e){const{starts:t,ends:n}=qt(this,e);let a="";return this.docs.forEach((e=>{for(let r=0;r{let n=e.pre||"",r=e.post||"";"some"===t.punctuation&&(n=n.replace(Zt,""),_t.test(r)&&(r=" "),r=r.replace(Xt,""),r=r.replace(/\?!+/,"?"),r=r.replace(/!+/,"!"),r=r.replace(/\?+/,"?"),r=r.replace(/\.{2,}/,""),e.tags.has("Abbreviation")&&(r=r.replace(/\./,""))),"some"===t.whitespace&&(n=n.replace(/\s/,""),r=r.replace(/\s+/," ")),t.keepPunct||(n=n.replace(Zt,""),r="-"===r?" ":r.replace(Qt,""));let o=e[t.form||"text"]||e.normal||"";"implicit"===t.form&&(o=e.implicit||e.text),"root"===t.form&&e.implicit&&(o=e.root||e.implicit||e.normal),"machine"!==t.form&&"implicit"!==t.form&&"root"!==t.form||!e.implicit||r&&Yt.test(r)||(r+=" "),a+=n+o+r})),!1===n&&(a=a.trim()),!0===t.lowerCase&&(a=a.toLowerCase()),a},tn={text:{form:"text"},normal:{whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"normal"},machine:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"none",unicode:"some",form:"machine"},root:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"root"},implicit:{form:"implicit"}};tn.clean=tn.normal,tn.reduced=tn.root;const nn=[];let an=0;for(;an<64;)nn[an]=0|4294967296*Math.sin(++an%Math.PI);const rn=function(e){let t,n,a,r=decodeURI(encodeURI(e))+"€",o=r.length;const i=[t=1732584193,n=4023233417,~t,~n],s=[];for(e=--o/4+2|15,s[--e]=8*o;~o;)s[o>>2]|=r.charCodeAt(o)<<8*o--;for(an=r=0;an>4]+nn[r]+~~s[an|15&[r,5*r+1,3*r+5,7*r][o]])<<(o=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*o+r++%4])|a>>>-o),t,n])t=0|o[1],n=o[2];for(r=4;r;)i[--r]+=o[r]}for(e="";r<32;)e+=(i[r>>3]>>4*(1^r++)&15).toString(16);return e},on={text:!0,terms:!0},sn={case:"none",unicode:"some",form:"machine",punctuation:"some"},ln=function(e,t){return Object.assign({},e,t)},un={text:e=>en(e,{keepPunct:!0},!1),normal:e=>en(e,ln(tn.normal,{keepPunct:!0}),!1),implicit:e=>en(e,ln(tn.implicit,{keepPunct:!0}),!1),machine:e=>en(e,sn,!1),root:e=>en(e,ln(sn,{form:"root"}),!1),hash:e=>rn(en(e,{keepPunct:!0},!1)),offset:e=>{const t=un.text(e).length;return{index:e[0].offset.index,start:e[0].offset.start,length:t}},terms:e=>e.map((e=>{const t=Object.assign({},e);return t.tags=Array.from(e.tags),t})),confidence:(e,t,n)=>t.eq(n).confidence(),syllables:(e,t,n)=>t.eq(n).syllables(),sentence:(e,t,n)=>t.eq(n).fullSentence().text(),dirty:e=>e.some((e=>!0===e.dirty))};un.sentences=un.sentence,un.clean=un.normal,un.reduced=un.root;const cn={json:function(e){const t=(n=this,"string"==typeof(a=(a=e)||{})&&(a={}),(a=Object.assign({},on,a)).offset&&n.compute("offset"),n.docs.map(((e,t)=>{const r={};return Object.keys(a).forEach((o=>{a[o]&&un[o]&&(r[o]=un[o](e,n,t))})),r})));var n,a;return"number"==typeof e?t[e]:t}};cn.data=cn.json;const dn=function(e){const t=e.pre||"",n=e.post||"";return t+e.text+n},hn=function(e,t){const n=function(e,t){const n={};return Object.keys(t).forEach((a=>{e.match(a).fullPointer.forEach((e=>{n[e[3]]={fn:t[a],end:e[2]}}))})),n}(e,t);let a="";return e.docs.forEach(((t,r)=>{for(let o=0;oe.reduce(((e,t)=>e+t.pre+t.text+t.post),"").trim()));return e.filter((e=>e))}if("freq"===e||"frequency"===e||"topk"===e)return function(e){const t={};e.forEach((e=>{t[e]=t[e]||0,t[e]+=1}));const n=Object.keys(t).map((e=>({normal:e,count:t[e]})));return n.sort(((e,t)=>e.count>t.count?-1:0))}(this.json({normal:!0}).map((e=>e.normal)));if("terms"===e){let e=[];return this.docs.forEach((t=>{let n=t.map((e=>e.text));n=n.filter((e=>e)),e=e.concat(n)})),e}return"tags"===e?this.docs.map((e=>e.reduce(((e,t)=>(e[t.implicit||t.normal]=Array.from(t.tags),e)),{}))):"debug"===e?this.debug():this.text()},wrap:function(e){return hn(this,e)}};var mn={text:function(e){let t={};var n;if(e&&"string"==typeof e&&tn.hasOwnProperty(e)?t=Object.assign({},tn[e]):e&&(n=e,"[object Object]"===Object.prototype.toString.call(n))&&(t=Object.assign({},e)),void 0!==t.keepSpace||this.isFull()||(t.keepSpace=!1),void 0===t.keepEndPunct&&this.pointer){const e=this.pointer[0];e&&e[1]?t.keepEndPunct=!1:t.keepEndPunct=!0}return void 0===t.keepPunct&&(t.keepPunct=!0),void 0===t.keepSpace&&(t.keepSpace=!0),function(e,t){let n="";if(!e||!e[0]||!e[0][0])return n;for(let a=0;a""+e+fn,red:e=>""+e+fn,blue:e=>""+e+fn,magenta:e=>""+e+fn,cyan:e=>""+e+fn,yellow:e=>""+e+fn,black:e=>""+e+fn,dim:e=>""+e+fn,i:e=>""+e+fn},yn={tags:function(e){const{docs:t,model:n}=e;0===t.length&&console.log(bn.blue("\n ──────")),t.forEach((t=>{console.log(bn.blue("\n ┌─────────")),t.forEach((t=>{const a=[...t.tags||[]];let r=t.text||"-";t.sense&&(r=`{${t.normal}/${t.sense}}`),t.implicit&&(r="["+t.implicit+"]"),r=bn.yellow(r);let o="'"+r+"'";if(t.reference){const n=e.update([t.reference]).text("normal");o+=` - ${bn.dim(bn.i("["+n+"]"))}`}o=o.padEnd(18);const i=bn.blue(" │ ")+bn.i(o)+" - "+function(e,t){return t.one.tagSet&&(e=e.map((e=>{if(!t.one.tagSet.hasOwnProperty(e))return e;const n=t.one.tagSet[e].color||"blue";return bn[n](e)}))),e.join(", ")}(a,n);console.log(i)}))})),console.log("\n")},clientSide:function(e){console.log("%c -=-=- ","background-color:#6699cc;"),e.forEach((e=>{console.groupCollapsed(e.text());const t=e.docs[0].map((e=>{let t=e.text||"-";e.implicit&&(t="["+e.implicit+"]");return{text:t,tags:"["+Array.from(e.tags).join(", ")+"]"}}));console.table(t,["text","tags"]),console.groupEnd()}))},chunks:function(e){const{docs:t}=e;console.log(""),t.forEach((e=>{const t=[];e.forEach((e=>{"Noun"===e.chunk?t.push(bn.blue(e.implicit||e.normal)):"Verb"===e.chunk?t.push(bn.green(e.implicit||e.normal)):"Adjective"===e.chunk?t.push(bn.yellow(e.implicit||e.normal)):"Pivot"===e.chunk?t.push(bn.red(e.implicit||e.normal)):t.push(e.implicit||e.normal)})),console.log(t.join(" "),"\n")})),console.log("\n")},highlight:function(e){if(!e.found)return;const t={};e.fullPointer.forEach((e=>{t[e[0]]=t[e[0]]||[],t[e[0]].push(e)})),Object.keys(t).forEach((n=>{let a=e.update([[Number(n)]]).text();e.update(t[n]).json({offset:!0}).forEach(((e,t)=>{a=function(e,t,n){const a=((e,t,n)=>{const a=9*n,r=t.start+a,o=r+t.length;return[e.substring(0,r),e.substring(r,o),e.substring(o,e.length)]})(e,t,n);return`${a[0]}${bn.blue(a[1])}${a[2]}`}(a,e.offset,t)})),console.log(a)})),console.log("\n")}};var vn={api:function(e){Object.assign(e.prototype,pn)},methods:{one:{hash:rn,debug:yn}}};const wn=function(e,t){if(e[0]!==t[0])return!1;const[,n,a]=e,[,r,o]=t;return n<=r&&a>r||r<=n&&o>n},kn=function(e){const t={};return e.forEach((e=>{t[e[0]]=t[e[0]]||[],t[e[0]].push(e)})),t},Pn=function(e,t){const n=kn(t),a=[];return e.forEach((e=>{const[t]=e;let r=n[t]||[];if(r=r.filter((t=>function(e,t){return e[1]<=t[1]&&t[2]<=e[2]}(e,t))),0===r.length)return void a.push({passthrough:e});r=r.sort(((e,t)=>e[1]-t[1]));let o=e;r.forEach(((e,t)=>{const n=function(e,t){const[n,a]=e,r=t[1],o=t[2],i={};if(ao&&(i.after=[n,o,e[2]]),i}(o,e);r[t+1]?(a.push({before:n.before,match:n.match}),n.after&&(o=n.after)):a.push(n)}))})),a};var An={one:{termList:function(e){const t=[];for(let n=0;n{if(!a)return;let[o,i,s,l,u]=a,c=t[o]||[];if(void 0===i&&(i=0),void 0===s&&(s=c.length),!l||c[i]&&c[i].id===l)c=c.slice(i,s);else{const n=function(e,t,n){for(let a=0;a<20;a+=1){if(t[n-a]){const r=t[n-a].findIndex((t=>t.id===e));if(-1!==r)return[n-a,r]}if(t[n+a]){const r=t[n+a].findIndex((t=>t.id===e));if(-1!==r)return[n+a,r]}}return null}(l,t,o);if(null!==n){const a=s-i;c=t[n[0]].slice(n[1],n[1]+a);const o=c[0]?c[0].id:null;e[r]=[n[0],n[1],n[1]+a,o]}}0!==c.length&&i!==s&&(u&&c[c.length-1].id!==u&&(c=function(e,t){const[n,a,,,r]=e,o=t[n],i=o.findIndex((e=>e.id===r));return-1===i?(e[2]=t[n].length,e[4]=o.length?o[o.length-1].id:null):e[2]=i,t[n].slice(a,e[2]+1)}(a,t)),n.push(c))})),n=n.filter((e=>e.length>0)),n},pointer:{indexN:kn,splitAll:Pn}}};const Cn=function(e,t){const n=e.concat(t),a=kn(n);let r=[];return n.forEach((e=>{const[t]=e;if(1===a[t].length)return void r.push(e);const n=a[t].filter((t=>wn(e,t)));n.push(e);const o=function(e){let t=e[0][1],n=e[0][2];return e.forEach((e=>{e[1]n&&(n=e[2])})),[e[0][0],t,n]}(n);r.push(o)})),r=function(e){const t={};for(let n=0;n{e.passthrough&&n.push(e.passthrough),e.before&&n.push(e.before),e.after&&n.push(e.after)})),n},Nn=(e,t)=>{return"string"==typeof e||(n=e,"[object Array]"===Object.prototype.toString.call(n))?t.match(e):e||t.none();var n},In=function(e,t){return e.map((e=>{const[n,a]=e;return t[n]&&t[n][a]&&(e[3]=t[n][a].id),e}))},Dn={union:function(e){e=Nn(e,this);let t=Cn(this.fullPointer,e.fullPointer);return t=In(t,this.document),this.toView(t)}};Dn.and=Dn.union,Dn.intersection=function(e){e=Nn(e,this);let t=function(e,t){const n=kn(t),a=[];return e.forEach((e=>{let t=n[e[0]]||[];t=t.filter((t=>wn(e,t))),0!==t.length&&t.forEach((t=>{const n=function(e,t){const n=e[1]t[2]?t[2]:e[2];return n{e=Cn(e,[t])})),e=In(e,this.document),this.update(e)};var Hn={methods:An,api:function(e){Object.assign(e.prototype,Dn)}};const Tn=function(e){return!0===e.optional||!0===e.negative?null:e.tag?"#"+e.tag:e.word?e.word:e.switch?`%${e.switch}%`:null},Gn=function(e,t){const n=t.methods.one.parseMatch;return e.forEach((e=>{e.regs=n(e.match,{},t),"string"==typeof e.ifNo&&(e.ifNo=[e.ifNo]),e.notIf&&(e.notIf=n(e.notIf,{},t)),e.needs=function(e){const t=[];return e.forEach((e=>{t.push(Tn(e)),"and"===e.operator&&e.choices&&e.choices.forEach((e=>{e.forEach((e=>{t.push(Tn(e))}))}))})),t.filter((e=>e))}(e.regs);const{wants:a,count:r}=function(e){const t=[];let n=0;return e.forEach((e=>{"or"!==e.operator||e.optional||e.negative||(e.fastOr&&Array.from(e.fastOr).forEach((e=>{t.push(e)})),e.choices&&e.choices.forEach((e=>{e.forEach((e=>{const n=Tn(e);n&&t.push(n)}))})),n+=1)})),{wants:t,count:n}}(e.regs);e.wants=a,e.minWant=r,e.minWords=e.regs.filter((e=>!e.optional)).length})),e};var xn={buildNet:function(e,t){e=Gn(e,t);const n={};e.forEach((e=>{e.needs.forEach((t=>{n[t]=Array.isArray(n[t])?n[t]:[],n[t].push(e)})),e.wants.forEach((t=>{n[t]=Array.isArray(n[t])?n[t]:[],n[t].push(e)}))})),Object.keys(n).forEach((e=>{const t={};n[e]=n[e].filter((e=>"boolean"!=typeof t[e.match]&&(t[e.match]=!0,!0)))}));const a=e.filter((e=>0===e.needs.length&&0===e.wants.length));return{hooks:n,always:a}},bulkMatch:function(e,t,n,a={}){const r=n.one.cacheDoc(e);let o=function(e,t){return e.map(((n,a)=>{let r=[];Object.keys(t).forEach((n=>{e[a].has(n)&&(r=r.concat(t[n]))}));const o={};return r=r.filter((e=>"boolean"!=typeof o[e.match]&&(o[e.match]=!0,!0))),r}))}(r,t.hooks);o=function(e,t){return e.map(((e,n)=>{const a=t[n];return(e=(e=e.filter((e=>e.needs.every((e=>a.has(e)))))).filter((e=>void 0===e.ifNo||!0!==e.ifNo.some((e=>a.has(e)))))).filter((e=>0===e.wants.length||e.wants.filter((e=>a.has(e))).length>=e.minWant))}))}(o,r),t.always.length>0&&(o=o.map((e=>e.concat(t.always)))),o=function(e,t){return e.map(((e,n)=>{const a=t[n].length;return e=e.filter((e=>a>=e.minWords)),e}))}(o,e);const i=function(e,t,n,a,r){const o=[];for(let n=0;n0&&(l.ptrs.forEach((e=>{e[0]=n;const t=Object.assign({},s,{pointer:e});void 0!==s.unTag&&(t.unTag=s.unTag),o.push(t)})),!0===r.matchOne))return[o[0]]}return o}(o,e,0,n,a);return i},bulkTagger:function(e,t,n){const{model:a,methods:r}=n,{getDoc:o,setTag:i,unTag:s}=r.one,l=r.two.looksPlural;if(0===e.length)return e;return("undefined"!=typeof process&&process.env?process.env:self.env||{}).DEBUG_TAGS&&console.log(`\n\n → ${e.length} post-tagger:`),e.map((e=>{if(!e.tag&&!e.chunk&&!e.unTag)return;const r=e.reason||e.match,u=o([e.pointer],t)[0];if(!0===e.safe){if(!1===function(e,t,n){const a=n.one.tagSet;if(!a.hasOwnProperty(t))return!0;const r=a[t].not||[];for(let t=0;te.frozen=!0))}void 0!==e.unTag&&s(u,e.unTag,n,e.safe,r),e.chunk&&u.forEach((t=>t.chunk=e.chunk))}))}},En={lib:{buildNet:function(e){const t=this.methods().one.buildNet(e,this.world());return t.isNet=!0,t}},api:function(e){e.prototype.sweep=function(e,t={}){const{world:n,docs:a}=this,{methods:r}=n;let o=r.one.bulkMatch(a,e,this.methods,t);!1!==t.tagger&&r.one.bulkTagger(o,a,this.world),o=o.map((e=>{const t=e.pointer,n=a[t[0]][t[1]],r=t[2]-t[1];return n.index&&(e.pointer=[n.index[0],n.index[1],t[1]+r]),e}));const i=o.map((e=>e.pointer));return o=o.map((e=>(e.view=this.update([e.pointer]),delete e.regs,delete e.needs,delete e.pointer,delete e._expanded,e))),{view:this.update(i),found:o}}},methods:{one:xn}};const Fn=/ /,On=function(e,t){"Noun"===t&&(e.chunk=t),"Verb"===t&&(e.chunk=t)},zn=function(e,t,n,a){if(!0===e.tags.has(t))return null;if("."===t)return null;!0===e.frozen&&(a=!0);const r=n[t];if(r){if(r.not&&r.not.length>0)for(let t=0;t0)for(let t=0;t{const a=e.map((e=>e.text||"["+e.implicit+"]")).join(" ");var r;"string"!=typeof t&&t.length>2&&(t=t.slice(0,2).join(", #")+" +"),t="string"!=typeof t?t.join(", #"):t,console.log(` ${(r=a,""+r+"").padEnd(24)} → #${t.padEnd(22)} ${(e=>""+e+"")(n)}`)})(e,t,r),!0!=(s=t,"[object Array]"===Object.prototype.toString.call(s)))if("string"==typeof t)if(t=t.trim(),Fn.test(t))!function(e,t,n,a){const r=t.split(Fn);e.forEach(((e,t)=>{let o=r[t];o&&(o=o.replace(/^#/,""),zn(e,o,n,a))}))}(e,t,o,a);else{t=t.replace(/^#/,"");for(let n=0;nVn(e,t,n,a)))},Bn=function(e){return e.children=e.children||[],e._cache=e._cache||{},e.props=e.props||{},e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],e},Sn=/^ *(#|\/\/)/,Kn=function(e){let t=e.trim().split(/->/),n=[];t.forEach((e=>{n=n.concat(function(e){if(!(e=e.trim()))return null;if(/^\[/.test(e)&&/\]$/.test(e)){let t=(e=(e=e.replace(/^\[/,"")).replace(/\]$/,"")).split(/,/);return t=t.map((e=>e.trim())).filter((e=>e)),t=t.map((e=>Bn({id:e}))),t}return[Bn({id:e})]}(e))})),n=n.filter((e=>e));let a=n[0];for(let e=1;e{let n=[],a=[e];for(;a.length>0;){let e=a.pop();n.push(e),e.children&&e.children.forEach((n=>{t&&t(e,n),a.push(n)}))}return n},Ln=e=>"[object Array]"===Object.prototype.toString.call(e),Mn=e=>(e=e||"").trim(),Jn=function(e=[]){return"string"==typeof e?function(e){let t=e.split(/\r?\n/),n=[];t.forEach((e=>{if(!e.trim()||Sn.test(e))return;let t=(e=>{const t=/^( {2}|\t)/;let n=0;for(;t.test(e);)e=e.replace(t,""),n+=1;return n})(e);n.push({indent:t,node:Kn(e)})}));let a=function(e){let t={children:[]};return e.forEach(((n,a)=>{0===n.indent?t.children=t.children.concat(n.node):e[a-1]&&function(e,t){let n=e[t].indent;for(;t>=0;t-=1)if(e[t].indent{t[e.id]=e}));let n=Bn({});return e.forEach((e=>{if((e=Bn(e)).parent)if(t.hasOwnProperty(e.parent)){let n=t[e.parent];delete e.parent,n.children.push(e)}else console.warn(`[Grad] - missing node '${e.parent}'`);else n.children.push(e)})),n}(e):($n(t=e).forEach(Bn),t);var t},Wn=function(e,t){let n="-> ";t&&(n=(e=>""+e+"")("→ "));let a="";return $n(e).forEach(((e,r)=>{let o=e.id||"";if(t&&(o=(e=>""+e+"")(o)),0===r&&!e.id)return;let i=e._cache.parents.length;a+=" ".repeat(i)+n+o+"\n"})),a},Un=function(e){let t=$n(e);t.forEach((e=>{delete(e=Object.assign({},e)).children}));let n=t[0];return n&&!n.id&&0===Object.keys(n.props).length&&t.shift(),t},qn={text:Wn,txt:Wn,array:Un,flat:Un},Rn=function(e,t){return"nested"===t||"json"===t?e:"debug"===t?(console.log(Wn(e,!0)),null):qn.hasOwnProperty(t)?qn[t](e):e},Qn=e=>{$n(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],t._cache.parents=e._cache.parents.concat([e.id]))}))},Zn=/\//;let Xn=class g{constructor(e={}){Object.defineProperty(this,"json",{enumerable:!1,value:e,writable:!0})}get children(){return this.json.children}get id(){return this.json.id}get found(){return this.json.id||this.json.children.length>0}props(e={}){let t=this.json.props||{};return"string"==typeof e&&(t[e]=!0),this.json.props=Object.assign(t,e),this}get(e){if(e=Mn(e),!Zn.test(e)){let t=this.json.children.find((t=>t.id===e));return new g(t)}let t=((e,t)=>{let n=(e=>"string"!=typeof e?e:(e=e.replace(/^\//,"")).split(/\//))(t=t||"");for(let t=0;te.id===n[t]));if(!a)return null;e=a}return e})(this.json,e)||Bn({});return new g(t)}add(e,t={}){if(Ln(e))return e.forEach((e=>this.add(Mn(e),t))),this;e=Mn(e);let n=Bn({id:e,props:t});return this.json.children.push(n),new g(n)}remove(e){return e=Mn(e),this.json.children=this.json.children.filter((t=>t.id!==e)),this}nodes(){return $n(this.json).map((e=>(delete(e=Object.assign({},e)).children,e)))}cache(){return(e=>{let t=$n(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],t._cache.parents=e._cache.parents.concat([e.id]))})),n={};t.forEach((e=>{e.id&&(n[e.id]=e)})),t.forEach((e=>{e._cache.parents.forEach((t=>{n.hasOwnProperty(t)&&n[t]._cache.children.push(e.id)}))})),e._cache.children=Object.keys(n)})(this.json),this}list(){return $n(this.json)}fillDown(){var e;return e=this.json,$n(e,((e,t)=>{t.props=((e,t)=>(Object.keys(t).forEach((n=>{if(t[n]instanceof Set){let a=e[n]||new Set;e[n]=new Set([...a,...t[n]])}else if((e=>e&&"object"==typeof e&&!Array.isArray(e))(t[n])){let a=e[n]||{};e[n]=Object.assign({},t[n],a)}else Ln(t[n])?e[n]=t[n].concat(e[n]||[]):void 0===e[n]&&(e[n]=t[n])})),e))(t.props,e.props)})),this}depth(){Qn(this.json);let e=$n(this.json),t=e.length>1?1:0;return e.forEach((e=>{if(0===e._cache.parents.length)return;let n=e._cache.parents.length+1;n>t&&(t=n)})),t}out(e){return Qn(this.json),Rn(this.json,e)}debug(){return Qn(this.json),Rn(this.json,"debug"),this}};const _n=function(e){let t=Jn(e);return new Xn(t)};_n.prototype.plugin=function(e){e(this)};const Yn={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Hyphenated:"cyan",Adverb:"cyan"},ea=function(e){if(Yn.hasOwnProperty(e.id))return Yn[e.id];if(Yn.hasOwnProperty(e.is))return Yn[e.is];const t=e._cache.parents.find((e=>Yn[e]));return Yn[t]},ta=function(e){return e?"string"==typeof e?[e]:e:[]},na=function(e,t){return e=function(e,t){return Object.keys(e).forEach((n=>{e[n].isA&&(e[n].is=e[n].isA),e[n].notA&&(e[n].not=e[n].notA),e[n].is&&"string"==typeof e[n].is&&(t.hasOwnProperty(e[n].is)||e.hasOwnProperty(e[n].is)||(e[e[n].is]={})),e[n].not&&"string"==typeof e[n].not&&!e.hasOwnProperty(e[n].not)&&(t.hasOwnProperty(e[n].not)||e.hasOwnProperty(e[n].not)||(e[e[n].not]={}))})),e}(e,t),Object.keys(e).forEach((t=>{e[t].children=ta(e[t].children),e[t].not=ta(e[t].not)})),Object.keys(e).forEach((t=>{(e[t].not||[]).forEach((n=>{e[n]&&e[n].not&&e[n].not.push(t)}))})),e};var aa={one:{setTag:Vn,unTag:function(e,t,n){t=t.trim().replace(/^#/,"");for(let a=0;a0)for(let e=0;e0&&(e=function(e){return Object.keys(e).forEach((t=>{e[t]=Object.assign({},e[t]),e[t].novel=!0})),e}(e)),e=na(e,t);const n=function(e){const t=Object.keys(e).map((t=>{const n=e[t],a={not:new Set(n.not),also:n.also,is:n.is,novel:n.novel};return{id:t,parent:n.is,props:a,children:[]}}));return _n(t).cache().fillDown().out("array")}(Object.assign({},t,e)),a=function(e){const t={};return e.forEach((e=>{const{not:n,also:a,is:r,novel:o}=e.props;let i=e._cache.parents;a&&(i=i.concat(a)),t[e.id]={is:r,not:n,novel:o,also:a,parents:i,children:e._cache.children,color:ea(e)}})),Object.keys(t).forEach((e=>{const n=new Set(t[e].not);t[e].not.forEach((e=>{t[e]&&t[e].children.forEach((e=>n.add(e)))})),t[e].not=Array.from(n)})),t}(n);return a},canBe:function(e,t,n){if(!n.hasOwnProperty(t))return!0;const a=n[t].not||[];for(let t=0;tr.one.setTag(a,e,i,n,t))):r.one.setTag(a,e,i,n,t),this.uncache(),this},tagSafe:function(e,t=""){return this.tag(e,t,!0)},unTag:function(e,t){if(!this.found||!e)return this;const n=this.termList();if(0===n.length)return this;const{methods:a,verbose:r,model:o}=this;!0===r&&console.log(" - ",e,t||"");const i=o.one.tagSet;return ra(e)?e.forEach((e=>a.one.unTag(n,e,i))):a.one.unTag(n,e,i),this.uncache(),this},canBe:function(e){e=e.replace(/^#/,"");const t=this.model.one.tagSet,n=this.methods.one.canBe,a=[];this.document.forEach(((r,o)=>{r.forEach(((r,i)=>{n(r,e,t)||a.push([o,i,i+1])}))}));const r=this.update(a);return this.difference(r)}};var ia={addTags:function(e){const{model:t,methods:n}=this.world(),a=t.one.tagSet,r=(0,n.one.addTags)(e,a);return t.one.tagSet=r,this}};const sa=new Set(["Auxiliary","Possessive"]);var la={model:{one:{tagSet:{}}},compute:{tagRank:function(e){const{document:t,world:n}=e,a=n.model.one.tagSet;t.forEach((e=>{e.forEach((e=>{const t=Array.from(e.tags);e.tagRank=function(e,t){return e=e.sort(((e,n)=>{if(sa.has(e)||!t.hasOwnProperty(n))return 1;if(sa.has(n)||!t.hasOwnProperty(e))return-1;let a=t[e].children||[];const r=a.length;return a=t[n].children||[],r-a.length})),e}(t,a)}))}))}},methods:aa,api:function(e){Object.assign(e.prototype,oa)},lib:ia};const ua=/([.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s)/g,ca=/^[.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s$/,da=/((?:\r?\n|\r)+)/,ha=/[a-z0-9\u00C0-\u00FF\u00a9\u00ae\u2000-\u3300\ud000-\udfff]/i,ga=/\S/,ma=function(e){return Boolean(e.match(/\n$/))},pa={'"':'"',""":""","“":"”","‟":"”","„":"”","⹂":"”","‚":"’","«":"»","‹":"›","‵":"′","‶":"″","‷":"‴","〝":"〞","〟":"〞"},fa=RegExp("["+Object.keys(pa).join("")+"]","g"),ba=RegExp("["+Object.values(pa).join("")+"]","g"),ya=function(e){if(!e)return!1;const t=e.match(ba);return null!==t&&1===t.length},va=/\(/g,wa=/\)/g,ka=/\S/,Pa=/^\s+/,Aa=function(e,t){const n=e.split(/[-–—]/);if(n.length<=1)return!1;const{prefixes:a,suffixes:r}=t.one;if(1===n[0].length&&/[a-z]/i.test(n[0]))return!1;if(a.hasOwnProperty(n[0]))return!1;if(n[1]=n[1].trim().replace(/[.?!]$/,""),r.hasOwnProperty(n[1]))return!1;if(!0===/^([a-z\u00C0-\u00FF`"'/]+)[-–—]([a-z0-9\u00C0-\u00FF].*)/i.test(e))return!0;return!0===/^[('"]?([0-9]{1,4})[-–—]([a-z\u00C0-\u00FF`"'/-]+[)'"]?$)/i.test(e)},Ca=function(e){const t=[],n=e.split(/[-–—]/);let a="-";const r=e.match(/[-–—]/);r&&r[0]&&(a=r);for(let e=0;e(e[t]=!0,e)),{});const Ta=/\p{Letter}/u,Ga=/[\p{Number}\p{Currency_Symbol}]/u,xa=/^[a-z]\.([a-z]\.)+/i,Ea=/[sn]['’]$/,Fa=/([A-Z]\.)+[A-Z]?,?$/,Oa=/^[A-Z]\.,?$/,za=/[A-Z]{2,}('s|,)?$/,Va=/([a-z]\.)+[a-z]\.?$/,Ba=function(e){return function(e){return!0===Fa.test(e)||!0===Va.test(e)||!0===Oa.test(e)||!0===za.test(e)}(e)&&(e=e.replace(/\./g,"")),e},Sa=function(e,t){const n=t.methods.one.killUnicode;let a=e.text||"";a=function(e){const t=e=(e=(e=e||"").toLowerCase()).trim();return e=(e=(e=e.replace(/[,;.!?]+$/,"")).replace(/\u2026/g,"...")).replace(/\u2013/g,"-"),!1===/^[:;]/.test(e)&&(e=(e=(e=e.replace(/\.{3,}$/g,"")).replace(/[",.!:;?)]+$/g,"")).replace(/^['"(]+/g,"")),""===(e=(e=e.replace(/[\u200B-\u200D\uFEFF]/g,"")).trim())&&(e=t),e.replace(/([0-9]),([0-9])/g,"$1$2")}(a),a=n(a,t),a=Ba(a),e.normal=a},Ka=/[ .][A-Z]\.? *$/i,$a=/(?:\u2026|\.{2,}) *$/,La=/\p{L}/u,Ma=/\. *$/,Ja=/^[A-Z]\. $/;var Wa={one:{killUnicode:function(e,t){const n=t.model.one.unicode||{},a=(e=e||"").split("");return a.forEach(((e,t)=>{n[e]&&(a[t]=n[e])})),a.join("")},tokenize:{splitSentences:function(e,t){if(e=e||"",!(e=String(e))||"string"!=typeof e||!1===ka.test(e))return[];const n=function(e){const t=[],n=e.split(da);for(let e=0;e0&&(r.push(o),e[t]=""):e[t+1]=o+(e[t+1]||"")}return r}(a,t),a=function(e){const t=[];for(let n=0;n0?(n[n.length-1]+=o,n.push(t)):n.push(o+t),o=""):o+=t}return o&&(0===n.length&&(n[0]=""),n[n.length-1]+=o),n=function(e){for(let t=1;te)),n},splitWhitespace:(e,t)=>{const{str:n,pre:a,post:r}=function(e,t){const{prePunctuation:n,postPunctuation:a,emoticons:r}=t.one;let o=e,i="",s="";const l=Array.from(e);if(r.hasOwnProperty(e.trim()))return{str:e.trim(),pre:i,post:" "};let u=l.length;for(let e=0;e(s=e||"",""))),e=o,i=""),{str:e,pre:i,post:s}}(e,t);return{text:n,pre:a,post:r,tags:new Set}},fromString:function(e,t){const{methods:n,model:a}=t,{splitSentences:r,splitTerms:o,splitWhitespace:i}=n.one.tokenize;return e=r(e=e||"",t).map((e=>{let n=o(e,a);return n=n.map((e=>i(e,a))),n.forEach((e=>{Sa(e,t)})),n})),e}}}};const Ua={},qa={};[[["approx","apt","bc","cyn","eg","esp","est","etc","ex","exp","prob","pron","gal","min","pseud","fig","jd","lat","lng","vol","fm","def","misc","plz","ea","ps","sec","pt","pref","pl","pp","qt","fr","sq","nee","ss","tel","temp","vet","ver","fem","masc","eng","adj","vb","rb","inf","situ","vivo","vitro","wr"]],[["dl","ml","gal","qt","pt","tbl","tsp","tbsp","km","dm","cm","mm","mi","td","hr","hrs","kg","hg","dg","cg","mg","µg","lb","oz","sq ft","hz","mps","mph","kmph","kb","mb","tb","lx","lm","fl oz","yb"],"Unit"],[["ad","al","arc","ba","bl","ca","cca","col","corp","ft","fy","ie","lit","ma","md","pd","tce"],"Noun"],[["adj","adm","adv","asst","atty","bldg","brig","capt","cmdr","comdr","cpl","det","dr","esq","gen","gov","hon","jr","llb","lt","maj","messrs","mlle","mme","mr","mrs","ms","mstr","phd","prof","pvt","rep","reps","res","rev","sen","sens","sfc","sgt","sir","sr","supt","surg"],"Honorific"],[["jan","feb","mar","apr","jun","jul","aug","sep","sept","oct","nov","dec"],"Month"],[["dept","univ","assn","bros","inc","ltd","co"],"Organization"],[["rd","st","dist","mt","ave","blvd","cl","cres","hwy","ariz","cal","calif","colo","conn","fla","fl","ga","ida","ia","kan","kans","minn","neb","nebr","okla","penna","penn","pa","dak","tenn","tex","ut","vt","va","wis","wisc","wy","wyo","usafa","alta","ont","que","sask"],"Place"]].forEach((e=>{e[0].forEach((t=>{Ua[t]=!0,qa[t]="Abbreviation",void 0!==e[1]&&(qa[t]=[qa[t],e[1]])}))}));var Ra=["anti","bi","co","contra","de","extra","infra","inter","intra","macro","micro","mis","mono","multi","peri","pre","pro","proto","pseudo","re","sub","supra","trans","tri","un","out","ex"].reduce(((e,t)=>(e[t]=!0,e)),{});const Qa={"!":"¡","?":"¿Ɂ",'"':'“”"❝❞',"'":"‘‛❛❜’","-":"—–",a:"ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАаѦѧӐӑӒӓƛæ",b:"ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ",c:"¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼϲϹϽϾСсєҀҁҪҫ",d:"ÐĎďĐđƉƊȡƋƌ",e:"ÈÉÊËèéêëĒēĔĕĖėĘęĚěƐȄȅȆȇȨȩɆɇΈΕΞΣέεξϵЀЁЕеѐёҼҽҾҿӖӗễ",f:"ƑƒϜϝӺӻҒғſ",g:"ĜĝĞğĠġĢģƓǤǥǦǧǴǵ",h:"ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ",I:"ÌÍÎÏ",i:"ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇіїi̇",j:"ĴĵǰȷɈɉϳЈј",k:"ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ",l:"ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ",m:"ΜϺϻМмӍӎ",n:"ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ",o:"ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϴОФоѲѳӦӧӨөӪӫ",p:"ƤΡρϷϸϼРрҎҏÞ",q:"Ɋɋ",r:"ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ",s:"ŚśŜŝŞşŠšƧƨȘșȿЅѕ",t:"ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт",u:"ÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰυϋύ",v:"νѴѵѶѷ",w:"ŴŵƜωώϖϢϣШЩшщѡѿ",x:"×ΧχϗϰХхҲҳӼӽӾӿ",y:"ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ",z:"ŹźŻżŽžƵƶȤȥɀΖ"},Za={};Object.keys(Qa).forEach((function(e){Qa[e].split("").forEach((function(t){Za[t]=e}))}));const Xa=/\//,_a=/[a-z]\.[a-z]/i,Ya=/[0-9]/,er=function(e,t){const n=e.normal||e.text||e.machine,a=t.model.one.aliases;if(a.hasOwnProperty(n)&&(e.alias=e.alias||[],e.alias.push(a[n])),Xa.test(n)&&!_a.test(n)&&!Ya.test(n)){const t=n.split(Xa);t.length<=3&&t.forEach((t=>{""!==(t=t.trim())&&(e.alias=e.alias||[],e.alias.push(t))}))}return e},tr=/^\p{Letter}+-\p{Letter}+$/u,nr=function(e){let t=e.implicit||e.normal||e.text;t=t.replace(/['’]s$/,""),t=t.replace(/s['’]$/,"s"),t=t.replace(/([aeiou][ktrp])in'$/,"$1ing"),tr.test(t)&&(t=t.replace(/-/g,"")),t=t.replace(/^[#@]/,""),t!==e.normal&&(e.machine=t)},ar=function(e,t){const n=e.docs;for(let a=0;aar(e,er),machine:e=>ar(e,nr),normal:e=>ar(e,Sa),freq:function(e){const t=e.docs,n={};for(let e=0;e{let i=(e=e.toLowerCase().trim()).length;t.max&&i>t.max&&(i=t.max);for(let s=t.min;s{delete a[e]})),a}(e,t,this.world());return Object.keys(r).forEach((e=>{n.one.typeahead.hasOwnProperty(e)?delete n.one.typeahead[e]:n.one.typeahead[e]=r[e]})),this}};var cr={model:{one:{typeahead:{}}},api:function(e){e.prototype.autoFill=sr},lib:ur,compute:ir,hooks:["typeahead"]};d.extend(J),d.extend(vn),d.extend(Jt),d.extend(Hn),d.extend(la),d.plugin(ve),d.extend(or),d.extend(Ce),d.plugin(p),d.extend(Be),d.extend(cr),d.extend(xe),d.extend(En);var dr={addendum:"addenda",corpus:"corpora",criterion:"criteria",curriculum:"curricula",genus:"genera",memorandum:"memoranda",opus:"opera",ovum:"ova",phenomenon:"phenomena",referendum:"referenda",alga:"algae",alumna:"alumnae",antenna:"antennae",formula:"formulae",larva:"larvae",nebula:"nebulae",vertebra:"vertebrae",analysis:"analyses",axis:"axes",diagnosis:"diagnoses",parenthesis:"parentheses",prognosis:"prognoses",synopsis:"synopses",thesis:"theses",neurosis:"neuroses",appendix:"appendices",index:"indices",matrix:"matrices",ox:"oxen",sex:"sexes",alumnus:"alumni",bacillus:"bacilli",cactus:"cacti",fungus:"fungi",hippopotamus:"hippopotami",libretto:"libretti",modulus:"moduli",nucleus:"nuclei",octopus:"octopi",radius:"radii",stimulus:"stimuli",syllabus:"syllabi",cookie:"cookies",calorie:"calories",auntie:"aunties",movie:"movies",pie:"pies",rookie:"rookies",tie:"ties",zombie:"zombies",leaf:"leaves",loaf:"loaves",thief:"thieves",foot:"feet",goose:"geese",tooth:"teeth",beau:"beaux",chateau:"chateaux",tableau:"tableaux",bus:"buses",gas:"gases",circus:"circuses",crisis:"crises",virus:"viruses",database:"databases",excuse:"excuses",abuse:"abuses",avocado:"avocados",barracks:"barracks",child:"children",clothes:"clothes",echo:"echoes",embargo:"embargoes",epoch:"epochs",deer:"deer",halo:"halos",man:"men",woman:"women",mosquito:"mosquitoes",mouse:"mice",person:"people",quiz:"quizzes",rodeo:"rodeos",shoe:"shoes",sombrero:"sombreros",stomach:"stomachs",tornado:"tornados",tuxedo:"tuxedos",volcano:"volcanoes"},hr={Comparative:"true¦bett1f0;arth0ew0in0;er",Superlative:"true¦earlier",PresentTense:"true¦bests,sounds",Condition:"true¦lest,unless",PastTense:"true¦began,came,d4had,kneel3l2m0sa4we1;ea0sg2;nt;eap0i0;ed;id",Participle:"true¦0:09;a06b01cZdXeat0fSgQhPoJprov0rHs7t6u4w1;ak0ithdra02o2r1;i02uY;k0v0;nd1pr04;ergoJoJ;ak0hHo3;e9h7lain,o6p5t4un3w1;o1um;rn;g,k;ol0reS;iQok0;ught,wn;ak0o1runk;ne,wn;en,wn;ewriNi1uJ;dd0s0;ut3ver1;do4se0t1;ak0h2;do2g1;roG;ne;ast0i7;iv0o1;ne,tt0;all0loBor1;bi3g2s1;ak0e0;iv0o9;dd0;ove,r1;a5eamt,iv0;hos0lu1;ng;e4i3lo2ui1;lt;wn;tt0;at0en,gun;r2w1;ak0ok0;is0;en",Gerund:"true¦accord0be0doin,go0result0stain0;ing",Expression:"true¦a0Yb0Uc0Sd0Oe0Mfarew0Lg0FhZjeez,lWmVnToOpLsJtIuFvEw7y0;a5e3i1u0;ck,p;k04p0;ee,pee;a0p,s;!h;!a,h,y;a5h2o1t0;af,f;rd up,w;atsoever,e1o0;a,ops;e,w;hoo,t;ery w06oi0L;gh,h0;! 0h,m;huh,oh;here nPsk,ut tut;h0ic;eesh,hh,it,oo;ff,h1l0ow,sst;ease,s,z;ew,ooey;h1i,mg,o0uch,w,y;h,o,ps;! 0h;hTmy go0wT;d,sh;a7evertheless,o0;!pe;eh,mm;ah,eh,m1ol0;!s;ao,fao;aCeBi9o2u0;h,mph,rra0zzC;h,y;l1o0;r6y9;la,y0;! 0;c1moCsmok0;es;ow;!p hip hoor0;ay;ck,e,llo,y;ha1i,lleluj0;ah;!ha;ah,ee4o1r0;eat scott,r;l1od0sh; grief,bye;ly;! whiz;ell;e0h,t cetera,ureka,ww,xcuse me;k,p;'oh,a0rat,uh;m0ng;mit,n0;!it;mon,o0;ngratulations,wabunga;a2oo1r0tw,ye;avo,r;!ya;h,m; 1h0ka,las,men,rgh,ye;!a,em,h,oy;la",Negative:"true¦n0;ever,o0;n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Reflexive:"true¦h4it5my5o1the0your2;ir1m1;ne3ur0;sel0;f,ves;er0im0;self",Plural:"true¦dick0gre0ones,records;ens","Unit|Noun":"true¦cEfDgChBinchAk9lb,m6newt5oz,p4qt,t1y0;ardEd;able1b0ea1sp;!l,sp;spo1;a,t,x;on9;!b,g,i1l,m,p0;h,s;!les;!b,elvin,g,m;!es;g,z;al,b;eet,oot,t;m,up0;!s",Value:"true¦a few",Imperative:"true¦bewa0come he0;re","Plural|Verb":"true¦leaves",Demonym:"true¦0:15;1:12;a0Vb0Oc0Dd0Ce08f07g04h02iYjVkTlPmLnIomHpEqatari,rCs7t5u4v3welAz2;am0Gimbabwe0;enezuel0ietnam0I;gAkrai1;aiwTex0hai,rinida0Ju2;ni0Prkmen;a5cotti4e3ingapoOlovak,oma0Spaniard,udRw2y0W;ede,iss;negal0Cr09;sh;mo0uT;o5us0Jw2;and0;a2eru0Fhilippi0Nortugu07uerto r0S;kist3lesti1na2raguay0;ma1;ani;ami00i2orweP;caragu0geri2;an,en;a3ex0Lo2;ngo0Drocc0;cedo1la2;gasy,y07;a4eb9i2;b2thua1;e0Cy0;o,t01;azakh,eny0o2uwaiI;re0;a2orda1;ma0Ap2;anO;celandic,nd4r2sraeli,ta01vo05;a2iB;ni0qi;i0oneU;aiAin2ondur0unO;di;amEe2hanai0reek,uatemal0;or2rm0;gi0;ilipino,ren8;cuadoVgyp4mira3ngli2sto1thiopi0urope0;shm0;ti;ti0;aPominUut3;a9h6o4roat3ub0ze2;ch;!i0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el6o4r3ul2;gaE;azi9it;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;genti2me1;ne;ba1ge2;ri0;ni0;gh0r2;ic0;an",Organization:"true¦0:4Q;a3Tb3Bc2Od2He2Df27g1Zh1Ti1Pj1Nk1Ll1Gm12n0Po0Mp0Cqu0Br02sTtHuCv9w3xiaomi,y1;amaha,m1Bou1w1B;gov,tu3C;a4e2iki1orld trade organizati33;leaRped0O;lls fargo,st1;fie2Hinghou2R;l1rner br3U;gree3Jl street journ2Im1E;an halOeriz2Xisa,o1;dafo2Yl1;kswagMvo;b4kip,n2ps,s1;a tod3Aps;es3Mi1;lev3Fted natio3C;er,s; mobi32aco beRd bOe9gi frida3Lh3im horto3Amz,o1witt3D;shi49y1;ota,s r 05;e 1in lizzy;b3carpen3Jdaily ma3Dguess w2holli0s1w2;mashing pumpki35uprem0;ho;ea1lack eyed pe3Xyr0Q;ch bo3Dtl0;l2n3Qs1xas instrumen1U;co,la m1F;efoni0Kus;a8cientology,e5ieme2Ymirnoff,np,o3pice gir6quare0Ata1ubaru;rbuc1to34;ks;ny,undgard1;en;a2x pisto1;ls;g1Wrs;few2Minsbur31lesfor03msu2E;adiohead,b8e4o1yana3C;man empi1Xyal 1;b1dutch she4;ank;a3d 1max,vl20;bu1c2Ahot chili peppe2Ylobst2N;ll;ders dige1Ll madrid;c,s;ant3Aizn2Q;a8bs,e5fiz2Ihilip4i3r1;emier 1udenti1D;leagTo2K;nk floyd,zza hut; morrBs;psi2tro1uge0E;br33chi0Tn33;!co;lant2Un1yp16; 2ason27da2P;ld navy,pec,range juli2xf1;am;us;aAb9e6fl,h5i4o1sa,vid3wa;k2tre dame,vart1;is;ia;ke,ntendo,ss0QvZ;l,s;c,st1Otflix,w1; 1sweek;kids on the block,york0D;a,c;nd22s2t1;ional aca2Po,we0U;a,c02d0S;aDcdonalCe9i6lb,o3tv,y1;spa1;ce;b1Tnsanto,ody blu0t1;ley cr1or0T;ue;c2t1;as,subisO;helin,rosoft;dica2rcedes benz,talli1;ca;id,re;ds;cs milk,tt19z24;a3e1g,ittle caesa1P; ore09novo,x1;is,mark,us; 1bour party;pres0Dz boy;atv,fc,kk,lm,m1od1O;art;iffy lu0Roy divisi0Jpmorgan1sa;! cha09;bm,hop,k3n1tv;g,te1;l,rpol;ea;a5ewlett pack1Vi3o1sbc,yundai;me dep1n1P;ot;tac1zbollah;hi;lliburt08sbro;eneral 6hq,ithub,l5mb,o2reen d0Ou1;cci,ns n ros0;ldman sachs,o1;dye1g0H;ar;axo smith kli04encoW;electr0Nm1;oto0Z;a5bi,c barcelo4da,edex,i2leetwood m03o1rito l0G;rd,xcY;at,fa,nancial1restoZ; tim0;na;cebook,nnie mae;b0Asa,u3xxon1; m1m1;ob0J;!rosceptics;aiml0De5isney,o4u1;nkin donu2po0Zran dur1;an;ts;j,w jon0;a,f lepp12ll,peche mode,r spieg02stiny's chi1;ld;aJbc,hFiDloudflaCnn,o3r1;aigsli5eedence clearwater reviv1ossra09;al;c7inba6l4m1o0Est09;ca2p1;aq;st;dplSg1;ate;se;a c1o chanQ;ola;re;a,sco1tigroup;! systems;ev2i1;ck fil a,na daily;r1y;on;d2pital o1rls jr;ne;bury,ill1;ac;aEbc,eBf9l5mw,ni,o1p,rexiteeU;ei3mbardiIston 1;glo1pizza;be;ng;o2ue c1;roV;ckbuster video,omingda1;le; g1g1;oodriL;cht2e ge0rkshire hathaw1;ay;el;cardi,idu,nana republ3s1xt5y5;f,kin robbi1;ns;ic;bYcTdidSerosmith,iRlKmEnheuser busDol,ppleAr6s4u3v2y1;er;is,on;di,todesk;hland o1sociated E;il;b3g2m1;co;os;ys; compu1be0;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 5catel2ta1;ir;! lu1;ce1;nt;jazeera,qae1;da;g,rbnb;as;/dc,a3er,tivision1;! blizz1;ard;demy of scienc0;es;ba",Possessive:"true¦its,my,our0thy;!s","Noun|Verb":"true¦0:9W;1:AA;2:96;3:A3;4:9R;5:A2;6:9K;7:8N;8:7L;9:A8;A:93;B:8D;C:8X;a9Ob8Qc7Id6Re6Gf5Sg5Hh55i4Xj4Uk4Rl4Em40n3Vo3Sp2Squ2Rr21s0Jt02u00vVwGyFzD;ip,oD;ne,om;awn,e6Fie68;aOeMhJiHoErD;ap,e9Oink2;nd0rDuC;kDry,sh5Hth;!shop;ck,nDpe,re,sh;!d,g;e86iD;p,sD;k,p0t2;aDed,lco8W;r,th0;it,lk,rEsDt4ve,x;h,te;!ehou1ra9;aGen5FiFoD;iDmAte,w;ce,d;be,ew,sA;cuum,l4B;pDr7;da5gra6Elo6A;aReQhrPiOoMrGuEwiDy5Z;n,st;nDrn;e,n7O;aGeFiEoDu6;t,ub2;bu5ck4Jgg0m,p;at,k,nd;ck,de,in,nsDp,v7J;f0i8R;ll,ne,p,r4Yss,t94uD;ch,r;ck,de,e,le,me,p,re;e5Wow,u6;ar,e,ll,mp0st,xt;g,lDng2rg7Ps5x;k,ly;a0Sc0Ne0Kh0Fi0Dk0Cl0Am08n06o05pXquaBtKuFwD;ea88iD;ng,pe,t4;bGit,m,ppErD;fa3ge,pri1v2U;lDo6S;e6Py;!je8;aMeLiKoHrEuDy2;dy,ff,mb2;a85eEiDo5Pugg2;ke,ng;am,ss,t4;ckEop,p,rD;e,m;ing,pi2;ck,nk,t4;er,m,p;ck,ff,ge,in,ke,lEmp,nd,p2rDte,y;!e,t;k,l;aJeIiHlGoFrDur,y;ay,e56inDu3;g,k2;ns8Bt;a5Qit;ll,n,r87te;ed,ll;m,n,rk;b,uC;aDee1Tow;ke,p;a5Je4FiDo53;le,rk;eep,iDou4;ce,p,t;ateboa7Ii;de,gnDl2Vnk,p,ze;!al;aGeFiEoDuff2;ck,p,re,w;ft,p,v0;d,i3Ylt0;ck,de,pe,re,ve;aEed,nDrv1It;se,t2N;l,r4t;aGhedu2oBrD;aEeDibb2o3Z;en,w;pe,t4;le,n,r2M;cDfegua72il,mp2;k,rifi3;aZeHhy6LiGoEuD;b,in,le,n,s5X;a6ck,ll,oDpe,u5;f,t;de,ng,ot,p,s1W;aTcSdo,el,fQgPje8lOmMnLo17pJque6sFturn,vDwa6V;eDi27;al,r1;er74oFpe8tEuD;lt,me;!a55;l71rt;air,eaDly,o53;l,t;dezvo2Zt;aDedy;ke,rk;ea1i4G;a6Iist0r5N;act6Yer1Vo71uD;nd,se;a38o6F;ch,s6G;c1Dge,iEke,lly,nDp1Wt1W;ge,k,t;n,se;es6Biv0;a04e00hYiXlToNrEsy4uD;mp,n4rcha1sh;aKeIiHoDu4O;be,ceFdu3fi2grDje8mi1p,te6;amDe6W;!me;ed,ss;ce,de,nt;sDy;er6Cs;cti3i1;iHlFoEp,re,sDuCw0;e,i5Yt;l,p;iDl;ce,sh;nt,s5V;aEce,e32uD;g,mp,n7;ce,nDy;!t;ck,le,n17pe,tNvot;a1oD;ne,tograph;ak,eFnErDt;fu55mA;!c32;!l,r;ckJiInHrFsEtDu1y;ch,e9;s,te;k,tD;!y;!ic;nt,r,se;!a7;bje8ff0il,oErDutli3Qver4B;bAd0ie9;ze;a4ReFoDur1;d,tD;e,i3;ed,gle8tD;!work;aMeKiIoEuD;rd0;ck,d3Rld,nEp,uDve;nt,th;it5EkD;ey;lk,n4Brr5CsDx;s,ta2B;asuBn4UrDss;ge,it;il,nFp,rk3WsEtD;ch,t0;h,k,t0;da5n0oeuvB;aLeJiHoEuD;mp,st;aEbby,ck,g,oDve;k,t;d,n;cDe,ft,mAnIst;en1k;aDc0Pe4vK;ch,d,k,p,se;bFcEnd,p,t4uD;gh,n4;e,k;el,o2U;eEiDno4E;ck,d,ll,ss;el,y;aEo1OuD;i3mp;m,zz;mpJnEr46ssD;ue;c1Rdex,fluGha2k,se2HteDvoi3;nt,rD;e6fa3viD;ew;en3;a8le2A;aJeHiGoEuD;g,nt;l3Ano2Dok,pDr1u1;!e;ghli1Fke,nt,re,t;aDd7lp;d,t;ck,mGndFrEsh,tDu9;ch,e;bo3Xm,ne4Eve6;!le;!m0;aMear,ift,lKossJrFuD;arDe4Alp,n;antee,d;aFiEoDumb2;uCwth;ll,nd,p;de,sp;ip;aBoDue;ss,w;g,in,me,ng,s,te,ze;aZeWiRlNoJrFuD;ck,el,nDss,zz;c38d;aEoDy;st,wn;cDgme,me,nchi1;tuB;cFg,il,ld,rD;ce,e29mDwa31;!at;us;aFe0Vip,oDy;at,ck,od,wD;!er;g,ke,me,re,sh,vo1E;eGgFlEnDre,sh,t,x;an3i0Q;e,m,t0;ht,uB;ld;aEeDn3;d,l;r,tuB;ce,il,ll,rm,vo2W;cho,d7ffe8nMsKxFyeD;!baD;ll;cGerci1hFpDtra8;eriDo0W;en3me9;au6ibA;el,han7u1;caDtima5;pe;count0d,vy;a01eSiMoJrEuDye;b,el,mp,pli2X;aGeFiEoD;ne,p;ft,ll,nk,p,ve;am,ss;ft,g,in;cEd7ubt,wnloD;ad;k,u0E;ge6p,sFt4vD;e,iDor3;de;char7gui1h,liEpD;at4lay,u5;ke;al,bKcJfeIlGmaCposAsEtaD;il;e07iD;gn,re;ay,ega5iD;ght;at,ct;li04rea1;a5ut;b,ma7n3rDte;e,t;a0Eent0Dh06irc2l03oKrFuD;be,e,rDt;b,e,l,ve;aGeFoEuDy;sh;p,ss,wd;dAep;ck,ft,sh;at,de,in,lTmMnFordina5py,re,st,uDv0;gh,nDp2rt;s01t;ceHdu8fli8glomeIsFtDveN;a8rD;a6ol;e9tru8;ct;ntDrn;ra5;bHfoGmFpD;leDouCromi1;me9;aCe9it,u5;rt;at,iD;ne;lap1oD;r,ur;aEiDoud,ub;ck,p;im,w;aEeDip;at,ck,er;iGllen7nErD;ge,m,t;ge,nD;el;n,r;er,re;ke,ll,mp,noe,pGrXsFtEuDve;se,ti0I;alog,ch;h,t;!tuB;re;a03eZiXlToPrHuEyD;pa11;bb2ck2dgEff0mp,rDst,zz;den,n;et;anJeHiFoadEuD;i1sh;ca6;be,d7;ge;aDed;ch,k;ch,d;aFg,mb,nEoDrd0tt2x,ycott;k,st,t;d,e;rd,st;aFeCiDoYur;nk,tz;nd;me;as,d,ke,nd,opsy,tD;!ch,e;aFef,lt,nDt;d,efA;it;r,t;ck,il,lan3nIrFsEtt2;le;e,h;!gDk;aDe;in;!d,g,k;bu1c05dZge,iYlVnTppQrLsIttGucEwaD;rd;tiD;on;aDempt;ck;k,sD;i6ocia5;st;chFmD;!oD;ur;!iD;ve;eEroa4;ch;al;chDg0sw0;or;aEt0;er;rm;d,m,r;dreHvD;an3oD;ca5;te;ce;ss;cDe,he,t;eFoD;rd,u9;nt;nt,ss;se",Actor:"true¦0:7B;1:7G;2:6A;3:7F;4:7O;5:7K;a6Nb62c4Ud4Be41f3Sg3Bh30i2Uj2Qkin2Pl2Km26n1Zo1Sp0Vqu0Tr0JsQtJuHvEw8yo6;gi,ut6;h,ub0;aAe9i8o7r6;estl0it0;m2rk0;fe,nn0t2Bza2H;atherm2ld0;ge earn0it0nder0rri1;eter7i6oyF;ll5Qp,s3Z;an,ina2U;n6s0;c6Uder03;aoisea23e9herapi5iktok0o8r6ut1yco6S;a6endseLo43;d0mp,nscri0Bvel0;ddl0u1G;a0Qchn7en6na4st0;ag0;i3Oo0D;aiXcUeRhPiMki0mu26oJpGquaFtBu7wee6;p0theart;lt2per7r6;f0ge6Iviv1;h6inten0Ist5Ivis1;ero,um2;a8ep7r6;ang0eam0;bro2Nc2Ofa2Nmo2Nsi20;ff0tesm2;tt0;ec7ir2Do6;kesp59u0M;ia5Jt3;l7me6An,rcere6ul;r,ss;di0oi5;n7s6;sy,t0;g0n0;am2ephe1Iow6;girl,m2r2Q;cretInior cit3Fr6;gea4v6;a4it1;hol4Xi7reen6ulpt1;wr2C;e01on;l1nt;aEe9o8u6;l0nn6;er up,ingE;g40le mod3Zof0;a4Zc8fug2Ppo32searQv6;ere4Uolution6;ary;e6luYru22;ptio3T;bbi,dic5Vpp0;arter6e2Z;back;aYeWhSiRlOoKr8sycho7u6;nk,p31;logi5;aGeDiBo6;d9fess1g7ph47s6;pe2Ktitu51;en6ramm0;it1y;igy,uc0;est4Nme mini0Unce6s3E;!ss;a7si6;de4;ch0;ctiti39nk0P;dca0Oet,li6pula50rnst42;c2Itic6;al scie6i2;nti5;a6umb0;nn0y6;er,ma4Lwright;lgrim,one0;a8iloso7otogra7ra6ysi1V;se;ph0;ntom,rmaci5;r6ssi1T;form0s4O;i3El,nel3Yr8st1tr6wn;i6on;arWot;ent4Wi42tn0;ccupa4ffBp8r7ut6;ca5l0B;ac4Iganiz0ig2Fph2;er3t6;i1Jomet6;ri5;ic0spring;aBe9ie4Xo7u6;n,rser3J;b6mad,vi4V;le2Vo4D;i6mesis,phew;ce,ghb1;nny,rr3t1X;aEeDiAo7u6yst1Y;m8si16;der3gul,m7n6th0;arDk;!my;ni7s6;f02s0Jt0;on,st0;chan1Qnt1rcha4;gi9k0n8rtyr,t6y1;e,riar6;ch;ag0iac;ci2stra3I;a7e2Aieutena4o6;rd,s0v0;bor0d7ndlo6ss,urea3Fwy0ym2;rd;!y;!s28;e8o7u6;ggl0;gg0urna2U;st0;c3Hdol,llu3Ummigra4n6; l9c1Qfa4habi42nov3s7ve6;nt1stig3;pe0Nt6;a1Fig3ru0M;aw;airFeBistoAo8u6ygie1K;man6sba2H;!ita8;bo,st6usekN;age,e3P;ri2;ir,r6;m7o6;!ine;it;dress0sty2C;aLeIhostGirl26ladi3oCrand7u6;e5ru;c9daug0Jfa8m7pa6s2Y;!re4;a,o6;th0;hi1B;al7d6lf0;!de3A;ie,k6te26;eep0;!wr6;it0;isha,n6;i6tl04;us;mbl0rden0;aDella,iAo7r6;eela2Nie1P;e,re6ster pare4;be1Hm2r6st0;unn0;an2ZgZlmm17nanci0r6tt0;e6st la2H; marsh2OfigXm2;rm0th0;conoEdDlectriCm8n7x6;amin0cellency,i2A;emy,trepreneur,vironmenta1J;c8p6;er1loye6;e,r;ee;ci2;it1;mi5;aKeBi8ork,ri7u6we02;de,tche2H;ft0v0;ct3eti7plom2Hre6va;ct1;ci2ti2;aDcor3fencCi0InAput9s7tectLvel6;op0;ce1Ge6ign0;rt0;ee,y;iz6;en;em2;c1Ml0;d8nc0redev7ug6;ht0;il;!dy;a06e04fo,hXitizenWlToBr9u6;r3stomer6;! representat6;ive;e3it6;ic;lJmGnAord9rpor1Nu7w6;boy,ork0;n6ri0;ciTte1Q;in3;fidantAgressSs9t6;e0Kr6;ibut1o6;ll0;tab13ul1O;!e;edi2m6pos0rade;a0EeQissi6;on0;leag8on7um6;ni5;el;ue;e6own;an0r6;ic,k;!s;a9e7i6um;ld;erle6f;ad0;ir7nce6plFract0;ll1;m2wI;lebri6o;ty;dBptAr6shi0;e7pe6;nt0;r,t6;ak0;ain;et;aMeLiJlogg0oErBu6;dd0Fild0rgl9siness6;m2p7w6;om2;ers05;ar;i7o6;!k0th0;cklay0de,gadi0;hemi2oge8y6;!frie6;nd;ym2;an;cyc6sR;li5;atbox0ings;by,nk0r6;b0on7te6;nd0;!e07;c04dWge4nQpLrHsFtAu7yatull6;ah;nt7t6;h1oG;!ie;h8t6;e6orney;nda4;ie5le6;te;sis00tron6;aut,om0;chbis8isto7tis6;an,t;crU;hop;ost9p6;ari6rentiS;ti6;on;le;a9cest1im3nou8y6;bo6;dy;nc0;ly5rc6;hi5;mi8v6;entur0is1;er;ni7r6;al;str3;at1;or;counBquaintanArob9t6;ivi5or,re6;ss;st;at;ce;ta4;nt","Adj|Noun":"true¦0:16;a1Db17c0Ud0Re0Mf0Dg0Ah08i06ju05l02mWnUoSpNrIsBt7u4v1watershed;a1ision0Z;gabo4nilla,ria1;b0Vnt;ndergr1pstairs;adua14ou1;nd;a3e1oken,ri0;en,r1;min0rori13;boo,n;age,e5ilv0Flack,o3quat,ta2u1well;bordina0Xper5;b0Lndard;ciali0Yl1vereign;e,ve16;cret,n1ri0;ior;a4e2ou1ubbiL;nd,tiY;ar,bBl0Wnt0p1side11;resent0Vublican;ci0Qsh;a4eriodic0last0Zotenti0r1;emi2incip0o1;!fession0;er,um;rall4st,tie0U;ff1pposi0Hv0;ens0Oi0C;agg01ov1uts;el;a5e3iniatJo1;bi01der07r1;al,t0;di1tr0N;an,um;le,riG;attOi2u1;sh;ber0ght,qC;stice,veniT;de0mpressioYn1;cumbe0Edividu0no0Dsta0Eterim;alf,o1umdrum;bby,melF;en2old,ra1;ph0Bve;er0ious;a7e5i4l3u1;git03t1;ure;uid;ne;llow,m1;aFiL;ir,t,vo1;riOuriO;l3p00x1;c1ecutUpeV;ess;d1iK;er;ar2e1;mographUrivO;k,l2;hiGlassSo2rude,unn1;ing;m5n1operK;creCstitueOte2vertab1;le;mpor1nt;ary;ic,m2p1;anion,lex;er2u1;ni8;ci0;al;e5lank,o4r1;i2u1;te;ef;ttom,urgeois;st;cadem9d6l2ntarct9r1;ab,ct8;e3tern1;at1;ive;rt;oles1ult;ce1;nt;ic","Adj|Past":"true¦0:4Q;1:4C;2:4H;3:4E;a44b3Tc36d2Je29f20g1Wh1Si1Jj1Gkno1Fl1Am15n12o0Xp0Mqu0Kr08sLtEuAv9w4yellow0;a7ea6o4rinkl0;r4u3Y;n,ri0;k31th3;rp0sh0tZ;ari0e1O;n5p4s0;d1li1Rset;cov3derstood,i4;fi0t0;a8e3Rhr7i6ouTr4urn0wi4C;a4imm0ou2G;ck0in0pp0;ed,r0;eat2Qi37;m0nn0r4;get0ni2T;aOcKeIhGimFm0Hoak0pDt7u4;bsid3Ogge44s4;pe4ta2Y;ct0nd0;a8e7i2Eok0r5u4;ff0mp0nn0;ength2Hip4;ed,p0;am0reotyp0;in0t0;eci4ik0oH;al3Efi0;pRul1;a4ock0ut;d0r0;a4c1Jle2t31;l0s3Ut0;a6or5r4;at4e25;ch0;r0tt3;t4ut0;is2Mur1;aEe5o4;tt0;cAdJf2Bg9je2l8m0Knew0p7qu6s4;eTpe2t4;or0ri2;e3Dir0;e1lac0;at0e2Q;i0Rul1;eiv0o4ycl0;mme2Lrd0v3;in0lli0ti2A;a4ot0;li28;aCer30iBlAo9r5u4;mp0zzl0;e6i2Oo4;ce2Fd4lo1Anou30pos0te2v0;uc0;fe1CocCp0Iss0;i2Kli1L;ann0e2CuS;ck0erc0ss0;ck0i2Hr4st0;allLk0;bse7c6pp13rgan2Dver4;lo4whelm0;ok0;cupi0;rv0;aJe5o4;t0uri1A;ed0gle2;a6e5ix0o4ut0ys1N;di1Nt15u26;as0Clt0;n4rk0;ag0ufact0A;e6i5o4;ad0ck0st,v0;cens0m04st0;ft,v4;el0;tt0wn;a5o15u4;dg0s1B;gg0;llumSmpAn4sol1;br0cre1Ldebt0f8jZspir0t5v4;it0olv0;e4ox0Y;gr1n4re23;d0si15;e2l1o1Wuri1;li0o01r4;ov0;a6e1o4um03;ok0r4;ri0Z;mm3rm0;i6r5u4;a1Bid0;a0Ui0Rown;ft0;aAe9i8l6oc0Ir4;a4i0oz0Y;ctHg19m0;avo0Ju4;st3;ni08tt0x0;ar0;d0il0sc4;in1;dCl1mBn9quipp0s8x4;agger1c6p4te0T;a0Se4os0;ct0rie1D;it0;cap0tabliZ;cha0XgFha1As4;ur0;a0Zbarra0N;i0Buc1;aMeDi5r4;a01i0;gni08miniSre2s4;a9c6grun0Ft4;o4re0Hu17;rt0;iplWou4;nt0r4;ag0;bl0;cBdRf9l8p7ra6t5v4;elop0ot0;ail0ermQ;ng0;re07;ay0ight0;e4in0o0M;rr0;ay0enTor1;m5t0z4;ed,zl0;ag0p4;en0;aPeLhIlHo9r6u4;lt4r0stom03;iv1;a5owd0u4;sh0;ck0mp0;d0loAm7n4ok0v3;centr1f5s4troC;id3olid1;us0;b5pl4;ic1;in0;r0ur0;assi9os0utt3;ar5i4;ll0;g0m0;lebr1n6r4;ti4;fi0;tralJ;g0lcul1;aDewild3iCl9o7r5urn4;ed,t;ok4uis0;en;il0r0t4und;tl0;e5i4;nd0;ss0;as0;ffl0k0laMs0tt3;bPcNdKfIg0lFmaz0nDppBrm0ss9u5wa4;rd0;g5thor4;iz0;me4;nt0;o6u4;m0r0;li0re4;ci1;im1ticip1;at0;a5leg0t3;er0;rm0;fe2;ct0;ju5o7va4;nc0;st0;ce4knowledg0;pt0;and5so4;rb0;on0;ed",Singular:"true¦0:5J;1:5H;2:4W;3:4S;4:52;5:57;6:5L;7:56;8:5B;a52b4Lc3Nd35e2Xf2Og2Jh28in24j23k22l1Um1Ln1Ho1Bp0Rqu0Qr0FsZtMuHvCw9x r58yo yo;a9ha3Po3Q;f3i4Rt0Gy9;! arou39;arCeAideo ga2Qo9;cabu4Jl5C;gOr9t;di4Zt1Y;iety,ni4P;nBp30rAs 9;do43s5E;bani1in0;coordinat3Ader9;estima1to24we41; rex,aKeJhHiFoErBuAv9;! show;m2On2rntLto1D;agedy,ib9o4E;e,u9;n0ta46;ni1p2rq3L;c,er,m9;etF;ing9ree26;!y;am,mp3F;ct2le6x return;aNcMeKhor4QiJkHoGpin off,tDuBy9;ll9ner7st4T;ab2X;b9i1n28per bowl,rro1X;st3Ltot0;atAipe2Go1Lrate7udent9;! lo0I;i39u1;ft ser4Lmeo1I;elet5i9;ll,r3V;b38gn2Tte;ab2Jc9min3B;t,urity gua2N;e6ho2Y;bbatic0la3Jndwi0Qpi5;av5eDhetor2iAo9;de6om,w;tAv9;erb2C;e,u0;bDcBf9publ2r10spi1;er9orm3;e6r0;i9ord label;p2Ht0;a1u46;estion mark,ot2F;aPeMhoLiIlGoErAu9yram1F;ddi3HpErpo1Js3J;eBo9;bl3Zs9;pe3Jta1;dic1Rmi1Fp1Qroga8ss relea1F;p9rt0;py;a9ebisci1;q2Dte;cn2eAg9;!gy;!r;ne call,tocoK;anut,dAr9t0yo1;cen3Jsp3K;al,est0;nop4rAt9;e,hog5;adi11i2V;atme0bj3FcBpia1rde0thers,utspok5ve9wn3;n,r9;ti0Pview;cuAe9;an;pi3;arBitAot9umb3;a2Fhi2R;e,ra1;cot2ra8;aFeCiAo9ur0;nopo4p18rni2Nsq1Rti36uld;c,li11n0As9tt5;chief,si34;dAnu,t9;al,i3;al,ic;gna1mm0nd15rsupi0te9yf4;ri0;aDegCiBu9;ddi1n9;ch;me,p09; Be0M;bor14y9; 9er;up;eyno1itt5;el4ourn0;cBdices,itia8ni25sAtel0Lvert9;eb1J;e28titu1;en8i2T;aIeEighDoAu9;man right,s22;me9rmoFsp1Ftb0K;! r9;un; scho0YriY;a9i1N;d9v5; start,pho9;ne;ndful,sh brown,v5ze;aBelat0Ilaci3r9ul4yp1S;an9enadi3id;a1Cd slam,ny;df4r9;l2ni1I;aGeti1HiFlu1oCrAun9;er0;ee market,i9onti3;ga1;l4ur9;so9;me;ePref4;br2mi4;conoFffi7gg,lecto0Rmbas1EnCpidem2s1Zth2venBxAyel9;id;ampZempl0Nte6;i19t;er7terp9;ri9;se;my;eLiEoBr9ump tru0U;agonf4i9;er,ve thru;cAg7i4or,ssi3wn9;side;to0EumenE;aEgniDnn3sAvide9;nd;conte6incen8p9tri11;osi9;ti0C;ta0H;le0X;athBcAf9ni0terre6;ault 05err0;al,im0;!b9;ed;aWeThMiLlJoDr9;edit caBuc9;ib9;le;rd;efficDke,lCmmuniqLnsApi3rr0t0Xus9yo1;in;erv9uI;ato02;ic,lQ;ie6;er7i9oth;e6n2;ty,vil wM;aDeqCick5ocoBr9;istmas car9ysanthemum;ol;la1;ue;ndeli3racteri9;st2;iAllEr9;e0tifica1;liZ;hi3nFpErCt9ucus;erpi9hedr0;ll9;ar;!bohyd9ri3;ra1;it0;aAe,nib0t9;on;l,ry;aMeLiop2leJoHrDu9;nny,r9tterf4;g9i0;la9;ry;eakAi9;ck;fa9throB;st;dy,ro9wl;ugh;mi9;sh;an,l4;nkiArri3;er;ng;cSdMlInFppeti1rDsBtt2utop9;sy;ic;ce6pe9;ct;r9sen0;ay;ecAoma4tiA;ly;do1;i5l9;er7y;gy;en; hominDjAvan9;tage;ec8;ti9;ve;em;cCeAqui9;tt0;ta1;te;iAru0;al;de6;nt","Person|Noun":"true¦a0Eb07c03dWeUfQgOhLjHkiGlFmCnBolive,p7r4s3trini06v1wa0;ng,rd,tts;an,enus,iol0;a,et;ky,onPumm09;ay,e1o0uby;bin,d,se;ed,x;a2e1o0;l,tt04;aLnJ;dYge,tR;at,orm;a0eloW;t0x,ya;!s;a9eo,iH;ng,tP;a2e1o0;lGy;an,w3;de,smi4y;a0erb,iOolBuntR;ll,z0;el;ail,e0iLuy;ne;a1ern,i0lo;elds,nn;ith,n0;ny;a0dEmir,ula,ve;rl;a4e3i1j,ol0;ly;ck,x0;ie;an,ja;i0wn;sy;am,h0liff,rystal;a0in,ristian;mbers,ri0;ty;a4e3i2o,r0ud;an0ook;dy;ll;nedict,rg;k0nks;er;l0rt;fredo,ma","Actor|Verb":"true¦aCb8c5doctor,engineAfool,g3host,judge,m2nerd,p1recruit,scout,ushAvolunteAwi0;mp,tneA;arent,ilot;an,ime;eek,oof,r0uide;adu8oom;ha1o0;ach,nscript,ok;mpion,uffeur;o2u0;lly,tch0;er;ss;ddi1ffili0rchite1;ate;ct",MaleName:"true¦0:H6;1:FZ;2:DS;3:GQ;4:CZ;5:FV;6:GM;7:FP;8:GW;9:ET;A:C2;B:GD;aF8bE1cCQdBMeASfA1g8Yh88i7Uj6Sk6Bl5Mm48n3So3Ip33qu31r26s1Et0Ru0Ov0CwTxSyHzC;aCor0;cChC1karia,nAT;!hDkC;!aF6;!ar7CeF5;aJevgenBSoEuC;en,rFVsCu3FvEF;if,uf;nDs6OusC;ouf,s6N;aCg;s,tC;an,h0;hli,nCrosE1ss09;is,nC;!iBU;avi2ho5;aPeNiDoCyaEL;jcieBJlfgang,odrFutR;lFnC;f8TsC;lCt1;ow;bGey,frEhe4QlC;aE5iCy;am,e,s;ed8iC;d,ed;eAur;i,ndeD2rn2sC;!l9t1;lDyC;l1ne;lDtC;!er;aCHy;aKernDAiFladDoC;jteB0lodymyr;!iC;mFQsDB;cFha0ktBZnceDrgCOvC;a0ek;!nC;t,zo;!e4StBV;lCnC7sily;!entC;in9J;ghE2lCm70nax,ri,sm0;riCyss87;ch,k;aWeRhNiLoGrEuDyC;!l2roEDs1;n6r6E;avD0eCist0oy,um0;ntCRvBKy;bFdAWmCny;!asDmCoharu;aFFie,y;!z;iA6y;mCt4;!my,othy;adEeoDia0SomC;!as;!dor91;!de4;dFrC;enBKrC;anBJeCy;ll,nBI;!dy;dgh,ha,iCnn2req,tsu5V;cDAka;aYcotWeThPiMlobod0oKpenc2tEurDvenAEyCzym1;ed,lvest2;aj,e9V;anFeDuC;!aA;fan17phEQvCwaA;e77ie;!islaCl9;v,w;lom1rBuC;leymaDHta;dDgmu9UlCm1yabonga;as,v8B;!dhart8Yn9;aEeClo75;lCrm0;d1t1;h9Jne,qu1Jun,wn,yne;aDbastiEDk2Yl5Mpp,rgCth,ymoCU;e1Dio;m4n;!tC;!ie,y;eDPlFmEnCq67tosCMul;dCj2UtiA5;e01ro;!iATkeB6mC4u5;!ik,vato9K;aZeUheC8iRoGuDyC;an,ou;b99dDf4peAssC;!elEG;ol00y;an,bLc7MdJel,geIh0lHmGnEry,sDyC;!ce;ar7Ocoe,s;!aCnBU;ld,n;an,eo;a7Ef;l7Jr;e3Eg2n9olfo,riC;go;bBNeDH;cCl9;ar87c86h54kCo;!ey,ie,y;cFeA3gDid,ubByCza;an8Ln06;g85iC;naC6s;ep;ch8Kfa5hHin2je8HlGmFndEoHpha5sDul,wi36yC;an,mo8O;h9Im4;alDSol3O;iD0on;f,ph;ul;e9CinC;cy,t1;aOeLhilJiFrCyoG;aDeC;m,st1;ka85v2O;eDoC;tr;r8GtC;er,ro;!ipCl6H;!p6U;dCLrcy,tC;ar,e9JrC;!o7;b9Udra8So9UscAHtri62ulCv8I;!ie,o7;ctav6Ji2lImHndrBRrGsDtCum6wB;is,to;aDc6k6m0vCwaBE;al79;ma;i,vR;ar,er;aDeksandr,ivC;er,i2;f,v;aNeLguyBiFoCu3O;aDel,j4l0ma0rC;beAm0;h,m;cFels,g5i9EkDlC;es,s;!au,h96l78olaC;!i,y;hCkCol76;ol75;al,d,il,ls1vC;ilAF;hom,tC;e,hC;anCy;!a5i5;aYeViLoGuDyC;l4Nr1;hamDr84staC;fa,p6E;ed,mG;di10e,hamEis4JntDritz,sCussa;es,he;e,y;ad,ed,mC;ad,ed;cGgu5hai,kFlEnDtchC;!e8O;a9Pik;house,o7t1;ae73eC3ha8Iolaj;ah,hDkC;!ey,y;aDeC;al,l;el,l;hDlv3rC;le,ri8Ev4T;di,met;ay0c00gn4hWjd,ks2NlTmadZnSrKsXtDuric7VxC;imilBKwe8B;eHhEi69tCus,y69;!eo,hCia7;ew,i67;eDiC;as,eu,s;us,w;j,o;cHiGkFlEqu8Qsha83tCv3;iCy;!m,n;in,on;el,o7us;a6Yo7us;!elCin,o7us;!l8o;frAEi5Zny,u5;achDcoCik;lm;ai,y;amDdi,e5VmC;oud;adCm6W;ou;aulCi9P;ay;aWeOiMloyd,oJuDyC;le,nd1;cFdEiDkCth2uk;a7e;gi,s,z;ov7Cv6Hw6H;!as,iC;a6Een;g0nn52renDuCvA4we7D;!iS;!zo;am,n4oC;n5r;a9Yevi,la5KnHoFst2thaEvC;eCi;nte;bo;nCpo8V;!a82el,id;!nC;aAy;mEnd1rDsz73urenCwr6K;ce,t;ry,s;ar,beAont;aOeIhalHiFla4onr63rDu5SylC;e,s;istCzysztof;i0oph2;er0ngsl9p,rC;ilA9k,ollos;ed,id;en0iGnDrmCv4Z;it;!dDnCt1;e2Ny;ri4Z;r,th;cp2j4mEna8BrDsp6them,uC;ri;im,l;al,il;a03eXiVoFuC;an,lCst3;en,iC;an,en,o,us;aQeOhKkub4AnIrGsDzC;ef;eDhCi9Wue;!ua;!f,ph;dCge;i,on;!aCny;h,s,th6J;anDnC;!ath6Hie,n72;!nC;!es;!l,sCy;ph;o,qu3;an,mC;!i,m6V;d,ffFns,rCs4;a7JemDmai7QoCry;me,ni1H;i9Dy;!e73rC;ey,y;cKdBkImHrEsDvi2yC;dBs1;on,p2;ed,oDrCv67;e6Qod;d,s61;al,es5Wis1;a,e,oCub;b,v;ob,qu13;aTbNchiMgLke53lija,nuKonut,rIsEtCv0;ai,suC;ki;aDha0i8XmaCsac;el,il;ac,iaC;h,s;a,vinCw3;!g;k,nngu6X;nac1Xor;ka;ai,rahC;im;aReLoIuCyd6;beAgGmFsC;eyDsC;a3e3;in,n;ber5W;h,o;m2raDsse3wC;a5Pie;c49t1K;a0Qct3XiGnDrC;beAman08;dr7VrC;iCy2N;!k,q1R;n0Tt3S;bKlJmza,nIo,rEsDyC;a5KdB;an,s0;lEo67r2IuCv9;hi5Hki,tC;a,o;an,ey;k,s;!im;ib;a08e00iUlenToQrMuCyorgy;iHnFsC;!taC;f,vC;!e,o;n6tC;er,h2;do,lC;herDlC;auCerQ;me;aEegCov2;!g,orC;!io,y;dy,h7C;dfr9nza3XrDttfC;ri6C;an,d47;!n;acoGlEno,oCuseppe;rgiCvan6O;!o,s;be6Ies,lC;es;mo;oFrC;aDha4HrCt;it,y;ld,rd8;ffErgC;!e7iCy;!os;!r9;bElBrCv3;eCla1Nr4Hth,y;th;e,rC;e3YielC;!i4;aXeSiQlOorrest,rCyod2E;aHedFiC;edDtC;s,z;ri18;!d42eri11riC;ck,k;nCs2;cEkC;ie,lC;in,yn;esLisC;!co,z3M;etch2oC;ri0yd;d5lConn;ip;deriFliEng,rC;dinaCg4nan0B;nd8;pe,x;co;bCdi,hd;iEriC;ce,zC;io;an,en,o;benez2dZfrYit0lTmMnJo3rFsteb0th0ugenEvCymBzra;an,eCge4D;ns,re3K;!e;gi,iDnCrol,v3w3;est8ie,st;cCk;!h,k;o0DriCzo;co,qC;ue;aHerGiDmC;aGe3A;lCrh0;!iC;a10o,s;s1y;nu5;beAd1iEliDm2t1viCwood;n,s;ot28s;!as,j5Hot,sC;ha;a3en;!dGg6mFoDua2QwC;a2Pin;arC;do;oZuZ;ie;a04eTiOmitrNoFrag0uEwDylC;an,l0;ay3Hig4D;a3Gdl9nc0st3;minFnDri0ugCvydGy2S;!lF;!a36nCov0;e1Eie,y;go,iDykC;as;cCk;!k;i,y;armuFetDll1mitri7neCon,rk;sh;er,m6riC;ch;id;andLepak,j0lbeAmetri4nIon,rGsEvDwCxt2;ay30ey;en,in;hawn,moC;nd;ek,riC;ck;is,nC;is,y;rt;re;an,le,mKnIrEvC;e,iC;!d;en,iEne0PrCyl;eCin,yl;l45n;n,o,us;!iCny;el,lo;iCon;an,en,on;a0Fe0Ch03iar0lRoJrFuDyrC;il,us;rtC;!is;aEistC;iaCob12;no;ig;dy,lInErC;ey,neliCy;s,us;nEor,rDstaC;nt3;ad;or;by,e,in,l3t1;aHeEiCyde;fCnt,ve;fo0Xt1;menDt4;us;s,t;rFuDyC;!t1;dCs;e,io;enC;ce;aHeGrisC;!toC;phCs;!eC;!r;st2t;d,rCs;b5leC;s,y;cDdrCs6;ic;il;lHmFrC;ey,lDroCy;ll;!o7t1;er1iC;lo;!eb,v3;a09eZiVjorn,laUoSrEuCyr1;ddy,rtKst2;er;aKeFiEuDyC;an,ce,on;ce,no;an,ce;nDtC;!t;dDtC;!on;an,on;dFnC;dDisC;lav;en,on;!foOl9y;bby,gd0rCyd;is;i0Lke;bElDshC;al;al,lL;ek;nIrCshoi;at,nEtC;!raC;m,nd;aDhaCie;rd;rd8;!iDjam3nCs1;ie,y;to;kaMlazs,nHrC;n9rDtC;!holomew;eCy;tt;ey;dCeD;ar,iC;le;ar1Nb1Dd16fon15gust3hm12i0Zja0Yl0Bm07nTputsiSrGsaFugustEveDyCziz;a0kh0;ry;o,us;hi;aMchiKiJjun,mHnEon,tCy0;em,hCie,ur8;ur;aDoC;!ld;ud,v;aCin;an,nd8;!el,ki;baCe;ld;ta;aq;aMdHgel8tCw6;hoFoC;iDnC;!i8y;ne;ny;er7rCy;eDzC;ej;!as,i,j,s,w;!s;s,tolC;iCy;!y;ar,iEmaCos;nu5r;el;ne,r,t;aVbSdBeJfHiGl01onFphonsEt1vC;aPin;on;e,o;so,zo;!sR;!onZrC;ed;c,jaHksFssaHxC;!andC;er,rC;e,os,u;andCei;ar,er,r;ndC;ro;en;eDrecC;ht;rt8;dd3in,n,sC;taC;ir;ni;dDm6;ar;an,en;ad,eC;d,t;in;so;aGi,olErDvC;ik;ian8;f8ph;!o;mCn;!a;dGeFraDuC;!bakr,lfazl;hCm;am;!l;allFel,oulaye,ulC;!lDrahm0;an;ah,o;ah;av,on",Uncountable:"true¦0:2E;1:2L;2:33;a2Ub2Lc29d22e1Rf1Ng1Eh16i11j0Yk0Wl0Rm0Hn0Do0Cp03rZsLt9uran2Jv7w3you gu0E;a5his17i4oo3;d,l;ldlife,ne;rm8t1;apor,ernacul29i3;neg28ol1Otae;eDhBiAo8r4un3yranny;a,gst1B;aff2Oea1Ko4ue nor3;th;o08u3;bleshoot2Ose1Tt;night,othpas1Vwn3;foEsfoE;me off,n;er3und1;e,mod2S;a,nnis;aDcCeBhAi9ki8o7p6t4u3weepstak0;g1Unshi2Hshi;ati08e3;am,el;ace2Keci0;ap,cc1meth2C;n,ttl0;lk;eep,ingl0or1C;lf,na1Gri0;ene1Kisso1C;d0Wfe2l4nd,t3;i0Iurn;m1Ut;abi0e4ic3;e,ke15;c3i01laxa11search;ogni10rea10;a9e8hys7luto,o5re3ut2;amble,mis0s3ten20;en1Zs0L;l3rk;i28l0EyH; 16i28;a24tr0F;nt3ti0M;i0s;bstetri24vercrowd1Qxyg09;a5e4owada3utella;ys;ptu1Ows;il poliZtional securi2;aAe8o5u3;m3s1H;ps;n3o1K;ey,o3;gamy;a3cha0Elancholy,rchandi1Htallurgy;sl0t;chine3g1Aj1Hrs,thema1Q; learn1Cry;aught1e6i5ogi4u3;ck,g12;c,s1M;ce,ghtn18nguis1LteratWv1;ath1isVss;ara0EindergartPn3;icke0Aowled0Y;e3upit1;a3llyfiGwel0G;ns;ce,gnor6mp5n3;forma00ter3;net,sta07;atiSort3rov;an18;a7e6isto09o3ung1;ckey,mework,ne4o3rseradi8spitali2use arrest;ky;s2y;adquarteXre;ir,libut,ppiHs3;hi3te;sh;ene8l6o5r3um,ymnas11;a3eZ;niUss;lf,re;ut3yce0F;en; 3ti0W;edit0Hpo3;ol;aNicFlour,o4urnit3;ure;od,rgive3uri1wl;ness;arCcono0LducaBlectr9n7quip8thi0Pvery6x3;ist4per3;ti0B;en0J;body,o08th07;joy3tertain3;ment;ici2o3;ni0H;tiS;nings,th;emi02i6o4raugh3ynas2;ts;pe,wnstai3;rs;abet0ce,s3;honZrepu3;te;aDelciChAivi07l8o3urrency;al,ld w6mmenta5n3ral,ttIuscoB;fusiHt 3;ed;ry;ar;assi01oth0;es;aos,e3;eMwK;us;d,rO;a8i6lood,owlHread5u3;ntGtt1;er;!th;lliarJs3;on;g3ss;ga3;ge;cKdviJeroGirFmBn6ppeal court,r4spi3thleL;rin;ithmet3sen3;ic;i6y3;o4th3;ing;ne;se;en5n3;es2;ty;ds;craft;bi8d3nau7;yna3;mi6;ce;id,ous3;ti3;cs",Infinitive:"true¦0:9G;1:9T;2:AD;3:90;4:9Z;5:84;6:AH;7:A9;8:92;9:A0;A:AG;B:AI;C:9V;D:8R;E:8O;F:97;G:6H;H:7D;a94b8Hc7Jd68e4Zf4Mg4Gh4Ai3Qj3Nk3Kl3Bm34nou48o2Vp2Equ2Dr1Es0CtZuTvRwI;aOeNiLors5rI;eJiI;ng,te;ak,st3;d5e8TthI;draw,er;a2d,ep;i2ke,nIrn;d1t;aIie;liADniAry;nJpI;ho8Llift;cov1dJear8Hfound8DlIplug,rav82tie,ve94;eaAo3X;erIo;cut,go,staAFvalA3w2G;aSeQhNoMrIu73;aIe72;ffi3Smp3nsI;aBfo7CpI;i8oD;pp3ugh5;aJiJrIwaD;eat5i2;nk;aImA0;ch,se;ck3ilor,keImp1r8L;! paD;a0Ic0He0Fh0Bi0Al08mugg3n07o05p02qu01tUuLwI;aJeeIim;p,t5;ll7Wy;bNccMffLggeCmmKppJrI;mouFpa6Zvi2;o0re6Y;ari0on;er,i4;e7Numb;li9KmJsiIveD;de,st;er9it;aMe8MiKrI;ang3eIi2;ng27w;fIng;f5le;b,gg1rI;t3ve;a4AiA;a4UeJit,l7DoI;il,of;ak,nd;lIot7Kw;icEve;atGeak,i0O;aIi6;m,y;ft,ng,t;aKi6CoJriIun;nk,v6Q;ot,rt5;ke,rp5tt1;eIll,nd,que8Gv1w;!k,m;aven9ul8W;dd5tis1Iy;a0FeKiJoI;am,t,ut;d,p5;a0Ab08c06d05f01group,hea00iZjoi4lXmWnVpTq3MsOtMup,vI;amp,eJiIo3B;sEve;l,rI;e,t;i8rI;ie2ofE;eLiKpo8PtIurfa4;o24rI;aHiBuctu8;de,gn,st;mb3nt;el,hra0lIreseF;a4e71;d1ew,o07;aHe3Fo2;a7eFiIo6Jy;e2nq41ve;mbur0nf38;r0t;inKleBocus,rJuI;el,rbiA;aBeA;an4e;aBu4;ei2k8Bla43oIyc3;gni39nci3up,v1;oot,uI;ff;ct,d,liIp;se,ze;tt3viA;aAenGit,o7;aWerUinpoiFlumm1LoTrLuI;b47ke,niArIt;poDsuI;aFe;eMoI;cKd,fe4XhibEmo7noJpo0sp1tru6vI;e,i6o5L;un4;la3Nu8;aGclu6dJf1occupy,sup0JvI;a6BeF;etermi4TiB;aGllu7rtr5Ksse4Q;cei2fo4NiAmea7plex,sIva6;eve8iCua6;mp1rItrol,ve;a6It6E;bOccuNmEpMutLverIwe;l07sJtu6Yu0wI;helm;ee,h1F;gr5Cnu2Cpa4;era7i4Ipo0;py,r;ey,seItaH;r2ss;aMe0ViJoIultiply;leCu6Pw;micJnIspla4;ce,g3us;!k;iIke,na9;m,ntaH;aPeLiIo0u3N;ke,ng1quIv5;eIi6S;fy;aKnIss5;d,gI;th5;rn,ve;ng2Gu1N;eep,idnJnI;e4Cow;ap;oHuI;gg3xtaI;po0;gno8mVnIrk;cTdRfQgeChPitia7ju8q1CsNtKun6EvI;a6eIo11;nt,rt,st;erJimi6BoxiPrI;odu4u6;aBn,pr03ru6C;iCpi8tIu8;all,il,ruB;abEibE;eCo3Eu0;iIul9;ca7;i7lu6;b5Xmer0pI;aLer4Uin9ly,oJrI;e3Ais6Bo2;rt,se,veI;riA;le,rt;aLeKiIoiCuD;de,jaInd1;ck;ar,iT;mp1ng,pp5raIve;ng5Mss;ath1et,iMle27oLrI;aJeIow;et;b,pp3ze;!ve5A;gg3ve;aTer45i5RlSorMrJuI;lf4Cndrai0r48;eJiIolic;ght5;e0Qsh5;b3XeLfeEgJsI;a3Dee;eIi2;!t;clo0go,shIwa4Z;ad3F;att1ee,i36;lt1st5;a0OdEl0Mm0FnXquip,rWsVtGvTxI;aRcPeDhOiNpJtIu6;ing0Yol;eKi8lIo0un9;aHoI;it,re;ct,di7l;st,t;a3oDu3B;e30lI;a10u6;lt,mi28;alua7oI;ke,l2;chew,pou0tab19;a0u4U;aYcVdTfSgQhan4joy,lPqOrNsuMtKvI;e0YisI;a9i50;er,i4rI;aHenGuC;e,re;iGol0F;ui8;ar9iC;a9eIra2ulf;nd1;or4;ang1oIu8;r0w;irc3lo0ou0ErJuI;mb1;oaGy4D;b3ct;bKer9pI;hasiIow1;ze;aKody,rI;a4oiI;d1l;lm,rk;ap0eBuI;ci40de;rIt;ma0Rn;a0Re04iKo,rIwind3;aw,ed9oI;wn;agno0e,ff1g,mi2Kne,sLvI;eIul9;rIst;ge,t;aWbVcQlod9mant3pNru3TsMtI;iIoDu37;lJngI;uiA;!l;ol2ua6;eJlIo0ro2;a4ea0;n0r0;a2Xe36lKoIu0S;uIv1;ra9;aIo0;im;a3Kur0;b3rm;af5b01cVduBep5fUliTmQnOpMrLsiCtaGvI;eIol2;lop;ch;a20i2;aDiBloIoD;re,y;oIy;te,un4;eJoI;liA;an;mEv1;a4i0Ao06raud,y;ei2iMla8oKrI;ee,yI;!pt;de,mIup3;missi34po0;de,ma7ph1;aJrief,uI;g,nk;rk;mp5rk5uF;a0Dea0h0Ai09l08oKrIurta1G;a2ea7ipp3uI;mb3;ales4e04habEinci6ll03m00nIrro6;cXdUfQju8no7qu1sLtKvI;eIin4;ne,r9y;aHin2Bribu7;er2iLoli2Epi8tJuI;lt,me;itu7raH;in;d1st;eKiJoIroFu0;rm;de,gu8rm;ss;eJoI;ne;mn,n0;eIlu6ur;al,i2;buCe,men4pI;eIi3ly;l,te;eBi6u6;r4xiC;ean0iT;rcumveFte;eJirp,oI;o0p;riAw;ncIre5t1ulk;el;a02eSi6lQoPrKuI;iXrIy;st,y;aLeaKiJoad5;en;ng;stfeLtX;ke;il,l11mba0WrrMth1;eIow;ed;!coQfrie1LgPhMliLqueaKstJtrIwild1;ay;ow;th;e2tt3;a2eJoI;ld;ad;!in,ui3;me;bysEckfi8ff3tI;he;b15c0Rd0Iff0Ggree,l0Cm09n03ppZrXsQttOuMvJwaE;it;eDoI;id;rt;gIto0X;meF;aIeCraB;ch,in;pi8sJtoI;niA;aKeIi04u8;mb3rt,ss;le;il;re;g0Hi0ou0rI;an9i2;eaKly,oiFrI;ai0o2;nt;r,se;aMi0GnJtI;icipa7;eJoIul;un4y;al;ly0;aJu0;se;lga08ze;iKlI;e9oIu6;t,w;gn;ix,oI;rd;a03jNmiKoJsoI;rb;pt,rn;niIt;st1;er;ouJuC;st;rn;cLhie2knowled9quiItiva7;es4re;ce;ge;eQliOoKrJusI;e,tom;ue;mIst;moJpI;any,liA;da7;ma7;te;pt;andPduBet,i6oKsI;coKol2;ve;liArt,uI;nd;sh;de;ct;on",Person:"true¦0:1Q;a29b1Zc1Md1Ee18f15g13h0Ri0Qj0Nk0Jl0Gm09n06o05p00rPsItCusain bolt,v9w4xzibit,y1;anni,oko on2uji,v1;an,es;en,o;a3ednesday adams,i2o1;lfram,o0Q;ll ferrell,z khalifa;lt disn1Qr1;hol,r0G;a2i1oltai06;n dies0Zrginia wo17;lentino rossi,n goG;a4h3i2ripp,u1yra banks;lZpac shakur;ger woods,mba07;eresa may,or;kashi,t1ylor;um,ya1B;a5carlett johanss0h4i3lobodan milosevic,no2ocr1Lpider1uperm0Fwami; m0Em0E;op dogg,w whi1H;egfried,nbad;akespeaTerlock holm1Sia labeouf;ddam hussa16nt1;a cla11ig9;aAe6i5o3u1za;mi,n dmc,paul,sh limbau1;gh;bin hood,d stew16nald1thko;in0Mo;han0Yngo starr,valdo;ese witherspo0i1mbrandt;ll2nh1;old;ey,y;chmaninoff,ffi,iJshid,y roma1H;a4e3i2la16o1uff daddy;cahont0Ie;lar,p19;le,rZ;lm17ris hilt0;leg,prah winfr0Sra;a2e1iles cra1Bostradam0J; yo,l5tt06wmQ;pole0s;a5e4i2o1ubar03;by,lie5net,rriss0N;randa ju1tt romn0M;ly;rl0GssiaB;cklemo1rkov,s0ta hari,ya angelou;re;ady gaga,e1ibera0Pu;bron jam0Xch wale1e;sa;anye west,e3i1obe bryant;d cudi,efer suther1;la0P;ats,sha;a2effers0fk,k rowling,rr tolki1;en;ck the ripp0Mwaharlal nehru,y z;liTnez,ron m7;a7e5i3u1;lk hog5mphrey1sa01;! bog05;l1tl0H;de; m1dwig,nry 4;an;ile selassFlle ber4m3rrison1;! 1;ford;id,mo09;ry;ast0iannis,o1;odwPtye;ergus0lorence nightinga08r1;an1ederic chopN;s,z;ff5m2nya,ustaXzeki1;el;eril lagasse,i1;le zatop1nem;ek;ie;a6e4i2octor w1rake;ho;ck w1ego maradoC;olf;g1mi lovaOnzel washingt0;as;l1nHrth vadR;ai lNt0;a8h5lint0o1thulhu;n1olio;an,fuci1;us;on;aucKop2ristian baMy1;na;in;millo,ptain beefhe4r1;dinal wols2son1;! palmF;ey;art;a8e5hatt,i3oHro1;ck,n1;te;ll g1ng crosby;atB;ck,nazir bhut2rtil,yon1;ce;to;nksy,rack ob1;ama;l 6r3shton kutch2vril lavig8yn ra1;nd;er;chimed2istot1;le;es;capo2paci1;no;ne",Adjective:"true¦0:AI;1:BS;2:BI;3:BA;4:A8;5:84;6:AV;7:AN;8:AF;9:7H;A:BQ;B:AY;C:BC;D:BH;E:9Y;aA2b9Ec8Fd7We79f6Ng6Eh61i4Xj4Wk4Tl4Im41n3Po36p2Oquart7Pr2Ds1Dt14uSvOwFye29;aMeKhIiHoF;man5oFrth7G;dADzy;despreB1n w97s86;acked1UoleF;!sa6;ather1PeFll o70ste1D;!k5;nt1Ist6Ate4;aHeGiFola5T;bBUce versa,gi3Lle;ng67rsa5R;ca1gBSluAV;lt0PnLpHrGsFttermoBL;ef9Ku3;b96ge1; Hb32pGsFtiAH;ca6ide d4R;er,i85;f52to da2;a0Fbeco0Hc0Bd04e02f01gu1XheaBGiXkn4OmUnTopp06pRrNsJtHus0wF;aFiel3K;nt0rra0P;app0eXoF;ld,uS;eHi37o5ApGuF;perv06spec39;e1ok9O;en,ttl0;eFu5;cogn06gul2RlGqu84sF;erv0olv0;at0en33;aFrecede0E;id,rallel0;am0otic0;aFet;rri0tF;ch0;nFq26vers3;sur0terFv7U;eFrupt0;st0;air,inish0orese98;mploy0n7Ov97xpF;ect0lain0;eHisFocume01ue;clFput0;os0;cid0rF;!a8Scov9ha8Jlyi8nea8Gprivileg0sMwF;aFei9I;t9y;hGircumcFonvin2U;is0;aFeck0;lleng0rt0;b20ppea85ssuGttend0uthorF;iz0;mi8;i4Ara;aLeIhoHip 25oGrF;anspare1encha1i2;geth9leADp notch,rpB;rny,ugh6H;ena8DmpGrFs6U;r49tia4;eCo8P;leFst4M;nt0;a0Dc09e07h06i04ki03l01mug,nobbi4XoVpRqueami4XtKuFymb94;bHccinAi generis,pFr5;erFre7N;! dup9b,vi70;du0li7Lp6IsFurb7J;eq9Atanda9X;aKeJi16o2QrGubboFy4Q;rn;aightFin5GungS; fFfF;or7V;adfa9Pri6;lwa6Ftu82;arHeGir6NlendBot Fry;on;c3Qe1S;k5se; call0lImb9phistic16rHuFviV;ndFth1B;proof;dBry;dFub6; o2A;e60ipF;pe4shod;ll0n d7R;g2HnF;ceEg6ist9;am3Se9;co1Zem5lfFn6Are7; suf4Xi43;aGholFient3A;ar5;rlFt4A;et;cr0me,tisfac7F;aOeIheumatoBiGoF;bu8Ztt7Gy3;ghtFv3; 1Sf6X;cJdu8PlInown0pro69sGtF;ard0;is47oF;lu2na1;e1Suc45;alcit8Xe1ondi2;bBci3mpa1;aSePicayu7laOoNrGuF;bl7Tnjabi;eKiIoF;b7VfGmi49pFxi2M;er,ort81;a7uD;maFor,sti7va2;!ry;ciDexis0Ima2CpaB;in55puli8G;cBid;ac2Ynt 3IrFti2;ma40tFv7W;!i3Z;i2YrFss7R;anoBtF; 5XiF;al,s5V;bSffQkPld OnMrLth9utKverF;!aIbMdHhGni75seas,t,wF;ei74rou74;a63e7A;ue;ll;do1Ger,si6A;d3Qg2Aotu5Z; bFbFe on o7g3Uli7;oa80;fashion0school;!ay; gua7XbFha5Uli7;eat;eHligGsF;ce7er0So1C;at0;diFse;a1e1;aOeNiMoGuF;anc0de; moEnHrthFt6V;!eFwe7L;a7Krn;chaGdescri7Iprof30sF;top;la1;ght5;arby,cessa4ighbor5wlyw0xt;k0usiaFv3;ti8;aQeNiLoHuF;dIltiF;facet0p6;deHlGnFot,rbBst;ochro4Xth5;dy;rn,st;ddle ag0nF;dbloZi,or;ag9diocEga,naGrFtropolit4Q;e,ry;ci8;cIgenta,inHj0Fkeshift,mmGnFri4Oscu61ver18;da5Dy;ali4Lo4U;!stream;abEho;aOeLiIoFumberi8;ngFuti1R;stan3RtF;erm,i4H;ghtGteraF;l,ry,te;heart0wei5O;ft JgFss9th3;al,eFi0M;nda4;nguBps0te5;apGind5noF;wi8;ut;ad0itte4uniW;ce co0Hgno6Mll0Cm04nHpso 2UrF;a2releF;va1; ZaYcoWdReQfOgrNhibi4Ri05nMoLsHtFvalu5M;aAeF;nDrdepe2K;a7iGolFuboI;ub6ve1;de,gF;nifica1;rdi5N;a2er;own;eriIiLluenVrF;ar0eq5H;pt,rt;eHiGoFul1O;or;e,reA;fiFpe26termi5E;ni2;mpFnsideCrreA;le2;ccuCdeq5Ene,ppr4J;fFsitu,vitro;ro1;mJpF;arHeGl15oFrop9;li2r11;n2LrfeA;ti3;aGeFi18;d4BnD;tuE;egGiF;c0YteC;al,iF;tiF;ma2;ld;aOelNiLoFuma7;a4meInHrrGsFur5;ti6;if4E;e58o3U; ma3GsF;ick;ghfalut2HspF;an49;li00pf33;i4llow0ndGrdFtM; 05coEworki8;sy,y;aLener44iga3Blob3oKrGuF;il1Nng ho;aFea1Fizzl0;cGtF;ef2Vis;ef2U;ld3Aod;iFuc2D;nf2R;aVeSiQlOoJrF;aGeFil5ug3;q43tf2O;gFnt3S;i6ra1;lk13oHrF; keeps,eFge0Vm9tu41;g0Ei2Ds3R;liF;sh;ag4Mowe4uF;e1or45;e4nF;al,i2;d Gmini7rF;ti6ve1;up;bl0lDmIr Fst pac0ux;oGreacF;hi8;ff;ed,ili0R;aXfVlTmQnOqu3rMthere3veryday,xF;aApIquisi2traHuF;be48lF;ta1;!va2L;edRlF;icF;it;eAstF;whi6; Famor0ough,tiE;rou2sui2;erGiF;ne1;ge1;dFe2Aoq34;er5;ficF;ie1;g9sF;t,ygF;oi8;er;aWeMiHoGrFue;ea4owY;ci6mina1ne,r31ti8ubQ;dact2Jfficult,m,sGverF;ge1se;creGePjoi1paCtF;a1inA;et,te; Nadp0WceMfiLgeneCliJmuEpeIreliAsGvoF;id,ut;pFtitu2ul1L;eCoF;nde1;ca2ghF;tf13;a1ni2;as0;facto;i5ngero0I;ar0Ce09h07i06l05oOrIuF;rmudgeon5stoma4teF;sy;ly;aIeHu1EystalF; cleFli7;ar;epy;fFv17z0;ty;erUgTloSmPnGrpoCunterclVveFy;rt;cLdJgr21jIsHtrF;aFi2;dic0Yry;eq1Yta1;oi1ug3;escenFuN;di8;a1QeFiD;it0;atoDmensuCpF;ass1SulF;so4;ni3ss3;e1niza1;ci1J;ockwiD;rcumspeAvil;eFintzy;e4wy;leGrtaF;in;ba2;diac,ef00;a00ePiLliJoGrFuck nak0;and new,isk,on22;gGldface,naF; fi05fi05;us;nd,tF;he;gGpartisFzarE;an;tiF;me;autifOhiNlLnHsFyoN;iWtselF;li8;eGiFt;gn;aFfi03;th;at0oF;v0w;nd;ul;ckwards,rF;e,rT; priori,b13c0Zd0Tf0Ng0Ihe0Hl09mp6nt06pZrTsQttracti0MuLvIwF;aGkF;wa1B;ke,re;ant garGeraF;ge;de;diIsteEtF;heFoimmu7;nt07;re;to4;hGlFtu2;eep;en;bitIchiv3roHtF;ifiFsy;ci3;ga1;ra4;ry;pFt;aHetizi8rF;oprF;ia2;llFre1;ed,i8;ng;iquFsy;at0e;ed;cohKiJkaHl,oGriFterX;ght;ne,of;li7;ne;ke,ve;olF;ic;ad;ain07gressiIi6rF;eeF;ab6;le;ve;fGraB;id;ectGlF;ue1;ioF;na2; JaIeGvF;erD;pt,qF;ua2;ma1;hoc,infinitum;cuCquiGtu3u2;al;esce1;ra2;erSjeAlPoNrKsGuF;nda1;e1olu2trF;aAuD;se;te;eaGuF;pt;st;aFve;rd;aFe;ze;ct;ra1;nt",Pronoun:"true¦elle,h3i2me,she,th0us,we,you;e0ou;e,m,y;!l,t;e,im",Preposition:"true¦aPbMcLdKexcept,fIinGmid,notwithstandiWoDpXqua,sCt7u4v2w0;/o,hereSith0;! whHin,oW;ersus,i0;a,s a vis;n1p0;!on;like,til;h1ill,oward0;!s;an,ereby,r0;ough0u;!oM;ans,ince,o that,uch G;f1n0ut;!to;!f;! 0to;effect,part;or,r0;om;espite,own,u3;hez,irca;ar1e0oBy;sides,tween;ri7;bo8cross,ft7lo6m4propos,round,s1t0;!op;! 0;a whole,long 0;as;id0ong0;!st;ng;er;ut",SportsTeam:"true¦0:18;1:1E;2:1D;3:14;a1Db15c0Sd0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Am01new UoRpKqueens parkJreal salt lake,sBt6utah jazz,vancouver whitecaps,w4yW;ashington 4h10;natio1Mredski2wizar0W;ampa bay 7e6o4;ronto 4ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasD;buccanee0ra0K;a8eattle 6porting kansas0Wt4; louis 4oke0V;c1Drams;marine0s4;eah13ounH;cramento Rn 4;antonio spu0diego 4francisco gJjose earthquak1;char08paB; ran07;a9h6ittsburgh 5ortland t4;imbe0rail blaze0;pirat1steele0;il4oenix su2;adelphia 4li1;eagl1philNunE;dr1;akland 4klahoma city thunder,rlando magic;athle0Lrai4;de0;england 8orleans 7york 4;g5je3knYme3red bul0Xy4;anke1;ian3;pelica2sain3;patrio3revolut4;ion;anchEeAi4ontreal impact;ami 8lwaukee b7nnesota 4;t5vi4;kings;imberwolv1wi2;rewe0uc0J;dolphi2heat,marli2;mphis grizz4ts;li1;a6eic5os angeles 4;clippe0dodFlaB;esterV; galaxy,ke0;ansas city 4nF;chiefs,roya0D; pace0polis col3;astr05dynamo,rocke3texa2;olden state warrio0reen bay pac4;ke0;allas 8e4i04od6;nver 6troit 4;lio2pisto2ti4;ge0;broncYnugge3;cowbo5maver4;icZ;ys;arEelLhAincinnati 8leveland 6ol4;orado r4umbus crew sc;api7ocki1;brow2cavalie0guar4in4;dia2;bengaVre4;ds;arlotte horAicago 4;b5cubs,fire,wh4;iteB;ea0ulQ;diff4olina panthe0; city;altimore Alackburn rove0oston 6rooklyn 4uffalo bilN;ne3;ts;cel5red4; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 4;brav1falco2h4;awA;ns;es;on villa,r4;os;c6di4;amondbac4;ks;ardi4;na4;ls",Unit:"true¦a07b04cXdWexVfTgRhePinYjoule0BkMlJmDnan08oCp9quart0Bsq ft,t7volts,w6y2ze3°1µ0;g,s;c,f,n;dVear1o0;ttR; 0s 0;old;att,b;erNon0;!ne02;ascals,e1i0;cXnt00;rcent,tJ;hms,unceY;/s,e4i0m²,²,³;/h,cro2l0;e0liK;!²;grLsR;gCtJ;it1u0;menQx;erPreP;b5elvins,ilo1m0notO;/h,ph,²;!byGgrEmCs;ct0rtzL;aJogrC;allonJb0ig3rB;ps;a0emtEl oz,t4;hrenheit,radG;aby9;eci3m1;aratDe1m0oulombD;²,³;lsius,nti0;gr2lit1m0;et0;er8;am7;b1y0;te5;l,ps;c2tt0;os0;econd1;re0;!s","Noun|Gerund":"true¦0:3O;1:3M;2:3N;3:3D;4:32;5:2V;6:3E;7:3K;8:36;9:3J;A:3B;a3Pb37c2Jd27e23f1Vg1Sh1Mi1Ij1Gk1Dl18m13n11o0Wp0Pques0Sr0EsTtNunderMvKwFyDzB;eroi0oB;ni0o3P;aw2eB;ar2l3;aEed4hispe5i5oCrB;ap8est3i1;n0ErB;ki0r31;i1r2s9tc9;isualizi0oB;lunt1Vti0;stan4ta6;aFeDhin6iCraBy8;c6di0i2vel1M;mi0p8;aBs1;c9si0;l6n2s1;aUcReQhOiMkatKl2Wmo6nowJpeItFuCwB;ea5im37;b35f0FrB;fi0vB;e2Mi2J;aAoryt1KrCuB;d2KfS;etc9ugg3;l3n4;bCi0;ebBi0;oar4;gnBnAt1;a3i0;ip8oB;p8rte2u1;a1r27t1;hCo5reBulp1;a2Qe2;edu3oo3;i3yi0;aKeEi4oCuB;li0n2;oBwi0;fi0;aFcEhear7laxi0nDpor1sB;pon4tructB;r2Iu5;de5;or4yc3;di0so2;p8ti0;aFeacek20laEoCrBublis9;a1Teten4in1oces7;iso2siB;tio2;n2yi0;ckaAin1rB;ki0t1O;fEpeDrganiCvB;erco24ula1;si0zi0;ni0ra1;fe5;avi0QeBur7;gotia1twor6;aDeCi2oB;de3nito5;a2dita1e1ssaA;int0XnBrke1;ifUufactu5;aEeaDiBodAyi0;cen7f1mi1stB;e2i0;r2si0;n4ug9;iCnB;ea4it1;c6l3;ogAuB;dAgg3stif12;ci0llust0VmDnBro2;nova1sp0NterBven1;ac1vie02;agi2plo4;aDea1iCoBun1;l4w3;ki0ri0;nd3rB;roWvB;es1;aCene0Lli4rBui4;ee1ie0N;rde2the5;aHeGiDlCorBros1un4;e0Pmat1;ir1oo4;gh1lCnBs9;anZdi0;i0li0;e3nX;r0Zscina1;a1du01nCxB;erci7plo5;chan1di0ginB;ee5;aLeHiGoub1rCum8wB;el3;aDeCiB;bb3n6vi0;a0Qs7;wi0;rTscoDvi0;ba1coZlBvelo8;eCiB;ve5;ga1;nGti0;aVelebUhSlPoDrBur3yc3;aBos7yi0;f1w3;aLdi0lJmFnBo6pi0ve5;dDsCvinB;ci0;trBul1;uc1;muniDpB;lBo7;ai2;ca1;lBo5;ec1;c9ti0;ap8eaCimToBubT;ni0t9;ni0ri0;aBee5;n1t1;ra1;m8rCs1te5;ri0;vi0;aPeNitMlLoGrDuB;dge1il4llBr8;yi0;an4eat9oadB;cas1;di0;a1mEokB;i0kB;ee8;pi0;bi0;es7oa1;c9i0;gin2lonAt1;gi0;bysit1c6ki0tt3;li0;ki0;bando2cGdverti7gi0pproac9rgDssuCtB;trac1;mi0;ui0;hi0;si0;coun1ti0;ti0;ni0;ng",PhrasalVerb:"true¦0:92;1:96;2:8H;3:8V;4:8A;5:83;6:85;7:98;8:90;9:8G;A:8X;B:8R;C:8U;D:8S;E:70;F:97;G:8Y;H:81;I:7H;J:79;a9Fb7Uc6Rd6Le6Jf5Ig50h4Biron0j47k40l3Em31n2Yo2Wp2Cquiet Hr1Xs0KtZuXvacuu6QwNyammerBzK;ero Dip LonK;e0k0;by,ov9up;aQeMhLiKor0Mrit19;mp0n3Fpe0r5s5;ackAeel Di0S;aLiKn33;gh 3Wrd0;n Dr K;do1in,oJ;it 79k5lk Lrm 69sh Kt83v60;aw3do1o7up;aw3in,oC;rgeBsK;e 2herE;a00eYhViRoQrMuKypP;ckErn K;do1in,oJup;aLiKot0y 30;ckl7Zp F;ck HdK;e 5Y;n7Wp 3Es5K;ck MdLe Kghten 6me0p o0Rre0;aw3ba4do1in,up;e Iy 2;by,oG;ink Lrow K;aw3ba4in,up;ba4ov9up;aKe 77ll62;m 2r 5M;ckBke Llk K;ov9shit,u47;aKba4do1in,leave,o4Dup;ba4ft9pa69w3;a0Vc0Te0Mh0Ii0Fl09m08n07o06p01quar5GtQuOwK;earMiK;ngLtch K;aw3ba4o8K; by;cKi6Bm 2ss0;k 64;aReQiPoNrKud35;aigh2Det75iK;ke 7Sng K;al6Yup;p Krm2F;by,in,oG;c3Ln3Lr 2tc4O;p F;c3Jmp0nd LrKveAy 2O;e Ht 2L;ba4do1up;ar3GeNiMlLrKurB;ead0ingBuc5;a49it 6H;c5ll o3Cn 2;ak Fe1Xll0;a3Bber 2rt0und like;ap 5Vow Duggl5;ash 6Noke0;eep NiKow 6;cLp K;o6Dup;e 68;in,oK;ff,v9;de19gn 4NnKt 6Gz5;gKkE; al6Ale0;aMoKu5W;ot Kut0w 7M;aw3ba4f48oC;c2WdeEk6EveA;e Pll1Nnd Orv5tK; Ktl5J;do1foLin,o7upK;!on;ot,r5Z;aw3ba4do1in,o33up;oCto;al66out0rK;ap65ew 6J;ilAv5;aXeUiSoOuK;b 5Yle0n Kstl5;aLba4do1inKo2Ith4Nu5P;!to;c2Xr8w3;ll Mot LpeAuK;g3Ind17;a2Wf3Po7;ar8in,o7up;ng 68p oKs5;ff,p18;aKelAinEnt0;c6Hd K;o4Dup;c27t0;aZeYiWlToQrOsyc35uK;ll Mn5Kt K;aKba4do1in,oJto47up;pa4Dw3;a3Jdo1in,o21to45up;attleBess KiNop 2;ah2Fon;iLp Kr4Zu1Gwer 6N;do1in,o6Nup;nt0;aLuK;gEmp 6;ce u20y 6D;ck Kg0le 4An 6p5B;oJup;el 5NncilE;c53ir 39n0ss MtLy K;ba4oG; Hc2R;aw3ba4in,oJ;pKw4Y;e4Xt D;aLerd0oK;dAt53;il Hrrow H;aTeQiPoLuK;ddl5ll I;c1FnkeyMp 6uthAve K;aKdo1in,o4Lup;l4Nw3; wi4K;ss0x 2;asur5e3SlLss K;a21up;t 6;ke Ln 6rKs2Ax0;k 6ryA;do,fun,oCsure,up;a02eViQoLuK;ck0st I;aNc4Fg MoKse0;k Kse4D;aft9ba4do1forw37in56o0Zu46;in,oJ;d 6;e NghtMnLsKve 00;ten F;e 2k 2; 2e46;ar8do1in;aMt LvelK; oC;do1go,in,o7up;nEve K;in,oK;pKut;en;c5p 2sh LtchBughAy K;do1o59;in4Po7;eMick Lnock K;do1oCup;oCup;eLy K;in,up;l Ip K;aw3ba4do1f04in,oJto,up;aMoLuK;ic5mpE;ke3St H;c43zz 2;a01eWiToPuK;nLrrKsh 6;y 2;keLt K;ar8do1;r H;lKneErse3K;d Ke 2;ba4dKfast,o0Cup;ear,o1;de Lt K;ba4on,up;aw3o7;aKlp0;d Ml Ir Kt 2;fKof;rom;f11in,o03uW;cPm 2nLsh0ve Kz2P;at,it,to;d Lg KkerP;do1in,o2Tup;do1in,oK;ut,v9;k 2;aZeTive Rloss IoMrLunK; f0S;ab hold,in43ow 2U; Kof 2I;aMb1Mit,oLr8th1IuK;nd9;ff,n,v9;bo7ft9hQw3;aw3bKdo1in,oJrise,up,w3;a4ir2H;ar 6ek0t K;aLb1Fdo1in,oKr8up;ff,n,ut,v9;cLhKl2Fr8t,w3;ead;ross;d aKng 2;bo7;a0Ee07iYlUoQrMuK;ck Ke2N;ar8up;eLighten KownBy 2;aw3oG;eKshe27; 2z5;g 2lMol Krk I;aKwi20;bo7r8;d 6low 2;aLeKip0;sh0;g 6ke0mKrKtten H;e F;gRlPnNrLsKzzle0;h F;e Km 2;aw3ba4up;d0isK;h 2;e Kl 1T;aw3fPin,o7;ht ba4ure0;ePnLsK;s 2;cMd K;fKoG;or;e D;d04l 2;cNll Krm0t1G;aLbKdo1in,o09sho0Eth08victim;a4ehi2O;pa0C;e K;do1oGup;at Kdge0nd 12y5;in,o7up;aOi1HoNrK;aLess 6op KuN;aw3b03in,oC;gBwB; Ile0ubl1B;m 2;a0Ah05l02oOrLut K;aw3ba4do1oCup;ackBeep LoKy0;ss Dwd0;by,do1in,o0Uup;me NoLuntK; o2A;k 6l K;do1oG;aRbQforOin,oNtKu0O;hLoKrue;geth9;rough;ff,ut,v9;th,wK;ard;a4y;paKr8w3;rt;eaLose K;in,oCup;n 6r F;aNeLiK;ll0pE;ck Der Kw F;on,up;t 2;lRncel0rOsMtch LveE; in;o1Nup;h Dt K;doubt,oG;ry LvK;e 08;aw3oJ;l Km H;aLba4do1oJup;ff,n,ut;r8w3;a0Ve0MiteAl0Fo04rQuK;bblNckl05il0Dlk 6ndl05rLsKtMy FzzA;t 00;n 0HsK;t D;e I;ov9;anWeaUiLush K;oGup;ghQng K;aNba4do1forMin,oLuK;nd9p;n,ut;th;bo7lKr8w3;ong;teK;n 2;k K;do1in,o7up;ch0;arTg 6iRn5oPrNssMttlLunce Kx D;aw3ba4;e 6; ar8;e H;do1;k Dt 2;e 2;l 6;do1up;d 2;aPeed0oKurt0;cMw K;aw3ba4do1o7up;ck;k K;in,oC;ck0nk0stA; oQaNef 2lt0nd K;do1ov9up;er;up;r Lt K;do1in,oCup;do1o7;ff,nK;to;ck Pil0nMrgLsK;h D;ainBe D;g DkB; on;in,o7;aw3do1in,oCup;ff,ut;ay;ct FdQir0sk MuctionA; oG;ff;ar8o7;ouK;nd; o7;d K;do1oKup;ff,n;wn;o7up;ut",ProperNoun:"true¦aIbDc8dalhousHe7f5gosford,h4iron maiden,kirby,landsdowne,m2nis,r1s0wembF;herwood,paldiB;iel,othwe1;cgi0ercedes,issy;ll;intBudsB;airview,lorence,ra0;mpt9nco;lmo,uro;a1h0;arlt6es5risti;rl0talina;et4i0;ng;arb3e0;et1nt0rke0;ley;on;ie;bid,jax","Person|Place":"true¦a8d6h4jordan,k3orlando,s1vi0;ctor9rgin9;a0ydney;lvador,mara,ntia4;ent,obe;amil0ous0;ton;arw2ie0;go;lexandr1ust0;in;ia",LastName:"true¦0:BR;1:BF;2:B5;3:BH;4:AX;5:9Y;6:B6;7:BK;8:B0;9:AV;A:AL;B:8Q;C:8G;D:7K;E:BM;F:AH;aBDb9Zc8Wd88e81f7Kg6Wh64i60j5Lk4Vl4Dm39n2Wo2Op25quispe,r1Ls0Pt0Ev03wTxSyKzG;aIhGimmerm6A;aGou,u;ng,o;khar5ytsE;aKeun9BiHoGun;koya32shiBU;!lG;diGmaz;rim,z;maGng;da,g52mo83sGzaC;aChiBV;iao,u;aLeJiHoGright,u;jcA5lff,ng;lGmm0nkl0sniewsC;kiB1liams33s3;bGiss,lt0;b,er,st0;a6Vgn0lHtG;anabe,s3;k0sh,tG;e2Non;aLeKiHoGukD;gt,lk5roby5;dHllalGnogr3Kr1Css0val3S;ba,ob1W;al,ov4;lasHsel8W;lJn dIrgBEsHzG;qu7;ilyEqu7siljE;en b6Aijk,yk;enzueAIverde;aPeix1VhKi2j8ka43oJrIsui,uG;om5UrG;c2n0un1;an,emblA7ynisC;dorAMlst3Km4rrAth;atch0i8UoG;mHrG;are84laci79;ps3sG;en,on;hirDkah9Mnaka,te,varA;a06ch01eYhUiRmOoMtIuHvGzabo;en9Jobod3N;ar7bot4lliv2zuC;aIeHoG;i7Bj4AyanAB;ele,in2FpheBvens25;l8rm0;kol5lovy5re7Tsa,to,uG;ng,sa;iGy72;rn5tG;!h;l71mHnGrbu;at9cla9Egh;moBo7M;aIeGimizu;hu,vchG;en8Luk;la,r1G;gu9infe5YmGoh,pulveA7rra5P;jGyG;on5;evi6iltz,miHneid0roed0uGwarz;be3Elz;dHtG;!t,z;!t;ar4Th8ito,ka4OlJnGr4saCto,unde19v4;ch7dHtGz;a5Le,os;b53e16;as,ihDm4Po0Y;aVeSiPoJuHyG;a6oo,u;bio,iz,sG;so,u;bKc8Fdrigue67ge10j9YmJosevelt,sItHux,wG;e,li6;a9Ch;enb4Usi;a54e4L;erts15i93;bei4JcHes,vGzzo;as,e9;ci,hards12;ag2es,iHut0yG;es,nol5N;s,t0;dImHnGsmu97v6C;tan1;ir7os;ic,u;aUeOhMiJoHrGut8;asad,if6Zochazk27;lishc2GpGrti72u10we76;e3Aov51;cHe45nG;as,to;as70hl0;aGillips;k,m,n6I;a3Hde3Wete0Bna,rJtG;ersHrovGters54;!a,ic;!en,on;eGic,kiBss3;i9ra,tz,z;h86k,padopoulIrk0tHvG;ic,l4N;el,te39;os;bMconn2Ag2TlJnei6PrHsbor6XweBzG;dem7Rturk;ella4DtGwe6N;ega,iz;iGof7Hs8I;vGyn1R;ei9;aSri1;aPeNiJoGune50ym2;rHvGwak;ak4Qik5otn66;odahl,r4S;cholsZeHkolGls4Jx3;ic,ov84;ls1miG;!n1;ils3mG;co4Xec;gy,kaGray2sh,var38;jiGmu9shiG;ma;a07c04eZiWoMuHyeG;rs;lJnIrGssoli6S;atGp03r7C;i,ov4;oz,te58;d0l0;h2lOnNo0RrHsGza1A;er,s;aKeJiIoz5risHtG;e56on;!on;!n7K;au,i9no,t5J;!lA;r1Btgome59;i3El0;cracFhhail5kkeHlG;l0os64;ls1;hmeJiIj30lHn3Krci0ssiGyer2N;!er;n0Po;er,j0;dDti;cartHlG;aughl8e2;hy;dQe7Egnu68i0jer3TkPmNnMrItHyG;er,r;ei,ic,su21thews;iHkDquAroqu8tinG;ez,s;a5Xc,nG;!o;ci5Vn;a5UmG;ad5;ar5e6Kin1;rig77s1;aVeOiLoJuHyG;!nch;k4nGo;d,gu;mbarGpe3Fvr4we;di;!nGu,yana2B;coln,dG;b21holm,strom;bedEfeKhIitn0kaHn8rGw35;oy;!j;m11tG;in1on1;bvGvG;re;iGmmy,ng,rs2Qu,voie,ws3;ne,t1F;aZeYh2iWlUnez50oNrJuHvar2woG;k,n;cerGmar68znets5;a,o34;aHem0isGyeziu;h23t3O;m0sni4Fus3KvG;ch4O;bay57ch,rh0Usk16vaIwalGzl5;czGsC;yk;cIlG;!cGen4K;huk;!ev4ic,s;e8uiveG;rt;eff0kGl4mu9nnun1;ucF;ll0nnedy;hn,llKminsCne,pIrHstra3Qto,ur,yGzl5;a,s0;j0Rls22;l2oG;or;oe;aPenOha6im14oHuG;ng,r4;e32hInHrge32u6vG;anD;es,ss3;anHnsG;en,on,t3;nesGs1R;en,s1;kiBnings,s1;cJkob4EnGrv0E;kDsG;en,sG;en0Ion;ks3obs2A;brahimDglesi5Nke5Fl0Qno07oneIshikHto,vanoG;u,v54;awa;scu;aVeOiNjaltal8oIrist50uG;!aGb0ghAynh;m2ng;a6dz4fIjgaa3Hk,lHpUrGwe,x3X;ak1Gvat;mAt;er,fm3WmG;ann;ggiBtchcock;iJmingw4BnHrGss;nand7re9;deGriks1;rs3;kkiHnG;on1;la,n1;dz4g1lvoQmOns0ZqNrMsJuIwHyG;asFes;kiB;g1ng;anHhiG;mo14;i,ov0J;di6p0r10t;ue;alaG;in1;rs1;aVeorgUheorghe,iSjonRoLrJuGw3;errGnnar3Co,staf3Ctierr7zm2;a,eG;ro;ayli6ee2Lg4iffithGub0;!s;lIme0UnHodGrbachE;e,m2;calvAzale0S;dGubE;bGs0E;erg;aj,i;bs3l,mGordaO;en7;iev3U;gnMlJmaIndFo,rGsFuthi0;cGdn0za;ia;ge;eaHlG;agh0i,o;no;e,on;aVerQiLjeldsted,lKoIrHuG;chs,entAji41ll0;eem2iedm2;ntaGrt8urni0wl0;na;emi6orA;lipIsHtzgeraG;ld;ch0h0;ovG;!ic;hatDnanIrG;arGei9;a,i;deY;ov4;b0rre1D;dKinsJriksIsGvaB;cob3GpGtra3D;inoza,osiQ;en,s3;te8;er,is3warG;ds;aXePiNjurhuMoKrisco15uHvorakG;!oT;arte,boHmitru,nn,rGt3C;and,ic;is;g2he0Omingu7nErd1ItG;to;us;aGcki2Hmitr2Ossanayake,x3;s,z; JbnaIlHmirGrvisFvi,w2;!ov4;gado,ic;th;bo0groot,jo6lHsilGvriA;va;a cruz,e3uG;ca;hl,mcevsCnIt2WviG;dGes,s;ov,s3;ielsGku22;!en;ki;a0Be06hRiobQlarkPoIrGunningh1H;awfo0RivGuz;elli;h1lKntJoIrGs2Nx;byn,reG;a,ia;ke,p0;i,rer2K;em2liB;ns;!e;anu;aOeMiu,oIristGu6we;eGiaG;ns1;i,ng,p9uHwGy;!dH;dGng;huJ;!n,onGu6;!g;kJnIpm2ttHudhGv7;ry;erjee,o14;!d,g;ma,raboG;rty;bJl0Cng4rG;eghetHnG;a,y;ti;an,ota1C;cerAlder3mpbeLrIstGvadi0B;iGro;llo;doHl0Er,t0uGvalho;so;so,zo;ll;a0Fe01hYiXlUoNrKuIyG;rLtyG;qi;chan2rG;ke,ns;ank5iem,oGyant;oks,wG;ne;gdan5nIruya,su,uchaHyKziG;c,n5;rd;darGik;enG;ko;ov;aGond15;nco,zG;ev4;ancFshw16;a08oGuiy2;umGwmG;ik;ckRethov1gu,ktPnNrG;gJisInG;ascoGds1;ni;ha;er,mG;anG;!n;gtGit7nP;ss3;asF;hi;er,hG;am;b4ch,ez,hRiley,kk0ldw8nMrIshHtAu0;es;ir;bInHtlGua;ett;es,i0;ieYosa;dGik;a9yoG;padhyG;ay;ra;k,ng;ic;bb0Acos09d07g04kht05lZnPrLsl2tJyG;aHd8;in;la;chis3kiG;ns3;aImstro6sl2;an;ng;ujo,ya;dJgelHsaG;ri;ovG;!a;ersJov,reG;aGjEws;ss1;en;en,on,s3;on;eksejEiyEmeiIvG;ar7es;ez;da;ev;arwHuilG;ar;al;ams,l0;er;ta;as",Ordinal:"true¦eBf7nin5s3t0zeroE;enDhir1we0;lfCn7;d,t3;e0ixt8;cond,vent7;et0th;e6ie7;i2o0;r0urt3;tie4;ft1rst;ight0lev1;e0h,ie1;en0;th",Cardinal:"true¦bEeBf5mEnine7one,s4t0zero;en,h2rDw0;e0o;lve,n5;irt6ousands,ree;even2ix2;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illions",Multiple:"true¦b3hundred,m3qu2se1t0;housand,r2;pt1xt1;adr0int0;illion",City:"true¦0:74;1:61;2:6G;3:6J;4:5S;a68b53c4Id48e44f3Wg3Hh39i31j2Wk2Fl23m1Mn1Co19p0Wq0Ur0Os05tRuQvLwDxiBy9z5;a7h5i4Muri4O;a5e5ongsh0;ng3H;greb,nzib5G;ang2e5okoha3Sunfu;katerin3Hrev0;a5n0Q;m5Hn;arsBeAi6roclBu5;h0xi,zh5P;c7n5;d5nipeg,terth4;hoek,s1L;hi5Zkl3A;l63xford;aw;a8e6i5ladivost5Molgogr6L;en3lni6S;ni22r5;o3saill4N;lenc4Wncouv3Sr3ughn;lan bat1Crumqi,trecht;aFbilisi,eEheDiBo9r7u5;l21n63r5;in,ku;i5ondh62;es51poli;kyo,m2Zron1Pulo5;n,uS;an5jua3l2Tmisoa6Bra3;j4Tshui; hag62ssaloni2H;gucigal26hr0l av1U;briz,i6llinn,mpe56ng5rtu,shk2R;i3Esh0;an,chu1n0p2Eyu0;aEeDh8kopje,owe1Gt7u5;ra5zh4X;ba0Ht;aten is55ockholm,rasbou67uttga2V;an8e6i5;jiazhua1llo1m5Xy0;f50n5;ya1zh4H;gh3Kt4Q;att45o1Vv44;cramen16int ClBn5o paulo,ppo3Rrajevo; 7aa,t5;a 5o domin3E;a3fe,m1M;antonio,die3Cfrancisco,j5ped3Nsalvad0J;o5u0;se;em,t lake ci5Fz25;lou58peters24;a9e8i6o5;me,t59;ga,o5yadh;! de janei3F;cife,ims,nn3Jykjavik;b4Sip4lei2Inc2Pwalpindi;ingdao,u5;ez2i0Q;aFeEhDiCo9r7u6yong5;ya1;eb59ya1;a5etor3M;g52to;rt5zn0; 5la4Co;au prin0Melizabe24sa03;ls3Prae5Atts26;iladelph3Gnom pe1Aoenix;ki1tah tik3E;dua,lerYnaji,r4Ot5;na,r32;ak44des0Km1Mr6s5ttawa;a3Vlo;an,d06;a7ew5ing2Fovosibir1Jyc; 5cast36;del24orlea44taip14;g8iro4Wn5pl2Wshv33v0;ch6ji1t5;es,o1;a1o1;a6o5p4;ya;no,sa0W;aEeCi9o6u5;mb2Ani26sc3Y;gadishu,nt6s5;c13ul;evideo,pelli1Rre2Z;ami,l6n14s5;kolc,sissauga;an,waukee;cca,d5lbour2Mmph41ndo1Cssi3;an,ell2Xi3;cau,drAkass2Sl9n8r5shh4A;aca6ib5rakesh,se2L;or;i1Sy;a4EchFdal0Zi47;mo;id;aDeAi8o6u5vSy2;anMckn0Odhia3;n5s angel26;d2g bea1N;brev2Be3Lma5nz,sb2verpo28;!ss27; ma39i5;c5pzig;est16; p6g5ho2Wn0Cusan24;os;az,la33;aHharFiClaipeBo9rak0Du7y5;iv,o5;to;ala lump4n5;mi1sh0;hi0Hlka2Xpavog4si5wlo2;ce;da;ev,n5rkuk;gst2sha5;sa;k5toum;iv;bHdu3llakuric0Qmpa3Fn6ohsiu1ra5un1Iwaguc0Q;c0Pj;d5o,p4;ah1Ty;a7e6i5ohannesV;l1Vn0;dd36rusalem;ip4k5;ar2H;bad0mph1OnArkutUs7taXz5;mir,tapala5;pa;fah0l6tanb5;ul;am2Zi2H;che2d5;ianap2Mo20;aAe7o5yder2W; chi mi5ms,nolulu;nh;f6lsin5rakli2;ki;ei;ifa,lifax,mCn5rb1Dva3;g8nov01oi;aFdanEenDhCiPlasgBo9raz,u5;a5jr23;dal6ng5yaquil;zh1J;aja2Oupe;ld coa1Bthen5;bu2S;ow;ent;e0Uoa;sk;lw7n5za;dhi5gt1E;nag0U;ay;aisal29es,o8r6ukuya5;ma;ankfu5esno;rt;rt5sh0; wor6ale5;za;th;d5indhov0Pl paso;in5mont2;bur5;gh;aBe8ha0Xisp4o7resd0Lu5;b5esseldorf,nkirk,rb0shanbe;ai,l0I;ha,nggu0rtmu13;hradSl6nv5troit;er;hi;donghIe6k09l5masc1Zr es sala1KugavpiY;i0lU;gu,je2;aJebu,hAleve0Vo5raio02uriti1Q;lo7n6penhag0Ar5;do1Ok;akKst0V;gUm5;bo;aBen8i6ongqi1ristchur5;ch;ang m7ca5ttago1;go;g6n5;ai;du,zho1;ng5ttogr14;ch8sha,zh07;gliari,i9lga8mayenJn6pe town,r5tanO;acCdiff;ber1Ac5;un;ry;ro;aWeNhKirmingh0WoJr9u5;chareTdapeTenos air7r5s0tu0;g5sa;as;es;a9is6usse5;ls;ba6t5;ol;ne;sil8tisla7zzav5;il5;le;va;ia;goZst2;op6ubaneshw5;ar;al;iCl9ng8r5;g6l5n;in;en;aluru,hazi;fa6grade,o horizon5;te;st;ji1rut;ghd0BkFn9ot8r7s6yan n4;ur;el,r07;celo3i,ranquil09;ou;du1g6ja lu5;ka;alo6k5;ok;re;ng;ers5u;field;a05b02cc01ddis aba00gartaZhmedXizawl,lSmPnHqa00rEsBt7uck5;la5;nd;he7l5;an5;ta;ns;h5unci2;dod,gab5;at;li5;ngt2;on;a8c5kaOtwerp;hora6o3;na;ge;h7p5;ol5;is;eim;aravati,m0s5;terd5;am; 7buquerq6eppo,giers,ma5;ty;ue;basrah al qadim5mawsil al jadid5;ah;ab5;ad;la;ba;ra;idj0u dha5;bi;an;lbo6rh5;us;rg",Region:"true¦0:2O;1:2L;2:2U;3:2F;a2Sb2Fc21d1Wes1Vf1Tg1Oh1Ki1Fj1Bk16l13m0Sn09o07pYqVrSsJtEuBverAw6y4zacatec2W;akut0o0Fu4;cat1k09;a5est 4isconsin,yomi1O;bengal,virgin0;rwick3shington4;! dc;acruz,mont;dmurt0t4;ah,tar4; 2Pa12;a6e5laxca1Vripu21u4;scaEva;langa2nnessee,x2J;bas10m4smQtar29;aulip2Hil nadu;a9elang07i7o5taf16u4ylh1J;ff02rr09s1E;me1Gno1Uuth 4;cZdY;ber0c4kkim,naloa;hu1ily;n5rawak,skatchew1xo4;ny; luis potosi,ta catari2;a4hodeA;j4ngp0C;asth1shahi;ingh29u4;e4intana roo;bec,en6retaro;aAe6rince edward4unjab; i4;sl0G;i,n5r4;ak,nambu0F;a0Rnsylv4;an0;ha0Pra4;!na;axa0Zdisha,h4klaho21ntar4reg7ss0Dx0I;io;aLeEo6u4;evo le4nav0X;on;r4tt18va scot0;f9mandy,th4; 4ampton3;c6d5yo4;rk3;ako1O;aroli2;olk;bras1Nva0Dw4; 6foundland4;! and labrad4;or;brunswick,hamp3jers5mexiTyork4;! state;ey;galPyarit;aAeghala0Mi6o4;nta2r4;dov0elos;ch6dlanDn5ss4zor11;issippi,ouri;as geraPneso18;ig1oac1;dhy12harasht0Gine,lac07ni5r4ssachusetts;anhao,i el,ylG;p4toba;ur;anca3e4incoln3ouisI;e4iR;ds;a6e5h4omi;aka06ul2;dah,lant1ntucky,ra01;bardino,lmyk0ns0Qr4;achay,el0nata0X;alis6har4iangxi;kh4;and;co;daho,llino7n4owa;d5gush4;et0;ia2;is;a6ert5i4un1;dalFm0D;ford3;mp3rya2waii;ansu,eorg0lou7oa,u4;an4izhou,jarat;ajuato,gdo4;ng;cester3;lori4uji1;da;sex;ageUe7o5uran4;go;rs4;et;lawaMrby3;aFeaEh9o4rim08umbr0;ahui7l6nnectic5rsi4ventry;ca;ut;i03orado;la;e5hattisgarh,i4uvash0;apRhuahua;chn5rke4;ss0;ya;ra;lGm4;bridge3peche;a9ihar,r8u4;ck4ryat0;ingham3;shi4;re;emen,itish columb0;h0ja cal8lk7s4v7;hkorto4que;st1;an;ar0;iforn0;ia;dygHguascalientes,lBndhr9r5ss4;am;izo2kans5un4;achal 7;as;na;a 4;pradesh;a6ber5t4;ai;ta;ba5s4;ka;ma;ea",Place:"true¦0:4T;1:4V;2:44;3:4B;4:3I;a4Eb3Gc2Td2Ge26f25g1Vh1Ji1Fk1Cl14m0Vn0No0Jp08r04sTtNuLvJw7y5;a5o0Syz;kut1Bngtze;aDeChitBi9o5upatki,ycom2P;ki26o5;d5l1B;b3Ps5;i4to3Y;c0SllowbroCn5;c2Qgh2;by,chur1P;ed0ntw3Gs22;ke6r3St5;erf1f1; is0Gf3V;auxha3Mirgin is0Jost5;ok;laanbaatar,pto5xb3E;n,wn;a9eotihuac43h7ive49o6ru2Nsarskoe selo,u5;l2Dzigo47;nto,rquay,tt2J;am3e 5orn3E;bronx,hamptons;hiti,j mah0Iu1N;aEcotts bluff,eCfo,herbroQoApring9t7u5yd2F;dbu1Wn5;der03set3B;aff1ock2Nr5;atf1oud;hi37w24;ho,uth5; 1Iam1Zwo3E;a5i2O;f2Tt0;int lawrence riv3Pkhal2D;ayleigh,ed7i5oc1Z;chmo1Eo gran4ver5;be1Dfr09si4; s39cliffe,hi2Y;aCe9h8i5ompeii,utn2;c6ne5tcai2T; 2Pc0G;keri13t0;l,x;k,lh2mbr6n5r2J;n1Hzance;oke;cif38pahanaumokuak30r5;k5then0;si4w1K;ak7r6x5;f1l2X;ange county,d,f1inoco;mTw1G;e8i1Uo5;r5tt2N;th5wi0E; 0Sam19;uschwanste1Pw5; eng6a5h2market,po36;rk;la0P;a8co,e6i5uc;dt1Yll0Z;adow5ko0H;lands;chu picchu,gad2Ridsto1Ql8n7ple6r5;kh2; g1Cw11;hatt2Osf2B;ibu,t0ve1Z;a8e7gw,hr,in5owlOynd02;coln memori5dl2C;al;asi4w3;kefr7mbe1On5s,x;ca2Ig5si05;f1l27t0;ont;azan kreml14e6itchen2Gosrae,rasnoyar5ul;sk;ns0Hs1U;ax,cn,lf1n6ps5st;wiN;d5glew0Lverness;ian27ochina;aDeBi6kg,nd,ov5unti2H;d,enweep;gh6llc5;reL;bu03l5;and5;!s;r5yw0C;ef1tf1;libu24mp6r5stings;f1lem,row;stead,t0;aDodavari,r5uelph;avenAe5imsS;at 8en5; 6f1Fwi5;ch;acr3vall1H;brita0Flak3;hur5;st;ng3y villa0W;airhavHco,ra;aAgli9nf17ppi8u7ver6x5;et1Lf1;glad3t0;rope,st0;ng;nt0;rls1Ls5;t 5;e5si4;nd;aCe9fw,ig8o7ryd6u5xb;mfri3nstab00rh2tt0;en;nca18rcKv19wnt0B;by;n6r5vonpo1D;ry;!h2;nu8r5;l6t5;f1moor;ingt0;be;aLdg,eIgk,hClBo5royd0;l6m5rnwa0B;pt0;c7lingw6osse5;um;ood;he0S;earwat0St;a8el6i5uuk;chen itza,mney ro07natSricahua;m0Zt5;enh2;mor5rlottetPth2;ro;dar 5ntervilA;breaks,faZg5;rove;ld9m8r5versh2;lis6rizo pla5;in;le;bLpbellf1;weQ;aZcn,eNingl01kk,lackLolt0r5uckV;aGiAo5;ckt0ok5wns cany0;lyn,s5;i4to5;ne;de;dge6gh5;am,t0;n6t5;own;or5;th;ceb6m5;lNpt0;rid5;ge;bu5pool,wa8;rn;aconsfEdf1lBr9verly7x5;hi5;ll; hi5;lls;wi5;ck; air,l5;ingh2;am;ie5;ld;ltimore,rnsl6tters5;ea;ey;bLct0driadic,frica,ginJlGmFn9rc8s7tl6yleOzor3;es;!ant8;hcroft,ia; de triomphe,t6;adyr,ca8dov9tarct5;ic5; oce5;an;st5;er;ericas,s;be6dersh5hambra,list0;ot;rt0;cou5;rt;bot7i5;ngd0;on;sf1;ord",Country:"true¦0:38;1:2L;2:3B;a2Xb2Ec22d1Ye1Sf1Mg1Ch1Ai14j12k0Zl0Um0Gn05om2pZqat1KrXsKtCu7v5wal4yemTz3;a25imbabwe;es,lis and futu2Y;a3enezue32ietnam;nuatu,tican city;gTk6nited 4ruXs3zbeE; 2Ca,sr;arab emirat0Kkingdom,states3;! of am2Y;!raiV;a8haCimor les0Co7rinidad 5u3;nis0rk3valu;ey,me2Zs and caic1V;and t3t3;oba1L;go,kel10nga;iw2ji3nz2T;ki2V;aDcotl1eCi9lov8o6pa2Dri lanka,u5w3yr0;az3edAitzerl1;il1;d2riname;lomon1Xmal0uth 3;afr2KkMsud2;ak0en0;erra leoFn3;gapo1Yt maart3;en;negLrb0ychellZ;int 3moa,n marino,udi arab0;hele26luc0mart21;epublic of ir0Eom2Euss0w3;an27;a4eIhilippinUitcairn1Mo3uerto riN;l1rtugF;ki2Dl4nama,pua new0Vra3;gu7;au,esti3;ne;aBe9i7or3;folk1Ith4w3;ay; k3ern mariana1D;or0O;caragua,ger3ue;!ia;p3ther1Aw zeal1;al;mib0u3;ru;a7exi6icro0Bo3yanm06;ldova,n3roc5zambA;a4gol0t3;enegro,serrat;co;cAdagasc01l7r5urit4yot3;te;an0i16;shall0Xtin3;ique;a4div3i,ta;es;wi,ys0;ao,ed02;a6e5i3uxembourg;b3echtenste12thu1G;er0ya;ban0Isotho;os,tv0;azakh1Fe4iriba04o3uwait,yrgyz1F;rXsovo;eling0Knya;a3erG;ma16p2;c7nd6r4s3taly,vory coast;le of m2rael;a3el1;n,q;ia,oJ;el1;aiTon3ungary;dur0Ng kong;aBermany,ha0QibraltAre8u3;a6ern5inea3ya0P;! biss3;au;sey;deloupe,m,tema0Q;e3na0N;ce,nl1;ar;bUmb0;a7i6r3;ance,ench 3;guia0Epoly3;nes0;ji,nl1;lklandUroeU;ast tim7cu6gypt,l salv6ngl1quatorial4ritr5st3thiop0;on0; guin3;ea;ad3;or;enmark,jibou5ominica4r con3;go;!n C;ti;aBentral african Ah8o5roat0u4yprRzech3; 9ia;ba,racao;c4lo3morQngo brazzaville,okGsta r04te de ivoiL;mb0;osE;i3ristmasG;le,na;republic;m3naUpe verde,ymanA;bod0ero3;on;aGeDhut2o9r5u3;lgar0r3;kina faso,ma,undi;azil,itish 3unei;virgin3; is3;lands;liv0nai5snia and herzegoviHtswaHuvet3; isl1;and;re;l3n8rmuG;ar3gium,ize;us;h4ngladesh,rbad3;os;am4ra3;in;as;fghaGlDmBn6r4ustr3zerbaij2;al0ia;genti3men0uba;na;dorra,g5t3;arct7igua and barbu3;da;o3uil3;la;er3;ica;b3ger0;an0;ia;ni3;st2;an",FirstName:"true¦aTblair,cQdOfrancoZgabMhinaLilya,jHkClBm6ni4quinn,re3s0;h0umit,yd;ay,e0iloh;a,lby;g9ne;co,ko0;!s;a1el0ina,org6;!okuhF;ds,naia,r1tt0xiB;i,y;ion,lo;ashawn,eif,uca;a3e1ir0rM;an;lsFn0rry;dall,yat5;i,sD;a0essIie,ude;i1m0;ie,mG;me;ta;rie0y;le;arcy,ev0;an,on;as1h0;arl8eyenne;ey,sidy;drien,kira,l4nd1ubr0vi;ey;i,r0;a,e0;a,y;ex2f1o0;is;ie;ei,is",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦dec0february,july,nov0octo1sept0;em0;ber",Date:"true¦ago,on4som4t1week0yesterd5; end,ends;mr1o0;d2morrow;!w;ed0;ay",Duration:"true¦centurAd8h7m5q4se3w1y0;ear8r8;eek0k7;!end,s;ason,c5;tr,uarter;i0onth3;llisecond2nute2;our1r1;ay0ecade0;!s;ies,y",FemaleName:"true¦0:J7;1:JB;2:IJ;3:IK;4:J1;5:IO;6:JS;7:JO;8:HB;9:JK;A:H4;B:I2;C:IT;D:JH;E:IX;F:BA;G:I4;aGTbFLcDRdD0eBMfB4gADh9Ti9Gj8Dk7Cl5Wm48n3Lo3Hp33qu32r29s15t0Eu0Cv02wVxiTyOzH;aLeIineb,oHsof3;e3Sf3la,ra;h2iKlIna,ynH;ab,ep;da,ma;da,h2iHra;nab;aKeJi0FolB7uIvH;et8onDP;i0na;le0sen3;el,gm3Hn,rGLs8W;aoHme0nyi;m5XyAD;aMendDZhiDGiH;dele9lJnH;if48niHo0;e,f47;a,helmi0lHma;a,ow;ka0nB;aNeKiHusa5;ck84kIl8oleAviH;anFenJ4;ky,toriBK;da,lA8rHs0;a,nHoniH9;a,iFR;leHnesH9;nILrH;i1y;g9rHs6xHA;su5te;aYeUhRiNoLrIuHy2;i,la;acJ3iHu0J;c3na,sH;hFta;nHr0F;iFya;aJffaEOnHs6;a,gtiH;ng;!nFSra;aIeHomasi0;a,l9Oo8Ares1;l3ndolwethu;g9Fo88rIssH;!a,ie;eHi,ri7;sa,za;bOlMmKnIrHs6tia0wa0;a60yn;iHya;a,ka,s6;arFe2iHm77ra;!ka;a,iH;a,t6;at6it6;a0Ecarlett,e0AhWiSkye,neza0oQri,tNuIyH;bIGlvi1;ha,mayIJniAsIzH;an3Net8ie,y;anHi7;!a,e,nH;aCe;aIeH;fan4l5Dphan6E;cI5r5;b3fiAAm0LnHphi1;d2ia,ja,ya;er2lJmon1nIobh8QtH;a,i;dy;lETv3;aMeIirHo0risFDy5;a,lDM;ba,e0i5lJrH;iHr6Jyl;!d8Ifa;ia,lDZ;hd,iMki2nJrIu0w0yH;la,ma,na;i,le9on,ron,yn;aIda,ia,nHon;a,on;!ya;k6mH;!aa;lJrItaye82vH;da,inj;e0ife;en1i0ma;anA9bLd5Oh1SiBkKlJmInd2rHs6vannaC;aCi0;ant6i2;lDOma,ome;ee0in8Tu2;in1ri0;a05eZhXiUoHuthDM;bScRghQl8LnPsJwIxH;anB3ie,y;an,e0;aIeHie,lD;ann7ll1marDGtA;!lHnn1;iHyn;e,nH;a,dF;da,i,na;ayy8G;hel67io;bDRerAyn;a,cIkHmas,nFta,ya;ki,o;h8Xki;ea,iannGMoH;da,n1P;an0bJemFgi0iInHta,y0;a8Bee;han86na;a,eH;cHkaC;a,ca;bi0chIe,i0mo0nHquETy0;di,ia;aERelHiB;!e,le;een4ia0;aPeOhMiLoJrHute6A;iHudenCV;scil3LyamvaB;lHrt3;i0ly;a,paluk;ilome0oebe,ylH;is,lis;ggy,nelope,r5t2;ige,m0VnKo5rvaDMtIulH;a,et8in1;ricHt4T;a,e,ia;do2i07;ctav3dIfD3is6ksa0lHphD3umC5yunbileg;a,ga,iv3;eHvAF;l3t8;aWeUiMoIurHy5;!ay,ul;a,eJor,rIuH;f,r;aCeEma;ll1mi;aNcLhariBQkKlaJna,sHta,vi;anHha;ur;!y;a,iDZki;hoGk9YolH;a,e4P;!mh;hir,lHna,risDEsreE;!a,iDDlBV;asuMdLh3i6Dl5nKomi7rgEVtH;aHhal4;lHs6;i1ya;cy,et8;e9iF0ya;nngu2X;a0Ackenz4e02iMoJrignayani,uriDJyH;a,rH;a,iOlNna,tG;bi0i2llBJnH;a,iH;ca,ka,qD9;a,cUdo4ZkaTlOmi,nMrItzi,yH;ar;aJiIlH;anET;am;!l,nB;dy,eHh,n4;nhGrva;aKdJe0iCUlH;iHy;cent,e;red;!gros;!e5;ae5hH;ae5el3Z;ag5DgNi,lKrH;edi7AiIjem,on,yH;em,l;em,sCG;an4iHliCF;nHsCJ;a,da;!an,han;b09cASd07e,g05ha,i04ja,l02n00rLsoum5YtKuIv84xBKyHz4;bell,ra,soBB;d7rH;a,eE;h8Gild1t4;a,cUgQiKjor4l7Un4s6tJwa,yH;!aHbe6Xja9lAE;m,nBL;a,ha,in1;!aJbCGeIja,lDna,sHt63;!a,ol,sa;!l1D;!h,mInH;!a,e,n1;!awit,i;arJeIie,oHr48ueri8;!t;!ry;et46i3B;el4Xi7Cy;dHon,ue5;akranAy;ak,en,iHlo3S;a,ka,nB;a,re,s4te;daHg4;!l3E;alDd4elHge,isDJon0;ei9in1yn;el,le;a0Ne0CiXoQuLyH;d3la,nH;!a,dIe2OnHsCT;!a,e2N;a,sCR;aD4cJel0Pis1lIna,pHz;e,iA;a,u,wa;iHy;a0Se,ja,l2NnB;is,l1UrItt1LuHvel4;el5is1;aKeIi7na,rH;aADi7;lHn1tA;ei;!in1;aTbb9HdSepa,lNnKsJvIzH;!a,be5Ret8z4;!ia;a,et8;!a,dH;a,sHy;ay,ey,i,y;a,iJja,lH;iHy;aA8e;!aH;!nF;ia,ya;!nH;!a,ne;aPda,e0iNjYla,nMoKsJtHx93y5;iHt4;c3t3;e2PlCO;la,nHra;a,ie,o2;a,or1;a,gh,laH;!ni;!h,nH;a,d2e,n5V;cOdon9DiNkes6mi9Gna,rMtJurIvHxmi,y5;ern1in3;a,e5Aie,yn;as6iIoH;nya,ya;fa,s6;a,isA9;a,la;ey,ie,y;a04eZhXiOlASoNrJyH;lHra;a,ee,ie;istHy6I;a,en,iIyH;!na;!e,n5F;nul,ri,urtnB8;aOerNlB7mJrHzzy;a,stH;en,in;!berlImernH;aq;eHi,y;e,y;a,stE;!na,ra;aHei2ongordzol;dij1w5;el7UiKjsi,lJnIrH;a,i,ri;d2na,za;ey,i,lBLs4y;ra,s6;biAcARdiat7MeBAiSlQmPnyakuma1DrNss6NtKviAyH;!e,lH;a,eH;e,i8T;!a6HeIhHi4TlDri0y;ar8Her8Hie,leErBAy;!lyn8Ori0;a,en,iHl5Xoli0yn;!ma,nFs95;a5il1;ei8Mi,lH;e,ie;a,tl6O;a0AeZiWoOuH;anMdLlHst88;es,iH;a8NeHs8X;!n9tH;!a,te;e5Mi3My;a,iA;!anNcelDdMelGhan7VleLni,sIva0yH;a,ce;eHie;fHlDph7Y;a,in1;en,n1;i7y;!a,e,n45;lHng;!i1DlH;!i1C;anNle0nKrJsH;i8JsH;!e,i8I;i,ri;!a,elGif2CnH;a,et8iHy;!e,f2A;a,eJiInH;a,eIiH;e,n1;!t8;cMda,mi,nIque4YsminFvie2y9zH;min7;a7eIiH;ce,e,n1s;!lHs82t0F;e,le;inIk6HlDquelH;in1yn;da,ta;da,lRmPnOo0rNsIvaHwo0zaro;!a0lu,na;aJiIlaHob89;!n9R;do2;belHdo2;!a,e,l3B;a7Ben1i0ma;di2es,gr72ji;a9elBogH;en1;a,e9iHo0se;a0na;aSeOiJoHus7Kyacin2C;da,ll4rten24snH;a,i9U;lImaH;ri;aIdHlaI;a,egard;ry;ath1BiJlInrietArmi9sH;sa,t1A;en2Uga,mi;di;bi2Fil8MlNnMrJsItHwa,yl8M;i5Tt4;n60ti;iHmo51ri53;etH;!te;aCnaC;a,ey,l4;a02eWiRlPoNrKunJwH;enHyne1R;!dolD;ay,el;acieIetHiselB;a,chE;!la;ld1CogooH;sh;adys,enHor3yn2K;a,da,na;aKgi,lIna,ov8EselHta;a,e,le;da,liH;an;!n0;mLnJorgIrH;ald5Si,m3Etrud7;et8i4X;a,eHna;s29vieve;ma;bIle,mHrnet,yG;al5Si5;iIrielH;a,l1;!ja;aTeQiPlorOoz3rH;anJeIiH;da,eB;da,ja;!cH;esIiHoi0P;n1s66;!ca;a,enc3;en,o0;lIn0rnH;anB;ec3ic3;jr,nArKtHy7;emIiHma,oumaA;ha,ma,n;eh;ah,iBrah,za0;cr4Rd0Re0Qi0Pk0Ol07mXn54rUsOtNuMvHwa;aKelIiH;!e,ta;inFyn;!a;!ngel4V;geni1ni47;h5Yien9ta;mLperanKtH;eIhHrel5;er;l31r7;za;a,eralB;iHma,ne4Lyn;cHka,n;a,ka;aPeNiKmH;aHe21ie,y;!li9nuH;elG;lHn1;e7iHy;a,e,ja;lHrald;da,y;!nue5;aWeUiNlMma,no2oKsJvH;a,iH;na,ra;a,ie;iHuiH;se;a,en,ie,y;a0c3da,e,f,nMsJzaH;!betHveA;e,h;aHe,ka;!beH;th;!a,or;anor,nH;!a,i;!in1na;ate1Rta;leEs6;vi;eIiHna,wi0;e,th;l,n;aYeMh3iLjeneKoH;lor5Vminiq4Ln3FrHtt4;a,eEis,la,othHthy;ea,y;ba;an09naCon9ya;anQbPde,eOiMlJmetr3nHsir5M;a,iH;ce,se;a,iIla,orHphi9;es,is;a,l6F;dHrdH;re;!d5Ena;!b2ForaCraC;a,d2nH;!a,e;hl3i0l0GmNnLphn1rIvi1WyH;le,na;a,by,cIia,lH;a,en1;ey,ie;a,et8iH;!ca,el1Aka,z;arHia;is;a0Re0Nh04i02lUoJristIynH;di,th3;al,i0;lPnMrIurH;tn1D;aJd2OiHn2Ori9;!nH;a,e,n1;!l4;cepci5Cn4sH;tanHuelo;ce,za;eHleE;en,t8;aJeoIotH;il54;!pat2;ir7rJudH;et8iH;a,ne;a,e,iH;ce,sZ;a2er2ndH;i,y;aReNloe,rH;isJyH;stH;al;sy,tH;a1Sen,iHy;an1e,n1;deJlseIrH;!i7yl;a,y;li9;nMrH;isKlImH;ai9;a,eHot8;n1t8;!sa;d2elGtH;al,elG;cIlH;es8i47;el3ilH;e,ia,y;itlYlXmilWndVrMsKtHy5;aIeIhHri0;er1IleErDy;ri0;a38sH;a37ie;a,iOlLmeJolIrH;ie,ol;!e,in1yn;lHn;!a,la;a,eIie,otHy;a,ta;ne,y;na,s1X;a0Ii0I;a,e,l1;isAl4;in,yn;a0Ke02iZlXoUrH;andi7eRiJoIyH;an0nn;nwDoke;an3HdgMgiLtH;n31tH;!aInH;ey,i,y;ny;d,t8;etH;!t7;an0e,nH;da,na;bbi7glarIlo07nH;iAn4;ka;ancHythe;a,he;an1Clja0nHsm3M;iAtH;ou;aWcVlinUniArPssOtJulaCvH;!erlH;ey,y;hJsy,tH;e,iHy7;e,na;!anH;ie,y;!ie;nItHyl;ha,ie;adIiH;ce;et8i9;ay,da;ca,ky;!triH;ce,z;rbJyaH;rmH;aa;a2o2ra;a2Ub2Od25g21i1Sj5l18m0Zn0Boi,r06sWtVuPvOwa,yIzH;ra,u0;aKes6gJlIn,seH;!l;in;un;!nH;a,na;a,i2K;drLguJrIsteH;ja;el3;stH;in1;a,ey,i,y;aahua,he0;hIi2Gja,miAs2DtrH;id;aMlIraqHt21;at;eIi7yH;!n;e,iHy;gh;!nH;ti;iJleIo6piA;ta;en,n1t8;aHelG;!n1J;a01dje5eZgViTjRnKohito,toHya;inet8nH;el5ia;te;!aKeIiHmJ;e,ka;!mHtt7;ar4;!belIliHmU;sa;!l1;a,eliH;ca;ka,sHta;a,sa;elHie;a,iH;a,ca,n1qH;ue;!tH;a,te;!bImHstasiMya;ar3;el;aLberKeliJiHy;e,l3naH;!ta;a,ja;!ly;hGiIl3nB;da;a,ra;le;aWba,ePiMlKthJyH;a,c3sH;a,on,sa;ea;iHys0N;e,s0M;a,cIn1sHza;a,e,ha,on,sa;e,ia,ja;c3is6jaKksaKna,sJxH;aHia;!nd2;ia,saH;nd2;ra;ia;i0nIyH;ah,na;a,is,naCoud;la;c6da,leEmNnLsH;haClH;inHyY;g,n;!h;a,o,slH;ey;ee;en;at6g4nIusH;ti0;es;ie;aWdiTelMrH;eJiH;anMenH;a,e,ne;an0;na;!aLeKiIyH;nn;a,n1;a,e;!ne;!iH;de;e,lDsH;on;yn;!lH;i9yn;ne;aKbIiHrL;!e,gaK;ey,i7y;!e;gaH;il;dKliyJradhIs6;ha;ya;ah;a,ya",Honorific:"true¦director1field marsh2lieutenant1rear0sergeant major,vice0; admir1; gener0;al","Adj|Gerund":"true¦0:3F;1:3H;2:31;3:2X;4:35;5:33;6:3C;7:2Z;8:36;9:29;a33b2Tc2Bd1Te1If19g12h0Zi0Rl0Nm0Gnu0Fo0Ap04rYsKtEuBvAw1Ayiel3;ar6e08;nBpA;l1Rs0B;fol3n1Zsett2;aEeDhrBi4ouc7rAwis0;e0Bif2oub2us0yi1;ea1SiA;l2vi1;l2mp0rr1J;nt1Vxi1;aMcreec7enten2NhLkyrocke0lo0Vmi2oJpHtDuBweA;e0Ul2;pp2ArA;gi1pri5roun3;aBea8iAri2Hun9;mula0r4;gge4rA;t2vi1;ark2eAraw2;e3llb2F;aAot7;ki1ri1;i9oc29;dYtisf6;aEeBive0oAus7;a4l2;assu4defi9fres7ig9juve07mai9s0vAwar3;ea2italiAol1G;si1zi1;gi1ll6mb2vi1;a6eDier23lun1VrAun2C;eBoA;mi5vo1Z;ce3s5vai2;n3rpleA;xi1;ffCpWutBverAwi1;arc7lap04p0Pri3whel8;goi1l6st1J;en3sA;et0;m2Jrtu4;aEeDiCoBuAyst0L;mb2;t1Jvi1;s5tiga0;an1Rl0n3smeri26;dAtu4;de9;aCeaBiAo0U;fesa0Tvi1;di1ni1;c1Fg19s0;llumiGmFnArri0R;cDfurHsCtBviA;go23ti1;e1Oimi21oxica0rig0V;pi4ul0;orpo20r0K;po5;na0;eaBorr02umilA;ia0;li1rtwar8;lFrA;atiDipCoBuelA;i1li1;undbrea10wi1;pi1;f6ng;a4ea8;a3etc7it0lEoCrBulfA;il2;ee1FighXust1L;rAun3;ebo3thco8;aCoA;a0wA;e4i1;mi1tte4;lectrJmHnExA;aCci0hBis0pA;an3lo3;aOila1B;c0spe1A;ab2coura0CdBergi13ga0Clive9ric7s02tA;hral2i0J;ea4u4;barras5er09pA;owe4;if6;aQeIiBrA;if0;sAzz6;aEgDhearCsen0tA;rAur11;ac0es5;te9;us0;ppoin0r8;biliGcDfi9gra3ligh0mBpres5sAvasG;erE;an3ea9orA;ali0L;a6eiBli9rA;ea5;vi1;ta0;maPri1s7un0zz2;aPhMlo5oAripp2ut0;mGnArrespon3;cer9fDspi4tA;inBrA;as0ibu0ol2;ui1;lic0u5;ni1;fDmCpA;eAromi5;l2ti1;an3;or0;aAil2;llenAnAr8;gi1;l8ptAri1;iva0;aff2eGin3lFoDrBuA;d3st2;eathtaAui5;ki1;gg2i2o8ri1unA;ci1;in3;co8wiA;lAtc7;de4;bsorVcOgonMlJmHnno6ppea2rFsA;pi4su4toA;nBun3;di1;is7;hi1;res0;li1;aFu5;si1;ar8lu4;ri1;mi1;iAzi1;zi1;cAhi1;eleDomA;moBpan6;yi1;da0;ra0;ti1;bi1;ng",Comparable:"true¦0:3C;1:3Q;2:3F;a3Tb3Cc33d2Te2Mf2Ag1Wh1Li1Fj1Ek1Bl13m0Xn0So0Rp0Iqu0Gr07sHtCug0vAw4y3za0Q;el10ouN;ary,e6hi5i3ry;ck0Cde,l3n1ry,se;d,y;ny,te;a3i3R;k,ry;a3erda2ulgar;gue,in,st;a6en2Xhi5i4ouZr3;anqu2Cen1ue;dy,g36me0ny;ck,rs28;ll,me,rt,wd3I;aRcaPeOhMiLkin0BlImGoEpDt6u4w3;eet,ift;b3dd0Wperfi21rre28;sta26t21;a8e7iff,r4u3;pUr1;a4ict,o3;ng;ig2Vn0N;a1ep,rn;le,rk,te0;e1Si2Vright0;ci1Yft,l3on,re;emn,id;a3el0;ll,rt;e4i3y;g2Mm0Z;ek,nd2T;ck24l0mp1L;a3iRrill,y;dy,l01rp;ve0Jxy;n1Jr3;ce,y;d,fe,int0l1Hv0V;a8e6i5o3ude;mantic,o19sy,u3;gh;pe,t1P;a3d,mo0A;dy,l;gg4iFndom,p3re,w;id;ed;ai2i3;ck,et;hoAi1Fl9o8r5u3;ny,r3;e,p11;egna2ic4o3;fouSud;ey,k0;liXor;ain,easa2;ny;dd,i0ld,ranL;aive,e5i4o3u14;b0Sisy,rm0Ysy;bb0ce,mb0R;a3r1w;r,t;ad,e5ild,o4u3;nda12te;ist,o1;a4ek,l3;low;s0ty;a8e7i6o3ucky;f0Jn4o15u3ve0w10y0N;d,sy;e0g;ke0l,mp,tt0Eve0;e1Qwd;me,r3te;ge;e4i3;nd;en;ol0ui19;cy,ll,n3;secu6t3;e3ima4;llege2rmedia3;te;re;aAe7i6o5u3;ge,m3ng1C;bYid;me0t;gh,l0;a3fXsita2;dy,rWv3;en0y;nd13ppy,r3;d3sh;!y;aFenEhCiBlAoofy,r3;a8e6i5o3ue0Z;o3ss;vy;m,s0;at,e3y;dy,n;nd,y;ad,ib,ooD;a2d1;a3o3;st0;tDuiS;u1y;aCeebBi9l8o6r5u3;ll,n3r0N;!ny;aCesh,iend0;a3nd,rmD;my;at,ir7;erce,nan3;ci9;le;r,ul3;ty;a6erie,sse4v3xtre0B;il;nti3;al;r4s3;tern,y;ly,th0;appZe9i5ru4u3;mb;nk;r5vi4z3;zy;ne;e,ty;a3ep,n9;d3f,r;!ly;agey,h8l7o5r4u3;dd0r0te;isp,uel;ar3ld,mmon,st0ward0zy;se;evKou1;e3il0;ap,e3;sy;aHiFlCoAr5u3;ff,r0sy;ly;a6i3oad;g4llia2;nt;ht;sh,ve;ld,un3;cy;a4o3ue;nd,o1;ck,nd;g,tt3;er;d,ld,w1;dy;bsu6ng5we3;so3;me;ry;rd",Adverb:"true¦a08b05d00eYfSheQinPjustOkinda,likewiZmMnJoEpCquite,r9s5t2u0very,well;ltima01p0; to,wards5;h1iny bit,o0wiO;o,t6;en,us;eldom,o0uch;!me1rt0; of;how,times,w0C;a1e0;alS;ndomRth05;ar excellenEer0oint blank; Lhaps;f3n0utright;ce0ly;! 0;ag05moX; courGten;ewJo0; longWt 0;onHwithstand9;aybe,eanwhiNore0;!ovT;! aboX;deed,steY;lla,n0;ce;or3u0;ck1l9rther0;!moK;ing; 0evK;exampCgood,suH;n mas0vI;se;e0irect2; 2fini0;te0;ly;juAtrop;ackward,y 0;far,no0; means,w; GbroFd nauseam,gEl7ny5part,s4t 2w0;ay,hi0;le;be7l0mo7wor7;arge,ea6; soon,i4;mo0way;re;l 3mo2ongsi1ready,so,togeth0ways;er;de;st;b1t0;hat;ut;ain;ad;lot,posteriori",Conjunction:"true¦aXbTcReNhowMiEjust00noBo9p8supposing,t5wh0yet;e1il0o3;e,st;n1re0thN; if,by,vM;evL;h0il,o;erefOo0;!uU;lus,rovided th9;r0therwiM;! not; mattEr,w0;! 0;since,th4w7;f4n0; 0asmuch;as mIcaForder t0;h0o;at;! 0;only,t0w0;hen;!ev3;ith2ven0;! 0;if,tB;er;o0uz;s,z;e0ut,y the time;cau1f0;ore;se;lt3nd,s 0;far1if,m0soon1t2;uch0; as;hou0;gh",Currency:"true¦$,aud,bQcOdJeurIfHgbp,hkd,iGjpy,kElDp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotyQł;en,uanP;af,of;h0t5;e0il5;k0q0;elK;oubleJp,upeeJ;e2ound st0;er0;lingG;n0soF;ceEnies;empi7i7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!os;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;e0ny;nt1;aht,itcoin0;!s",Determiner:"true¦aBboth,d9e6few,le5mu8neiDplenty,s4th2various,wh0;at0ich0;evC;a0e4is,ose;!t;everal,ome;!ast,s;a1l0very;!se;ch;e0u;!s;!n0;!o0y;th0;er","Adj|Present":"true¦a07b04cVdQeNfJhollIidRlEmCnarrIoBp9qua8r7s3t2uttFw0;aKet,ro0;ng,u08;endChin;e2hort,l1mooth,our,pa9tray,u0;re,speU;i2ow;cu6da02leSpaN;eplica01i02;ck;aHerfePr0;eseUime,omV;bscu1pen,wn;atu0e3odeH;re;a2e1ive,ow0;er;an;st,y;ow;a2i1oul,r0;ee,inge;rm;iIke,ncy,st;l1mpty,x0;emHpress;abo4ic7;amp,e2i1oub0ry,ull;le;ffu9re6;fu8libe0;raE;alm,l5o0;mpleCn3ol,rr1unterfe0;it;e0u7;ct;juga8sum7;ea1o0;se;n,r;ankru1lu0;nt;pt;li2pproxi0rticula1;ma0;te;ght","Person|Adj":"true¦b3du2earnest,frank,mi2r0san1woo1;an0ich,u1;dy;sty;ella,rown",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to,a;ight,ust;an,o0;uld",Verb:"true¦born,cannot,gonna,has,keep tabs,msg","Person|Verb":"true¦b8ch7dr6foster,gra5ja9lan4ma2ni9ollie,p1rob,s0wade;kip,pike,t5ue;at,eg,ier2;ck,r0;k,shal;ce;ce,nt;ew;ase,u1;iff,l1ob,u0;ck;aze,ossom","Person|Date":"true¦a2j0sep;an0une;!uary;p0ugust,v0;ril"};const gr=36,mr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",pr=mr.split("").reduce((function(e,t,n){return e[t]=n,e}),{});var fr=function(e){if(void 0!==pr[e])return pr[e];let t=0,n=1,a=gr,r=1;for(;n=0;n--,r*=gr){let a=e.charCodeAt(n)-48;a>10&&(a-=7),t+=a*r}return t};const br=function(e,t,n){const a=fr(t);return a{let o=e.nodes[a];"!"===o[0]&&(t.push(r),o=o.slice(1));const i=o.split(/([A-Z0-9,]+)/g);for(let o=0;o{const t=function(e){if(!e)return{};const t=e.split("|").reduce(((e,t)=>{const n=t.split("¦");return e[n[0]]=n[1],e}),{}),n={};return Object.keys(t).forEach((function(e){const a=yr(t[e]);"true"===e&&(e=!0);for(let t=0;t{if(jr[t]=e,"Noun|Verb"===e){const e=Pr(t,Nr);jr[e]="Plural|Verb"}})):Object.keys(t).forEach((t=>{Cr[t]=e}))})),[":(",":)",":P",":p",":O",";(",";)",";P",";p",";O",":3",":|",":/",":\\",":$",":*",":@",":-(",":-)",":-P",":-p",":-O",":-3",":-|",":-/",":-\\",":-$",":-*",":-@",":^(",":^)",":^P",":^p",":^O",":^3",":^|",":^/",":^\\",":^$",":^*",":^@","):","(:","$:","*:",")-:","(-:","$-:","*-:",")^:","(^:","$^:","*^:","<3","Cr[e]="Emoticon")),delete Cr[""],delete Cr.null,delete Cr[" "];const Ir="Singular";var Dr={beforeTags:{Determiner:Ir,Possessive:Ir,Acronym:Ir,Noun:Ir,Adjective:Ir,PresentTense:Ir,Gerund:Ir,PastTense:Ir,Infinitive:Ir,Date:Ir,Ordinal:Ir,Demonym:Ir},afterTags:{Value:Ir,Modal:Ir,Copula:Ir,PresentTense:Ir,PastTense:Ir,Demonym:Ir,Actor:Ir},beforeWords:{the:Ir,with:Ir,without:Ir,of:Ir,for:Ir,any:Ir,all:Ir,on:Ir,cut:Ir,cuts:Ir,increase:Ir,decrease:Ir,raise:Ir,drop:Ir,save:Ir,saved:Ir,saves:Ir,make:Ir,makes:Ir,made:Ir,minus:Ir,plus:Ir,than:Ir,another:Ir,versus:Ir,neither:Ir,about:Ir,favorite:Ir,best:Ir,daily:Ir,weekly:Ir,linear:Ir,binary:Ir,mobile:Ir,lexical:Ir,technical:Ir,computer:Ir,scientific:Ir,security:Ir,government:Ir,popular:Ir,formal:Ir,no:Ir,more:Ir,one:Ir,let:Ir,her:Ir,his:Ir,their:Ir,our:Ir,us:Ir,sheer:Ir,monthly:Ir,yearly:Ir,current:Ir,previous:Ir,upcoming:Ir,last:Ir,next:Ir,main:Ir,initial:Ir,final:Ir,beginning:Ir,end:Ir,top:Ir,bottom:Ir,future:Ir,past:Ir,major:Ir,minor:Ir,side:Ir,central:Ir,peripheral:Ir,public:Ir,private:Ir},afterWords:{of:Ir,system:Ir,aid:Ir,method:Ir,utility:Ir,tool:Ir,reform:Ir,therapy:Ir,philosophy:Ir,room:Ir,authority:Ir,says:Ir,said:Ir,wants:Ir,wanted:Ir,is:Ir,did:Ir,do:Ir,can:Ir,wise:Ir}};const Hr="Infinitive";var Tr={beforeTags:{Modal:Hr,Adverb:Hr,Negative:Hr,Plural:Hr},afterTags:{Determiner:Hr,Adverb:Hr,Possessive:Hr,Reflexive:Hr,Preposition:Hr,Cardinal:Hr,Comparative:Hr,Superlative:Hr},beforeWords:{i:Hr,we:Hr,you:Hr,they:Hr,to:Hr,please:Hr,will:Hr,have:Hr,had:Hr,would:Hr,could:Hr,should:Hr,do:Hr,did:Hr,does:Hr,can:Hr,must:Hr,us:Hr,me:Hr,let:Hr,even:Hr,when:Hr,help:Hr,he:Hr,she:Hr,it:Hr,being:Hr,bi:Hr,co:Hr,contra:Hr,de:Hr,inter:Hr,intra:Hr,mis:Hr,pre:Hr,out:Hr,counter:Hr,nobody:Hr,somebody:Hr,anybody:Hr,everybody:Hr},afterWords:{the:Hr,me:Hr,you:Hr,him:Hr,us:Hr,her:Hr,his:Hr,them:Hr,they:Hr,it:Hr,himself:Hr,herself:Hr,itself:Hr,myself:Hr,ourselves:Hr,themselves:Hr,something:Hr,anything:Hr,a:Hr,an:Hr,up:Hr,down:Hr,by:Hr,out:Hr,off:Hr,under:Hr,what:Hr,all:Hr,to:Hr,because:Hr,although:Hr,how:Hr,otherwise:Hr,together:Hr,though:Hr,into:Hr,yet:Hr,more:Hr,here:Hr,there:Hr,away:Hr}};const Gr={beforeTags:Object.assign({},Tr.beforeTags,Dr.beforeTags,{}),afterTags:Object.assign({},Tr.afterTags,Dr.afterTags,{}),beforeWords:Object.assign({},Tr.beforeWords,Dr.beforeWords,{}),afterWords:Object.assign({},Tr.afterWords,Dr.afterWords,{})},xr="Adjective";var Er={beforeTags:{Determiner:xr,Possessive:xr,Hyphenated:xr},afterTags:{Adjective:xr},beforeWords:{seem:xr,seemed:xr,seems:xr,feel:xr,feels:xr,felt:xr,stay:xr,appear:xr,appears:xr,appeared:xr,also:xr,over:xr,under:xr,too:xr,it:xr,but:xr,still:xr,really:xr,quite:xr,well:xr,very:xr,truly:xr,how:xr,deeply:xr,hella:xr,profoundly:xr,extremely:xr,so:xr,badly:xr,mostly:xr,totally:xr,awfully:xr,rather:xr,nothing:xr,something:xr,anything:xr,not:xr,me:xr,is:xr,face:xr,faces:xr,faced:xr,look:xr,looks:xr,looked:xr,reveal:xr,reveals:xr,revealed:xr,sound:xr,sounded:xr,sounds:xr,remains:xr,remained:xr,prove:xr,proves:xr,proved:xr,becomes:xr,stays:xr,tastes:xr,taste:xr,smells:xr,smell:xr,gets:xr,grows:xr,as:xr,rings:xr,radiates:xr,conveys:xr,convey:xr,conveyed:xr,of:xr},afterWords:{too:xr,also:xr,or:xr,enough:xr,as:xr}};const Fr="Gerund";var Or={beforeTags:{Adverb:Fr,Preposition:Fr,Conjunction:Fr},afterTags:{Adverb:Fr,Possessive:Fr,Person:Fr,Pronoun:Fr,Determiner:Fr,Copula:Fr,Preposition:Fr,Conjunction:Fr,Comparative:Fr},beforeWords:{been:Fr,keep:Fr,continue:Fr,stop:Fr,am:Fr,be:Fr,me:Fr,began:Fr,start:Fr,starts:Fr,started:Fr,stops:Fr,stopped:Fr,help:Fr,helps:Fr,avoid:Fr,avoids:Fr,love:Fr,loves:Fr,loved:Fr,hate:Fr,hates:Fr,hated:Fr},afterWords:{you:Fr,me:Fr,her:Fr,him:Fr,his:Fr,them:Fr,their:Fr,it:Fr,this:Fr,there:Fr,on:Fr,about:Fr,for:Fr,up:Fr,down:Fr}};const zr="Gerund",Vr="Adjective",Br={beforeTags:Object.assign({},Er.beforeTags,Or.beforeTags,{Imperative:zr,Infinitive:Vr,Plural:zr}),afterTags:Object.assign({},Er.afterTags,Or.afterTags,{Noun:Vr}),beforeWords:Object.assign({},Er.beforeWords,Or.beforeWords,{is:Vr,are:zr,was:Vr,of:Vr,suggest:zr,suggests:zr,suggested:zr,recommend:zr,recommends:zr,recommended:zr,imagine:zr,imagines:zr,imagined:zr,consider:zr,considered:zr,considering:zr,resist:zr,resists:zr,resisted:zr,avoid:zr,avoided:zr,avoiding:zr,except:Vr,accept:Vr,assess:zr,explore:zr,fear:zr,fears:zr,appreciate:zr,question:zr,help:zr,embrace:zr,with:Vr}),afterWords:Object.assign({},Er.afterWords,Or.afterWords,{to:zr,not:zr,the:zr})},Sr={beforeTags:{Determiner:void 0,Cardinal:"Noun",PhrasalVerb:"Adjective"},afterTags:{}},Kr={beforeTags:Object.assign({},Er.beforeTags,Dr.beforeTags,Sr.beforeTags),afterTags:Object.assign({},Er.afterTags,Dr.afterTags,Sr.afterTags),beforeWords:Object.assign({},Er.beforeWords,Dr.beforeWords,{are:"Adjective",is:"Adjective",was:"Adjective",be:"Adjective",off:"Adjective",out:"Adjective"}),afterWords:Object.assign({},Er.afterWords,Dr.afterWords)},$r="PastTense",Lr="Adjective",Mr={beforeTags:{Adverb:$r,Pronoun:$r,ProperNoun:$r,Auxiliary:$r,Noun:$r},afterTags:{Possessive:$r,Pronoun:$r,Determiner:$r,Adverb:$r,Comparative:$r,Date:$r,Gerund:$r},beforeWords:{be:$r,who:$r,get:Lr,had:$r,has:$r,have:$r,been:$r,it:$r,as:$r,for:Lr,more:Lr,always:Lr},afterWords:{by:$r,back:$r,out:$r,in:$r,up:$r,down:$r,before:$r,after:$r,for:$r,the:$r,with:$r,as:$r,on:$r,at:$r,between:$r,to:$r,into:$r,us:$r,them:$r,his:$r,her:$r,their:$r,our:$r,me:$r,about:Lr}};var Jr={beforeTags:Object.assign({},Er.beforeTags,Mr.beforeTags),afterTags:Object.assign({},Er.afterTags,Mr.afterTags),beforeWords:Object.assign({},Er.beforeWords,Mr.beforeWords),afterWords:Object.assign({},Er.afterWords,Mr.afterWords)};const Wr={afterTags:{Noun:"Adjective",Conjunction:void 0}},Ur={beforeTags:Object.assign({},Er.beforeTags,Tr.beforeTags,{Adverb:void 0,Negative:void 0}),afterTags:Object.assign({},Er.afterTags,Tr.afterTags,Wr.afterTags),beforeWords:Object.assign({},Er.beforeWords,Tr.beforeWords,{have:void 0,had:void 0,not:void 0,went:"Adjective",goes:"Adjective",got:"Adjective",be:"Adjective"}),afterWords:Object.assign({},Er.afterWords,Tr.afterWords,{to:void 0,as:"Adjective"})},qr={Copula:"Gerund",PastTense:"Gerund",PresentTense:"Gerund",Infinitive:"Gerund"},Rr={Value:"Gerund"},Qr={are:"Gerund",were:"Gerund",be:"Gerund",no:"Gerund",without:"Gerund",you:"Gerund",we:"Gerund",they:"Gerund",he:"Gerund",she:"Gerund",us:"Gerund",them:"Gerund"},Zr={the:"Gerund",this:"Gerund",that:"Gerund",me:"Gerund",us:"Gerund",them:"Gerund"},Xr={beforeTags:Object.assign({},Or.beforeTags,Dr.beforeTags,qr),afterTags:Object.assign({},Or.afterTags,Dr.afterTags,Rr),beforeWords:Object.assign({},Or.beforeWords,Dr.beforeWords,Qr),afterWords:Object.assign({},Or.afterWords,Dr.afterWords,Zr)},_r="Singular",Yr="Infinitive",eo={beforeTags:Object.assign({},Tr.beforeTags,Dr.beforeTags,{Adjective:_r,Particle:_r}),afterTags:Object.assign({},Tr.afterTags,Dr.afterTags,{ProperNoun:Yr,Gerund:Yr,Adjective:Yr,Copula:_r}),beforeWords:Object.assign({},Tr.beforeWords,Dr.beforeWords,{is:_r,was:_r,of:_r,have:null}),afterWords:Object.assign({},Tr.afterWords,Dr.afterWords,{instead:Yr,about:Yr,his:Yr,her:Yr,to:null,by:null,in:null})},to="Person";var no={beforeTags:{Honorific:to,Person:to},afterTags:{Person:to,ProperNoun:to,Verb:to},beforeWords:{hi:to,hey:to,yo:to,dear:to,hello:to},afterWords:{said:to,says:to,told:to,tells:to,feels:to,felt:to,seems:to,thinks:to,thought:to,spends:to,spendt:to,plays:to,played:to,sing:to,sang:to,learn:to,learned:to,wants:to,wanted:to}};const ao="Month",ro={beforeTags:{Date:ao,Value:ao},afterTags:{Date:ao,Value:ao},beforeWords:{by:ao,in:ao,on:ao,during:ao,after:ao,before:ao,between:ao,until:ao,til:ao,sometime:ao,of:ao,this:ao,next:ao,last:ao,previous:ao,following:ao,with:"Person"},afterWords:{sometime:ao,in:ao,of:ao,until:ao,the:ao}};var oo={beforeTags:Object.assign({},no.beforeTags,ro.beforeTags),afterTags:Object.assign({},no.afterTags,ro.afterTags),beforeWords:Object.assign({},no.beforeWords,ro.beforeWords),afterWords:Object.assign({},no.afterWords,ro.afterWords)};const io="Place",so={beforeTags:{Place:io},afterTags:{Place:io,Abbreviation:io},beforeWords:{in:io,by:io,near:io,from:io,to:io},afterWords:{in:io,by:io,near:io,from:io,to:io,government:io,council:io,region:io,city:io}},lo="Unit",uo={"Actor|Verb":Gr,"Adj|Gerund":Br,"Adj|Noun":Kr,"Adj|Past":Jr,"Adj|Present":Ur,"Noun|Verb":eo,"Noun|Gerund":Xr,"Person|Noun":{beforeTags:Object.assign({},Dr.beforeTags,no.beforeTags),afterTags:Object.assign({},Dr.afterTags,no.afterTags),beforeWords:Object.assign({},Dr.beforeWords,no.beforeWords,{i:"Infinitive",we:"Infinitive"}),afterWords:Object.assign({},Dr.afterWords,no.afterWords)},"Person|Date":oo,"Person|Verb":{beforeTags:Object.assign({},Dr.beforeTags,no.beforeTags,Tr.beforeTags),afterTags:Object.assign({},Dr.afterTags,no.afterTags,Tr.afterTags),beforeWords:Object.assign({},Dr.beforeWords,no.beforeWords,Tr.beforeWords),afterWords:Object.assign({},Dr.afterWords,no.afterWords,Tr.afterWords)},"Person|Place":{beforeTags:Object.assign({},so.beforeTags,no.beforeTags),afterTags:Object.assign({},so.afterTags,no.afterTags),beforeWords:Object.assign({},so.beforeWords,no.beforeWords),afterWords:Object.assign({},so.afterWords,no.afterWords)},"Person|Adj":{beforeTags:Object.assign({},no.beforeTags,Er.beforeTags),afterTags:Object.assign({},no.afterTags,Er.afterTags),beforeWords:Object.assign({},no.beforeWords,Er.beforeWords),afterWords:Object.assign({},no.afterWords,Er.afterWords)},"Unit|Noun":{beforeTags:{Value:lo},afterTags:{},beforeWords:{per:lo,every:lo,each:lo,square:lo,cubic:lo,sq:lo,metric:lo},afterWords:{per:lo,squared:lo,cubed:lo,long:lo}}},co=(e,t)=>{const n=Object.keys(e).reduce(((t,n)=>(t[n]="Infinitive"===e[n]?"PresentTense":"Plural",t)),{});return Object.assign(n,t)};uo["Plural|Verb"]={beforeWords:co(uo["Noun|Verb"].beforeWords,{had:"Plural",have:"Plural"}),afterWords:co(uo["Noun|Verb"].afterWords,{his:"PresentTense",her:"PresentTense",its:"PresentTense",in:null,to:null,is:"PresentTense",by:"PresentTense"}),beforeTags:co(uo["Noun|Verb"].beforeTags,{Conjunction:"PresentTense",Noun:void 0,ProperNoun:"PresentTense"}),afterTags:co(uo["Noun|Verb"].afterTags,{Gerund:"Plural",Noun:"PresentTense",Value:"PresentTense"})};const ho="Adjective",go="Infinitive",mo="PresentTense",po="Singular",fo="PastTense",bo="Adverb",yo="Plural",vo="Actor",wo="Verb",ko="Noun",Po="LastName",Ao="Modal",Co="Place",jo="Participle";var No=[null,null,{ea:po,ia:ko,ic:ho,ly:bo,"'n":wo,"'t":wo},{oed:fo,ued:fo,xed:fo," so":bo,"'ll":Ao,"'re":"Copula",azy:ho,eer:ko,end:wo,ped:fo,ffy:ho,ify:go,ing:"Gerund",ize:go,ibe:go,lar:ho,mum:ho,nes:mo,nny:ho,ous:ho,que:ho,ger:ko,ber:ko,rol:po,sis:po,ogy:po,oid:po,ian:po,zes:mo,eld:fo,ken:jo,ven:jo,ten:jo,ect:go,ict:go,ign:go,oze:go,ful:ho,bal:ho,ton:ko,pur:Co},{amed:fo,aped:fo,ched:fo,lked:fo,rked:fo,reed:fo,nded:fo,mned:ho,cted:fo,dged:fo,ield:po,akis:Po,cede:go,chuk:Po,czyk:Po,ects:mo,iend:po,ends:wo,enko:Po,ette:po,iary:po,wner:po,fies:mo,fore:bo,gate:go,gone:ho,ices:yo,ints:yo,ruct:go,ines:yo,ions:yo,ners:yo,pers:yo,lers:yo,less:ho,llen:ho,made:ho,nsen:Po,oses:mo,ould:Ao,some:ho,sson:Po,ians:yo,tion:po,tage:ko,ique:po,tive:ho,tors:ko,vice:po,lier:po,fier:po,wned:fo,gent:po,tist:vo,pist:vo,rist:vo,mist:vo,yist:vo,vist:vo,ists:vo,lite:po,site:po,rite:po,mite:po,bite:po,mate:po,date:po,ndal:po,vent:po,uist:vo,gist:vo,note:po,cide:po,ence:po,wide:ho,vide:go,ract:go,duce:go,pose:go,eive:go,lyze:go,lyse:go,iant:ho,nary:ho,ghty:ho,uent:ho,erer:vo,bury:Co,dorf:ko,esty:ko,wych:Co,dale:Co,folk:Co,vale:Co,abad:Co,sham:Co,wick:Co,view:Co},{elist:vo,holic:po,phite:po,tized:fo,urned:fo,eased:fo,ances:yo,bound:ho,ettes:yo,fully:bo,ishes:mo,ities:yo,marek:Po,nssen:Po,ology:ko,osome:po,tment:po,ports:yo,rough:ho,tches:mo,tieth:"Ordinal",tures:yo,wards:bo,where:bo,archy:ko,pathy:ko,opoly:ko,embly:ko,phate:ko,ndent:po,scent:po,onist:vo,anist:vo,alist:vo,olist:vo,icist:vo,ounce:go,iable:ho,borne:ho,gnant:ho,inant:ho,igent:ho,atory:ho,rient:po,dient:po,maker:vo,burgh:Co,mouth:Co,ceter:Co,ville:Co,hurst:Co,stead:Co,endon:Co,brook:Co,shire:Co,worth:ko,field:"ProperNoun",ridge:Co},{auskas:Po,parent:po,cedent:po,ionary:po,cklist:po,brooke:Co,keeper:vo,logist:vo,teenth:"Value",worker:vo,master:vo,writer:vo,brough:Co,cester:Co,ington:Co,cliffe:Co,ingham:Co},{chester:Co,logists:vo,opoulos:Po,borough:Co,sdottir:Po}];const Io="Adjective",Do="Noun",Ho="Verb";var To=[null,null,{},{neo:Do,bio:Do,"de-":Ho,"re-":Ho,"un-":Ho,"ex-":Do},{anti:Do,auto:Do,faux:Io,hexa:Do,kilo:Do,mono:Do,nano:Do,octa:Do,poly:Do,semi:Io,tele:Do,"pro-":Io,"mis-":Ho,"dis-":Ho,"pre-":Io},{anglo:Do,centi:Do,ethno:Do,ferro:Do,grand:Do,hepta:Do,hydro:Do,intro:Do,macro:Do,micro:Do,milli:Do,nitro:Do,penta:Do,quasi:Io,radio:Do,tetra:Do,"omni-":Io,"post-":Io},{pseudo:Io,"extra-":Io,"hyper-":Io,"inter-":Io,"intra-":Io,"deca-":Io},{electro:Do}];const Go="Adjective",xo="Infinitive",Eo="PresentTense",Fo="Singular",Oo="PastTense",zo="Adverb",Vo="Expression",Bo="Actor",So="Verb",Ko="Noun",$o="LastName";var Lo={a:[[/.[aeiou]na$/,Ko,"tuna"],[/.[oau][wvl]ska$/,$o],[/.[^aeiou]ica$/,Fo,"harmonica"],[/^([hyj]a+)+$/,Vo,"haha"]],c:[[/.[^aeiou]ic$/,Go]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,Oo,"popped"],[/.[aeo]{2}[bdgmnprvz]ed$/,Oo,"rammed"],[/.[aeiou][sg]hed$/,Oo,"gushed"],[/.[aeiou]red$/,Oo,"hired"],[/.[aeiou]r?ried$/,Oo,"hurried"],[/[^aeiou]ard$/,Fo,"steward"],[/[aeiou][^aeiou]id$/,Go,""],[/.[vrl]id$/,Go,"livid"],[/..led$/,Oo,"hurled"],[/.[iao]sed$/,Oo,""],[/[aeiou]n?[cs]ed$/,Oo,""],[/[aeiou][rl]?[mnf]ed$/,Oo,""],[/[aeiou][ns]?c?ked$/,Oo,"bunked"],[/[aeiou]gned$/,Oo],[/[aeiou][nl]?ged$/,Oo],[/.[tdbwxyz]ed$/,Oo],[/[^aeiou][aeiou][tvx]ed$/,Oo],[/.[cdflmnprstv]ied$/,Oo,"emptied"]],e:[[/.[lnr]ize$/,xo,"antagonize"],[/.[^aeiou]ise$/,xo,"antagonise"],[/.[aeiou]te$/,xo,"bite"],[/.[^aeiou][ai]ble$/,Go,"fixable"],[/.[^aeiou]eable$/,Go,"maleable"],[/.[ts]ive$/,Go,"festive"],[/[a-z]-like$/,Go,"woman-like"]],h:[[/.[^aeiouf]ish$/,Go,"cornish"],[/.v[iy]ch$/,$o,"..ovich"],[/^ug?h+$/,Vo,"ughh"],[/^uh[ -]?oh$/,Vo,"uhoh"],[/[a-z]-ish$/,Go,"cartoon-ish"]],i:[[/.[oau][wvl]ski$/,$o,"polish-male"]],k:[[/^(k){2}$/,Vo,"kkkk"]],l:[[/.[gl]ial$/,Go,"familial"],[/.[^aeiou]ful$/,Go,"fitful"],[/.[nrtumcd]al$/,Go,"natal"],[/.[^aeiou][ei]al$/,Go,"familial"]],m:[[/.[^aeiou]ium$/,Fo,"magnesium"],[/[^aeiou]ism$/,Fo,"schism"],[/^[hu]m+$/,Vo,"hmm"],[/^\d+ ?[ap]m$/,"Date","3am"]],n:[[/.[lsrnpb]ian$/,Go,"republican"],[/[^aeiou]ician$/,Bo,"musician"],[/[aeiou][ktrp]in'$/,"Gerund","cookin'"]],o:[[/^no+$/,Vo,"noooo"],[/^(yo)+$/,Vo,"yoo"],[/^wo{2,}[pt]?$/,Vo,"woop"]],r:[[/.[bdfklmst]ler$/,"Noun"],[/[aeiou][pns]er$/,Fo],[/[^i]fer$/,xo],[/.[^aeiou][ao]pher$/,Bo],[/.[lk]er$/,"Noun"],[/.ier$/,"Comparative"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,Go],[/[aeiou].*ist$/,Go],[/^[a-z]et$/,So]],s:[[/.[^aeiou]ises$/,Eo],[/.[rln]ates$/,Eo],[/.[^z]ens$/,So],[/.[lstrn]us$/,Fo],[/.[aeiou]sks$/,Eo],[/.[aeiou]kes$/,Eo],[/[aeiou][^aeiou]is$/,Fo],[/[a-z]'s$/,Ko],[/^yes+$/,Vo]],v:[[/.[^aeiou][ai][kln]ov$/,$o]],y:[[/.[cts]hy$/,Go],[/.[st]ty$/,Go],[/.[tnl]ary$/,Go],[/.[oe]ry$/,Fo],[/[rdntkbhs]ly$/,zo],[/.(gg|bb|zz)ly$/,Go],[/...lly$/,zo],[/.[gk]y$/,Go],[/[bszmp]{2}y$/,Go],[/.[ai]my$/,Go],[/[ea]{2}zy$/,Go],[/.[^aeiou]ity$/,Fo]]};const Mo="Verb",Jo="Noun";var Wo={leftTags:[["Adjective",Jo],["Possessive",Jo],["Determiner",Jo],["Adverb",Mo],["Pronoun",Mo],["Value",Jo],["Ordinal",Jo],["Modal",Mo],["Superlative",Jo],["Demonym",Jo],["Honorific","Person"]],leftWords:[["i",Mo],["first",Jo],["it",Mo],["there",Mo],["not",Mo],["because",Jo],["if",Jo],["but",Jo],["who",Mo],["this",Jo],["his",Jo],["when",Jo],["you",Mo],["very","Adjective"],["old",Jo],["never",Mo],["before",Jo],["a",Jo],["the",Jo],["been",Mo]],rightTags:[["Copula",Jo],["PastTense",Jo],["Conjunction",Jo],["Modal",Jo]],rightWords:[["there",Mo],["me",Mo],["man","Adjective"],["him",Mo],["it",Mo],["were",Jo],["took",Jo],["himself",Mo],["went",Jo],["who",Jo],["jr","Person"]]},Uo={fwd:"3:ser,ier¦1er:h,t,f,l,n¦1r:e¦2er:ss,or,om",both:"3er:ver,ear,alm¦3ner:hin¦3ter:lat¦2mer:im¦2er:ng,rm,mb¦2ber:ib¦2ger:ig¦1er:w,p,k,d¦ier:y",rev:"1:tter,yer¦2:uer,ver,ffer,oner,eler,ller,iler,ster,cer,uler,sher,ener,gher,aner,adder,nter,eter,rter,hter,rner,fter¦3:oser,ooler,eafer,user,airer,bler,maler,tler,eater,uger,rger,ainer,urer,ealer,icher,pler,emner,icter,nser,iser¦4:arser,viner,ucher,rosser,somer,ndomer,moter,oother,uarer,hiter¦5:nuiner,esser,emier¦ar:urther",ex:"worse:bad¦better:good¦4er:fair,gray,poor¦1urther:far¦3ter:fat,hot,wet¦3der:mad,sad¦3er:shy,fun¦4der:glad¦:¦4r:cute,dire,fake,fine,free,lame,late,pale,rare,ripe,rude,safe,sore,tame,wide¦5r:eerie,stale"},qo={fwd:"1:nning,tting,rring,pping,eing,mming,gging,dding,bbing,kking¦2:eking,oling,eling,eming¦3:velling,siting,uiting,fiting,loting,geting,ialing,celling¦4:graming",both:"1:aing,iing,fing,xing,ying,oing,hing,wing¦2:tzing,rping,izzing,bting,mning,sping,wling,rling,wding,rbing,uping,lming,wning,mping,oning,lting,mbing,lking,fting,hting,sking,gning,pting,cking,ening,nking,iling,eping,ering,rting,rming,cting,lping,ssing,nting,nding,lding,sting,rning,rding,rking¦3:belling,siping,toming,yaking,uaking,oaning,auling,ooping,aiding,naping,euring,tolling,uzzing,ganing,haning,ualing,halling,iasing,auding,ieting,ceting,ouling,voring,ralling,garing,joring,oaming,oaking,roring,nelling,ooring,uelling,eaming,ooding,eaping,eeting,ooting,ooming,xiting,keting,ooking,ulling,airing,oaring,biting,outing,oiting,earing,naling,oading,eeding,ouring,eaking,aiming,illing,oining,eaning,onging,ealing,aining,eading¦4:thoming,melling,aboring,ivoting,weating,dfilling,onoring,eriting,imiting,tialling,rgining,otoring,linging,winging,lleting,louding,spelling,mpelling,heating,feating,opelling,choring,welling,ymaking,ctoring,calling,peating,iloring,laiting,utoring,uditing,mmaking,loating,iciting,waiting,mbating,voiding,otalling,nsoring,nselling,ocusing,itoring,eloping¦5:rselling,umpeting,atrolling,treating,tselling,rpreting,pringing,ummeting,ossoming,elmaking,eselling,rediting,totyping,onmaking,rfeiting,ntrolling¦5e:chmaking,dkeeping,severing,erouting,ecreting,ephoning,uthoring,ravening,reathing,pediting,erfering,eotyping,fringing,entoring,ombining,ompeting¦4e:emaking,eething,twining,rruling,chuting,xciting,rseding,scoping,edoring,pinging,lunging,agining,craping,pleting,eleting,nciting,nfining,ncoding,tponing,ecoding,writing,esaling,nvening,gnoring,evoting,mpeding,rvening,dhering,mpiling,storing,nviting,ploring¦3e:tining,nuring,saking,miring,haling,ceding,xuding,rining,nuting,laring,caring,miling,riding,hoking,piring,lading,curing,uading,noting,taping,futing,paring,hading,loding,siring,guring,vading,voking,during,niting,laning,caping,luting,muting,ruding,ciding,juring,laming,caling,hining,uoting,liding,ciling,duling,tuting,puting,cuting,coring,uiding,tiring,turing,siding,rading,enging,haping,buting,lining,taking,anging,haring,uiring,coming,mining,moting,suring,viding,luding¦2e:tring,zling,uging,oging,gling,iging,vring,fling,lging,obing,psing,pling,ubing,cling,dling,wsing,iking,rsing,dging,kling,ysing,tling,rging,eging,nsing,uning,osing,uming,using,ibing,bling,aging,ising,asing,ating¦2ie:rlying¦1e:zing,uing,cing,ving",rev:"ying:ie¦1ing:se,ke,te,we,ne,re,de,pe,me,le,c,he¦2ing:ll,ng,dd,ee,ye,oe,rg,us¦2ning:un¦2ging:og,ag,ug,ig,eg¦2ming:um¦2bing:ub,ab,eb,ob¦3ning:lan,can,hin,pin,win¦3ring:cur,lur,tir,tar,pur,car¦3ing:ait,del,eel,fin,eat,oat,eem,lel,ool,ein,uin¦3ping:rop,rap,top,uip,wap,hip,hop,lap,rip,cap¦3ming:tem,wim,rim,kim,lim¦3ting:mat,cut,pot,lit,lot,hat,set,pit,put¦3ding:hed,bed,bid¦3king:rek¦3ling:cil,pel¦3bing:rib¦4ning:egin¦4ing:isit,ruit,ilot,nsit,dget,rkel,ival,rcel¦4ring:efer,nfer¦4ting:rmit,mmit,ysit,dmit,emit,bmit,tfit,gret¦4ling:evel,xcel,ivel¦4ding:hred¦5ing:arget,posit,rofit¦5ring:nsfer¦5ting:nsmit,orget,cquit¦5ling:ancel,istil",ex:"3:adding,eating,aiming,aiding,airing,outing,gassing,setting,getting,putting,cutting,winning,sitting,betting,mapping,tapping,letting,bidding,hitting,tanning,netting,popping,fitting,capping,lapping,barring,banning,vetting,topping,rotting,tipping,potting,wetting,pitting,dipping,budding,hemming,pinning,jetting,kidding,padding,podding,sipping,wedding,bedding,donning,warring,penning,gutting,cueing,wadding,petting,ripping,napping,matting,tinning,binning,dimming,hopping,mopping,nodding,panning,rapping,ridding,sinning¦4:selling,falling,calling,waiting,editing,telling,rolling,heating,boating,hanging,beating,coating,singing,tolling,felling,polling,discing,seating,voiding,gelling,yelling,baiting,reining,ruining,seeking,spanning,stepping,knitting,emitting,slipping,quitting,dialing,omitting,clipping,shutting,skinning,abutting,flipping,trotting,cramming,fretting,suiting¦5:bringing,treating,spelling,stalling,trolling,expelling,rivaling,wringing,deterring,singeing,befitting,refitting¦6:enrolling,distilling,scrolling,strolling,caucusing,travelling¦7:installing,redefining,stencilling,recharging,overeating,benefiting,unraveling,programing¦9:reprogramming¦is:being¦2e:using,aging,owing¦3e:making,taking,coming,noting,hiring,filing,coding,citing,doping,baking,coping,hoping,lading,caring,naming,voting,riding,mining,curing,lining,ruling,typing,boring,dining,firing,hiding,piling,taping,waning,baling,boning,faring,honing,wiping,luring,timing,wading,piping,fading,biting,zoning,daring,waking,gaming,raking,ceding,tiring,coking,wining,joking,paring,gaping,poking,pining,coring,liming,toting,roping,wiring,aching¦4e:writing,storing,eroding,framing,smoking,tasting,wasting,phoning,shaking,abiding,braking,flaking,pasting,priming,shoring,sloping,withing,hinging¦5e:defining,refining,renaming,swathing,fringing,reciting¦1ie:dying,tying,lying,vying¦7e:sunbathing"},Ro={fwd:"1:mt¦2:llen¦3:iven,aken¦:ne¦y:in",both:"1:wn¦2:me,aten¦3:seen,bidden,isen¦4:roven,asten¦3l:pilt¦3d:uilt¦2e:itten¦1im:wum¦1eak:poken¦1ine:hone¦1ose:osen¦1in:gun¦1ake:woken¦ear:orn¦eal:olen¦eeze:ozen¦et:otten¦ink:unk¦ing:ung",rev:"2:un¦oken:eak¦ought:eek¦oven:eave¦1ne:o¦1own:ly¦1den:de¦1in:ay¦2t:am¦2n:ee¦3en:all¦4n:rive,sake,take¦5n:rgive",ex:"2:been¦3:seen,run¦4:given,taken¦5:shaken¦2eak:broken¦1ive:dove¦2y:flown¦3e:hidden,ridden¦1eek:sought¦1ake:woken¦1eave:woven"},Qo={fwd:"1:oes¦1ve:as",both:"1:xes¦2:zzes,ches,shes,sses¦3:iases¦2y:llies,plies¦1y:cies,bies,ties,vies,nies,pies,dies,ries,fies¦:s",rev:"1ies:ly¦2es:us,go,do¦3es:cho,eto",ex:"2:does,goes¦3:gasses¦5:focuses¦is:are¦3y:relies¦2y:flies¦2ve:has"},Zo={fwd:"1st:e¦1est:l,m,f,s¦1iest:cey¦2est:or,ir¦3est:ver",both:"4:east¦5:hwest¦5lest:erful¦4est:weet,lgar,tter,oung¦4most:uter¦3est:ger,der,rey,iet,ong,ear¦3test:lat¦3most:ner¦2est:pt,ft,nt,ct,rt,ht¦2test:it¦2gest:ig¦1est:b,k,n,p,h,d,w¦iest:y",rev:"1:ttest,nnest,yest¦2:sest,stest,rmest,cest,vest,lmest,olest,ilest,ulest,ssest,imest,uest¦3:rgest,eatest,oorest,plest,allest,urest,iefest,uelest,blest,ugest,amest,yalest,ealest,illest,tlest,itest¦4:cerest,eriest,somest,rmalest,ndomest,motest,uarest,tiffest¦5:leverest,rangest¦ar:urthest¦3ey:riciest",ex:"best:good¦worst:bad¦5est:great¦4est:fast,full,fair,dull¦3test:hot,wet,fat¦4nest:thin¦1urthest:far¦3est:gay,shy,ill¦4test:neat¦4st:late,wide,fine,safe,cute,fake,pale,rare,rude,sore,ripe,dire¦6st:severe"},Xo={fwd:"1:tistic,eable,lful,sful,ting,tty¦2:onate,rtable,geous,ced,seful,ctful¦3:ortive,ented¦arity:ear¦y:etic¦fulness:begone¦1ity:re¦1y:tiful,gic¦2ity:ile,imous,ilous,ime¦2ion:ated¦2eness:iving¦2y:trious¦2ation:iring¦2tion:vant¦3ion:ect¦3ce:mant,mantic¦3tion:irable¦3y:est,estic¦3m:mistic,listic¦3ess:ning¦4n:utious¦4on:rative,native,vative,ective¦4ce:erant",both:"1:king,wing¦2:alous,ltuous,oyful,rdous¦3:gorous,ectable,werful,amatic¦4:oised,usical,agical,raceful,ocused,lined,ightful¦5ness:stful,lding,itous,nuous,ulous,otous,nable,gious,ayful,rvous,ntous,lsive,peful,entle,ciful,osive,leful,isive,ncise,reful,mious¦5ty:ivacious¦5ties:ubtle¦5ce:ilient,adiant,atient¦5cy:icient¦5sm:gmatic¦5on:sessive,dictive¦5ity:pular,sonal,eative,entic¦5sity:uminous¦5ism:conic¦5nce:mperate¦5ility:mitable¦5ment:xcited¦5n:bitious¦4cy:brant,etent,curate¦4ility:erable,acable,icable,ptable¦4ty:nacious,aive,oyal,dacious¦4n:icious¦4ce:vient,erent,stent,ndent,dient,quent,ident¦4ness:adic,ound,hing,pant,sant,oing,oist,tute¦4icity:imple¦4ment:fined,mused¦4ism:otic¦4ry:dantic¦4ity:tund,eral¦4edness:hand¦4on:uitive¦4lity:pitable¦4sm:eroic,namic¦4sity:nerous¦3th:arm¦3ility:pable,bable,dable,iable¦3cy:hant,nant,icate¦3ness:red,hin,nse,ict,iet,ite,oud,ind,ied,rce¦3ion:lute¦3ity:ual,gal,volous,ial¦3ce:sent,fensive,lant,gant,gent,lent,dant¦3on:asive¦3m:fist,sistic,iastic¦3y:terious,xurious,ronic,tastic¦3ur:amorous¦3e:tunate¦3ation:mined¦3sy:rteous¦3ty:ain¦3ry:ave¦3ment:azed¦2ness:de,on,ue,rn,ur,ft,rp,pe,om,ge,rd,od,ay,ss,er,ll,oy,ap,ht,ld,ad,rt¦2inousness:umous¦2ity:neous,ene,id,ane¦2cy:bate,late¦2ation:ized¦2ility:oble,ible¦2y:odic¦2e:oving,aring¦2s:ost¦2itude:pt¦2dom:ee¦2ance:uring¦2tion:reet¦2ion:oted¦2sion:ending¦2liness:an¦2or:rdent¦1th:ung¦1e:uable¦1ness:w,h,k,f¦1ility:mble¦1or:vent¦1ement:ging¦1tiquity:ncient¦1ment:hed¦verty:or¦ength:ong¦eat:ot¦pth:ep¦iness:y",rev:"",ex:"5:forceful,humorous¦8:charismatic¦13:understanding¦5ity:active¦11ness:adventurous,inquisitive,resourceful¦8on:aggressive,automatic,perceptive¦7ness:amorous,fatuous,furtive,ominous,serious¦5ness:ample,sweet¦12ness:apprehensive,cantankerous,contemptuous,ostentatious¦13ness:argumentative,conscientious¦9ness:assertive,facetious,imperious,inventive,oblivious,rapacious,receptive,seditious,whimsical¦10ness:attractive,expressive,impressive,loquacious,salubrious,thoughtful¦3edom:boring¦4ness:calm,fast,keen,tame¦8ness:cheerful,gracious,specious,spurious,timorous,unctuous¦5sity:curious¦9ion:deliberate¦8ion:desperate¦6e:expensive¦7ce:fragrant¦3y:furious¦9ility:ineluctable¦6ism:mystical¦8ity:physical,proactive,sensitive,vertical¦5cy:pliant¦7ity:positive¦9ity:practical¦12ism:professional¦6ce:prudent¦3ness:red¦6cy:vagrant¦3dom:wise"};const _o=function(e="",t={}){let n=function(e,t={}){return t.hasOwnProperty(e)?t[e]:null}(e,t.ex);return n=n||function(e,t=[]){for(let n=0;n=1;a-=1){let r=e.length-a,o=e.substring(r,e.length);if(!0===t.hasOwnProperty(o))return e.slice(0,r)+t[o];if(!0===n.hasOwnProperty(o))return e.slice(0,r)+n[o]}return t.hasOwnProperty("")?e+t[""]:n.hasOwnProperty("")?e+n[""]:null}(e,t.fwd,t.both),n=n||e,n},Yo=function(e){return Object.entries(e).reduce(((e,t)=>(e[t[1]]=t[0],e)),{})},ei=function(e={}){return{reversed:!0,both:Yo(e.both),ex:Yo(e.ex),fwd:e.rev||{}}},ti=/^([0-9]+)/,ni=function(e){let t=function(e){let t={};return e.split("¦").forEach((e=>{let[n,a]=e.split(":");a=(a||"").split(","),a.forEach((e=>{t[e]=n}))})),t}(e);return Object.keys(t).reduce(((e,n)=>(e[n]=function(e="",t=""){let n=(t=String(t)).match(ti);if(null===n)return t;let a=Number(n[1])||0;return e.substring(0,a)+t.replace(ti,"")}(n,t[n]),e)),{})},ai=function(e={}){return"string"==typeof e&&(e=JSON.parse(e)),e.fwd=ni(e.fwd||""),e.both=ni(e.both||""),e.rev=ni(e.rev||""),e.ex=ni(e.ex||""),e},ri=ai({fwd:"1:tted,wed,gged,nned,een,rred,pped,yed,bbed,oed,dded,rd,wn,mmed¦2:eed,nded,et,hted,st,oled,ut,emed,eled,lded,ken,rt,nked,apt,ant,eped,eked¦3:eared,eat,eaded,nelled,ealt,eeded,ooted,eaked,eaned,eeted,mited,bid,uit,ead,uited,ealed,geted,velled,ialed,belled¦4:ebuted,hined,comed¦y:ied¦ome:ame¦ear:ore¦ind:ound¦ing:ung,ang¦ep:pt¦ink:ank,unk¦ig:ug¦all:ell¦ee:aw¦ive:ave¦eeze:oze¦old:eld¦ave:ft¦ake:ook¦ell:old¦ite:ote¦ide:ode¦ine:one¦in:un,on¦eal:ole¦im:am¦ie:ay¦and:ood¦1ise:rose¦1eak:roke¦1ing:rought¦1ive:rove¦1el:elt¦1id:bade¦1et:got¦1y:aid¦1it:sat¦3e:lid¦3d:pent",both:"1:aed,fed,xed,hed¦2:sged,xted,wled,rped,lked,kied,lmed,lped,uped,bted,rbed,rked,wned,rled,mped,fted,mned,mbed,zzed,omed,ened,cked,gned,lted,sked,ued,zed,nted,ered,rted,rmed,ced,sted,rned,ssed,rded,pted,ved,cted¦3:cled,eined,siped,ooned,uked,ymed,jored,ouded,ioted,oaned,lged,asped,iged,mured,oided,eiled,yped,taled,moned,yled,lit,kled,oaked,gled,naled,fled,uined,oared,valled,koned,soned,aided,obed,ibed,meted,nicked,rored,micked,keted,vred,ooped,oaded,rited,aired,auled,filled,ouled,ooded,ceted,tolled,oited,bited,aped,tled,vored,dled,eamed,nsed,rsed,sited,owded,pled,sored,rged,osed,pelled,oured,psed,oated,loned,aimed,illed,eured,tred,ioned,celled,bled,wsed,ooked,oiled,itzed,iked,iased,onged,ased,ailed,uned,umed,ained,auded,nulled,ysed,eged,ised,aged,oined,ated,used,dged,doned¦4:ntied,efited,uaked,caded,fired,roped,halled,roked,himed,culed,tared,lared,tuted,uared,routed,pited,naked,miled,houted,helled,hared,cored,caled,tired,peated,futed,ciled,called,tined,moted,filed,sided,poned,iloted,honed,lleted,huted,ruled,cured,named,preted,vaded,sured,talled,haled,peded,gined,nited,uided,ramed,feited,laked,gured,ctored,unged,pired,cuted,voked,eloped,ralled,rined,coded,icited,vided,uaded,voted,mined,sired,noted,lined,nselled,luted,jured,fided,puted,piled,pared,olored,cided,hoked,enged,tured,geoned,cotted,lamed,uiled,waited,udited,anged,luded,mired,uired,raded¦5:modelled,izzled,eleted,umpeted,ailored,rseded,treated,eduled,ecited,rammed,eceded,atrolled,nitored,basted,twined,itialled,ncited,gnored,ploded,xcited,nrolled,namelled,plored,efeated,redited,ntrolled,nfined,pleted,llided,lcined,eathed,ibuted,lloted,dhered,cceded¦3ad:sled¦2aw:drew¦2ot:hot¦2ke:made¦2ow:hrew,grew¦2ose:hose¦2d:ilt¦2in:egan¦1un:ran¦1ink:hought¦1ick:tuck¦1ike:ruck¦1eak:poke,nuck¦1it:pat¦1o:did¦1ow:new¦1ake:woke¦go:went",rev:"3:rst,hed,hut,cut,set¦4:tbid¦5:dcast,eread,pread,erbid¦ought:uy,eek¦1ied:ny,ly,dy,ry,fy,py,vy,by,ty,cy¦1ung:ling,ting,wing¦1pt:eep¦1ank:rink¦1ore:bear,wear¦1ave:give¦1oze:reeze¦1ound:rind,wind¦1ook:take,hake¦1aw:see¦1old:sell¦1ote:rite¦1ole:teal¦1unk:tink¦1am:wim¦1ay:lie¦1ood:tand¦1eld:hold¦2d:he,ge,re,le,leed,ne,reed,be,ye,lee,pe,we¦2ed:dd,oy,or,ey,gg,rr,us,ew,to¦2ame:ecome,rcome¦2ped:ap¦2ged:ag,og,ug,eg¦2bed:ub,ab,ib,ob¦2lt:neel¦2id:pay¦2ang:pring¦2ove:trive¦2med:um¦2ode:rride¦2at:ysit¦3ted:mit,hat,mat,lat,pot,rot,bat¦3ed:low,end,tow,und,ond,eem,lay,cho,dow,xit,eld,ald,uld,law,lel,eat,oll,ray,ank,fin,oam,out,how,iek,tay,haw,ait,vet,say,cay,bow¦3d:ste,ede,ode,ete,ree,ude,ame,oke,ote,ime,ute,ade¦3red:lur,cur,pur,car¦3ped:hop,rop,uip,rip,lip,tep,top¦3ded:bed,rod,kid¦3ade:orbid¦3led:uel¦3ned:lan,can,kin,pan,tun¦3med:rim,lim¦4ted:quit,llot¦4ed:pear,rrow,rand,lean,mand,anel,pand,reet,link,abel,evel,imit,ceed,ruit,mind,peal,veal,hool,head,pell,well,mell,uell,band,hear,weak¦4led:nnel,qual,ebel,ivel¦4red:nfer,efer,sfer¦4n:sake,trew¦4d:ntee¦4ded:hred¦4ned:rpin¦5ed:light,nceal,right,ndear,arget,hread,eight,rtial,eboot¦5d:edite,nvite¦5ted:egret¦5led:ravel",ex:"2:been,upped¦3:added,aged,aided,aimed,aired,bid,died,dyed,egged,erred,eyed,fit,gassed,hit,lied,owed,pent,pied,tied,used,vied,oiled,outed,banned,barred,bet,canned,cut,dipped,donned,ended,feed,inked,jarred,let,manned,mowed,netted,padded,panned,pitted,popped,potted,put,set,sewn,sowed,tanned,tipped,topped,vowed,weed,bowed,jammed,binned,dimmed,hopped,mopped,nodded,pinned,rigged,sinned,towed,vetted¦4:ached,baked,baled,boned,bored,called,caned,cared,ceded,cited,coded,cored,cubed,cured,dared,dined,edited,exited,faked,fared,filed,fined,fired,fuelled,gamed,gelled,hired,hoped,joked,lined,mined,named,noted,piled,poked,polled,pored,pulled,reaped,roamed,rolled,ruled,seated,shed,sided,timed,tolled,toned,voted,waited,walled,waned,winged,wiped,wired,zoned,yelled,tamed,lubed,roped,faded,mired,caked,honed,banged,culled,heated,raked,welled,banded,beat,cast,cooled,cost,dealt,feared,folded,footed,handed,headed,heard,hurt,knitted,landed,leaked,leapt,linked,meant,minded,molded,neared,needed,peaked,plodded,plotted,pooled,quit,read,rooted,sealed,seeded,seeped,shipped,shunned,skimmed,slammed,sparred,stemmed,stirred,suited,thinned,twinned,swayed,winked,dialed,abutted,blotted,fretted,healed,heeded,peeled,reeled¦5:basted,cheated,equalled,eroded,exiled,focused,opined,pleated,primed,quoted,scouted,shored,sloped,smoked,sniped,spelled,spouted,routed,staked,stored,swelled,tasted,treated,wasted,smelled,dwelled,honored,prided,quelled,eloped,scared,coveted,sweated,breaded,cleared,debuted,deterred,freaked,modeled,pleaded,rebutted,speeded¦6:anchored,defined,endured,impaled,invited,refined,revered,strolled,cringed,recast,thrust,unfolded¦7:authored,combined,competed,conceded,convened,excreted,extruded,redefined,restored,secreted,rescinded,welcomed¦8:expedited,infringed¦9:interfered,intervened,persevered¦10:contravened¦eat:ate¦is:was¦go:went¦are:were¦3d:bent,lent,rent,sent¦3e:bit,fled,hid,lost¦3ed:bled,bred¦2ow:blew,grew¦1uy:bought¦2tch:caught¦1o:did¦1ive:dove,gave¦2aw:drew¦2ed:fed¦2y:flew,laid,paid,said¦1ight:fought¦1et:got¦2ve:had¦1ang:hung¦2ad:led¦2ght:lit¦2ke:made¦2et:met¦1un:ran¦1ise:rose¦1it:sat¦1eek:sought¦1each:taught¦1ake:woke,took¦1eave:wove¦2ise:arose¦1ear:bore,tore,wore¦1ind:bound,found,wound¦2eak:broke¦2ing:brought,wrung¦1ome:came¦2ive:drove¦1ig:dug¦1all:fell¦2el:felt¦4et:forgot¦1old:held¦2ave:left¦1ing:rang,sang¦1ide:rode¦1ink:sank¦1ee:saw¦2ine:shone¦4e:slid¦1ell:sold,told¦4d:spent¦2in:spun¦1in:won"}),oi=ai(Qo),ii=ai(qo),si=ai(Ro),li=ei(ri),ui=ei(oi),ci=ei(ii),di=ei(si),hi=ai(Uo),gi=ai(Zo);var mi={fromPast:ri,fromPresent:oi,fromGerund:ii,fromParticiple:si,toPast:li,toPresent:ui,toGerund:ci,toParticiple:di,toComparative:hi,toSuperlative:gi,fromComparative:ei(hi),fromSuperlative:ei(gi),adjToNoun:ai(Xo)},pi=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","bureau","cafe","co","caisse","capital","care","cathedral","center","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","data","departement","department","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","faculty","faction","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","llc","ltd","limited","machines","magazine","management","marine","marketing","markets","media","memorial","ministere","ministry","military","mobile","motor","motors","musee","museum","news","observatory","office","oil","optical","orchestra","organization","partners","partnership","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","politburo","polytechnic","post","power","press","productions","quartet","radio","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","societe","subsidiary","society","sons","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce(((e,t)=>(e[t]=!0,e)),{}),fi=["atoll","basin","bay","beach","bluff","bog","camp","canyon","canyons","cape","cave","caves","cliffs","coast","cove","coves","crater","crossing","creek","desert","dune","dunes","downs","estates","escarpment","estuary","falls","fjord","fjords","forest","forests","glacier","gorge","gorges","grove","gulf","gully","highland","heights","hollow","hill","hills","inlet","island","islands","isthmus","junction","knoll","lagoon","lake","lakeshore","marsh","marshes","mount","mountain","mountains","narrows","peninsula","plains","plateau","pond","rapids","ravine","reef","reefs","ridge","river","rivers","sandhill","shoal","shore","shoreline","shores","strait","straits","springs","stream","swamp","tombolo","trail","trails","trench","valley","vallies","village","volcano","waterfall","watershed","wetland","woods","acres","burough","county","district","municipality","prefecture","province","region","reservation","state","territory","borough","metropolis","downtown","uptown","midtown","city","town","township","hamlet","country","kingdom","enclave","neighbourhood","neighborhood","kingdom","ward","zone","airport","amphitheater","arch","arena","auditorium","bar","barn","basilica","battlefield","bridge","building","castle","centre","coliseum","cineplex","complex","dam","farm","field","fort","garden","gardens","gymnasium","hall","house","levee","library","manor","memorial","monument","museum","gallery","palace","pillar","pits","plantation","playhouse","quarry","sportsfield","sportsplex","stadium","terrace","terraces","theater","tower","park","parks","site","ranch","raceway","sportsplex","ave","st","street","rd","road","lane","landing","crescent","cr","way","tr","terrace","avenue"].reduce(((e,t)=>(e[t]=!0,e)),{}),bi=[[/([^v])ies$/i,"$1y"],[/(ise)s$/i,"$1"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(ause)s$/i,"$1"],[/(ease)s$/i,"$1"],[/(ious)es$/i,"$1"],[/(ouse)s$/i,"$1"],[/(ose)s$/i,"$1"],[/(..ase)s$/i,"$1"],[/(..[aeiu]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/([xo]|ch|ss|sh)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ic)s$/i,"$1"],[/s$/i,""]];const yi=function(e,t){const{irregularPlurals:n}=t.two,a=(r=n,Object.keys(r).reduce(((e,t)=>(e[r[t]]=t,e)),{}));var r;if(a.hasOwnProperty(e))return a[e];for(let t=0;t(wi[t].forEach((n=>e[n]=t)),e)),{});const ki=function(e){const t=e.substring(e.length-3);if(!0===wi.hasOwnProperty(t))return wi[t];const n=e.substring(e.length-2);if(!0===wi.hasOwnProperty(n))return wi[n];return"s"===e.substring(e.length-1)?"PresentTense":null},Pi={are:"be",were:"be",been:"be",is:"be",am:"be",was:"be",be:"be",being:"be"},Ai=function(e,t,n){const{fromPast:a,fromPresent:r,fromGerund:o,fromParticiple:i}=t.two.models,{prefix:s,verb:l,particle:u}=function(e,t){let n="",a={};t.one&&t.one.prefixes&&(a=t.one.prefixes);let[r,o]=e.split(/ /);return o&&!0===a[r]&&(n=r,r=o,o=""),{prefix:n,verb:r,particle:o}}(e,t);let c="";if(n||(n=ki(e)),Pi.hasOwnProperty(e))c=Pi[e];else if("Participle"===n)c=_o(l,i);else if("PastTense"===n)c=_o(l,a);else if("PresentTense"===n)c=_o(l,r);else{if("Gerund"!==n)return e;c=_o(l,o)}return u&&(c+=" "+u),s&&(c=s+" "+c),c},Ci=function(e,t){const{toPast:n,toPresent:a,toGerund:r,toParticiple:o}=t.two.models;if("be"===e)return{Infinitive:e,Gerund:"being",PastTense:"was",PresentTense:"is"};const[i,s]=(e=>/ /.test(e)?e.split(/ /):[e,""])(e),l={Infinitive:i,PastTense:_o(i,n),PresentTense:_o(i,a),Gerund:_o(i,r),FutureTense:"will "+i};let u=_o(i,o);if(u!==e&&u!==l.PastTense){const n=t.one.lexicon||{};"Participle"!==n[u]&&"Adjective"!==n[u]||("play"===e&&(u="played"),l.Participle=u)}return s&&Object.keys(l).forEach((e=>{l[e]+=" "+s})),l};var ji={toInfinitive:Ai,conjugate:Ci,all:function(e,t){const n=Ci(e,t);return delete n.FutureTense,Object.values(n).filter((e=>e))}};const Ni=function(e,t){const n=t.two.models.toSuperlative;return _o(e,n)},Ii=function(e,t){const n=t.two.models.toComparative;return _o(e,n)},Di=function(e="",t=[]){const n=e.length;for(let a=n<=6?n-1:6;a>=1;a-=1){const r=e.substring(n-a,e.length);if(!0===t[r.length].hasOwnProperty(r)){return e.slice(0,n-a)+t[r.length][r]}}return null},Hi="ically",Ti=new Set(["analyt"+Hi,"chem"+Hi,"class"+Hi,"clin"+Hi,"crit"+Hi,"ecolog"+Hi,"electr"+Hi,"empir"+Hi,"frant"+Hi,"grammat"+Hi,"ident"+Hi,"ideolog"+Hi,"log"+Hi,"mag"+Hi,"mathemat"+Hi,"mechan"+Hi,"med"+Hi,"method"+Hi,"method"+Hi,"mus"+Hi,"phys"+Hi,"phys"+Hi,"polit"+Hi,"pract"+Hi,"rad"+Hi,"satir"+Hi,"statist"+Hi,"techn"+Hi,"technolog"+Hi,"theoret"+Hi,"typ"+Hi,"vert"+Hi,"whims"+Hi]),Gi=[null,{},{ly:""},{ily:"y",bly:"ble",ply:"ple"},{ally:"al",rply:"rp"},{ually:"ual",ially:"ial",cally:"cal",eally:"eal",rally:"ral",nally:"nal",mally:"mal",eeply:"eep",eaply:"eap"},{ically:"ic"}],xi=new Set(["early","only","hourly","daily","weekly","monthly","yearly","mostly","duly","unduly","especially","undoubtedly","conversely","namely","exceedingly","presumably","accordingly","overly","best","latter","little","long","low"]),Ei={wholly:"whole",fully:"full",truly:"true",gently:"gentle",singly:"single",customarily:"customary",idly:"idle",publically:"public",quickly:"quick",superbly:"superb",cynically:"cynical",well:"good"},Fi=[null,{y:"ily"},{ly:"ly",ic:"ically"},{ial:"ially",ual:"ually",tle:"tly",ble:"bly",ple:"ply",ary:"arily"},{},{},{}],Oi={cool:"cooly",whole:"wholly",full:"fully",good:"well",idle:"idly",public:"publicly",single:"singly",special:"especially"},zi=function(e){if(Oi.hasOwnProperty(e))return Oi[e];let t=Di(e,Fi);return t||(t=e+"ly"),t};var Vi={toSuperlative:Ni,toComparative:Ii,toAdverb:zi,toNoun:function(e,t){const n=t.two.models.adjToNoun;return _o(e,n)},fromAdverb:function(e){return e.endsWith("ly")?Ti.has(e)?e.replace(/ically/,"ical"):xi.has(e)?null:Ei.hasOwnProperty(e)?Ei[e]:Di(e,Gi)||e:null},fromSuperlative:function(e,t){const n=t.two.models.fromSuperlative;return _o(e,n)},fromComparative:function(e,t){const n=t.two.models.fromComparative;return _o(e,n)},all:function(e,t){let n=[e];return n.push(Ni(e,t)),n.push(Ii(e,t)),n.push(zi(e)),n=n.filter((e=>e)),n=new Set(n),Array.from(n)}},Bi={noun:vi,verb:ji,adjective:Vi},Si={Singular:(e,t,n,a)=>{const r=a.one.lexicon,o=n.two.transform.noun.toPlural(e,a);r[o]||(t[o]=t[o]||"Plural")},Actor:(e,t,n,a)=>{const r=a.one.lexicon,o=n.two.transform.noun.toPlural(e,a);r[o]||(t[o]=t[o]||["Plural","Actor"])},Comparable:(e,t,n,a)=>{const r=a.one.lexicon,{toSuperlative:o,toComparative:i}=n.two.transform.adjective,s=o(e,a);r[s]||(t[s]=t[s]||"Superlative");const l=i(e,a);r[l]||(t[l]=t[l]||"Comparative"),t[e]="Adjective"},Demonym:(e,t,n,a)=>{const r=n.two.transform.noun.toPlural(e,a);t[r]=t[r]||["Demonym","Plural"]},Infinitive:(e,t,n,a)=>{const r=a.one.lexicon,o=n.two.transform.verb.conjugate(e,a);Object.entries(o).forEach((e=>{r[e[1]]||t[e[1]]||"FutureTense"===e[0]||(t[e[1]]=e[0])}))},PhrasalVerb:(e,t,n,a)=>{const r=a.one.lexicon;t[e]=["PhrasalVerb","Infinitive"];const o=a.one._multiCache,[i,s]=e.split(" ");r[i]||(t[i]=t[i]||"Infinitive");const l=n.two.transform.verb.conjugate(i,a);delete l.FutureTense,Object.entries(l).forEach((e=>{if("Actor"===e[0]||""===e[1])return;t[e[1]]||r[e[1]]||(t[e[1]]=e[0]),o[e[1]]=2;const n=e[1]+" "+s;t[n]=t[n]||[e[0],"PhrasalVerb"]}))},Multiple:(e,t)=>{t[e]=["Multiple","Cardinal"],t[e+"th"]=["Multiple","Ordinal"],t[e+"ths"]=["Multiple","Fraction"]},Cardinal:(e,t)=>{t[e]=["TextValue","Cardinal"]},Ordinal:(e,t)=>{t[e]=["TextValue","Ordinal"],t[e+"s"]=["TextValue","Fraction"]},Place:(e,t)=>{t[e]=["Place","ProperNoun"]},Region:(e,t)=>{t[e]=["Region","ProperNoun"]}};const Ki={e:["mice","louse","antennae","formulae","nebulae","vertebrae","vitae"],i:["tia","octopi","viri","radii","nuclei","fungi","cacti","stimuli"],n:["men"],t:["feet"]},$i=new Set(["israelis","menus","logos"]),Li=["bus","mas","was","ias","xas","vas","cis","lis","nis","ois","ris","sis","tis","xis","aus","cus","eus","fus","gus","ius","lus","nus","das","ous","pus","rus","sus","tus","xus","aos","igos","ados","ogos","'s","ss"],Mi=function(e){if(!e||e.length<=3)return!1;if($i.has(e))return!0;const t=e[e.length-1];return Ki.hasOwnProperty(t)?Ki[t].find((t=>e.endsWith(t))):"s"===t&&!Li.find((t=>e.endsWith(t)))};var Ji={two:{quickSplit:function(e){const t=/[,:;]/,n=[];return e.forEach((e=>{let a=0;e.forEach(((r,o)=>{t.test(r.post)&&function(e,t){const n=/^[0-9]+$/,a=e[t];if(!a)return!1;const r=new Set(["may","april","august","jan"]);if("like"===a.normal||r.has(a.normal))return!1;if(a.tags.has("Place")||a.tags.has("Date"))return!1;if(e[t-1]){const n=e[t-1];if(n.tags.has("Date")||r.has(n.normal))return!1;if(n.tags.has("Adjective")||a.tags.has("Adjective"))return!1}const o=a.normal;return 1!==o.length&&2!==o.length&&4!==o.length||!n.test(o)}(e,o+1)&&(n.push(e.slice(a,o+1)),a=o+1)})),a{const i=e[t],s=(t=(t=t.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);s.length>1&&(void 0===o[s[0]]||s.length>o[s[0]])&&(o[s[0]]=s.length),!0===Si.hasOwnProperty(i)&&Si[i](t,r,n,a),r[t]=r[t]||i})),delete r[""],delete r.null,delete r[" "],{lex:r,_multi:o}},transform:Bi,looksPlural:Mi}};const Wi={one:{lexicon:{}},two:{models:mi}},Ui={"Actor|Verb":"Actor","Adj|Gerund":"Adjective","Adj|Noun":"Adjective","Adj|Past":"Adjective","Adj|Present":"Adjective","Noun|Verb":"Singular","Noun|Gerund":"Gerund","Person|Noun":"Noun","Person|Date":"Month","Person|Verb":"FirstName","Person|Place":"Person","Person|Adj":"Comparative","Plural|Verb":"Plural","Unit|Noun":"Noun"},qi=function(e,t){const n={model:t,methods:Ji},{lex:a,_multi:r}=Ji.two.expandLexicon(e,n);return Object.assign(t.one.lexicon,a),Object.assign(t.one._multiCache,r),t},Ri=function(e,t,n){const a=Ci(e,Wi);t[a.PastTense]=t[a.PastTense]||"PastTense",t[a.Gerund]=t[a.Gerund]||"Gerund",!0===n&&(t[a.PresentTense]=t[a.PresentTense]||"PresentTense")},Qi=function(e,t,n){const a=Ni(e,n);t[a]=t[a]||"Superlative";const r=Ii(e,n);t[r]=t[r]||"Comparative"},Zi=function(e,t){const n={},a=t.one.lexicon;return Object.keys(e).forEach((r=>{const o=e[r];if(n[r]=Ui[o],"Noun|Verb"!==o&&"Person|Verb"!==o&&"Actor|Verb"!==o||Ri(r,a,!1),"Adj|Present"===o&&(Ri(r,a,!0),Qi(r,a,t)),"Person|Adj"===o&&Qi(r,a,t),"Adj|Gerund"===o||"Noun|Gerund"===o){const e=Ai(r,Wi,"Gerund");a[e]||(n[e]="Infinitive")}if("Noun|Gerund"!==o&&"Adj|Noun"!==o&&"Person|Noun"!==o||function(e,t,n){const a=Pr(e,n);t[a]=t[a]||"Plural"}(r,a,t),"Adj|Past"===o){const e=Ai(r,Wi,"PastTense");a[e]||(n[e]="Infinitive")}})),t=qi(n,t)};let Xi={one:{_multiCache:{},lexicon:Cr,frozenLex:{"20th century fox":"Organization","7 eleven":"Organization","motel 6":"Organization","excuse me":"Expression","financial times":"Organization","guns n roses":"Organization","la z boy":"Organization","labour party":"Organization","new kids on the block":"Organization","new york times":"Organization","the guess who":"Organization","thin lizzy":"Organization","prime minister":"Actor","free market":"Singular","lay up":"Singular","living room":"Singular","living rooms":"Plural","spin off":"Singular","appeal court":"Uncountable","cold war":"Uncountable","gene pool":"Uncountable","machine learning":"Uncountable","nail polish":"Uncountable","time off":"Uncountable","take part":"Infinitive","bill gates":"Person","doctor who":"Person","dr who":"Person","he man":"Person","iron man":"Person","kid cudi":"Person","run dmc":"Person","rush limbaugh":"Person","snow white":"Person","tiger woods":"Person","brand new":"Adjective","en route":"Adjective","left wing":"Adjective","off guard":"Adjective","on board":"Adjective","part time":"Adjective","right wing":"Adjective","so called":"Adjective","spot on":"Adjective","straight forward":"Adjective","super duper":"Adjective","tip top":"Adjective","top notch":"Adjective","up to date":"Adjective","win win":"Adjective","brooklyn nets":"SportsTeam","chicago bears":"SportsTeam","houston astros":"SportsTeam","houston dynamo":"SportsTeam","houston rockets":"SportsTeam","houston texans":"SportsTeam","minnesota twins":"SportsTeam","orlando magic":"SportsTeam","san antonio spurs":"SportsTeam","san diego chargers":"SportsTeam","san diego padres":"SportsTeam","iron maiden":"ProperNoun","isle of man":"Country","united states":"Country","united states of america":"Country","prince edward island":"Region","cedar breaks":"Place","cedar falls":"Place","point blank":"Adverb","tiny bit":"Adverb","by the time":"Conjunction","no matter":"Conjunction","civil wars":"Plural","credit cards":"Plural","default rates":"Plural","free markets":"Plural","head starts":"Plural","home runs":"Plural","lay ups":"Plural","phone calls":"Plural","press releases":"Plural","record labels":"Plural","soft serves":"Plural","student loans":"Plural","tax returns":"Plural","tv shows":"Plural","video games":"Plural","took part":"PastTense","takes part":"PresentTense","taking part":"Gerund","taken part":"Participle","light bulb":"Noun","rush hour":"Noun","fluid ounce":"Unit","the rolling stones":"Organization"}},two:{irregularPlurals:dr,models:mi,suffixPatterns:No,prefixPatterns:To,endsWith:Lo,neighbours:Wo,regexNormal:[[/^[\w.]+@[\w.]+\.[a-z]{2,3}$/,"Email"],[/^(https?:\/\/|www\.)+\w+\.[a-z]{2,3}/,"Url","http.."],[/^[a-z0-9./].+\.(com|net|gov|org|ly|edu|info|biz|dev|ru|jp|de|in|uk|br|io|ai)/,"Url",".com"],[/^[PMCE]ST$/,"Timezone","EST"],[/^ma?c'[a-z]{3}/,"LastName","mc'neil"],[/^o'[a-z]{3}/,"LastName","o'connor"],[/^ma?cd[aeiou][a-z]{3}/,"LastName","mcdonald"],[/^(lol)+[sz]$/,"Expression","lol"],[/^wo{2,}a*h?$/,"Expression","wooah"],[/^(hee?){2,}h?$/,"Expression","hehe"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb","un-vite"],[/^(m|k|cm|km)\/(s|h|hr)$/,"Unit","5 k/m"],[/^(ug|ng|mg)\/(l|m3|ft3)$/,"Unit","ug/L"],[/[^:/]\/\p{Letter}/u,"SlashedTerm","love/hate"]],regexText:[[/^#[\p{Number}_]*\p{Letter}/u,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^([A-Z]\.){2}[A-Z]?/i,["Acronym","Noun"],"F.B.I"],[/.{3}[lkmnp]in['‘’‛‵′`´]$/,"Gerund","chillin'"],[/.{4}s['‘’‛‵′`´]$/,"Possessive","flanders'"],[/^[\p{Emoji_Presentation}\p{Extended_Pictographic}]/u,"Emoji","emoji-class"]],regexNumbers:[[/^@1?[0-9](am|pm)$/i,"Time","3pm"],[/^@1?[0-9]:[0-9]{2}(am|pm)?$/i,"Time","3:30pm"],[/^'[0-9]{2}$/,"Year"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time","3:12:31"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/i,"Time","1:12pm"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/i,"Time","1:12:31pm"],[/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}/i,"Date","iso-date"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date","iso-dash"],[/^[0-9]{1,4}\/[0-9]{1,2}\/([0-9]{4}|[0-9]{2})$/,"Date","iso-slash"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date","iso-dot"],[/^[0-9]{1,4}-[a-z]{2,9}-[0-9]{1,4}$/i,"Date","12-dec-2019"],[/^utc ?[+-]?[0-9]+$/,"Timezone","utc-9"],[/^(gmt|utc)[+-][0-9]{1,2}$/i,"Timezone","gmt-3"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber","421-0029"],[/^(\+?[0-9][ -])?[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber","1-800-"],[/^[-+]?\p{Currency_Symbol}[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?([kmb]|bn)?\+?$/u,["Money","Value"],"$5.30"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\p{Currency_Symbol}\+?$/u,["Money","Value"],"5.30£"],[/^[-+]?[$£]?[0-9]([0-9,.])+(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"],"$400usd"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"],"5,999"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|r?th)$/,["Ordinal","NumericValue"],"53rd"],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"],".73th"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"],"-4%"],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"],".3%"],[/^[0-9]{1,4}\/[0-9]{1,4}(st|nd|rd|th)?s?$/,["Fraction","NumericValue"],"2/3rds"],[/^[0-9.]{1,3}[a-z]{0,2}[-–—][0-9]{1,3}[a-z]{0,2}$/,["Value","NumberRange"],"3-4"],[/^[0-9]{1,2}(:[0-9][0-9])?(am|pm)? ?[-–—] ?[0-9]{1,2}(:[0-9][0-9])?(am|pm)$/,["Time","NumberRange"],"3-4pm"],[/^[0-9.]+([a-z°]{1,4})$/,"NumericValue","9km"]],switches:jr,clues:uo,uncountable:{},orgWords:pi,placeWords:fi}};Xi=function(e){return e=function(e,t){return Object.keys(e).forEach((n=>{"Uncountable"===e[n]&&(t.two.uncountable[n]=!0,e[n]="Uncountable")})),t}((e=qi(e.one.lexicon,e)).one.lexicon,e),e=function(e){const{irregularPlurals:t}=e.two,{lexicon:n}=e.one;return Object.entries(t).forEach((e=>{n[e[0]]=n[e[0]]||"Singular",n[e[1]]=n[e[1]]||"Plural"})),e}(e=Zi(e.two.switches,e)),e}(Xi);const _i=function(e,t,n,a){const r=a.methods.one.setTag;"-"===e[t].post&&e[t+1]&&r([e[t],e[t+1]],"Hyphenated",a,null,"1-punct-hyphen''")},Yi=/^(under|over|mis|re|un|dis|semi)-?/,es=function(e,t,n){const a=n.two.switches,r=e[t];if(a.hasOwnProperty(r.normal))r.switch=a[r.normal];else if(Yi.test(r.normal)){const e=r.normal.replace(Yi,"");e.length>3&&a.hasOwnProperty(e)&&(r.switch=a[e])}},ts=function(e,t,n){if(!t||0===t.length)return;if(!0===e.frozen)return;const a="undefined"!=typeof process&&process.env?process.env:self.env||{};a&&a.DEBUG_TAGS&&((e,t,n="")=>{const a=e.text||"["+e.implicit+"]";var r;"string"!=typeof t&&t.length>2&&(t=t.slice(0,2).join(", #")+" +"),t="string"!=typeof t?t.join(", #"):t,console.log(` ${(r=a,""+r+"").padEnd(24)} → #${t.padEnd(22)} ${(e=>""+e+"")(n)}`)})(e,t,n),e.tags=e.tags||new Set,"string"==typeof t?e.tags.add(t):t.forEach((t=>e.tags.add(t)))},ns=["Acronym","Abbreviation","ProperNoun","Uncountable","Possessive","Pronoun","Activity","Honorific","Month"],as=function(e,t,n){const a=e[t],r=Array.from(a.tags);for(let e=0;ee.tags.has(t)))||(Mi(e.normal)?ts(e,"Plural","3-plural-guess"):ts(e,"Singular","3-singular-guess"))}(a),function(e){const t=e.tags;if(t.has("Verb")&&1===t.size){const t=ki(e.normal);t&&ts(e,t,"3-verb-tense-guess")}}(a)},rs=/^\p{Lu}[\p{Ll}'’]/u,os=/[0-9]/,is=["Date","Month","WeekDay","Unit","Expression"],ss=/[IVX]/,ls=/^[IVXLCDM]{2,}$/,us=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,cs={li:!0,dc:!0,md:!0,dm:!0,ml:!0},ds=function(e,t,n){const a=e[t];a.index=a.index||[0,0];const r=a.index[1],o=a.text||"";return 0!==r&&!0===rs.test(o)&&!1===os.test(o)?is.find((e=>a.tags.has(e)))||a.pre.match(/["']$/)||"the"===a.normal?null:(as(e,t,n),a.tags.has("Noun")||a.frozen||a.tags.clear(),ts(a,"ProperNoun","2-titlecase"),!0):o.length>=2&&ls.test(o)&&ss.test(o)&&us.test(o)&&!cs[a.normal]?(ts(a,"RomanNumeral","2-xvii"),!0):null},hs=function(e="",t=[]){const n=e.length;let a=7;n<=a&&(a=n-1);for(let r=a;r>1;r-=1){const a=e.substring(n-r,n);if(!0===t[a.length].hasOwnProperty(a)){return t[a.length][a]}}return null},gs=function(e,t,n){const a=e[t];if(0===a.tags.size){let e=hs(a.normal,n.two.suffixPatterns);if(null!==e)return ts(a,e,"2-suffix"),a.confidence=.7,!0;if(a.implicit&&(e=hs(a.implicit,n.two.suffixPatterns),null!==e))return ts(a,e,"2-implicit-suffix"),a.confidence=.7,!0}return null},ms=/['‘’‛‵′`´]/,ps=function(e,t){for(let n=0;nn-3&&(a=n-3);for(let n=a;n>2;n-=1){const a=e.substring(0,n);if(!0===t[a.length].hasOwnProperty(a))return t[a.length][a]}return null}(a.normal,n.two.prefixPatterns);if(null!==e)return ts(a,e,"2-prefix"),a.confidence=.5,!0}return null},ys=new Set(["in","on","by","until","for","to","during","throughout","through","within","before","after","of","this","next","last","circa","around","post","pre","budget","classic","plan","may"]),vs=function(e){if(!e)return!1;const t=e.normal||e.implicit;return!!ys.has(t)||(!!(e.tags.has("Date")||e.tags.has("Month")||e.tags.has("WeekDay")||e.tags.has("Year"))||!!e.tags.has("ProperNoun"))},ws=function(e){return!!e&&(!!e.tags.has("Ordinal")||(!!(e.tags.has("Cardinal")&&e.normal.length<3)||("is"===e.normal||"was"===e.normal)))},ks=function(e){return e&&(e.tags.has("Date")||e.tags.has("Month")||e.tags.has("WeekDay")||e.tags.has("Year"))},Ps=function(e,t){const n=e[t];if(n.tags.has("NumericValue")&&n.tags.has("Cardinal")&&4===n.normal.length){const a=Number(n.normal);if(a&&!isNaN(a)&&a>1400&&a<2100){const r=e[t-1],o=e[t+1];if(vs(r)||vs(o))return ts(n,"Year","2-tagYear");if(a>=1920&&a<2025){if(ws(r)||ws(o))return ts(n,"Year","2-tagYear-close");if(ks(e[t-2])||ks(e[t+2]))return ts(n,"Year","2-tagYear-far");if(r&&(r.tags.has("Determiner")||r.tags.has("Possessive"))&&o&&o.tags.has("Noun")&&!o.tags.has("Plural"))return ts(n,"Year","2-tagYear-noun")}}}return null},As=function(e,t,n,a){const r=a.methods.one.setTag,o=e[t],i=["PastTense","PresentTense","Auxiliary","Modal","Particle"];if(o.tags.has("Verb")){i.find((e=>o.tags.has(e)))||r([o],"Infinitive",a,null,"2-verb-type''")}},Cs=/^[A-Z]('s|,)?$/,js=/^[A-Z-]+$/,Ns=/^[A-Z]+s$/,Is=/([A-Z]\.)+[A-Z]?,?$/,Ds=/[A-Z]{2,}('s|,)?$/,Hs=/([a-z]\.)+[a-z]\.?$/,Ts={I:!0,A:!0},Gs={la:!0,ny:!0,us:!0,dc:!0,gb:!0},xs=function(e,t,n){const a=e[t];return a.tags.has("RomanNumeral")||a.tags.has("Acronym")||a.frozen?null:function(e,t){let n=e.text;if(!1===js.test(n)){if(!(n.length>3&&!0===Ns.test(n)))return!1;n=n.replace(/s$/,"")}return!(n.length>5||Ts.hasOwnProperty(n)||t.one.lexicon.hasOwnProperty(e.normal)||!0!==Is.test(n)&&!0!==Hs.test(n)&&!0!==Cs.test(n)&&!0!==Ds.test(n))}(a,n)?(a.tags.clear(),ts(a,["Acronym","Noun"],"3-no-period-acronym"),!0===Gs[a.normal]&&ts(a,"Place","3-place-acronym"),!0===Ns.test(a.text)&&ts(a,"Plural","3-plural-acronym"),!0):!Ts.hasOwnProperty(a.text)&&Cs.test(a.text)?(a.tags.clear(),ts(a,["Acronym","Noun"],"3-one-letter-acronym"),!0):a.tags.has("Organization")&&a.text.length<=3?(ts(a,"Acronym","3-org-acronym"),!0):a.tags.has("Organization")&&js.test(a.text)&&a.text.length<=6?(ts(a,"Acronym","3-titlecase-acronym"),!0):null},Es=function(e,t){if(!e)return null;const n=t.find((t=>e.normal===t[0]));return n?n[1]:null},Fs=function(e,t){if(!e)return null;const n=t.find((t=>e.tags.has(t[0])));return n?n[1]:null},Os=function(e,t,n){const{leftTags:a,leftWords:r,rightWords:o,rightTags:i}=n.two.neighbours,s=e[t];if(0===s.tags.size){let l=null;if(l=l||Es(e[t-1],r),l=l||Es(e[t+1],o),l=l||Fs(e[t-1],a),l=l||Fs(e[t+1],i),l)return ts(s,l,"3-[neighbour]"),as(e,t,n),e[t].confidence=.2,!0}return null},zs=function(e,t,n){return!!e&&(!e.tags.has("FirstName")&&!e.tags.has("Place")&&(!!(e.tags.has("ProperNoun")||e.tags.has("Organization")||e.tags.has("Acronym"))||!(n||(a=e.text,!/^\p{Lu}[\p{Ll}'’]/u.test(a)))&&(0!==t||e.tags.has("Singular"))));var a},Vs=function(e,t,n,a){const r=n.model.two.orgWords,o=n.methods.one.setTag,i=e[t];if(!0===r[i.machine||i.normal]&&zs(e[t-1],t-1,a)){o([e[t]],"Organization",n,null,"3-[org-word]");for(let r=t;r>=0&&zs(e[r],r,a);r-=1)o([e[r]],"Organization",n,null,"3-[org-word]")}return null},Bs=/'s$/,Ss=new Set(["athletic","city","community","eastern","federal","financial","great","historic","historical","local","memorial","municipal","national","northern","provincial","southern","state","western","spring","pine","sunset","view","oak","maple","spruce","cedar","willow"]),Ks=new Set(["center","centre","way","range","bar","bridge","field","pit"]),$s=function(e,t,n){if(!e)return!1;const a=e.tags;return!(a.has("Organization")||a.has("Possessive")||Bs.test(e.normal))&&(!(!a.has("ProperNoun")&&!a.has("Place"))||!(n||(r=e.text,!/^\p{Lu}[\p{Ll}'’]/u.test(r)))&&(0!==t||a.has("Singular")));var r},Ls=function(e,t,n,a){const r=n.model.two.placeWords,o=n.methods.one.setTag,i=e[t],s=i.machine||i.normal;if(!0===r[s]){for(let r=t-1;r>=0;r-=1)if(!Ss.has(e[r].normal)){if(!$s(e[r],r,a))break;o(e.slice(r,t+1),"Place",n,null,"3-[place-of-foo]")}if(Ks.has(s))return!1;for(let r=t+1;re[t].tags.has("ProperNoun")&&Js.test(e[t].text)?"Noun":null,Us=(e,t,n)=>0!==t||e[1]?null:n,qs={"Adj|Gerund":(e,t)=>Ws(e,t),"Adj|Noun":(e,t)=>Ws(e,t)||function(e,t){return!e[t+1]&&e[t-1]&&e[t-1].tags.has("Determiner")?"Noun":null}(e,t),"Actor|Verb":(e,t)=>Ws(e,t),"Adj|Past":(e,t)=>Ws(e,t),"Adj|Present":(e,t)=>Ws(e,t),"Noun|Gerund":(e,t)=>Ws(e,t),"Noun|Verb":(e,t)=>t>0&&Ws(e,t)||Us(e,t,"Infinitive"),"Plural|Verb":(e,t)=>Ws(e,t)||Us(e,t,"PresentTense")||function(e,t,n){return 0===t&&e.length>3?n:null}(e,t,"Plural"),"Person|Noun":(e,t)=>Ws(e,t),"Person|Verb":(e,t)=>0!==t?Ws(e,t):null,"Person|Adj":(e,t)=>0===t&&e.length>1||Ws(e,t)?"Person":null},Rs="undefined"!=typeof process&&process.env?process.env:self.env||{},Qs=/^(under|over|mis|re|un|dis|semi)-?/,Zs=(e,t)=>{if(!e||!t)return null;const n=e.normal||e.implicit;let a=null;return t.hasOwnProperty(n)&&(a=t[n]),a&&Rs.DEBUG_TAGS&&console.log(`\n  ↓ - '${n}' `),a},Xs=(e,t={},n)=>{if(!e||!t)return null;const a=Array.from(e.tags).sort(((e,t)=>(n[e]?n[e].parents.length:0)>(n[t]?n[t].parents.length:0)?-1:1));let r=a.find((e=>t[e]));return r&&Rs.DEBUG_TAGS&&console.log(`  ↓ - '${e.normal||e.implicit}' (#${r}) `),r=t[r],r},_s=function(e,t,n){const a=n.model,r=n.methods.one.setTag,{switches:o,clues:i}=a.two,s=e[t];let l=s.normal||s.implicit||"";if(Qs.test(l)&&!o[l]&&(l=l.replace(Qs,"")),s.switch){const o=s.switch;if(s.tags.has("Acronym")||s.tags.has("PhrasalVerb"))return;let u=function(e,t,n,a){if(!n)return null;const r="also"!==e[t-1]?.text?t-1:Math.max(0,t-2),o=a.one.tagSet;let i=Zs(e[t+1],n.afterWords);return i=i||Zs(e[r],n.beforeWords),i=i||Xs(e[r],n.beforeTags,o),i=i||Xs(e[t+1],n.afterTags,o),i}(e,t,i[o],a);qs[o]&&(u=qs[o](e,t)||u),u?(r([s],u,n,null,`3-[switch] (${o})`),as(e,t,a)):Rs.DEBUG_TAGS&&console.log(`\n -> X - '${l}' : (${o}) `)}},Ys={there:!0,this:!0,it:!0,him:!0,her:!0,us:!0},el=function(e){if(e.filter((e=>!e.tags.has("ProperNoun"))).length<=3)return!1;const t=/^[a-z]/;return e.every((e=>!t.test(e.text)))},tl=function(e,t,n,a){for(let r=0;r=2){if(e.length<4&&!Ys[e[1].normal])return;if(!r.tags.has("PhrasalVerb")&&a.hasOwnProperty(r.normal))return;(e[1].tags.has("Noun")||e[1].tags.has("Determiner"))&&(e.slice(1,3).some((e=>e.tags.has("Verb")))&&!r.tags.has("#PhrasalVerb")||n([r],"Imperative",t,null,"3-[imperative]"))}}(e,n)},al={Possessive:e=>{let t=e.machine||e.normal||e.text;return t=t.replace(/'s$/,""),t},Plural:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.noun.toSingular(n,t.model)},Copula:()=>"is",PastTense:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.verb.toInfinitive(n,t.model,"PastTense")},Gerund:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.verb.toInfinitive(n,t.model,"Gerund")},PresentTense:(e,t)=>{const n=e.machine||e.normal||e.text;return e.tags.has("Infinitive")?n:t.methods.two.transform.verb.toInfinitive(n,t.model,"PresentTense")},Comparative:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.adjective.fromComparative(n,t.model)},Superlative:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.adjective.fromSuperlative(n,t.model)},Adverb:(e,t)=>{const{fromAdverb:n}=t.methods.two.transform.adjective;return n(e.machine||e.normal||e.text)}},rl={Adverb:"RB",Comparative:"JJR",Superlative:"JJS",Adjective:"JJ",TO:"Conjunction",Modal:"MD",Auxiliary:"MD",Gerund:"VBG",PastTense:"VBD",Participle:"VBN",PresentTense:"VBZ",Infinitive:"VB",Particle:"RP",Verb:"VB",Pronoun:"PRP",Cardinal:"CD",Conjunction:"CC",Determiner:"DT",Preposition:"IN",QuestionWord:"WP",Expression:"UH",Possessive:"POS",ProperNoun:"NNP",Person:"NNP",Place:"NNP",Organization:"NNP",Singular:"NN",Plural:"NNS",Noun:"NN",There:"EX"};var ol={preTagger:function(e){const{methods:t,model:n,world:a}=e,r=e.docs;!function(e,t,n){e.forEach((e=>{!function(e,t,n,a){const r=a.methods.one.setTag;if(e.length>=3){const t=/:/;if(e[0].post.match(t)){const t=e[1];if(t.tags.has("Value")||t.tags.has("Email")||t.tags.has("PhoneNumber"))return;r([e[0]],"Expression",a,null,"2-punct-colon''")}}}(e,0,0,n)}))}(r,0,a);const o=t.two.quickSplit(r);for(let e=0;e{for(let a=0;a{e.forEach((e=>{e.penn=function(e){if(e.tags.has("ProperNoun")&&e.tags.has("Plural"))return"NNPS";if(e.tags.has("Possessive")&&e.tags.has("Pronoun"))return"PRP$";if("there"===e.normal)return"EX";if("to"===e.normal)return"TO";const t=e.tagRank||[];for(let e=0;e{e.implicit=e.normal,e.text="",e.normal=""}));for(let e=0;e(e.implicit=e.text,e.machine=e.text,e.pre="",e.post="",e.text="",e.normal="",e.index=[a,r+t],e))),n[0]&&(n[0].pre=e[a][r].pre,n[n.length-1].post=e[a][r].post,n[0].text=e[a][r].text,n[0].normal=e[a][r].normal),e[a].splice(r,1,...n))},fl=/'/,bl=new Set(["been","become"]),yl=new Set(["what","how","when","if","too"]),vl=new Set(["too","also","enough"]),wl=function(e,t){const n=e[t].normal.split(fl)[0];if("let"===n)return[n,"us"];if("there"===n){const a=e[t+1];if(a&&a.tags.has("Plural"))return[n,"are"]}return"has"===((e,t)=>{for(let n=t+1;n{for(let n=t+1;n0&&(n-=1),e[o]&&(o+=1),r.ptrs=[[0,n,o]],r.compute(["freeze","lexicon","preTagger","unfreeze"]),function(e){e.forEach(((e,t)=>{e.index&&(e.index[1]=t)}))}(e)},Gl={d:(e,t)=>Cl(e,t),t:(e,t)=>function(e,t){if("ain't"===e[t].normal||"aint"===e[t].normal){if(e[t+1]&&"never"===e[t+1].normal)return["have"];const n=function(e,t){for(let n=t-1;n>=0;n-=1)if(e[n].tags.has("Noun")||e[n].tags.has("Pronoun")||e[n].tags.has("Plural")||e[n].tags.has("Singular"))return e[n];return null}(e,t);if(n){if("we"===n.normal||"they"===n.normal)return["are","not"];if("i"===n.normal)return["am","not"];if(n.tags&&n.tags.has("Plural"))return["are","not"]}return["is","not"]}return[e[t].normal.replace(/n't/,""),"not"]}(e,t),s:(e,t,n)=>((e,t)=>{const n=e[t];if(jl.hasOwnProperty(n.machine||n.normal))return!1;if(n.tags.has("Possessive"))return!0;if(n.tags.has("QuestionWord"))return!1;if("he's"===n.normal||"she's"===n.normal)return!1;const a=e[t+1];if(!a)return!0;if("it's"===n.normal)return!!a.tags.has("#Noun");if("Noun|Gerund"==a.switch){const a=e[t+2];return a?!!a.tags.has("Copula")||("on"===a.normal||a.normal,!1):!(!n.tags.has("Actor")&&!n.tags.has("ProperNoun"))}if(a.tags.has("Verb"))return!!a.tags.has("Infinitive")||!a.tags.has("Gerund")&&!!a.tags.has("PresentTense");if("Adj|Noun"===a.switch){const n=e[t+2];if(!n)return!1;if(Dl.has(n.normal))return!0;if(Il.has(n.normal))return!1}if(a.tags.has("Noun")){const e=a.machine||a.normal;return!("here"===e||"there"===e||"everywhere"===e||a.tags.has("Possessive")||a.tags.has("ProperNoun")&&!n.tags.has("ProperNoun"))}if(e[t-1]&&!0===Nl[e[t-1].normal])return!0;if(a.tags.has("Adjective")){const n=e[t+2];if(!n)return!1;if(n.tags.has("Noun")&&!n.tags.has("Pronoun")){const e=a.normal;return"above"!==e&&"below"!==e&&"behind"!==e}return"Noun|Verb"===n.switch}return!!a.tags.has("Value")})(e,t)?n.methods.one.setTag([e[t]],"Possessive",n,null,"2-contraction"):wl(e,t)},xl=function(e,t){const n=t.fromText(e.join(" "));return n.compute("id"),n.docs[0]};var El={contractionTwo:e=>{const{world:t,document:n}=e;n.forEach(((a,r)=>{for(let o=a.length-1;o>=0;o-=1){if(a[o].implicit)continue;let i=null;!0===Hl.test(a[o].normal)&&(i=a[o].normal.split(Hl)[1]);let s=null;Gl.hasOwnProperty(i)&&(s=Gl[i](a,o,t)),s&&(s=xl(s,e),pl(n,[r,o],s),Tl(n[r],e,o,s.length))}}))}},Fl={compute:El,api:function(e){class Contractions extends e{constructor(e,t,n){super(e,t,n),this.viewType="Contraction"}expand(){return this.docs.forEach((e=>{const t=ml.test(e[0].text);e.forEach(((t,n)=>{t.text=t.implicit||"",delete t.implicit,ne.toUpperCase()))}(e[0].text))})),this.compute("normal"),this}}e.prototype.contractions=function(){const e=this.match("@hasContraction+");return new Contractions(this.document,e.pointer)},e.prototype.contract=gl},hooks:["contractionTwo"]};const Ol="(hard|fast|late|early|high|right|deep|close|direct)";const zl="(i|we|they)";const Vl=[].concat([{match:"(got|were|was|is|are|am) (#PastTense|#Participle)",tag:"Passive",reason:"got-walked"},{match:"(was|were|is|are|am) being (#PastTense|#Participle)",tag:"Passive",reason:"was-being"},{match:"(had|have|has) been (#PastTense|#Participle)",tag:"Passive",reason:"had-been"},{match:"will be being? (#PastTense|#Participle)",tag:"Passive",reason:"will-be-cleaned"},{match:"#Noun [(#PastTense|#Participle)] by (the|a) #Noun",group:0,tag:"Passive",reason:"suffered-by"}],[{match:"[(all|both)] #Determiner #Noun",group:0,tag:"Noun",reason:"all-noun"},{match:"#Copula [(just|alone)]$",group:0,tag:"Adjective",reason:"not-adverb"},{match:"#Singular is #Adverb? [#PastTense$]",group:0,tag:"Adjective",reason:"is-filled"},{match:"[#PastTense] #Singular is",group:0,tag:"Adjective",reason:"smoked-poutine"},{match:"[#PastTense] #Plural are",group:0,tag:"Adjective",reason:"baked-onions"},{match:"well [#PastTense]",group:0,tag:"Adjective",reason:"well-made"},{match:"#Copula [fucked up?]",group:0,tag:"Adjective",reason:"swears-adjective"},{match:"#Singular (seems|appears) #Adverb? [#PastTense$]",group:0,tag:"Adjective",reason:"seems-filled"},{match:"#Copula #Adjective? [(out|in|through)]$",group:0,tag:"Adjective",reason:"still-out"},{match:"^[#Adjective] (the|your) #Noun",group:0,notIf:"(all|even)",tag:"Infinitive",reason:"shut-the"},{match:"the [said] #Noun",group:0,tag:"Adjective",reason:"the-said-card"},{match:"[#Hyphenated (#Hyphenated && #PastTense)] (#Noun|#Conjunction)",group:0,tag:"Adjective",notIf:"#Adverb",reason:"faith-based"},{match:"[#Hyphenated (#Hyphenated && #Gerund)] (#Noun|#Conjunction)",group:0,tag:"Adjective",notIf:"#Adverb",reason:"self-driving"},{match:"[#PastTense (#Hyphenated && #PhrasalVerb)] (#Noun|#Conjunction)",group:0,tag:"Adjective",reason:"dammed-up"},{match:"(#Hyphenated && #Value) fold",tag:"Adjective",reason:"two-fold"},{match:"must (#Hyphenated && #Infinitive)",tag:"Adjective",reason:"must-win"},{match:"(#Hyphenated && #Infinitive) #Hyphenated",tag:"Adjective",notIf:"#PhrasalVerb",reason:"vacuum-sealed"},{match:"too much",tag:"Adverb Adjective",reason:"bit-4"},{match:"a bit much",tag:"Determiner Adverb Adjective",reason:"bit-3"},{match:"[(un|contra|extra|inter|intra|macro|micro|mid|mis|mono|multi|pre|sub|tri|ex)] #Adjective",group:0,tag:["Adjective","Prefix"],reason:"un-skilled"}],[{match:"#Adverb [#Adverb] (and|or|then)",group:0,tag:"Adjective",reason:"kinda-sparkly-and"},{match:"[(dark|bright|flat|light|soft|pale|dead|dim|faux|little|wee|sheer|most|near|good|extra|all)] #Adjective",group:0,tag:"Adverb",reason:"dark-green"},{match:"#Copula [far too] #Adjective",group:0,tag:"Adverb",reason:"far-too"},{match:"#Copula [still] (in|#Gerund|#Adjective)",group:0,tag:"Adverb",reason:"was-still-walking"},{match:`#Plural ${Ol}`,tag:"#PresentTense #Adverb",reason:"studies-hard"},{match:`#Verb [${Ol}] !#Noun?`,group:0,notIf:"(#Copula|get|got|getting|become|became|becoming|feel|feels|feeling|#Determiner|#Preposition)",tag:"Adverb",reason:"shops-direct"},{match:"[#Plural] a lot",tag:"PresentTense",reason:"studies-a-lot"}],[{match:"as [#Gerund] as",group:0,tag:"Adjective",reason:"as-gerund-as"},{match:"more [#Gerund] than",group:0,tag:"Adjective",reason:"more-gerund-than"},{match:"(so|very|extremely) [#Gerund]",group:0,tag:"Adjective",reason:"so-gerund"},{match:"(found|found) it #Adverb? [#Gerund]",group:0,tag:"Adjective",reason:"found-it-gerund"},{match:"a (little|bit|wee) bit? [#Gerund]",group:0,tag:"Adjective",reason:"a-bit-gerund"},{match:"#Gerund [#Gerund]",group:0,tag:"Adjective",notIf:"(impersonating|practicing|considering|assuming)",reason:"looking-annoying"},{match:"(looked|look|looks) #Adverb? [%Adj|Gerund%]",group:0,tag:"Adjective",notIf:"(impersonating|practicing|considering|assuming)",reason:"looked-amazing"},{match:"[%Adj|Gerund%] #Determiner",group:0,tag:"Gerund",reason:"developing-a"},{match:"#Possessive [%Adj|Gerund%] #Noun",group:0,tag:"Adjective",reason:"leading-manufacturer"},{match:"%Noun|Gerund% %Adj|Gerund%",tag:"Gerund #Adjective",reason:"meaning-alluring"},{match:"(face|embrace|reveal|stop|start|resume) %Adj|Gerund%",tag:"#PresentTense #Adjective",reason:"face-shocking"},{match:"(are|were) [%Adj|Gerund%] #Plural",group:0,tag:"Adjective",reason:"are-enduring-symbols"}],[{match:"#Determiner [#Adjective] #Copula",group:0,tag:"Noun",reason:"the-adj-is"},{match:"#Adjective [#Adjective] #Copula",group:0,tag:"Noun",reason:"adj-adj-is"},{match:"(his|its) [%Adj|Noun%]",group:0,tag:"Noun",notIf:"#Hyphenated",reason:"his-fine"},{match:"#Copula #Adverb? [all]",group:0,tag:"Noun",reason:"is-all"},{match:"(have|had) [#Adjective] #Preposition .",group:0,tag:"Noun",reason:"have-fun"},{match:"#Gerund (giant|capital|center|zone|application)",tag:"Noun",reason:"brewing-giant"},{match:"#Preposition (a|an) [#Adjective]$",group:0,tag:"Noun",reason:"an-instant"},{match:"no [#Adjective] #Modal",group:0,tag:"Noun",reason:"no-golden"},{match:"[brand #Gerund?] new",group:0,tag:"Adverb",reason:"brand-new"},{match:"(#Determiner|#Comparative|new|different) [kind]",group:0,tag:"Noun",reason:"some-kind"},{match:"#Possessive [%Adj|Noun%] #Noun",group:0,tag:"Adjective",reason:"her-favourite"},{match:"must && #Hyphenated .",tag:"Adjective",reason:"must-win"},{match:"#Determiner [#Adjective]$",tag:"Noun",notIf:"(this|that|#Comparative|#Superlative)",reason:"the-south"},{match:"(#Noun && #Hyphenated) (#Adjective && #Hyphenated)",tag:"Adjective",notIf:"(this|that|#Comparative|#Superlative)",reason:"company-wide"},{match:"#Determiner [#Adjective] (#Copula|#Determiner)",notIf:"(#Comparative|#Superlative)",group:0,tag:"Noun",reason:"the-poor"},{match:"[%Adj|Noun%] #Noun",notIf:"(#Pronoun|#ProperNoun)",group:0,tag:"Adjective",reason:"stable-foundations"}],[{match:"[still] #Adjective",group:0,tag:"Adverb",reason:"still-advb"},{match:"[still] #Verb",group:0,tag:"Adverb",reason:"still-verb"},{match:"[so] #Adjective",group:0,tag:"Adverb",reason:"so-adv"},{match:"[way] #Comparative",group:0,tag:"Adverb",reason:"way-adj"},{match:"[way] #Adverb #Adjective",group:0,tag:"Adverb",reason:"way-too-adj"},{match:"[all] #Verb",group:0,tag:"Adverb",reason:"all-verb"},{match:"#Verb [like]",group:0,notIf:"(#Modal|#PhrasalVerb)",tag:"Adverb",reason:"verb-like"},{match:"(barely|hardly) even",tag:"Adverb",reason:"barely-even"},{match:"[even] #Verb",group:0,tag:"Adverb",reason:"even-walk"},{match:"[even] #Comparative",group:0,tag:"Adverb",reason:"even-worse"},{match:"[even] (#Determiner|#Possessive)",group:0,tag:"#Adverb",reason:"even-the"},{match:"even left",tag:"#Adverb #Verb",reason:"even-left"},{match:"[way] #Adjective",group:0,tag:"#Adverb",reason:"way-over"},{match:"#PresentTense [(hard|quick|bright|slow|fast|backwards|forwards)]",notIf:"#Copula",group:0,tag:"Adverb",reason:"lazy-ly"},{match:"[much] #Adjective",group:0,tag:"Adverb",reason:"bit-1"},{match:"#Copula [#Adverb]$",group:0,tag:"Adjective",reason:"is-well"},{match:"a [(little|bit|wee) bit?] #Adjective",group:0,tag:"Adverb",reason:"a-bit-cold"},{match:"[(super|pretty)] #Adjective",group:0,tag:"Adverb",reason:"super-strong"},{match:"(become|fall|grow) #Adverb? [#PastTense]",group:0,tag:"Adjective",reason:"overly-weakened"},{match:"(a|an) #Adverb [#Participle] #Noun",group:0,tag:"Adjective",reason:"completely-beaten"},{match:"#Determiner #Adverb? [close]",group:0,tag:"Adjective",reason:"a-close"},{match:"#Gerund #Adverb? [close]",group:0,tag:"Adverb",notIf:"(getting|becoming|feeling)",reason:"being-close"},{match:"(the|those|these|a|an) [#Participle] #Noun",group:0,tag:"Adjective",reason:"blown-motor"},{match:"(#PresentTense|#PastTense) [back]",group:0,tag:"Adverb",notIf:"(#PhrasalVerb|#Copula)",reason:"charge-back"},{match:"#Verb [around]",group:0,tag:"Adverb",notIf:"#PhrasalVerb",reason:"send-around"},{match:"[later] #PresentTense",group:0,tag:"Adverb",reason:"later-say"},{match:"#Determiner [well] !#PastTense?",group:0,tag:"Noun",reason:"the-well"},{match:"#Adjective [enough]",group:0,tag:"Adverb",reason:"high-enough"}],[{match:"[sun] the #Ordinal",tag:"WeekDay",reason:"sun-the-5th"},{match:"[sun] #Date",group:0,tag:"WeekDay",reason:"sun-feb"},{match:"#Date (on|this|next|last|during)? [sun]",group:0,tag:"WeekDay",reason:"1pm-sun"},{match:"(in|by|before|during|on|until|after|of|within|all) [sat]",group:0,tag:"WeekDay",reason:"sat"},{match:"(in|by|before|during|on|until|after|of|within|all) [wed]",group:0,tag:"WeekDay",reason:"wed"},{match:"(in|by|before|during|on|until|after|of|within|all) [march]",group:0,tag:"Month",reason:"march"},{match:"[sat] #Date",group:0,tag:"WeekDay",reason:"sat-feb"},{match:"#Preposition [(march|may)]",group:0,tag:"Month",reason:"in-month"},{match:"(this|next|last) (march|may) !#Infinitive?",tag:"#Date #Month",reason:"this-month"},{match:"(march|may) the? #Value",tag:"#Month #Date #Date",reason:"march-5th"},{match:"#Value of? (march|may)",tag:"#Date #Date #Month",reason:"5th-of-march"},{match:"[(march|may)] .? #Date",group:0,tag:"Month",reason:"march-and-feb"},{match:"#Date .? [(march|may)]",group:0,tag:"Month",reason:"feb-and-march"},{match:"#Adverb [(march|may)]",group:0,tag:"Verb",reason:"quickly-march"},{match:"[(march|may)] #Adverb",group:0,tag:"Verb",reason:"march-quickly"},{match:"#Value (am|pm)",tag:"Time",reason:"2-am"}],[{match:"#Holiday (day|eve)",tag:"Holiday",reason:"holiday-day"},{match:"#Value of #Month",tag:"Date",reason:"value-of-month"},{match:"#Cardinal #Month",tag:"Date",reason:"cardinal-month"},{match:"#Month #Value to #Value",tag:"Date",reason:"value-to-value"},{match:"#Month the #Value",tag:"Date",reason:"month-the-value"},{match:"(#WeekDay|#Month) #Value",tag:"Date",reason:"date-value"},{match:"#Value (#WeekDay|#Month)",tag:"Date",reason:"value-date"},{match:"(#TextValue && #Date) #TextValue",tag:"Date",reason:"textvalue-date"},{match:"#Month #NumberRange",tag:"Date",reason:"aug 20-21"},{match:"#WeekDay #Month #Ordinal",tag:"Date",reason:"week mm-dd"},{match:"#Month #Ordinal #Cardinal",tag:"Date",reason:"mm-dd-yyy"},{match:"(#Place|#Demonmym|#Time) (standard|daylight|central|mountain)? time",tag:"Timezone",reason:"std-time"},{match:"(eastern|mountain|pacific|central|atlantic) (standard|daylight|summer)? time",tag:"Timezone",reason:"eastern-time"},{match:"#Time [(eastern|mountain|pacific|central|est|pst|gmt)]",group:0,tag:"Timezone",reason:"5pm-central"},{match:"(central|western|eastern) european time",tag:"Timezone",reason:"cet"}],[{match:"(the|any) [more]",group:0,tag:"Singular",reason:"more-noun"},{match:"[more] #Noun",group:0,tag:"Adjective",reason:"more-noun"},{match:"(right|rights) of .",tag:"Noun",reason:"right-of"},{match:"a [bit]",group:0,tag:"Singular",reason:"bit-2"},{match:"a [must]",group:0,tag:"Singular",reason:"must-2"},{match:"(we|us) [all]",group:0,tag:"Noun",reason:"we all"},{match:"due to [#Verb]",group:0,tag:"Noun",reason:"due-to"},{match:"some [#Verb] #Plural",group:0,tag:"Noun",reason:"determiner6"},{match:"#Possessive #Ordinal [#PastTense]",group:0,tag:"Noun",reason:"first-thought"},{match:"(the|this|those|these) #Adjective [%Verb|Noun%]",group:0,tag:"Noun",notIf:"#Copula",reason:"the-adj-verb"},{match:"(the|this|those|these) #Adverb #Adjective [#Verb]",group:0,tag:"Noun",reason:"determiner4"},{match:"the [#Verb] #Preposition .",group:0,tag:"Noun",reason:"determiner1"},{match:"(a|an|the) [#Verb] of",group:0,tag:"Noun",reason:"the-verb-of"},{match:"#Determiner #Noun of [#Verb]",group:0,tag:"Noun",notIf:"#Gerund",reason:"noun-of-noun"},{match:"#PastTense #Preposition [#PresentTense]",group:0,notIf:"#Gerund",tag:"Noun",reason:"ended-in-ruins"},{match:"#Conjunction [u]",group:0,tag:"Pronoun",reason:"u-pronoun-2"},{match:"[u] #Verb",group:0,tag:"Pronoun",reason:"u-pronoun-1"},{match:"#Determiner [(western|eastern|northern|southern|central)] #Noun",group:0,tag:"Noun",reason:"western-line"},{match:"(#Singular && @hasHyphen) #PresentTense",tag:"Noun",reason:"hyphen-verb"},{match:"is no [#Verb]",group:0,tag:"Noun",reason:"is-no-verb"},{match:"do [so]",group:0,tag:"Noun",reason:"so-noun"},{match:"#Determiner [(shit|damn|hell)]",group:0,tag:"Noun",reason:"swears-noun"},{match:"to [(shit|hell)]",group:0,tag:"Noun",reason:"to-swears"},{match:"(the|these) [#Singular] (were|are)",group:0,tag:"Plural",reason:"singular-were"},{match:"a #Noun+ or #Adverb+? [#Verb]",group:0,tag:"Noun",reason:"noun-or-noun"},{match:"(the|those|these|a|an) #Adjective? [#PresentTense #Particle?]",group:0,tag:"Noun",notIf:"(seem|appear|include|#Gerund|#Copula)",reason:"det-inf"},{match:"#Noun #Actor",tag:"Actor",notIf:"(#Person|#Pronoun)",reason:"thing-doer"},{match:"#Gerund #Actor",tag:"Actor",reason:"gerund-doer"},{match:"co #Singular",tag:"Actor",reason:"co-noun"},{match:"[#Noun+] #Actor",group:0,tag:"Actor",notIf:"(#Honorific|#Pronoun|#Possessive)",reason:"air-traffic-controller"},{match:"(urban|cardiac|cardiovascular|respiratory|medical|clinical|visual|graphic|creative|dental|exotic|fine|certified|registered|technical|virtual|professional|amateur|junior|senior|special|pharmaceutical|theoretical)+ #Noun? #Actor",tag:"Actor",reason:"fine-artist"},{match:"#Noun+ (coach|chef|king|engineer|fellow|personality|boy|girl|man|woman|master)",tag:"Actor",reason:"dance-coach"},{match:"chief . officer",tag:"Actor",reason:"chief-x-officer"},{match:"chief of #Noun+",tag:"Actor",reason:"chief-of-police"},{match:"senior? vice? president of #Noun+",tag:"Actor",reason:"president-of"},{match:"#Determiner [sun]",group:0,tag:"Singular",reason:"the-sun"},{match:"#Verb (a|an) [#Value]$",group:0,tag:"Singular",reason:"did-a-value"},{match:"the [(can|will|may)]",group:0,tag:"Singular",reason:"the can"},{match:"#FirstName #Acronym? (#Possessive && #LastName)",tag:"Possessive",reason:"name-poss"},{match:"#Organization+ #Possessive",tag:"Possessive",reason:"org-possessive"},{match:"#Place+ #Possessive",tag:"Possessive",reason:"place-possessive"},{match:"#Possessive #PresentTense #Particle?",notIf:"(#Gerund|her)",tag:"Noun",reason:"possessive-verb"},{match:"(my|our|their|her|his|its) [(#Plural && #Actor)] #Noun",tag:"Possessive",reason:"my-dads"},{match:"#Value of a [second]",group:0,unTag:"Value",tag:"Singular",reason:"10th-of-a-second"},{match:"#Value [seconds]",group:0,unTag:"Value",tag:"Plural",reason:"10-seconds"},{match:"in [#Infinitive]",group:0,tag:"Singular",reason:"in-age"},{match:"a [#Adjective] #Preposition",group:0,tag:"Noun",reason:"a-minor-in"},{match:"#Determiner [#Singular] said",group:0,tag:"Actor",reason:"the-actor-said"},{match:"#Determiner #Noun [(feel|sense|process|rush|side|bomb|bully|challenge|cover|crush|dump|exchange|flow|function|issue|lecture|limit|march|process)] !(#Preposition|to|#Adverb)?",group:0,tag:"Noun",reason:"the-noun-sense"},{match:"[#PresentTense] (of|by|for) (a|an|the) #Noun #Copula",group:0,tag:"Plural",reason:"photographs-of"},{match:"#Infinitive and [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"fight and win"},{match:"#Noun and [#Verb] and #Noun",group:0,tag:"Noun",reason:"peace-and-flowers"},{match:"the #Cardinal [%Adj|Noun%]",group:0,tag:"Noun",reason:"the-1992-classic"},{match:"#Copula the [%Adj|Noun%] #Noun",group:0,tag:"Adjective",reason:"the-premier-university"},{match:"i #Verb [me] #Noun",group:0,tag:"Possessive",reason:"scottish-me"},{match:"[#PresentTense] (music|class|lesson|night|party|festival|league|ceremony)",group:0,tag:"Noun",reason:"dance-music"},{match:"[wit] (me|it)",group:0,tag:"Presposition",reason:"wit-me"},{match:"#PastTense #Possessive [#Verb]",group:0,tag:"Noun",notIf:"(saw|made)",reason:"left-her-boots"},{match:"#Value [%Plural|Verb%]",group:0,tag:"Plural",notIf:"(one|1|a|an)",reason:"35-signs"},{match:"had [#PresentTense]",group:0,tag:"Noun",notIf:"(#Gerund|come|become)",reason:"had-time"},{match:"%Adj|Noun% %Noun|Verb%",tag:"#Adjective #Noun",notIf:"#ProperNoun #Noun",reason:"instant-access"},{match:"#Determiner [%Adj|Noun%] #Conjunction",group:0,tag:"Noun",reason:"a-rep-to"},{match:"#Adjective #Noun [%Plural|Verb%]$",group:0,tag:"Plural",notIf:"#Pronoun",reason:"near-death-experiences"},{match:"#Possessive #Noun [%Plural|Verb%]$",group:0,tag:"Plural",reason:"your-guild-colors"}],[{match:"(this|that|the|a|an) [#Gerund #Infinitive]",group:0,tag:"Singular",reason:"the-planning-process"},{match:"(that|the) [#Gerund #PresentTense]",group:0,ifNo:"#Copula",tag:"Plural",reason:"the-paving-stones"},{match:"#Determiner [#Gerund] #Noun",group:0,tag:"Adjective",reason:"the-gerund-noun"},{match:"#Pronoun #Infinitive [#Gerund] #PresentTense",group:0,tag:"Noun",reason:"tipping-sucks"},{match:"#Adjective [#Gerund]",group:0,tag:"Noun",notIf:"(still|even|just)",reason:"early-warning"},{match:"[#Gerund] #Adverb? not? #Copula",group:0,tag:"Activity",reason:"gerund-copula"},{match:"#Copula [(#Gerund|#Activity)] #Copula",group:0,tag:"Gerund",reason:"are-doing-is"},{match:"[#Gerund] #Modal",group:0,tag:"Activity",reason:"gerund-modal"},{match:"#Singular for [%Noun|Gerund%]",group:0,tag:"Gerund",reason:"noun-for-gerund"},{match:"#Comparative (for|at) [%Noun|Gerund%]",group:0,tag:"Gerund",reason:"better-for-gerund"},{match:"#PresentTense the [#Gerund]",group:0,tag:"Noun",reason:"keep-the-touching"}],[{match:"#Infinitive (this|that|the) [#Infinitive]",group:0,tag:"Noun",reason:"do-this-dance"},{match:"#Gerund #Determiner [#Infinitive]",group:0,tag:"Noun",reason:"running-a-show"},{match:"#Determiner (only|further|just|more|backward) [#Infinitive]",group:0,tag:"Noun",reason:"the-only-reason"},{match:"(the|this|a|an) [#Infinitive] #Adverb? #Verb",group:0,tag:"Noun",reason:"determiner5"},{match:"#Determiner #Adjective #Adjective? [#Infinitive]",group:0,tag:"Noun",reason:"a-nice-inf"},{match:"#Determiner #Demonym [#PresentTense]",group:0,tag:"Noun",reason:"mexican-train"},{match:"#Adjective #Noun+ [#Infinitive] #Copula",group:0,tag:"Noun",reason:"career-move"},{match:"at some [#Infinitive]",group:0,tag:"Noun",reason:"at-some-inf"},{match:"(go|goes|went) to [#Infinitive]",group:0,tag:"Noun",reason:"goes-to-verb"},{match:"(a|an) #Adjective? #Noun [#Infinitive] (#Preposition|#Noun)",group:0,notIf:"from",tag:"Noun",reason:"a-noun-inf"},{match:"(a|an) #Noun [#Infinitive]$",group:0,tag:"Noun",reason:"a-noun-inf2"},{match:"#Gerund #Adjective? for [#Infinitive]",group:0,tag:"Noun",reason:"running-for"},{match:"about [#Infinitive]",group:0,tag:"Singular",reason:"about-love"},{match:"#Plural on [#Infinitive]",group:0,tag:"Noun",reason:"on-stage"},{match:"any [#Infinitive]",group:0,tag:"Noun",reason:"any-charge"},{match:"no [#Infinitive]",group:0,tag:"Noun",reason:"no-doubt"},{match:"number of [#PresentTense]",group:0,tag:"Noun",reason:"number-of-x"},{match:"(taught|teaches|learns|learned) [#PresentTense]",group:0,tag:"Noun",reason:"teaches-x"},{match:"(try|use|attempt|build|make) [#Verb #Particle?]",notIf:"(#Copula|#Noun|sure|fun|up)",group:0,tag:"Noun",reason:"do-verb"},{match:"^[#Infinitive] (is|was)",group:0,tag:"Noun",reason:"checkmate-is"},{match:"#Infinitive much [#Infinitive]",group:0,tag:"Noun",reason:"get-much"},{match:"[cause] #Pronoun #Verb",group:0,tag:"Conjunction",reason:"cause-cuz"},{match:"the #Singular [#Infinitive] #Noun",group:0,tag:"Noun",notIf:"#Pronoun",reason:"cardio-dance"},{match:"#Determiner #Modal [#Noun]",group:0,tag:"PresentTense",reason:"should-smoke"},{match:"this [#Plural]",group:0,tag:"PresentTense",notIf:"(#Preposition|#Date)",reason:"this-verbs"},{match:"#Noun that [#Plural]",group:0,tag:"PresentTense",notIf:"(#Preposition|#Pronoun|way)",reason:"voice-that-rocks"},{match:"that [#Plural] to",group:0,tag:"PresentTense",notIf:"#Preposition",reason:"that-leads-to"},{match:"(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)",group:0,tag:"Infinitive",reason:"let-him-glue"},{match:"#Verb (all|every|each|most|some|no) [#PresentTense]",notIf:"#Modal",group:0,tag:"Noun",reason:"all-presentTense"},{match:"(had|have|#PastTense) #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"better",reason:"adj-presentTense"},{match:"#Value #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"one-big-reason"},{match:"#PastTense #Adjective+ [#PresentTense]",group:0,tag:"Noun",notIf:"(#Copula|better)",reason:"won-wide-support"},{match:"(many|few|several|couple) [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"many-poses"},{match:"#Determiner #Adverb #Adjective [%Noun|Verb%]",group:0,tag:"Noun",notIf:"#Copula",reason:"very-big-dream"},{match:"from #Noun to [%Noun|Verb%]",group:0,tag:"Noun",reason:"start-to-finish"},{match:"(for|with|of) #Noun (and|or|not) [%Noun|Verb%]",group:0,tag:"Noun",notIf:"#Pronoun",reason:"for-food-and-gas"},{match:"#Adjective #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"adorable-little-store"},{match:"#Gerund #Adverb? #Comparative [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"higher-costs"},{match:"(#Noun && @hasComma) #Noun (and|or) [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"noun-list"},{match:"(many|any|some|several) [#PresentTense] for",group:0,tag:"Noun",reason:"any-verbs-for"},{match:"to #PresentTense #Noun [#PresentTense] #Preposition",group:0,tag:"Noun",reason:"gas-exchange"},{match:"#PastTense (until|as|through|without) [#PresentTense]",group:0,tag:"Noun",reason:"waited-until-release"},{match:"#Gerund like #Adjective? [#PresentTense]",group:0,tag:"Plural",reason:"like-hot-cakes"},{match:"some #Adjective [#PresentTense]",group:0,tag:"Noun",reason:"some-reason"},{match:"for some [#PresentTense]",group:0,tag:"Noun",reason:"for-some-reason"},{match:"(same|some|the|that|a) kind of [#PresentTense]",group:0,tag:"Noun",reason:"some-kind-of"},{match:"(same|some|the|that|a) type of [#PresentTense]",group:0,tag:"Noun",reason:"some-type-of"},{match:"#Gerund #Adjective #Preposition [#PresentTense]",group:0,tag:"Noun",reason:"doing-better-for-x"},{match:"(get|got|have) #Comparative [#PresentTense]",group:0,tag:"Noun",reason:"got-better-aim"},{match:"whose [#PresentTense] #Copula",group:0,tag:"Noun",reason:"whos-name-was"},{match:"#PhrasalVerb #Particle #Preposition [#PresentTense]",group:0,tag:"Noun",reason:"given-up-on-x"},{match:"there (are|were) #Adjective? [#PresentTense]",group:0,tag:"Plural",reason:"there-are"},{match:"#Value [#PresentTense] of",group:0,notIf:"(one|1|#Copula|#Infinitive)",tag:"Plural",reason:"2-trains"},{match:"[#PresentTense] (are|were) #Adjective",group:0,tag:"Plural",reason:"compromises-are-possible"},{match:"^[(hope|guess|thought|think)] #Pronoun #Verb",group:0,tag:"Infinitive",reason:"suppose-i"},{match:"#Possessive #Adjective [#Verb]",group:0,tag:"Noun",notIf:"#Copula",reason:"our-full-support"},{match:"[(tastes|smells)] #Adverb? #Adjective",group:0,tag:"PresentTense",reason:"tastes-good"},{match:"#Copula #Gerund [#PresentTense] !by?",group:0,tag:"Noun",notIf:"going",reason:"ignoring-commute"},{match:"#Determiner #Adjective? [(shed|thought|rose|bid|saw|spelt)]",group:0,tag:"Noun",reason:"noun-past"},{match:"how to [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"how-to-noun"},{match:"which [%Noun|Verb%] #Noun",group:0,tag:"Infinitive",reason:"which-boost-it"},{match:"#Gerund [%Plural|Verb%]",group:0,tag:"Plural",reason:"asking-questions"},{match:"(ready|available|difficult|hard|easy|made|attempt|try) to [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"ready-to-noun"},{match:"(bring|went|go|drive|run|bike) to [%Noun|Verb%]",group:0,tag:"Noun",reason:"bring-to-noun"},{match:"#Modal #Noun [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"would-you-look"},{match:"#Copula just [#Infinitive]",group:0,tag:"Noun",reason:"is-just-spam"},{match:"^%Noun|Verb% %Plural|Verb%",tag:"Imperative #Plural",reason:"request-copies"},{match:"#Adjective #Plural and [%Plural|Verb%]",group:0,tag:"#Plural",reason:"pickles-and-drinks"},{match:"#Determiner #Year [#Verb]",group:0,tag:"Noun",reason:"the-1968-film"},{match:"#Determiner [#PhrasalVerb #Particle]",group:0,tag:"Noun",reason:"the-break-up"},{match:"#Determiner [%Adj|Noun%] #Noun",group:0,tag:"Adjective",notIf:"(#Pronoun|#Possessive|#ProperNoun)",reason:"the-individual-goals"},{match:"[%Noun|Verb%] or #Infinitive",group:0,tag:"Infinitive",reason:"work-or-prepare"},{match:"to #Infinitive [#PresentTense]",group:0,tag:"Noun",notIf:"(#Gerund|#Copula|help)",reason:"to-give-thanks"},{match:"[#Noun] me",group:0,tag:"Verb",reason:"kills-me"},{match:"%Plural|Verb% %Plural|Verb%",tag:"#PresentTense #Plural",reason:"removes-wrinkles"}],[{match:"#Money and #Money #Currency?",tag:"Money",reason:"money-and-money"},{match:"#Value #Currency [and] #Value (cents|ore|centavos|sens)",group:0,tag:"money",reason:"and-5-cents"},{match:"#Value (mark|rand|won|rub|ore)",tag:"#Money #Currency",reason:"4-mark"},{match:"a pound",tag:"#Money #Unit",reason:"a-pound"},{match:"#Value (pound|pounds)",tag:"#Money #Unit",reason:"4-pounds"}],[{match:"[(half|quarter)] of? (a|an)",group:0,tag:"Fraction",reason:"millionth"},{match:"#Adverb [half]",group:0,tag:"Fraction",reason:"nearly-half"},{match:"[half] the",group:0,tag:"Fraction",reason:"half-the"},{match:"#Cardinal and a half",tag:"Fraction",reason:"and-a-half"},{match:"#Value (halves|halfs|quarters)",tag:"Fraction",reason:"two-halves"},{match:"a #Ordinal",tag:"Fraction",reason:"a-quarter"},{match:"[#Cardinal+] (#Fraction && /s$/)",tag:"Fraction",reason:"seven-fifths"},{match:"[#Cardinal+ #Ordinal] of .",group:0,tag:"Fraction",reason:"ordinal-of"},{match:"[(#NumericValue && #Ordinal)] of .",group:0,tag:"Fraction",reason:"num-ordinal-of"},{match:"(a|one) #Cardinal?+ #Ordinal",tag:"Fraction",reason:"a-ordinal"},{match:"#Cardinal+ out? of every? #Cardinal",tag:"Fraction",reason:"out-of"}],[{match:"#Cardinal [second]",tag:"Unit",reason:"one-second"},{match:"!once? [(a|an)] (#Duration|hundred|thousand|million|billion|trillion)",group:0,tag:"Value",reason:"a-is-one"},{match:"1 #Value #PhoneNumber",tag:"PhoneNumber",reason:"1-800-Value"},{match:"#NumericValue #PhoneNumber",tag:"PhoneNumber",reason:"(800) PhoneNumber"},{match:"#Demonym #Currency",tag:"Currency",reason:"demonym-currency"},{match:"#Value [(buck|bucks|grand)]",group:0,tag:"Currency",reason:"value-bucks"},{match:"[#Value+] #Currency",group:0,tag:"Money",reason:"15 usd"},{match:"[second] #Noun",group:0,tag:"Ordinal",reason:"second-noun"},{match:"#Value+ [#Currency]",group:0,tag:"Unit",reason:"5-yan"},{match:"#Value [(foot|feet)]",group:0,tag:"Unit",reason:"foot-unit"},{match:"#Value [#Abbreviation]",group:0,tag:"Unit",reason:"value-abbr"},{match:"#Value [k]",group:0,tag:"Unit",reason:"value-k"},{match:"#Unit an hour",tag:"Unit",reason:"unit-an-hour"},{match:"(minus|negative) #Value",tag:"Value",reason:"minus-value"},{match:"#Value (point|decimal) #Value",tag:"Value",reason:"value-point-value"},{match:"#Determiner [(half|quarter)] #Ordinal",group:0,tag:"Value",reason:"half-ordinal"},{match:"#Multiple+ and #Value",tag:"Value",reason:"magnitude-and-value"},{match:"#Value #Unit [(per|an) (hr|hour|sec|second|min|minute)]",group:0,tag:"Unit",reason:"12-miles-per-second"},{match:"#Value [(square|cubic)] #Unit",group:0,tag:"Unit",reason:"square-miles"}],[{match:"#Copula [(#Noun|#PresentTense)] #LastName",group:0,tag:"FirstName",reason:"copula-noun-lastname"},{match:"(sister|pope|brother|father|aunt|uncle|grandpa|grandfather|grandma) #ProperNoun",tag:"Person",reason:"lady-titlecase",safe:!0},{match:"#FirstName [#Determiner #Noun] #LastName",group:0,tag:"Person",reason:"first-noun-last"},{match:"#ProperNoun (b|c|d|e|f|g|h|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z) #ProperNoun",tag:"Person",reason:"titlecase-acronym-titlecase",safe:!0},{match:"#Acronym #LastName",tag:"Person",reason:"acronym-lastname",safe:!0},{match:"#Person (jr|sr|md)",tag:"Person",reason:"person-honorific"},{match:"#Honorific #Acronym",tag:"Person",reason:"Honorific-TitleCase"},{match:"#Person #Person the? #RomanNumeral",tag:"Person",reason:"roman-numeral"},{match:"#FirstName [/^[^aiurck]$/]",group:0,tag:["Acronym","Person"],reason:"john-e"},{match:"#Noun van der? #Noun",tag:"Person",reason:"van der noun",safe:!0},{match:"(king|queen|prince|saint|lady) of #Noun",tag:"Person",reason:"king-of-noun",safe:!0},{match:"(prince|lady) #Place",tag:"Person",reason:"lady-place"},{match:"(king|queen|prince|saint) #ProperNoun",tag:"Person",notIf:"#Place",reason:"saint-foo"},{match:"al (#Person|#ProperNoun)",tag:"Person",reason:"al-borlen",safe:!0},{match:"#FirstName de #Noun",tag:"Person",reason:"bill-de-noun"},{match:"#FirstName (bin|al) #Noun",tag:"Person",reason:"bill-al-noun"},{match:"#FirstName #Acronym #ProperNoun",tag:"Person",reason:"bill-acronym-title"},{match:"#FirstName #FirstName #ProperNoun",tag:"Person",reason:"bill-firstname-title"},{match:"#Honorific #FirstName? #ProperNoun",tag:"Person",reason:"dr-john-Title"},{match:"#FirstName the #Adjective",tag:"Person",reason:"name-the-great"},{match:"#ProperNoun (van|al|bin) #ProperNoun",tag:"Person",reason:"title-van-title",safe:!0},{match:"#ProperNoun (de|du) la? #ProperNoun",tag:"Person",notIf:"#Place",reason:"title-de-title"},{match:"#Singular #Acronym #LastName",tag:"#FirstName #Person .",reason:"title-acro-noun",safe:!0},{match:"[#ProperNoun] #Person",group:0,tag:"Person",reason:"proper-person",safe:!0},{match:"#Person [#ProperNoun #ProperNoun]",group:0,tag:"Person",notIf:"#Possessive",reason:"three-name-person",safe:!0},{match:"#FirstName #Acronym? [#ProperNoun]",group:0,tag:"LastName",notIf:"#Possessive",reason:"firstname-titlecase"},{match:"#FirstName [#FirstName]",group:0,tag:"LastName",reason:"firstname-firstname"},{match:"#FirstName #Acronym #Noun",tag:"Person",reason:"n-acro-noun",safe:!0},{match:"#FirstName [(de|di|du|van|von)] #Person",group:0,tag:"LastName",reason:"de-firstname"},{match:"[(lieutenant|corporal|sergeant|captain|qeen|king|admiral|major|colonel|marshal|president|queen|king)+] #ProperNoun",group:0,tag:"Honorific",reason:"seargeant-john"},{match:"[(private|general|major|rear|prime|field|count|miss)] #Honorific? #Person",group:0,tag:["Honorific","Person"],reason:"ambg-honorifics"},{match:"#Honorific #FirstName [#Singular]",group:0,tag:"LastName",notIf:"#Possessive",reason:"dr-john-foo",safe:!0},{match:"[(his|her) (majesty|honour|worship|excellency|honorable)] #Person",group:0,tag:"Honorific",reason:"his-excellency"},{match:"#Honorific #Actor",tag:"Honorific",reason:"Lieutenant colonel"},{match:"(first|second|third|1st|2nd|3rd) #Actor",tag:"Honorific",reason:"first lady"},{match:"#Person #RomanNumeral",tag:"Person",reason:"louis-IV"}],[{match:"#FirstName #Noun$",tag:". #LastName",notIf:"(#Possessive|#Organization|#Place|#Pronoun|@hasTitleCase)",reason:"firstname-noun"},{match:"%Person|Date% #Acronym? #ProperNoun",tag:"Person",reason:"jan-thierson"},{match:"%Person|Noun% #Acronym? #ProperNoun",tag:"Person",reason:"switch-person",safe:!0},{match:"%Person|Noun% #Organization",tag:"Organization",reason:"olive-garden"},{match:"%Person|Verb% #Acronym? #ProperNoun",tag:"Person",reason:"verb-propernoun",ifNo:"#Actor"},{match:"[%Person|Verb%] (will|had|has|said|says|told|did|learned|wants|wanted)",group:0,tag:"Person",reason:"person-said"},{match:"[%Person|Place%] (harbor|harbour|pier|town|city|place|dump|landfill)",group:0,tag:"Place",reason:"sydney-harbour"},{match:"(west|east|north|south) [%Person|Place%]",group:0,tag:"Place",reason:"east-sydney"},{match:"#Modal [%Person|Verb%]",group:0,tag:"Verb",reason:"would-mark"},{match:"#Adverb [%Person|Verb%]",group:0,tag:"Verb",reason:"really-mark"},{match:"[%Person|Verb%] (#Adverb|#Comparative)",group:0,tag:"Verb",reason:"drew-closer"},{match:"%Person|Verb% #Person",tag:"Person",reason:"rob-smith"},{match:"%Person|Verb% #Acronym #ProperNoun",tag:"Person",reason:"rob-a-smith"},{match:"[will] #Verb",group:0,tag:"Modal",reason:"will-verb"},{match:"(will && @isTitleCase) #ProperNoun",tag:"Person",reason:"will-name"},{match:"(#FirstName && !#Possessive) [#Singular] #Verb",group:0,safe:!0,tag:"LastName",reason:"jack-layton"},{match:"^[#Singular] #Person #Verb",group:0,safe:!0,tag:"Person",reason:"sherwood-anderson"},{match:"(a|an) [#Person]$",group:0,unTag:"Person",reason:"a-warhol"}],[{match:"#Copula (pretty|dead|full|well|sure) (#Adjective|#Noun)",tag:"#Copula #Adverb #Adjective",reason:"sometimes-adverb"},{match:"(#Pronoun|#Person) (had|#Adverb)? [better] #PresentTense",group:0,tag:"Modal",reason:"i-better"},{match:"(#Modal|i|they|we|do) not? [like]",group:0,tag:"PresentTense",reason:"modal-like"},{match:"#Noun #Adverb? [left]",group:0,tag:"PastTense",reason:"left-verb"},{match:"will #Adverb? not? #Adverb? [be] #Gerund",group:0,tag:"Copula",reason:"will-be-copula"},{match:"will #Adverb? not? #Adverb? [be] #Adjective",group:0,tag:"Copula",reason:"be-copula"},{match:"[march] (up|down|back|toward)",notIf:"#Date",group:0,tag:"Infinitive",reason:"march-to"},{match:"#Modal [march]",group:0,tag:"Infinitive",reason:"must-march"},{match:"[may] be",group:0,tag:"Verb",reason:"may-be"},{match:"[(subject|subjects|subjected)] to",group:0,tag:"Verb",reason:"subject to"},{match:"[home] to",group:0,tag:"PresentTense",reason:"home to"},{match:"[open] #Determiner",group:0,tag:"Infinitive",reason:"open-the"},{match:"(were|was) being [#PresentTense]",group:0,tag:"PastTense",reason:"was-being"},{match:"(had|has|have) [been /en$/]",group:0,tag:"Auxiliary Participle",reason:"had-been-broken"},{match:"(had|has|have) [been /ed$/]",group:0,tag:"Auxiliary PastTense",reason:"had-been-smoked"},{match:"(had|has) #Adverb? [been] #Adverb? #PastTense",group:0,tag:"Auxiliary",reason:"had-been-adj"},{match:"(had|has) to [#Noun] (#Determiner|#Possessive)",group:0,tag:"Infinitive",reason:"had-to-noun"},{match:"have [#PresentTense]",group:0,tag:"PastTense",notIf:"(come|gotten)",reason:"have-read"},{match:"(does|will|#Modal) that [work]",group:0,tag:"PastTense",reason:"does-that-work"},{match:"[(sound|sounds)] #Adjective",group:0,tag:"PresentTense",reason:"sounds-fun"},{match:"[(look|looks)] #Adjective",group:0,tag:"PresentTense",reason:"looks-good"},{match:"[(start|starts|stop|stops|begin|begins)] #Gerund",group:0,tag:"Verb",reason:"starts-thinking"},{match:"(have|had) read",tag:"Modal #PastTense",reason:"read-read"},{match:"(is|was|were) [(under|over) #PastTense]",group:0,tag:"Adverb Adjective",reason:"was-under-cooked"},{match:"[shit] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear1-verb"},{match:"[damn] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear2-verb"},{match:"[fuck] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear3-verb"},{match:"#Plural that %Noun|Verb%",tag:". #Preposition #Infinitive",reason:"jobs-that-work"},{match:"[works] for me",group:0,tag:"PresentTense",reason:"works-for-me"},{match:"as #Pronoun [please]",group:0,tag:"Infinitive",reason:"as-we-please"},{match:"[(co|mis|de|inter|intra|pre|re|un|out|under|over|counter)] #Verb",group:0,tag:["Verb","Prefix"],notIf:"(#Copula|#PhrasalVerb)",reason:"co-write"},{match:"#PastTense and [%Adj|Past%]",group:0,tag:"PastTense",reason:"dressed-and-left"},{match:"[%Adj|Past%] and #PastTense",group:0,tag:"PastTense",reason:"dressed-and-left"},{match:"#Copula #Pronoun [%Adj|Past%]",group:0,tag:"Adjective",reason:"is-he-stoked"},{match:"to [%Noun|Verb%] #Preposition",group:0,tag:"Infinitive",reason:"to-dream-of"}],[{match:"(slowly|quickly) [#Adjective]",group:0,tag:"Verb",reason:"slowly-adj"},{match:"does (#Adverb|not)? [#Adjective]",group:0,tag:"PresentTense",reason:"does-mean"},{match:"[(fine|okay|cool|ok)] by me",group:0,tag:"Adjective",reason:"okay-by-me"},{match:"i (#Adverb|do)? not? [mean]",group:0,tag:"PresentTense",reason:"i-mean"},{match:"will #Adjective",tag:"Auxiliary Infinitive",reason:"will-adj"},{match:"#Pronoun [#Adjective] #Determiner #Adjective? #Noun",group:0,tag:"Verb",reason:"he-adj-the"},{match:"#Copula [%Adj|Present%] to #Verb",group:0,tag:"Verb",reason:"adj-to"},{match:"#Copula [#Adjective] (well|badly|quickly|slowly)",group:0,tag:"Verb",reason:"done-well"},{match:"#Adjective and [#Gerund] !#Preposition?",group:0,tag:"Adjective",reason:"rude-and-x"},{match:"#Copula #Adverb? (over|under) [#PastTense]",group:0,tag:"Adjective",reason:"over-cooked"},{match:"#Copula #Adjective+ (and|or) [#PastTense]$",group:0,tag:"Adjective",reason:"bland-and-overcooked"},{match:"got #Adverb? [#PastTense] of",group:0,tag:"Adjective",reason:"got-tired-of"},{match:"(seem|seems|seemed|appear|appeared|appears|feel|feels|felt|sound|sounds|sounded) (#Adverb|#Adjective)? [#PastTense]",group:0,tag:"Adjective",reason:"felt-loved"},{match:"(seem|feel|seemed|felt) [#PastTense #Particle?]",group:0,tag:"Adjective",reason:"seem-confused"},{match:"a (bit|little|tad) [#PastTense #Particle?]",group:0,tag:"Adjective",reason:"a-bit-confused"},{match:"not be [%Adj|Past% #Particle?]",group:0,tag:"Adjective",reason:"do-not-be-confused"},{match:"#Copula just [%Adj|Past% #Particle?]",group:0,tag:"Adjective",reason:"is-just-right"},{match:"as [#Infinitive] as",group:0,tag:"Adjective",reason:"as-pale-as"},{match:"[%Adj|Past%] and #Adjective",group:0,tag:"Adjective",reason:"faled-and-oppressive"},{match:"or [#PastTense] #Noun",group:0,tag:"Adjective",notIf:"(#Copula|#Pronoun)",reason:"or-heightened-emotion"},{match:"(become|became|becoming|becomes) [#Verb]",group:0,tag:"Adjective",reason:"become-verb"},{match:"#Possessive [#PastTense] #Noun",group:0,tag:"Adjective",reason:"declared-intentions"},{match:"#Copula #Pronoun [%Adj|Present%]",group:0,tag:"Adjective",reason:"is-he-cool"},{match:"#Copula [%Adj|Past%] with",group:0,tag:"Adjective",notIf:"(associated|worn|baked|aged|armed|bound|fried|loaded|mixed|packed|pumped|filled|sealed)",reason:"is-crowded-with"},{match:"#Copula #Adverb? [%Adj|Present%]$",group:0,tag:"Adjective",reason:"was-empty$"}],[{match:"will (#Adverb|not)+? [have] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"will-have-vb"},{match:"[#Copula] (#Adverb|not)+? (#Gerund|#PastTense)",group:0,tag:"Auxiliary",reason:"copula-walking"},{match:"[(#Modal|did)+] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"modal-verb"},{match:"#Modal (#Adverb|not)+? [have] (#Adverb|not)+? [had] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"would-have"},{match:"[(has|had)] (#Adverb|not)+? #PastTense",group:0,tag:"Auxiliary",reason:"had-walked"},{match:"[(do|does|did|will|have|had|has|got)] (not|#Adverb)+? #Verb",group:0,tag:"Auxiliary",reason:"have-had"},{match:"[about to] #Adverb? #Verb",group:0,tag:["Auxiliary","Verb"],reason:"about-to"},{match:"#Modal (#Adverb|not)+? [be] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"would-be"},{match:"[(#Modal|had|has)] (#Adverb|not)+? [been] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"had-been"},{match:"[(be|being|been)] #Participle",group:0,tag:"Auxiliary",reason:"being-driven"},{match:"[may] #Adverb? #Infinitive",group:0,tag:"Auxiliary",reason:"may-want"},{match:"#Copula (#Adverb|not)+? [(be|being|been)] #Adverb+? #PastTense",group:0,tag:"Auxiliary",reason:"being-walked"},{match:"will [be] #PastTense",group:0,tag:"Auxiliary",reason:"will-be-x"},{match:"[(be|been)] (#Adverb|not)+? #Gerund",group:0,tag:"Auxiliary",reason:"been-walking"},{match:"[used to] #PresentTense",group:0,tag:"Auxiliary",reason:"used-to-walk"},{match:"#Copula (#Adverb|not)+? [going to] #Adverb+? #PresentTense",group:0,tag:"Auxiliary",reason:"going-to-walk"},{match:"#Imperative [(me|him|her)]",group:0,tag:"Reflexive",reason:"tell-him"},{match:"(is|was) #Adverb? [no]",group:0,tag:"Negative",reason:"is-no"},{match:"[(been|had|became|came)] #PastTense",group:0,notIf:"#PhrasalVerb",tag:"Auxiliary",reason:"been-told"},{match:"[(being|having|getting)] #Verb",group:0,tag:"Auxiliary",reason:"being-born"},{match:"[be] #Gerund",group:0,tag:"Auxiliary",reason:"be-walking"},{match:"[better] #PresentTense",group:0,tag:"Modal",notIf:"(#Copula|#Gerund)",reason:"better-go"},{match:"even better",tag:"Adverb #Comparative",reason:"even-better"}],[{match:"(#Verb && @hasHyphen) up",tag:"PhrasalVerb",reason:"foo-up"},{match:"(#Verb && @hasHyphen) off",tag:"PhrasalVerb",reason:"foo-off"},{match:"(#Verb && @hasHyphen) over",tag:"PhrasalVerb",reason:"foo-over"},{match:"(#Verb && @hasHyphen) out",tag:"PhrasalVerb",reason:"foo-out"},{match:"[#Verb (in|out|up|down|off|back)] (on|in)",notIf:"#Copula",tag:"PhrasalVerb Particle",reason:"walk-in-on"},{match:"(lived|went|crept|go) [on] for",group:0,tag:"PhrasalVerb",reason:"went-on"},{match:"#Verb (up|down|in|on|for)$",tag:"PhrasalVerb #Particle",notIf:"#PhrasalVerb",reason:"come-down$"},{match:"help [(stop|end|make|start)]",group:0,tag:"Infinitive",reason:"help-stop"},{match:"#PhrasalVerb (in && #Particle) #Determiner",tag:"#Verb #Preposition #Determiner",unTag:"PhrasalVerb",reason:"work-in-the"},{match:"[(stop|start|finish|help)] #Gerund",group:0,tag:"Infinitive",reason:"start-listening"},{match:"#Verb (him|her|it|us|himself|herself|itself|everything|something) [(up|down)]",group:0,tag:"Adverb",reason:"phrasal-pronoun-advb"}],[{match:"^do not? [#Infinitive #Particle?]",notIf:zl,group:0,tag:"Imperative",reason:"do-eat"},{match:"^please do? not? [#Infinitive #Particle?]",group:0,tag:"Imperative",reason:"please-go"},{match:"^just do? not? [#Infinitive #Particle?]",group:0,tag:"Imperative",reason:"just-go"},{match:"^[#Infinitive] it #Comparative",notIf:zl,group:0,tag:"Imperative",reason:"do-it-better"},{match:"^[#Infinitive] it (please|now|again|plz)",notIf:zl,group:0,tag:"Imperative",reason:"do-it-please"},{match:"^[#Infinitive] (#Adjective|#Adverb)$",group:0,tag:"Imperative",notIf:"(so|such|rather|enough)",reason:"go-quickly"},{match:"^[#Infinitive] (up|down|over) #Determiner",group:0,tag:"Imperative",reason:"turn-down"},{match:"^[#Infinitive] (your|my|the|a|an|any|each|every|some|more|with|on)",group:0,notIf:"like",tag:"Imperative",reason:"eat-my-shorts"},{match:"^[#Infinitive] (him|her|it|us|me|there)",group:0,tag:"Imperative",reason:"tell-him"},{match:"^[#Infinitive] #Adjective #Noun$",group:0,tag:"Imperative",reason:"avoid-loud-noises"},{match:"^[#Infinitive] (#Adjective|#Adverb)? and #Infinitive",group:0,tag:"Imperative",reason:"call-and-reserve"},{match:"^(go|stop|wait|hurry) please?$",tag:"Imperative",reason:"go"},{match:"^(somebody|everybody) [#Infinitive]",group:0,tag:"Imperative",reason:"somebody-call"},{match:"^let (us|me) [#Infinitive]",group:0,tag:"Imperative",reason:"lets-leave"},{match:"^[(shut|close|open|start|stop|end|keep)] #Determiner #Noun",group:0,tag:"Imperative",reason:"shut-the-door"},{match:"^[#PhrasalVerb #Particle] #Determiner #Noun",group:0,tag:"Imperative",reason:"turn-off-the-light"},{match:"^[go] to .",group:0,tag:"Imperative",reason:"go-to-toronto"},{match:"^#Modal you [#Infinitive]",group:0,tag:"Imperative",reason:"would-you-"},{match:"^never [#Infinitive]",group:0,tag:"Imperative",reason:"never-stop"},{match:"^come #Infinitive",tag:"Imperative",notIf:"on",reason:"come-have"},{match:"^come and? #Infinitive",tag:"Imperative . Imperative",notIf:"#PhrasalVerb",reason:"come-and-have"},{match:"^stay (out|away|back)",tag:"Imperative",reason:"stay-away"},{match:"^[(stay|be|keep)] #Adjective",group:0,tag:"Imperative",reason:"stay-cool"},{match:"^[keep it] #Adjective",group:0,tag:"Imperative",reason:"keep-it-cool"},{match:"^do not [#Infinitive]",group:0,tag:"Imperative",reason:"do-not-be"},{match:"[#Infinitive] (yourself|yourselves)",group:0,tag:"Imperative",reason:"allow-yourself"},{match:"[#Infinitive] what .",group:0,tag:"Imperative",reason:"look-what"},{match:"^[#Infinitive] #Gerund",group:0,tag:"Imperative",reason:"keep-playing"},{match:"^[#Infinitive] (to|for|into|toward|here|there)",group:0,tag:"Imperative",reason:"go-to"},{match:"^[#Infinitive] (and|or) #Infinitive",group:0,tag:"Imperative",reason:"inf-and-inf"},{match:"^[%Noun|Verb%] to",group:0,tag:"Imperative",reason:"commit-to"},{match:"^[#Infinitive] #Adjective? #Singular #Singular",group:0,tag:"Imperative",reason:"maintain-eye-contact"},{match:"do not (forget|omit|neglect) to [#Infinitive]",group:0,tag:"Imperative",reason:"do-not-forget"},{match:"^[(ask|wear|pay|look|help|show|watch|act|fix|kill|stop|start|turn|try|win)] #Noun",group:0,tag:"Imperative",reason:"pay-attention"}],[{match:"(that|which) were [%Adj|Gerund%]",group:0,tag:"Gerund",reason:"that-were-growing"},{match:"#Gerund [#Gerund] #Plural",group:0,tag:"Adjective",reason:"hard-working-fam"}],[{match:"u r",tag:"#Pronoun #Copula",reason:"u r"},{match:"#Noun [(who|whom)]",group:0,tag:"Determiner",reason:"captain-who"},{match:"[had] #Noun+ #PastTense",group:0,tag:"Condition",reason:"had-he"},{match:"[were] #Noun+ to #Infinitive",group:0,tag:"Condition",reason:"were-he"},{match:"some sort of",tag:"Adjective Noun Conjunction",reason:"some-sort-of"},{match:"of some sort",tag:"Conjunction Adjective Noun",reason:"of-some-sort"},{match:"[such] (a|an|is)? #Noun",group:0,tag:"Determiner",reason:"such-skill"},{match:"[right] (before|after|in|into|to|toward)",group:0,tag:"#Adverb",reason:"right-into"},{match:"#Preposition [about]",group:0,tag:"Adjective",reason:"at-about"},{match:"(are|#Modal|see|do|for) [ya]",group:0,tag:"Pronoun",reason:"are-ya"},{match:"[long live] .",group:0,tag:"#Adjective #Infinitive",reason:"long-live"},{match:"[plenty] of",group:0,tag:"#Uncountable",reason:"plenty-of"},{match:"(always|nearly|barely|practically) [there]",group:0,tag:"Adjective",reason:"always-there"},{match:"[there] (#Adverb|#Pronoun)? #Copula",group:0,tag:"There",reason:"there-is"},{match:"#Copula [there] .",group:0,tag:"There",reason:"is-there"},{match:"#Modal #Adverb? [there]",group:0,tag:"There",reason:"should-there"},{match:"^[do] (you|we|they)",group:0,tag:"QuestionWord",reason:"do-you"},{match:"^[does] (he|she|it|#ProperNoun)",group:0,tag:"QuestionWord",reason:"does-he"},{match:"#Determiner #Noun+ [who] #Verb",group:0,tag:"Preposition",reason:"the-x-who"},{match:"#Determiner #Noun+ [which] #Verb",group:0,tag:"Preposition",reason:"the-x-which"},{match:"a [while]",group:0,tag:"Noun",reason:"a-while"},{match:"guess who",tag:"#Infinitive #QuestionWord",reason:"guess-who"},{match:"[fucking] !#Verb",group:0,tag:"#Gerund",reason:"f-as-gerund"}],[{match:"university of #Place",tag:"Organization",reason:"university-of-Foo"},{match:"#Noun (&|n) #Noun",tag:"Organization",reason:"Noun-&-Noun"},{match:"#Organization of the? #ProperNoun",tag:"Organization",reason:"org-of-place",safe:!0},{match:"#Organization #Country",tag:"Organization",reason:"org-country"},{match:"#ProperNoun #Organization",tag:"Organization",notIf:"#FirstName",reason:"titlecase-org"},{match:"#ProperNoun (ltd|co|inc|dept|assn|bros)",tag:"Organization",reason:"org-abbrv"},{match:"the [#Acronym]",group:0,tag:"Organization",reason:"the-acronym",safe:!0},{match:"government of the? [#Place+]",tag:"Organization",reason:"government-of-x"},{match:"(health|school|commerce) board",tag:"Organization",reason:"school-board"},{match:"(nominating|special|conference|executive|steering|central|congressional) committee",tag:"Organization",reason:"special-comittee"},{match:"(world|global|international|national|#Demonym) #Organization",tag:"Organization",reason:"global-org"},{match:"#Noun+ (public|private) school",tag:"School",reason:"noun-public-school"},{match:"#Place+ #SportsTeam",tag:"SportsTeam",reason:"place-sportsteam"},{match:"(dc|atlanta|minnesota|manchester|newcastle|sheffield) united",tag:"SportsTeam",reason:"united-sportsteam"},{match:"#Place+ fc",tag:"SportsTeam",reason:"fc-sportsteam"},{match:"#Place+ #Noun{0,2} (club|society|group|team|committee|commission|association|guild|crew)",tag:"Organization",reason:"place-noun-society"}],[{match:"(west|north|south|east|western|northern|southern|eastern)+ #Place",tag:"Region",reason:"west-norfolk"},{match:"#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|pa|sc|tn|tx|ut|vt|pr)]",group:0,tag:"Region",reason:"us-state"},{match:"portland [or]",group:0,tag:"Region",reason:"portland-or"},{match:"#ProperNoun+ (cliff|place|range|pit|place|point|room|grounds|ruins)",tag:"Place",reason:"foo-point"},{match:"in [#ProperNoun] #Place",group:0,tag:"Place",reason:"propernoun-place"},{match:"#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)",tag:"Address",reason:"address-st"},{match:"(port|mount|mt) #ProperName",tag:"Place",reason:"port-name"}],[{match:"[so] #Noun",group:0,tag:"Conjunction",reason:"so-conj"},{match:"[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)",group:0,tag:"Conjunction",reason:"how-he-is-x"},{match:"#Copula [(who|what|where|why|how|when)] #Noun",group:0,tag:"Conjunction",reason:"when-he"},{match:"#Verb [that] #Pronoun",group:0,tag:"Conjunction",reason:"said-that-he"},{match:"#Noun [that] #Copula",group:0,tag:"Conjunction",reason:"that-are"},{match:"#Noun [that] #Verb #Adjective",group:0,tag:"Conjunction",reason:"that-seem"},{match:"#Noun #Copula not? [that] #Adjective",group:0,tag:"Adverb",reason:"that-adj"},{match:"#Verb #Adverb? #Noun [(that|which)]",group:0,tag:"Preposition",reason:"that-prep"},{match:"@hasComma [which] (#Pronoun|#Verb)",group:0,tag:"Preposition",reason:"which-copula"},{match:"#Noun [like] #Noun",group:0,tag:"Preposition",reason:"noun-like"},{match:"^[like] #Determiner",group:0,tag:"Preposition",reason:"like-the"},{match:"a #Noun [like] (#Noun|#Determiner)",group:0,tag:"Preposition",reason:"a-noun-like"},{match:"#Adverb [like]",group:0,tag:"Verb",reason:"really-like"},{match:"(not|nothing|never) [like]",group:0,tag:"Preposition",reason:"nothing-like"},{match:"#Infinitive #Pronoun [like]",group:0,tag:"Preposition",reason:"treat-them-like"},{match:"[#QuestionWord] (#Pronoun|#Determiner)",group:0,tag:"Preposition",reason:"how-he"},{match:"[#QuestionWord] #Participle",group:0,tag:"Preposition",reason:"when-stolen"},{match:"[how] (#Determiner|#Copula|#Modal|#PastTense)",group:0,tag:"QuestionWord",reason:"how-is"},{match:"#Plural [(who|which|when)] .",group:0,tag:"Preposition",reason:"people-who"}],[{match:"holy (shit|fuck|hell)",tag:"Expression",reason:"swears-expression"},{match:"^[(well|so|okay|now)] !#Adjective?",group:0,tag:"Expression",reason:"well-"},{match:"^come on",tag:"Expression",reason:"come-on"},{match:"(say|says|said) [sorry]",group:0,tag:"Expression",reason:"say-sorry"},{match:"^(ok|alright|shoot|hell|anyways)",tag:"Expression",reason:"ok-"},{match:"^(say && @hasComma)",tag:"Expression",reason:"say-"},{match:"^(like && @hasComma)",tag:"Expression",reason:"like-"},{match:"^[(dude|man|girl)] #Pronoun",group:0,tag:"Expression",reason:"dude-i"}]);let Bl=null;var Sl={postTagger:function(e){const{world:t}=e,{model:n,methods:a}=t;Bl=Bl||a.one.buildNet(n.two.matches,t);const r=a.two.quickSplit(e.document).map((e=>{const t=e[0];return[t.index[0],t.index[1],t.index[1]+e.length]})),o=e.update(r);return o.cache(),o.sweep(Bl),e.uncache(),e.unfreeze(),e},tagger:e=>e.compute(["freeze","lexicon","preTagger","postTagger","unfreeze"])};const Kl={api:function(e){e.prototype.confidence=function(){let e=0,t=0;return this.docs.forEach((n=>{n.forEach((n=>{t+=1,e+=n.confidence||1}))})),0===t?1:(e=>Math.round(100*e)/100)(e/t)},e.prototype.tagger=function(){return this.compute(["tagger"])}},compute:Sl,model:{two:{matches:Vl}},hooks:["postTagger"]},$l=function(e,t){const n=function(e){return Object.keys(e.hooks).filter((e=>!e.startsWith("#")&&!e.startsWith("%")))}(t);if(0===n.length)return e;e._cache||e.cache();const a=e._cache;return e.filter(((e,t)=>n.some((e=>a[t].has(e)))))};var Ll={lib:{lazy:function(e,t){let n=t;"string"==typeof t&&(n=this.buildNet([{match:t}]));const a=this.tokenize(e),r=$l(a,n);return r.found?(r.compute(["index","tagger"]),r.match(t)):a.none()}}};const Ml=function(e,t,n){let a=e.split(/ /g).map((e=>e.toLowerCase().trim()));a=a.filter((e=>e)),a=a.map((e=>`{${e}}`)).join(" ");let r=this.match(a);return n&&(r=r.if(n)),r.has("#Verb")?function(e,t){let n=t;return e.forEach((e=>{e.has("#Infinitive")||(n=function(e,t){const n=(0,e.methods.two.transform.verb.conjugate)(t,e.model);return e.has("#Gerund")?n.Gerund:e.has("#PastTense")?n.PastTense:e.has("#PresentTense")?n.PresentTense:e.has("#Gerund")?n.Gerund:t}(e,t)),e.replaceWith(n)})),e}(r,t):r.has("#Noun")?function(e,t){let n=t;e.has("#Plural")&&(n=(0,e.methods.two.transform.noun.toPlural)(t,e.model));e.replaceWith(n,{possessives:!0})}(r,t):r.has("#Adverb")?function(e,t){const{toAdverb:n}=e.methods.two.transform.adjective,a=n(t);a&&e.replaceWith(a)}(r,t):r.has("#Adjective")?function(e,t){const{toComparative:n,toSuperlative:a}=e.methods.two.transform.adjective;let r=t;e.has("#Comparative")?r=n(r,e.model):e.has("#Superlative")&&(r=a(r,e.model)),r&&e.replaceWith(r)}(r,t):this};var Jl={api:function(e){e.prototype.swap=Ml}};return d.plugin(cl),d.plugin(Fl),d.plugin(Kl),d.plugin(Ll),d.plugin(Jl),d})); diff --git a/builds/two/compromise-two.mjs b/builds/two/compromise-two.mjs new file mode 100644 index 0000000..26a3b57 --- /dev/null +++ b/builds/two/compromise-two.mjs @@ -0,0 +1 @@ +var e={methods:{one:{},two:{},three:{},four:{}},model:{one:{},two:{},three:{}},compute:{},hooks:[]};const t={compute:function(e){const{world:t}=this,n=t.compute;return"string"==typeof e&&n.hasOwnProperty(e)?n[e](this):(e=>"[object Array]"===Object.prototype.toString.call(e))(e)?e.forEach((a=>{t.compute.hasOwnProperty(a)?n[a](this):console.warn("no compute:",e)})):"function"==typeof e?e(this):console.warn("no compute:",e),this}};var n={forEach:function(e){return this.fullPointer.forEach(((t,n)=>{const a=this.update([t]);e(a,n)})),this},map:function(e,t){const n=this.fullPointer.map(((t,n)=>{const a=this.update([t]),r=e(a,n);return void 0===r?this.none():r}));if(0===n.length)return t||this.update([]);if(void 0!==n[0]){if("string"==typeof n[0])return n;if("object"==typeof n[0]&&(null===n[0]||!n[0].isView))return n}let a=[];return n.forEach((e=>{a=a.concat(e.fullPointer)})),this.toView(a)},filter:function(e){let t=this.fullPointer;t=t.filter(((t,n)=>{const a=this.update([t]);return e(a,n)}));return this.update(t)},find:function(e){const t=this.fullPointer.find(((t,n)=>{const a=this.update([t]);return e(a,n)}));return this.update([t])},some:function(e){return this.fullPointer.some(((t,n)=>{const a=this.update([t]);return e(a,n)}))},random:function(e=1){let t=this.fullPointer,n=Math.floor(Math.random()*t.length);return n+e>this.length&&(n=this.length-e,n=n<0?0:n),t=t.slice(n,n+e),this.update(t)}};const a={termList:function(){return this.methods.one.termList(this.docs)},terms:function(e){const t=this.match(".");return"number"==typeof e?t.eq(e):t},groups:function(e){if(e||0===e)return this.update(this._groups[e]||[]);const t={};return Object.keys(this._groups).forEach((e=>{t[e]=this.update(this._groups[e])})),t},eq:function(e){let t=this.pointer;return t||(t=this.docs.map(((e,t)=>[t]))),t[e]?this.update([t[e]]):this.none()},first:function(){return this.eq(0)},last:function(){const e=this.fullPointer.length-1;return this.eq(e)},firstTerms:function(){return this.match("^.")},lastTerms:function(){return this.match(".$")},slice:function(e,t){let n=this.pointer||this.docs.map(((e,t)=>[t]));return n=n.slice(e,t),this.update(n)},all:function(){return this.update().toView()},fullSentences:function(){const e=this.fullPointer.map((e=>[e[0]]));return this.update(e).toView()},none:function(){return this.update([])},isDoc:function(e){if(!e||!e.isView)return!1;const t=this.fullPointer,n=e.fullPointer;return!t.length!==n.length&&t.every(((e,t)=>!!n[t]&&(e[0]===n[t][0]&&e[1]===n[t][1]&&e[2]===n[t][2])))},wordCount:function(){return this.docs.reduce(((e,t)=>(e+=t.filter((e=>""!==e.text)).length,e)),0)},isFull:function(){const e=this.pointer;if(!e)return!0;if(0===e.length||0!==e[0][0])return!1;let t=0,n=0;return this.document.forEach((e=>t+=e.length)),this.docs.forEach((e=>n+=e.length)),t===n},getNth:function(e){return"number"==typeof e?this.eq(e):"string"==typeof e?this.if(e):this}};a.group=a.groups,a.fullSentence=a.fullSentences,a.sentence=a.fullSentences,a.lastTerm=a.lastTerms,a.firstTerm=a.firstTerms;const r=Object.assign({},a,t,n);r.get=r.eq;class View{constructor(t,n,a={}){[["document",t],["world",e],["_groups",a],["_cache",null],["viewType","View"]].forEach((e=>{Object.defineProperty(this,e[0],{value:e[1],writable:!0})})),this.ptrs=n}get docs(){let t=this.document;return this.ptrs&&(t=e.methods.one.getDoc(this.ptrs,this.document)),t}get pointer(){return this.ptrs}get methods(){return this.world.methods}get model(){return this.world.model}get hooks(){return this.world.hooks}get isView(){return!0}get found(){return this.docs.length>0}get length(){return this.docs.length}get fullPointer(){const{docs:e,ptrs:t,document:n}=this,a=t||e.map(((e,t)=>[t]));return a.map((e=>{let[t,a,r,o,i]=e;return a=a||0,r=r||(n[t]||[]).length,n[t]&&n[t][a]&&(o=o||n[t][a].id,n[t][r-1]&&(i=i||n[t][r-1].id)),[t,a,r,o,i]}))}update(e){const t=new View(this.document,e);if(this._cache&&e&&e.length>0){const n=[];e.forEach(((e,t)=>{const[a,r,o]=e;(1===e.length||0===r&&this.document[a].length===o)&&(n[t]=this._cache[a])})),n.length>0&&(t._cache=n)}return t.world=this.world,t}toView(e){return new View(this.document,e||this.pointer)}fromText(e){const{methods:t}=this,n=t.one.tokenize.fromString(e,this.world),a=new View(n);return a.world=this.world,a.compute(["normal","freeze","lexicon"]),this.world.compute.preTagger&&a.compute("preTagger"),a.compute("unfreeze"),a}clone(){let e=this.document.slice(0);e=e.map((e=>e.map((e=>((e=Object.assign({},e)).tags=new Set(e.tags),e)))));const t=this.update(this.pointer);return t.document=e,t._cache=this._cache,t}}Object.assign(View.prototype,r);const o=function(e){return e&&"object"==typeof e&&!Array.isArray(e)};function i(e,t){if(o(t))for(const n in t)o(t[n])?(e[n]||Object.assign(e,{[n]:{}}),i(e[n],t[n])):Object.assign(e,{[n]:t[n]});return e}const s=function(e,t,n,a){if(r=e,"[object Array]"===Object.prototype.toString.call(r))return void e.forEach((e=>s(e,t,n,a)));var r;const{methods:o,model:l,compute:u,hooks:c}=t;e.methods&&function(e,t){for(const n in t)e[n]=e[n]||{},Object.assign(e[n],t[n])}(o,e.methods),e.model&&i(l,e.model),e.irregulars&&function(e,t){const n=e.two.models||{};Object.keys(t).forEach((e=>{t[e].pastTense&&(n.toPast&&(n.toPast.ex[e]=t[e].pastTense),n.fromPast&&(n.fromPast.ex[t[e].pastTense]=e)),t[e].presentTense&&(n.toPresent&&(n.toPresent.ex[e]=t[e].presentTense),n.fromPresent&&(n.fromPresent.ex[t[e].presentTense]=e)),t[e].gerund&&(n.toGerund&&(n.toGerund.ex[e]=t[e].gerund),n.fromGerund&&(n.fromGerund.ex[t[e].gerund]=e)),t[e].comparative&&(n.toComparative&&(n.toComparative.ex[e]=t[e].comparative),n.fromComparative&&(n.fromComparative.ex[t[e].comparative]=e)),t[e].superlative&&(n.toSuperlative&&(n.toSuperlative.ex[e]=t[e].superlative),n.fromSuperlative&&(n.fromSuperlative.ex[t[e].superlative]=e))}))}(l,e.irregulars),e.compute&&Object.assign(u,e.compute),c&&(t.hooks=c.concat(e.hooks||[])),e.api&&e.api(n),e.lib&&Object.keys(e.lib).forEach((t=>a[t]=e.lib[t])),e.tags&&a.addTags(e.tags),e.words&&a.addWords(e.words),e.frozen&&a.addWords(e.frozen,!0),e.mutate&&e.mutate(t,a)},l=function(e){return"[object Array]"===Object.prototype.toString.call(e)},u=function(e,t,n){const{methods:a}=n,r=new t([]);if(r.world=n,"number"==typeof e&&(e=String(e)),!e)return r;if("string"==typeof e){return new t(a.one.tokenize.fromString(e,n))}if(o=e,"[object Object]"===Object.prototype.toString.call(o)&&e.isView)return new t(e.document,e.ptrs);var o;if(l(e)){if(l(e[0])){const n=e.map((e=>e.map((e=>({text:e,normal:e,pre:"",post:" ",tags:new Set})))));return new t(n)}const n=e.map((e=>e.terms.map((e=>(l(e.tags)&&(e.tags=new Set(e.tags)),e)))));return new t(n)}return r},c=Object.assign({},e),d=function(e,t){t&&d.addWords(t);const n=u(e,View,c);return e&&n.compute(c.hooks),n};Object.defineProperty(d,"_world",{value:c,writable:!0}),d.tokenize=function(e,t){const{compute:n}=this._world;t&&d.addWords(t);const a=u(e,View,c);return n.contractions&&a.compute(["alias","normal","machine","contractions"]),a},d.plugin=function(e){return s(e,this._world,View,this),this},d.extend=d.plugin,d.world=function(){return this._world},d.model=function(){return this._world.model},d.methods=function(){return this._world.methods},d.hooks=function(){return this._world.hooks},d.verbose=function(e){const t="undefined"!=typeof process&&process.env?process.env:self.env||{};return t.DEBUG_TAGS="tagger"===e||!0===e||"",t.DEBUG_MATCH="match"===e||!0===e||"",t.DEBUG_CHUNKS="chunker"===e||!0===e||"",this},d.version="14.15.1";var h={one:{cacheDoc:function(e){const t=e.map((e=>{const t=new Set;return e.forEach((e=>{""!==e.normal&&t.add(e.normal),e.switch&&t.add(`%${e.switch}%`),e.implicit&&t.add(e.implicit),e.machine&&t.add(e.machine),e.root&&t.add(e.root),e.alias&&e.alias.forEach((e=>t.add(e)));const n=Array.from(e.tags);for(let e=0;e/^\p{Lu}[\p{Ll}'’]/u.test(e)||/^\p{Lu}$/u.test(e),b=(e,t,n)=>{if(n.forEach((e=>e.dirty=!0)),e){const a=[t,0].concat(n);Array.prototype.splice.apply(e,a)}return e},y=function(e){const t=e[e.length-1];!t||/ $/.test(t.post)||/[-–—]/.test(t.post)||(t.post+=" ")},v=(e,t,n)=>{const a=/[-.?!,;:)–—'"]/g,r=e[t-1];if(!r)return;const o=r.post;if(a.test(o)){const e=o.match(a).join(""),t=n[n.length-1];t.post=e+t.post,r.post=r.post.replace(a,"")}},w=function(e,t,n,a){const[r,o,i]=t;0===o||i===a[r].length?y(n):(y(n),y([e[t[1]]])),function(e,t,n){const a=e[t];if(0!==t||!f(a.text))return;n[0].text=n[0].text.replace(/^\p{Ll}/u,(e=>e.toUpperCase()));const r=e[t];r.tags.has("ProperNoun")||r.tags.has("Acronym")||f(r.text)&&r.text.length>1&&(r.text=(o=r.text,o.replace(/^\p{Lu}/u,(e=>e.toLowerCase()))));var o}(e,o,n),b(e,o,n)};let k=0;const P=e=>(e=e.length<3?"0"+e:e).length<3?"0"+e:e,A=function(e){let[t,n]=e.index||[0,0];k+=1,k=k>46655?0:k,t=t>46655?0:t,n=n>1294?0:n;let a=P(k.toString(36));a+=P(t.toString(36));let r=n.toString(36);r=r.length<2?"0"+r:r,a+=r;return a+=parseInt(36*Math.random(),10).toString(36),e.normal+"|"+a.toUpperCase()},C=function(e){if(e.has("@hasContraction")&&"function"==typeof e.contractions){e.grow("@hasContraction").contractions().expand()}},j=e=>"[object Array]"===Object.prototype.toString.call(e),N=function(e,t,n){const{document:a,world:r}=t;t.uncache();const o=t.fullPointer,i=t.fullPointer;t.forEach(((s,l)=>{const u=s.fullPointer[0],[c]=u,d=a[c];let h=function(e,t){const{methods:n}=t;return"string"==typeof e?n.one.tokenize.fromString(e,t)[0]:"object"==typeof e&&e.isView?e.clone().docs[0]||[]:j(e)?j(e[0])?e[0]:e:[]}(e,r);0!==h.length&&(h=function(e){return e.map((e=>(e.id=A(e),e)))}(h),n?(C(t.update([u]).firstTerm()),w(d,u,h,a)):(C(t.update([u]).lastTerm()),function(e,t,n,a){const[r,,o]=t,i=(a[r]||[]).length;oe.replace(/^\p{Ll}/u,(e=>e.toUpperCase())),T=e=>e.replace(/^\p{Lu}/u,(e=>e.toLowerCase()));H.replaceWith=function(e,t={}){let n=this.fullPointer;const a=this;if(this.uncache(),"function"==typeof e)return function(e,t,n){return e.forEach((e=>{const a=t(e);e.replaceWith(a,n)})),e}(a,e,t);const r=a.docs[0];if(!r)return a;const o=t.possessives&&r[r.length-1].tags.has("Possessive"),i=t.case&&(s=r[0].text,/^\p{Lu}[\p{Ll}'’]/u.test(s)||/^\p{Lu}$/u.test(s));var s;e=function(e,t){if("string"!=typeof e)return e;const n=t.groups();return e=e.replace(D,(e=>{const t=e.replace(/\$/,"");return n.hasOwnProperty(t)?n[t].text():e})),e}(e,a);const l=this.update(n);n=n.map((e=>e.slice(0,3)));const u=(l.docs[0]||[]).map((e=>Array.from(e.tags))),c=l.docs[0][0].pre,d=l.docs[0][l.docs[0].length-1].post;if("string"==typeof e&&(e=this.fromText(e).compute("id")),a.insertAfter(e),l.has("@hasContraction")&&a.contractions){a.grow("@hasContraction+").contractions().expand()}if(a.delete(l),o){const e=a.docs[0],t=e[e.length-1];t.tags.has("Possessive")||(t.text+="'s",t.normal+="'s",t.tags.add("Possessive"))}if(c&&a.docs[0]&&(a.docs[0][0].pre=c),d&&a.docs[0]){const e=a.docs[0][a.docs[0].length-1];e.post.trim()||(e.post=d)}const h=a.toView(n).compute(["index","freeze","lexicon"]);if(h.world.compute.preTagger&&h.compute("preTagger"),h.compute("unfreeze"),t.tags&&h.terms().forEach(((e,t)=>{e.tagSafe(u[t])})),!h.docs[0]||!h.docs[0][0])return h;if(t.case){const e=i?G:T;h.docs[0][0].text=e(h.docs[0][0].text)}return h},H.replace=function(e,t,n){if(e&&!t)return this.replaceWith(e,n);const a=this.match(e);return a.found?(this.soften(),a.replaceWith(t,n)):this};const x={remove:function(e){const{indexN:t}=this.methods.one.pointer;this.uncache();let n=this.all(),a=this;e&&(n=this,a=this.match(e));const r=!n.ptrs;if(a.has("@hasContraction")&&a.contractions){a.grow("@hasContraction").contractions().expand()}let o=n.fullPointer;const i=a.fullPointer.reverse(),s=function(e,t){t.forEach((t=>{const[n,a,r]=t,o=r-a;e[n]&&(r===e[n].length&&r>1&&function(e,t){const n=e.length-1,a=e[n],r=e[n-t];r&&a&&(r.post+=a.post,r.post=r.post.replace(/ +([.?!,;:])/,"$1"),r.post=r.post.replace(/[,;:]+([.?!])/,"$1"))}(e[n],o),e[n].splice(a,o))}));for(let t=e.length-1;t>=0;t-=1)if(0===e[t].length&&(e.splice(t,1),t===e.length&&e[t-1])){const n=e[t-1],a=n[n.length-1];a&&(a.post=a.post.trimEnd())}return e}(this.document,i);if(o=function(e,t){return e=e.map((e=>{const[n]=e;return t[n]?(t[n].forEach((t=>{const n=t[2]-t[1];e[1]<=t[1]&&e[2]>=t[2]&&(e[2]-=n)})),e):e})),e.forEach(((t,n)=>{if(0===t[1]&&0==t[2])for(let t=n+1;te[2]-e[1]>0))).map((e=>(e[3]=null,e[4]=null,e)))}(o,t(i)),n.ptrs=o,n.document=s,n.compute("index"),r&&(n.ptrs=void 0),!e)return this.ptrs=[],n.none();return n.toView(o)}};x.delete=x.remove;const E={pre:function(e,t){return void 0===e&&this.found?this.docs[0][0].pre:(this.docs.forEach((n=>{const a=n[0];!0===t?a.pre+=e:a.pre=e})),this)},post:function(e,t){if(void 0===e){const e=this.docs[this.docs.length-1];return e[e.length-1].post}return this.docs.forEach((n=>{const a=n[n.length-1];!0===t?a.post+=e:a.post=e})),this},trim:function(){if(!this.found)return this;const e=this.docs,t=e[0][0];t.pre=t.pre.trimStart();const n=e[e.length-1],a=n[n.length-1];return a.post=a.post.trimEnd(),this},hyphenate:function(){return this.docs.forEach((e=>{e.forEach(((t,n)=>{0!==n&&(t.pre=""),e[n+1]&&(t.post="-")}))})),this},dehyphenate:function(){const e=/[-–—]/;return this.docs.forEach((t=>{t.forEach((t=>{e.test(t.post)&&(t.post=" ")}))})),this},toQuotations:function(e,t){return e=e||'"',t=t||'"',this.docs.forEach((n=>{n[0].pre=e+n[0].pre;const a=n[n.length-1];a.post=t+a.post})),this},toParentheses:function(e,t){return e=e||"(",t=t||")",this.docs.forEach((n=>{n[0].pre=e+n[0].pre;const a=n[n.length-1];a.post=t+a.post})),this}};E.deHyphenate=E.dehyphenate,E.toQuotation=E.toQuotations;var F={alpha:(e,t)=>e.normalt.normal?1:0,length:(e,t)=>{const n=e.normal.trim().length,a=t.normal.trim().length;return na?-1:0},wordCount:(e,t)=>e.wordst.words?-1:0,sequential:(e,t)=>e[0]t[0]?-1:e[1]>t[1]?1:-1,byFreq:function(e){const t={};return e.forEach((e=>{t[e.normal]=t[e.normal]||0,t[e.normal]+=1})),e.sort(((e,n)=>{const a=t[e.normal],r=t[n.normal];return ar?-1:0})),e}};const O=new Set(["index","sequence","seq","sequential","chron","chronological"]),z=new Set(["freq","frequency","topk","repeats"]),V=new Set(["alpha","alphabetical"]);var B={unique:function(){const e=new Set,t=this.filter((t=>{const n=t.text("machine");return!e.has(n)&&(e.add(n),!0)}));return t},reverse:function(){let e=this.pointer||this.docs.map(((e,t)=>[t]));return e=[].concat(e),e=e.reverse(),this._cache&&(this._cache=this._cache.reverse()),this.update(e)},sort:function(e){const{docs:t,pointer:n}=this;if(this.uncache(),"function"==typeof e)return function(e,t){let n=e.fullPointer;return n=n.sort(((n,a)=>(n=e.update([n]),a=e.update([a]),t(n,a)))),e.ptrs=n,e}(this,e);e=e||"alpha";const a=n||t.map(((e,t)=>[t]));let r=t.map(((e,t)=>({index:t,words:e.length,normal:e.map((e=>e.machine||e.normal||"")).join(" "),pointer:a[t]})));return O.has(e)&&(e="sequential"),V.has(e)&&(e="alpha"),z.has(e)?(r=F.byFreq(r),this.update(r.map((e=>e.pointer)))):"function"==typeof F[e]?(r=r.sort(F[e]),this.update(r.map((e=>e.pointer)))):this}};const S=function(e,t){if(e.length>0){const t=e[e.length-1],n=t[t.length-1];!1===/ /.test(n.post)&&(n.post+=" ")}return e=e.concat(t)};var K={concat:function(e){if("string"==typeof e){const t=this.fromText(e);if(this.found&&this.ptrs){const e=this.fullPointer,n=e[e.length-1][0];this.document.splice(n,0,...t.document)}else this.document=this.document.concat(t.document);return this.all().compute("index")}if("object"==typeof e&&e.isView)return function(e,t){if(e.document===t.document){const n=e.fullPointer.concat(t.fullPointer);return e.toView(n).compute("index")}return t.fullPointer.forEach((t=>{t[0]+=e.document.length})),e.document=S(e.document,t.docs),e.all()}(this,e);if(t=e,"[object Array]"===Object.prototype.toString.call(t)){const t=S(this.document,e);return this.document=t,this.all()}var t;return this}};var $={harden:function(){return this.ptrs=this.fullPointer,this},soften:function(){let e=this.ptrs;return!e||e.length<1||(e=e.map((e=>e.slice(0,3))),this.ptrs=e),this}};const L=Object.assign({},{toLowerCase:function(){return this.termList().forEach((e=>{e.text=e.text.toLowerCase()})),this},toUpperCase:function(){return this.termList().forEach((e=>{e.text=e.text.toUpperCase()})),this},toTitleCase:function(){return this.termList().forEach((e=>{e.text=e.text.replace(/^ *[a-z\u00C0-\u00FF]/,(e=>e.toUpperCase()))})),this},toCamelCase:function(){return this.docs.forEach((e=>{e.forEach(((t,n)=>{0!==n&&(t.text=t.text.replace(/^ *[a-z\u00C0-\u00FF]/,(e=>e.toUpperCase()))),n!==e.length-1&&(t.post="")}))})),this}},I,H,x,E,B,K,$),M={id:function(e){const t=e.docs;for(let e=0;e(e.implicit=e.text,e.machine=e.text,e.pre="",e.post="",e.text="",e.normal="",e.index=[a,r+t],e))),n[0]&&(n[0].pre=e[a][r].pre,n[n.length-1].post=e[a][r].post,n[0].text=e[a][r].text,n[0].normal=e[a][r].normal),e[a].splice(r,1,...n))},R=/'/,Q=new Set(["what","how","when","where","why"]),Z=new Set(["be","go","start","think","need"]),X=new Set(["been","gone"]),_=/'/,Y=/(e|é|aison|sion|tion)$/,ee=/(age|isme|acle|ege|oire)$/;var te=(e,t)=>["je",e[t].normal.split(_)[1]],ne=(e,t)=>{const n=e[t].normal.split(_)[1];return n&&n.endsWith("e")?["la",n]:["le",n]},ae=(e,t)=>{const n=e[t].normal.split(_)[1];return n&&Y.test(n)&&!ee.test(n)?["du",n]:n&&n.endsWith("s")?["des",n]:["de",n]};const re=/^([0-9.]{1,4}[a-z]{0,2}) ?[-–—] ?([0-9]{1,4}[a-z]{0,2})$/i,oe=/^([0-9]{1,2}(:[0-9][0-9])?(am|pm)?) ?[-–—] ?([0-9]{1,2}(:[0-9][0-9])?(am|pm)?)$/i,ie=/^[0-9]{3}-[0-9]{4}$/,se=function(e,t){const n=e[t];let a=n.text.match(re);return null!==a?!0===n.tags.has("PhoneNumber")||ie.test(n.text)?null:[a[1],"to",a[2]]:(a=n.text.match(oe),null!==a?[a[1],"to",a[4]]:null)},le=/^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/,ue=function(e,t,n){const a=n.model.one.numberSuffixes||{},r=e[t].text.match(le);if(null!==r){const e=r[2].toLowerCase().trim();return a.hasOwnProperty(e)?null:[r[1],e]}return null},ce=/'/,de=/^[0-9][^-–—]*[-–—].*?[0-9]/,he=function(e,t,n,a){const r=t.update();r.document=[e];let o=n+a;n>0&&(n-=1),e[o]&&(o+=1),r.ptrs=[[0,n,o]]},ge={t:(e,t)=>function(e,t){return"ain't"===e[t].normal||"aint"===e[t].normal?null:[e[t].normal.replace(/n't/,""),"not"]}(e,t),d:(e,t)=>function(e,t){const n=e[t].normal.split(R)[0];if(Q.has(n))return[n,"did"];if(e[t+1]){if(X.has(e[t+1].normal))return[n,"had"];if(Z.has(e[t+1].normal))return[n,"would"]}return null}(e,t)},me={j:(e,t)=>te(e,t),l:(e,t)=>ne(e,t),d:(e,t)=>ae(e,t)},pe=function(e,t,n,a){for(let r=0;r2)return o.out.concat(a)}return null},fe=function(e,t){const n=t.fromText(e.join(" "));return n.compute(["id","alias"]),n.docs[0]},be=function(e,t){for(let n=t+1;n<5&&e[n];n+=1)if("been"===e[n].normal)return["there","has"];return["there","is"]};var ye={contractions:e=>{const{world:t,document:n}=e,{model:a,methods:r}=t,o=a.one.contractions||[];n.forEach(((a,i)=>{for(let s=a.length-1;s>=0;s-=1){let l=null,u=null;if(!0===ce.test(a[s].normal)){const e=a[s].normal.split(ce);l=e[0],u=e[1]}let c=pe(o,a[s],l,u);!c&&ge.hasOwnProperty(u)&&(c=ge[u](a,s,t)),!c&&me.hasOwnProperty(l)&&(c=me[l](a,s)),"there"===l&&"s"===u&&(c=be(a,s)),c?(c=fe(c,e),q(n,[i,s],c),he(n[i],e,s,c.length)):de.test(a[s].normal)?(c=se(a,s),c&&(c=fe(c,e),q(n,[i,s],c),r.one.setTag(c,"NumberRange",t),c[2]&&c[2].tags.has("Time")&&r.one.setTag([c[0]],"Time",t,null,"time-range"),he(n[i],e,s,c.length))):(c=ue(a,s,t),c&&(c=fe(c,e),q(n,[i,s],c),r.one.setTag([c[1]],"Unit",t,null,"contraction-unit")))}}))}};const ve={model:U,compute:ye,hooks:["contractions"]},we=function(e){const t=e.world,{model:n,methods:a}=e.world,r=a.one.setTag,{frozenLex:o}=n.one,i=n.one._multiCache||{};e.docs.forEach((e=>{for(let n=0;nn;a-=1){const i=e.slice(n,a+1),s=i.map((e=>e.machine||e.normal)).join(" ");!0!==o.hasOwnProperty(s)||(r(i,o[s],t,!1,"1-frozen-multi-lexicon"),i.forEach((e=>e.frozen=!0)))}}void 0!==o[s]&&o.hasOwnProperty(s)&&(r([a],o[s],t,!1,"1-freeze-lexicon"),a.frozen=!0)}}))};const ke=e=>""+e+"",Pe=e=>""+e+"",Ae=function(e){e.docs.forEach((e=>{console.log(ke("\n ┌─────────")),e.forEach((e=>{let t=` ${Pe("│")} `;const n=e.implicit||e.text||"-";!0===e.frozen?t+=`${ke(n)} ❄️`:t+=Pe(n),console.log(t)}))}))};var Ce={compute:{frozen:we,freeze:we,unfreeze:function(e){return e.docs.forEach((e=>{e.forEach((e=>{delete e.frozen}))})),e}},mutate:e=>{const t=e.methods.one;t.termMethods.isFrozen=e=>!0===e.frozen,t.debug.freeze=Ae,t.debug.frozen=Ae},api:function(e){e.prototype.freeze=function(){return this.docs.forEach((e=>{e.forEach((e=>{e.frozen=!0}))})),this},e.prototype.unfreeze=function(){this.compute("unfreeze")},e.prototype.isFrozen=function(){return this.match("@isFrozen+")}},hooks:["freeze"]};const je=function(e,t,n){const{model:a,methods:r}=n,o=r.one.setTag,i=a.one._multiCache||{},{lexicon:s}=a.one||{},l=e[t],u=l.machine||l.normal;if(void 0!==i[u]&&e[t+1]){for(let a=t+i[u]-1;a>t;a-=1){const r=e.slice(t,a+1);if(r.length<=1)return!1;const i=r.map((e=>e.machine||e.normal)).join(" ");if(!0===s.hasOwnProperty(i)){const e=s[i];return o(r,e,n,!1,"1-multi-lexicon"),!e||2!==e.length||"PhrasalVerb"!==e[0]&&"PhrasalVerb"!==e[1]||o([r[1]],"Particle",n,!1,"1-phrasal-particle"),!0}}return!1}return null},Ne=/^(under|over|mis|re|un|dis|semi|pre|post)-?/,Ie=new Set(["Verb","Infinitive","PastTense","Gerund","PresentTense","Adjective","Participle"]),De=function(e,t,n){const{model:a,methods:r}=n,o=r.one.setTag,{lexicon:i}=a.one,s=e[t],l=s.machine||s.normal;if(void 0!==i[l]&&i.hasOwnProperty(l))return o([s],i[l],n,!1,"1-lexicon"),!0;if(s.alias){const e=s.alias.find((e=>i.hasOwnProperty(e)));if(e)return o([s],i[e],n,!1,"1-lexicon-alias"),!0}if(!0===Ne.test(l)){const e=l.replace(Ne,"");if(i.hasOwnProperty(e)&&e.length>3&&Ie.has(i[e]))return o([s],i[e],n,!1,"1-lexicon-prefix"),!0}return null};var He={lexicon:function(e){const t=e.world;e.docs.forEach((e=>{for(let n=0;n{const r=e[a],o=(a=(a=a.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);o.length>1&&(void 0===n[o[0]]||o.length>n[o[0]])&&(n[o[0]]=o.length),t[a]=t[a]||r})),delete t[""],delete t.null,delete t[" "],{lex:t,_multi:n}}}};var Te={addWords:function(e,t=!1){const n=this.world(),{methods:a,model:r}=n;if(!e)return;if(Object.keys(e).forEach((t=>{"string"==typeof e[t]&&e[t].startsWith("#")&&(e[t]=e[t].replace(/^#/,""))})),!0===t){const{lex:t,_multi:o}=a.one.expandLexicon(e,n);return Object.assign(r.one._multiCache,o),void Object.assign(r.one.frozenLex,t)}if(a.two.expandLexicon){const{lex:t,_multi:o}=a.two.expandLexicon(e,n);Object.assign(r.one.lexicon,t),Object.assign(r.one._multiCache,o)}const{lex:o,_multi:i}=a.one.expandLexicon(e,n);Object.assign(r.one.lexicon,o),Object.assign(r.one._multiCache,i)}};var xe={model:{one:{lexicon:{},_multiCache:{},frozenLex:{}}},methods:Ge,compute:He,lib:Te,hooks:["lexicon"]};const Ee=function(e,t){const n=[{}],a=[null],r=[0],o=[];let i=0;e.forEach((function(e){let r=0;const o=function(e,t){const{methods:n,model:a}=t,r=n.one.tokenize.splitTerms(e,a).map((e=>n.one.tokenize.splitWhitespace(e,a)));return r.map((e=>e.text.toLowerCase()))}(e,t);for(let e=0;e0&&!n[i].hasOwnProperty(l);)i=r[i];if(n.hasOwnProperty(i)){const e=n[i][l];r[u]=e,a[e]&&(a[u]=a[u]||[],a[u]=a[u].concat(a[e]))}else r[u]=0}}return{goNext:n,endAs:a,failTo:r}},Fe=function(e,t,n){let a=0;const r=[];for(let o=0;o0&&(void 0===t.goNext[a]||!t.goNext[a].hasOwnProperty(i));)a=t.failTo[a]||0;if(t.goNext[a].hasOwnProperty(i)&&(a=t.goNext[a][i],t.endAs[a])){const n=t.endAs[a];for(let t=0;t{for(let n=e.length-1;n>=0;n-=1)if(e[n]!==t)return e=e.slice(0,n+1);return e},Ve={buildTrie:function(e){return function(e){return e.goNext=e.goNext.map((e=>{if(0!==Object.keys(e).length)return e})),e.goNext=ze(e.goNext,void 0),e.failTo=ze(e.failTo,0),e.endAs=ze(e.endAs,null),e}(Ee(e,this.world()))}};Ve.compile=Ve.buildTrie;var Be={api:function(e){e.prototype.lookup=function(e,t={}){if(!e)return this.none();"string"==typeof e&&(e=[e]);var n;let a=function(e,t,n){let a=[];n.form=n.form||"normal";const r=e.docs;if(!t.goNext||!t.goNext[0])return console.error("Compromise invalid lookup trie"),e.none();const o=Object.keys(t.goNext[0]);for(let i=0;i0&&(a=a.concat(l))}return e.update(a)}(this,(n=e,"[object Object]"===Object.prototype.toString.call(n)?e:Ee(e,this.world)),t);return a=a.settle(),a}},lib:Ve};const Se=function(e,t){return t?(e.forEach((e=>{const n=e[0];t[n]&&(e[0]=t[n][0],e[1]+=t[n][1],e[2]+=t[n][1])})),e):e},Ke=function(e,t){let{ptrs:n}=e;const{byGroup:a}=e;return n=Se(n,t),Object.keys(a).forEach((e=>{a[e]=Se(a[e],t)})),{ptrs:n,byGroup:a}},$e=function(e,t,n){const a=n.methods.one;return"number"==typeof e&&(e=String(e)),"string"==typeof e&&(e=a.killUnicode(e,n),e=a.parseMatch(e,t,n)),e},Le=e=>"[object Object]"===Object.prototype.toString.call(e),Me=e=>e&&Le(e)&&!0===e.isView,Je=e=>e&&Le(e)&&!0===e.isNet;var We={matchOne:function(e,t,n){const a=this.methods.one;if(Me(e))return this.intersection(e).eq(0);if(Je(e))return this.sweep(e,{tagger:!1,matchOne:!0}).view;const r={regs:e=$e(e,n,this.world),group:t,justOne:!0},o=a.match(this.docs,r,this._cache),{ptrs:i,byGroup:s}=Ke(o,this.fullPointer),l=this.toView(i);return l._groups=s,l},match:function(e,t,n){const a=this.methods.one;if(Me(e))return this.intersection(e);if(Je(e))return this.sweep(e,{tagger:!1}).view.settle();const r={regs:e=$e(e,n,this.world),group:t},o=a.match(this.docs,r,this._cache),{ptrs:i,byGroup:s}=Ke(o,this.fullPointer),l=this.toView(i);return l._groups=s,l},has:function(e,t,n){const a=this.methods.one;if(Me(e)){return this.intersection(e).fullPointer.length>0}if(Je(e))return this.sweep(e,{tagger:!1}).view.found;const r={regs:e=$e(e,n,this.world),group:t,justOne:!0};return a.match(this.docs,r,this._cache).ptrs.length>0},if:function(e,t,n){const a=this.methods.one;if(Me(e))return this.filter((t=>t.intersection(e).found));if(Je(e)){const t=this.sweep(e,{tagger:!1}).view.settle();return this.if(t)}const r={regs:e=$e(e,n,this.world),group:t,justOne:!0};let o=this.fullPointer;const i=this._cache||[];o=o.filter(((e,t)=>{const n=this.update([e]);return a.match(n.docs,r,i[t]).ptrs.length>0}));const s=this.update(o);return this._cache&&(s._cache=o.map((e=>i[e[0]]))),s},ifNo:function(e,t,n){const{methods:a}=this,r=a.one;if(Me(e))return this.filter((t=>!t.intersection(e).found));if(Je(e)){const t=this.sweep(e,{tagger:!1}).view.settle();return this.ifNo(t)}e=$e(e,n,this.world);const o=this._cache||[],i=this.filter(((n,a)=>{const i={regs:e,group:t,justOne:!0};return 0===r.match(n.docs,i,o[a]).ptrs.length}));return this._cache&&(i._cache=i.ptrs.map((e=>o[e[0]]))),i}};var Ue={before:function(e,t,n){const{indexN:a}=this.methods.one.pointer,r=[],o=a(this.fullPointer);Object.keys(o).forEach((e=>{const t=o[e].sort(((e,t)=>e[1]>t[1]?1:-1))[0];t[1]>0&&r.push([t[0],0,t[1]])}));const i=this.toView(r);return e?i.match(e,t,n):i},after:function(e,t,n){const{indexN:a}=this.methods.one.pointer,r=[],o=a(this.fullPointer),i=this.document;Object.keys(o).forEach((e=>{const t=o[e].sort(((e,t)=>e[1]>t[1]?-1:1))[0],[n,,a]=t;a{const o=n.before(e,t);if(o.found){const e=o.terms();a[r][1]-=e.length,a[r][3]=e.docs[0][0].id}})),this.update(a)},growRight:function(e,t,n){"string"==typeof e&&(e=this.world.methods.one.parseMatch(e,n,this.world)),e[0].start=!0;const a=this.fullPointer;return this.forEach(((n,r)=>{const o=n.after(e,t);if(o.found){const e=o.terms();a[r][2]+=e.length,a[r][4]=null}})),this.update(a)},grow:function(e,t,n){return this.growRight(e,t,n).growLeft(e,t,n)}};const qe=function(e,t){return[e[0],e[1],t[2]]},Re=(e,t,n)=>{return"string"==typeof e||(a=e,"[object Array]"===Object.prototype.toString.call(a))?t.match(e,n):e||t.none();var a},Qe=function(e,t){const[n,a,r]=e;return t.document[n]&&t.document[n][a]&&(e[3]=e[3]||t.document[n][a].id,t.document[n][r-1]&&(e[4]=e[4]||t.document[n][r-1].id)),e},Ze={splitOn:function(e,t){const{splitAll:n}=this.methods.one.pointer,a=Re(e,this,t).fullPointer,r=n(this.fullPointer,a);let o=[];return r.forEach((e=>{o.push(e.passthrough),o.push(e.before),o.push(e.match),o.push(e.after)})),o=o.filter((e=>e)),o=o.map((e=>Qe(e,this))),this.update(o)},splitBefore:function(e,t){const{splitAll:n}=this.methods.one.pointer,a=Re(e,this,t).fullPointer,r=n(this.fullPointer,a);for(let e=0;e{o.push(e.passthrough),o.push(e.before),e.match&&e.after?o.push(qe(e.match,e.after)):o.push(e.match)})),o=o.filter((e=>e)),o=o.map((e=>Qe(e,this))),this.update(o)},splitAfter:function(e,t){const{splitAll:n}=this.methods.one.pointer,a=Re(e,this,t).fullPointer,r=n(this.fullPointer,a);let o=[];return r.forEach((e=>{o.push(e.passthrough),e.before&&e.match?o.push(qe(e.before,e.match)):(o.push(e.before),o.push(e.match)),o.push(e.after)})),o=o.filter((e=>e)),o=o.map((e=>Qe(e,this))),this.update(o)}};Ze.split=Ze.splitAfter;const Xe=function(e,t){return!(!e||!t)&&(e[0]===t[0]&&e[2]===t[1])},_e=function(e,t,n){const a=e.world,r=a.methods.one.parseMatch;n=n||"^.";const o=r(t=t||".$",{},a),i=r(n,{},a);o[o.length-1].end=!0,i[0].start=!0;const s=e.fullPointer,l=[s[0]];for(let t=1;t)?\/.*?[^\\/]\/[?\]+*$~]*)(?:\s|$)/,nt=/([!~[^]*(?:<[^<]*>)?\([^)]+[^\\)]\)[?\]+*$~]*)(?:\s|$)/,at=/ /g,rt=e=>/^[![^]*(<[^<]*>)?\//.test(e)&&/\/[?\]+*$~]*$/.test(e),ot=function(e){return e=(e=e.map((e=>e.trim()))).filter((e=>e))},it=/\{([0-9]+)?(, *[0-9]*)?\}/,st=/&&/,lt=new RegExp(/^<\s*(\S+)\s*>/),ut=e=>e.charAt(0).toUpperCase()+e.substring(1),ct=e=>e.charAt(e.length-1),dt=e=>e.charAt(0),ht=e=>e.substring(1),gt=e=>e.substring(0,e.length-1),mt=function(e){return e=ht(e),e=gt(e)},pt=function(e,t){const n={};for(let a=0;a<2;a+=1){if("$"===ct(e)&&(n.end=!0,e=gt(e)),"^"===dt(e)&&(n.start=!0,e=ht(e)),"?"===ct(e)&&(n.optional=!0,e=gt(e)),("["===dt(e)||"]"===ct(e))&&(n.group=null,"["===dt(e)&&(n.groupStart=!0),"]"===ct(e)&&(n.groupEnd=!0),e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===dt(e))){const t=lt.exec(e);t.length>=2&&(n.group=t[1],e=e.replace(t[0],""))}if("+"===ct(e)&&(n.greedy=!0,e=gt(e)),"*"!==e&&"*"===ct(e)&&"\\*"!==e&&(n.greedy=!0,e=gt(e)),"!"===dt(e)&&(n.negative=!0,e=ht(e)),"~"===dt(e)&&"~"===ct(e)&&e.length>2&&(e=mt(e),n.fuzzy=!0,n.min=t.fuzzy||.85,!1===/\(/.test(e)))return n.word=e,n;if("/"===dt(e)&&"/"===ct(e))return e=mt(e),t.caseSensitive&&(n.use="text"),n.regex=new RegExp(e),n;if(!0===it.test(e)&&(e=e.replace(it,((e,t,a)=>(void 0===a?(n.min=Number(t),n.max=Number(t)):(a=a.replace(/, */,""),void 0===t?(n.min=0,n.max=Number(a)):(n.min=Number(t),n.max=Number(a||999))),n.greedy=!0,n.min||(n.optional=!0),"")))),"("===dt(e)&&")"===ct(e)){st.test(e)?(n.choices=e.split(st),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=ht(n.choices[0]);const a=n.choices.length-1;n.choices[a]=gt(n.choices[a]),n.choices=n.choices.map((e=>e.trim())),n.choices=n.choices.filter((e=>e)),n.choices=n.choices.map((e=>e.split(/ /g).map((e=>pt(e,t))))),e=""}if("{"===dt(e)&&"}"===ct(e)){if(e=mt(e),n.root=e,/\//.test(e)){const e=n.root.split(/\//);n.root=e[0],n.pos=e[1],"adj"===n.pos&&(n.pos="Adjective"),n.pos=n.pos.charAt(0).toUpperCase()+n.pos.substr(1).toLowerCase(),void 0!==e[2]&&(n.sense=e[2])}return n}if("<"===dt(e)&&">"===ct(e))return e=mt(e),n.chunk=ut(e),n.greedy=!0,n;if("%"===dt(e)&&"%"===ct(e))return e=mt(e),n.switch=e,n}return"#"===dt(e)?(n.tag=ht(e),n.tag=ut(n.tag),n):"@"===dt(e)?(n.method=ht(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),t.caseSensitive?n.use="text":e=e.toLowerCase(),n.word=e),n)},ft=/[a-z0-9][-–—][a-z]/i,bt=function(e,t){const{all:n}=t.methods.two.transform.verb||{},a=e.root;return n?n(a,t.model):[]},yt=function(e,t){const{all:n}=t.methods.two.transform.noun||{};return n?n(e.root,t.model):[e.root]},vt=function(e,t){const{all:n}=t.methods.two.transform.adjective||{};return n?n(e.root,t.model):[e.root]},wt=function(e){return e=function(e){let t=0,n=null;for(let a=0;a(e.fuzzy&&e.choices&&e.choices.forEach((t=>{1===t.length&&t[0].word&&(t[0].fuzzy=!0,t[0].min=e.min)})),e)))}(e=e.map((e=>{if(void 0!==e.choices){if("or"!==e.operator)return e;if(!0===e.fuzzy)return e;!0===e.choices.every((e=>{if(1!==e.length)return!1;const t=e[0];return!0!==t.fuzzy&&!t.start&&!t.end&&void 0!==t.word&&!0!==t.negative&&!0!==t.optional&&!0!==t.method}))&&(e.fastOr=new Set,e.choices.forEach((t=>{e.fastOr.add(t[0].word)})),delete e.choices)}return e}))),e},kt=function(e,t){for(const n of t)if(e.has(n))return!0;return!1},Pt=function(e,t){for(let n=0;nn?a:n)+1;if(Math.abs(n-a)>(r||100))return r||100;const o=[];for(let e=0;e4)return n;l=t[i-1],u=s===l?0:1,c=o[r-1][i]+1,(d=o[r][i-1]+1)1&&i>1&&s===t[i-2]&&e[r-2]===l&&(d=o[r-2][i-2]+u)-1!==e.post.indexOf(t),Ht={hasQuote:e=>Ct.test(e.pre)||jt.test(e.post),hasComma:e=>Dt(e,","),hasPeriod:e=>!0===Dt(e,".")&&!1===Dt(e,"..."),hasExclamation:e=>Dt(e,"!"),hasQuestionMark:e=>Dt(e,"?")||Dt(e,"¿"),hasEllipses:e=>Dt(e,"..")||Dt(e,"…"),hasSemicolon:e=>Dt(e,";"),hasColon:e=>Dt(e,":"),hasSlash:e=>/\//.test(e.text),hasHyphen:e=>Nt.test(e.post)||Nt.test(e.pre),hasDash:e=>It.test(e.post)||It.test(e.pre),hasContraction:e=>Boolean(e.implicit),isAcronym:e=>e.tags.has("Acronym"),isKnown:e=>e.tags.size>0,isTitleCase:e=>/^\p{Lu}[a-z'\u00C0-\u00FF]/u.test(e.text),isUpperCase:e=>/^\p{Lu}+$/u.test(e.text)};Ht.hasQuotation=Ht.hasQuote;let Gt=function(){};Gt=function(e,t,n,a){const r=function(e,t,n,a){if(!0===t.anything)return!0;if(!0===t.start&&0!==n)return!1;if(!0===t.end&&n!==a-1)return!1;if(void 0!==t.id&&t.id===e.id)return!0;if(void 0!==t.word){if(t.use)return t.word===e[t.use];if(null!==e.machine&&e.machine===t.word)return!0;if(void 0!==e.alias&&e.alias.hasOwnProperty(t.word))return!0;if(!0===t.fuzzy){if(t.word===e.root)return!0;if(At(t.word,e.normal)>=t.min)return!0}return!(!e.alias||!e.alias.some((e=>e===t.word)))||t.word===e.text||t.word===e.normal}if(void 0!==t.tag)return!0===e.tags.has(t.tag);if(void 0!==t.method)return"function"==typeof Ht[t.method]&&!0===Ht[t.method](e);if(void 0!==t.pre)return e.pre&&e.pre.includes(t.pre);if(void 0!==t.post)return e.post&&e.post.includes(t.post);if(void 0!==t.regex){let n=e.normal;return t.use&&(n=e[t.use]),t.regex.test(n)}if(void 0!==t.chunk)return e.chunk===t.chunk;if(void 0!==t.switch)return e.switch===t.switch;if(void 0!==t.machine)return e.normal===t.machine||e.machine===t.machine||e.root===t.machine;if(void 0!==t.sense)return e.sense===t.sense;if(void 0!==t.fastOr){if(t.pos&&!e.tags.has(t.pos))return null;const n=e.root||e.implicit||e.machine||e.normal;return t.fastOr.has(n)||t.fastOr.has(e.text)}return void 0!==t.choices&&("and"===t.operator?t.choices.every((t=>Gt(e,t,n,a))):t.choices.some((t=>Gt(e,t,n,a))))}(e,t,n,a);return!0===t.negative?!r:r};const Tt=function(e,t){if(!0===e.end&&!0===e.greedy&&t.start_i+t.tn.max)return e.t=e.t+n.max,!0;if(!0===e.hasGroup){xt(e,e.t).length=a-e.t}return e.t=a,!0},Ft=function(e,t=0){const n=e.regs[e.r];let a=!1;for(let o=0;o{let r=0;const o=e.t+a+t+r;if(void 0===e.terms[o])return!1;const i=Gt(e.terms[o],n,o+e.start_i,e.phrase_length);if(!0===i&&!0===n.greedy)for(let t=1;t{const a=n.every(((t,n)=>{const a=e.t+n;return void 0!==e.terms[a]&&Gt(e.terms[a],t,a,e.phrase_length)}));return!0===a&&n.length>t&&(t=n.length),a}))&&t}(e);if(a){if(!0===n.negative)return null;if(!0===e.hasGroup){xt(e,e.t).length+=a}if(!0===n.end){const t=e.phrase_length-1;if(e.t+e.start_i!==t)return null}return e.t+=a,!0}return!!n.optional||null},Vt=function(e){const{regs:t}=e,n=t[e.r],a=Object.assign({},n);a.negative=!1;if(Gt(e.terms[e.t],a,e.start_i+e.t,e.phrase_length))return!1;if(n.optional){const n=t[e.r+1];if(n){if(Gt(e.terms[e.t],n,e.start_i+e.t,e.phrase_length))e.r+=1;else if(n.optional&&t[e.r+2]){Gt(e.terms[e.t],t[e.r+2],e.start_i+e.t,e.phrase_length)&&(e.r+=2)}}}return n.greedy?function(e,t,n){let a=0;for(let r=e.t;ra||(e.t+=a,0))}(e,a,t[e.r+1]):(e.t+=1,!0)},Bt=function(e){const{regs:t,phrase_length:n}=e,a=t[e.r];return e.t=function(e,t){const n=Object.assign({},e.regs[e.r],{start:!1,end:!1}),a=e.t;for(;e.te.t?null:!0!==a.end||e.start_i+e.t===n||null},St=function(e){const{regs:t}=e,n=t[e.r],a=e.terms[e.t],r=e.t;if(n.optional&&t[e.r+1]&&n.negative)return!0;if(n.optional&&t[e.r+1]&&function(e){const{regs:t}=e,n=t[e.r],a=e.terms[e.t],r=Gt(a,t[e.r+1],e.start_i+e.t,e.phrase_length);if(n.negative||r){const n=e.terms[e.t+1];n&&Gt(n,t[e.r+1],e.start_i+e.t,e.phrase_length)||(e.r+=1)}}(e),a.implicit&&e.terms[e.t+1]&&function(e){const t=e.terms[e.t],n=e.regs[e.r];if(t.implicit&&e.terms[e.t+1]){if(!e.terms[e.t+1].implicit)return;n.word===t.normal&&(e.t+=1),"hasContraction"===n.method&&(e.t+=1)}}(e),e.t+=1,!0===n.end&&e.t!==e.terms.length&&!0!==n.greedy)return null;if(!0===n.greedy){if(!Bt(e))return null}return!0===e.hasGroup&&function(e,t){const n=e.regs[e.r],a=xt(e,t);e.t>1&&n.greedy?a.length+=e.t-t:a.length++}(e,r),!0},Kt=function(e,t,n,a){if(0===e.length||0===t.length)return null;const r={t:0,terms:e,r:0,regs:t,groups:{},start_i:n,phrase_length:a,inGroup:null};for(;r.r!e.optional)))break;return null}if(!0===e.anything&&!0===e.greedy){if(!Et(r))return null;continue}if(void 0!==e.choices&&"or"===e.operator){if(!Ot(r))return null;continue}if(void 0!==e.choices&&"and"===e.operator){if(!zt(r))return null;continue}if(!0===e.anything){if(e.negative&&e.anything)return null;if(!St(r))return null;continue}if(!0===Tt(e,r)){if(!St(r))return null;continue}if(e.negative){if(!Vt(r))return null;continue}if(!0!==Gt(r.terms[r.t],e,r.start_i+r.t,r.phrase_length)){if(!0!==e.optional)return null}else{if(!St(r))return null}}const o=[null,n,r.t+n];if(o[1]===o[2])return null;const i={};return Object.keys(r.groups).forEach((e=>{const t=r.groups[e],a=n+t.start;i[e]=[null,a,a+t.length]})),{pointer:o,groups:i}},$t=function(e,t){return e.pointer[0]=t,Object.keys(e.groups).forEach((n=>{e.groups[n][0]=t})),e},Lt=function(e,t,n){let a=Kt(e,t,0,e.length);return a?(a=$t(a,n),a):null},Mt={one:{termMethods:Ht,parseMatch:function(e,t,n){if(null==e||""===e)return[];t=t||{},"number"==typeof e&&(e=String(e));let a=function(e){const t=e.split(tt);let n=[];t.forEach((e=>{rt(e)?n.push(e):n=n.concat(e.split(nt))})),n=ot(n);let a=[];return n.forEach((e=>{(e=>/^[![^]*(<[^<]*>)?\(/.test(e)&&/\)[?\]+*$~]*$/.test(e))(e)||rt(e)?a.push(e):a=a.concat(e.split(at))})),a=ot(a),a}(e);return a=a.map((e=>pt(e,t))),a=function(e,t){const n=t.model.one.prefixes;for(let t=e.length-1;t>=0;t-=1){const a=e[t];if(a.word&&ft.test(a.word)){let r=a.word.split(/[-–—]/g);if(n.hasOwnProperty(r[0]))continue;r=r.filter((e=>e)).reverse(),e.splice(t,1),r.forEach((n=>{const r=Object.assign({},a);r.word=n,e.splice(t,0,r)}))}}return e}(a,n),a=function(e,t){return e.map((e=>{if(e.root)if(t.methods.two&&t.methods.two.transform){let n=[];e.pos?"Verb"===e.pos?n=n.concat(bt(e,t)):"Noun"===e.pos?n=n.concat(yt(e,t)):"Adjective"===e.pos&&(n=n.concat(vt(e,t))):(n=n.concat(bt(e,t)),n=n.concat(yt(e,t)),n=n.concat(vt(e,t))),n=n.filter((e=>e)),n.length>0&&(e.operator="or",e.fastOr=new Set(n))}else e.machine=e.root,delete e.id,delete e.root;return e}))}(a,n),a=wt(a),a},match:function(e,t,n){n=n||[];const{regs:a,group:r,justOne:o}=t;let i=[];if(!a||0===a.length)return{ptrs:[],byGroup:{}};const s=a.filter((e=>!0!==e.optional&&!0!==e.negative)).length;e:for(let t=0;te&&(e=Math.abs(n-1))}}else{const e=Lt(r,a,t);e&&i.push(e)}}return!0===a[a.length-1].end&&(i=i.filter((t=>{const n=t.pointer[0];return e[n].length===t.pointer[2]}))),t.notIf&&(i=function(e,t,n){return e=e.filter((e=>{const[a,r,o]=e.pointer,i=n[a].slice(r,o);for(let e=0;e{e.groups[t]&&n.push(e.groups[t])})):e.forEach((e=>{n.push(e.pointer),Object.keys(e.groups).forEach((t=>{a[t]=a[t]||[],a[t].push(e.groups[t])}))}))),{ptrs:n,byGroup:a}}(i,r),i.ptrs.forEach((t=>{const[n,a,r]=t;t[3]=e[n][a].id,t[4]=e[n][r-1].id})),i}}};var Jt={api:function(e){Object.assign(e.prototype,et)},methods:Mt,lib:{parseMatch:function(e,t){const n=this.world(),a=n.methods.one.killUnicode;return a&&(e=a(e,n)),n.methods.one.parseMatch(e,t,n)}}};const Wt=/^\../,Ut=/^#./,qt=function(e,t){const n={},a={};return Object.keys(t).forEach((r=>{let o=t[r];const i=function(e){let t="",n="";return e=e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),Wt.test(e)?t=``),t+=">",{start:t,end:n}}(r);"string"==typeof o&&(o=e.match(o)),o.docs.forEach((e=>{if(e.every((e=>e.implicit)))return;const t=e[0].id;n[t]=n[t]||[],n[t].push(i.start);const r=e[e.length-1].id;a[r]=a[r]||[],a[r].push(i.end)}))})),{starts:n,ends:a}};var Rt={html:function(e){const{starts:t,ends:n}=qt(this,e);let a="";return this.docs.forEach((e=>{for(let r=0;r{let n=e.pre||"",r=e.post||"";"some"===t.punctuation&&(n=n.replace(Zt,""),_t.test(r)&&(r=" "),r=r.replace(Xt,""),r=r.replace(/\?!+/,"?"),r=r.replace(/!+/,"!"),r=r.replace(/\?+/,"?"),r=r.replace(/\.{2,}/,""),e.tags.has("Abbreviation")&&(r=r.replace(/\./,""))),"some"===t.whitespace&&(n=n.replace(/\s/,""),r=r.replace(/\s+/," ")),t.keepPunct||(n=n.replace(Zt,""),r="-"===r?" ":r.replace(Qt,""));let o=e[t.form||"text"]||e.normal||"";"implicit"===t.form&&(o=e.implicit||e.text),"root"===t.form&&e.implicit&&(o=e.root||e.implicit||e.normal),"machine"!==t.form&&"implicit"!==t.form&&"root"!==t.form||!e.implicit||r&&Yt.test(r)||(r+=" "),a+=n+o+r})),!1===n&&(a=a.trim()),!0===t.lowerCase&&(a=a.toLowerCase()),a},tn={text:{form:"text"},normal:{whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"normal"},machine:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"none",unicode:"some",form:"machine"},root:{keepSpace:!1,whitespace:"some",punctuation:"some",case:"some",unicode:"some",form:"root"},implicit:{form:"implicit"}};tn.clean=tn.normal,tn.reduced=tn.root;const nn=[];let an=0;for(;an<64;)nn[an]=0|4294967296*Math.sin(++an%Math.PI);const rn=function(e){let t,n,a,r=decodeURI(encodeURI(e))+"€",o=r.length;const i=[t=1732584193,n=4023233417,~t,~n],s=[];for(e=--o/4+2|15,s[--e]=8*o;~o;)s[o>>2]|=r.charCodeAt(o)<<8*o--;for(an=r=0;an>4]+nn[r]+~~s[an|15&[r,5*r+1,3*r+5,7*r][o]])<<(o=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*o+r++%4])|a>>>-o),t,n])t=0|o[1],n=o[2];for(r=4;r;)i[--r]+=o[r]}for(e="";r<32;)e+=(i[r>>3]>>4*(1^r++)&15).toString(16);return e},on={text:!0,terms:!0},sn={case:"none",unicode:"some",form:"machine",punctuation:"some"},ln=function(e,t){return Object.assign({},e,t)},un={text:e=>en(e,{keepPunct:!0},!1),normal:e=>en(e,ln(tn.normal,{keepPunct:!0}),!1),implicit:e=>en(e,ln(tn.implicit,{keepPunct:!0}),!1),machine:e=>en(e,sn,!1),root:e=>en(e,ln(sn,{form:"root"}),!1),hash:e=>rn(en(e,{keepPunct:!0},!1)),offset:e=>{const t=un.text(e).length;return{index:e[0].offset.index,start:e[0].offset.start,length:t}},terms:e=>e.map((e=>{const t=Object.assign({},e);return t.tags=Array.from(e.tags),t})),confidence:(e,t,n)=>t.eq(n).confidence(),syllables:(e,t,n)=>t.eq(n).syllables(),sentence:(e,t,n)=>t.eq(n).fullSentence().text(),dirty:e=>e.some((e=>!0===e.dirty))};un.sentences=un.sentence,un.clean=un.normal,un.reduced=un.root;const cn={json:function(e){const t=(n=this,"string"==typeof(a=(a=e)||{})&&(a={}),(a=Object.assign({},on,a)).offset&&n.compute("offset"),n.docs.map(((e,t)=>{const r={};return Object.keys(a).forEach((o=>{a[o]&&un[o]&&(r[o]=un[o](e,n,t))})),r})));var n,a;return"number"==typeof e?t[e]:t}};cn.data=cn.json;const dn=function(e){const t=e.pre||"",n=e.post||"";return t+e.text+n},hn=function(e,t){const n=function(e,t){const n={};return Object.keys(t).forEach((a=>{e.match(a).fullPointer.forEach((e=>{n[e[3]]={fn:t[a],end:e[2]}}))})),n}(e,t);let a="";return e.docs.forEach(((t,r)=>{for(let o=0;oe.reduce(((e,t)=>e+t.pre+t.text+t.post),"").trim()));return e.filter((e=>e))}if("freq"===e||"frequency"===e||"topk"===e)return function(e){const t={};e.forEach((e=>{t[e]=t[e]||0,t[e]+=1}));const n=Object.keys(t).map((e=>({normal:e,count:t[e]})));return n.sort(((e,t)=>e.count>t.count?-1:0))}(this.json({normal:!0}).map((e=>e.normal)));if("terms"===e){let e=[];return this.docs.forEach((t=>{let n=t.map((e=>e.text));n=n.filter((e=>e)),e=e.concat(n)})),e}return"tags"===e?this.docs.map((e=>e.reduce(((e,t)=>(e[t.implicit||t.normal]=Array.from(t.tags),e)),{}))):"debug"===e?this.debug():this.text()},wrap:function(e){return hn(this,e)}};var mn={text:function(e){let t={};var n;if(e&&"string"==typeof e&&tn.hasOwnProperty(e)?t=Object.assign({},tn[e]):e&&(n=e,"[object Object]"===Object.prototype.toString.call(n))&&(t=Object.assign({},e)),void 0!==t.keepSpace||this.isFull()||(t.keepSpace=!1),void 0===t.keepEndPunct&&this.pointer){const e=this.pointer[0];e&&e[1]?t.keepEndPunct=!1:t.keepEndPunct=!0}return void 0===t.keepPunct&&(t.keepPunct=!0),void 0===t.keepSpace&&(t.keepSpace=!0),function(e,t){let n="";if(!e||!e[0]||!e[0][0])return n;for(let a=0;a""+e+fn,red:e=>""+e+fn,blue:e=>""+e+fn,magenta:e=>""+e+fn,cyan:e=>""+e+fn,yellow:e=>""+e+fn,black:e=>""+e+fn,dim:e=>""+e+fn,i:e=>""+e+fn},yn={tags:function(e){const{docs:t,model:n}=e;0===t.length&&console.log(bn.blue("\n ──────")),t.forEach((t=>{console.log(bn.blue("\n ┌─────────")),t.forEach((t=>{const a=[...t.tags||[]];let r=t.text||"-";t.sense&&(r=`{${t.normal}/${t.sense}}`),t.implicit&&(r="["+t.implicit+"]"),r=bn.yellow(r);let o="'"+r+"'";if(t.reference){const n=e.update([t.reference]).text("normal");o+=` - ${bn.dim(bn.i("["+n+"]"))}`}o=o.padEnd(18);const i=bn.blue(" │ ")+bn.i(o)+" - "+function(e,t){return t.one.tagSet&&(e=e.map((e=>{if(!t.one.tagSet.hasOwnProperty(e))return e;const n=t.one.tagSet[e].color||"blue";return bn[n](e)}))),e.join(", ")}(a,n);console.log(i)}))})),console.log("\n")},clientSide:function(e){console.log("%c -=-=- ","background-color:#6699cc;"),e.forEach((e=>{console.groupCollapsed(e.text());const t=e.docs[0].map((e=>{let t=e.text||"-";e.implicit&&(t="["+e.implicit+"]");return{text:t,tags:"["+Array.from(e.tags).join(", ")+"]"}}));console.table(t,["text","tags"]),console.groupEnd()}))},chunks:function(e){const{docs:t}=e;console.log(""),t.forEach((e=>{const t=[];e.forEach((e=>{"Noun"===e.chunk?t.push(bn.blue(e.implicit||e.normal)):"Verb"===e.chunk?t.push(bn.green(e.implicit||e.normal)):"Adjective"===e.chunk?t.push(bn.yellow(e.implicit||e.normal)):"Pivot"===e.chunk?t.push(bn.red(e.implicit||e.normal)):t.push(e.implicit||e.normal)})),console.log(t.join(" "),"\n")})),console.log("\n")},highlight:function(e){if(!e.found)return;const t={};e.fullPointer.forEach((e=>{t[e[0]]=t[e[0]]||[],t[e[0]].push(e)})),Object.keys(t).forEach((n=>{let a=e.update([[Number(n)]]).text();e.update(t[n]).json({offset:!0}).forEach(((e,t)=>{a=function(e,t,n){const a=((e,t,n)=>{const a=9*n,r=t.start+a,o=r+t.length;return[e.substring(0,r),e.substring(r,o),e.substring(o,e.length)]})(e,t,n);return`${a[0]}${bn.blue(a[1])}${a[2]}`}(a,e.offset,t)})),console.log(a)})),console.log("\n")}};var vn={api:function(e){Object.assign(e.prototype,pn)},methods:{one:{hash:rn,debug:yn}}};const wn=function(e,t){if(e[0]!==t[0])return!1;const[,n,a]=e,[,r,o]=t;return n<=r&&a>r||r<=n&&o>n},kn=function(e){const t={};return e.forEach((e=>{t[e[0]]=t[e[0]]||[],t[e[0]].push(e)})),t},Pn=function(e,t){const n=kn(t),a=[];return e.forEach((e=>{const[t]=e;let r=n[t]||[];if(r=r.filter((t=>function(e,t){return e[1]<=t[1]&&t[2]<=e[2]}(e,t))),0===r.length)return void a.push({passthrough:e});r=r.sort(((e,t)=>e[1]-t[1]));let o=e;r.forEach(((e,t)=>{const n=function(e,t){const[n,a]=e,r=t[1],o=t[2],i={};if(ao&&(i.after=[n,o,e[2]]),i}(o,e);r[t+1]?(a.push({before:n.before,match:n.match}),n.after&&(o=n.after)):a.push(n)}))})),a};var An={one:{termList:function(e){const t=[];for(let n=0;n{if(!a)return;let[o,i,s,l,u]=a,c=t[o]||[];if(void 0===i&&(i=0),void 0===s&&(s=c.length),!l||c[i]&&c[i].id===l)c=c.slice(i,s);else{const n=function(e,t,n){for(let a=0;a<20;a+=1){if(t[n-a]){const r=t[n-a].findIndex((t=>t.id===e));if(-1!==r)return[n-a,r]}if(t[n+a]){const r=t[n+a].findIndex((t=>t.id===e));if(-1!==r)return[n+a,r]}}return null}(l,t,o);if(null!==n){const a=s-i;c=t[n[0]].slice(n[1],n[1]+a);const o=c[0]?c[0].id:null;e[r]=[n[0],n[1],n[1]+a,o]}}0!==c.length&&i!==s&&(u&&c[c.length-1].id!==u&&(c=function(e,t){const[n,a,,,r]=e,o=t[n],i=o.findIndex((e=>e.id===r));return-1===i?(e[2]=t[n].length,e[4]=o.length?o[o.length-1].id:null):e[2]=i,t[n].slice(a,e[2]+1)}(a,t)),n.push(c))})),n=n.filter((e=>e.length>0)),n},pointer:{indexN:kn,splitAll:Pn}}};const Cn=function(e,t){const n=e.concat(t),a=kn(n);let r=[];return n.forEach((e=>{const[t]=e;if(1===a[t].length)return void r.push(e);const n=a[t].filter((t=>wn(e,t)));n.push(e);const o=function(e){let t=e[0][1],n=e[0][2];return e.forEach((e=>{e[1]n&&(n=e[2])})),[e[0][0],t,n]}(n);r.push(o)})),r=function(e){const t={};for(let n=0;n{e.passthrough&&n.push(e.passthrough),e.before&&n.push(e.before),e.after&&n.push(e.after)})),n},Nn=(e,t)=>{return"string"==typeof e||(n=e,"[object Array]"===Object.prototype.toString.call(n))?t.match(e):e||t.none();var n},In=function(e,t){return e.map((e=>{const[n,a]=e;return t[n]&&t[n][a]&&(e[3]=t[n][a].id),e}))},Dn={union:function(e){e=Nn(e,this);let t=Cn(this.fullPointer,e.fullPointer);return t=In(t,this.document),this.toView(t)}};Dn.and=Dn.union,Dn.intersection=function(e){e=Nn(e,this);let t=function(e,t){const n=kn(t),a=[];return e.forEach((e=>{let t=n[e[0]]||[];t=t.filter((t=>wn(e,t))),0!==t.length&&t.forEach((t=>{const n=function(e,t){const n=e[1]t[2]?t[2]:e[2];return n{e=Cn(e,[t])})),e=In(e,this.document),this.update(e)};var Hn={methods:An,api:function(e){Object.assign(e.prototype,Dn)}};const Gn=function(e){return!0===e.optional||!0===e.negative?null:e.tag?"#"+e.tag:e.word?e.word:e.switch?`%${e.switch}%`:null},Tn=function(e,t){const n=t.methods.one.parseMatch;return e.forEach((e=>{e.regs=n(e.match,{},t),"string"==typeof e.ifNo&&(e.ifNo=[e.ifNo]),e.notIf&&(e.notIf=n(e.notIf,{},t)),e.needs=function(e){const t=[];return e.forEach((e=>{t.push(Gn(e)),"and"===e.operator&&e.choices&&e.choices.forEach((e=>{e.forEach((e=>{t.push(Gn(e))}))}))})),t.filter((e=>e))}(e.regs);const{wants:a,count:r}=function(e){const t=[];let n=0;return e.forEach((e=>{"or"!==e.operator||e.optional||e.negative||(e.fastOr&&Array.from(e.fastOr).forEach((e=>{t.push(e)})),e.choices&&e.choices.forEach((e=>{e.forEach((e=>{const n=Gn(e);n&&t.push(n)}))})),n+=1)})),{wants:t,count:n}}(e.regs);e.wants=a,e.minWant=r,e.minWords=e.regs.filter((e=>!e.optional)).length})),e};var xn={buildNet:function(e,t){e=Tn(e,t);const n={};e.forEach((e=>{e.needs.forEach((t=>{n[t]=Array.isArray(n[t])?n[t]:[],n[t].push(e)})),e.wants.forEach((t=>{n[t]=Array.isArray(n[t])?n[t]:[],n[t].push(e)}))})),Object.keys(n).forEach((e=>{const t={};n[e]=n[e].filter((e=>"boolean"!=typeof t[e.match]&&(t[e.match]=!0,!0)))}));const a=e.filter((e=>0===e.needs.length&&0===e.wants.length));return{hooks:n,always:a}},bulkMatch:function(e,t,n,a={}){const r=n.one.cacheDoc(e);let o=function(e,t){return e.map(((n,a)=>{let r=[];Object.keys(t).forEach((n=>{e[a].has(n)&&(r=r.concat(t[n]))}));const o={};return r=r.filter((e=>"boolean"!=typeof o[e.match]&&(o[e.match]=!0,!0))),r}))}(r,t.hooks);o=function(e,t){return e.map(((e,n)=>{const a=t[n];return(e=(e=e.filter((e=>e.needs.every((e=>a.has(e)))))).filter((e=>void 0===e.ifNo||!0!==e.ifNo.some((e=>a.has(e)))))).filter((e=>0===e.wants.length||e.wants.filter((e=>a.has(e))).length>=e.minWant))}))}(o,r),t.always.length>0&&(o=o.map((e=>e.concat(t.always)))),o=function(e,t){return e.map(((e,n)=>{const a=t[n].length;return e=e.filter((e=>a>=e.minWords)),e}))}(o,e);const i=function(e,t,n,a,r){const o=[];for(let n=0;n0&&(l.ptrs.forEach((e=>{e[0]=n;const t=Object.assign({},s,{pointer:e});void 0!==s.unTag&&(t.unTag=s.unTag),o.push(t)})),!0===r.matchOne))return[o[0]]}return o}(o,e,0,n,a);return i},bulkTagger:function(e,t,n){const{model:a,methods:r}=n,{getDoc:o,setTag:i,unTag:s}=r.one,l=r.two.looksPlural;if(0===e.length)return e;return("undefined"!=typeof process&&process.env?process.env:self.env||{}).DEBUG_TAGS&&console.log(`\n\n → ${e.length} post-tagger:`),e.map((e=>{if(!e.tag&&!e.chunk&&!e.unTag)return;const r=e.reason||e.match,u=o([e.pointer],t)[0];if(!0===e.safe){if(!1===function(e,t,n){const a=n.one.tagSet;if(!a.hasOwnProperty(t))return!0;const r=a[t].not||[];for(let t=0;te.frozen=!0))}void 0!==e.unTag&&s(u,e.unTag,n,e.safe,r),e.chunk&&u.forEach((t=>t.chunk=e.chunk))}))}},En={lib:{buildNet:function(e){const t=this.methods().one.buildNet(e,this.world());return t.isNet=!0,t}},api:function(e){e.prototype.sweep=function(e,t={}){const{world:n,docs:a}=this,{methods:r}=n;let o=r.one.bulkMatch(a,e,this.methods,t);!1!==t.tagger&&r.one.bulkTagger(o,a,this.world),o=o.map((e=>{const t=e.pointer,n=a[t[0]][t[1]],r=t[2]-t[1];return n.index&&(e.pointer=[n.index[0],n.index[1],t[1]+r]),e}));const i=o.map((e=>e.pointer));return o=o.map((e=>(e.view=this.update([e.pointer]),delete e.regs,delete e.needs,delete e.pointer,delete e._expanded,e))),{view:this.update(i),found:o}}},methods:{one:xn}};const Fn=/ /,On=function(e,t){"Noun"===t&&(e.chunk=t),"Verb"===t&&(e.chunk=t)},zn=function(e,t,n,a){if(!0===e.tags.has(t))return null;if("."===t)return null;!0===e.frozen&&(a=!0);const r=n[t];if(r){if(r.not&&r.not.length>0)for(let t=0;t0)for(let t=0;t{const a=e.map((e=>e.text||"["+e.implicit+"]")).join(" ");var r;"string"!=typeof t&&t.length>2&&(t=t.slice(0,2).join(", #")+" +"),t="string"!=typeof t?t.join(", #"):t,console.log(` ${(r=a,""+r+"").padEnd(24)} → #${t.padEnd(22)} ${(e=>""+e+"")(n)}`)})(e,t,r),!0!=(s=t,"[object Array]"===Object.prototype.toString.call(s)))if("string"==typeof t)if(t=t.trim(),Fn.test(t))!function(e,t,n,a){const r=t.split(Fn);e.forEach(((e,t)=>{let o=r[t];o&&(o=o.replace(/^#/,""),zn(e,o,n,a))}))}(e,t,o,a);else{t=t.replace(/^#/,"");for(let n=0;nVn(e,t,n,a)))},Bn=function(e){return e.children=e.children||[],e._cache=e._cache||{},e.props=e.props||{},e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],e},Sn=/^ *(#|\/\/)/,Kn=function(e){let t=e.trim().split(/->/),n=[];t.forEach((e=>{n=n.concat(function(e){if(!(e=e.trim()))return null;if(/^\[/.test(e)&&/\]$/.test(e)){let t=(e=(e=e.replace(/^\[/,"")).replace(/\]$/,"")).split(/,/);return t=t.map((e=>e.trim())).filter((e=>e)),t=t.map((e=>Bn({id:e}))),t}return[Bn({id:e})]}(e))})),n=n.filter((e=>e));let a=n[0];for(let e=1;e{let n=[],a=[e];for(;a.length>0;){let e=a.pop();n.push(e),e.children&&e.children.forEach((n=>{t&&t(e,n),a.push(n)}))}return n},Ln=e=>"[object Array]"===Object.prototype.toString.call(e),Mn=e=>(e=e||"").trim(),Jn=function(e=[]){return"string"==typeof e?function(e){let t=e.split(/\r?\n/),n=[];t.forEach((e=>{if(!e.trim()||Sn.test(e))return;let t=(e=>{const t=/^( {2}|\t)/;let n=0;for(;t.test(e);)e=e.replace(t,""),n+=1;return n})(e);n.push({indent:t,node:Kn(e)})}));let a=function(e){let t={children:[]};return e.forEach(((n,a)=>{0===n.indent?t.children=t.children.concat(n.node):e[a-1]&&function(e,t){let n=e[t].indent;for(;t>=0;t-=1)if(e[t].indent{t[e.id]=e}));let n=Bn({});return e.forEach((e=>{if((e=Bn(e)).parent)if(t.hasOwnProperty(e.parent)){let n=t[e.parent];delete e.parent,n.children.push(e)}else console.warn(`[Grad] - missing node '${e.parent}'`);else n.children.push(e)})),n}(e):($n(t=e).forEach(Bn),t);var t},Wn=function(e,t){let n="-> ";t&&(n=(e=>""+e+"")("→ "));let a="";return $n(e).forEach(((e,r)=>{let o=e.id||"";if(t&&(o=(e=>""+e+"")(o)),0===r&&!e.id)return;let i=e._cache.parents.length;a+=" ".repeat(i)+n+o+"\n"})),a},Un=function(e){let t=$n(e);t.forEach((e=>{delete(e=Object.assign({},e)).children}));let n=t[0];return n&&!n.id&&0===Object.keys(n.props).length&&t.shift(),t},qn={text:Wn,txt:Wn,array:Un,flat:Un},Rn=function(e,t){return"nested"===t||"json"===t?e:"debug"===t?(console.log(Wn(e,!0)),null):qn.hasOwnProperty(t)?qn[t](e):e},Qn=e=>{$n(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],t._cache.parents=e._cache.parents.concat([e.id]))}))},Zn=/\//;let Xn=class g{constructor(e={}){Object.defineProperty(this,"json",{enumerable:!1,value:e,writable:!0})}get children(){return this.json.children}get id(){return this.json.id}get found(){return this.json.id||this.json.children.length>0}props(e={}){let t=this.json.props||{};return"string"==typeof e&&(t[e]=!0),this.json.props=Object.assign(t,e),this}get(e){if(e=Mn(e),!Zn.test(e)){let t=this.json.children.find((t=>t.id===e));return new g(t)}let t=((e,t)=>{let n=(e=>"string"!=typeof e?e:(e=e.replace(/^\//,"")).split(/\//))(t=t||"");for(let t=0;te.id===n[t]));if(!a)return null;e=a}return e})(this.json,e)||Bn({});return new g(t)}add(e,t={}){if(Ln(e))return e.forEach((e=>this.add(Mn(e),t))),this;e=Mn(e);let n=Bn({id:e,props:t});return this.json.children.push(n),new g(n)}remove(e){return e=Mn(e),this.json.children=this.json.children.filter((t=>t.id!==e)),this}nodes(){return $n(this.json).map((e=>(delete(e=Object.assign({},e)).children,e)))}cache(){return(e=>{let t=$n(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],t._cache.parents=e._cache.parents.concat([e.id]))})),n={};t.forEach((e=>{e.id&&(n[e.id]=e)})),t.forEach((e=>{e._cache.parents.forEach((t=>{n.hasOwnProperty(t)&&n[t]._cache.children.push(e.id)}))})),e._cache.children=Object.keys(n)})(this.json),this}list(){return $n(this.json)}fillDown(){var e;return e=this.json,$n(e,((e,t)=>{t.props=((e,t)=>(Object.keys(t).forEach((n=>{if(t[n]instanceof Set){let a=e[n]||new Set;e[n]=new Set([...a,...t[n]])}else if((e=>e&&"object"==typeof e&&!Array.isArray(e))(t[n])){let a=e[n]||{};e[n]=Object.assign({},t[n],a)}else Ln(t[n])?e[n]=t[n].concat(e[n]||[]):void 0===e[n]&&(e[n]=t[n])})),e))(t.props,e.props)})),this}depth(){Qn(this.json);let e=$n(this.json),t=e.length>1?1:0;return e.forEach((e=>{if(0===e._cache.parents.length)return;let n=e._cache.parents.length+1;n>t&&(t=n)})),t}out(e){return Qn(this.json),Rn(this.json,e)}debug(){return Qn(this.json),Rn(this.json,"debug"),this}};const _n=function(e){let t=Jn(e);return new Xn(t)};_n.prototype.plugin=function(e){e(this)};const Yn={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Hyphenated:"cyan",Adverb:"cyan"},ea=function(e){if(Yn.hasOwnProperty(e.id))return Yn[e.id];if(Yn.hasOwnProperty(e.is))return Yn[e.is];const t=e._cache.parents.find((e=>Yn[e]));return Yn[t]},ta=function(e){return e?"string"==typeof e?[e]:e:[]},na=function(e,t){return e=function(e,t){return Object.keys(e).forEach((n=>{e[n].isA&&(e[n].is=e[n].isA),e[n].notA&&(e[n].not=e[n].notA),e[n].is&&"string"==typeof e[n].is&&(t.hasOwnProperty(e[n].is)||e.hasOwnProperty(e[n].is)||(e[e[n].is]={})),e[n].not&&"string"==typeof e[n].not&&!e.hasOwnProperty(e[n].not)&&(t.hasOwnProperty(e[n].not)||e.hasOwnProperty(e[n].not)||(e[e[n].not]={}))})),e}(e,t),Object.keys(e).forEach((t=>{e[t].children=ta(e[t].children),e[t].not=ta(e[t].not)})),Object.keys(e).forEach((t=>{(e[t].not||[]).forEach((n=>{e[n]&&e[n].not&&e[n].not.push(t)}))})),e};var aa={one:{setTag:Vn,unTag:function(e,t,n){t=t.trim().replace(/^#/,"");for(let a=0;a0)for(let e=0;e0&&(e=function(e){return Object.keys(e).forEach((t=>{e[t]=Object.assign({},e[t]),e[t].novel=!0})),e}(e)),e=na(e,t);const n=function(e){const t=Object.keys(e).map((t=>{const n=e[t],a={not:new Set(n.not),also:n.also,is:n.is,novel:n.novel};return{id:t,parent:n.is,props:a,children:[]}}));return _n(t).cache().fillDown().out("array")}(Object.assign({},t,e)),a=function(e){const t={};return e.forEach((e=>{const{not:n,also:a,is:r,novel:o}=e.props;let i=e._cache.parents;a&&(i=i.concat(a)),t[e.id]={is:r,not:n,novel:o,also:a,parents:i,children:e._cache.children,color:ea(e)}})),Object.keys(t).forEach((e=>{const n=new Set(t[e].not);t[e].not.forEach((e=>{t[e]&&t[e].children.forEach((e=>n.add(e)))})),t[e].not=Array.from(n)})),t}(n);return a},canBe:function(e,t,n){if(!n.hasOwnProperty(t))return!0;const a=n[t].not||[];for(let t=0;tr.one.setTag(a,e,i,n,t))):r.one.setTag(a,e,i,n,t),this.uncache(),this},tagSafe:function(e,t=""){return this.tag(e,t,!0)},unTag:function(e,t){if(!this.found||!e)return this;const n=this.termList();if(0===n.length)return this;const{methods:a,verbose:r,model:o}=this;!0===r&&console.log(" - ",e,t||"");const i=o.one.tagSet;return ra(e)?e.forEach((e=>a.one.unTag(n,e,i))):a.one.unTag(n,e,i),this.uncache(),this},canBe:function(e){e=e.replace(/^#/,"");const t=this.model.one.tagSet,n=this.methods.one.canBe,a=[];this.document.forEach(((r,o)=>{r.forEach(((r,i)=>{n(r,e,t)||a.push([o,i,i+1])}))}));const r=this.update(a);return this.difference(r)}};var ia={addTags:function(e){const{model:t,methods:n}=this.world(),a=t.one.tagSet,r=(0,n.one.addTags)(e,a);return t.one.tagSet=r,this}};const sa=new Set(["Auxiliary","Possessive"]);var la={model:{one:{tagSet:{}}},compute:{tagRank:function(e){const{document:t,world:n}=e,a=n.model.one.tagSet;t.forEach((e=>{e.forEach((e=>{const t=Array.from(e.tags);e.tagRank=function(e,t){return e=e.sort(((e,n)=>{if(sa.has(e)||!t.hasOwnProperty(n))return 1;if(sa.has(n)||!t.hasOwnProperty(e))return-1;let a=t[e].children||[];const r=a.length;return a=t[n].children||[],r-a.length})),e}(t,a)}))}))}},methods:aa,api:function(e){Object.assign(e.prototype,oa)},lib:ia};const ua=/([.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s)/g,ca=/^[.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s$/,da=/((?:\r?\n|\r)+)/,ha=/[a-z0-9\u00C0-\u00FF\u00a9\u00ae\u2000-\u3300\ud000-\udfff]/i,ga=/\S/,ma=function(e){return Boolean(e.match(/\n$/))},pa={'"':'"',""":""","“":"”","‟":"”","„":"”","⹂":"”","‚":"’","«":"»","‹":"›","‵":"′","‶":"″","‷":"‴","〝":"〞","〟":"〞"},fa=RegExp("["+Object.keys(pa).join("")+"]","g"),ba=RegExp("["+Object.values(pa).join("")+"]","g"),ya=function(e){if(!e)return!1;const t=e.match(ba);return null!==t&&1===t.length},va=/\(/g,wa=/\)/g,ka=/\S/,Pa=/^\s+/,Aa=function(e,t){const n=e.split(/[-–—]/);if(n.length<=1)return!1;const{prefixes:a,suffixes:r}=t.one;if(1===n[0].length&&/[a-z]/i.test(n[0]))return!1;if(a.hasOwnProperty(n[0]))return!1;if(n[1]=n[1].trim().replace(/[.?!]$/,""),r.hasOwnProperty(n[1]))return!1;if(!0===/^([a-z\u00C0-\u00FF`"'/]+)[-–—]([a-z0-9\u00C0-\u00FF].*)/i.test(e))return!0;return!0===/^[('"]?([0-9]{1,4})[-–—]([a-z\u00C0-\u00FF`"'/-]+[)'"]?$)/i.test(e)},Ca=function(e){const t=[],n=e.split(/[-–—]/);let a="-";const r=e.match(/[-–—]/);r&&r[0]&&(a=r);for(let e=0;e(e[t]=!0,e)),{});const Ga=/\p{Letter}/u,Ta=/[\p{Number}\p{Currency_Symbol}]/u,xa=/^[a-z]\.([a-z]\.)+/i,Ea=/[sn]['’]$/,Fa=/([A-Z]\.)+[A-Z]?,?$/,Oa=/^[A-Z]\.,?$/,za=/[A-Z]{2,}('s|,)?$/,Va=/([a-z]\.)+[a-z]\.?$/,Ba=function(e){return function(e){return!0===Fa.test(e)||!0===Va.test(e)||!0===Oa.test(e)||!0===za.test(e)}(e)&&(e=e.replace(/\./g,"")),e},Sa=function(e,t){const n=t.methods.one.killUnicode;let a=e.text||"";a=function(e){const t=e=(e=(e=e||"").toLowerCase()).trim();return e=(e=(e=e.replace(/[,;.!?]+$/,"")).replace(/\u2026/g,"...")).replace(/\u2013/g,"-"),!1===/^[:;]/.test(e)&&(e=(e=(e=e.replace(/\.{3,}$/g,"")).replace(/[",.!:;?)]+$/g,"")).replace(/^['"(]+/g,"")),""===(e=(e=e.replace(/[\u200B-\u200D\uFEFF]/g,"")).trim())&&(e=t),e.replace(/([0-9]),([0-9])/g,"$1$2")}(a),a=n(a,t),a=Ba(a),e.normal=a},Ka=/[ .][A-Z]\.? *$/i,$a=/(?:\u2026|\.{2,}) *$/,La=/\p{L}/u,Ma=/\. *$/,Ja=/^[A-Z]\. $/;var Wa={one:{killUnicode:function(e,t){const n=t.model.one.unicode||{},a=(e=e||"").split("");return a.forEach(((e,t)=>{n[e]&&(a[t]=n[e])})),a.join("")},tokenize:{splitSentences:function(e,t){if(e=e||"",!(e=String(e))||"string"!=typeof e||!1===ka.test(e))return[];const n=function(e){const t=[],n=e.split(da);for(let e=0;e0&&(r.push(o),e[t]=""):e[t+1]=o+(e[t+1]||"")}return r}(a,t),a=function(e){const t=[];for(let n=0;n0?(n[n.length-1]+=o,n.push(t)):n.push(o+t),o=""):o+=t}return o&&(0===n.length&&(n[0]=""),n[n.length-1]+=o),n=function(e){for(let t=1;te)),n},splitWhitespace:(e,t)=>{const{str:n,pre:a,post:r}=function(e,t){const{prePunctuation:n,postPunctuation:a,emoticons:r}=t.one;let o=e,i="",s="";const l=Array.from(e);if(r.hasOwnProperty(e.trim()))return{str:e.trim(),pre:i,post:" "};let u=l.length;for(let e=0;e(s=e||"",""))),e=o,i=""),{str:e,pre:i,post:s}}(e,t);return{text:n,pre:a,post:r,tags:new Set}},fromString:function(e,t){const{methods:n,model:a}=t,{splitSentences:r,splitTerms:o,splitWhitespace:i}=n.one.tokenize;return e=r(e=e||"",t).map((e=>{let n=o(e,a);return n=n.map((e=>i(e,a))),n.forEach((e=>{Sa(e,t)})),n})),e}}}};const Ua={},qa={};[[["approx","apt","bc","cyn","eg","esp","est","etc","ex","exp","prob","pron","gal","min","pseud","fig","jd","lat","lng","vol","fm","def","misc","plz","ea","ps","sec","pt","pref","pl","pp","qt","fr","sq","nee","ss","tel","temp","vet","ver","fem","masc","eng","adj","vb","rb","inf","situ","vivo","vitro","wr"]],[["dl","ml","gal","qt","pt","tbl","tsp","tbsp","km","dm","cm","mm","mi","td","hr","hrs","kg","hg","dg","cg","mg","µg","lb","oz","sq ft","hz","mps","mph","kmph","kb","mb","tb","lx","lm","fl oz","yb"],"Unit"],[["ad","al","arc","ba","bl","ca","cca","col","corp","ft","fy","ie","lit","ma","md","pd","tce"],"Noun"],[["adj","adm","adv","asst","atty","bldg","brig","capt","cmdr","comdr","cpl","det","dr","esq","gen","gov","hon","jr","llb","lt","maj","messrs","mlle","mme","mr","mrs","ms","mstr","phd","prof","pvt","rep","reps","res","rev","sen","sens","sfc","sgt","sir","sr","supt","surg"],"Honorific"],[["jan","feb","mar","apr","jun","jul","aug","sep","sept","oct","nov","dec"],"Month"],[["dept","univ","assn","bros","inc","ltd","co"],"Organization"],[["rd","st","dist","mt","ave","blvd","cl","cres","hwy","ariz","cal","calif","colo","conn","fla","fl","ga","ida","ia","kan","kans","minn","neb","nebr","okla","penna","penn","pa","dak","tenn","tex","ut","vt","va","wis","wisc","wy","wyo","usafa","alta","ont","que","sask"],"Place"]].forEach((e=>{e[0].forEach((t=>{Ua[t]=!0,qa[t]="Abbreviation",void 0!==e[1]&&(qa[t]=[qa[t],e[1]])}))}));var Ra=["anti","bi","co","contra","de","extra","infra","inter","intra","macro","micro","mis","mono","multi","peri","pre","pro","proto","pseudo","re","sub","supra","trans","tri","un","out","ex"].reduce(((e,t)=>(e[t]=!0,e)),{});const Qa={"!":"¡","?":"¿Ɂ",'"':'“”"❝❞',"'":"‘‛❛❜’","-":"—–",a:"ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАаѦѧӐӑӒӓƛæ",b:"ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ",c:"¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼϲϹϽϾСсєҀҁҪҫ",d:"ÐĎďĐđƉƊȡƋƌ",e:"ÈÉÊËèéêëĒēĔĕĖėĘęĚěƐȄȅȆȇȨȩɆɇΈΕΞΣέεξϵЀЁЕеѐёҼҽҾҿӖӗễ",f:"ƑƒϜϝӺӻҒғſ",g:"ĜĝĞğĠġĢģƓǤǥǦǧǴǵ",h:"ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ",I:"ÌÍÎÏ",i:"ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇіїi̇",j:"ĴĵǰȷɈɉϳЈј",k:"ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ",l:"ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ",m:"ΜϺϻМмӍӎ",n:"ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ",o:"ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϴОФоѲѳӦӧӨөӪӫ",p:"ƤΡρϷϸϼРрҎҏÞ",q:"Ɋɋ",r:"ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ",s:"ŚśŜŝŞşŠšƧƨȘșȿЅѕ",t:"ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт",u:"ÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰυϋύ",v:"νѴѵѶѷ",w:"ŴŵƜωώϖϢϣШЩшщѡѿ",x:"×ΧχϗϰХхҲҳӼӽӾӿ",y:"ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ",z:"ŹźŻżŽžƵƶȤȥɀΖ"},Za={};Object.keys(Qa).forEach((function(e){Qa[e].split("").forEach((function(t){Za[t]=e}))}));const Xa=/\//,_a=/[a-z]\.[a-z]/i,Ya=/[0-9]/,er=function(e,t){const n=e.normal||e.text||e.machine,a=t.model.one.aliases;if(a.hasOwnProperty(n)&&(e.alias=e.alias||[],e.alias.push(a[n])),Xa.test(n)&&!_a.test(n)&&!Ya.test(n)){const t=n.split(Xa);t.length<=3&&t.forEach((t=>{""!==(t=t.trim())&&(e.alias=e.alias||[],e.alias.push(t))}))}return e},tr=/^\p{Letter}+-\p{Letter}+$/u,nr=function(e){let t=e.implicit||e.normal||e.text;t=t.replace(/['’]s$/,""),t=t.replace(/s['’]$/,"s"),t=t.replace(/([aeiou][ktrp])in'$/,"$1ing"),tr.test(t)&&(t=t.replace(/-/g,"")),t=t.replace(/^[#@]/,""),t!==e.normal&&(e.machine=t)},ar=function(e,t){const n=e.docs;for(let a=0;aar(e,er),machine:e=>ar(e,nr),normal:e=>ar(e,Sa),freq:function(e){const t=e.docs,n={};for(let e=0;e{let i=(e=e.toLowerCase().trim()).length;t.max&&i>t.max&&(i=t.max);for(let s=t.min;s{delete a[e]})),a}(e,t,this.world());return Object.keys(r).forEach((e=>{n.one.typeahead.hasOwnProperty(e)?delete n.one.typeahead[e]:n.one.typeahead[e]=r[e]})),this}};var cr={model:{one:{typeahead:{}}},api:function(e){e.prototype.autoFill=sr},lib:ur,compute:ir,hooks:["typeahead"]};d.extend(J),d.extend(vn),d.extend(Jt),d.extend(Hn),d.extend(la),d.plugin(ve),d.extend(or),d.extend(Ce),d.plugin(p),d.extend(Be),d.extend(cr),d.extend(xe),d.extend(En);var dr={addendum:"addenda",corpus:"corpora",criterion:"criteria",curriculum:"curricula",genus:"genera",memorandum:"memoranda",opus:"opera",ovum:"ova",phenomenon:"phenomena",referendum:"referenda",alga:"algae",alumna:"alumnae",antenna:"antennae",formula:"formulae",larva:"larvae",nebula:"nebulae",vertebra:"vertebrae",analysis:"analyses",axis:"axes",diagnosis:"diagnoses",parenthesis:"parentheses",prognosis:"prognoses",synopsis:"synopses",thesis:"theses",neurosis:"neuroses",appendix:"appendices",index:"indices",matrix:"matrices",ox:"oxen",sex:"sexes",alumnus:"alumni",bacillus:"bacilli",cactus:"cacti",fungus:"fungi",hippopotamus:"hippopotami",libretto:"libretti",modulus:"moduli",nucleus:"nuclei",octopus:"octopi",radius:"radii",stimulus:"stimuli",syllabus:"syllabi",cookie:"cookies",calorie:"calories",auntie:"aunties",movie:"movies",pie:"pies",rookie:"rookies",tie:"ties",zombie:"zombies",leaf:"leaves",loaf:"loaves",thief:"thieves",foot:"feet",goose:"geese",tooth:"teeth",beau:"beaux",chateau:"chateaux",tableau:"tableaux",bus:"buses",gas:"gases",circus:"circuses",crisis:"crises",virus:"viruses",database:"databases",excuse:"excuses",abuse:"abuses",avocado:"avocados",barracks:"barracks",child:"children",clothes:"clothes",echo:"echoes",embargo:"embargoes",epoch:"epochs",deer:"deer",halo:"halos",man:"men",woman:"women",mosquito:"mosquitoes",mouse:"mice",person:"people",quiz:"quizzes",rodeo:"rodeos",shoe:"shoes",sombrero:"sombreros",stomach:"stomachs",tornado:"tornados",tuxedo:"tuxedos",volcano:"volcanoes"},hr={Comparative:"true¦bett1f0;arth0ew0in0;er",Superlative:"true¦earlier",PresentTense:"true¦bests,sounds",Condition:"true¦lest,unless",PastTense:"true¦began,came,d4had,kneel3l2m0sa4we1;ea0sg2;nt;eap0i0;ed;id",Participle:"true¦0:09;a06b01cZdXeat0fSgQhPoJprov0rHs7t6u4w1;ak0ithdra02o2r1;i02uY;k0v0;nd1pr04;ergoJoJ;ak0hHo3;e9h7lain,o6p5t4un3w1;o1um;rn;g,k;ol0reS;iQok0;ught,wn;ak0o1runk;ne,wn;en,wn;ewriNi1uJ;dd0s0;ut3ver1;do4se0t1;ak0h2;do2g1;roG;ne;ast0i7;iv0o1;ne,tt0;all0loBor1;bi3g2s1;ak0e0;iv0o9;dd0;ove,r1;a5eamt,iv0;hos0lu1;ng;e4i3lo2ui1;lt;wn;tt0;at0en,gun;r2w1;ak0ok0;is0;en",Gerund:"true¦accord0be0doin,go0result0stain0;ing",Expression:"true¦a0Yb0Uc0Sd0Oe0Mfarew0Lg0FhZjeez,lWmVnToOpLsJtIuFvEw7y0;a5e3i1u0;ck,p;k04p0;ee,pee;a0p,s;!h;!a,h,y;a5h2o1t0;af,f;rd up,w;atsoever,e1o0;a,ops;e,w;hoo,t;ery w06oi0L;gh,h0;! 0h,m;huh,oh;here nPsk,ut tut;h0ic;eesh,hh,it,oo;ff,h1l0ow,sst;ease,s,z;ew,ooey;h1i,mg,o0uch,w,y;h,o,ps;! 0h;hTmy go0wT;d,sh;a7evertheless,o0;!pe;eh,mm;ah,eh,m1ol0;!s;ao,fao;aCeBi9o2u0;h,mph,rra0zzC;h,y;l1o0;r6y9;la,y0;! 0;c1moCsmok0;es;ow;!p hip hoor0;ay;ck,e,llo,y;ha1i,lleluj0;ah;!ha;ah,ee4o1r0;eat scott,r;l1od0sh; grief,bye;ly;! whiz;ell;e0h,t cetera,ureka,ww,xcuse me;k,p;'oh,a0rat,uh;m0ng;mit,n0;!it;mon,o0;ngratulations,wabunga;a2oo1r0tw,ye;avo,r;!ya;h,m; 1h0ka,las,men,rgh,ye;!a,em,h,oy;la",Negative:"true¦n0;ever,o0;n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Reflexive:"true¦h4it5my5o1the0your2;ir1m1;ne3ur0;sel0;f,ves;er0im0;self",Plural:"true¦dick0gre0ones,records;ens","Unit|Noun":"true¦cEfDgChBinchAk9lb,m6newt5oz,p4qt,t1y0;ardEd;able1b0ea1sp;!l,sp;spo1;a,t,x;on9;!b,g,i1l,m,p0;h,s;!les;!b,elvin,g,m;!es;g,z;al,b;eet,oot,t;m,up0;!s",Value:"true¦a few",Imperative:"true¦bewa0come he0;re","Plural|Verb":"true¦leaves",Demonym:"true¦0:15;1:12;a0Vb0Oc0Dd0Ce08f07g04h02iYjVkTlPmLnIomHpEqatari,rCs7t5u4v3welAz2;am0Gimbabwe0;enezuel0ietnam0I;gAkrai1;aiwTex0hai,rinida0Ju2;ni0Prkmen;a5cotti4e3ingapoOlovak,oma0Spaniard,udRw2y0W;ede,iss;negal0Cr09;sh;mo0uT;o5us0Jw2;and0;a2eru0Fhilippi0Nortugu07uerto r0S;kist3lesti1na2raguay0;ma1;ani;ami00i2orweP;caragu0geri2;an,en;a3ex0Lo2;ngo0Drocc0;cedo1la2;gasy,y07;a4eb9i2;b2thua1;e0Cy0;o,t01;azakh,eny0o2uwaiI;re0;a2orda1;ma0Ap2;anO;celandic,nd4r2sraeli,ta01vo05;a2iB;ni0qi;i0oneU;aiAin2ondur0unO;di;amEe2hanai0reek,uatemal0;or2rm0;gi0;ilipino,ren8;cuadoVgyp4mira3ngli2sto1thiopi0urope0;shm0;ti;ti0;aPominUut3;a9h6o4roat3ub0ze2;ch;!i0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el6o4r3ul2;gaE;azi9it;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;genti2me1;ne;ba1ge2;ri0;ni0;gh0r2;ic0;an",Organization:"true¦0:4Q;a3Tb3Bc2Od2He2Df27g1Zh1Ti1Pj1Nk1Ll1Gm12n0Po0Mp0Cqu0Br02sTtHuCv9w3xiaomi,y1;amaha,m1Bou1w1B;gov,tu3C;a4e2iki1orld trade organizati33;leaRped0O;lls fargo,st1;fie2Hinghou2R;l1rner br3U;gree3Jl street journ2Im1E;an halOeriz2Xisa,o1;dafo2Yl1;kswagMvo;b4kip,n2ps,s1;a tod3Aps;es3Mi1;lev3Fted natio3C;er,s; mobi32aco beRd bOe9gi frida3Lh3im horto3Amz,o1witt3D;shi49y1;ota,s r 05;e 1in lizzy;b3carpen3Jdaily ma3Dguess w2holli0s1w2;mashing pumpki35uprem0;ho;ea1lack eyed pe3Xyr0Q;ch bo3Dtl0;l2n3Qs1xas instrumen1U;co,la m1F;efoni0Kus;a8cientology,e5ieme2Ymirnoff,np,o3pice gir6quare0Ata1ubaru;rbuc1to34;ks;ny,undgard1;en;a2x pisto1;ls;g1Wrs;few2Minsbur31lesfor03msu2E;adiohead,b8e4o1yana3C;man empi1Xyal 1;b1dutch she4;ank;a3d 1max,vl20;bu1c2Ahot chili peppe2Ylobst2N;ll;ders dige1Ll madrid;c,s;ant3Aizn2Q;a8bs,e5fiz2Ihilip4i3r1;emier 1udenti1D;leagTo2K;nk floyd,zza hut; morrBs;psi2tro1uge0E;br33chi0Tn33;!co;lant2Un1yp16; 2ason27da2P;ld navy,pec,range juli2xf1;am;us;aAb9e6fl,h5i4o1sa,vid3wa;k2tre dame,vart1;is;ia;ke,ntendo,ss0QvZ;l,s;c,st1Otflix,w1; 1sweek;kids on the block,york0D;a,c;nd22s2t1;ional aca2Po,we0U;a,c02d0S;aDcdonalCe9i6lb,o3tv,y1;spa1;ce;b1Tnsanto,ody blu0t1;ley cr1or0T;ue;c2t1;as,subisO;helin,rosoft;dica2rcedes benz,talli1;ca;id,re;ds;cs milk,tt19z24;a3e1g,ittle caesa1P; ore09novo,x1;is,mark,us; 1bour party;pres0Dz boy;atv,fc,kk,lm,m1od1O;art;iffy lu0Roy divisi0Jpmorgan1sa;! cha09;bm,hop,k3n1tv;g,te1;l,rpol;ea;a5ewlett pack1Vi3o1sbc,yundai;me dep1n1P;ot;tac1zbollah;hi;lliburt08sbro;eneral 6hq,ithub,l5mb,o2reen d0Ou1;cci,ns n ros0;ldman sachs,o1;dye1g0H;ar;axo smith kli04encoW;electr0Nm1;oto0Z;a5bi,c barcelo4da,edex,i2leetwood m03o1rito l0G;rd,xcY;at,fa,nancial1restoZ; tim0;na;cebook,nnie mae;b0Asa,u3xxon1; m1m1;ob0J;!rosceptics;aiml0De5isney,o4u1;nkin donu2po0Zran dur1;an;ts;j,w jon0;a,f lepp12ll,peche mode,r spieg02stiny's chi1;ld;aJbc,hFiDloudflaCnn,o3r1;aigsli5eedence clearwater reviv1ossra09;al;c7inba6l4m1o0Est09;ca2p1;aq;st;dplSg1;ate;se;a c1o chanQ;ola;re;a,sco1tigroup;! systems;ev2i1;ck fil a,na daily;r1y;on;d2pital o1rls jr;ne;bury,ill1;ac;aEbc,eBf9l5mw,ni,o1p,rexiteeU;ei3mbardiIston 1;glo1pizza;be;ng;o2ue c1;roV;ckbuster video,omingda1;le; g1g1;oodriL;cht2e ge0rkshire hathaw1;ay;el;cardi,idu,nana republ3s1xt5y5;f,kin robbi1;ns;ic;bYcTdidSerosmith,iRlKmEnheuser busDol,ppleAr6s4u3v2y1;er;is,on;di,todesk;hland o1sociated E;il;b3g2m1;co;os;ys; compu1be0;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 5catel2ta1;ir;! lu1;ce1;nt;jazeera,qae1;da;g,rbnb;as;/dc,a3er,tivision1;! blizz1;ard;demy of scienc0;es;ba",Possessive:"true¦its,my,our0thy;!s","Noun|Verb":"true¦0:9W;1:AA;2:96;3:A3;4:9R;5:A2;6:9K;7:8N;8:7L;9:A8;A:93;B:8D;C:8X;a9Ob8Qc7Id6Re6Gf5Sg5Hh55i4Xj4Uk4Rl4Em40n3Vo3Sp2Squ2Rr21s0Jt02u00vVwGyFzD;ip,oD;ne,om;awn,e6Fie68;aOeMhJiHoErD;ap,e9Oink2;nd0rDuC;kDry,sh5Hth;!shop;ck,nDpe,re,sh;!d,g;e86iD;p,sD;k,p0t2;aDed,lco8W;r,th0;it,lk,rEsDt4ve,x;h,te;!ehou1ra9;aGen5FiFoD;iDmAte,w;ce,d;be,ew,sA;cuum,l4B;pDr7;da5gra6Elo6A;aReQhrPiOoMrGuEwiDy5Z;n,st;nDrn;e,n7O;aGeFiEoDu6;t,ub2;bu5ck4Jgg0m,p;at,k,nd;ck,de,in,nsDp,v7J;f0i8R;ll,ne,p,r4Yss,t94uD;ch,r;ck,de,e,le,me,p,re;e5Wow,u6;ar,e,ll,mp0st,xt;g,lDng2rg7Ps5x;k,ly;a0Sc0Ne0Kh0Fi0Dk0Cl0Am08n06o05pXquaBtKuFwD;ea88iD;ng,pe,t4;bGit,m,ppErD;fa3ge,pri1v2U;lDo6S;e6Py;!je8;aMeLiKoHrEuDy2;dy,ff,mb2;a85eEiDo5Pugg2;ke,ng;am,ss,t4;ckEop,p,rD;e,m;ing,pi2;ck,nk,t4;er,m,p;ck,ff,ge,in,ke,lEmp,nd,p2rDte,y;!e,t;k,l;aJeIiHlGoFrDur,y;ay,e56inDu3;g,k2;ns8Bt;a5Qit;ll,n,r87te;ed,ll;m,n,rk;b,uC;aDee1Tow;ke,p;a5Je4FiDo53;le,rk;eep,iDou4;ce,p,t;ateboa7Ii;de,gnDl2Vnk,p,ze;!al;aGeFiEoDuff2;ck,p,re,w;ft,p,v0;d,i3Ylt0;ck,de,pe,re,ve;aEed,nDrv1It;se,t2N;l,r4t;aGhedu2oBrD;aEeDibb2o3Z;en,w;pe,t4;le,n,r2M;cDfegua72il,mp2;k,rifi3;aZeHhy6LiGoEuD;b,in,le,n,s5X;a6ck,ll,oDpe,u5;f,t;de,ng,ot,p,s1W;aTcSdo,el,fQgPje8lOmMnLo17pJque6sFturn,vDwa6V;eDi27;al,r1;er74oFpe8tEuD;lt,me;!a55;l71rt;air,eaDly,o53;l,t;dezvo2Zt;aDedy;ke,rk;ea1i4G;a6Iist0r5N;act6Yer1Vo71uD;nd,se;a38o6F;ch,s6G;c1Dge,iEke,lly,nDp1Wt1W;ge,k,t;n,se;es6Biv0;a04e00hYiXlToNrEsy4uD;mp,n4rcha1sh;aKeIiHoDu4O;be,ceFdu3fi2grDje8mi1p,te6;amDe6W;!me;ed,ss;ce,de,nt;sDy;er6Cs;cti3i1;iHlFoEp,re,sDuCw0;e,i5Yt;l,p;iDl;ce,sh;nt,s5V;aEce,e32uD;g,mp,n7;ce,nDy;!t;ck,le,n17pe,tNvot;a1oD;ne,tograph;ak,eFnErDt;fu55mA;!c32;!l,r;ckJiInHrFsEtDu1y;ch,e9;s,te;k,tD;!y;!ic;nt,r,se;!a7;bje8ff0il,oErDutli3Qver4B;bAd0ie9;ze;a4ReFoDur1;d,tD;e,i3;ed,gle8tD;!work;aMeKiIoEuD;rd0;ck,d3Rld,nEp,uDve;nt,th;it5EkD;ey;lk,n4Brr5CsDx;s,ta2B;asuBn4UrDss;ge,it;il,nFp,rk3WsEtD;ch,t0;h,k,t0;da5n0oeuvB;aLeJiHoEuD;mp,st;aEbby,ck,g,oDve;k,t;d,n;cDe,ft,mAnIst;en1k;aDc0Pe4vK;ch,d,k,p,se;bFcEnd,p,t4uD;gh,n4;e,k;el,o2U;eEiDno4E;ck,d,ll,ss;el,y;aEo1OuD;i3mp;m,zz;mpJnEr46ssD;ue;c1Rdex,fluGha2k,se2HteDvoi3;nt,rD;e6fa3viD;ew;en3;a8le2A;aJeHiGoEuD;g,nt;l3Ano2Dok,pDr1u1;!e;ghli1Fke,nt,re,t;aDd7lp;d,t;ck,mGndFrEsh,tDu9;ch,e;bo3Xm,ne4Eve6;!le;!m0;aMear,ift,lKossJrFuD;arDe4Alp,n;antee,d;aFiEoDumb2;uCwth;ll,nd,p;de,sp;ip;aBoDue;ss,w;g,in,me,ng,s,te,ze;aZeWiRlNoJrFuD;ck,el,nDss,zz;c38d;aEoDy;st,wn;cDgme,me,nchi1;tuB;cFg,il,ld,rD;ce,e29mDwa31;!at;us;aFe0Vip,oDy;at,ck,od,wD;!er;g,ke,me,re,sh,vo1E;eGgFlEnDre,sh,t,x;an3i0Q;e,m,t0;ht,uB;ld;aEeDn3;d,l;r,tuB;ce,il,ll,rm,vo2W;cho,d7ffe8nMsKxFyeD;!baD;ll;cGerci1hFpDtra8;eriDo0W;en3me9;au6ibA;el,han7u1;caDtima5;pe;count0d,vy;a01eSiMoJrEuDye;b,el,mp,pli2X;aGeFiEoD;ne,p;ft,ll,nk,p,ve;am,ss;ft,g,in;cEd7ubt,wnloD;ad;k,u0E;ge6p,sFt4vD;e,iDor3;de;char7gui1h,liEpD;at4lay,u5;ke;al,bKcJfeIlGmaCposAsEtaD;il;e07iD;gn,re;ay,ega5iD;ght;at,ct;li04rea1;a5ut;b,ma7n3rDte;e,t;a0Eent0Dh06irc2l03oKrFuD;be,e,rDt;b,e,l,ve;aGeFoEuDy;sh;p,ss,wd;dAep;ck,ft,sh;at,de,in,lTmMnFordina5py,re,st,uDv0;gh,nDp2rt;s01t;ceHdu8fli8glomeIsFtDveN;a8rD;a6ol;e9tru8;ct;ntDrn;ra5;bHfoGmFpD;leDouCromi1;me9;aCe9it,u5;rt;at,iD;ne;lap1oD;r,ur;aEiDoud,ub;ck,p;im,w;aEeDip;at,ck,er;iGllen7nErD;ge,m,t;ge,nD;el;n,r;er,re;ke,ll,mp,noe,pGrXsFtEuDve;se,ti0I;alog,ch;h,t;!tuB;re;a03eZiXlToPrHuEyD;pa11;bb2ck2dgEff0mp,rDst,zz;den,n;et;anJeHiFoadEuD;i1sh;ca6;be,d7;ge;aDed;ch,k;ch,d;aFg,mb,nEoDrd0tt2x,ycott;k,st,t;d,e;rd,st;aFeCiDoYur;nk,tz;nd;me;as,d,ke,nd,opsy,tD;!ch,e;aFef,lt,nDt;d,efA;it;r,t;ck,il,lan3nIrFsEtt2;le;e,h;!gDk;aDe;in;!d,g,k;bu1c05dZge,iYlVnTppQrLsIttGucEwaD;rd;tiD;on;aDempt;ck;k,sD;i6ocia5;st;chFmD;!oD;ur;!iD;ve;eEroa4;ch;al;chDg0sw0;or;aEt0;er;rm;d,m,r;dreHvD;an3oD;ca5;te;ce;ss;cDe,he,t;eFoD;rd,u9;nt;nt,ss;se",Actor:"true¦0:7B;1:7G;2:6A;3:7F;4:7O;5:7K;a6Nb62c4Ud4Be41f3Sg3Bh30i2Uj2Qkin2Pl2Km26n1Zo1Sp0Vqu0Tr0JsQtJuHvEw8yo6;gi,ut6;h,ub0;aAe9i8o7r6;estl0it0;m2rk0;fe,nn0t2Bza2H;atherm2ld0;ge earn0it0nder0rri1;eter7i6oyF;ll5Qp,s3Z;an,ina2U;n6s0;c6Uder03;aoisea23e9herapi5iktok0o8r6ut1yco6S;a6endseLo43;d0mp,nscri0Bvel0;ddl0u1G;a0Qchn7en6na4st0;ag0;i3Oo0D;aiXcUeRhPiMki0mu26oJpGquaFtBu7wee6;p0theart;lt2per7r6;f0ge6Iviv1;h6inten0Ist5Ivis1;ero,um2;a8ep7r6;ang0eam0;bro2Nc2Ofa2Nmo2Nsi20;ff0tesm2;tt0;ec7ir2Do6;kesp59u0M;ia5Jt3;l7me6An,rcere6ul;r,ss;di0oi5;n7s6;sy,t0;g0n0;am2ephe1Iow6;girl,m2r2Q;cretInior cit3Fr6;gea4v6;a4it1;hol4Xi7reen6ulpt1;wr2C;e01on;l1nt;aEe9o8u6;l0nn6;er up,ingE;g40le mod3Zof0;a4Zc8fug2Ppo32searQv6;ere4Uolution6;ary;e6luYru22;ptio3T;bbi,dic5Vpp0;arter6e2Z;back;aYeWhSiRlOoKr8sycho7u6;nk,p31;logi5;aGeDiBo6;d9fess1g7ph47s6;pe2Ktitu51;en6ramm0;it1y;igy,uc0;est4Nme mini0Unce6s3E;!ss;a7si6;de4;ch0;ctiti39nk0P;dca0Oet,li6pula50rnst42;c2Itic6;al scie6i2;nti5;a6umb0;nn0y6;er,ma4Lwright;lgrim,one0;a8iloso7otogra7ra6ysi1V;se;ph0;ntom,rmaci5;r6ssi1T;form0s4O;i3El,nel3Yr8st1tr6wn;i6on;arWot;ent4Wi42tn0;ccupa4ffBp8r7ut6;ca5l0B;ac4Iganiz0ig2Fph2;er3t6;i1Jomet6;ri5;ic0spring;aBe9ie4Xo7u6;n,rser3J;b6mad,vi4V;le2Vo4D;i6mesis,phew;ce,ghb1;nny,rr3t1X;aEeDiAo7u6yst1Y;m8si16;der3gul,m7n6th0;arDk;!my;ni7s6;f02s0Jt0;on,st0;chan1Qnt1rcha4;gi9k0n8rtyr,t6y1;e,riar6;ch;ag0iac;ci2stra3I;a7e2Aieutena4o6;rd,s0v0;bor0d7ndlo6ss,urea3Fwy0ym2;rd;!y;!s28;e8o7u6;ggl0;gg0urna2U;st0;c3Hdol,llu3Ummigra4n6; l9c1Qfa4habi42nov3s7ve6;nt1stig3;pe0Nt6;a1Fig3ru0M;aw;airFeBistoAo8u6ygie1K;man6sba2H;!ita8;bo,st6usekN;age,e3P;ri2;ir,r6;m7o6;!ine;it;dress0sty2C;aLeIhostGirl26ladi3oCrand7u6;e5ru;c9daug0Jfa8m7pa6s2Y;!re4;a,o6;th0;hi1B;al7d6lf0;!de3A;ie,k6te26;eep0;!wr6;it0;isha,n6;i6tl04;us;mbl0rden0;aDella,iAo7r6;eela2Nie1P;e,re6ster pare4;be1Hm2r6st0;unn0;an2ZgZlmm17nanci0r6tt0;e6st la2H; marsh2OfigXm2;rm0th0;conoEdDlectriCm8n7x6;amin0cellency,i2A;emy,trepreneur,vironmenta1J;c8p6;er1loye6;e,r;ee;ci2;it1;mi5;aKeBi8ork,ri7u6we02;de,tche2H;ft0v0;ct3eti7plom2Hre6va;ct1;ci2ti2;aDcor3fencCi0InAput9s7tectLvel6;op0;ce1Ge6ign0;rt0;ee,y;iz6;en;em2;c1Ml0;d8nc0redev7ug6;ht0;il;!dy;a06e04fo,hXitizenWlToBr9u6;r3stomer6;! representat6;ive;e3it6;ic;lJmGnAord9rpor1Nu7w6;boy,ork0;n6ri0;ciTte1Q;in3;fidantAgressSs9t6;e0Kr6;ibut1o6;ll0;tab13ul1O;!e;edi2m6pos0rade;a0EeQissi6;on0;leag8on7um6;ni5;el;ue;e6own;an0r6;ic,k;!s;a9e7i6um;ld;erle6f;ad0;ir7nce6plFract0;ll1;m2wI;lebri6o;ty;dBptAr6shi0;e7pe6;nt0;r,t6;ak0;ain;et;aMeLiJlogg0oErBu6;dd0Fild0rgl9siness6;m2p7w6;om2;ers05;ar;i7o6;!k0th0;cklay0de,gadi0;hemi2oge8y6;!frie6;nd;ym2;an;cyc6sR;li5;atbox0ings;by,nk0r6;b0on7te6;nd0;!e07;c04dWge4nQpLrHsFtAu7yatull6;ah;nt7t6;h1oG;!ie;h8t6;e6orney;nda4;ie5le6;te;sis00tron6;aut,om0;chbis8isto7tis6;an,t;crU;hop;ost9p6;ari6rentiS;ti6;on;le;a9cest1im3nou8y6;bo6;dy;nc0;ly5rc6;hi5;mi8v6;entur0is1;er;ni7r6;al;str3;at1;or;counBquaintanArob9t6;ivi5or,re6;ss;st;at;ce;ta4;nt","Adj|Noun":"true¦0:16;a1Db17c0Ud0Re0Mf0Dg0Ah08i06ju05l02mWnUoSpNrIsBt7u4v1watershed;a1ision0Z;gabo4nilla,ria1;b0Vnt;ndergr1pstairs;adua14ou1;nd;a3e1oken,ri0;en,r1;min0rori13;boo,n;age,e5ilv0Flack,o3quat,ta2u1well;bordina0Xper5;b0Lndard;ciali0Yl1vereign;e,ve16;cret,n1ri0;ior;a4e2ou1ubbiL;nd,tiY;ar,bBl0Wnt0p1side11;resent0Vublican;ci0Qsh;a4eriodic0last0Zotenti0r1;emi2incip0o1;!fession0;er,um;rall4st,tie0U;ff1pposi0Hv0;ens0Oi0C;agg01ov1uts;el;a5e3iniatJo1;bi01der07r1;al,t0;di1tr0N;an,um;le,riG;attOi2u1;sh;ber0ght,qC;stice,veniT;de0mpressioYn1;cumbe0Edividu0no0Dsta0Eterim;alf,o1umdrum;bby,melF;en2old,ra1;ph0Bve;er0ious;a7e5i4l3u1;git03t1;ure;uid;ne;llow,m1;aFiL;ir,t,vo1;riOuriO;l3p00x1;c1ecutUpeV;ess;d1iK;er;ar2e1;mographUrivO;k,l2;hiGlassSo2rude,unn1;ing;m5n1operK;creCstitueOte2vertab1;le;mpor1nt;ary;ic,m2p1;anion,lex;er2u1;ni8;ci0;al;e5lank,o4r1;i2u1;te;ef;ttom,urgeois;st;cadem9d6l2ntarct9r1;ab,ct8;e3tern1;at1;ive;rt;oles1ult;ce1;nt;ic","Adj|Past":"true¦0:4Q;1:4C;2:4H;3:4E;a44b3Tc36d2Je29f20g1Wh1Si1Jj1Gkno1Fl1Am15n12o0Xp0Mqu0Kr08sLtEuAv9w4yellow0;a7ea6o4rinkl0;r4u3Y;n,ri0;k31th3;rp0sh0tZ;ari0e1O;n5p4s0;d1li1Rset;cov3derstood,i4;fi0t0;a8e3Rhr7i6ouTr4urn0wi4C;a4imm0ou2G;ck0in0pp0;ed,r0;eat2Qi37;m0nn0r4;get0ni2T;aOcKeIhGimFm0Hoak0pDt7u4;bsid3Ogge44s4;pe4ta2Y;ct0nd0;a8e7i2Eok0r5u4;ff0mp0nn0;ength2Hip4;ed,p0;am0reotyp0;in0t0;eci4ik0oH;al3Efi0;pRul1;a4ock0ut;d0r0;a4c1Jle2t31;l0s3Ut0;a6or5r4;at4e25;ch0;r0tt3;t4ut0;is2Mur1;aEe5o4;tt0;cAdJf2Bg9je2l8m0Knew0p7qu6s4;eTpe2t4;or0ri2;e3Dir0;e1lac0;at0e2Q;i0Rul1;eiv0o4ycl0;mme2Lrd0v3;in0lli0ti2A;a4ot0;li28;aCer30iBlAo9r5u4;mp0zzl0;e6i2Oo4;ce2Fd4lo1Anou30pos0te2v0;uc0;fe1CocCp0Iss0;i2Kli1L;ann0e2CuS;ck0erc0ss0;ck0i2Hr4st0;allLk0;bse7c6pp13rgan2Dver4;lo4whelm0;ok0;cupi0;rv0;aJe5o4;t0uri1A;ed0gle2;a6e5ix0o4ut0ys1N;di1Nt15u26;as0Clt0;n4rk0;ag0ufact0A;e6i5o4;ad0ck0st,v0;cens0m04st0;ft,v4;el0;tt0wn;a5o15u4;dg0s1B;gg0;llumSmpAn4sol1;br0cre1Ldebt0f8jZspir0t5v4;it0olv0;e4ox0Y;gr1n4re23;d0si15;e2l1o1Wuri1;li0o01r4;ov0;a6e1o4um03;ok0r4;ri0Z;mm3rm0;i6r5u4;a1Bid0;a0Ui0Rown;ft0;aAe9i8l6oc0Ir4;a4i0oz0Y;ctHg19m0;avo0Ju4;st3;ni08tt0x0;ar0;d0il0sc4;in1;dCl1mBn9quipp0s8x4;agger1c6p4te0T;a0Se4os0;ct0rie1D;it0;cap0tabliZ;cha0XgFha1As4;ur0;a0Zbarra0N;i0Buc1;aMeDi5r4;a01i0;gni08miniSre2s4;a9c6grun0Ft4;o4re0Hu17;rt0;iplWou4;nt0r4;ag0;bl0;cBdRf9l8p7ra6t5v4;elop0ot0;ail0ermQ;ng0;re07;ay0ight0;e4in0o0M;rr0;ay0enTor1;m5t0z4;ed,zl0;ag0p4;en0;aPeLhIlHo9r6u4;lt4r0stom03;iv1;a5owd0u4;sh0;ck0mp0;d0loAm7n4ok0v3;centr1f5s4troC;id3olid1;us0;b5pl4;ic1;in0;r0ur0;assi9os0utt3;ar5i4;ll0;g0m0;lebr1n6r4;ti4;fi0;tralJ;g0lcul1;aDewild3iCl9o7r5urn4;ed,t;ok4uis0;en;il0r0t4und;tl0;e5i4;nd0;ss0;as0;ffl0k0laMs0tt3;bPcNdKfIg0lFmaz0nDppBrm0ss9u5wa4;rd0;g5thor4;iz0;me4;nt0;o6u4;m0r0;li0re4;ci1;im1ticip1;at0;a5leg0t3;er0;rm0;fe2;ct0;ju5o7va4;nc0;st0;ce4knowledg0;pt0;and5so4;rb0;on0;ed",Singular:"true¦0:5J;1:5H;2:4W;3:4S;4:52;5:57;6:5L;7:56;8:5B;a52b4Lc3Nd35e2Xf2Og2Jh28in24j23k22l1Um1Ln1Ho1Bp0Rqu0Qr0FsZtMuHvCw9x r58yo yo;a9ha3Po3Q;f3i4Rt0Gy9;! arou39;arCeAideo ga2Qo9;cabu4Jl5C;gOr9t;di4Zt1Y;iety,ni4P;nBp30rAs 9;do43s5E;bani1in0;coordinat3Ader9;estima1to24we41; rex,aKeJhHiFoErBuAv9;! show;m2On2rntLto1D;agedy,ib9o4E;e,u9;n0ta46;ni1p2rq3L;c,er,m9;etF;ing9ree26;!y;am,mp3F;ct2le6x return;aNcMeKhor4QiJkHoGpin off,tDuBy9;ll9ner7st4T;ab2X;b9i1n28per bowl,rro1X;st3Ltot0;atAipe2Go1Lrate7udent9;! lo0I;i39u1;ft ser4Lmeo1I;elet5i9;ll,r3V;b38gn2Tte;ab2Jc9min3B;t,urity gua2N;e6ho2Y;bbatic0la3Jndwi0Qpi5;av5eDhetor2iAo9;de6om,w;tAv9;erb2C;e,u0;bDcBf9publ2r10spi1;er9orm3;e6r0;i9ord label;p2Ht0;a1u46;estion mark,ot2F;aPeMhoLiIlGoErAu9yram1F;ddi3HpErpo1Js3J;eBo9;bl3Zs9;pe3Jta1;dic1Rmi1Fp1Qroga8ss relea1F;p9rt0;py;a9ebisci1;q2Dte;cn2eAg9;!gy;!r;ne call,tocoK;anut,dAr9t0yo1;cen3Jsp3K;al,est0;nop4rAt9;e,hog5;adi11i2V;atme0bj3FcBpia1rde0thers,utspok5ve9wn3;n,r9;ti0Pview;cuAe9;an;pi3;arBitAot9umb3;a2Fhi2R;e,ra1;cot2ra8;aFeCiAo9ur0;nopo4p18rni2Nsq1Rti36uld;c,li11n0As9tt5;chief,si34;dAnu,t9;al,i3;al,ic;gna1mm0nd15rsupi0te9yf4;ri0;aDegCiBu9;ddi1n9;ch;me,p09; Be0M;bor14y9; 9er;up;eyno1itt5;el4ourn0;cBdices,itia8ni25sAtel0Lvert9;eb1J;e28titu1;en8i2T;aIeEighDoAu9;man right,s22;me9rmoFsp1Ftb0K;! r9;un; scho0YriY;a9i1N;d9v5; start,pho9;ne;ndful,sh brown,v5ze;aBelat0Ilaci3r9ul4yp1S;an9enadi3id;a1Cd slam,ny;df4r9;l2ni1I;aGeti1HiFlu1oCrAun9;er0;ee market,i9onti3;ga1;l4ur9;so9;me;ePref4;br2mi4;conoFffi7gg,lecto0Rmbas1EnCpidem2s1Zth2venBxAyel9;id;ampZempl0Nte6;i19t;er7terp9;ri9;se;my;eLiEoBr9ump tru0U;agonf4i9;er,ve thru;cAg7i4or,ssi3wn9;side;to0EumenE;aEgniDnn3sAvide9;nd;conte6incen8p9tri11;osi9;ti0C;ta0H;le0X;athBcAf9ni0terre6;ault 05err0;al,im0;!b9;ed;aWeThMiLlJoDr9;edit caBuc9;ib9;le;rd;efficDke,lCmmuniqLnsApi3rr0t0Xus9yo1;in;erv9uI;ato02;ic,lQ;ie6;er7i9oth;e6n2;ty,vil wM;aDeqCick5ocoBr9;istmas car9ysanthemum;ol;la1;ue;ndeli3racteri9;st2;iAllEr9;e0tifica1;liZ;hi3nFpErCt9ucus;erpi9hedr0;ll9;ar;!bohyd9ri3;ra1;it0;aAe,nib0t9;on;l,ry;aMeLiop2leJoHrDu9;nny,r9tterf4;g9i0;la9;ry;eakAi9;ck;fa9throB;st;dy,ro9wl;ugh;mi9;sh;an,l4;nkiArri3;er;ng;cSdMlInFppeti1rDsBtt2utop9;sy;ic;ce6pe9;ct;r9sen0;ay;ecAoma4tiA;ly;do1;i5l9;er7y;gy;en; hominDjAvan9;tage;ec8;ti9;ve;em;cCeAqui9;tt0;ta1;te;iAru0;al;de6;nt","Person|Noun":"true¦a0Eb07c03dWeUfQgOhLjHkiGlFmCnBolive,p7r4s3trini06v1wa0;ng,rd,tts;an,enus,iol0;a,et;ky,onPumm09;ay,e1o0uby;bin,d,se;ed,x;a2e1o0;l,tt04;aLnJ;dYge,tR;at,orm;a0eloW;t0x,ya;!s;a9eo,iH;ng,tP;a2e1o0;lGy;an,w3;de,smi4y;a0erb,iOolBuntR;ll,z0;el;ail,e0iLuy;ne;a1ern,i0lo;elds,nn;ith,n0;ny;a0dEmir,ula,ve;rl;a4e3i1j,ol0;ly;ck,x0;ie;an,ja;i0wn;sy;am,h0liff,rystal;a0in,ristian;mbers,ri0;ty;a4e3i2o,r0ud;an0ook;dy;ll;nedict,rg;k0nks;er;l0rt;fredo,ma","Actor|Verb":"true¦aCb8c5doctor,engineAfool,g3host,judge,m2nerd,p1recruit,scout,ushAvolunteAwi0;mp,tneA;arent,ilot;an,ime;eek,oof,r0uide;adu8oom;ha1o0;ach,nscript,ok;mpion,uffeur;o2u0;lly,tch0;er;ss;ddi1ffili0rchite1;ate;ct",MaleName:"true¦0:H6;1:FZ;2:DS;3:GQ;4:CZ;5:FV;6:GM;7:FP;8:GW;9:ET;A:C2;B:GD;aF8bE1cCQdBMeASfA1g8Yh88i7Uj6Sk6Bl5Mm48n3So3Ip33qu31r26s1Et0Ru0Ov0CwTxSyHzC;aCor0;cChC1karia,nAT;!hDkC;!aF6;!ar7CeF5;aJevgenBSoEuC;en,rFVsCu3FvEF;if,uf;nDs6OusC;ouf,s6N;aCg;s,tC;an,h0;hli,nCrosE1ss09;is,nC;!iBU;avi2ho5;aPeNiDoCyaEL;jcieBJlfgang,odrFutR;lFnC;f8TsC;lCt1;ow;bGey,frEhe4QlC;aE5iCy;am,e,s;ed8iC;d,ed;eAur;i,ndeD2rn2sC;!l9t1;lDyC;l1ne;lDtC;!er;aCHy;aKernDAiFladDoC;jteB0lodymyr;!iC;mFQsDB;cFha0ktBZnceDrgCOvC;a0ek;!nC;t,zo;!e4StBV;lCnC7sily;!entC;in9J;ghE2lCm70nax,ri,sm0;riCyss87;ch,k;aWeRhNiLoGrEuDyC;!l2roEDs1;n6r6E;avD0eCist0oy,um0;ntCRvBKy;bFdAWmCny;!asDmCoharu;aFFie,y;!z;iA6y;mCt4;!my,othy;adEeoDia0SomC;!as;!dor91;!de4;dFrC;enBKrC;anBJeCy;ll,nBI;!dy;dgh,ha,iCnn2req,tsu5V;cDAka;aYcotWeThPiMlobod0oKpenc2tEurDvenAEyCzym1;ed,lvest2;aj,e9V;anFeDuC;!aA;fan17phEQvCwaA;e77ie;!islaCl9;v,w;lom1rBuC;leymaDHta;dDgmu9UlCm1yabonga;as,v8B;!dhart8Yn9;aEeClo75;lCrm0;d1t1;h9Jne,qu1Jun,wn,yne;aDbastiEDk2Yl5Mpp,rgCth,ymoCU;e1Dio;m4n;!tC;!ie,y;eDPlFmEnCq67tosCMul;dCj2UtiA5;e01ro;!iATkeB6mC4u5;!ik,vato9K;aZeUheC8iRoGuDyC;an,ou;b99dDf4peAssC;!elEG;ol00y;an,bLc7MdJel,geIh0lHmGnEry,sDyC;!ce;ar7Ocoe,s;!aCnBU;ld,n;an,eo;a7Ef;l7Jr;e3Eg2n9olfo,riC;go;bBNeDH;cCl9;ar87c86h54kCo;!ey,ie,y;cFeA3gDid,ubByCza;an8Ln06;g85iC;naC6s;ep;ch8Kfa5hHin2je8HlGmFndEoHpha5sDul,wi36yC;an,mo8O;h9Im4;alDSol3O;iD0on;f,ph;ul;e9CinC;cy,t1;aOeLhilJiFrCyoG;aDeC;m,st1;ka85v2O;eDoC;tr;r8GtC;er,ro;!ipCl6H;!p6U;dCLrcy,tC;ar,e9JrC;!o7;b9Udra8So9UscAHtri62ulCv8I;!ie,o7;ctav6Ji2lImHndrBRrGsDtCum6wB;is,to;aDc6k6m0vCwaBE;al79;ma;i,vR;ar,er;aDeksandr,ivC;er,i2;f,v;aNeLguyBiFoCu3O;aDel,j4l0ma0rC;beAm0;h,m;cFels,g5i9EkDlC;es,s;!au,h96l78olaC;!i,y;hCkCol76;ol75;al,d,il,ls1vC;ilAF;hom,tC;e,hC;anCy;!a5i5;aYeViLoGuDyC;l4Nr1;hamDr84staC;fa,p6E;ed,mG;di10e,hamEis4JntDritz,sCussa;es,he;e,y;ad,ed,mC;ad,ed;cGgu5hai,kFlEnDtchC;!e8O;a9Pik;house,o7t1;ae73eC3ha8Iolaj;ah,hDkC;!ey,y;aDeC;al,l;el,l;hDlv3rC;le,ri8Ev4T;di,met;ay0c00gn4hWjd,ks2NlTmadZnSrKsXtDuric7VxC;imilBKwe8B;eHhEi69tCus,y69;!eo,hCia7;ew,i67;eDiC;as,eu,s;us,w;j,o;cHiGkFlEqu8Qsha83tCv3;iCy;!m,n;in,on;el,o7us;a6Yo7us;!elCin,o7us;!l8o;frAEi5Zny,u5;achDcoCik;lm;ai,y;amDdi,e5VmC;oud;adCm6W;ou;aulCi9P;ay;aWeOiMloyd,oJuDyC;le,nd1;cFdEiDkCth2uk;a7e;gi,s,z;ov7Cv6Hw6H;!as,iC;a6Een;g0nn52renDuCvA4we7D;!iS;!zo;am,n4oC;n5r;a9Yevi,la5KnHoFst2thaEvC;eCi;nte;bo;nCpo8V;!a82el,id;!nC;aAy;mEnd1rDsz73urenCwr6K;ce,t;ry,s;ar,beAont;aOeIhalHiFla4onr63rDu5SylC;e,s;istCzysztof;i0oph2;er0ngsl9p,rC;ilA9k,ollos;ed,id;en0iGnDrmCv4Z;it;!dDnCt1;e2Ny;ri4Z;r,th;cp2j4mEna8BrDsp6them,uC;ri;im,l;al,il;a03eXiVoFuC;an,lCst3;en,iC;an,en,o,us;aQeOhKkub4AnIrGsDzC;ef;eDhCi9Wue;!ua;!f,ph;dCge;i,on;!aCny;h,s,th6J;anDnC;!ath6Hie,n72;!nC;!es;!l,sCy;ph;o,qu3;an,mC;!i,m6V;d,ffFns,rCs4;a7JemDmai7QoCry;me,ni1H;i9Dy;!e73rC;ey,y;cKdBkImHrEsDvi2yC;dBs1;on,p2;ed,oDrCv67;e6Qod;d,s61;al,es5Wis1;a,e,oCub;b,v;ob,qu13;aTbNchiMgLke53lija,nuKonut,rIsEtCv0;ai,suC;ki;aDha0i8XmaCsac;el,il;ac,iaC;h,s;a,vinCw3;!g;k,nngu6X;nac1Xor;ka;ai,rahC;im;aReLoIuCyd6;beAgGmFsC;eyDsC;a3e3;in,n;ber5W;h,o;m2raDsse3wC;a5Pie;c49t1K;a0Qct3XiGnDrC;beAman08;dr7VrC;iCy2N;!k,q1R;n0Tt3S;bKlJmza,nIo,rEsDyC;a5KdB;an,s0;lEo67r2IuCv9;hi5Hki,tC;a,o;an,ey;k,s;!im;ib;a08e00iUlenToQrMuCyorgy;iHnFsC;!taC;f,vC;!e,o;n6tC;er,h2;do,lC;herDlC;auCerQ;me;aEegCov2;!g,orC;!io,y;dy,h7C;dfr9nza3XrDttfC;ri6C;an,d47;!n;acoGlEno,oCuseppe;rgiCvan6O;!o,s;be6Ies,lC;es;mo;oFrC;aDha4HrCt;it,y;ld,rd8;ffErgC;!e7iCy;!os;!r9;bElBrCv3;eCla1Nr4Hth,y;th;e,rC;e3YielC;!i4;aXeSiQlOorrest,rCyod2E;aHedFiC;edDtC;s,z;ri18;!d42eri11riC;ck,k;nCs2;cEkC;ie,lC;in,yn;esLisC;!co,z3M;etch2oC;ri0yd;d5lConn;ip;deriFliEng,rC;dinaCg4nan0B;nd8;pe,x;co;bCdi,hd;iEriC;ce,zC;io;an,en,o;benez2dZfrYit0lTmMnJo3rFsteb0th0ugenEvCymBzra;an,eCge4D;ns,re3K;!e;gi,iDnCrol,v3w3;est8ie,st;cCk;!h,k;o0DriCzo;co,qC;ue;aHerGiDmC;aGe3A;lCrh0;!iC;a10o,s;s1y;nu5;beAd1iEliDm2t1viCwood;n,s;ot28s;!as,j5Hot,sC;ha;a3en;!dGg6mFoDua2QwC;a2Pin;arC;do;oZuZ;ie;a04eTiOmitrNoFrag0uEwDylC;an,l0;ay3Hig4D;a3Gdl9nc0st3;minFnDri0ugCvydGy2S;!lF;!a36nCov0;e1Eie,y;go,iDykC;as;cCk;!k;i,y;armuFetDll1mitri7neCon,rk;sh;er,m6riC;ch;id;andLepak,j0lbeAmetri4nIon,rGsEvDwCxt2;ay30ey;en,in;hawn,moC;nd;ek,riC;ck;is,nC;is,y;rt;re;an,le,mKnIrEvC;e,iC;!d;en,iEne0PrCyl;eCin,yl;l45n;n,o,us;!iCny;el,lo;iCon;an,en,on;a0Fe0Ch03iar0lRoJrFuDyrC;il,us;rtC;!is;aEistC;iaCob12;no;ig;dy,lInErC;ey,neliCy;s,us;nEor,rDstaC;nt3;ad;or;by,e,in,l3t1;aHeEiCyde;fCnt,ve;fo0Xt1;menDt4;us;s,t;rFuDyC;!t1;dCs;e,io;enC;ce;aHeGrisC;!toC;phCs;!eC;!r;st2t;d,rCs;b5leC;s,y;cDdrCs6;ic;il;lHmFrC;ey,lDroCy;ll;!o7t1;er1iC;lo;!eb,v3;a09eZiVjorn,laUoSrEuCyr1;ddy,rtKst2;er;aKeFiEuDyC;an,ce,on;ce,no;an,ce;nDtC;!t;dDtC;!on;an,on;dFnC;dDisC;lav;en,on;!foOl9y;bby,gd0rCyd;is;i0Lke;bElDshC;al;al,lL;ek;nIrCshoi;at,nEtC;!raC;m,nd;aDhaCie;rd;rd8;!iDjam3nCs1;ie,y;to;kaMlazs,nHrC;n9rDtC;!holomew;eCy;tt;ey;dCeD;ar,iC;le;ar1Nb1Dd16fon15gust3hm12i0Zja0Yl0Bm07nTputsiSrGsaFugustEveDyCziz;a0kh0;ry;o,us;hi;aMchiKiJjun,mHnEon,tCy0;em,hCie,ur8;ur;aDoC;!ld;ud,v;aCin;an,nd8;!el,ki;baCe;ld;ta;aq;aMdHgel8tCw6;hoFoC;iDnC;!i8y;ne;ny;er7rCy;eDzC;ej;!as,i,j,s,w;!s;s,tolC;iCy;!y;ar,iEmaCos;nu5r;el;ne,r,t;aVbSdBeJfHiGl01onFphonsEt1vC;aPin;on;e,o;so,zo;!sR;!onZrC;ed;c,jaHksFssaHxC;!andC;er,rC;e,os,u;andCei;ar,er,r;ndC;ro;en;eDrecC;ht;rt8;dd3in,n,sC;taC;ir;ni;dDm6;ar;an,en;ad,eC;d,t;in;so;aGi,olErDvC;ik;ian8;f8ph;!o;mCn;!a;dGeFraDuC;!bakr,lfazl;hCm;am;!l;allFel,oulaye,ulC;!lDrahm0;an;ah,o;ah;av,on",Uncountable:"true¦0:2E;1:2L;2:33;a2Ub2Lc29d22e1Rf1Ng1Eh16i11j0Yk0Wl0Rm0Hn0Do0Cp03rZsLt9uran2Jv7w3you gu0E;a5his17i4oo3;d,l;ldlife,ne;rm8t1;apor,ernacul29i3;neg28ol1Otae;eDhBiAo8r4un3yranny;a,gst1B;aff2Oea1Ko4ue nor3;th;o08u3;bleshoot2Ose1Tt;night,othpas1Vwn3;foEsfoE;me off,n;er3und1;e,mod2S;a,nnis;aDcCeBhAi9ki8o7p6t4u3weepstak0;g1Unshi2Hshi;ati08e3;am,el;ace2Keci0;ap,cc1meth2C;n,ttl0;lk;eep,ingl0or1C;lf,na1Gri0;ene1Kisso1C;d0Wfe2l4nd,t3;i0Iurn;m1Ut;abi0e4ic3;e,ke15;c3i01laxa11search;ogni10rea10;a9e8hys7luto,o5re3ut2;amble,mis0s3ten20;en1Zs0L;l3rk;i28l0EyH; 16i28;a24tr0F;nt3ti0M;i0s;bstetri24vercrowd1Qxyg09;a5e4owada3utella;ys;ptu1Ows;il poliZtional securi2;aAe8o5u3;m3s1H;ps;n3o1K;ey,o3;gamy;a3cha0Elancholy,rchandi1Htallurgy;sl0t;chine3g1Aj1Hrs,thema1Q; learn1Cry;aught1e6i5ogi4u3;ck,g12;c,s1M;ce,ghtn18nguis1LteratWv1;ath1isVss;ara0EindergartPn3;icke0Aowled0Y;e3upit1;a3llyfiGwel0G;ns;ce,gnor6mp5n3;forma00ter3;net,sta07;atiSort3rov;an18;a7e6isto09o3ung1;ckey,mework,ne4o3rseradi8spitali2use arrest;ky;s2y;adquarteXre;ir,libut,ppiHs3;hi3te;sh;ene8l6o5r3um,ymnas11;a3eZ;niUss;lf,re;ut3yce0F;en; 3ti0W;edit0Hpo3;ol;aNicFlour,o4urnit3;ure;od,rgive3uri1wl;ness;arCcono0LducaBlectr9n7quip8thi0Pvery6x3;ist4per3;ti0B;en0J;body,o08th07;joy3tertain3;ment;ici2o3;ni0H;tiS;nings,th;emi02i6o4raugh3ynas2;ts;pe,wnstai3;rs;abet0ce,s3;honZrepu3;te;aDelciChAivi07l8o3urrency;al,ld w6mmenta5n3ral,ttIuscoB;fusiHt 3;ed;ry;ar;assi01oth0;es;aos,e3;eMwK;us;d,rO;a8i6lood,owlHread5u3;ntGtt1;er;!th;lliarJs3;on;g3ss;ga3;ge;cKdviJeroGirFmBn6ppeal court,r4spi3thleL;rin;ithmet3sen3;ic;i6y3;o4th3;ing;ne;se;en5n3;es2;ty;ds;craft;bi8d3nau7;yna3;mi6;ce;id,ous3;ti3;cs",Infinitive:"true¦0:9G;1:9T;2:AD;3:90;4:9Z;5:84;6:AH;7:A9;8:92;9:A0;A:AG;B:AI;C:9V;D:8R;E:8O;F:97;G:6H;H:7D;a94b8Hc7Jd68e4Zf4Mg4Gh4Ai3Qj3Nk3Kl3Bm34nou48o2Vp2Equ2Dr1Es0CtZuTvRwI;aOeNiLors5rI;eJiI;ng,te;ak,st3;d5e8TthI;draw,er;a2d,ep;i2ke,nIrn;d1t;aIie;liADniAry;nJpI;ho8Llift;cov1dJear8Hfound8DlIplug,rav82tie,ve94;eaAo3X;erIo;cut,go,staAFvalA3w2G;aSeQhNoMrIu73;aIe72;ffi3Smp3nsI;aBfo7CpI;i8oD;pp3ugh5;aJiJrIwaD;eat5i2;nk;aImA0;ch,se;ck3ilor,keImp1r8L;! paD;a0Ic0He0Fh0Bi0Al08mugg3n07o05p02qu01tUuLwI;aJeeIim;p,t5;ll7Wy;bNccMffLggeCmmKppJrI;mouFpa6Zvi2;o0re6Y;ari0on;er,i4;e7Numb;li9KmJsiIveD;de,st;er9it;aMe8MiKrI;ang3eIi2;ng27w;fIng;f5le;b,gg1rI;t3ve;a4AiA;a4UeJit,l7DoI;il,of;ak,nd;lIot7Kw;icEve;atGeak,i0O;aIi6;m,y;ft,ng,t;aKi6CoJriIun;nk,v6Q;ot,rt5;ke,rp5tt1;eIll,nd,que8Gv1w;!k,m;aven9ul8W;dd5tis1Iy;a0FeKiJoI;am,t,ut;d,p5;a0Ab08c06d05f01group,hea00iZjoi4lXmWnVpTq3MsOtMup,vI;amp,eJiIo3B;sEve;l,rI;e,t;i8rI;ie2ofE;eLiKpo8PtIurfa4;o24rI;aHiBuctu8;de,gn,st;mb3nt;el,hra0lIreseF;a4e71;d1ew,o07;aHe3Fo2;a7eFiIo6Jy;e2nq41ve;mbur0nf38;r0t;inKleBocus,rJuI;el,rbiA;aBeA;an4e;aBu4;ei2k8Bla43oIyc3;gni39nci3up,v1;oot,uI;ff;ct,d,liIp;se,ze;tt3viA;aAenGit,o7;aWerUinpoiFlumm1LoTrLuI;b47ke,niArIt;poDsuI;aFe;eMoI;cKd,fe4XhibEmo7noJpo0sp1tru6vI;e,i6o5L;un4;la3Nu8;aGclu6dJf1occupy,sup0JvI;a6BeF;etermi4TiB;aGllu7rtr5Ksse4Q;cei2fo4NiAmea7plex,sIva6;eve8iCua6;mp1rItrol,ve;a6It6E;bOccuNmEpMutLverIwe;l07sJtu6Yu0wI;helm;ee,h1F;gr5Cnu2Cpa4;era7i4Ipo0;py,r;ey,seItaH;r2ss;aMe0ViJoIultiply;leCu6Pw;micJnIspla4;ce,g3us;!k;iIke,na9;m,ntaH;aPeLiIo0u3N;ke,ng1quIv5;eIi6S;fy;aKnIss5;d,gI;th5;rn,ve;ng2Gu1N;eep,idnJnI;e4Cow;ap;oHuI;gg3xtaI;po0;gno8mVnIrk;cTdRfQgeChPitia7ju8q1CsNtKun6EvI;a6eIo11;nt,rt,st;erJimi6BoxiPrI;odu4u6;aBn,pr03ru6C;iCpi8tIu8;all,il,ruB;abEibE;eCo3Eu0;iIul9;ca7;i7lu6;b5Xmer0pI;aLer4Uin9ly,oJrI;e3Ais6Bo2;rt,se,veI;riA;le,rt;aLeKiIoiCuD;de,jaInd1;ck;ar,iT;mp1ng,pp5raIve;ng5Mss;ath1et,iMle27oLrI;aJeIow;et;b,pp3ze;!ve5A;gg3ve;aTer45i5RlSorMrJuI;lf4Cndrai0r48;eJiIolic;ght5;e0Qsh5;b3XeLfeEgJsI;a3Dee;eIi2;!t;clo0go,shIwa4Z;ad3F;att1ee,i36;lt1st5;a0OdEl0Mm0FnXquip,rWsVtGvTxI;aRcPeDhOiNpJtIu6;ing0Yol;eKi8lIo0un9;aHoI;it,re;ct,di7l;st,t;a3oDu3B;e30lI;a10u6;lt,mi28;alua7oI;ke,l2;chew,pou0tab19;a0u4U;aYcVdTfSgQhan4joy,lPqOrNsuMtKvI;e0YisI;a9i50;er,i4rI;aHenGuC;e,re;iGol0F;ui8;ar9iC;a9eIra2ulf;nd1;or4;ang1oIu8;r0w;irc3lo0ou0ErJuI;mb1;oaGy4D;b3ct;bKer9pI;hasiIow1;ze;aKody,rI;a4oiI;d1l;lm,rk;ap0eBuI;ci40de;rIt;ma0Rn;a0Re04iKo,rIwind3;aw,ed9oI;wn;agno0e,ff1g,mi2Kne,sLvI;eIul9;rIst;ge,t;aWbVcQlod9mant3pNru3TsMtI;iIoDu37;lJngI;uiA;!l;ol2ua6;eJlIo0ro2;a4ea0;n0r0;a2Xe36lKoIu0S;uIv1;ra9;aIo0;im;a3Kur0;b3rm;af5b01cVduBep5fUliTmQnOpMrLsiCtaGvI;eIol2;lop;ch;a20i2;aDiBloIoD;re,y;oIy;te,un4;eJoI;liA;an;mEv1;a4i0Ao06raud,y;ei2iMla8oKrI;ee,yI;!pt;de,mIup3;missi34po0;de,ma7ph1;aJrief,uI;g,nk;rk;mp5rk5uF;a0Dea0h0Ai09l08oKrIurta1G;a2ea7ipp3uI;mb3;ales4e04habEinci6ll03m00nIrro6;cXdUfQju8no7qu1sLtKvI;eIin4;ne,r9y;aHin2Bribu7;er2iLoli2Epi8tJuI;lt,me;itu7raH;in;d1st;eKiJoIroFu0;rm;de,gu8rm;ss;eJoI;ne;mn,n0;eIlu6ur;al,i2;buCe,men4pI;eIi3ly;l,te;eBi6u6;r4xiC;ean0iT;rcumveFte;eJirp,oI;o0p;riAw;ncIre5t1ulk;el;a02eSi6lQoPrKuI;iXrIy;st,y;aLeaKiJoad5;en;ng;stfeLtX;ke;il,l11mba0WrrMth1;eIow;ed;!coQfrie1LgPhMliLqueaKstJtrIwild1;ay;ow;th;e2tt3;a2eJoI;ld;ad;!in,ui3;me;bysEckfi8ff3tI;he;b15c0Rd0Iff0Ggree,l0Cm09n03ppZrXsQttOuMvJwaE;it;eDoI;id;rt;gIto0X;meF;aIeCraB;ch,in;pi8sJtoI;niA;aKeIi04u8;mb3rt,ss;le;il;re;g0Hi0ou0rI;an9i2;eaKly,oiFrI;ai0o2;nt;r,se;aMi0GnJtI;icipa7;eJoIul;un4y;al;ly0;aJu0;se;lga08ze;iKlI;e9oIu6;t,w;gn;ix,oI;rd;a03jNmiKoJsoI;rb;pt,rn;niIt;st1;er;ouJuC;st;rn;cLhie2knowled9quiItiva7;es4re;ce;ge;eQliOoKrJusI;e,tom;ue;mIst;moJpI;any,liA;da7;ma7;te;pt;andPduBet,i6oKsI;coKol2;ve;liArt,uI;nd;sh;de;ct;on",Person:"true¦0:1Q;a29b1Zc1Md1Ee18f15g13h0Ri0Qj0Nk0Jl0Gm09n06o05p00rPsItCusain bolt,v9w4xzibit,y1;anni,oko on2uji,v1;an,es;en,o;a3ednesday adams,i2o1;lfram,o0Q;ll ferrell,z khalifa;lt disn1Qr1;hol,r0G;a2i1oltai06;n dies0Zrginia wo17;lentino rossi,n goG;a4h3i2ripp,u1yra banks;lZpac shakur;ger woods,mba07;eresa may,or;kashi,t1ylor;um,ya1B;a5carlett johanss0h4i3lobodan milosevic,no2ocr1Lpider1uperm0Fwami; m0Em0E;op dogg,w whi1H;egfried,nbad;akespeaTerlock holm1Sia labeouf;ddam hussa16nt1;a cla11ig9;aAe6i5o3u1za;mi,n dmc,paul,sh limbau1;gh;bin hood,d stew16nald1thko;in0Mo;han0Yngo starr,valdo;ese witherspo0i1mbrandt;ll2nh1;old;ey,y;chmaninoff,ffi,iJshid,y roma1H;a4e3i2la16o1uff daddy;cahont0Ie;lar,p19;le,rZ;lm17ris hilt0;leg,prah winfr0Sra;a2e1iles cra1Bostradam0J; yo,l5tt06wmQ;pole0s;a5e4i2o1ubar03;by,lie5net,rriss0N;randa ju1tt romn0M;ly;rl0GssiaB;cklemo1rkov,s0ta hari,ya angelou;re;ady gaga,e1ibera0Pu;bron jam0Xch wale1e;sa;anye west,e3i1obe bryant;d cudi,efer suther1;la0P;ats,sha;a2effers0fk,k rowling,rr tolki1;en;ck the ripp0Mwaharlal nehru,y z;liTnez,ron m7;a7e5i3u1;lk hog5mphrey1sa01;! bog05;l1tl0H;de; m1dwig,nry 4;an;ile selassFlle ber4m3rrison1;! 1;ford;id,mo09;ry;ast0iannis,o1;odwPtye;ergus0lorence nightinga08r1;an1ederic chopN;s,z;ff5m2nya,ustaXzeki1;el;eril lagasse,i1;le zatop1nem;ek;ie;a6e4i2octor w1rake;ho;ck w1ego maradoC;olf;g1mi lovaOnzel washingt0;as;l1nHrth vadR;ai lNt0;a8h5lint0o1thulhu;n1olio;an,fuci1;us;on;aucKop2ristian baMy1;na;in;millo,ptain beefhe4r1;dinal wols2son1;! palmF;ey;art;a8e5hatt,i3oHro1;ck,n1;te;ll g1ng crosby;atB;ck,nazir bhut2rtil,yon1;ce;to;nksy,rack ob1;ama;l 6r3shton kutch2vril lavig8yn ra1;nd;er;chimed2istot1;le;es;capo2paci1;no;ne",Adjective:"true¦0:AI;1:BS;2:BI;3:BA;4:A8;5:84;6:AV;7:AN;8:AF;9:7H;A:BQ;B:AY;C:BC;D:BH;E:9Y;aA2b9Ec8Fd7We79f6Ng6Eh61i4Xj4Wk4Tl4Im41n3Po36p2Oquart7Pr2Ds1Dt14uSvOwFye29;aMeKhIiHoF;man5oFrth7G;dADzy;despreB1n w97s86;acked1UoleF;!sa6;ather1PeFll o70ste1D;!k5;nt1Ist6Ate4;aHeGiFola5T;bBUce versa,gi3Lle;ng67rsa5R;ca1gBSluAV;lt0PnLpHrGsFttermoBL;ef9Ku3;b96ge1; Hb32pGsFtiAH;ca6ide d4R;er,i85;f52to da2;a0Fbeco0Hc0Bd04e02f01gu1XheaBGiXkn4OmUnTopp06pRrNsJtHus0wF;aFiel3K;nt0rra0P;app0eXoF;ld,uS;eHi37o5ApGuF;perv06spec39;e1ok9O;en,ttl0;eFu5;cogn06gul2RlGqu84sF;erv0olv0;at0en33;aFrecede0E;id,rallel0;am0otic0;aFet;rri0tF;ch0;nFq26vers3;sur0terFv7U;eFrupt0;st0;air,inish0orese98;mploy0n7Ov97xpF;ect0lain0;eHisFocume01ue;clFput0;os0;cid0rF;!a8Scov9ha8Jlyi8nea8Gprivileg0sMwF;aFei9I;t9y;hGircumcFonvin2U;is0;aFeck0;lleng0rt0;b20ppea85ssuGttend0uthorF;iz0;mi8;i4Ara;aLeIhoHip 25oGrF;anspare1encha1i2;geth9leADp notch,rpB;rny,ugh6H;ena8DmpGrFs6U;r49tia4;eCo8P;leFst4M;nt0;a0Dc09e07h06i04ki03l01mug,nobbi4XoVpRqueami4XtKuFymb94;bHccinAi generis,pFr5;erFre7N;! dup9b,vi70;du0li7Lp6IsFurb7J;eq9Atanda9X;aKeJi16o2QrGubboFy4Q;rn;aightFin5GungS; fFfF;or7V;adfa9Pri6;lwa6Ftu82;arHeGir6NlendBot Fry;on;c3Qe1S;k5se; call0lImb9phistic16rHuFviV;ndFth1B;proof;dBry;dFub6; o2A;e60ipF;pe4shod;ll0n d7R;g2HnF;ceEg6ist9;am3Se9;co1Zem5lfFn6Are7; suf4Xi43;aGholFient3A;ar5;rlFt4A;et;cr0me,tisfac7F;aOeIheumatoBiGoF;bu8Ztt7Gy3;ghtFv3; 1Sf6X;cJdu8PlInown0pro69sGtF;ard0;is47oF;lu2na1;e1Suc45;alcit8Xe1ondi2;bBci3mpa1;aSePicayu7laOoNrGuF;bl7Tnjabi;eKiIoF;b7VfGmi49pFxi2M;er,ort81;a7uD;maFor,sti7va2;!ry;ciDexis0Ima2CpaB;in55puli8G;cBid;ac2Ynt 3IrFti2;ma40tFv7W;!i3Z;i2YrFss7R;anoBtF; 5XiF;al,s5V;bSffQkPld OnMrLth9utKverF;!aIbMdHhGni75seas,t,wF;ei74rou74;a63e7A;ue;ll;do1Ger,si6A;d3Qg2Aotu5Z; bFbFe on o7g3Uli7;oa80;fashion0school;!ay; gua7XbFha5Uli7;eat;eHligGsF;ce7er0So1C;at0;diFse;a1e1;aOeNiMoGuF;anc0de; moEnHrthFt6V;!eFwe7L;a7Krn;chaGdescri7Iprof30sF;top;la1;ght5;arby,cessa4ighbor5wlyw0xt;k0usiaFv3;ti8;aQeNiLoHuF;dIltiF;facet0p6;deHlGnFot,rbBst;ochro4Xth5;dy;rn,st;ddle ag0nF;dbloZi,or;ag9diocEga,naGrFtropolit4Q;e,ry;ci8;cIgenta,inHj0Fkeshift,mmGnFri4Oscu61ver18;da5Dy;ali4Lo4U;!stream;abEho;aOeLiIoFumberi8;ngFuti1R;stan3RtF;erm,i4H;ghtGteraF;l,ry,te;heart0wei5O;ft JgFss9th3;al,eFi0M;nda4;nguBps0te5;apGind5noF;wi8;ut;ad0itte4uniW;ce co0Hgno6Mll0Cm04nHpso 2UrF;a2releF;va1; ZaYcoWdReQfOgrNhibi4Ri05nMoLsHtFvalu5M;aAeF;nDrdepe2K;a7iGolFuboI;ub6ve1;de,gF;nifica1;rdi5N;a2er;own;eriIiLluenVrF;ar0eq5H;pt,rt;eHiGoFul1O;or;e,reA;fiFpe26termi5E;ni2;mpFnsideCrreA;le2;ccuCdeq5Ene,ppr4J;fFsitu,vitro;ro1;mJpF;arHeGl15oFrop9;li2r11;n2LrfeA;ti3;aGeFi18;d4BnD;tuE;egGiF;c0YteC;al,iF;tiF;ma2;ld;aOelNiLoFuma7;a4meInHrrGsFur5;ti6;if4E;e58o3U; ma3GsF;ick;ghfalut2HspF;an49;li00pf33;i4llow0ndGrdFtM; 05coEworki8;sy,y;aLener44iga3Blob3oKrGuF;il1Nng ho;aFea1Fizzl0;cGtF;ef2Vis;ef2U;ld3Aod;iFuc2D;nf2R;aVeSiQlOoJrF;aGeFil5ug3;q43tf2O;gFnt3S;i6ra1;lk13oHrF; keeps,eFge0Vm9tu41;g0Ei2Ds3R;liF;sh;ag4Mowe4uF;e1or45;e4nF;al,i2;d Gmini7rF;ti6ve1;up;bl0lDmIr Fst pac0ux;oGreacF;hi8;ff;ed,ili0R;aXfVlTmQnOqu3rMthere3veryday,xF;aApIquisi2traHuF;be48lF;ta1;!va2L;edRlF;icF;it;eAstF;whi6; Famor0ough,tiE;rou2sui2;erGiF;ne1;ge1;dFe2Aoq34;er5;ficF;ie1;g9sF;t,ygF;oi8;er;aWeMiHoGrFue;ea4owY;ci6mina1ne,r31ti8ubQ;dact2Jfficult,m,sGverF;ge1se;creGePjoi1paCtF;a1inA;et,te; Nadp0WceMfiLgeneCliJmuEpeIreliAsGvoF;id,ut;pFtitu2ul1L;eCoF;nde1;ca2ghF;tf13;a1ni2;as0;facto;i5ngero0I;ar0Ce09h07i06l05oOrIuF;rmudgeon5stoma4teF;sy;ly;aIeHu1EystalF; cleFli7;ar;epy;fFv17z0;ty;erUgTloSmPnGrpoCunterclVveFy;rt;cLdJgr21jIsHtrF;aFi2;dic0Yry;eq1Yta1;oi1ug3;escenFuN;di8;a1QeFiD;it0;atoDmensuCpF;ass1SulF;so4;ni3ss3;e1niza1;ci1J;ockwiD;rcumspeAvil;eFintzy;e4wy;leGrtaF;in;ba2;diac,ef00;a00ePiLliJoGrFuck nak0;and new,isk,on22;gGldface,naF; fi05fi05;us;nd,tF;he;gGpartisFzarE;an;tiF;me;autifOhiNlLnHsFyoN;iWtselF;li8;eGiFt;gn;aFfi03;th;at0oF;v0w;nd;ul;ckwards,rF;e,rT; priori,b13c0Zd0Tf0Ng0Ihe0Hl09mp6nt06pZrTsQttracti0MuLvIwF;aGkF;wa1B;ke,re;ant garGeraF;ge;de;diIsteEtF;heFoimmu7;nt07;re;to4;hGlFtu2;eep;en;bitIchiv3roHtF;ifiFsy;ci3;ga1;ra4;ry;pFt;aHetizi8rF;oprF;ia2;llFre1;ed,i8;ng;iquFsy;at0e;ed;cohKiJkaHl,oGriFterX;ght;ne,of;li7;ne;ke,ve;olF;ic;ad;ain07gressiIi6rF;eeF;ab6;le;ve;fGraB;id;ectGlF;ue1;ioF;na2; JaIeGvF;erD;pt,qF;ua2;ma1;hoc,infinitum;cuCquiGtu3u2;al;esce1;ra2;erSjeAlPoNrKsGuF;nda1;e1olu2trF;aAuD;se;te;eaGuF;pt;st;aFve;rd;aFe;ze;ct;ra1;nt",Pronoun:"true¦elle,h3i2me,she,th0us,we,you;e0ou;e,m,y;!l,t;e,im",Preposition:"true¦aPbMcLdKexcept,fIinGmid,notwithstandiWoDpXqua,sCt7u4v2w0;/o,hereSith0;! whHin,oW;ersus,i0;a,s a vis;n1p0;!on;like,til;h1ill,oward0;!s;an,ereby,r0;ough0u;!oM;ans,ince,o that,uch G;f1n0ut;!to;!f;! 0to;effect,part;or,r0;om;espite,own,u3;hez,irca;ar1e0oBy;sides,tween;ri7;bo8cross,ft7lo6m4propos,round,s1t0;!op;! 0;a whole,long 0;as;id0ong0;!st;ng;er;ut",SportsTeam:"true¦0:18;1:1E;2:1D;3:14;a1Db15c0Sd0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Am01new UoRpKqueens parkJreal salt lake,sBt6utah jazz,vancouver whitecaps,w4yW;ashington 4h10;natio1Mredski2wizar0W;ampa bay 7e6o4;ronto 4ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasD;buccanee0ra0K;a8eattle 6porting kansas0Wt4; louis 4oke0V;c1Drams;marine0s4;eah13ounH;cramento Rn 4;antonio spu0diego 4francisco gJjose earthquak1;char08paB; ran07;a9h6ittsburgh 5ortland t4;imbe0rail blaze0;pirat1steele0;il4oenix su2;adelphia 4li1;eagl1philNunE;dr1;akland 4klahoma city thunder,rlando magic;athle0Lrai4;de0;england 8orleans 7york 4;g5je3knYme3red bul0Xy4;anke1;ian3;pelica2sain3;patrio3revolut4;ion;anchEeAi4ontreal impact;ami 8lwaukee b7nnesota 4;t5vi4;kings;imberwolv1wi2;rewe0uc0J;dolphi2heat,marli2;mphis grizz4ts;li1;a6eic5os angeles 4;clippe0dodFlaB;esterV; galaxy,ke0;ansas city 4nF;chiefs,roya0D; pace0polis col3;astr05dynamo,rocke3texa2;olden state warrio0reen bay pac4;ke0;allas 8e4i04od6;nver 6troit 4;lio2pisto2ti4;ge0;broncYnugge3;cowbo5maver4;icZ;ys;arEelLhAincinnati 8leveland 6ol4;orado r4umbus crew sc;api7ocki1;brow2cavalie0guar4in4;dia2;bengaVre4;ds;arlotte horAicago 4;b5cubs,fire,wh4;iteB;ea0ulQ;diff4olina panthe0; city;altimore Alackburn rove0oston 6rooklyn 4uffalo bilN;ne3;ts;cel5red4; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 4;brav1falco2h4;awA;ns;es;on villa,r4;os;c6di4;amondbac4;ks;ardi4;na4;ls",Unit:"true¦a07b04cXdWexVfTgRhePinYjoule0BkMlJmDnan08oCp9quart0Bsq ft,t7volts,w6y2ze3°1µ0;g,s;c,f,n;dVear1o0;ttR; 0s 0;old;att,b;erNon0;!ne02;ascals,e1i0;cXnt00;rcent,tJ;hms,unceY;/s,e4i0m²,²,³;/h,cro2l0;e0liK;!²;grLsR;gCtJ;it1u0;menQx;erPreP;b5elvins,ilo1m0notO;/h,ph,²;!byGgrEmCs;ct0rtzL;aJogrC;allonJb0ig3rB;ps;a0emtEl oz,t4;hrenheit,radG;aby9;eci3m1;aratDe1m0oulombD;²,³;lsius,nti0;gr2lit1m0;et0;er8;am7;b1y0;te5;l,ps;c2tt0;os0;econd1;re0;!s","Noun|Gerund":"true¦0:3O;1:3M;2:3N;3:3D;4:32;5:2V;6:3E;7:3K;8:36;9:3J;A:3B;a3Pb37c2Jd27e23f1Vg1Sh1Mi1Ij1Gk1Dl18m13n11o0Wp0Pques0Sr0EsTtNunderMvKwFyDzB;eroi0oB;ni0o3P;aw2eB;ar2l3;aEed4hispe5i5oCrB;ap8est3i1;n0ErB;ki0r31;i1r2s9tc9;isualizi0oB;lunt1Vti0;stan4ta6;aFeDhin6iCraBy8;c6di0i2vel1M;mi0p8;aBs1;c9si0;l6n2s1;aUcReQhOiMkatKl2Wmo6nowJpeItFuCwB;ea5im37;b35f0FrB;fi0vB;e2Mi2J;aAoryt1KrCuB;d2KfS;etc9ugg3;l3n4;bCi0;ebBi0;oar4;gnBnAt1;a3i0;ip8oB;p8rte2u1;a1r27t1;hCo5reBulp1;a2Qe2;edu3oo3;i3yi0;aKeEi4oCuB;li0n2;oBwi0;fi0;aFcEhear7laxi0nDpor1sB;pon4tructB;r2Iu5;de5;or4yc3;di0so2;p8ti0;aFeacek20laEoCrBublis9;a1Teten4in1oces7;iso2siB;tio2;n2yi0;ckaAin1rB;ki0t1O;fEpeDrganiCvB;erco24ula1;si0zi0;ni0ra1;fe5;avi0QeBur7;gotia1twor6;aDeCi2oB;de3nito5;a2dita1e1ssaA;int0XnBrke1;ifUufactu5;aEeaDiBodAyi0;cen7f1mi1stB;e2i0;r2si0;n4ug9;iCnB;ea4it1;c6l3;ogAuB;dAgg3stif12;ci0llust0VmDnBro2;nova1sp0NterBven1;ac1vie02;agi2plo4;aDea1iCoBun1;l4w3;ki0ri0;nd3rB;roWvB;es1;aCene0Lli4rBui4;ee1ie0N;rde2the5;aHeGiDlCorBros1un4;e0Pmat1;ir1oo4;gh1lCnBs9;anZdi0;i0li0;e3nX;r0Zscina1;a1du01nCxB;erci7plo5;chan1di0ginB;ee5;aLeHiGoub1rCum8wB;el3;aDeCiB;bb3n6vi0;a0Qs7;wi0;rTscoDvi0;ba1coZlBvelo8;eCiB;ve5;ga1;nGti0;aVelebUhSlPoDrBur3yc3;aBos7yi0;f1w3;aLdi0lJmFnBo6pi0ve5;dDsCvinB;ci0;trBul1;uc1;muniDpB;lBo7;ai2;ca1;lBo5;ec1;c9ti0;ap8eaCimToBubT;ni0t9;ni0ri0;aBee5;n1t1;ra1;m8rCs1te5;ri0;vi0;aPeNitMlLoGrDuB;dge1il4llBr8;yi0;an4eat9oadB;cas1;di0;a1mEokB;i0kB;ee8;pi0;bi0;es7oa1;c9i0;gin2lonAt1;gi0;bysit1c6ki0tt3;li0;ki0;bando2cGdverti7gi0pproac9rgDssuCtB;trac1;mi0;ui0;hi0;si0;coun1ti0;ti0;ni0;ng",PhrasalVerb:"true¦0:92;1:96;2:8H;3:8V;4:8A;5:83;6:85;7:98;8:90;9:8G;A:8X;B:8R;C:8U;D:8S;E:70;F:97;G:8Y;H:81;I:7H;J:79;a9Fb7Uc6Rd6Le6Jf5Ig50h4Biron0j47k40l3Em31n2Yo2Wp2Cquiet Hr1Xs0KtZuXvacuu6QwNyammerBzK;ero Dip LonK;e0k0;by,ov9up;aQeMhLiKor0Mrit19;mp0n3Fpe0r5s5;ackAeel Di0S;aLiKn33;gh 3Wrd0;n Dr K;do1in,oJ;it 79k5lk Lrm 69sh Kt83v60;aw3do1o7up;aw3in,oC;rgeBsK;e 2herE;a00eYhViRoQrMuKypP;ckErn K;do1in,oJup;aLiKot0y 30;ckl7Zp F;ck HdK;e 5Y;n7Wp 3Es5K;ck MdLe Kghten 6me0p o0Rre0;aw3ba4do1in,up;e Iy 2;by,oG;ink Lrow K;aw3ba4in,up;ba4ov9up;aKe 77ll62;m 2r 5M;ckBke Llk K;ov9shit,u47;aKba4do1in,leave,o4Dup;ba4ft9pa69w3;a0Vc0Te0Mh0Ii0Fl09m08n07o06p01quar5GtQuOwK;earMiK;ngLtch K;aw3ba4o8K; by;cKi6Bm 2ss0;k 64;aReQiPoNrKud35;aigh2Det75iK;ke 7Sng K;al6Yup;p Krm2F;by,in,oG;c3Ln3Lr 2tc4O;p F;c3Jmp0nd LrKveAy 2O;e Ht 2L;ba4do1up;ar3GeNiMlLrKurB;ead0ingBuc5;a49it 6H;c5ll o3Cn 2;ak Fe1Xll0;a3Bber 2rt0und like;ap 5Vow Duggl5;ash 6Noke0;eep NiKow 6;cLp K;o6Dup;e 68;in,oK;ff,v9;de19gn 4NnKt 6Gz5;gKkE; al6Ale0;aMoKu5W;ot Kut0w 7M;aw3ba4f48oC;c2WdeEk6EveA;e Pll1Nnd Orv5tK; Ktl5J;do1foLin,o7upK;!on;ot,r5Z;aw3ba4do1in,o33up;oCto;al66out0rK;ap65ew 6J;ilAv5;aXeUiSoOuK;b 5Yle0n Kstl5;aLba4do1inKo2Ith4Nu5P;!to;c2Xr8w3;ll Mot LpeAuK;g3Ind17;a2Wf3Po7;ar8in,o7up;ng 68p oKs5;ff,p18;aKelAinEnt0;c6Hd K;o4Dup;c27t0;aZeYiWlToQrOsyc35uK;ll Mn5Kt K;aKba4do1in,oJto47up;pa4Dw3;a3Jdo1in,o21to45up;attleBess KiNop 2;ah2Fon;iLp Kr4Zu1Gwer 6N;do1in,o6Nup;nt0;aLuK;gEmp 6;ce u20y 6D;ck Kg0le 4An 6p5B;oJup;el 5NncilE;c53ir 39n0ss MtLy K;ba4oG; Hc2R;aw3ba4in,oJ;pKw4Y;e4Xt D;aLerd0oK;dAt53;il Hrrow H;aTeQiPoLuK;ddl5ll I;c1FnkeyMp 6uthAve K;aKdo1in,o4Lup;l4Nw3; wi4K;ss0x 2;asur5e3SlLss K;a21up;t 6;ke Ln 6rKs2Ax0;k 6ryA;do,fun,oCsure,up;a02eViQoLuK;ck0st I;aNc4Fg MoKse0;k Kse4D;aft9ba4do1forw37in56o0Zu46;in,oJ;d 6;e NghtMnLsKve 00;ten F;e 2k 2; 2e46;ar8do1in;aMt LvelK; oC;do1go,in,o7up;nEve K;in,oK;pKut;en;c5p 2sh LtchBughAy K;do1o59;in4Po7;eMick Lnock K;do1oCup;oCup;eLy K;in,up;l Ip K;aw3ba4do1f04in,oJto,up;aMoLuK;ic5mpE;ke3St H;c43zz 2;a01eWiToPuK;nLrrKsh 6;y 2;keLt K;ar8do1;r H;lKneErse3K;d Ke 2;ba4dKfast,o0Cup;ear,o1;de Lt K;ba4on,up;aw3o7;aKlp0;d Ml Ir Kt 2;fKof;rom;f11in,o03uW;cPm 2nLsh0ve Kz2P;at,it,to;d Lg KkerP;do1in,o2Tup;do1in,oK;ut,v9;k 2;aZeTive Rloss IoMrLunK; f0S;ab hold,in43ow 2U; Kof 2I;aMb1Mit,oLr8th1IuK;nd9;ff,n,v9;bo7ft9hQw3;aw3bKdo1in,oJrise,up,w3;a4ir2H;ar 6ek0t K;aLb1Fdo1in,oKr8up;ff,n,ut,v9;cLhKl2Fr8t,w3;ead;ross;d aKng 2;bo7;a0Ee07iYlUoQrMuK;ck Ke2N;ar8up;eLighten KownBy 2;aw3oG;eKshe27; 2z5;g 2lMol Krk I;aKwi20;bo7r8;d 6low 2;aLeKip0;sh0;g 6ke0mKrKtten H;e F;gRlPnNrLsKzzle0;h F;e Km 2;aw3ba4up;d0isK;h 2;e Kl 1T;aw3fPin,o7;ht ba4ure0;ePnLsK;s 2;cMd K;fKoG;or;e D;d04l 2;cNll Krm0t1G;aLbKdo1in,o09sho0Eth08victim;a4ehi2O;pa0C;e K;do1oGup;at Kdge0nd 12y5;in,o7up;aOi1HoNrK;aLess 6op KuN;aw3b03in,oC;gBwB; Ile0ubl1B;m 2;a0Ah05l02oOrLut K;aw3ba4do1oCup;ackBeep LoKy0;ss Dwd0;by,do1in,o0Uup;me NoLuntK; o2A;k 6l K;do1oG;aRbQforOin,oNtKu0O;hLoKrue;geth9;rough;ff,ut,v9;th,wK;ard;a4y;paKr8w3;rt;eaLose K;in,oCup;n 6r F;aNeLiK;ll0pE;ck Der Kw F;on,up;t 2;lRncel0rOsMtch LveE; in;o1Nup;h Dt K;doubt,oG;ry LvK;e 08;aw3oJ;l Km H;aLba4do1oJup;ff,n,ut;r8w3;a0Ve0MiteAl0Fo04rQuK;bblNckl05il0Dlk 6ndl05rLsKtMy FzzA;t 00;n 0HsK;t D;e I;ov9;anWeaUiLush K;oGup;ghQng K;aNba4do1forMin,oLuK;nd9p;n,ut;th;bo7lKr8w3;ong;teK;n 2;k K;do1in,o7up;ch0;arTg 6iRn5oPrNssMttlLunce Kx D;aw3ba4;e 6; ar8;e H;do1;k Dt 2;e 2;l 6;do1up;d 2;aPeed0oKurt0;cMw K;aw3ba4do1o7up;ck;k K;in,oC;ck0nk0stA; oQaNef 2lt0nd K;do1ov9up;er;up;r Lt K;do1in,oCup;do1o7;ff,nK;to;ck Pil0nMrgLsK;h D;ainBe D;g DkB; on;in,o7;aw3do1in,oCup;ff,ut;ay;ct FdQir0sk MuctionA; oG;ff;ar8o7;ouK;nd; o7;d K;do1oKup;ff,n;wn;o7up;ut",ProperNoun:"true¦aIbDc8dalhousHe7f5gosford,h4iron maiden,kirby,landsdowne,m2nis,r1s0wembF;herwood,paldiB;iel,othwe1;cgi0ercedes,issy;ll;intBudsB;airview,lorence,ra0;mpt9nco;lmo,uro;a1h0;arlt6es5risti;rl0talina;et4i0;ng;arb3e0;et1nt0rke0;ley;on;ie;bid,jax","Person|Place":"true¦a8d6h4jordan,k3orlando,s1vi0;ctor9rgin9;a0ydney;lvador,mara,ntia4;ent,obe;amil0ous0;ton;arw2ie0;go;lexandr1ust0;in;ia",LastName:"true¦0:BR;1:BF;2:B5;3:BH;4:AX;5:9Y;6:B6;7:BK;8:B0;9:AV;A:AL;B:8Q;C:8G;D:7K;E:BM;F:AH;aBDb9Zc8Wd88e81f7Kg6Wh64i60j5Lk4Vl4Dm39n2Wo2Op25quispe,r1Ls0Pt0Ev03wTxSyKzG;aIhGimmerm6A;aGou,u;ng,o;khar5ytsE;aKeun9BiHoGun;koya32shiBU;!lG;diGmaz;rim,z;maGng;da,g52mo83sGzaC;aChiBV;iao,u;aLeJiHoGright,u;jcA5lff,ng;lGmm0nkl0sniewsC;kiB1liams33s3;bGiss,lt0;b,er,st0;a6Vgn0lHtG;anabe,s3;k0sh,tG;e2Non;aLeKiHoGukD;gt,lk5roby5;dHllalGnogr3Kr1Css0val3S;ba,ob1W;al,ov4;lasHsel8W;lJn dIrgBEsHzG;qu7;ilyEqu7siljE;en b6Aijk,yk;enzueAIverde;aPeix1VhKi2j8ka43oJrIsui,uG;om5UrG;c2n0un1;an,emblA7ynisC;dorAMlst3Km4rrAth;atch0i8UoG;mHrG;are84laci79;ps3sG;en,on;hirDkah9Mnaka,te,varA;a06ch01eYhUiRmOoMtIuHvGzabo;en9Jobod3N;ar7bot4lliv2zuC;aIeHoG;i7Bj4AyanAB;ele,in2FpheBvens25;l8rm0;kol5lovy5re7Tsa,to,uG;ng,sa;iGy72;rn5tG;!h;l71mHnGrbu;at9cla9Egh;moBo7M;aIeGimizu;hu,vchG;en8Luk;la,r1G;gu9infe5YmGoh,pulveA7rra5P;jGyG;on5;evi6iltz,miHneid0roed0uGwarz;be3Elz;dHtG;!t,z;!t;ar4Th8ito,ka4OlJnGr4saCto,unde19v4;ch7dHtGz;a5Le,os;b53e16;as,ihDm4Po0Y;aVeSiPoJuHyG;a6oo,u;bio,iz,sG;so,u;bKc8Fdrigue67ge10j9YmJosevelt,sItHux,wG;e,li6;a9Ch;enb4Usi;a54e4L;erts15i93;bei4JcHes,vGzzo;as,e9;ci,hards12;ag2es,iHut0yG;es,nol5N;s,t0;dImHnGsmu97v6C;tan1;ir7os;ic,u;aUeOhMiJoHrGut8;asad,if6Zochazk27;lishc2GpGrti72u10we76;e3Aov51;cHe45nG;as,to;as70hl0;aGillips;k,m,n6I;a3Hde3Wete0Bna,rJtG;ersHrovGters54;!a,ic;!en,on;eGic,kiBss3;i9ra,tz,z;h86k,padopoulIrk0tHvG;ic,l4N;el,te39;os;bMconn2Ag2TlJnei6PrHsbor6XweBzG;dem7Rturk;ella4DtGwe6N;ega,iz;iGof7Hs8I;vGyn1R;ei9;aSri1;aPeNiJoGune50ym2;rHvGwak;ak4Qik5otn66;odahl,r4S;cholsZeHkolGls4Jx3;ic,ov84;ls1miG;!n1;ils3mG;co4Xec;gy,kaGray2sh,var38;jiGmu9shiG;ma;a07c04eZiWoMuHyeG;rs;lJnIrGssoli6S;atGp03r7C;i,ov4;oz,te58;d0l0;h2lOnNo0RrHsGza1A;er,s;aKeJiIoz5risHtG;e56on;!on;!n7K;au,i9no,t5J;!lA;r1Btgome59;i3El0;cracFhhail5kkeHlG;l0os64;ls1;hmeJiIj30lHn3Krci0ssiGyer2N;!er;n0Po;er,j0;dDti;cartHlG;aughl8e2;hy;dQe7Egnu68i0jer3TkPmNnMrItHyG;er,r;ei,ic,su21thews;iHkDquAroqu8tinG;ez,s;a5Xc,nG;!o;ci5Vn;a5UmG;ad5;ar5e6Kin1;rig77s1;aVeOiLoJuHyG;!nch;k4nGo;d,gu;mbarGpe3Fvr4we;di;!nGu,yana2B;coln,dG;b21holm,strom;bedEfeKhIitn0kaHn8rGw35;oy;!j;m11tG;in1on1;bvGvG;re;iGmmy,ng,rs2Qu,voie,ws3;ne,t1F;aZeYh2iWlUnez50oNrJuHvar2woG;k,n;cerGmar68znets5;a,o34;aHem0isGyeziu;h23t3O;m0sni4Fus3KvG;ch4O;bay57ch,rh0Usk16vaIwalGzl5;czGsC;yk;cIlG;!cGen4K;huk;!ev4ic,s;e8uiveG;rt;eff0kGl4mu9nnun1;ucF;ll0nnedy;hn,llKminsCne,pIrHstra3Qto,ur,yGzl5;a,s0;j0Rls22;l2oG;or;oe;aPenOha6im14oHuG;ng,r4;e32hInHrge32u6vG;anD;es,ss3;anHnsG;en,on,t3;nesGs1R;en,s1;kiBnings,s1;cJkob4EnGrv0E;kDsG;en,sG;en0Ion;ks3obs2A;brahimDglesi5Nke5Fl0Qno07oneIshikHto,vanoG;u,v54;awa;scu;aVeOiNjaltal8oIrist50uG;!aGb0ghAynh;m2ng;a6dz4fIjgaa3Hk,lHpUrGwe,x3X;ak1Gvat;mAt;er,fm3WmG;ann;ggiBtchcock;iJmingw4BnHrGss;nand7re9;deGriks1;rs3;kkiHnG;on1;la,n1;dz4g1lvoQmOns0ZqNrMsJuIwHyG;asFes;kiB;g1ng;anHhiG;mo14;i,ov0J;di6p0r10t;ue;alaG;in1;rs1;aVeorgUheorghe,iSjonRoLrJuGw3;errGnnar3Co,staf3Ctierr7zm2;a,eG;ro;ayli6ee2Lg4iffithGub0;!s;lIme0UnHodGrbachE;e,m2;calvAzale0S;dGubE;bGs0E;erg;aj,i;bs3l,mGordaO;en7;iev3U;gnMlJmaIndFo,rGsFuthi0;cGdn0za;ia;ge;eaHlG;agh0i,o;no;e,on;aVerQiLjeldsted,lKoIrHuG;chs,entAji41ll0;eem2iedm2;ntaGrt8urni0wl0;na;emi6orA;lipIsHtzgeraG;ld;ch0h0;ovG;!ic;hatDnanIrG;arGei9;a,i;deY;ov4;b0rre1D;dKinsJriksIsGvaB;cob3GpGtra3D;inoza,osiQ;en,s3;te8;er,is3warG;ds;aXePiNjurhuMoKrisco15uHvorakG;!oT;arte,boHmitru,nn,rGt3C;and,ic;is;g2he0Omingu7nErd1ItG;to;us;aGcki2Hmitr2Ossanayake,x3;s,z; JbnaIlHmirGrvisFvi,w2;!ov4;gado,ic;th;bo0groot,jo6lHsilGvriA;va;a cruz,e3uG;ca;hl,mcevsCnIt2WviG;dGes,s;ov,s3;ielsGku22;!en;ki;a0Be06hRiobQlarkPoIrGunningh1H;awfo0RivGuz;elli;h1lKntJoIrGs2Nx;byn,reG;a,ia;ke,p0;i,rer2K;em2liB;ns;!e;anu;aOeMiu,oIristGu6we;eGiaG;ns1;i,ng,p9uHwGy;!dH;dGng;huJ;!n,onGu6;!g;kJnIpm2ttHudhGv7;ry;erjee,o14;!d,g;ma,raboG;rty;bJl0Cng4rG;eghetHnG;a,y;ti;an,ota1C;cerAlder3mpbeLrIstGvadi0B;iGro;llo;doHl0Er,t0uGvalho;so;so,zo;ll;a0Fe01hYiXlUoNrKuIyG;rLtyG;qi;chan2rG;ke,ns;ank5iem,oGyant;oks,wG;ne;gdan5nIruya,su,uchaHyKziG;c,n5;rd;darGik;enG;ko;ov;aGond15;nco,zG;ev4;ancFshw16;a08oGuiy2;umGwmG;ik;ckRethov1gu,ktPnNrG;gJisInG;ascoGds1;ni;ha;er,mG;anG;!n;gtGit7nP;ss3;asF;hi;er,hG;am;b4ch,ez,hRiley,kk0ldw8nMrIshHtAu0;es;ir;bInHtlGua;ett;es,i0;ieYosa;dGik;a9yoG;padhyG;ay;ra;k,ng;ic;bb0Acos09d07g04kht05lZnPrLsl2tJyG;aHd8;in;la;chis3kiG;ns3;aImstro6sl2;an;ng;ujo,ya;dJgelHsaG;ri;ovG;!a;ersJov,reG;aGjEws;ss1;en;en,on,s3;on;eksejEiyEmeiIvG;ar7es;ez;da;ev;arwHuilG;ar;al;ams,l0;er;ta;as",Ordinal:"true¦eBf7nin5s3t0zeroE;enDhir1we0;lfCn7;d,t3;e0ixt8;cond,vent7;et0th;e6ie7;i2o0;r0urt3;tie4;ft1rst;ight0lev1;e0h,ie1;en0;th",Cardinal:"true¦bEeBf5mEnine7one,s4t0zero;en,h2rDw0;e0o;lve,n5;irt6ousands,ree;even2ix2;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illions",Multiple:"true¦b3hundred,m3qu2se1t0;housand,r2;pt1xt1;adr0int0;illion",City:"true¦0:74;1:61;2:6G;3:6J;4:5S;a68b53c4Id48e44f3Wg3Hh39i31j2Wk2Fl23m1Mn1Co19p0Wq0Ur0Os05tRuQvLwDxiBy9z5;a7h5i4Muri4O;a5e5ongsh0;ng3H;greb,nzib5G;ang2e5okoha3Sunfu;katerin3Hrev0;a5n0Q;m5Hn;arsBeAi6roclBu5;h0xi,zh5P;c7n5;d5nipeg,terth4;hoek,s1L;hi5Zkl3A;l63xford;aw;a8e6i5ladivost5Molgogr6L;en3lni6S;ni22r5;o3saill4N;lenc4Wncouv3Sr3ughn;lan bat1Crumqi,trecht;aFbilisi,eEheDiBo9r7u5;l21n63r5;in,ku;i5ondh62;es51poli;kyo,m2Zron1Pulo5;n,uS;an5jua3l2Tmisoa6Bra3;j4Tshui; hag62ssaloni2H;gucigal26hr0l av1U;briz,i6llinn,mpe56ng5rtu,shk2R;i3Esh0;an,chu1n0p2Eyu0;aEeDh8kopje,owe1Gt7u5;ra5zh4X;ba0Ht;aten is55ockholm,rasbou67uttga2V;an8e6i5;jiazhua1llo1m5Xy0;f50n5;ya1zh4H;gh3Kt4Q;att45o1Vv44;cramen16int ClBn5o paulo,ppo3Rrajevo; 7aa,t5;a 5o domin3E;a3fe,m1M;antonio,die3Cfrancisco,j5ped3Nsalvad0J;o5u0;se;em,t lake ci5Fz25;lou58peters24;a9e8i6o5;me,t59;ga,o5yadh;! de janei3F;cife,ims,nn3Jykjavik;b4Sip4lei2Inc2Pwalpindi;ingdao,u5;ez2i0Q;aFeEhDiCo9r7u6yong5;ya1;eb59ya1;a5etor3M;g52to;rt5zn0; 5la4Co;au prin0Melizabe24sa03;ls3Prae5Atts26;iladelph3Gnom pe1Aoenix;ki1tah tik3E;dua,lerYnaji,r4Ot5;na,r32;ak44des0Km1Mr6s5ttawa;a3Vlo;an,d06;a7ew5ing2Fovosibir1Jyc; 5cast36;del24orlea44taip14;g8iro4Wn5pl2Wshv33v0;ch6ji1t5;es,o1;a1o1;a6o5p4;ya;no,sa0W;aEeCi9o6u5;mb2Ani26sc3Y;gadishu,nt6s5;c13ul;evideo,pelli1Rre2Z;ami,l6n14s5;kolc,sissauga;an,waukee;cca,d5lbour2Mmph41ndo1Cssi3;an,ell2Xi3;cau,drAkass2Sl9n8r5shh4A;aca6ib5rakesh,se2L;or;i1Sy;a4EchFdal0Zi47;mo;id;aDeAi8o6u5vSy2;anMckn0Odhia3;n5s angel26;d2g bea1N;brev2Be3Lma5nz,sb2verpo28;!ss27; ma39i5;c5pzig;est16; p6g5ho2Wn0Cusan24;os;az,la33;aHharFiClaipeBo9rak0Du7y5;iv,o5;to;ala lump4n5;mi1sh0;hi0Hlka2Xpavog4si5wlo2;ce;da;ev,n5rkuk;gst2sha5;sa;k5toum;iv;bHdu3llakuric0Qmpa3Fn6ohsiu1ra5un1Iwaguc0Q;c0Pj;d5o,p4;ah1Ty;a7e6i5ohannesV;l1Vn0;dd36rusalem;ip4k5;ar2H;bad0mph1OnArkutUs7taXz5;mir,tapala5;pa;fah0l6tanb5;ul;am2Zi2H;che2d5;ianap2Mo20;aAe7o5yder2W; chi mi5ms,nolulu;nh;f6lsin5rakli2;ki;ei;ifa,lifax,mCn5rb1Dva3;g8nov01oi;aFdanEenDhCiPlasgBo9raz,u5;a5jr23;dal6ng5yaquil;zh1J;aja2Oupe;ld coa1Bthen5;bu2S;ow;ent;e0Uoa;sk;lw7n5za;dhi5gt1E;nag0U;ay;aisal29es,o8r6ukuya5;ma;ankfu5esno;rt;rt5sh0; wor6ale5;za;th;d5indhov0Pl paso;in5mont2;bur5;gh;aBe8ha0Xisp4o7resd0Lu5;b5esseldorf,nkirk,rb0shanbe;ai,l0I;ha,nggu0rtmu13;hradSl6nv5troit;er;hi;donghIe6k09l5masc1Zr es sala1KugavpiY;i0lU;gu,je2;aJebu,hAleve0Vo5raio02uriti1Q;lo7n6penhag0Ar5;do1Ok;akKst0V;gUm5;bo;aBen8i6ongqi1ristchur5;ch;ang m7ca5ttago1;go;g6n5;ai;du,zho1;ng5ttogr14;ch8sha,zh07;gliari,i9lga8mayenJn6pe town,r5tanO;acCdiff;ber1Ac5;un;ry;ro;aWeNhKirmingh0WoJr9u5;chareTdapeTenos air7r5s0tu0;g5sa;as;es;a9is6usse5;ls;ba6t5;ol;ne;sil8tisla7zzav5;il5;le;va;ia;goZst2;op6ubaneshw5;ar;al;iCl9ng8r5;g6l5n;in;en;aluru,hazi;fa6grade,o horizon5;te;st;ji1rut;ghd0BkFn9ot8r7s6yan n4;ur;el,r07;celo3i,ranquil09;ou;du1g6ja lu5;ka;alo6k5;ok;re;ng;ers5u;field;a05b02cc01ddis aba00gartaZhmedXizawl,lSmPnHqa00rEsBt7uck5;la5;nd;he7l5;an5;ta;ns;h5unci2;dod,gab5;at;li5;ngt2;on;a8c5kaOtwerp;hora6o3;na;ge;h7p5;ol5;is;eim;aravati,m0s5;terd5;am; 7buquerq6eppo,giers,ma5;ty;ue;basrah al qadim5mawsil al jadid5;ah;ab5;ad;la;ba;ra;idj0u dha5;bi;an;lbo6rh5;us;rg",Region:"true¦0:2O;1:2L;2:2U;3:2F;a2Sb2Fc21d1Wes1Vf1Tg1Oh1Ki1Fj1Bk16l13m0Sn09o07pYqVrSsJtEuBverAw6y4zacatec2W;akut0o0Fu4;cat1k09;a5est 4isconsin,yomi1O;bengal,virgin0;rwick3shington4;! dc;acruz,mont;dmurt0t4;ah,tar4; 2Pa12;a6e5laxca1Vripu21u4;scaEva;langa2nnessee,x2J;bas10m4smQtar29;aulip2Hil nadu;a9elang07i7o5taf16u4ylh1J;ff02rr09s1E;me1Gno1Uuth 4;cZdY;ber0c4kkim,naloa;hu1ily;n5rawak,skatchew1xo4;ny; luis potosi,ta catari2;a4hodeA;j4ngp0C;asth1shahi;ingh29u4;e4intana roo;bec,en6retaro;aAe6rince edward4unjab; i4;sl0G;i,n5r4;ak,nambu0F;a0Rnsylv4;an0;ha0Pra4;!na;axa0Zdisha,h4klaho21ntar4reg7ss0Dx0I;io;aLeEo6u4;evo le4nav0X;on;r4tt18va scot0;f9mandy,th4; 4ampton3;c6d5yo4;rk3;ako1O;aroli2;olk;bras1Nva0Dw4; 6foundland4;! and labrad4;or;brunswick,hamp3jers5mexiTyork4;! state;ey;galPyarit;aAeghala0Mi6o4;nta2r4;dov0elos;ch6dlanDn5ss4zor11;issippi,ouri;as geraPneso18;ig1oac1;dhy12harasht0Gine,lac07ni5r4ssachusetts;anhao,i el,ylG;p4toba;ur;anca3e4incoln3ouisI;e4iR;ds;a6e5h4omi;aka06ul2;dah,lant1ntucky,ra01;bardino,lmyk0ns0Qr4;achay,el0nata0X;alis6har4iangxi;kh4;and;co;daho,llino7n4owa;d5gush4;et0;ia2;is;a6ert5i4un1;dalFm0D;ford3;mp3rya2waii;ansu,eorg0lou7oa,u4;an4izhou,jarat;ajuato,gdo4;ng;cester3;lori4uji1;da;sex;ageUe7o5uran4;go;rs4;et;lawaMrby3;aFeaEh9o4rim08umbr0;ahui7l6nnectic5rsi4ventry;ca;ut;i03orado;la;e5hattisgarh,i4uvash0;apRhuahua;chn5rke4;ss0;ya;ra;lGm4;bridge3peche;a9ihar,r8u4;ck4ryat0;ingham3;shi4;re;emen,itish columb0;h0ja cal8lk7s4v7;hkorto4que;st1;an;ar0;iforn0;ia;dygHguascalientes,lBndhr9r5ss4;am;izo2kans5un4;achal 7;as;na;a 4;pradesh;a6ber5t4;ai;ta;ba5s4;ka;ma;ea",Place:"true¦0:4T;1:4V;2:44;3:4B;4:3I;a4Eb3Gc2Td2Ge26f25g1Vh1Ji1Fk1Cl14m0Vn0No0Jp08r04sTtNuLvJw7y5;a5o0Syz;kut1Bngtze;aDeChitBi9o5upatki,ycom2P;ki26o5;d5l1B;b3Ps5;i4to3Y;c0SllowbroCn5;c2Qgh2;by,chur1P;ed0ntw3Gs22;ke6r3St5;erf1f1; is0Gf3V;auxha3Mirgin is0Jost5;ok;laanbaatar,pto5xb3E;n,wn;a9eotihuac43h7ive49o6ru2Nsarskoe selo,u5;l2Dzigo47;nto,rquay,tt2J;am3e 5orn3E;bronx,hamptons;hiti,j mah0Iu1N;aEcotts bluff,eCfo,herbroQoApring9t7u5yd2F;dbu1Wn5;der03set3B;aff1ock2Nr5;atf1oud;hi37w24;ho,uth5; 1Iam1Zwo3E;a5i2O;f2Tt0;int lawrence riv3Pkhal2D;ayleigh,ed7i5oc1Z;chmo1Eo gran4ver5;be1Dfr09si4; s39cliffe,hi2Y;aCe9h8i5ompeii,utn2;c6ne5tcai2T; 2Pc0G;keri13t0;l,x;k,lh2mbr6n5r2J;n1Hzance;oke;cif38pahanaumokuak30r5;k5then0;si4w1K;ak7r6x5;f1l2X;ange county,d,f1inoco;mTw1G;e8i1Uo5;r5tt2N;th5wi0E; 0Sam19;uschwanste1Pw5; eng6a5h2market,po36;rk;la0P;a8co,e6i5uc;dt1Yll0Z;adow5ko0H;lands;chu picchu,gad2Ridsto1Ql8n7ple6r5;kh2; g1Cw11;hatt2Osf2B;ibu,t0ve1Z;a8e7gw,hr,in5owlOynd02;coln memori5dl2C;al;asi4w3;kefr7mbe1On5s,x;ca2Ig5si05;f1l27t0;ont;azan kreml14e6itchen2Gosrae,rasnoyar5ul;sk;ns0Hs1U;ax,cn,lf1n6ps5st;wiN;d5glew0Lverness;ian27ochina;aDeBi6kg,nd,ov5unti2H;d,enweep;gh6llc5;reL;bu03l5;and5;!s;r5yw0C;ef1tf1;libu24mp6r5stings;f1lem,row;stead,t0;aDodavari,r5uelph;avenAe5imsS;at 8en5; 6f1Fwi5;ch;acr3vall1H;brita0Flak3;hur5;st;ng3y villa0W;airhavHco,ra;aAgli9nf17ppi8u7ver6x5;et1Lf1;glad3t0;rope,st0;ng;nt0;rls1Ls5;t 5;e5si4;nd;aCe9fw,ig8o7ryd6u5xb;mfri3nstab00rh2tt0;en;nca18rcKv19wnt0B;by;n6r5vonpo1D;ry;!h2;nu8r5;l6t5;f1moor;ingt0;be;aLdg,eIgk,hClBo5royd0;l6m5rnwa0B;pt0;c7lingw6osse5;um;ood;he0S;earwat0St;a8el6i5uuk;chen itza,mney ro07natSricahua;m0Zt5;enh2;mor5rlottetPth2;ro;dar 5ntervilA;breaks,faZg5;rove;ld9m8r5versh2;lis6rizo pla5;in;le;bLpbellf1;weQ;aZcn,eNingl01kk,lackLolt0r5uckV;aGiAo5;ckt0ok5wns cany0;lyn,s5;i4to5;ne;de;dge6gh5;am,t0;n6t5;own;or5;th;ceb6m5;lNpt0;rid5;ge;bu5pool,wa8;rn;aconsfEdf1lBr9verly7x5;hi5;ll; hi5;lls;wi5;ck; air,l5;ingh2;am;ie5;ld;ltimore,rnsl6tters5;ea;ey;bLct0driadic,frica,ginJlGmFn9rc8s7tl6yleOzor3;es;!ant8;hcroft,ia; de triomphe,t6;adyr,ca8dov9tarct5;ic5; oce5;an;st5;er;ericas,s;be6dersh5hambra,list0;ot;rt0;cou5;rt;bot7i5;ngd0;on;sf1;ord",Country:"true¦0:38;1:2L;2:3B;a2Xb2Ec22d1Ye1Sf1Mg1Ch1Ai14j12k0Zl0Um0Gn05om2pZqat1KrXsKtCu7v5wal4yemTz3;a25imbabwe;es,lis and futu2Y;a3enezue32ietnam;nuatu,tican city;gTk6nited 4ruXs3zbeE; 2Ca,sr;arab emirat0Kkingdom,states3;! of am2Y;!raiV;a8haCimor les0Co7rinidad 5u3;nis0rk3valu;ey,me2Zs and caic1V;and t3t3;oba1L;go,kel10nga;iw2ji3nz2T;ki2V;aDcotl1eCi9lov8o6pa2Dri lanka,u5w3yr0;az3edAitzerl1;il1;d2riname;lomon1Xmal0uth 3;afr2KkMsud2;ak0en0;erra leoFn3;gapo1Yt maart3;en;negLrb0ychellZ;int 3moa,n marino,udi arab0;hele26luc0mart21;epublic of ir0Eom2Euss0w3;an27;a4eIhilippinUitcairn1Mo3uerto riN;l1rtugF;ki2Dl4nama,pua new0Vra3;gu7;au,esti3;ne;aBe9i7or3;folk1Ith4w3;ay; k3ern mariana1D;or0O;caragua,ger3ue;!ia;p3ther1Aw zeal1;al;mib0u3;ru;a7exi6icro0Bo3yanm06;ldova,n3roc5zambA;a4gol0t3;enegro,serrat;co;cAdagasc01l7r5urit4yot3;te;an0i16;shall0Xtin3;ique;a4div3i,ta;es;wi,ys0;ao,ed02;a6e5i3uxembourg;b3echtenste12thu1G;er0ya;ban0Isotho;os,tv0;azakh1Fe4iriba04o3uwait,yrgyz1F;rXsovo;eling0Knya;a3erG;ma16p2;c7nd6r4s3taly,vory coast;le of m2rael;a3el1;n,q;ia,oJ;el1;aiTon3ungary;dur0Ng kong;aBermany,ha0QibraltAre8u3;a6ern5inea3ya0P;! biss3;au;sey;deloupe,m,tema0Q;e3na0N;ce,nl1;ar;bUmb0;a7i6r3;ance,ench 3;guia0Epoly3;nes0;ji,nl1;lklandUroeU;ast tim7cu6gypt,l salv6ngl1quatorial4ritr5st3thiop0;on0; guin3;ea;ad3;or;enmark,jibou5ominica4r con3;go;!n C;ti;aBentral african Ah8o5roat0u4yprRzech3; 9ia;ba,racao;c4lo3morQngo brazzaville,okGsta r04te de ivoiL;mb0;osE;i3ristmasG;le,na;republic;m3naUpe verde,ymanA;bod0ero3;on;aGeDhut2o9r5u3;lgar0r3;kina faso,ma,undi;azil,itish 3unei;virgin3; is3;lands;liv0nai5snia and herzegoviHtswaHuvet3; isl1;and;re;l3n8rmuG;ar3gium,ize;us;h4ngladesh,rbad3;os;am4ra3;in;as;fghaGlDmBn6r4ustr3zerbaij2;al0ia;genti3men0uba;na;dorra,g5t3;arct7igua and barbu3;da;o3uil3;la;er3;ica;b3ger0;an0;ia;ni3;st2;an",FirstName:"true¦aTblair,cQdOfrancoZgabMhinaLilya,jHkClBm6ni4quinn,re3s0;h0umit,yd;ay,e0iloh;a,lby;g9ne;co,ko0;!s;a1el0ina,org6;!okuhF;ds,naia,r1tt0xiB;i,y;ion,lo;ashawn,eif,uca;a3e1ir0rM;an;lsFn0rry;dall,yat5;i,sD;a0essIie,ude;i1m0;ie,mG;me;ta;rie0y;le;arcy,ev0;an,on;as1h0;arl8eyenne;ey,sidy;drien,kira,l4nd1ubr0vi;ey;i,r0;a,e0;a,y;ex2f1o0;is;ie;ei,is",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦dec0february,july,nov0octo1sept0;em0;ber",Date:"true¦ago,on4som4t1week0yesterd5; end,ends;mr1o0;d2morrow;!w;ed0;ay",Duration:"true¦centurAd8h7m5q4se3w1y0;ear8r8;eek0k7;!end,s;ason,c5;tr,uarter;i0onth3;llisecond2nute2;our1r1;ay0ecade0;!s;ies,y",FemaleName:"true¦0:J7;1:JB;2:IJ;3:IK;4:J1;5:IO;6:JS;7:JO;8:HB;9:JK;A:H4;B:I2;C:IT;D:JH;E:IX;F:BA;G:I4;aGTbFLcDRdD0eBMfB4gADh9Ti9Gj8Dk7Cl5Wm48n3Lo3Hp33qu32r29s15t0Eu0Cv02wVxiTyOzH;aLeIineb,oHsof3;e3Sf3la,ra;h2iKlIna,ynH;ab,ep;da,ma;da,h2iHra;nab;aKeJi0FolB7uIvH;et8onDP;i0na;le0sen3;el,gm3Hn,rGLs8W;aoHme0nyi;m5XyAD;aMendDZhiDGiH;dele9lJnH;if48niHo0;e,f47;a,helmi0lHma;a,ow;ka0nB;aNeKiHusa5;ck84kIl8oleAviH;anFenJ4;ky,toriBK;da,lA8rHs0;a,nHoniH9;a,iFR;leHnesH9;nILrH;i1y;g9rHs6xHA;su5te;aYeUhRiNoLrIuHy2;i,la;acJ3iHu0J;c3na,sH;hFta;nHr0F;iFya;aJffaEOnHs6;a,gtiH;ng;!nFSra;aIeHomasi0;a,l9Oo8Ares1;l3ndolwethu;g9Fo88rIssH;!a,ie;eHi,ri7;sa,za;bOlMmKnIrHs6tia0wa0;a60yn;iHya;a,ka,s6;arFe2iHm77ra;!ka;a,iH;a,t6;at6it6;a0Ecarlett,e0AhWiSkye,neza0oQri,tNuIyH;bIGlvi1;ha,mayIJniAsIzH;an3Net8ie,y;anHi7;!a,e,nH;aCe;aIeH;fan4l5Dphan6E;cI5r5;b3fiAAm0LnHphi1;d2ia,ja,ya;er2lJmon1nIobh8QtH;a,i;dy;lETv3;aMeIirHo0risFDy5;a,lDM;ba,e0i5lJrH;iHr6Jyl;!d8Ifa;ia,lDZ;hd,iMki2nJrIu0w0yH;la,ma,na;i,le9on,ron,yn;aIda,ia,nHon;a,on;!ya;k6mH;!aa;lJrItaye82vH;da,inj;e0ife;en1i0ma;anA9bLd5Oh1SiBkKlJmInd2rHs6vannaC;aCi0;ant6i2;lDOma,ome;ee0in8Tu2;in1ri0;a05eZhXiUoHuthDM;bScRghQl8LnPsJwIxH;anB3ie,y;an,e0;aIeHie,lD;ann7ll1marDGtA;!lHnn1;iHyn;e,nH;a,dF;da,i,na;ayy8G;hel67io;bDRerAyn;a,cIkHmas,nFta,ya;ki,o;h8Xki;ea,iannGMoH;da,n1P;an0bJemFgi0iInHta,y0;a8Bee;han86na;a,eH;cHkaC;a,ca;bi0chIe,i0mo0nHquETy0;di,ia;aERelHiB;!e,le;een4ia0;aPeOhMiLoJrHute6A;iHudenCV;scil3LyamvaB;lHrt3;i0ly;a,paluk;ilome0oebe,ylH;is,lis;ggy,nelope,r5t2;ige,m0VnKo5rvaDMtIulH;a,et8in1;ricHt4T;a,e,ia;do2i07;ctav3dIfD3is6ksa0lHphD3umC5yunbileg;a,ga,iv3;eHvAF;l3t8;aWeUiMoIurHy5;!ay,ul;a,eJor,rIuH;f,r;aCeEma;ll1mi;aNcLhariBQkKlaJna,sHta,vi;anHha;ur;!y;a,iDZki;hoGk9YolH;a,e4P;!mh;hir,lHna,risDEsreE;!a,iDDlBV;asuMdLh3i6Dl5nKomi7rgEVtH;aHhal4;lHs6;i1ya;cy,et8;e9iF0ya;nngu2X;a0Ackenz4e02iMoJrignayani,uriDJyH;a,rH;a,iOlNna,tG;bi0i2llBJnH;a,iH;ca,ka,qD9;a,cUdo4ZkaTlOmi,nMrItzi,yH;ar;aJiIlH;anET;am;!l,nB;dy,eHh,n4;nhGrva;aKdJe0iCUlH;iHy;cent,e;red;!gros;!e5;ae5hH;ae5el3Z;ag5DgNi,lKrH;edi7AiIjem,on,yH;em,l;em,sCG;an4iHliCF;nHsCJ;a,da;!an,han;b09cASd07e,g05ha,i04ja,l02n00rLsoum5YtKuIv84xBKyHz4;bell,ra,soBB;d7rH;a,eE;h8Gild1t4;a,cUgQiKjor4l7Un4s6tJwa,yH;!aHbe6Xja9lAE;m,nBL;a,ha,in1;!aJbCGeIja,lDna,sHt63;!a,ol,sa;!l1D;!h,mInH;!a,e,n1;!awit,i;arJeIie,oHr48ueri8;!t;!ry;et46i3B;el4Xi7Cy;dHon,ue5;akranAy;ak,en,iHlo3S;a,ka,nB;a,re,s4te;daHg4;!l3E;alDd4elHge,isDJon0;ei9in1yn;el,le;a0Ne0CiXoQuLyH;d3la,nH;!a,dIe2OnHsCT;!a,e2N;a,sCR;aD4cJel0Pis1lIna,pHz;e,iA;a,u,wa;iHy;a0Se,ja,l2NnB;is,l1UrItt1LuHvel4;el5is1;aKeIi7na,rH;aADi7;lHn1tA;ei;!in1;aTbb9HdSepa,lNnKsJvIzH;!a,be5Ret8z4;!ia;a,et8;!a,dH;a,sHy;ay,ey,i,y;a,iJja,lH;iHy;aA8e;!aH;!nF;ia,ya;!nH;!a,ne;aPda,e0iNjYla,nMoKsJtHx93y5;iHt4;c3t3;e2PlCO;la,nHra;a,ie,o2;a,or1;a,gh,laH;!ni;!h,nH;a,d2e,n5V;cOdon9DiNkes6mi9Gna,rMtJurIvHxmi,y5;ern1in3;a,e5Aie,yn;as6iIoH;nya,ya;fa,s6;a,isA9;a,la;ey,ie,y;a04eZhXiOlASoNrJyH;lHra;a,ee,ie;istHy6I;a,en,iIyH;!na;!e,n5F;nul,ri,urtnB8;aOerNlB7mJrHzzy;a,stH;en,in;!berlImernH;aq;eHi,y;e,y;a,stE;!na,ra;aHei2ongordzol;dij1w5;el7UiKjsi,lJnIrH;a,i,ri;d2na,za;ey,i,lBLs4y;ra,s6;biAcARdiat7MeBAiSlQmPnyakuma1DrNss6NtKviAyH;!e,lH;a,eH;e,i8T;!a6HeIhHi4TlDri0y;ar8Her8Hie,leErBAy;!lyn8Ori0;a,en,iHl5Xoli0yn;!ma,nFs95;a5il1;ei8Mi,lH;e,ie;a,tl6O;a0AeZiWoOuH;anMdLlHst88;es,iH;a8NeHs8X;!n9tH;!a,te;e5Mi3My;a,iA;!anNcelDdMelGhan7VleLni,sIva0yH;a,ce;eHie;fHlDph7Y;a,in1;en,n1;i7y;!a,e,n45;lHng;!i1DlH;!i1C;anNle0nKrJsH;i8JsH;!e,i8I;i,ri;!a,elGif2CnH;a,et8iHy;!e,f2A;a,eJiInH;a,eIiH;e,n1;!t8;cMda,mi,nIque4YsminFvie2y9zH;min7;a7eIiH;ce,e,n1s;!lHs82t0F;e,le;inIk6HlDquelH;in1yn;da,ta;da,lRmPnOo0rNsIvaHwo0zaro;!a0lu,na;aJiIlaHob89;!n9R;do2;belHdo2;!a,e,l3B;a7Ben1i0ma;di2es,gr72ji;a9elBogH;en1;a,e9iHo0se;a0na;aSeOiJoHus7Kyacin2C;da,ll4rten24snH;a,i9U;lImaH;ri;aIdHlaI;a,egard;ry;ath1BiJlInrietArmi9sH;sa,t1A;en2Uga,mi;di;bi2Fil8MlNnMrJsItHwa,yl8M;i5Tt4;n60ti;iHmo51ri53;etH;!te;aCnaC;a,ey,l4;a02eWiRlPoNrKunJwH;enHyne1R;!dolD;ay,el;acieIetHiselB;a,chE;!la;ld1CogooH;sh;adys,enHor3yn2K;a,da,na;aKgi,lIna,ov8EselHta;a,e,le;da,liH;an;!n0;mLnJorgIrH;ald5Si,m3Etrud7;et8i4X;a,eHna;s29vieve;ma;bIle,mHrnet,yG;al5Si5;iIrielH;a,l1;!ja;aTeQiPlorOoz3rH;anJeIiH;da,eB;da,ja;!cH;esIiHoi0P;n1s66;!ca;a,enc3;en,o0;lIn0rnH;anB;ec3ic3;jr,nArKtHy7;emIiHma,oumaA;ha,ma,n;eh;ah,iBrah,za0;cr4Rd0Re0Qi0Pk0Ol07mXn54rUsOtNuMvHwa;aKelIiH;!e,ta;inFyn;!a;!ngel4V;geni1ni47;h5Yien9ta;mLperanKtH;eIhHrel5;er;l31r7;za;a,eralB;iHma,ne4Lyn;cHka,n;a,ka;aPeNiKmH;aHe21ie,y;!li9nuH;elG;lHn1;e7iHy;a,e,ja;lHrald;da,y;!nue5;aWeUiNlMma,no2oKsJvH;a,iH;na,ra;a,ie;iHuiH;se;a,en,ie,y;a0c3da,e,f,nMsJzaH;!betHveA;e,h;aHe,ka;!beH;th;!a,or;anor,nH;!a,i;!in1na;ate1Rta;leEs6;vi;eIiHna,wi0;e,th;l,n;aYeMh3iLjeneKoH;lor5Vminiq4Ln3FrHtt4;a,eEis,la,othHthy;ea,y;ba;an09naCon9ya;anQbPde,eOiMlJmetr3nHsir5M;a,iH;ce,se;a,iIla,orHphi9;es,is;a,l6F;dHrdH;re;!d5Ena;!b2ForaCraC;a,d2nH;!a,e;hl3i0l0GmNnLphn1rIvi1WyH;le,na;a,by,cIia,lH;a,en1;ey,ie;a,et8iH;!ca,el1Aka,z;arHia;is;a0Re0Nh04i02lUoJristIynH;di,th3;al,i0;lPnMrIurH;tn1D;aJd2OiHn2Ori9;!nH;a,e,n1;!l4;cepci5Cn4sH;tanHuelo;ce,za;eHleE;en,t8;aJeoIotH;il54;!pat2;ir7rJudH;et8iH;a,ne;a,e,iH;ce,sZ;a2er2ndH;i,y;aReNloe,rH;isJyH;stH;al;sy,tH;a1Sen,iHy;an1e,n1;deJlseIrH;!i7yl;a,y;li9;nMrH;isKlImH;ai9;a,eHot8;n1t8;!sa;d2elGtH;al,elG;cIlH;es8i47;el3ilH;e,ia,y;itlYlXmilWndVrMsKtHy5;aIeIhHri0;er1IleErDy;ri0;a38sH;a37ie;a,iOlLmeJolIrH;ie,ol;!e,in1yn;lHn;!a,la;a,eIie,otHy;a,ta;ne,y;na,s1X;a0Ii0I;a,e,l1;isAl4;in,yn;a0Ke02iZlXoUrH;andi7eRiJoIyH;an0nn;nwDoke;an3HdgMgiLtH;n31tH;!aInH;ey,i,y;ny;d,t8;etH;!t7;an0e,nH;da,na;bbi7glarIlo07nH;iAn4;ka;ancHythe;a,he;an1Clja0nHsm3M;iAtH;ou;aWcVlinUniArPssOtJulaCvH;!erlH;ey,y;hJsy,tH;e,iHy7;e,na;!anH;ie,y;!ie;nItHyl;ha,ie;adIiH;ce;et8i9;ay,da;ca,ky;!triH;ce,z;rbJyaH;rmH;aa;a2o2ra;a2Ub2Od25g21i1Sj5l18m0Zn0Boi,r06sWtVuPvOwa,yIzH;ra,u0;aKes6gJlIn,seH;!l;in;un;!nH;a,na;a,i2K;drLguJrIsteH;ja;el3;stH;in1;a,ey,i,y;aahua,he0;hIi2Gja,miAs2DtrH;id;aMlIraqHt21;at;eIi7yH;!n;e,iHy;gh;!nH;ti;iJleIo6piA;ta;en,n1t8;aHelG;!n1J;a01dje5eZgViTjRnKohito,toHya;inet8nH;el5ia;te;!aKeIiHmJ;e,ka;!mHtt7;ar4;!belIliHmU;sa;!l1;a,eliH;ca;ka,sHta;a,sa;elHie;a,iH;a,ca,n1qH;ue;!tH;a,te;!bImHstasiMya;ar3;el;aLberKeliJiHy;e,l3naH;!ta;a,ja;!ly;hGiIl3nB;da;a,ra;le;aWba,ePiMlKthJyH;a,c3sH;a,on,sa;ea;iHys0N;e,s0M;a,cIn1sHza;a,e,ha,on,sa;e,ia,ja;c3is6jaKksaKna,sJxH;aHia;!nd2;ia,saH;nd2;ra;ia;i0nIyH;ah,na;a,is,naCoud;la;c6da,leEmNnLsH;haClH;inHyY;g,n;!h;a,o,slH;ey;ee;en;at6g4nIusH;ti0;es;ie;aWdiTelMrH;eJiH;anMenH;a,e,ne;an0;na;!aLeKiIyH;nn;a,n1;a,e;!ne;!iH;de;e,lDsH;on;yn;!lH;i9yn;ne;aKbIiHrL;!e,gaK;ey,i7y;!e;gaH;il;dKliyJradhIs6;ha;ya;ah;a,ya",Honorific:"true¦director1field marsh2lieutenant1rear0sergeant major,vice0; admir1; gener0;al","Adj|Gerund":"true¦0:3F;1:3H;2:31;3:2X;4:35;5:33;6:3C;7:2Z;8:36;9:29;a33b2Tc2Bd1Te1If19g12h0Zi0Rl0Nm0Gnu0Fo0Ap04rYsKtEuBvAw1Ayiel3;ar6e08;nBpA;l1Rs0B;fol3n1Zsett2;aEeDhrBi4ouc7rAwis0;e0Bif2oub2us0yi1;ea1SiA;l2vi1;l2mp0rr1J;nt1Vxi1;aMcreec7enten2NhLkyrocke0lo0Vmi2oJpHtDuBweA;e0Ul2;pp2ArA;gi1pri5roun3;aBea8iAri2Hun9;mula0r4;gge4rA;t2vi1;ark2eAraw2;e3llb2F;aAot7;ki1ri1;i9oc29;dYtisf6;aEeBive0oAus7;a4l2;assu4defi9fres7ig9juve07mai9s0vAwar3;ea2italiAol1G;si1zi1;gi1ll6mb2vi1;a6eDier23lun1VrAun2C;eBoA;mi5vo1Z;ce3s5vai2;n3rpleA;xi1;ffCpWutBverAwi1;arc7lap04p0Pri3whel8;goi1l6st1J;en3sA;et0;m2Jrtu4;aEeDiCoBuAyst0L;mb2;t1Jvi1;s5tiga0;an1Rl0n3smeri26;dAtu4;de9;aCeaBiAo0U;fesa0Tvi1;di1ni1;c1Fg19s0;llumiGmFnArri0R;cDfurHsCtBviA;go23ti1;e1Oimi21oxica0rig0V;pi4ul0;orpo20r0K;po5;na0;eaBorr02umilA;ia0;li1rtwar8;lFrA;atiDipCoBuelA;i1li1;undbrea10wi1;pi1;f6ng;a4ea8;a3etc7it0lEoCrBulfA;il2;ee1FighXust1L;rAun3;ebo3thco8;aCoA;a0wA;e4i1;mi1tte4;lectrJmHnExA;aCci0hBis0pA;an3lo3;aOila1B;c0spe1A;ab2coura0CdBergi13ga0Clive9ric7s02tA;hral2i0J;ea4u4;barras5er09pA;owe4;if6;aQeIiBrA;if0;sAzz6;aEgDhearCsen0tA;rAur11;ac0es5;te9;us0;ppoin0r8;biliGcDfi9gra3ligh0mBpres5sAvasG;erE;an3ea9orA;ali0L;a6eiBli9rA;ea5;vi1;ta0;maPri1s7un0zz2;aPhMlo5oAripp2ut0;mGnArrespon3;cer9fDspi4tA;inBrA;as0ibu0ol2;ui1;lic0u5;ni1;fDmCpA;eAromi5;l2ti1;an3;or0;aAil2;llenAnAr8;gi1;l8ptAri1;iva0;aff2eGin3lFoDrBuA;d3st2;eathtaAui5;ki1;gg2i2o8ri1unA;ci1;in3;co8wiA;lAtc7;de4;bsorVcOgonMlJmHnno6ppea2rFsA;pi4su4toA;nBun3;di1;is7;hi1;res0;li1;aFu5;si1;ar8lu4;ri1;mi1;iAzi1;zi1;cAhi1;eleDomA;moBpan6;yi1;da0;ra0;ti1;bi1;ng",Comparable:"true¦0:3C;1:3Q;2:3F;a3Tb3Cc33d2Te2Mf2Ag1Wh1Li1Fj1Ek1Bl13m0Xn0So0Rp0Iqu0Gr07sHtCug0vAw4y3za0Q;el10ouN;ary,e6hi5i3ry;ck0Cde,l3n1ry,se;d,y;ny,te;a3i3R;k,ry;a3erda2ulgar;gue,in,st;a6en2Xhi5i4ouZr3;anqu2Cen1ue;dy,g36me0ny;ck,rs28;ll,me,rt,wd3I;aRcaPeOhMiLkin0BlImGoEpDt6u4w3;eet,ift;b3dd0Wperfi21rre28;sta26t21;a8e7iff,r4u3;pUr1;a4ict,o3;ng;ig2Vn0N;a1ep,rn;le,rk,te0;e1Si2Vright0;ci1Yft,l3on,re;emn,id;a3el0;ll,rt;e4i3y;g2Mm0Z;ek,nd2T;ck24l0mp1L;a3iRrill,y;dy,l01rp;ve0Jxy;n1Jr3;ce,y;d,fe,int0l1Hv0V;a8e6i5o3ude;mantic,o19sy,u3;gh;pe,t1P;a3d,mo0A;dy,l;gg4iFndom,p3re,w;id;ed;ai2i3;ck,et;hoAi1Fl9o8r5u3;ny,r3;e,p11;egna2ic4o3;fouSud;ey,k0;liXor;ain,easa2;ny;dd,i0ld,ranL;aive,e5i4o3u14;b0Sisy,rm0Ysy;bb0ce,mb0R;a3r1w;r,t;ad,e5ild,o4u3;nda12te;ist,o1;a4ek,l3;low;s0ty;a8e7i6o3ucky;f0Jn4o15u3ve0w10y0N;d,sy;e0g;ke0l,mp,tt0Eve0;e1Qwd;me,r3te;ge;e4i3;nd;en;ol0ui19;cy,ll,n3;secu6t3;e3ima4;llege2rmedia3;te;re;aAe7i6o5u3;ge,m3ng1C;bYid;me0t;gh,l0;a3fXsita2;dy,rWv3;en0y;nd13ppy,r3;d3sh;!y;aFenEhCiBlAoofy,r3;a8e6i5o3ue0Z;o3ss;vy;m,s0;at,e3y;dy,n;nd,y;ad,ib,ooD;a2d1;a3o3;st0;tDuiS;u1y;aCeebBi9l8o6r5u3;ll,n3r0N;!ny;aCesh,iend0;a3nd,rmD;my;at,ir7;erce,nan3;ci9;le;r,ul3;ty;a6erie,sse4v3xtre0B;il;nti3;al;r4s3;tern,y;ly,th0;appZe9i5ru4u3;mb;nk;r5vi4z3;zy;ne;e,ty;a3ep,n9;d3f,r;!ly;agey,h8l7o5r4u3;dd0r0te;isp,uel;ar3ld,mmon,st0ward0zy;se;evKou1;e3il0;ap,e3;sy;aHiFlCoAr5u3;ff,r0sy;ly;a6i3oad;g4llia2;nt;ht;sh,ve;ld,un3;cy;a4o3ue;nd,o1;ck,nd;g,tt3;er;d,ld,w1;dy;bsu6ng5we3;so3;me;ry;rd",Adverb:"true¦a08b05d00eYfSheQinPjustOkinda,likewiZmMnJoEpCquite,r9s5t2u0very,well;ltima01p0; to,wards5;h1iny bit,o0wiO;o,t6;en,us;eldom,o0uch;!me1rt0; of;how,times,w0C;a1e0;alS;ndomRth05;ar excellenEer0oint blank; Lhaps;f3n0utright;ce0ly;! 0;ag05moX; courGten;ewJo0; longWt 0;onHwithstand9;aybe,eanwhiNore0;!ovT;! aboX;deed,steY;lla,n0;ce;or3u0;ck1l9rther0;!moK;ing; 0evK;exampCgood,suH;n mas0vI;se;e0irect2; 2fini0;te0;ly;juAtrop;ackward,y 0;far,no0; means,w; GbroFd nauseam,gEl7ny5part,s4t 2w0;ay,hi0;le;be7l0mo7wor7;arge,ea6; soon,i4;mo0way;re;l 3mo2ongsi1ready,so,togeth0ways;er;de;st;b1t0;hat;ut;ain;ad;lot,posteriori",Conjunction:"true¦aXbTcReNhowMiEjust00noBo9p8supposing,t5wh0yet;e1il0o3;e,st;n1re0thN; if,by,vM;evL;h0il,o;erefOo0;!uU;lus,rovided th9;r0therwiM;! not; mattEr,w0;! 0;since,th4w7;f4n0; 0asmuch;as mIcaForder t0;h0o;at;! 0;only,t0w0;hen;!ev3;ith2ven0;! 0;if,tB;er;o0uz;s,z;e0ut,y the time;cau1f0;ore;se;lt3nd,s 0;far1if,m0soon1t2;uch0; as;hou0;gh",Currency:"true¦$,aud,bQcOdJeurIfHgbp,hkd,iGjpy,kElDp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotyQł;en,uanP;af,of;h0t5;e0il5;k0q0;elK;oubleJp,upeeJ;e2ound st0;er0;lingG;n0soF;ceEnies;empi7i7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!os;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;e0ny;nt1;aht,itcoin0;!s",Determiner:"true¦aBboth,d9e6few,le5mu8neiDplenty,s4th2various,wh0;at0ich0;evC;a0e4is,ose;!t;everal,ome;!ast,s;a1l0very;!se;ch;e0u;!s;!n0;!o0y;th0;er","Adj|Present":"true¦a07b04cVdQeNfJhollIidRlEmCnarrIoBp9qua8r7s3t2uttFw0;aKet,ro0;ng,u08;endChin;e2hort,l1mooth,our,pa9tray,u0;re,speU;i2ow;cu6da02leSpaN;eplica01i02;ck;aHerfePr0;eseUime,omV;bscu1pen,wn;atu0e3odeH;re;a2e1ive,ow0;er;an;st,y;ow;a2i1oul,r0;ee,inge;rm;iIke,ncy,st;l1mpty,x0;emHpress;abo4ic7;amp,e2i1oub0ry,ull;le;ffu9re6;fu8libe0;raE;alm,l5o0;mpleCn3ol,rr1unterfe0;it;e0u7;ct;juga8sum7;ea1o0;se;n,r;ankru1lu0;nt;pt;li2pproxi0rticula1;ma0;te;ght","Person|Adj":"true¦b3du2earnest,frank,mi2r0san1woo1;an0ich,u1;dy;sty;ella,rown",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to,a;ight,ust;an,o0;uld",Verb:"true¦born,cannot,gonna,has,keep tabs,msg","Person|Verb":"true¦b8ch7dr6foster,gra5ja9lan4ma2ni9ollie,p1rob,s0wade;kip,pike,t5ue;at,eg,ier2;ck,r0;k,shal;ce;ce,nt;ew;ase,u1;iff,l1ob,u0;ck;aze,ossom","Person|Date":"true¦a2j0sep;an0une;!uary;p0ugust,v0;ril"};const gr=36,mr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",pr=mr.split("").reduce((function(e,t,n){return e[t]=n,e}),{});var fr=function(e){if(void 0!==pr[e])return pr[e];let t=0,n=1,a=gr,r=1;for(;n=0;n--,r*=gr){let a=e.charCodeAt(n)-48;a>10&&(a-=7),t+=a*r}return t};const br=function(e,t,n){const a=fr(t);return a{let o=e.nodes[a];"!"===o[0]&&(t.push(r),o=o.slice(1));const i=o.split(/([A-Z0-9,]+)/g);for(let o=0;o{const t=function(e){if(!e)return{};const t=e.split("|").reduce(((e,t)=>{const n=t.split("¦");return e[n[0]]=n[1],e}),{}),n={};return Object.keys(t).forEach((function(e){const a=yr(t[e]);"true"===e&&(e=!0);for(let t=0;t{if(jr[t]=e,"Noun|Verb"===e){const e=Pr(t,Nr);jr[e]="Plural|Verb"}})):Object.keys(t).forEach((t=>{Cr[t]=e}))})),[":(",":)",":P",":p",":O",";(",";)",";P",";p",";O",":3",":|",":/",":\\",":$",":*",":@",":-(",":-)",":-P",":-p",":-O",":-3",":-|",":-/",":-\\",":-$",":-*",":-@",":^(",":^)",":^P",":^p",":^O",":^3",":^|",":^/",":^\\",":^$",":^*",":^@","):","(:","$:","*:",")-:","(-:","$-:","*-:",")^:","(^:","$^:","*^:","<3","Cr[e]="Emoticon")),delete Cr[""],delete Cr.null,delete Cr[" "];const Ir="Singular";var Dr={beforeTags:{Determiner:Ir,Possessive:Ir,Acronym:Ir,Noun:Ir,Adjective:Ir,PresentTense:Ir,Gerund:Ir,PastTense:Ir,Infinitive:Ir,Date:Ir,Ordinal:Ir,Demonym:Ir},afterTags:{Value:Ir,Modal:Ir,Copula:Ir,PresentTense:Ir,PastTense:Ir,Demonym:Ir,Actor:Ir},beforeWords:{the:Ir,with:Ir,without:Ir,of:Ir,for:Ir,any:Ir,all:Ir,on:Ir,cut:Ir,cuts:Ir,increase:Ir,decrease:Ir,raise:Ir,drop:Ir,save:Ir,saved:Ir,saves:Ir,make:Ir,makes:Ir,made:Ir,minus:Ir,plus:Ir,than:Ir,another:Ir,versus:Ir,neither:Ir,about:Ir,favorite:Ir,best:Ir,daily:Ir,weekly:Ir,linear:Ir,binary:Ir,mobile:Ir,lexical:Ir,technical:Ir,computer:Ir,scientific:Ir,security:Ir,government:Ir,popular:Ir,formal:Ir,no:Ir,more:Ir,one:Ir,let:Ir,her:Ir,his:Ir,their:Ir,our:Ir,us:Ir,sheer:Ir,monthly:Ir,yearly:Ir,current:Ir,previous:Ir,upcoming:Ir,last:Ir,next:Ir,main:Ir,initial:Ir,final:Ir,beginning:Ir,end:Ir,top:Ir,bottom:Ir,future:Ir,past:Ir,major:Ir,minor:Ir,side:Ir,central:Ir,peripheral:Ir,public:Ir,private:Ir},afterWords:{of:Ir,system:Ir,aid:Ir,method:Ir,utility:Ir,tool:Ir,reform:Ir,therapy:Ir,philosophy:Ir,room:Ir,authority:Ir,says:Ir,said:Ir,wants:Ir,wanted:Ir,is:Ir,did:Ir,do:Ir,can:Ir,wise:Ir}};const Hr="Infinitive";var Gr={beforeTags:{Modal:Hr,Adverb:Hr,Negative:Hr,Plural:Hr},afterTags:{Determiner:Hr,Adverb:Hr,Possessive:Hr,Reflexive:Hr,Preposition:Hr,Cardinal:Hr,Comparative:Hr,Superlative:Hr},beforeWords:{i:Hr,we:Hr,you:Hr,they:Hr,to:Hr,please:Hr,will:Hr,have:Hr,had:Hr,would:Hr,could:Hr,should:Hr,do:Hr,did:Hr,does:Hr,can:Hr,must:Hr,us:Hr,me:Hr,let:Hr,even:Hr,when:Hr,help:Hr,he:Hr,she:Hr,it:Hr,being:Hr,bi:Hr,co:Hr,contra:Hr,de:Hr,inter:Hr,intra:Hr,mis:Hr,pre:Hr,out:Hr,counter:Hr,nobody:Hr,somebody:Hr,anybody:Hr,everybody:Hr},afterWords:{the:Hr,me:Hr,you:Hr,him:Hr,us:Hr,her:Hr,his:Hr,them:Hr,they:Hr,it:Hr,himself:Hr,herself:Hr,itself:Hr,myself:Hr,ourselves:Hr,themselves:Hr,something:Hr,anything:Hr,a:Hr,an:Hr,up:Hr,down:Hr,by:Hr,out:Hr,off:Hr,under:Hr,what:Hr,all:Hr,to:Hr,because:Hr,although:Hr,how:Hr,otherwise:Hr,together:Hr,though:Hr,into:Hr,yet:Hr,more:Hr,here:Hr,there:Hr,away:Hr}};const Tr={beforeTags:Object.assign({},Gr.beforeTags,Dr.beforeTags,{}),afterTags:Object.assign({},Gr.afterTags,Dr.afterTags,{}),beforeWords:Object.assign({},Gr.beforeWords,Dr.beforeWords,{}),afterWords:Object.assign({},Gr.afterWords,Dr.afterWords,{})},xr="Adjective";var Er={beforeTags:{Determiner:xr,Possessive:xr,Hyphenated:xr},afterTags:{Adjective:xr},beforeWords:{seem:xr,seemed:xr,seems:xr,feel:xr,feels:xr,felt:xr,stay:xr,appear:xr,appears:xr,appeared:xr,also:xr,over:xr,under:xr,too:xr,it:xr,but:xr,still:xr,really:xr,quite:xr,well:xr,very:xr,truly:xr,how:xr,deeply:xr,hella:xr,profoundly:xr,extremely:xr,so:xr,badly:xr,mostly:xr,totally:xr,awfully:xr,rather:xr,nothing:xr,something:xr,anything:xr,not:xr,me:xr,is:xr,face:xr,faces:xr,faced:xr,look:xr,looks:xr,looked:xr,reveal:xr,reveals:xr,revealed:xr,sound:xr,sounded:xr,sounds:xr,remains:xr,remained:xr,prove:xr,proves:xr,proved:xr,becomes:xr,stays:xr,tastes:xr,taste:xr,smells:xr,smell:xr,gets:xr,grows:xr,as:xr,rings:xr,radiates:xr,conveys:xr,convey:xr,conveyed:xr,of:xr},afterWords:{too:xr,also:xr,or:xr,enough:xr,as:xr}};const Fr="Gerund";var Or={beforeTags:{Adverb:Fr,Preposition:Fr,Conjunction:Fr},afterTags:{Adverb:Fr,Possessive:Fr,Person:Fr,Pronoun:Fr,Determiner:Fr,Copula:Fr,Preposition:Fr,Conjunction:Fr,Comparative:Fr},beforeWords:{been:Fr,keep:Fr,continue:Fr,stop:Fr,am:Fr,be:Fr,me:Fr,began:Fr,start:Fr,starts:Fr,started:Fr,stops:Fr,stopped:Fr,help:Fr,helps:Fr,avoid:Fr,avoids:Fr,love:Fr,loves:Fr,loved:Fr,hate:Fr,hates:Fr,hated:Fr},afterWords:{you:Fr,me:Fr,her:Fr,him:Fr,his:Fr,them:Fr,their:Fr,it:Fr,this:Fr,there:Fr,on:Fr,about:Fr,for:Fr,up:Fr,down:Fr}};const zr="Gerund",Vr="Adjective",Br={beforeTags:Object.assign({},Er.beforeTags,Or.beforeTags,{Imperative:zr,Infinitive:Vr,Plural:zr}),afterTags:Object.assign({},Er.afterTags,Or.afterTags,{Noun:Vr}),beforeWords:Object.assign({},Er.beforeWords,Or.beforeWords,{is:Vr,are:zr,was:Vr,of:Vr,suggest:zr,suggests:zr,suggested:zr,recommend:zr,recommends:zr,recommended:zr,imagine:zr,imagines:zr,imagined:zr,consider:zr,considered:zr,considering:zr,resist:zr,resists:zr,resisted:zr,avoid:zr,avoided:zr,avoiding:zr,except:Vr,accept:Vr,assess:zr,explore:zr,fear:zr,fears:zr,appreciate:zr,question:zr,help:zr,embrace:zr,with:Vr}),afterWords:Object.assign({},Er.afterWords,Or.afterWords,{to:zr,not:zr,the:zr})},Sr={beforeTags:{Determiner:void 0,Cardinal:"Noun",PhrasalVerb:"Adjective"},afterTags:{}},Kr={beforeTags:Object.assign({},Er.beforeTags,Dr.beforeTags,Sr.beforeTags),afterTags:Object.assign({},Er.afterTags,Dr.afterTags,Sr.afterTags),beforeWords:Object.assign({},Er.beforeWords,Dr.beforeWords,{are:"Adjective",is:"Adjective",was:"Adjective",be:"Adjective",off:"Adjective",out:"Adjective"}),afterWords:Object.assign({},Er.afterWords,Dr.afterWords)},$r="PastTense",Lr="Adjective",Mr={beforeTags:{Adverb:$r,Pronoun:$r,ProperNoun:$r,Auxiliary:$r,Noun:$r},afterTags:{Possessive:$r,Pronoun:$r,Determiner:$r,Adverb:$r,Comparative:$r,Date:$r,Gerund:$r},beforeWords:{be:$r,who:$r,get:Lr,had:$r,has:$r,have:$r,been:$r,it:$r,as:$r,for:Lr,more:Lr,always:Lr},afterWords:{by:$r,back:$r,out:$r,in:$r,up:$r,down:$r,before:$r,after:$r,for:$r,the:$r,with:$r,as:$r,on:$r,at:$r,between:$r,to:$r,into:$r,us:$r,them:$r,his:$r,her:$r,their:$r,our:$r,me:$r,about:Lr}};var Jr={beforeTags:Object.assign({},Er.beforeTags,Mr.beforeTags),afterTags:Object.assign({},Er.afterTags,Mr.afterTags),beforeWords:Object.assign({},Er.beforeWords,Mr.beforeWords),afterWords:Object.assign({},Er.afterWords,Mr.afterWords)};const Wr={afterTags:{Noun:"Adjective",Conjunction:void 0}},Ur={beforeTags:Object.assign({},Er.beforeTags,Gr.beforeTags,{Adverb:void 0,Negative:void 0}),afterTags:Object.assign({},Er.afterTags,Gr.afterTags,Wr.afterTags),beforeWords:Object.assign({},Er.beforeWords,Gr.beforeWords,{have:void 0,had:void 0,not:void 0,went:"Adjective",goes:"Adjective",got:"Adjective",be:"Adjective"}),afterWords:Object.assign({},Er.afterWords,Gr.afterWords,{to:void 0,as:"Adjective"})},qr={Copula:"Gerund",PastTense:"Gerund",PresentTense:"Gerund",Infinitive:"Gerund"},Rr={Value:"Gerund"},Qr={are:"Gerund",were:"Gerund",be:"Gerund",no:"Gerund",without:"Gerund",you:"Gerund",we:"Gerund",they:"Gerund",he:"Gerund",she:"Gerund",us:"Gerund",them:"Gerund"},Zr={the:"Gerund",this:"Gerund",that:"Gerund",me:"Gerund",us:"Gerund",them:"Gerund"},Xr={beforeTags:Object.assign({},Or.beforeTags,Dr.beforeTags,qr),afterTags:Object.assign({},Or.afterTags,Dr.afterTags,Rr),beforeWords:Object.assign({},Or.beforeWords,Dr.beforeWords,Qr),afterWords:Object.assign({},Or.afterWords,Dr.afterWords,Zr)},_r="Singular",Yr="Infinitive",eo={beforeTags:Object.assign({},Gr.beforeTags,Dr.beforeTags,{Adjective:_r,Particle:_r}),afterTags:Object.assign({},Gr.afterTags,Dr.afterTags,{ProperNoun:Yr,Gerund:Yr,Adjective:Yr,Copula:_r}),beforeWords:Object.assign({},Gr.beforeWords,Dr.beforeWords,{is:_r,was:_r,of:_r,have:null}),afterWords:Object.assign({},Gr.afterWords,Dr.afterWords,{instead:Yr,about:Yr,his:Yr,her:Yr,to:null,by:null,in:null})},to="Person";var no={beforeTags:{Honorific:to,Person:to},afterTags:{Person:to,ProperNoun:to,Verb:to},beforeWords:{hi:to,hey:to,yo:to,dear:to,hello:to},afterWords:{said:to,says:to,told:to,tells:to,feels:to,felt:to,seems:to,thinks:to,thought:to,spends:to,spendt:to,plays:to,played:to,sing:to,sang:to,learn:to,learned:to,wants:to,wanted:to}};const ao="Month",ro={beforeTags:{Date:ao,Value:ao},afterTags:{Date:ao,Value:ao},beforeWords:{by:ao,in:ao,on:ao,during:ao,after:ao,before:ao,between:ao,until:ao,til:ao,sometime:ao,of:ao,this:ao,next:ao,last:ao,previous:ao,following:ao,with:"Person"},afterWords:{sometime:ao,in:ao,of:ao,until:ao,the:ao}};var oo={beforeTags:Object.assign({},no.beforeTags,ro.beforeTags),afterTags:Object.assign({},no.afterTags,ro.afterTags),beforeWords:Object.assign({},no.beforeWords,ro.beforeWords),afterWords:Object.assign({},no.afterWords,ro.afterWords)};const io="Place",so={beforeTags:{Place:io},afterTags:{Place:io,Abbreviation:io},beforeWords:{in:io,by:io,near:io,from:io,to:io},afterWords:{in:io,by:io,near:io,from:io,to:io,government:io,council:io,region:io,city:io}},lo="Unit",uo={"Actor|Verb":Tr,"Adj|Gerund":Br,"Adj|Noun":Kr,"Adj|Past":Jr,"Adj|Present":Ur,"Noun|Verb":eo,"Noun|Gerund":Xr,"Person|Noun":{beforeTags:Object.assign({},Dr.beforeTags,no.beforeTags),afterTags:Object.assign({},Dr.afterTags,no.afterTags),beforeWords:Object.assign({},Dr.beforeWords,no.beforeWords,{i:"Infinitive",we:"Infinitive"}),afterWords:Object.assign({},Dr.afterWords,no.afterWords)},"Person|Date":oo,"Person|Verb":{beforeTags:Object.assign({},Dr.beforeTags,no.beforeTags,Gr.beforeTags),afterTags:Object.assign({},Dr.afterTags,no.afterTags,Gr.afterTags),beforeWords:Object.assign({},Dr.beforeWords,no.beforeWords,Gr.beforeWords),afterWords:Object.assign({},Dr.afterWords,no.afterWords,Gr.afterWords)},"Person|Place":{beforeTags:Object.assign({},so.beforeTags,no.beforeTags),afterTags:Object.assign({},so.afterTags,no.afterTags),beforeWords:Object.assign({},so.beforeWords,no.beforeWords),afterWords:Object.assign({},so.afterWords,no.afterWords)},"Person|Adj":{beforeTags:Object.assign({},no.beforeTags,Er.beforeTags),afterTags:Object.assign({},no.afterTags,Er.afterTags),beforeWords:Object.assign({},no.beforeWords,Er.beforeWords),afterWords:Object.assign({},no.afterWords,Er.afterWords)},"Unit|Noun":{beforeTags:{Value:lo},afterTags:{},beforeWords:{per:lo,every:lo,each:lo,square:lo,cubic:lo,sq:lo,metric:lo},afterWords:{per:lo,squared:lo,cubed:lo,long:lo}}},co=(e,t)=>{const n=Object.keys(e).reduce(((t,n)=>(t[n]="Infinitive"===e[n]?"PresentTense":"Plural",t)),{});return Object.assign(n,t)};uo["Plural|Verb"]={beforeWords:co(uo["Noun|Verb"].beforeWords,{had:"Plural",have:"Plural"}),afterWords:co(uo["Noun|Verb"].afterWords,{his:"PresentTense",her:"PresentTense",its:"PresentTense",in:null,to:null,is:"PresentTense",by:"PresentTense"}),beforeTags:co(uo["Noun|Verb"].beforeTags,{Conjunction:"PresentTense",Noun:void 0,ProperNoun:"PresentTense"}),afterTags:co(uo["Noun|Verb"].afterTags,{Gerund:"Plural",Noun:"PresentTense",Value:"PresentTense"})};const ho="Adjective",go="Infinitive",mo="PresentTense",po="Singular",fo="PastTense",bo="Adverb",yo="Plural",vo="Actor",wo="Verb",ko="Noun",Po="LastName",Ao="Modal",Co="Place",jo="Participle";var No=[null,null,{ea:po,ia:ko,ic:ho,ly:bo,"'n":wo,"'t":wo},{oed:fo,ued:fo,xed:fo," so":bo,"'ll":Ao,"'re":"Copula",azy:ho,eer:ko,end:wo,ped:fo,ffy:ho,ify:go,ing:"Gerund",ize:go,ibe:go,lar:ho,mum:ho,nes:mo,nny:ho,ous:ho,que:ho,ger:ko,ber:ko,rol:po,sis:po,ogy:po,oid:po,ian:po,zes:mo,eld:fo,ken:jo,ven:jo,ten:jo,ect:go,ict:go,ign:go,oze:go,ful:ho,bal:ho,ton:ko,pur:Co},{amed:fo,aped:fo,ched:fo,lked:fo,rked:fo,reed:fo,nded:fo,mned:ho,cted:fo,dged:fo,ield:po,akis:Po,cede:go,chuk:Po,czyk:Po,ects:mo,iend:po,ends:wo,enko:Po,ette:po,iary:po,wner:po,fies:mo,fore:bo,gate:go,gone:ho,ices:yo,ints:yo,ruct:go,ines:yo,ions:yo,ners:yo,pers:yo,lers:yo,less:ho,llen:ho,made:ho,nsen:Po,oses:mo,ould:Ao,some:ho,sson:Po,ians:yo,tion:po,tage:ko,ique:po,tive:ho,tors:ko,vice:po,lier:po,fier:po,wned:fo,gent:po,tist:vo,pist:vo,rist:vo,mist:vo,yist:vo,vist:vo,ists:vo,lite:po,site:po,rite:po,mite:po,bite:po,mate:po,date:po,ndal:po,vent:po,uist:vo,gist:vo,note:po,cide:po,ence:po,wide:ho,vide:go,ract:go,duce:go,pose:go,eive:go,lyze:go,lyse:go,iant:ho,nary:ho,ghty:ho,uent:ho,erer:vo,bury:Co,dorf:ko,esty:ko,wych:Co,dale:Co,folk:Co,vale:Co,abad:Co,sham:Co,wick:Co,view:Co},{elist:vo,holic:po,phite:po,tized:fo,urned:fo,eased:fo,ances:yo,bound:ho,ettes:yo,fully:bo,ishes:mo,ities:yo,marek:Po,nssen:Po,ology:ko,osome:po,tment:po,ports:yo,rough:ho,tches:mo,tieth:"Ordinal",tures:yo,wards:bo,where:bo,archy:ko,pathy:ko,opoly:ko,embly:ko,phate:ko,ndent:po,scent:po,onist:vo,anist:vo,alist:vo,olist:vo,icist:vo,ounce:go,iable:ho,borne:ho,gnant:ho,inant:ho,igent:ho,atory:ho,rient:po,dient:po,maker:vo,burgh:Co,mouth:Co,ceter:Co,ville:Co,hurst:Co,stead:Co,endon:Co,brook:Co,shire:Co,worth:ko,field:"ProperNoun",ridge:Co},{auskas:Po,parent:po,cedent:po,ionary:po,cklist:po,brooke:Co,keeper:vo,logist:vo,teenth:"Value",worker:vo,master:vo,writer:vo,brough:Co,cester:Co,ington:Co,cliffe:Co,ingham:Co},{chester:Co,logists:vo,opoulos:Po,borough:Co,sdottir:Po}];const Io="Adjective",Do="Noun",Ho="Verb";var Go=[null,null,{},{neo:Do,bio:Do,"de-":Ho,"re-":Ho,"un-":Ho,"ex-":Do},{anti:Do,auto:Do,faux:Io,hexa:Do,kilo:Do,mono:Do,nano:Do,octa:Do,poly:Do,semi:Io,tele:Do,"pro-":Io,"mis-":Ho,"dis-":Ho,"pre-":Io},{anglo:Do,centi:Do,ethno:Do,ferro:Do,grand:Do,hepta:Do,hydro:Do,intro:Do,macro:Do,micro:Do,milli:Do,nitro:Do,penta:Do,quasi:Io,radio:Do,tetra:Do,"omni-":Io,"post-":Io},{pseudo:Io,"extra-":Io,"hyper-":Io,"inter-":Io,"intra-":Io,"deca-":Io},{electro:Do}];const To="Adjective",xo="Infinitive",Eo="PresentTense",Fo="Singular",Oo="PastTense",zo="Adverb",Vo="Expression",Bo="Actor",So="Verb",Ko="Noun",$o="LastName";var Lo={a:[[/.[aeiou]na$/,Ko,"tuna"],[/.[oau][wvl]ska$/,$o],[/.[^aeiou]ica$/,Fo,"harmonica"],[/^([hyj]a+)+$/,Vo,"haha"]],c:[[/.[^aeiou]ic$/,To]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,Oo,"popped"],[/.[aeo]{2}[bdgmnprvz]ed$/,Oo,"rammed"],[/.[aeiou][sg]hed$/,Oo,"gushed"],[/.[aeiou]red$/,Oo,"hired"],[/.[aeiou]r?ried$/,Oo,"hurried"],[/[^aeiou]ard$/,Fo,"steward"],[/[aeiou][^aeiou]id$/,To,""],[/.[vrl]id$/,To,"livid"],[/..led$/,Oo,"hurled"],[/.[iao]sed$/,Oo,""],[/[aeiou]n?[cs]ed$/,Oo,""],[/[aeiou][rl]?[mnf]ed$/,Oo,""],[/[aeiou][ns]?c?ked$/,Oo,"bunked"],[/[aeiou]gned$/,Oo],[/[aeiou][nl]?ged$/,Oo],[/.[tdbwxyz]ed$/,Oo],[/[^aeiou][aeiou][tvx]ed$/,Oo],[/.[cdflmnprstv]ied$/,Oo,"emptied"]],e:[[/.[lnr]ize$/,xo,"antagonize"],[/.[^aeiou]ise$/,xo,"antagonise"],[/.[aeiou]te$/,xo,"bite"],[/.[^aeiou][ai]ble$/,To,"fixable"],[/.[^aeiou]eable$/,To,"maleable"],[/.[ts]ive$/,To,"festive"],[/[a-z]-like$/,To,"woman-like"]],h:[[/.[^aeiouf]ish$/,To,"cornish"],[/.v[iy]ch$/,$o,"..ovich"],[/^ug?h+$/,Vo,"ughh"],[/^uh[ -]?oh$/,Vo,"uhoh"],[/[a-z]-ish$/,To,"cartoon-ish"]],i:[[/.[oau][wvl]ski$/,$o,"polish-male"]],k:[[/^(k){2}$/,Vo,"kkkk"]],l:[[/.[gl]ial$/,To,"familial"],[/.[^aeiou]ful$/,To,"fitful"],[/.[nrtumcd]al$/,To,"natal"],[/.[^aeiou][ei]al$/,To,"familial"]],m:[[/.[^aeiou]ium$/,Fo,"magnesium"],[/[^aeiou]ism$/,Fo,"schism"],[/^[hu]m+$/,Vo,"hmm"],[/^\d+ ?[ap]m$/,"Date","3am"]],n:[[/.[lsrnpb]ian$/,To,"republican"],[/[^aeiou]ician$/,Bo,"musician"],[/[aeiou][ktrp]in'$/,"Gerund","cookin'"]],o:[[/^no+$/,Vo,"noooo"],[/^(yo)+$/,Vo,"yoo"],[/^wo{2,}[pt]?$/,Vo,"woop"]],r:[[/.[bdfklmst]ler$/,"Noun"],[/[aeiou][pns]er$/,Fo],[/[^i]fer$/,xo],[/.[^aeiou][ao]pher$/,Bo],[/.[lk]er$/,"Noun"],[/.ier$/,"Comparative"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,To],[/[aeiou].*ist$/,To],[/^[a-z]et$/,So]],s:[[/.[^aeiou]ises$/,Eo],[/.[rln]ates$/,Eo],[/.[^z]ens$/,So],[/.[lstrn]us$/,Fo],[/.[aeiou]sks$/,Eo],[/.[aeiou]kes$/,Eo],[/[aeiou][^aeiou]is$/,Fo],[/[a-z]'s$/,Ko],[/^yes+$/,Vo]],v:[[/.[^aeiou][ai][kln]ov$/,$o]],y:[[/.[cts]hy$/,To],[/.[st]ty$/,To],[/.[tnl]ary$/,To],[/.[oe]ry$/,Fo],[/[rdntkbhs]ly$/,zo],[/.(gg|bb|zz)ly$/,To],[/...lly$/,zo],[/.[gk]y$/,To],[/[bszmp]{2}y$/,To],[/.[ai]my$/,To],[/[ea]{2}zy$/,To],[/.[^aeiou]ity$/,Fo]]};const Mo="Verb",Jo="Noun";var Wo={leftTags:[["Adjective",Jo],["Possessive",Jo],["Determiner",Jo],["Adverb",Mo],["Pronoun",Mo],["Value",Jo],["Ordinal",Jo],["Modal",Mo],["Superlative",Jo],["Demonym",Jo],["Honorific","Person"]],leftWords:[["i",Mo],["first",Jo],["it",Mo],["there",Mo],["not",Mo],["because",Jo],["if",Jo],["but",Jo],["who",Mo],["this",Jo],["his",Jo],["when",Jo],["you",Mo],["very","Adjective"],["old",Jo],["never",Mo],["before",Jo],["a",Jo],["the",Jo],["been",Mo]],rightTags:[["Copula",Jo],["PastTense",Jo],["Conjunction",Jo],["Modal",Jo]],rightWords:[["there",Mo],["me",Mo],["man","Adjective"],["him",Mo],["it",Mo],["were",Jo],["took",Jo],["himself",Mo],["went",Jo],["who",Jo],["jr","Person"]]},Uo={fwd:"3:ser,ier¦1er:h,t,f,l,n¦1r:e¦2er:ss,or,om",both:"3er:ver,ear,alm¦3ner:hin¦3ter:lat¦2mer:im¦2er:ng,rm,mb¦2ber:ib¦2ger:ig¦1er:w,p,k,d¦ier:y",rev:"1:tter,yer¦2:uer,ver,ffer,oner,eler,ller,iler,ster,cer,uler,sher,ener,gher,aner,adder,nter,eter,rter,hter,rner,fter¦3:oser,ooler,eafer,user,airer,bler,maler,tler,eater,uger,rger,ainer,urer,ealer,icher,pler,emner,icter,nser,iser¦4:arser,viner,ucher,rosser,somer,ndomer,moter,oother,uarer,hiter¦5:nuiner,esser,emier¦ar:urther",ex:"worse:bad¦better:good¦4er:fair,gray,poor¦1urther:far¦3ter:fat,hot,wet¦3der:mad,sad¦3er:shy,fun¦4der:glad¦:¦4r:cute,dire,fake,fine,free,lame,late,pale,rare,ripe,rude,safe,sore,tame,wide¦5r:eerie,stale"},qo={fwd:"1:nning,tting,rring,pping,eing,mming,gging,dding,bbing,kking¦2:eking,oling,eling,eming¦3:velling,siting,uiting,fiting,loting,geting,ialing,celling¦4:graming",both:"1:aing,iing,fing,xing,ying,oing,hing,wing¦2:tzing,rping,izzing,bting,mning,sping,wling,rling,wding,rbing,uping,lming,wning,mping,oning,lting,mbing,lking,fting,hting,sking,gning,pting,cking,ening,nking,iling,eping,ering,rting,rming,cting,lping,ssing,nting,nding,lding,sting,rning,rding,rking¦3:belling,siping,toming,yaking,uaking,oaning,auling,ooping,aiding,naping,euring,tolling,uzzing,ganing,haning,ualing,halling,iasing,auding,ieting,ceting,ouling,voring,ralling,garing,joring,oaming,oaking,roring,nelling,ooring,uelling,eaming,ooding,eaping,eeting,ooting,ooming,xiting,keting,ooking,ulling,airing,oaring,biting,outing,oiting,earing,naling,oading,eeding,ouring,eaking,aiming,illing,oining,eaning,onging,ealing,aining,eading¦4:thoming,melling,aboring,ivoting,weating,dfilling,onoring,eriting,imiting,tialling,rgining,otoring,linging,winging,lleting,louding,spelling,mpelling,heating,feating,opelling,choring,welling,ymaking,ctoring,calling,peating,iloring,laiting,utoring,uditing,mmaking,loating,iciting,waiting,mbating,voiding,otalling,nsoring,nselling,ocusing,itoring,eloping¦5:rselling,umpeting,atrolling,treating,tselling,rpreting,pringing,ummeting,ossoming,elmaking,eselling,rediting,totyping,onmaking,rfeiting,ntrolling¦5e:chmaking,dkeeping,severing,erouting,ecreting,ephoning,uthoring,ravening,reathing,pediting,erfering,eotyping,fringing,entoring,ombining,ompeting¦4e:emaking,eething,twining,rruling,chuting,xciting,rseding,scoping,edoring,pinging,lunging,agining,craping,pleting,eleting,nciting,nfining,ncoding,tponing,ecoding,writing,esaling,nvening,gnoring,evoting,mpeding,rvening,dhering,mpiling,storing,nviting,ploring¦3e:tining,nuring,saking,miring,haling,ceding,xuding,rining,nuting,laring,caring,miling,riding,hoking,piring,lading,curing,uading,noting,taping,futing,paring,hading,loding,siring,guring,vading,voking,during,niting,laning,caping,luting,muting,ruding,ciding,juring,laming,caling,hining,uoting,liding,ciling,duling,tuting,puting,cuting,coring,uiding,tiring,turing,siding,rading,enging,haping,buting,lining,taking,anging,haring,uiring,coming,mining,moting,suring,viding,luding¦2e:tring,zling,uging,oging,gling,iging,vring,fling,lging,obing,psing,pling,ubing,cling,dling,wsing,iking,rsing,dging,kling,ysing,tling,rging,eging,nsing,uning,osing,uming,using,ibing,bling,aging,ising,asing,ating¦2ie:rlying¦1e:zing,uing,cing,ving",rev:"ying:ie¦1ing:se,ke,te,we,ne,re,de,pe,me,le,c,he¦2ing:ll,ng,dd,ee,ye,oe,rg,us¦2ning:un¦2ging:og,ag,ug,ig,eg¦2ming:um¦2bing:ub,ab,eb,ob¦3ning:lan,can,hin,pin,win¦3ring:cur,lur,tir,tar,pur,car¦3ing:ait,del,eel,fin,eat,oat,eem,lel,ool,ein,uin¦3ping:rop,rap,top,uip,wap,hip,hop,lap,rip,cap¦3ming:tem,wim,rim,kim,lim¦3ting:mat,cut,pot,lit,lot,hat,set,pit,put¦3ding:hed,bed,bid¦3king:rek¦3ling:cil,pel¦3bing:rib¦4ning:egin¦4ing:isit,ruit,ilot,nsit,dget,rkel,ival,rcel¦4ring:efer,nfer¦4ting:rmit,mmit,ysit,dmit,emit,bmit,tfit,gret¦4ling:evel,xcel,ivel¦4ding:hred¦5ing:arget,posit,rofit¦5ring:nsfer¦5ting:nsmit,orget,cquit¦5ling:ancel,istil",ex:"3:adding,eating,aiming,aiding,airing,outing,gassing,setting,getting,putting,cutting,winning,sitting,betting,mapping,tapping,letting,bidding,hitting,tanning,netting,popping,fitting,capping,lapping,barring,banning,vetting,topping,rotting,tipping,potting,wetting,pitting,dipping,budding,hemming,pinning,jetting,kidding,padding,podding,sipping,wedding,bedding,donning,warring,penning,gutting,cueing,wadding,petting,ripping,napping,matting,tinning,binning,dimming,hopping,mopping,nodding,panning,rapping,ridding,sinning¦4:selling,falling,calling,waiting,editing,telling,rolling,heating,boating,hanging,beating,coating,singing,tolling,felling,polling,discing,seating,voiding,gelling,yelling,baiting,reining,ruining,seeking,spanning,stepping,knitting,emitting,slipping,quitting,dialing,omitting,clipping,shutting,skinning,abutting,flipping,trotting,cramming,fretting,suiting¦5:bringing,treating,spelling,stalling,trolling,expelling,rivaling,wringing,deterring,singeing,befitting,refitting¦6:enrolling,distilling,scrolling,strolling,caucusing,travelling¦7:installing,redefining,stencilling,recharging,overeating,benefiting,unraveling,programing¦9:reprogramming¦is:being¦2e:using,aging,owing¦3e:making,taking,coming,noting,hiring,filing,coding,citing,doping,baking,coping,hoping,lading,caring,naming,voting,riding,mining,curing,lining,ruling,typing,boring,dining,firing,hiding,piling,taping,waning,baling,boning,faring,honing,wiping,luring,timing,wading,piping,fading,biting,zoning,daring,waking,gaming,raking,ceding,tiring,coking,wining,joking,paring,gaping,poking,pining,coring,liming,toting,roping,wiring,aching¦4e:writing,storing,eroding,framing,smoking,tasting,wasting,phoning,shaking,abiding,braking,flaking,pasting,priming,shoring,sloping,withing,hinging¦5e:defining,refining,renaming,swathing,fringing,reciting¦1ie:dying,tying,lying,vying¦7e:sunbathing"},Ro={fwd:"1:mt¦2:llen¦3:iven,aken¦:ne¦y:in",both:"1:wn¦2:me,aten¦3:seen,bidden,isen¦4:roven,asten¦3l:pilt¦3d:uilt¦2e:itten¦1im:wum¦1eak:poken¦1ine:hone¦1ose:osen¦1in:gun¦1ake:woken¦ear:orn¦eal:olen¦eeze:ozen¦et:otten¦ink:unk¦ing:ung",rev:"2:un¦oken:eak¦ought:eek¦oven:eave¦1ne:o¦1own:ly¦1den:de¦1in:ay¦2t:am¦2n:ee¦3en:all¦4n:rive,sake,take¦5n:rgive",ex:"2:been¦3:seen,run¦4:given,taken¦5:shaken¦2eak:broken¦1ive:dove¦2y:flown¦3e:hidden,ridden¦1eek:sought¦1ake:woken¦1eave:woven"},Qo={fwd:"1:oes¦1ve:as",both:"1:xes¦2:zzes,ches,shes,sses¦3:iases¦2y:llies,plies¦1y:cies,bies,ties,vies,nies,pies,dies,ries,fies¦:s",rev:"1ies:ly¦2es:us,go,do¦3es:cho,eto",ex:"2:does,goes¦3:gasses¦5:focuses¦is:are¦3y:relies¦2y:flies¦2ve:has"},Zo={fwd:"1st:e¦1est:l,m,f,s¦1iest:cey¦2est:or,ir¦3est:ver",both:"4:east¦5:hwest¦5lest:erful¦4est:weet,lgar,tter,oung¦4most:uter¦3est:ger,der,rey,iet,ong,ear¦3test:lat¦3most:ner¦2est:pt,ft,nt,ct,rt,ht¦2test:it¦2gest:ig¦1est:b,k,n,p,h,d,w¦iest:y",rev:"1:ttest,nnest,yest¦2:sest,stest,rmest,cest,vest,lmest,olest,ilest,ulest,ssest,imest,uest¦3:rgest,eatest,oorest,plest,allest,urest,iefest,uelest,blest,ugest,amest,yalest,ealest,illest,tlest,itest¦4:cerest,eriest,somest,rmalest,ndomest,motest,uarest,tiffest¦5:leverest,rangest¦ar:urthest¦3ey:riciest",ex:"best:good¦worst:bad¦5est:great¦4est:fast,full,fair,dull¦3test:hot,wet,fat¦4nest:thin¦1urthest:far¦3est:gay,shy,ill¦4test:neat¦4st:late,wide,fine,safe,cute,fake,pale,rare,rude,sore,ripe,dire¦6st:severe"},Xo={fwd:"1:tistic,eable,lful,sful,ting,tty¦2:onate,rtable,geous,ced,seful,ctful¦3:ortive,ented¦arity:ear¦y:etic¦fulness:begone¦1ity:re¦1y:tiful,gic¦2ity:ile,imous,ilous,ime¦2ion:ated¦2eness:iving¦2y:trious¦2ation:iring¦2tion:vant¦3ion:ect¦3ce:mant,mantic¦3tion:irable¦3y:est,estic¦3m:mistic,listic¦3ess:ning¦4n:utious¦4on:rative,native,vative,ective¦4ce:erant",both:"1:king,wing¦2:alous,ltuous,oyful,rdous¦3:gorous,ectable,werful,amatic¦4:oised,usical,agical,raceful,ocused,lined,ightful¦5ness:stful,lding,itous,nuous,ulous,otous,nable,gious,ayful,rvous,ntous,lsive,peful,entle,ciful,osive,leful,isive,ncise,reful,mious¦5ty:ivacious¦5ties:ubtle¦5ce:ilient,adiant,atient¦5cy:icient¦5sm:gmatic¦5on:sessive,dictive¦5ity:pular,sonal,eative,entic¦5sity:uminous¦5ism:conic¦5nce:mperate¦5ility:mitable¦5ment:xcited¦5n:bitious¦4cy:brant,etent,curate¦4ility:erable,acable,icable,ptable¦4ty:nacious,aive,oyal,dacious¦4n:icious¦4ce:vient,erent,stent,ndent,dient,quent,ident¦4ness:adic,ound,hing,pant,sant,oing,oist,tute¦4icity:imple¦4ment:fined,mused¦4ism:otic¦4ry:dantic¦4ity:tund,eral¦4edness:hand¦4on:uitive¦4lity:pitable¦4sm:eroic,namic¦4sity:nerous¦3th:arm¦3ility:pable,bable,dable,iable¦3cy:hant,nant,icate¦3ness:red,hin,nse,ict,iet,ite,oud,ind,ied,rce¦3ion:lute¦3ity:ual,gal,volous,ial¦3ce:sent,fensive,lant,gant,gent,lent,dant¦3on:asive¦3m:fist,sistic,iastic¦3y:terious,xurious,ronic,tastic¦3ur:amorous¦3e:tunate¦3ation:mined¦3sy:rteous¦3ty:ain¦3ry:ave¦3ment:azed¦2ness:de,on,ue,rn,ur,ft,rp,pe,om,ge,rd,od,ay,ss,er,ll,oy,ap,ht,ld,ad,rt¦2inousness:umous¦2ity:neous,ene,id,ane¦2cy:bate,late¦2ation:ized¦2ility:oble,ible¦2y:odic¦2e:oving,aring¦2s:ost¦2itude:pt¦2dom:ee¦2ance:uring¦2tion:reet¦2ion:oted¦2sion:ending¦2liness:an¦2or:rdent¦1th:ung¦1e:uable¦1ness:w,h,k,f¦1ility:mble¦1or:vent¦1ement:ging¦1tiquity:ncient¦1ment:hed¦verty:or¦ength:ong¦eat:ot¦pth:ep¦iness:y",rev:"",ex:"5:forceful,humorous¦8:charismatic¦13:understanding¦5ity:active¦11ness:adventurous,inquisitive,resourceful¦8on:aggressive,automatic,perceptive¦7ness:amorous,fatuous,furtive,ominous,serious¦5ness:ample,sweet¦12ness:apprehensive,cantankerous,contemptuous,ostentatious¦13ness:argumentative,conscientious¦9ness:assertive,facetious,imperious,inventive,oblivious,rapacious,receptive,seditious,whimsical¦10ness:attractive,expressive,impressive,loquacious,salubrious,thoughtful¦3edom:boring¦4ness:calm,fast,keen,tame¦8ness:cheerful,gracious,specious,spurious,timorous,unctuous¦5sity:curious¦9ion:deliberate¦8ion:desperate¦6e:expensive¦7ce:fragrant¦3y:furious¦9ility:ineluctable¦6ism:mystical¦8ity:physical,proactive,sensitive,vertical¦5cy:pliant¦7ity:positive¦9ity:practical¦12ism:professional¦6ce:prudent¦3ness:red¦6cy:vagrant¦3dom:wise"};const _o=function(e="",t={}){let n=function(e,t={}){return t.hasOwnProperty(e)?t[e]:null}(e,t.ex);return n=n||function(e,t=[]){for(let n=0;n=1;a-=1){let r=e.length-a,o=e.substring(r,e.length);if(!0===t.hasOwnProperty(o))return e.slice(0,r)+t[o];if(!0===n.hasOwnProperty(o))return e.slice(0,r)+n[o]}return t.hasOwnProperty("")?e+t[""]:n.hasOwnProperty("")?e+n[""]:null}(e,t.fwd,t.both),n=n||e,n},Yo=function(e){return Object.entries(e).reduce(((e,t)=>(e[t[1]]=t[0],e)),{})},ei=function(e={}){return{reversed:!0,both:Yo(e.both),ex:Yo(e.ex),fwd:e.rev||{}}},ti=/^([0-9]+)/,ni=function(e){let t=function(e){let t={};return e.split("¦").forEach((e=>{let[n,a]=e.split(":");a=(a||"").split(","),a.forEach((e=>{t[e]=n}))})),t}(e);return Object.keys(t).reduce(((e,n)=>(e[n]=function(e="",t=""){let n=(t=String(t)).match(ti);if(null===n)return t;let a=Number(n[1])||0;return e.substring(0,a)+t.replace(ti,"")}(n,t[n]),e)),{})},ai=function(e={}){return"string"==typeof e&&(e=JSON.parse(e)),e.fwd=ni(e.fwd||""),e.both=ni(e.both||""),e.rev=ni(e.rev||""),e.ex=ni(e.ex||""),e},ri=ai({fwd:"1:tted,wed,gged,nned,een,rred,pped,yed,bbed,oed,dded,rd,wn,mmed¦2:eed,nded,et,hted,st,oled,ut,emed,eled,lded,ken,rt,nked,apt,ant,eped,eked¦3:eared,eat,eaded,nelled,ealt,eeded,ooted,eaked,eaned,eeted,mited,bid,uit,ead,uited,ealed,geted,velled,ialed,belled¦4:ebuted,hined,comed¦y:ied¦ome:ame¦ear:ore¦ind:ound¦ing:ung,ang¦ep:pt¦ink:ank,unk¦ig:ug¦all:ell¦ee:aw¦ive:ave¦eeze:oze¦old:eld¦ave:ft¦ake:ook¦ell:old¦ite:ote¦ide:ode¦ine:one¦in:un,on¦eal:ole¦im:am¦ie:ay¦and:ood¦1ise:rose¦1eak:roke¦1ing:rought¦1ive:rove¦1el:elt¦1id:bade¦1et:got¦1y:aid¦1it:sat¦3e:lid¦3d:pent",both:"1:aed,fed,xed,hed¦2:sged,xted,wled,rped,lked,kied,lmed,lped,uped,bted,rbed,rked,wned,rled,mped,fted,mned,mbed,zzed,omed,ened,cked,gned,lted,sked,ued,zed,nted,ered,rted,rmed,ced,sted,rned,ssed,rded,pted,ved,cted¦3:cled,eined,siped,ooned,uked,ymed,jored,ouded,ioted,oaned,lged,asped,iged,mured,oided,eiled,yped,taled,moned,yled,lit,kled,oaked,gled,naled,fled,uined,oared,valled,koned,soned,aided,obed,ibed,meted,nicked,rored,micked,keted,vred,ooped,oaded,rited,aired,auled,filled,ouled,ooded,ceted,tolled,oited,bited,aped,tled,vored,dled,eamed,nsed,rsed,sited,owded,pled,sored,rged,osed,pelled,oured,psed,oated,loned,aimed,illed,eured,tred,ioned,celled,bled,wsed,ooked,oiled,itzed,iked,iased,onged,ased,ailed,uned,umed,ained,auded,nulled,ysed,eged,ised,aged,oined,ated,used,dged,doned¦4:ntied,efited,uaked,caded,fired,roped,halled,roked,himed,culed,tared,lared,tuted,uared,routed,pited,naked,miled,houted,helled,hared,cored,caled,tired,peated,futed,ciled,called,tined,moted,filed,sided,poned,iloted,honed,lleted,huted,ruled,cured,named,preted,vaded,sured,talled,haled,peded,gined,nited,uided,ramed,feited,laked,gured,ctored,unged,pired,cuted,voked,eloped,ralled,rined,coded,icited,vided,uaded,voted,mined,sired,noted,lined,nselled,luted,jured,fided,puted,piled,pared,olored,cided,hoked,enged,tured,geoned,cotted,lamed,uiled,waited,udited,anged,luded,mired,uired,raded¦5:modelled,izzled,eleted,umpeted,ailored,rseded,treated,eduled,ecited,rammed,eceded,atrolled,nitored,basted,twined,itialled,ncited,gnored,ploded,xcited,nrolled,namelled,plored,efeated,redited,ntrolled,nfined,pleted,llided,lcined,eathed,ibuted,lloted,dhered,cceded¦3ad:sled¦2aw:drew¦2ot:hot¦2ke:made¦2ow:hrew,grew¦2ose:hose¦2d:ilt¦2in:egan¦1un:ran¦1ink:hought¦1ick:tuck¦1ike:ruck¦1eak:poke,nuck¦1it:pat¦1o:did¦1ow:new¦1ake:woke¦go:went",rev:"3:rst,hed,hut,cut,set¦4:tbid¦5:dcast,eread,pread,erbid¦ought:uy,eek¦1ied:ny,ly,dy,ry,fy,py,vy,by,ty,cy¦1ung:ling,ting,wing¦1pt:eep¦1ank:rink¦1ore:bear,wear¦1ave:give¦1oze:reeze¦1ound:rind,wind¦1ook:take,hake¦1aw:see¦1old:sell¦1ote:rite¦1ole:teal¦1unk:tink¦1am:wim¦1ay:lie¦1ood:tand¦1eld:hold¦2d:he,ge,re,le,leed,ne,reed,be,ye,lee,pe,we¦2ed:dd,oy,or,ey,gg,rr,us,ew,to¦2ame:ecome,rcome¦2ped:ap¦2ged:ag,og,ug,eg¦2bed:ub,ab,ib,ob¦2lt:neel¦2id:pay¦2ang:pring¦2ove:trive¦2med:um¦2ode:rride¦2at:ysit¦3ted:mit,hat,mat,lat,pot,rot,bat¦3ed:low,end,tow,und,ond,eem,lay,cho,dow,xit,eld,ald,uld,law,lel,eat,oll,ray,ank,fin,oam,out,how,iek,tay,haw,ait,vet,say,cay,bow¦3d:ste,ede,ode,ete,ree,ude,ame,oke,ote,ime,ute,ade¦3red:lur,cur,pur,car¦3ped:hop,rop,uip,rip,lip,tep,top¦3ded:bed,rod,kid¦3ade:orbid¦3led:uel¦3ned:lan,can,kin,pan,tun¦3med:rim,lim¦4ted:quit,llot¦4ed:pear,rrow,rand,lean,mand,anel,pand,reet,link,abel,evel,imit,ceed,ruit,mind,peal,veal,hool,head,pell,well,mell,uell,band,hear,weak¦4led:nnel,qual,ebel,ivel¦4red:nfer,efer,sfer¦4n:sake,trew¦4d:ntee¦4ded:hred¦4ned:rpin¦5ed:light,nceal,right,ndear,arget,hread,eight,rtial,eboot¦5d:edite,nvite¦5ted:egret¦5led:ravel",ex:"2:been,upped¦3:added,aged,aided,aimed,aired,bid,died,dyed,egged,erred,eyed,fit,gassed,hit,lied,owed,pent,pied,tied,used,vied,oiled,outed,banned,barred,bet,canned,cut,dipped,donned,ended,feed,inked,jarred,let,manned,mowed,netted,padded,panned,pitted,popped,potted,put,set,sewn,sowed,tanned,tipped,topped,vowed,weed,bowed,jammed,binned,dimmed,hopped,mopped,nodded,pinned,rigged,sinned,towed,vetted¦4:ached,baked,baled,boned,bored,called,caned,cared,ceded,cited,coded,cored,cubed,cured,dared,dined,edited,exited,faked,fared,filed,fined,fired,fuelled,gamed,gelled,hired,hoped,joked,lined,mined,named,noted,piled,poked,polled,pored,pulled,reaped,roamed,rolled,ruled,seated,shed,sided,timed,tolled,toned,voted,waited,walled,waned,winged,wiped,wired,zoned,yelled,tamed,lubed,roped,faded,mired,caked,honed,banged,culled,heated,raked,welled,banded,beat,cast,cooled,cost,dealt,feared,folded,footed,handed,headed,heard,hurt,knitted,landed,leaked,leapt,linked,meant,minded,molded,neared,needed,peaked,plodded,plotted,pooled,quit,read,rooted,sealed,seeded,seeped,shipped,shunned,skimmed,slammed,sparred,stemmed,stirred,suited,thinned,twinned,swayed,winked,dialed,abutted,blotted,fretted,healed,heeded,peeled,reeled¦5:basted,cheated,equalled,eroded,exiled,focused,opined,pleated,primed,quoted,scouted,shored,sloped,smoked,sniped,spelled,spouted,routed,staked,stored,swelled,tasted,treated,wasted,smelled,dwelled,honored,prided,quelled,eloped,scared,coveted,sweated,breaded,cleared,debuted,deterred,freaked,modeled,pleaded,rebutted,speeded¦6:anchored,defined,endured,impaled,invited,refined,revered,strolled,cringed,recast,thrust,unfolded¦7:authored,combined,competed,conceded,convened,excreted,extruded,redefined,restored,secreted,rescinded,welcomed¦8:expedited,infringed¦9:interfered,intervened,persevered¦10:contravened¦eat:ate¦is:was¦go:went¦are:were¦3d:bent,lent,rent,sent¦3e:bit,fled,hid,lost¦3ed:bled,bred¦2ow:blew,grew¦1uy:bought¦2tch:caught¦1o:did¦1ive:dove,gave¦2aw:drew¦2ed:fed¦2y:flew,laid,paid,said¦1ight:fought¦1et:got¦2ve:had¦1ang:hung¦2ad:led¦2ght:lit¦2ke:made¦2et:met¦1un:ran¦1ise:rose¦1it:sat¦1eek:sought¦1each:taught¦1ake:woke,took¦1eave:wove¦2ise:arose¦1ear:bore,tore,wore¦1ind:bound,found,wound¦2eak:broke¦2ing:brought,wrung¦1ome:came¦2ive:drove¦1ig:dug¦1all:fell¦2el:felt¦4et:forgot¦1old:held¦2ave:left¦1ing:rang,sang¦1ide:rode¦1ink:sank¦1ee:saw¦2ine:shone¦4e:slid¦1ell:sold,told¦4d:spent¦2in:spun¦1in:won"}),oi=ai(Qo),ii=ai(qo),si=ai(Ro),li=ei(ri),ui=ei(oi),ci=ei(ii),di=ei(si),hi=ai(Uo),gi=ai(Zo);var mi={fromPast:ri,fromPresent:oi,fromGerund:ii,fromParticiple:si,toPast:li,toPresent:ui,toGerund:ci,toParticiple:di,toComparative:hi,toSuperlative:gi,fromComparative:ei(hi),fromSuperlative:ei(gi),adjToNoun:ai(Xo)},pi=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","bureau","cafe","co","caisse","capital","care","cathedral","center","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","data","departement","department","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","faculty","faction","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","llc","ltd","limited","machines","magazine","management","marine","marketing","markets","media","memorial","ministere","ministry","military","mobile","motor","motors","musee","museum","news","observatory","office","oil","optical","orchestra","organization","partners","partnership","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","politburo","polytechnic","post","power","press","productions","quartet","radio","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","societe","subsidiary","society","sons","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce(((e,t)=>(e[t]=!0,e)),{}),fi=["atoll","basin","bay","beach","bluff","bog","camp","canyon","canyons","cape","cave","caves","cliffs","coast","cove","coves","crater","crossing","creek","desert","dune","dunes","downs","estates","escarpment","estuary","falls","fjord","fjords","forest","forests","glacier","gorge","gorges","grove","gulf","gully","highland","heights","hollow","hill","hills","inlet","island","islands","isthmus","junction","knoll","lagoon","lake","lakeshore","marsh","marshes","mount","mountain","mountains","narrows","peninsula","plains","plateau","pond","rapids","ravine","reef","reefs","ridge","river","rivers","sandhill","shoal","shore","shoreline","shores","strait","straits","springs","stream","swamp","tombolo","trail","trails","trench","valley","vallies","village","volcano","waterfall","watershed","wetland","woods","acres","burough","county","district","municipality","prefecture","province","region","reservation","state","territory","borough","metropolis","downtown","uptown","midtown","city","town","township","hamlet","country","kingdom","enclave","neighbourhood","neighborhood","kingdom","ward","zone","airport","amphitheater","arch","arena","auditorium","bar","barn","basilica","battlefield","bridge","building","castle","centre","coliseum","cineplex","complex","dam","farm","field","fort","garden","gardens","gymnasium","hall","house","levee","library","manor","memorial","monument","museum","gallery","palace","pillar","pits","plantation","playhouse","quarry","sportsfield","sportsplex","stadium","terrace","terraces","theater","tower","park","parks","site","ranch","raceway","sportsplex","ave","st","street","rd","road","lane","landing","crescent","cr","way","tr","terrace","avenue"].reduce(((e,t)=>(e[t]=!0,e)),{}),bi=[[/([^v])ies$/i,"$1y"],[/(ise)s$/i,"$1"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(ause)s$/i,"$1"],[/(ease)s$/i,"$1"],[/(ious)es$/i,"$1"],[/(ouse)s$/i,"$1"],[/(ose)s$/i,"$1"],[/(..ase)s$/i,"$1"],[/(..[aeiu]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/([xo]|ch|ss|sh)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ic)s$/i,"$1"],[/s$/i,""]];const yi=function(e,t){const{irregularPlurals:n}=t.two,a=(r=n,Object.keys(r).reduce(((e,t)=>(e[r[t]]=t,e)),{}));var r;if(a.hasOwnProperty(e))return a[e];for(let t=0;t(wi[t].forEach((n=>e[n]=t)),e)),{});const ki=function(e){const t=e.substring(e.length-3);if(!0===wi.hasOwnProperty(t))return wi[t];const n=e.substring(e.length-2);if(!0===wi.hasOwnProperty(n))return wi[n];return"s"===e.substring(e.length-1)?"PresentTense":null},Pi={are:"be",were:"be",been:"be",is:"be",am:"be",was:"be",be:"be",being:"be"},Ai=function(e,t,n){const{fromPast:a,fromPresent:r,fromGerund:o,fromParticiple:i}=t.two.models,{prefix:s,verb:l,particle:u}=function(e,t){let n="",a={};t.one&&t.one.prefixes&&(a=t.one.prefixes);let[r,o]=e.split(/ /);return o&&!0===a[r]&&(n=r,r=o,o=""),{prefix:n,verb:r,particle:o}}(e,t);let c="";if(n||(n=ki(e)),Pi.hasOwnProperty(e))c=Pi[e];else if("Participle"===n)c=_o(l,i);else if("PastTense"===n)c=_o(l,a);else if("PresentTense"===n)c=_o(l,r);else{if("Gerund"!==n)return e;c=_o(l,o)}return u&&(c+=" "+u),s&&(c=s+" "+c),c},Ci=function(e,t){const{toPast:n,toPresent:a,toGerund:r,toParticiple:o}=t.two.models;if("be"===e)return{Infinitive:e,Gerund:"being",PastTense:"was",PresentTense:"is"};const[i,s]=(e=>/ /.test(e)?e.split(/ /):[e,""])(e),l={Infinitive:i,PastTense:_o(i,n),PresentTense:_o(i,a),Gerund:_o(i,r),FutureTense:"will "+i};let u=_o(i,o);if(u!==e&&u!==l.PastTense){const n=t.one.lexicon||{};"Participle"!==n[u]&&"Adjective"!==n[u]||("play"===e&&(u="played"),l.Participle=u)}return s&&Object.keys(l).forEach((e=>{l[e]+=" "+s})),l};var ji={toInfinitive:Ai,conjugate:Ci,all:function(e,t){const n=Ci(e,t);return delete n.FutureTense,Object.values(n).filter((e=>e))}};const Ni=function(e,t){const n=t.two.models.toSuperlative;return _o(e,n)},Ii=function(e,t){const n=t.two.models.toComparative;return _o(e,n)},Di=function(e="",t=[]){const n=e.length;for(let a=n<=6?n-1:6;a>=1;a-=1){const r=e.substring(n-a,e.length);if(!0===t[r.length].hasOwnProperty(r)){return e.slice(0,n-a)+t[r.length][r]}}return null},Hi="ically",Gi=new Set(["analyt"+Hi,"chem"+Hi,"class"+Hi,"clin"+Hi,"crit"+Hi,"ecolog"+Hi,"electr"+Hi,"empir"+Hi,"frant"+Hi,"grammat"+Hi,"ident"+Hi,"ideolog"+Hi,"log"+Hi,"mag"+Hi,"mathemat"+Hi,"mechan"+Hi,"med"+Hi,"method"+Hi,"method"+Hi,"mus"+Hi,"phys"+Hi,"phys"+Hi,"polit"+Hi,"pract"+Hi,"rad"+Hi,"satir"+Hi,"statist"+Hi,"techn"+Hi,"technolog"+Hi,"theoret"+Hi,"typ"+Hi,"vert"+Hi,"whims"+Hi]),Ti=[null,{},{ly:""},{ily:"y",bly:"ble",ply:"ple"},{ally:"al",rply:"rp"},{ually:"ual",ially:"ial",cally:"cal",eally:"eal",rally:"ral",nally:"nal",mally:"mal",eeply:"eep",eaply:"eap"},{ically:"ic"}],xi=new Set(["early","only","hourly","daily","weekly","monthly","yearly","mostly","duly","unduly","especially","undoubtedly","conversely","namely","exceedingly","presumably","accordingly","overly","best","latter","little","long","low"]),Ei={wholly:"whole",fully:"full",truly:"true",gently:"gentle",singly:"single",customarily:"customary",idly:"idle",publically:"public",quickly:"quick",superbly:"superb",cynically:"cynical",well:"good"},Fi=[null,{y:"ily"},{ly:"ly",ic:"ically"},{ial:"ially",ual:"ually",tle:"tly",ble:"bly",ple:"ply",ary:"arily"},{},{},{}],Oi={cool:"cooly",whole:"wholly",full:"fully",good:"well",idle:"idly",public:"publicly",single:"singly",special:"especially"},zi=function(e){if(Oi.hasOwnProperty(e))return Oi[e];let t=Di(e,Fi);return t||(t=e+"ly"),t};var Vi={toSuperlative:Ni,toComparative:Ii,toAdverb:zi,toNoun:function(e,t){const n=t.two.models.adjToNoun;return _o(e,n)},fromAdverb:function(e){return e.endsWith("ly")?Gi.has(e)?e.replace(/ically/,"ical"):xi.has(e)?null:Ei.hasOwnProperty(e)?Ei[e]:Di(e,Ti)||e:null},fromSuperlative:function(e,t){const n=t.two.models.fromSuperlative;return _o(e,n)},fromComparative:function(e,t){const n=t.two.models.fromComparative;return _o(e,n)},all:function(e,t){let n=[e];return n.push(Ni(e,t)),n.push(Ii(e,t)),n.push(zi(e)),n=n.filter((e=>e)),n=new Set(n),Array.from(n)}},Bi={noun:vi,verb:ji,adjective:Vi},Si={Singular:(e,t,n,a)=>{const r=a.one.lexicon,o=n.two.transform.noun.toPlural(e,a);r[o]||(t[o]=t[o]||"Plural")},Actor:(e,t,n,a)=>{const r=a.one.lexicon,o=n.two.transform.noun.toPlural(e,a);r[o]||(t[o]=t[o]||["Plural","Actor"])},Comparable:(e,t,n,a)=>{const r=a.one.lexicon,{toSuperlative:o,toComparative:i}=n.two.transform.adjective,s=o(e,a);r[s]||(t[s]=t[s]||"Superlative");const l=i(e,a);r[l]||(t[l]=t[l]||"Comparative"),t[e]="Adjective"},Demonym:(e,t,n,a)=>{const r=n.two.transform.noun.toPlural(e,a);t[r]=t[r]||["Demonym","Plural"]},Infinitive:(e,t,n,a)=>{const r=a.one.lexicon,o=n.two.transform.verb.conjugate(e,a);Object.entries(o).forEach((e=>{r[e[1]]||t[e[1]]||"FutureTense"===e[0]||(t[e[1]]=e[0])}))},PhrasalVerb:(e,t,n,a)=>{const r=a.one.lexicon;t[e]=["PhrasalVerb","Infinitive"];const o=a.one._multiCache,[i,s]=e.split(" ");r[i]||(t[i]=t[i]||"Infinitive");const l=n.two.transform.verb.conjugate(i,a);delete l.FutureTense,Object.entries(l).forEach((e=>{if("Actor"===e[0]||""===e[1])return;t[e[1]]||r[e[1]]||(t[e[1]]=e[0]),o[e[1]]=2;const n=e[1]+" "+s;t[n]=t[n]||[e[0],"PhrasalVerb"]}))},Multiple:(e,t)=>{t[e]=["Multiple","Cardinal"],t[e+"th"]=["Multiple","Ordinal"],t[e+"ths"]=["Multiple","Fraction"]},Cardinal:(e,t)=>{t[e]=["TextValue","Cardinal"]},Ordinal:(e,t)=>{t[e]=["TextValue","Ordinal"],t[e+"s"]=["TextValue","Fraction"]},Place:(e,t)=>{t[e]=["Place","ProperNoun"]},Region:(e,t)=>{t[e]=["Region","ProperNoun"]}};const Ki={e:["mice","louse","antennae","formulae","nebulae","vertebrae","vitae"],i:["tia","octopi","viri","radii","nuclei","fungi","cacti","stimuli"],n:["men"],t:["feet"]},$i=new Set(["israelis","menus","logos"]),Li=["bus","mas","was","ias","xas","vas","cis","lis","nis","ois","ris","sis","tis","xis","aus","cus","eus","fus","gus","ius","lus","nus","das","ous","pus","rus","sus","tus","xus","aos","igos","ados","ogos","'s","ss"],Mi=function(e){if(!e||e.length<=3)return!1;if($i.has(e))return!0;const t=e[e.length-1];return Ki.hasOwnProperty(t)?Ki[t].find((t=>e.endsWith(t))):"s"===t&&!Li.find((t=>e.endsWith(t)))};var Ji={two:{quickSplit:function(e){const t=/[,:;]/,n=[];return e.forEach((e=>{let a=0;e.forEach(((r,o)=>{t.test(r.post)&&function(e,t){const n=/^[0-9]+$/,a=e[t];if(!a)return!1;const r=new Set(["may","april","august","jan"]);if("like"===a.normal||r.has(a.normal))return!1;if(a.tags.has("Place")||a.tags.has("Date"))return!1;if(e[t-1]){const n=e[t-1];if(n.tags.has("Date")||r.has(n.normal))return!1;if(n.tags.has("Adjective")||a.tags.has("Adjective"))return!1}const o=a.normal;return 1!==o.length&&2!==o.length&&4!==o.length||!n.test(o)}(e,o+1)&&(n.push(e.slice(a,o+1)),a=o+1)})),a{const i=e[t],s=(t=(t=t.toLowerCase().trim()).replace(/'s\b/,"")).split(/ /);s.length>1&&(void 0===o[s[0]]||s.length>o[s[0]])&&(o[s[0]]=s.length),!0===Si.hasOwnProperty(i)&&Si[i](t,r,n,a),r[t]=r[t]||i})),delete r[""],delete r.null,delete r[" "],{lex:r,_multi:o}},transform:Bi,looksPlural:Mi}};const Wi={one:{lexicon:{}},two:{models:mi}},Ui={"Actor|Verb":"Actor","Adj|Gerund":"Adjective","Adj|Noun":"Adjective","Adj|Past":"Adjective","Adj|Present":"Adjective","Noun|Verb":"Singular","Noun|Gerund":"Gerund","Person|Noun":"Noun","Person|Date":"Month","Person|Verb":"FirstName","Person|Place":"Person","Person|Adj":"Comparative","Plural|Verb":"Plural","Unit|Noun":"Noun"},qi=function(e,t){const n={model:t,methods:Ji},{lex:a,_multi:r}=Ji.two.expandLexicon(e,n);return Object.assign(t.one.lexicon,a),Object.assign(t.one._multiCache,r),t},Ri=function(e,t,n){const a=Ci(e,Wi);t[a.PastTense]=t[a.PastTense]||"PastTense",t[a.Gerund]=t[a.Gerund]||"Gerund",!0===n&&(t[a.PresentTense]=t[a.PresentTense]||"PresentTense")},Qi=function(e,t,n){const a=Ni(e,n);t[a]=t[a]||"Superlative";const r=Ii(e,n);t[r]=t[r]||"Comparative"},Zi=function(e,t){const n={},a=t.one.lexicon;return Object.keys(e).forEach((r=>{const o=e[r];if(n[r]=Ui[o],"Noun|Verb"!==o&&"Person|Verb"!==o&&"Actor|Verb"!==o||Ri(r,a,!1),"Adj|Present"===o&&(Ri(r,a,!0),Qi(r,a,t)),"Person|Adj"===o&&Qi(r,a,t),"Adj|Gerund"===o||"Noun|Gerund"===o){const e=Ai(r,Wi,"Gerund");a[e]||(n[e]="Infinitive")}if("Noun|Gerund"!==o&&"Adj|Noun"!==o&&"Person|Noun"!==o||function(e,t,n){const a=Pr(e,n);t[a]=t[a]||"Plural"}(r,a,t),"Adj|Past"===o){const e=Ai(r,Wi,"PastTense");a[e]||(n[e]="Infinitive")}})),t=qi(n,t)};let Xi={one:{_multiCache:{},lexicon:Cr,frozenLex:{"20th century fox":"Organization","7 eleven":"Organization","motel 6":"Organization","excuse me":"Expression","financial times":"Organization","guns n roses":"Organization","la z boy":"Organization","labour party":"Organization","new kids on the block":"Organization","new york times":"Organization","the guess who":"Organization","thin lizzy":"Organization","prime minister":"Actor","free market":"Singular","lay up":"Singular","living room":"Singular","living rooms":"Plural","spin off":"Singular","appeal court":"Uncountable","cold war":"Uncountable","gene pool":"Uncountable","machine learning":"Uncountable","nail polish":"Uncountable","time off":"Uncountable","take part":"Infinitive","bill gates":"Person","doctor who":"Person","dr who":"Person","he man":"Person","iron man":"Person","kid cudi":"Person","run dmc":"Person","rush limbaugh":"Person","snow white":"Person","tiger woods":"Person","brand new":"Adjective","en route":"Adjective","left wing":"Adjective","off guard":"Adjective","on board":"Adjective","part time":"Adjective","right wing":"Adjective","so called":"Adjective","spot on":"Adjective","straight forward":"Adjective","super duper":"Adjective","tip top":"Adjective","top notch":"Adjective","up to date":"Adjective","win win":"Adjective","brooklyn nets":"SportsTeam","chicago bears":"SportsTeam","houston astros":"SportsTeam","houston dynamo":"SportsTeam","houston rockets":"SportsTeam","houston texans":"SportsTeam","minnesota twins":"SportsTeam","orlando magic":"SportsTeam","san antonio spurs":"SportsTeam","san diego chargers":"SportsTeam","san diego padres":"SportsTeam","iron maiden":"ProperNoun","isle of man":"Country","united states":"Country","united states of america":"Country","prince edward island":"Region","cedar breaks":"Place","cedar falls":"Place","point blank":"Adverb","tiny bit":"Adverb","by the time":"Conjunction","no matter":"Conjunction","civil wars":"Plural","credit cards":"Plural","default rates":"Plural","free markets":"Plural","head starts":"Plural","home runs":"Plural","lay ups":"Plural","phone calls":"Plural","press releases":"Plural","record labels":"Plural","soft serves":"Plural","student loans":"Plural","tax returns":"Plural","tv shows":"Plural","video games":"Plural","took part":"PastTense","takes part":"PresentTense","taking part":"Gerund","taken part":"Participle","light bulb":"Noun","rush hour":"Noun","fluid ounce":"Unit","the rolling stones":"Organization"}},two:{irregularPlurals:dr,models:mi,suffixPatterns:No,prefixPatterns:Go,endsWith:Lo,neighbours:Wo,regexNormal:[[/^[\w.]+@[\w.]+\.[a-z]{2,3}$/,"Email"],[/^(https?:\/\/|www\.)+\w+\.[a-z]{2,3}/,"Url","http.."],[/^[a-z0-9./].+\.(com|net|gov|org|ly|edu|info|biz|dev|ru|jp|de|in|uk|br|io|ai)/,"Url",".com"],[/^[PMCE]ST$/,"Timezone","EST"],[/^ma?c'[a-z]{3}/,"LastName","mc'neil"],[/^o'[a-z]{3}/,"LastName","o'connor"],[/^ma?cd[aeiou][a-z]{3}/,"LastName","mcdonald"],[/^(lol)+[sz]$/,"Expression","lol"],[/^wo{2,}a*h?$/,"Expression","wooah"],[/^(hee?){2,}h?$/,"Expression","hehe"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb","un-vite"],[/^(m|k|cm|km)\/(s|h|hr)$/,"Unit","5 k/m"],[/^(ug|ng|mg)\/(l|m3|ft3)$/,"Unit","ug/L"],[/[^:/]\/\p{Letter}/u,"SlashedTerm","love/hate"]],regexText:[[/^#[\p{Number}_]*\p{Letter}/u,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^([A-Z]\.){2}[A-Z]?/i,["Acronym","Noun"],"F.B.I"],[/.{3}[lkmnp]in['‘’‛‵′`´]$/,"Gerund","chillin'"],[/.{4}s['‘’‛‵′`´]$/,"Possessive","flanders'"],[/^[\p{Emoji_Presentation}\p{Extended_Pictographic}]/u,"Emoji","emoji-class"]],regexNumbers:[[/^@1?[0-9](am|pm)$/i,"Time","3pm"],[/^@1?[0-9]:[0-9]{2}(am|pm)?$/i,"Time","3:30pm"],[/^'[0-9]{2}$/,"Year"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time","3:12:31"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/i,"Time","1:12pm"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/i,"Time","1:12:31pm"],[/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}/i,"Date","iso-date"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date","iso-dash"],[/^[0-9]{1,4}\/[0-9]{1,2}\/([0-9]{4}|[0-9]{2})$/,"Date","iso-slash"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date","iso-dot"],[/^[0-9]{1,4}-[a-z]{2,9}-[0-9]{1,4}$/i,"Date","12-dec-2019"],[/^utc ?[+-]?[0-9]+$/,"Timezone","utc-9"],[/^(gmt|utc)[+-][0-9]{1,2}$/i,"Timezone","gmt-3"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber","421-0029"],[/^(\+?[0-9][ -])?[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber","1-800-"],[/^[-+]?\p{Currency_Symbol}[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?([kmb]|bn)?\+?$/u,["Money","Value"],"$5.30"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\p{Currency_Symbol}\+?$/u,["Money","Value"],"5.30£"],[/^[-+]?[$£]?[0-9]([0-9,.])+(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"],"$400usd"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"],"5,999"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|r?th)$/,["Ordinal","NumericValue"],"53rd"],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"],".73th"],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"],"-4%"],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"],".3%"],[/^[0-9]{1,4}\/[0-9]{1,4}(st|nd|rd|th)?s?$/,["Fraction","NumericValue"],"2/3rds"],[/^[0-9.]{1,3}[a-z]{0,2}[-–—][0-9]{1,3}[a-z]{0,2}$/,["Value","NumberRange"],"3-4"],[/^[0-9]{1,2}(:[0-9][0-9])?(am|pm)? ?[-–—] ?[0-9]{1,2}(:[0-9][0-9])?(am|pm)$/,["Time","NumberRange"],"3-4pm"],[/^[0-9.]+([a-z°]{1,4})$/,"NumericValue","9km"]],switches:jr,clues:uo,uncountable:{},orgWords:pi,placeWords:fi}};Xi=function(e){return e=function(e,t){return Object.keys(e).forEach((n=>{"Uncountable"===e[n]&&(t.two.uncountable[n]=!0,e[n]="Uncountable")})),t}((e=qi(e.one.lexicon,e)).one.lexicon,e),e=function(e){const{irregularPlurals:t}=e.two,{lexicon:n}=e.one;return Object.entries(t).forEach((e=>{n[e[0]]=n[e[0]]||"Singular",n[e[1]]=n[e[1]]||"Plural"})),e}(e=Zi(e.two.switches,e)),e}(Xi);const _i=function(e,t,n,a){const r=a.methods.one.setTag;"-"===e[t].post&&e[t+1]&&r([e[t],e[t+1]],"Hyphenated",a,null,"1-punct-hyphen''")},Yi=/^(under|over|mis|re|un|dis|semi)-?/,es=function(e,t,n){const a=n.two.switches,r=e[t];if(a.hasOwnProperty(r.normal))r.switch=a[r.normal];else if(Yi.test(r.normal)){const e=r.normal.replace(Yi,"");e.length>3&&a.hasOwnProperty(e)&&(r.switch=a[e])}},ts=function(e,t,n){if(!t||0===t.length)return;if(!0===e.frozen)return;const a="undefined"!=typeof process&&process.env?process.env:self.env||{};a&&a.DEBUG_TAGS&&((e,t,n="")=>{const a=e.text||"["+e.implicit+"]";var r;"string"!=typeof t&&t.length>2&&(t=t.slice(0,2).join(", #")+" +"),t="string"!=typeof t?t.join(", #"):t,console.log(` ${(r=a,""+r+"").padEnd(24)} → #${t.padEnd(22)} ${(e=>""+e+"")(n)}`)})(e,t,n),e.tags=e.tags||new Set,"string"==typeof t?e.tags.add(t):t.forEach((t=>e.tags.add(t)))},ns=["Acronym","Abbreviation","ProperNoun","Uncountable","Possessive","Pronoun","Activity","Honorific","Month"],as=function(e,t,n){const a=e[t],r=Array.from(a.tags);for(let e=0;ee.tags.has(t)))||(Mi(e.normal)?ts(e,"Plural","3-plural-guess"):ts(e,"Singular","3-singular-guess"))}(a),function(e){const t=e.tags;if(t.has("Verb")&&1===t.size){const t=ki(e.normal);t&&ts(e,t,"3-verb-tense-guess")}}(a)},rs=/^\p{Lu}[\p{Ll}'’]/u,os=/[0-9]/,is=["Date","Month","WeekDay","Unit","Expression"],ss=/[IVX]/,ls=/^[IVXLCDM]{2,}$/,us=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,cs={li:!0,dc:!0,md:!0,dm:!0,ml:!0},ds=function(e,t,n){const a=e[t];a.index=a.index||[0,0];const r=a.index[1],o=a.text||"";return 0!==r&&!0===rs.test(o)&&!1===os.test(o)?is.find((e=>a.tags.has(e)))||a.pre.match(/["']$/)||"the"===a.normal?null:(as(e,t,n),a.tags.has("Noun")||a.frozen||a.tags.clear(),ts(a,"ProperNoun","2-titlecase"),!0):o.length>=2&&ls.test(o)&&ss.test(o)&&us.test(o)&&!cs[a.normal]?(ts(a,"RomanNumeral","2-xvii"),!0):null},hs=function(e="",t=[]){const n=e.length;let a=7;n<=a&&(a=n-1);for(let r=a;r>1;r-=1){const a=e.substring(n-r,n);if(!0===t[a.length].hasOwnProperty(a)){return t[a.length][a]}}return null},gs=function(e,t,n){const a=e[t];if(0===a.tags.size){let e=hs(a.normal,n.two.suffixPatterns);if(null!==e)return ts(a,e,"2-suffix"),a.confidence=.7,!0;if(a.implicit&&(e=hs(a.implicit,n.two.suffixPatterns),null!==e))return ts(a,e,"2-implicit-suffix"),a.confidence=.7,!0}return null},ms=/['‘’‛‵′`´]/,ps=function(e,t){for(let n=0;nn-3&&(a=n-3);for(let n=a;n>2;n-=1){const a=e.substring(0,n);if(!0===t[a.length].hasOwnProperty(a))return t[a.length][a]}return null}(a.normal,n.two.prefixPatterns);if(null!==e)return ts(a,e,"2-prefix"),a.confidence=.5,!0}return null},ys=new Set(["in","on","by","until","for","to","during","throughout","through","within","before","after","of","this","next","last","circa","around","post","pre","budget","classic","plan","may"]),vs=function(e){if(!e)return!1;const t=e.normal||e.implicit;return!!ys.has(t)||(!!(e.tags.has("Date")||e.tags.has("Month")||e.tags.has("WeekDay")||e.tags.has("Year"))||!!e.tags.has("ProperNoun"))},ws=function(e){return!!e&&(!!e.tags.has("Ordinal")||(!!(e.tags.has("Cardinal")&&e.normal.length<3)||("is"===e.normal||"was"===e.normal)))},ks=function(e){return e&&(e.tags.has("Date")||e.tags.has("Month")||e.tags.has("WeekDay")||e.tags.has("Year"))},Ps=function(e,t){const n=e[t];if(n.tags.has("NumericValue")&&n.tags.has("Cardinal")&&4===n.normal.length){const a=Number(n.normal);if(a&&!isNaN(a)&&a>1400&&a<2100){const r=e[t-1],o=e[t+1];if(vs(r)||vs(o))return ts(n,"Year","2-tagYear");if(a>=1920&&a<2025){if(ws(r)||ws(o))return ts(n,"Year","2-tagYear-close");if(ks(e[t-2])||ks(e[t+2]))return ts(n,"Year","2-tagYear-far");if(r&&(r.tags.has("Determiner")||r.tags.has("Possessive"))&&o&&o.tags.has("Noun")&&!o.tags.has("Plural"))return ts(n,"Year","2-tagYear-noun")}}}return null},As=function(e,t,n,a){const r=a.methods.one.setTag,o=e[t],i=["PastTense","PresentTense","Auxiliary","Modal","Particle"];if(o.tags.has("Verb")){i.find((e=>o.tags.has(e)))||r([o],"Infinitive",a,null,"2-verb-type''")}},Cs=/^[A-Z]('s|,)?$/,js=/^[A-Z-]+$/,Ns=/^[A-Z]+s$/,Is=/([A-Z]\.)+[A-Z]?,?$/,Ds=/[A-Z]{2,}('s|,)?$/,Hs=/([a-z]\.)+[a-z]\.?$/,Gs={I:!0,A:!0},Ts={la:!0,ny:!0,us:!0,dc:!0,gb:!0},xs=function(e,t,n){const a=e[t];return a.tags.has("RomanNumeral")||a.tags.has("Acronym")||a.frozen?null:function(e,t){let n=e.text;if(!1===js.test(n)){if(!(n.length>3&&!0===Ns.test(n)))return!1;n=n.replace(/s$/,"")}return!(n.length>5||Gs.hasOwnProperty(n)||t.one.lexicon.hasOwnProperty(e.normal)||!0!==Is.test(n)&&!0!==Hs.test(n)&&!0!==Cs.test(n)&&!0!==Ds.test(n))}(a,n)?(a.tags.clear(),ts(a,["Acronym","Noun"],"3-no-period-acronym"),!0===Ts[a.normal]&&ts(a,"Place","3-place-acronym"),!0===Ns.test(a.text)&&ts(a,"Plural","3-plural-acronym"),!0):!Gs.hasOwnProperty(a.text)&&Cs.test(a.text)?(a.tags.clear(),ts(a,["Acronym","Noun"],"3-one-letter-acronym"),!0):a.tags.has("Organization")&&a.text.length<=3?(ts(a,"Acronym","3-org-acronym"),!0):a.tags.has("Organization")&&js.test(a.text)&&a.text.length<=6?(ts(a,"Acronym","3-titlecase-acronym"),!0):null},Es=function(e,t){if(!e)return null;const n=t.find((t=>e.normal===t[0]));return n?n[1]:null},Fs=function(e,t){if(!e)return null;const n=t.find((t=>e.tags.has(t[0])));return n?n[1]:null},Os=function(e,t,n){const{leftTags:a,leftWords:r,rightWords:o,rightTags:i}=n.two.neighbours,s=e[t];if(0===s.tags.size){let l=null;if(l=l||Es(e[t-1],r),l=l||Es(e[t+1],o),l=l||Fs(e[t-1],a),l=l||Fs(e[t+1],i),l)return ts(s,l,"3-[neighbour]"),as(e,t,n),e[t].confidence=.2,!0}return null},zs=function(e,t,n){return!!e&&(!e.tags.has("FirstName")&&!e.tags.has("Place")&&(!!(e.tags.has("ProperNoun")||e.tags.has("Organization")||e.tags.has("Acronym"))||!(n||(a=e.text,!/^\p{Lu}[\p{Ll}'’]/u.test(a)))&&(0!==t||e.tags.has("Singular"))));var a},Vs=function(e,t,n,a){const r=n.model.two.orgWords,o=n.methods.one.setTag,i=e[t];if(!0===r[i.machine||i.normal]&&zs(e[t-1],t-1,a)){o([e[t]],"Organization",n,null,"3-[org-word]");for(let r=t;r>=0&&zs(e[r],r,a);r-=1)o([e[r]],"Organization",n,null,"3-[org-word]")}return null},Bs=/'s$/,Ss=new Set(["athletic","city","community","eastern","federal","financial","great","historic","historical","local","memorial","municipal","national","northern","provincial","southern","state","western","spring","pine","sunset","view","oak","maple","spruce","cedar","willow"]),Ks=new Set(["center","centre","way","range","bar","bridge","field","pit"]),$s=function(e,t,n){if(!e)return!1;const a=e.tags;return!(a.has("Organization")||a.has("Possessive")||Bs.test(e.normal))&&(!(!a.has("ProperNoun")&&!a.has("Place"))||!(n||(r=e.text,!/^\p{Lu}[\p{Ll}'’]/u.test(r)))&&(0!==t||a.has("Singular")));var r},Ls=function(e,t,n,a){const r=n.model.two.placeWords,o=n.methods.one.setTag,i=e[t],s=i.machine||i.normal;if(!0===r[s]){for(let r=t-1;r>=0;r-=1)if(!Ss.has(e[r].normal)){if(!$s(e[r],r,a))break;o(e.slice(r,t+1),"Place",n,null,"3-[place-of-foo]")}if(Ks.has(s))return!1;for(let r=t+1;re[t].tags.has("ProperNoun")&&Js.test(e[t].text)?"Noun":null,Us=(e,t,n)=>0!==t||e[1]?null:n,qs={"Adj|Gerund":(e,t)=>Ws(e,t),"Adj|Noun":(e,t)=>Ws(e,t)||function(e,t){return!e[t+1]&&e[t-1]&&e[t-1].tags.has("Determiner")?"Noun":null}(e,t),"Actor|Verb":(e,t)=>Ws(e,t),"Adj|Past":(e,t)=>Ws(e,t),"Adj|Present":(e,t)=>Ws(e,t),"Noun|Gerund":(e,t)=>Ws(e,t),"Noun|Verb":(e,t)=>t>0&&Ws(e,t)||Us(e,t,"Infinitive"),"Plural|Verb":(e,t)=>Ws(e,t)||Us(e,t,"PresentTense")||function(e,t,n){return 0===t&&e.length>3?n:null}(e,t,"Plural"),"Person|Noun":(e,t)=>Ws(e,t),"Person|Verb":(e,t)=>0!==t?Ws(e,t):null,"Person|Adj":(e,t)=>0===t&&e.length>1||Ws(e,t)?"Person":null},Rs="undefined"!=typeof process&&process.env?process.env:self.env||{},Qs=/^(under|over|mis|re|un|dis|semi)-?/,Zs=(e,t)=>{if(!e||!t)return null;const n=e.normal||e.implicit;let a=null;return t.hasOwnProperty(n)&&(a=t[n]),a&&Rs.DEBUG_TAGS&&console.log(`\n  ↓ - '${n}' `),a},Xs=(e,t={},n)=>{if(!e||!t)return null;const a=Array.from(e.tags).sort(((e,t)=>(n[e]?n[e].parents.length:0)>(n[t]?n[t].parents.length:0)?-1:1));let r=a.find((e=>t[e]));return r&&Rs.DEBUG_TAGS&&console.log(`  ↓ - '${e.normal||e.implicit}' (#${r}) `),r=t[r],r},_s=function(e,t,n){const a=n.model,r=n.methods.one.setTag,{switches:o,clues:i}=a.two,s=e[t];let l=s.normal||s.implicit||"";if(Qs.test(l)&&!o[l]&&(l=l.replace(Qs,"")),s.switch){const o=s.switch;if(s.tags.has("Acronym")||s.tags.has("PhrasalVerb"))return;let u=function(e,t,n,a){if(!n)return null;const r="also"!==e[t-1]?.text?t-1:Math.max(0,t-2),o=a.one.tagSet;let i=Zs(e[t+1],n.afterWords);return i=i||Zs(e[r],n.beforeWords),i=i||Xs(e[r],n.beforeTags,o),i=i||Xs(e[t+1],n.afterTags,o),i}(e,t,i[o],a);qs[o]&&(u=qs[o](e,t)||u),u?(r([s],u,n,null,`3-[switch] (${o})`),as(e,t,a)):Rs.DEBUG_TAGS&&console.log(`\n -> X - '${l}' : (${o}) `)}},Ys={there:!0,this:!0,it:!0,him:!0,her:!0,us:!0},el=function(e){if(e.filter((e=>!e.tags.has("ProperNoun"))).length<=3)return!1;const t=/^[a-z]/;return e.every((e=>!t.test(e.text)))},tl=function(e,t,n,a){for(let r=0;r=2){if(e.length<4&&!Ys[e[1].normal])return;if(!r.tags.has("PhrasalVerb")&&a.hasOwnProperty(r.normal))return;(e[1].tags.has("Noun")||e[1].tags.has("Determiner"))&&(e.slice(1,3).some((e=>e.tags.has("Verb")))&&!r.tags.has("#PhrasalVerb")||n([r],"Imperative",t,null,"3-[imperative]"))}}(e,n)},al={Possessive:e=>{let t=e.machine||e.normal||e.text;return t=t.replace(/'s$/,""),t},Plural:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.noun.toSingular(n,t.model)},Copula:()=>"is",PastTense:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.verb.toInfinitive(n,t.model,"PastTense")},Gerund:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.verb.toInfinitive(n,t.model,"Gerund")},PresentTense:(e,t)=>{const n=e.machine||e.normal||e.text;return e.tags.has("Infinitive")?n:t.methods.two.transform.verb.toInfinitive(n,t.model,"PresentTense")},Comparative:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.adjective.fromComparative(n,t.model)},Superlative:(e,t)=>{const n=e.machine||e.normal||e.text;return t.methods.two.transform.adjective.fromSuperlative(n,t.model)},Adverb:(e,t)=>{const{fromAdverb:n}=t.methods.two.transform.adjective;return n(e.machine||e.normal||e.text)}},rl={Adverb:"RB",Comparative:"JJR",Superlative:"JJS",Adjective:"JJ",TO:"Conjunction",Modal:"MD",Auxiliary:"MD",Gerund:"VBG",PastTense:"VBD",Participle:"VBN",PresentTense:"VBZ",Infinitive:"VB",Particle:"RP",Verb:"VB",Pronoun:"PRP",Cardinal:"CD",Conjunction:"CC",Determiner:"DT",Preposition:"IN",QuestionWord:"WP",Expression:"UH",Possessive:"POS",ProperNoun:"NNP",Person:"NNP",Place:"NNP",Organization:"NNP",Singular:"NN",Plural:"NNS",Noun:"NN",There:"EX"};var ol={preTagger:function(e){const{methods:t,model:n,world:a}=e,r=e.docs;!function(e,t,n){e.forEach((e=>{!function(e,t,n,a){const r=a.methods.one.setTag;if(e.length>=3){const t=/:/;if(e[0].post.match(t)){const t=e[1];if(t.tags.has("Value")||t.tags.has("Email")||t.tags.has("PhoneNumber"))return;r([e[0]],"Expression",a,null,"2-punct-colon''")}}}(e,0,0,n)}))}(r,0,a);const o=t.two.quickSplit(r);for(let e=0;e{for(let a=0;a{e.forEach((e=>{e.penn=function(e){if(e.tags.has("ProperNoun")&&e.tags.has("Plural"))return"NNPS";if(e.tags.has("Possessive")&&e.tags.has("Pronoun"))return"PRP$";if("there"===e.normal)return"EX";if("to"===e.normal)return"TO";const t=e.tagRank||[];for(let e=0;e{e.implicit=e.normal,e.text="",e.normal=""}));for(let e=0;e(e.implicit=e.text,e.machine=e.text,e.pre="",e.post="",e.text="",e.normal="",e.index=[a,r+t],e))),n[0]&&(n[0].pre=e[a][r].pre,n[n.length-1].post=e[a][r].post,n[0].text=e[a][r].text,n[0].normal=e[a][r].normal),e[a].splice(r,1,...n))},fl=/'/,bl=new Set(["been","become"]),yl=new Set(["what","how","when","if","too"]),vl=new Set(["too","also","enough"]),wl=function(e,t){const n=e[t].normal.split(fl)[0];if("let"===n)return[n,"us"];if("there"===n){const a=e[t+1];if(a&&a.tags.has("Plural"))return[n,"are"]}return"has"===((e,t)=>{for(let n=t+1;n{for(let n=t+1;n0&&(n-=1),e[o]&&(o+=1),r.ptrs=[[0,n,o]],r.compute(["freeze","lexicon","preTagger","unfreeze"]),function(e){e.forEach(((e,t)=>{e.index&&(e.index[1]=t)}))}(e)},Tl={d:(e,t)=>Cl(e,t),t:(e,t)=>function(e,t){if("ain't"===e[t].normal||"aint"===e[t].normal){if(e[t+1]&&"never"===e[t+1].normal)return["have"];const n=function(e,t){for(let n=t-1;n>=0;n-=1)if(e[n].tags.has("Noun")||e[n].tags.has("Pronoun")||e[n].tags.has("Plural")||e[n].tags.has("Singular"))return e[n];return null}(e,t);if(n){if("we"===n.normal||"they"===n.normal)return["are","not"];if("i"===n.normal)return["am","not"];if(n.tags&&n.tags.has("Plural"))return["are","not"]}return["is","not"]}return[e[t].normal.replace(/n't/,""),"not"]}(e,t),s:(e,t,n)=>((e,t)=>{const n=e[t];if(jl.hasOwnProperty(n.machine||n.normal))return!1;if(n.tags.has("Possessive"))return!0;if(n.tags.has("QuestionWord"))return!1;if("he's"===n.normal||"she's"===n.normal)return!1;const a=e[t+1];if(!a)return!0;if("it's"===n.normal)return!!a.tags.has("#Noun");if("Noun|Gerund"==a.switch){const a=e[t+2];return a?!!a.tags.has("Copula")||("on"===a.normal||a.normal,!1):!(!n.tags.has("Actor")&&!n.tags.has("ProperNoun"))}if(a.tags.has("Verb"))return!!a.tags.has("Infinitive")||!a.tags.has("Gerund")&&!!a.tags.has("PresentTense");if("Adj|Noun"===a.switch){const n=e[t+2];if(!n)return!1;if(Dl.has(n.normal))return!0;if(Il.has(n.normal))return!1}if(a.tags.has("Noun")){const e=a.machine||a.normal;return!("here"===e||"there"===e||"everywhere"===e||a.tags.has("Possessive")||a.tags.has("ProperNoun")&&!n.tags.has("ProperNoun"))}if(e[t-1]&&!0===Nl[e[t-1].normal])return!0;if(a.tags.has("Adjective")){const n=e[t+2];if(!n)return!1;if(n.tags.has("Noun")&&!n.tags.has("Pronoun")){const e=a.normal;return"above"!==e&&"below"!==e&&"behind"!==e}return"Noun|Verb"===n.switch}return!!a.tags.has("Value")})(e,t)?n.methods.one.setTag([e[t]],"Possessive",n,null,"2-contraction"):wl(e,t)},xl=function(e,t){const n=t.fromText(e.join(" "));return n.compute("id"),n.docs[0]};var El={contractionTwo:e=>{const{world:t,document:n}=e;n.forEach(((a,r)=>{for(let o=a.length-1;o>=0;o-=1){if(a[o].implicit)continue;let i=null;!0===Hl.test(a[o].normal)&&(i=a[o].normal.split(Hl)[1]);let s=null;Tl.hasOwnProperty(i)&&(s=Tl[i](a,o,t)),s&&(s=xl(s,e),pl(n,[r,o],s),Gl(n[r],e,o,s.length))}}))}},Fl={compute:El,api:function(e){class Contractions extends e{constructor(e,t,n){super(e,t,n),this.viewType="Contraction"}expand(){return this.docs.forEach((e=>{const t=ml.test(e[0].text);e.forEach(((t,n)=>{t.text=t.implicit||"",delete t.implicit,ne.toUpperCase()))}(e[0].text))})),this.compute("normal"),this}}e.prototype.contractions=function(){const e=this.match("@hasContraction+");return new Contractions(this.document,e.pointer)},e.prototype.contract=gl},hooks:["contractionTwo"]};const Ol="(hard|fast|late|early|high|right|deep|close|direct)";const zl="(i|we|they)";const Vl=[].concat([{match:"(got|were|was|is|are|am) (#PastTense|#Participle)",tag:"Passive",reason:"got-walked"},{match:"(was|were|is|are|am) being (#PastTense|#Participle)",tag:"Passive",reason:"was-being"},{match:"(had|have|has) been (#PastTense|#Participle)",tag:"Passive",reason:"had-been"},{match:"will be being? (#PastTense|#Participle)",tag:"Passive",reason:"will-be-cleaned"},{match:"#Noun [(#PastTense|#Participle)] by (the|a) #Noun",group:0,tag:"Passive",reason:"suffered-by"}],[{match:"[(all|both)] #Determiner #Noun",group:0,tag:"Noun",reason:"all-noun"},{match:"#Copula [(just|alone)]$",group:0,tag:"Adjective",reason:"not-adverb"},{match:"#Singular is #Adverb? [#PastTense$]",group:0,tag:"Adjective",reason:"is-filled"},{match:"[#PastTense] #Singular is",group:0,tag:"Adjective",reason:"smoked-poutine"},{match:"[#PastTense] #Plural are",group:0,tag:"Adjective",reason:"baked-onions"},{match:"well [#PastTense]",group:0,tag:"Adjective",reason:"well-made"},{match:"#Copula [fucked up?]",group:0,tag:"Adjective",reason:"swears-adjective"},{match:"#Singular (seems|appears) #Adverb? [#PastTense$]",group:0,tag:"Adjective",reason:"seems-filled"},{match:"#Copula #Adjective? [(out|in|through)]$",group:0,tag:"Adjective",reason:"still-out"},{match:"^[#Adjective] (the|your) #Noun",group:0,notIf:"(all|even)",tag:"Infinitive",reason:"shut-the"},{match:"the [said] #Noun",group:0,tag:"Adjective",reason:"the-said-card"},{match:"[#Hyphenated (#Hyphenated && #PastTense)] (#Noun|#Conjunction)",group:0,tag:"Adjective",notIf:"#Adverb",reason:"faith-based"},{match:"[#Hyphenated (#Hyphenated && #Gerund)] (#Noun|#Conjunction)",group:0,tag:"Adjective",notIf:"#Adverb",reason:"self-driving"},{match:"[#PastTense (#Hyphenated && #PhrasalVerb)] (#Noun|#Conjunction)",group:0,tag:"Adjective",reason:"dammed-up"},{match:"(#Hyphenated && #Value) fold",tag:"Adjective",reason:"two-fold"},{match:"must (#Hyphenated && #Infinitive)",tag:"Adjective",reason:"must-win"},{match:"(#Hyphenated && #Infinitive) #Hyphenated",tag:"Adjective",notIf:"#PhrasalVerb",reason:"vacuum-sealed"},{match:"too much",tag:"Adverb Adjective",reason:"bit-4"},{match:"a bit much",tag:"Determiner Adverb Adjective",reason:"bit-3"},{match:"[(un|contra|extra|inter|intra|macro|micro|mid|mis|mono|multi|pre|sub|tri|ex)] #Adjective",group:0,tag:["Adjective","Prefix"],reason:"un-skilled"}],[{match:"#Adverb [#Adverb] (and|or|then)",group:0,tag:"Adjective",reason:"kinda-sparkly-and"},{match:"[(dark|bright|flat|light|soft|pale|dead|dim|faux|little|wee|sheer|most|near|good|extra|all)] #Adjective",group:0,tag:"Adverb",reason:"dark-green"},{match:"#Copula [far too] #Adjective",group:0,tag:"Adverb",reason:"far-too"},{match:"#Copula [still] (in|#Gerund|#Adjective)",group:0,tag:"Adverb",reason:"was-still-walking"},{match:`#Plural ${Ol}`,tag:"#PresentTense #Adverb",reason:"studies-hard"},{match:`#Verb [${Ol}] !#Noun?`,group:0,notIf:"(#Copula|get|got|getting|become|became|becoming|feel|feels|feeling|#Determiner|#Preposition)",tag:"Adverb",reason:"shops-direct"},{match:"[#Plural] a lot",tag:"PresentTense",reason:"studies-a-lot"}],[{match:"as [#Gerund] as",group:0,tag:"Adjective",reason:"as-gerund-as"},{match:"more [#Gerund] than",group:0,tag:"Adjective",reason:"more-gerund-than"},{match:"(so|very|extremely) [#Gerund]",group:0,tag:"Adjective",reason:"so-gerund"},{match:"(found|found) it #Adverb? [#Gerund]",group:0,tag:"Adjective",reason:"found-it-gerund"},{match:"a (little|bit|wee) bit? [#Gerund]",group:0,tag:"Adjective",reason:"a-bit-gerund"},{match:"#Gerund [#Gerund]",group:0,tag:"Adjective",notIf:"(impersonating|practicing|considering|assuming)",reason:"looking-annoying"},{match:"(looked|look|looks) #Adverb? [%Adj|Gerund%]",group:0,tag:"Adjective",notIf:"(impersonating|practicing|considering|assuming)",reason:"looked-amazing"},{match:"[%Adj|Gerund%] #Determiner",group:0,tag:"Gerund",reason:"developing-a"},{match:"#Possessive [%Adj|Gerund%] #Noun",group:0,tag:"Adjective",reason:"leading-manufacturer"},{match:"%Noun|Gerund% %Adj|Gerund%",tag:"Gerund #Adjective",reason:"meaning-alluring"},{match:"(face|embrace|reveal|stop|start|resume) %Adj|Gerund%",tag:"#PresentTense #Adjective",reason:"face-shocking"},{match:"(are|were) [%Adj|Gerund%] #Plural",group:0,tag:"Adjective",reason:"are-enduring-symbols"}],[{match:"#Determiner [#Adjective] #Copula",group:0,tag:"Noun",reason:"the-adj-is"},{match:"#Adjective [#Adjective] #Copula",group:0,tag:"Noun",reason:"adj-adj-is"},{match:"(his|its) [%Adj|Noun%]",group:0,tag:"Noun",notIf:"#Hyphenated",reason:"his-fine"},{match:"#Copula #Adverb? [all]",group:0,tag:"Noun",reason:"is-all"},{match:"(have|had) [#Adjective] #Preposition .",group:0,tag:"Noun",reason:"have-fun"},{match:"#Gerund (giant|capital|center|zone|application)",tag:"Noun",reason:"brewing-giant"},{match:"#Preposition (a|an) [#Adjective]$",group:0,tag:"Noun",reason:"an-instant"},{match:"no [#Adjective] #Modal",group:0,tag:"Noun",reason:"no-golden"},{match:"[brand #Gerund?] new",group:0,tag:"Adverb",reason:"brand-new"},{match:"(#Determiner|#Comparative|new|different) [kind]",group:0,tag:"Noun",reason:"some-kind"},{match:"#Possessive [%Adj|Noun%] #Noun",group:0,tag:"Adjective",reason:"her-favourite"},{match:"must && #Hyphenated .",tag:"Adjective",reason:"must-win"},{match:"#Determiner [#Adjective]$",tag:"Noun",notIf:"(this|that|#Comparative|#Superlative)",reason:"the-south"},{match:"(#Noun && #Hyphenated) (#Adjective && #Hyphenated)",tag:"Adjective",notIf:"(this|that|#Comparative|#Superlative)",reason:"company-wide"},{match:"#Determiner [#Adjective] (#Copula|#Determiner)",notIf:"(#Comparative|#Superlative)",group:0,tag:"Noun",reason:"the-poor"},{match:"[%Adj|Noun%] #Noun",notIf:"(#Pronoun|#ProperNoun)",group:0,tag:"Adjective",reason:"stable-foundations"}],[{match:"[still] #Adjective",group:0,tag:"Adverb",reason:"still-advb"},{match:"[still] #Verb",group:0,tag:"Adverb",reason:"still-verb"},{match:"[so] #Adjective",group:0,tag:"Adverb",reason:"so-adv"},{match:"[way] #Comparative",group:0,tag:"Adverb",reason:"way-adj"},{match:"[way] #Adverb #Adjective",group:0,tag:"Adverb",reason:"way-too-adj"},{match:"[all] #Verb",group:0,tag:"Adverb",reason:"all-verb"},{match:"#Verb [like]",group:0,notIf:"(#Modal|#PhrasalVerb)",tag:"Adverb",reason:"verb-like"},{match:"(barely|hardly) even",tag:"Adverb",reason:"barely-even"},{match:"[even] #Verb",group:0,tag:"Adverb",reason:"even-walk"},{match:"[even] #Comparative",group:0,tag:"Adverb",reason:"even-worse"},{match:"[even] (#Determiner|#Possessive)",group:0,tag:"#Adverb",reason:"even-the"},{match:"even left",tag:"#Adverb #Verb",reason:"even-left"},{match:"[way] #Adjective",group:0,tag:"#Adverb",reason:"way-over"},{match:"#PresentTense [(hard|quick|bright|slow|fast|backwards|forwards)]",notIf:"#Copula",group:0,tag:"Adverb",reason:"lazy-ly"},{match:"[much] #Adjective",group:0,tag:"Adverb",reason:"bit-1"},{match:"#Copula [#Adverb]$",group:0,tag:"Adjective",reason:"is-well"},{match:"a [(little|bit|wee) bit?] #Adjective",group:0,tag:"Adverb",reason:"a-bit-cold"},{match:"[(super|pretty)] #Adjective",group:0,tag:"Adverb",reason:"super-strong"},{match:"(become|fall|grow) #Adverb? [#PastTense]",group:0,tag:"Adjective",reason:"overly-weakened"},{match:"(a|an) #Adverb [#Participle] #Noun",group:0,tag:"Adjective",reason:"completely-beaten"},{match:"#Determiner #Adverb? [close]",group:0,tag:"Adjective",reason:"a-close"},{match:"#Gerund #Adverb? [close]",group:0,tag:"Adverb",notIf:"(getting|becoming|feeling)",reason:"being-close"},{match:"(the|those|these|a|an) [#Participle] #Noun",group:0,tag:"Adjective",reason:"blown-motor"},{match:"(#PresentTense|#PastTense) [back]",group:0,tag:"Adverb",notIf:"(#PhrasalVerb|#Copula)",reason:"charge-back"},{match:"#Verb [around]",group:0,tag:"Adverb",notIf:"#PhrasalVerb",reason:"send-around"},{match:"[later] #PresentTense",group:0,tag:"Adverb",reason:"later-say"},{match:"#Determiner [well] !#PastTense?",group:0,tag:"Noun",reason:"the-well"},{match:"#Adjective [enough]",group:0,tag:"Adverb",reason:"high-enough"}],[{match:"[sun] the #Ordinal",tag:"WeekDay",reason:"sun-the-5th"},{match:"[sun] #Date",group:0,tag:"WeekDay",reason:"sun-feb"},{match:"#Date (on|this|next|last|during)? [sun]",group:0,tag:"WeekDay",reason:"1pm-sun"},{match:"(in|by|before|during|on|until|after|of|within|all) [sat]",group:0,tag:"WeekDay",reason:"sat"},{match:"(in|by|before|during|on|until|after|of|within|all) [wed]",group:0,tag:"WeekDay",reason:"wed"},{match:"(in|by|before|during|on|until|after|of|within|all) [march]",group:0,tag:"Month",reason:"march"},{match:"[sat] #Date",group:0,tag:"WeekDay",reason:"sat-feb"},{match:"#Preposition [(march|may)]",group:0,tag:"Month",reason:"in-month"},{match:"(this|next|last) (march|may) !#Infinitive?",tag:"#Date #Month",reason:"this-month"},{match:"(march|may) the? #Value",tag:"#Month #Date #Date",reason:"march-5th"},{match:"#Value of? (march|may)",tag:"#Date #Date #Month",reason:"5th-of-march"},{match:"[(march|may)] .? #Date",group:0,tag:"Month",reason:"march-and-feb"},{match:"#Date .? [(march|may)]",group:0,tag:"Month",reason:"feb-and-march"},{match:"#Adverb [(march|may)]",group:0,tag:"Verb",reason:"quickly-march"},{match:"[(march|may)] #Adverb",group:0,tag:"Verb",reason:"march-quickly"},{match:"#Value (am|pm)",tag:"Time",reason:"2-am"}],[{match:"#Holiday (day|eve)",tag:"Holiday",reason:"holiday-day"},{match:"#Value of #Month",tag:"Date",reason:"value-of-month"},{match:"#Cardinal #Month",tag:"Date",reason:"cardinal-month"},{match:"#Month #Value to #Value",tag:"Date",reason:"value-to-value"},{match:"#Month the #Value",tag:"Date",reason:"month-the-value"},{match:"(#WeekDay|#Month) #Value",tag:"Date",reason:"date-value"},{match:"#Value (#WeekDay|#Month)",tag:"Date",reason:"value-date"},{match:"(#TextValue && #Date) #TextValue",tag:"Date",reason:"textvalue-date"},{match:"#Month #NumberRange",tag:"Date",reason:"aug 20-21"},{match:"#WeekDay #Month #Ordinal",tag:"Date",reason:"week mm-dd"},{match:"#Month #Ordinal #Cardinal",tag:"Date",reason:"mm-dd-yyy"},{match:"(#Place|#Demonmym|#Time) (standard|daylight|central|mountain)? time",tag:"Timezone",reason:"std-time"},{match:"(eastern|mountain|pacific|central|atlantic) (standard|daylight|summer)? time",tag:"Timezone",reason:"eastern-time"},{match:"#Time [(eastern|mountain|pacific|central|est|pst|gmt)]",group:0,tag:"Timezone",reason:"5pm-central"},{match:"(central|western|eastern) european time",tag:"Timezone",reason:"cet"}],[{match:"(the|any) [more]",group:0,tag:"Singular",reason:"more-noun"},{match:"[more] #Noun",group:0,tag:"Adjective",reason:"more-noun"},{match:"(right|rights) of .",tag:"Noun",reason:"right-of"},{match:"a [bit]",group:0,tag:"Singular",reason:"bit-2"},{match:"a [must]",group:0,tag:"Singular",reason:"must-2"},{match:"(we|us) [all]",group:0,tag:"Noun",reason:"we all"},{match:"due to [#Verb]",group:0,tag:"Noun",reason:"due-to"},{match:"some [#Verb] #Plural",group:0,tag:"Noun",reason:"determiner6"},{match:"#Possessive #Ordinal [#PastTense]",group:0,tag:"Noun",reason:"first-thought"},{match:"(the|this|those|these) #Adjective [%Verb|Noun%]",group:0,tag:"Noun",notIf:"#Copula",reason:"the-adj-verb"},{match:"(the|this|those|these) #Adverb #Adjective [#Verb]",group:0,tag:"Noun",reason:"determiner4"},{match:"the [#Verb] #Preposition .",group:0,tag:"Noun",reason:"determiner1"},{match:"(a|an|the) [#Verb] of",group:0,tag:"Noun",reason:"the-verb-of"},{match:"#Determiner #Noun of [#Verb]",group:0,tag:"Noun",notIf:"#Gerund",reason:"noun-of-noun"},{match:"#PastTense #Preposition [#PresentTense]",group:0,notIf:"#Gerund",tag:"Noun",reason:"ended-in-ruins"},{match:"#Conjunction [u]",group:0,tag:"Pronoun",reason:"u-pronoun-2"},{match:"[u] #Verb",group:0,tag:"Pronoun",reason:"u-pronoun-1"},{match:"#Determiner [(western|eastern|northern|southern|central)] #Noun",group:0,tag:"Noun",reason:"western-line"},{match:"(#Singular && @hasHyphen) #PresentTense",tag:"Noun",reason:"hyphen-verb"},{match:"is no [#Verb]",group:0,tag:"Noun",reason:"is-no-verb"},{match:"do [so]",group:0,tag:"Noun",reason:"so-noun"},{match:"#Determiner [(shit|damn|hell)]",group:0,tag:"Noun",reason:"swears-noun"},{match:"to [(shit|hell)]",group:0,tag:"Noun",reason:"to-swears"},{match:"(the|these) [#Singular] (were|are)",group:0,tag:"Plural",reason:"singular-were"},{match:"a #Noun+ or #Adverb+? [#Verb]",group:0,tag:"Noun",reason:"noun-or-noun"},{match:"(the|those|these|a|an) #Adjective? [#PresentTense #Particle?]",group:0,tag:"Noun",notIf:"(seem|appear|include|#Gerund|#Copula)",reason:"det-inf"},{match:"#Noun #Actor",tag:"Actor",notIf:"(#Person|#Pronoun)",reason:"thing-doer"},{match:"#Gerund #Actor",tag:"Actor",reason:"gerund-doer"},{match:"co #Singular",tag:"Actor",reason:"co-noun"},{match:"[#Noun+] #Actor",group:0,tag:"Actor",notIf:"(#Honorific|#Pronoun|#Possessive)",reason:"air-traffic-controller"},{match:"(urban|cardiac|cardiovascular|respiratory|medical|clinical|visual|graphic|creative|dental|exotic|fine|certified|registered|technical|virtual|professional|amateur|junior|senior|special|pharmaceutical|theoretical)+ #Noun? #Actor",tag:"Actor",reason:"fine-artist"},{match:"#Noun+ (coach|chef|king|engineer|fellow|personality|boy|girl|man|woman|master)",tag:"Actor",reason:"dance-coach"},{match:"chief . officer",tag:"Actor",reason:"chief-x-officer"},{match:"chief of #Noun+",tag:"Actor",reason:"chief-of-police"},{match:"senior? vice? president of #Noun+",tag:"Actor",reason:"president-of"},{match:"#Determiner [sun]",group:0,tag:"Singular",reason:"the-sun"},{match:"#Verb (a|an) [#Value]$",group:0,tag:"Singular",reason:"did-a-value"},{match:"the [(can|will|may)]",group:0,tag:"Singular",reason:"the can"},{match:"#FirstName #Acronym? (#Possessive && #LastName)",tag:"Possessive",reason:"name-poss"},{match:"#Organization+ #Possessive",tag:"Possessive",reason:"org-possessive"},{match:"#Place+ #Possessive",tag:"Possessive",reason:"place-possessive"},{match:"#Possessive #PresentTense #Particle?",notIf:"(#Gerund|her)",tag:"Noun",reason:"possessive-verb"},{match:"(my|our|their|her|his|its) [(#Plural && #Actor)] #Noun",tag:"Possessive",reason:"my-dads"},{match:"#Value of a [second]",group:0,unTag:"Value",tag:"Singular",reason:"10th-of-a-second"},{match:"#Value [seconds]",group:0,unTag:"Value",tag:"Plural",reason:"10-seconds"},{match:"in [#Infinitive]",group:0,tag:"Singular",reason:"in-age"},{match:"a [#Adjective] #Preposition",group:0,tag:"Noun",reason:"a-minor-in"},{match:"#Determiner [#Singular] said",group:0,tag:"Actor",reason:"the-actor-said"},{match:"#Determiner #Noun [(feel|sense|process|rush|side|bomb|bully|challenge|cover|crush|dump|exchange|flow|function|issue|lecture|limit|march|process)] !(#Preposition|to|#Adverb)?",group:0,tag:"Noun",reason:"the-noun-sense"},{match:"[#PresentTense] (of|by|for) (a|an|the) #Noun #Copula",group:0,tag:"Plural",reason:"photographs-of"},{match:"#Infinitive and [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"fight and win"},{match:"#Noun and [#Verb] and #Noun",group:0,tag:"Noun",reason:"peace-and-flowers"},{match:"the #Cardinal [%Adj|Noun%]",group:0,tag:"Noun",reason:"the-1992-classic"},{match:"#Copula the [%Adj|Noun%] #Noun",group:0,tag:"Adjective",reason:"the-premier-university"},{match:"i #Verb [me] #Noun",group:0,tag:"Possessive",reason:"scottish-me"},{match:"[#PresentTense] (music|class|lesson|night|party|festival|league|ceremony)",group:0,tag:"Noun",reason:"dance-music"},{match:"[wit] (me|it)",group:0,tag:"Presposition",reason:"wit-me"},{match:"#PastTense #Possessive [#Verb]",group:0,tag:"Noun",notIf:"(saw|made)",reason:"left-her-boots"},{match:"#Value [%Plural|Verb%]",group:0,tag:"Plural",notIf:"(one|1|a|an)",reason:"35-signs"},{match:"had [#PresentTense]",group:0,tag:"Noun",notIf:"(#Gerund|come|become)",reason:"had-time"},{match:"%Adj|Noun% %Noun|Verb%",tag:"#Adjective #Noun",notIf:"#ProperNoun #Noun",reason:"instant-access"},{match:"#Determiner [%Adj|Noun%] #Conjunction",group:0,tag:"Noun",reason:"a-rep-to"},{match:"#Adjective #Noun [%Plural|Verb%]$",group:0,tag:"Plural",notIf:"#Pronoun",reason:"near-death-experiences"},{match:"#Possessive #Noun [%Plural|Verb%]$",group:0,tag:"Plural",reason:"your-guild-colors"}],[{match:"(this|that|the|a|an) [#Gerund #Infinitive]",group:0,tag:"Singular",reason:"the-planning-process"},{match:"(that|the) [#Gerund #PresentTense]",group:0,ifNo:"#Copula",tag:"Plural",reason:"the-paving-stones"},{match:"#Determiner [#Gerund] #Noun",group:0,tag:"Adjective",reason:"the-gerund-noun"},{match:"#Pronoun #Infinitive [#Gerund] #PresentTense",group:0,tag:"Noun",reason:"tipping-sucks"},{match:"#Adjective [#Gerund]",group:0,tag:"Noun",notIf:"(still|even|just)",reason:"early-warning"},{match:"[#Gerund] #Adverb? not? #Copula",group:0,tag:"Activity",reason:"gerund-copula"},{match:"#Copula [(#Gerund|#Activity)] #Copula",group:0,tag:"Gerund",reason:"are-doing-is"},{match:"[#Gerund] #Modal",group:0,tag:"Activity",reason:"gerund-modal"},{match:"#Singular for [%Noun|Gerund%]",group:0,tag:"Gerund",reason:"noun-for-gerund"},{match:"#Comparative (for|at) [%Noun|Gerund%]",group:0,tag:"Gerund",reason:"better-for-gerund"},{match:"#PresentTense the [#Gerund]",group:0,tag:"Noun",reason:"keep-the-touching"}],[{match:"#Infinitive (this|that|the) [#Infinitive]",group:0,tag:"Noun",reason:"do-this-dance"},{match:"#Gerund #Determiner [#Infinitive]",group:0,tag:"Noun",reason:"running-a-show"},{match:"#Determiner (only|further|just|more|backward) [#Infinitive]",group:0,tag:"Noun",reason:"the-only-reason"},{match:"(the|this|a|an) [#Infinitive] #Adverb? #Verb",group:0,tag:"Noun",reason:"determiner5"},{match:"#Determiner #Adjective #Adjective? [#Infinitive]",group:0,tag:"Noun",reason:"a-nice-inf"},{match:"#Determiner #Demonym [#PresentTense]",group:0,tag:"Noun",reason:"mexican-train"},{match:"#Adjective #Noun+ [#Infinitive] #Copula",group:0,tag:"Noun",reason:"career-move"},{match:"at some [#Infinitive]",group:0,tag:"Noun",reason:"at-some-inf"},{match:"(go|goes|went) to [#Infinitive]",group:0,tag:"Noun",reason:"goes-to-verb"},{match:"(a|an) #Adjective? #Noun [#Infinitive] (#Preposition|#Noun)",group:0,notIf:"from",tag:"Noun",reason:"a-noun-inf"},{match:"(a|an) #Noun [#Infinitive]$",group:0,tag:"Noun",reason:"a-noun-inf2"},{match:"#Gerund #Adjective? for [#Infinitive]",group:0,tag:"Noun",reason:"running-for"},{match:"about [#Infinitive]",group:0,tag:"Singular",reason:"about-love"},{match:"#Plural on [#Infinitive]",group:0,tag:"Noun",reason:"on-stage"},{match:"any [#Infinitive]",group:0,tag:"Noun",reason:"any-charge"},{match:"no [#Infinitive]",group:0,tag:"Noun",reason:"no-doubt"},{match:"number of [#PresentTense]",group:0,tag:"Noun",reason:"number-of-x"},{match:"(taught|teaches|learns|learned) [#PresentTense]",group:0,tag:"Noun",reason:"teaches-x"},{match:"(try|use|attempt|build|make) [#Verb #Particle?]",notIf:"(#Copula|#Noun|sure|fun|up)",group:0,tag:"Noun",reason:"do-verb"},{match:"^[#Infinitive] (is|was)",group:0,tag:"Noun",reason:"checkmate-is"},{match:"#Infinitive much [#Infinitive]",group:0,tag:"Noun",reason:"get-much"},{match:"[cause] #Pronoun #Verb",group:0,tag:"Conjunction",reason:"cause-cuz"},{match:"the #Singular [#Infinitive] #Noun",group:0,tag:"Noun",notIf:"#Pronoun",reason:"cardio-dance"},{match:"#Determiner #Modal [#Noun]",group:0,tag:"PresentTense",reason:"should-smoke"},{match:"this [#Plural]",group:0,tag:"PresentTense",notIf:"(#Preposition|#Date)",reason:"this-verbs"},{match:"#Noun that [#Plural]",group:0,tag:"PresentTense",notIf:"(#Preposition|#Pronoun|way)",reason:"voice-that-rocks"},{match:"that [#Plural] to",group:0,tag:"PresentTense",notIf:"#Preposition",reason:"that-leads-to"},{match:"(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)",group:0,tag:"Infinitive",reason:"let-him-glue"},{match:"#Verb (all|every|each|most|some|no) [#PresentTense]",notIf:"#Modal",group:0,tag:"Noun",reason:"all-presentTense"},{match:"(had|have|#PastTense) #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"better",reason:"adj-presentTense"},{match:"#Value #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"one-big-reason"},{match:"#PastTense #Adjective+ [#PresentTense]",group:0,tag:"Noun",notIf:"(#Copula|better)",reason:"won-wide-support"},{match:"(many|few|several|couple) [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"many-poses"},{match:"#Determiner #Adverb #Adjective [%Noun|Verb%]",group:0,tag:"Noun",notIf:"#Copula",reason:"very-big-dream"},{match:"from #Noun to [%Noun|Verb%]",group:0,tag:"Noun",reason:"start-to-finish"},{match:"(for|with|of) #Noun (and|or|not) [%Noun|Verb%]",group:0,tag:"Noun",notIf:"#Pronoun",reason:"for-food-and-gas"},{match:"#Adjective #Adjective [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"adorable-little-store"},{match:"#Gerund #Adverb? #Comparative [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"higher-costs"},{match:"(#Noun && @hasComma) #Noun (and|or) [#PresentTense]",group:0,tag:"Noun",notIf:"#Copula",reason:"noun-list"},{match:"(many|any|some|several) [#PresentTense] for",group:0,tag:"Noun",reason:"any-verbs-for"},{match:"to #PresentTense #Noun [#PresentTense] #Preposition",group:0,tag:"Noun",reason:"gas-exchange"},{match:"#PastTense (until|as|through|without) [#PresentTense]",group:0,tag:"Noun",reason:"waited-until-release"},{match:"#Gerund like #Adjective? [#PresentTense]",group:0,tag:"Plural",reason:"like-hot-cakes"},{match:"some #Adjective [#PresentTense]",group:0,tag:"Noun",reason:"some-reason"},{match:"for some [#PresentTense]",group:0,tag:"Noun",reason:"for-some-reason"},{match:"(same|some|the|that|a) kind of [#PresentTense]",group:0,tag:"Noun",reason:"some-kind-of"},{match:"(same|some|the|that|a) type of [#PresentTense]",group:0,tag:"Noun",reason:"some-type-of"},{match:"#Gerund #Adjective #Preposition [#PresentTense]",group:0,tag:"Noun",reason:"doing-better-for-x"},{match:"(get|got|have) #Comparative [#PresentTense]",group:0,tag:"Noun",reason:"got-better-aim"},{match:"whose [#PresentTense] #Copula",group:0,tag:"Noun",reason:"whos-name-was"},{match:"#PhrasalVerb #Particle #Preposition [#PresentTense]",group:0,tag:"Noun",reason:"given-up-on-x"},{match:"there (are|were) #Adjective? [#PresentTense]",group:0,tag:"Plural",reason:"there-are"},{match:"#Value [#PresentTense] of",group:0,notIf:"(one|1|#Copula|#Infinitive)",tag:"Plural",reason:"2-trains"},{match:"[#PresentTense] (are|were) #Adjective",group:0,tag:"Plural",reason:"compromises-are-possible"},{match:"^[(hope|guess|thought|think)] #Pronoun #Verb",group:0,tag:"Infinitive",reason:"suppose-i"},{match:"#Possessive #Adjective [#Verb]",group:0,tag:"Noun",notIf:"#Copula",reason:"our-full-support"},{match:"[(tastes|smells)] #Adverb? #Adjective",group:0,tag:"PresentTense",reason:"tastes-good"},{match:"#Copula #Gerund [#PresentTense] !by?",group:0,tag:"Noun",notIf:"going",reason:"ignoring-commute"},{match:"#Determiner #Adjective? [(shed|thought|rose|bid|saw|spelt)]",group:0,tag:"Noun",reason:"noun-past"},{match:"how to [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"how-to-noun"},{match:"which [%Noun|Verb%] #Noun",group:0,tag:"Infinitive",reason:"which-boost-it"},{match:"#Gerund [%Plural|Verb%]",group:0,tag:"Plural",reason:"asking-questions"},{match:"(ready|available|difficult|hard|easy|made|attempt|try) to [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"ready-to-noun"},{match:"(bring|went|go|drive|run|bike) to [%Noun|Verb%]",group:0,tag:"Noun",reason:"bring-to-noun"},{match:"#Modal #Noun [%Noun|Verb%]",group:0,tag:"Infinitive",reason:"would-you-look"},{match:"#Copula just [#Infinitive]",group:0,tag:"Noun",reason:"is-just-spam"},{match:"^%Noun|Verb% %Plural|Verb%",tag:"Imperative #Plural",reason:"request-copies"},{match:"#Adjective #Plural and [%Plural|Verb%]",group:0,tag:"#Plural",reason:"pickles-and-drinks"},{match:"#Determiner #Year [#Verb]",group:0,tag:"Noun",reason:"the-1968-film"},{match:"#Determiner [#PhrasalVerb #Particle]",group:0,tag:"Noun",reason:"the-break-up"},{match:"#Determiner [%Adj|Noun%] #Noun",group:0,tag:"Adjective",notIf:"(#Pronoun|#Possessive|#ProperNoun)",reason:"the-individual-goals"},{match:"[%Noun|Verb%] or #Infinitive",group:0,tag:"Infinitive",reason:"work-or-prepare"},{match:"to #Infinitive [#PresentTense]",group:0,tag:"Noun",notIf:"(#Gerund|#Copula|help)",reason:"to-give-thanks"},{match:"[#Noun] me",group:0,tag:"Verb",reason:"kills-me"},{match:"%Plural|Verb% %Plural|Verb%",tag:"#PresentTense #Plural",reason:"removes-wrinkles"}],[{match:"#Money and #Money #Currency?",tag:"Money",reason:"money-and-money"},{match:"#Value #Currency [and] #Value (cents|ore|centavos|sens)",group:0,tag:"money",reason:"and-5-cents"},{match:"#Value (mark|rand|won|rub|ore)",tag:"#Money #Currency",reason:"4-mark"},{match:"a pound",tag:"#Money #Unit",reason:"a-pound"},{match:"#Value (pound|pounds)",tag:"#Money #Unit",reason:"4-pounds"}],[{match:"[(half|quarter)] of? (a|an)",group:0,tag:"Fraction",reason:"millionth"},{match:"#Adverb [half]",group:0,tag:"Fraction",reason:"nearly-half"},{match:"[half] the",group:0,tag:"Fraction",reason:"half-the"},{match:"#Cardinal and a half",tag:"Fraction",reason:"and-a-half"},{match:"#Value (halves|halfs|quarters)",tag:"Fraction",reason:"two-halves"},{match:"a #Ordinal",tag:"Fraction",reason:"a-quarter"},{match:"[#Cardinal+] (#Fraction && /s$/)",tag:"Fraction",reason:"seven-fifths"},{match:"[#Cardinal+ #Ordinal] of .",group:0,tag:"Fraction",reason:"ordinal-of"},{match:"[(#NumericValue && #Ordinal)] of .",group:0,tag:"Fraction",reason:"num-ordinal-of"},{match:"(a|one) #Cardinal?+ #Ordinal",tag:"Fraction",reason:"a-ordinal"},{match:"#Cardinal+ out? of every? #Cardinal",tag:"Fraction",reason:"out-of"}],[{match:"#Cardinal [second]",tag:"Unit",reason:"one-second"},{match:"!once? [(a|an)] (#Duration|hundred|thousand|million|billion|trillion)",group:0,tag:"Value",reason:"a-is-one"},{match:"1 #Value #PhoneNumber",tag:"PhoneNumber",reason:"1-800-Value"},{match:"#NumericValue #PhoneNumber",tag:"PhoneNumber",reason:"(800) PhoneNumber"},{match:"#Demonym #Currency",tag:"Currency",reason:"demonym-currency"},{match:"#Value [(buck|bucks|grand)]",group:0,tag:"Currency",reason:"value-bucks"},{match:"[#Value+] #Currency",group:0,tag:"Money",reason:"15 usd"},{match:"[second] #Noun",group:0,tag:"Ordinal",reason:"second-noun"},{match:"#Value+ [#Currency]",group:0,tag:"Unit",reason:"5-yan"},{match:"#Value [(foot|feet)]",group:0,tag:"Unit",reason:"foot-unit"},{match:"#Value [#Abbreviation]",group:0,tag:"Unit",reason:"value-abbr"},{match:"#Value [k]",group:0,tag:"Unit",reason:"value-k"},{match:"#Unit an hour",tag:"Unit",reason:"unit-an-hour"},{match:"(minus|negative) #Value",tag:"Value",reason:"minus-value"},{match:"#Value (point|decimal) #Value",tag:"Value",reason:"value-point-value"},{match:"#Determiner [(half|quarter)] #Ordinal",group:0,tag:"Value",reason:"half-ordinal"},{match:"#Multiple+ and #Value",tag:"Value",reason:"magnitude-and-value"},{match:"#Value #Unit [(per|an) (hr|hour|sec|second|min|minute)]",group:0,tag:"Unit",reason:"12-miles-per-second"},{match:"#Value [(square|cubic)] #Unit",group:0,tag:"Unit",reason:"square-miles"}],[{match:"#Copula [(#Noun|#PresentTense)] #LastName",group:0,tag:"FirstName",reason:"copula-noun-lastname"},{match:"(sister|pope|brother|father|aunt|uncle|grandpa|grandfather|grandma) #ProperNoun",tag:"Person",reason:"lady-titlecase",safe:!0},{match:"#FirstName [#Determiner #Noun] #LastName",group:0,tag:"Person",reason:"first-noun-last"},{match:"#ProperNoun (b|c|d|e|f|g|h|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z) #ProperNoun",tag:"Person",reason:"titlecase-acronym-titlecase",safe:!0},{match:"#Acronym #LastName",tag:"Person",reason:"acronym-lastname",safe:!0},{match:"#Person (jr|sr|md)",tag:"Person",reason:"person-honorific"},{match:"#Honorific #Acronym",tag:"Person",reason:"Honorific-TitleCase"},{match:"#Person #Person the? #RomanNumeral",tag:"Person",reason:"roman-numeral"},{match:"#FirstName [/^[^aiurck]$/]",group:0,tag:["Acronym","Person"],reason:"john-e"},{match:"#Noun van der? #Noun",tag:"Person",reason:"van der noun",safe:!0},{match:"(king|queen|prince|saint|lady) of #Noun",tag:"Person",reason:"king-of-noun",safe:!0},{match:"(prince|lady) #Place",tag:"Person",reason:"lady-place"},{match:"(king|queen|prince|saint) #ProperNoun",tag:"Person",notIf:"#Place",reason:"saint-foo"},{match:"al (#Person|#ProperNoun)",tag:"Person",reason:"al-borlen",safe:!0},{match:"#FirstName de #Noun",tag:"Person",reason:"bill-de-noun"},{match:"#FirstName (bin|al) #Noun",tag:"Person",reason:"bill-al-noun"},{match:"#FirstName #Acronym #ProperNoun",tag:"Person",reason:"bill-acronym-title"},{match:"#FirstName #FirstName #ProperNoun",tag:"Person",reason:"bill-firstname-title"},{match:"#Honorific #FirstName? #ProperNoun",tag:"Person",reason:"dr-john-Title"},{match:"#FirstName the #Adjective",tag:"Person",reason:"name-the-great"},{match:"#ProperNoun (van|al|bin) #ProperNoun",tag:"Person",reason:"title-van-title",safe:!0},{match:"#ProperNoun (de|du) la? #ProperNoun",tag:"Person",notIf:"#Place",reason:"title-de-title"},{match:"#Singular #Acronym #LastName",tag:"#FirstName #Person .",reason:"title-acro-noun",safe:!0},{match:"[#ProperNoun] #Person",group:0,tag:"Person",reason:"proper-person",safe:!0},{match:"#Person [#ProperNoun #ProperNoun]",group:0,tag:"Person",notIf:"#Possessive",reason:"three-name-person",safe:!0},{match:"#FirstName #Acronym? [#ProperNoun]",group:0,tag:"LastName",notIf:"#Possessive",reason:"firstname-titlecase"},{match:"#FirstName [#FirstName]",group:0,tag:"LastName",reason:"firstname-firstname"},{match:"#FirstName #Acronym #Noun",tag:"Person",reason:"n-acro-noun",safe:!0},{match:"#FirstName [(de|di|du|van|von)] #Person",group:0,tag:"LastName",reason:"de-firstname"},{match:"[(lieutenant|corporal|sergeant|captain|qeen|king|admiral|major|colonel|marshal|president|queen|king)+] #ProperNoun",group:0,tag:"Honorific",reason:"seargeant-john"},{match:"[(private|general|major|rear|prime|field|count|miss)] #Honorific? #Person",group:0,tag:["Honorific","Person"],reason:"ambg-honorifics"},{match:"#Honorific #FirstName [#Singular]",group:0,tag:"LastName",notIf:"#Possessive",reason:"dr-john-foo",safe:!0},{match:"[(his|her) (majesty|honour|worship|excellency|honorable)] #Person",group:0,tag:"Honorific",reason:"his-excellency"},{match:"#Honorific #Actor",tag:"Honorific",reason:"Lieutenant colonel"},{match:"(first|second|third|1st|2nd|3rd) #Actor",tag:"Honorific",reason:"first lady"},{match:"#Person #RomanNumeral",tag:"Person",reason:"louis-IV"}],[{match:"#FirstName #Noun$",tag:". #LastName",notIf:"(#Possessive|#Organization|#Place|#Pronoun|@hasTitleCase)",reason:"firstname-noun"},{match:"%Person|Date% #Acronym? #ProperNoun",tag:"Person",reason:"jan-thierson"},{match:"%Person|Noun% #Acronym? #ProperNoun",tag:"Person",reason:"switch-person",safe:!0},{match:"%Person|Noun% #Organization",tag:"Organization",reason:"olive-garden"},{match:"%Person|Verb% #Acronym? #ProperNoun",tag:"Person",reason:"verb-propernoun",ifNo:"#Actor"},{match:"[%Person|Verb%] (will|had|has|said|says|told|did|learned|wants|wanted)",group:0,tag:"Person",reason:"person-said"},{match:"[%Person|Place%] (harbor|harbour|pier|town|city|place|dump|landfill)",group:0,tag:"Place",reason:"sydney-harbour"},{match:"(west|east|north|south) [%Person|Place%]",group:0,tag:"Place",reason:"east-sydney"},{match:"#Modal [%Person|Verb%]",group:0,tag:"Verb",reason:"would-mark"},{match:"#Adverb [%Person|Verb%]",group:0,tag:"Verb",reason:"really-mark"},{match:"[%Person|Verb%] (#Adverb|#Comparative)",group:0,tag:"Verb",reason:"drew-closer"},{match:"%Person|Verb% #Person",tag:"Person",reason:"rob-smith"},{match:"%Person|Verb% #Acronym #ProperNoun",tag:"Person",reason:"rob-a-smith"},{match:"[will] #Verb",group:0,tag:"Modal",reason:"will-verb"},{match:"(will && @isTitleCase) #ProperNoun",tag:"Person",reason:"will-name"},{match:"(#FirstName && !#Possessive) [#Singular] #Verb",group:0,safe:!0,tag:"LastName",reason:"jack-layton"},{match:"^[#Singular] #Person #Verb",group:0,safe:!0,tag:"Person",reason:"sherwood-anderson"},{match:"(a|an) [#Person]$",group:0,unTag:"Person",reason:"a-warhol"}],[{match:"#Copula (pretty|dead|full|well|sure) (#Adjective|#Noun)",tag:"#Copula #Adverb #Adjective",reason:"sometimes-adverb"},{match:"(#Pronoun|#Person) (had|#Adverb)? [better] #PresentTense",group:0,tag:"Modal",reason:"i-better"},{match:"(#Modal|i|they|we|do) not? [like]",group:0,tag:"PresentTense",reason:"modal-like"},{match:"#Noun #Adverb? [left]",group:0,tag:"PastTense",reason:"left-verb"},{match:"will #Adverb? not? #Adverb? [be] #Gerund",group:0,tag:"Copula",reason:"will-be-copula"},{match:"will #Adverb? not? #Adverb? [be] #Adjective",group:0,tag:"Copula",reason:"be-copula"},{match:"[march] (up|down|back|toward)",notIf:"#Date",group:0,tag:"Infinitive",reason:"march-to"},{match:"#Modal [march]",group:0,tag:"Infinitive",reason:"must-march"},{match:"[may] be",group:0,tag:"Verb",reason:"may-be"},{match:"[(subject|subjects|subjected)] to",group:0,tag:"Verb",reason:"subject to"},{match:"[home] to",group:0,tag:"PresentTense",reason:"home to"},{match:"[open] #Determiner",group:0,tag:"Infinitive",reason:"open-the"},{match:"(were|was) being [#PresentTense]",group:0,tag:"PastTense",reason:"was-being"},{match:"(had|has|have) [been /en$/]",group:0,tag:"Auxiliary Participle",reason:"had-been-broken"},{match:"(had|has|have) [been /ed$/]",group:0,tag:"Auxiliary PastTense",reason:"had-been-smoked"},{match:"(had|has) #Adverb? [been] #Adverb? #PastTense",group:0,tag:"Auxiliary",reason:"had-been-adj"},{match:"(had|has) to [#Noun] (#Determiner|#Possessive)",group:0,tag:"Infinitive",reason:"had-to-noun"},{match:"have [#PresentTense]",group:0,tag:"PastTense",notIf:"(come|gotten)",reason:"have-read"},{match:"(does|will|#Modal) that [work]",group:0,tag:"PastTense",reason:"does-that-work"},{match:"[(sound|sounds)] #Adjective",group:0,tag:"PresentTense",reason:"sounds-fun"},{match:"[(look|looks)] #Adjective",group:0,tag:"PresentTense",reason:"looks-good"},{match:"[(start|starts|stop|stops|begin|begins)] #Gerund",group:0,tag:"Verb",reason:"starts-thinking"},{match:"(have|had) read",tag:"Modal #PastTense",reason:"read-read"},{match:"(is|was|were) [(under|over) #PastTense]",group:0,tag:"Adverb Adjective",reason:"was-under-cooked"},{match:"[shit] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear1-verb"},{match:"[damn] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear2-verb"},{match:"[fuck] (#Determiner|#Possessive|them)",group:0,tag:"Verb",reason:"swear3-verb"},{match:"#Plural that %Noun|Verb%",tag:". #Preposition #Infinitive",reason:"jobs-that-work"},{match:"[works] for me",group:0,tag:"PresentTense",reason:"works-for-me"},{match:"as #Pronoun [please]",group:0,tag:"Infinitive",reason:"as-we-please"},{match:"[(co|mis|de|inter|intra|pre|re|un|out|under|over|counter)] #Verb",group:0,tag:["Verb","Prefix"],notIf:"(#Copula|#PhrasalVerb)",reason:"co-write"},{match:"#PastTense and [%Adj|Past%]",group:0,tag:"PastTense",reason:"dressed-and-left"},{match:"[%Adj|Past%] and #PastTense",group:0,tag:"PastTense",reason:"dressed-and-left"},{match:"#Copula #Pronoun [%Adj|Past%]",group:0,tag:"Adjective",reason:"is-he-stoked"},{match:"to [%Noun|Verb%] #Preposition",group:0,tag:"Infinitive",reason:"to-dream-of"}],[{match:"(slowly|quickly) [#Adjective]",group:0,tag:"Verb",reason:"slowly-adj"},{match:"does (#Adverb|not)? [#Adjective]",group:0,tag:"PresentTense",reason:"does-mean"},{match:"[(fine|okay|cool|ok)] by me",group:0,tag:"Adjective",reason:"okay-by-me"},{match:"i (#Adverb|do)? not? [mean]",group:0,tag:"PresentTense",reason:"i-mean"},{match:"will #Adjective",tag:"Auxiliary Infinitive",reason:"will-adj"},{match:"#Pronoun [#Adjective] #Determiner #Adjective? #Noun",group:0,tag:"Verb",reason:"he-adj-the"},{match:"#Copula [%Adj|Present%] to #Verb",group:0,tag:"Verb",reason:"adj-to"},{match:"#Copula [#Adjective] (well|badly|quickly|slowly)",group:0,tag:"Verb",reason:"done-well"},{match:"#Adjective and [#Gerund] !#Preposition?",group:0,tag:"Adjective",reason:"rude-and-x"},{match:"#Copula #Adverb? (over|under) [#PastTense]",group:0,tag:"Adjective",reason:"over-cooked"},{match:"#Copula #Adjective+ (and|or) [#PastTense]$",group:0,tag:"Adjective",reason:"bland-and-overcooked"},{match:"got #Adverb? [#PastTense] of",group:0,tag:"Adjective",reason:"got-tired-of"},{match:"(seem|seems|seemed|appear|appeared|appears|feel|feels|felt|sound|sounds|sounded) (#Adverb|#Adjective)? [#PastTense]",group:0,tag:"Adjective",reason:"felt-loved"},{match:"(seem|feel|seemed|felt) [#PastTense #Particle?]",group:0,tag:"Adjective",reason:"seem-confused"},{match:"a (bit|little|tad) [#PastTense #Particle?]",group:0,tag:"Adjective",reason:"a-bit-confused"},{match:"not be [%Adj|Past% #Particle?]",group:0,tag:"Adjective",reason:"do-not-be-confused"},{match:"#Copula just [%Adj|Past% #Particle?]",group:0,tag:"Adjective",reason:"is-just-right"},{match:"as [#Infinitive] as",group:0,tag:"Adjective",reason:"as-pale-as"},{match:"[%Adj|Past%] and #Adjective",group:0,tag:"Adjective",reason:"faled-and-oppressive"},{match:"or [#PastTense] #Noun",group:0,tag:"Adjective",notIf:"(#Copula|#Pronoun)",reason:"or-heightened-emotion"},{match:"(become|became|becoming|becomes) [#Verb]",group:0,tag:"Adjective",reason:"become-verb"},{match:"#Possessive [#PastTense] #Noun",group:0,tag:"Adjective",reason:"declared-intentions"},{match:"#Copula #Pronoun [%Adj|Present%]",group:0,tag:"Adjective",reason:"is-he-cool"},{match:"#Copula [%Adj|Past%] with",group:0,tag:"Adjective",notIf:"(associated|worn|baked|aged|armed|bound|fried|loaded|mixed|packed|pumped|filled|sealed)",reason:"is-crowded-with"},{match:"#Copula #Adverb? [%Adj|Present%]$",group:0,tag:"Adjective",reason:"was-empty$"}],[{match:"will (#Adverb|not)+? [have] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"will-have-vb"},{match:"[#Copula] (#Adverb|not)+? (#Gerund|#PastTense)",group:0,tag:"Auxiliary",reason:"copula-walking"},{match:"[(#Modal|did)+] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"modal-verb"},{match:"#Modal (#Adverb|not)+? [have] (#Adverb|not)+? [had] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"would-have"},{match:"[(has|had)] (#Adverb|not)+? #PastTense",group:0,tag:"Auxiliary",reason:"had-walked"},{match:"[(do|does|did|will|have|had|has|got)] (not|#Adverb)+? #Verb",group:0,tag:"Auxiliary",reason:"have-had"},{match:"[about to] #Adverb? #Verb",group:0,tag:["Auxiliary","Verb"],reason:"about-to"},{match:"#Modal (#Adverb|not)+? [be] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"would-be"},{match:"[(#Modal|had|has)] (#Adverb|not)+? [been] (#Adverb|not)+? #Verb",group:0,tag:"Auxiliary",reason:"had-been"},{match:"[(be|being|been)] #Participle",group:0,tag:"Auxiliary",reason:"being-driven"},{match:"[may] #Adverb? #Infinitive",group:0,tag:"Auxiliary",reason:"may-want"},{match:"#Copula (#Adverb|not)+? [(be|being|been)] #Adverb+? #PastTense",group:0,tag:"Auxiliary",reason:"being-walked"},{match:"will [be] #PastTense",group:0,tag:"Auxiliary",reason:"will-be-x"},{match:"[(be|been)] (#Adverb|not)+? #Gerund",group:0,tag:"Auxiliary",reason:"been-walking"},{match:"[used to] #PresentTense",group:0,tag:"Auxiliary",reason:"used-to-walk"},{match:"#Copula (#Adverb|not)+? [going to] #Adverb+? #PresentTense",group:0,tag:"Auxiliary",reason:"going-to-walk"},{match:"#Imperative [(me|him|her)]",group:0,tag:"Reflexive",reason:"tell-him"},{match:"(is|was) #Adverb? [no]",group:0,tag:"Negative",reason:"is-no"},{match:"[(been|had|became|came)] #PastTense",group:0,notIf:"#PhrasalVerb",tag:"Auxiliary",reason:"been-told"},{match:"[(being|having|getting)] #Verb",group:0,tag:"Auxiliary",reason:"being-born"},{match:"[be] #Gerund",group:0,tag:"Auxiliary",reason:"be-walking"},{match:"[better] #PresentTense",group:0,tag:"Modal",notIf:"(#Copula|#Gerund)",reason:"better-go"},{match:"even better",tag:"Adverb #Comparative",reason:"even-better"}],[{match:"(#Verb && @hasHyphen) up",tag:"PhrasalVerb",reason:"foo-up"},{match:"(#Verb && @hasHyphen) off",tag:"PhrasalVerb",reason:"foo-off"},{match:"(#Verb && @hasHyphen) over",tag:"PhrasalVerb",reason:"foo-over"},{match:"(#Verb && @hasHyphen) out",tag:"PhrasalVerb",reason:"foo-out"},{match:"[#Verb (in|out|up|down|off|back)] (on|in)",notIf:"#Copula",tag:"PhrasalVerb Particle",reason:"walk-in-on"},{match:"(lived|went|crept|go) [on] for",group:0,tag:"PhrasalVerb",reason:"went-on"},{match:"#Verb (up|down|in|on|for)$",tag:"PhrasalVerb #Particle",notIf:"#PhrasalVerb",reason:"come-down$"},{match:"help [(stop|end|make|start)]",group:0,tag:"Infinitive",reason:"help-stop"},{match:"#PhrasalVerb (in && #Particle) #Determiner",tag:"#Verb #Preposition #Determiner",unTag:"PhrasalVerb",reason:"work-in-the"},{match:"[(stop|start|finish|help)] #Gerund",group:0,tag:"Infinitive",reason:"start-listening"},{match:"#Verb (him|her|it|us|himself|herself|itself|everything|something) [(up|down)]",group:0,tag:"Adverb",reason:"phrasal-pronoun-advb"}],[{match:"^do not? [#Infinitive #Particle?]",notIf:zl,group:0,tag:"Imperative",reason:"do-eat"},{match:"^please do? not? [#Infinitive #Particle?]",group:0,tag:"Imperative",reason:"please-go"},{match:"^just do? not? [#Infinitive #Particle?]",group:0,tag:"Imperative",reason:"just-go"},{match:"^[#Infinitive] it #Comparative",notIf:zl,group:0,tag:"Imperative",reason:"do-it-better"},{match:"^[#Infinitive] it (please|now|again|plz)",notIf:zl,group:0,tag:"Imperative",reason:"do-it-please"},{match:"^[#Infinitive] (#Adjective|#Adverb)$",group:0,tag:"Imperative",notIf:"(so|such|rather|enough)",reason:"go-quickly"},{match:"^[#Infinitive] (up|down|over) #Determiner",group:0,tag:"Imperative",reason:"turn-down"},{match:"^[#Infinitive] (your|my|the|a|an|any|each|every|some|more|with|on)",group:0,notIf:"like",tag:"Imperative",reason:"eat-my-shorts"},{match:"^[#Infinitive] (him|her|it|us|me|there)",group:0,tag:"Imperative",reason:"tell-him"},{match:"^[#Infinitive] #Adjective #Noun$",group:0,tag:"Imperative",reason:"avoid-loud-noises"},{match:"^[#Infinitive] (#Adjective|#Adverb)? and #Infinitive",group:0,tag:"Imperative",reason:"call-and-reserve"},{match:"^(go|stop|wait|hurry) please?$",tag:"Imperative",reason:"go"},{match:"^(somebody|everybody) [#Infinitive]",group:0,tag:"Imperative",reason:"somebody-call"},{match:"^let (us|me) [#Infinitive]",group:0,tag:"Imperative",reason:"lets-leave"},{match:"^[(shut|close|open|start|stop|end|keep)] #Determiner #Noun",group:0,tag:"Imperative",reason:"shut-the-door"},{match:"^[#PhrasalVerb #Particle] #Determiner #Noun",group:0,tag:"Imperative",reason:"turn-off-the-light"},{match:"^[go] to .",group:0,tag:"Imperative",reason:"go-to-toronto"},{match:"^#Modal you [#Infinitive]",group:0,tag:"Imperative",reason:"would-you-"},{match:"^never [#Infinitive]",group:0,tag:"Imperative",reason:"never-stop"},{match:"^come #Infinitive",tag:"Imperative",notIf:"on",reason:"come-have"},{match:"^come and? #Infinitive",tag:"Imperative . Imperative",notIf:"#PhrasalVerb",reason:"come-and-have"},{match:"^stay (out|away|back)",tag:"Imperative",reason:"stay-away"},{match:"^[(stay|be|keep)] #Adjective",group:0,tag:"Imperative",reason:"stay-cool"},{match:"^[keep it] #Adjective",group:0,tag:"Imperative",reason:"keep-it-cool"},{match:"^do not [#Infinitive]",group:0,tag:"Imperative",reason:"do-not-be"},{match:"[#Infinitive] (yourself|yourselves)",group:0,tag:"Imperative",reason:"allow-yourself"},{match:"[#Infinitive] what .",group:0,tag:"Imperative",reason:"look-what"},{match:"^[#Infinitive] #Gerund",group:0,tag:"Imperative",reason:"keep-playing"},{match:"^[#Infinitive] (to|for|into|toward|here|there)",group:0,tag:"Imperative",reason:"go-to"},{match:"^[#Infinitive] (and|or) #Infinitive",group:0,tag:"Imperative",reason:"inf-and-inf"},{match:"^[%Noun|Verb%] to",group:0,tag:"Imperative",reason:"commit-to"},{match:"^[#Infinitive] #Adjective? #Singular #Singular",group:0,tag:"Imperative",reason:"maintain-eye-contact"},{match:"do not (forget|omit|neglect) to [#Infinitive]",group:0,tag:"Imperative",reason:"do-not-forget"},{match:"^[(ask|wear|pay|look|help|show|watch|act|fix|kill|stop|start|turn|try|win)] #Noun",group:0,tag:"Imperative",reason:"pay-attention"}],[{match:"(that|which) were [%Adj|Gerund%]",group:0,tag:"Gerund",reason:"that-were-growing"},{match:"#Gerund [#Gerund] #Plural",group:0,tag:"Adjective",reason:"hard-working-fam"}],[{match:"u r",tag:"#Pronoun #Copula",reason:"u r"},{match:"#Noun [(who|whom)]",group:0,tag:"Determiner",reason:"captain-who"},{match:"[had] #Noun+ #PastTense",group:0,tag:"Condition",reason:"had-he"},{match:"[were] #Noun+ to #Infinitive",group:0,tag:"Condition",reason:"were-he"},{match:"some sort of",tag:"Adjective Noun Conjunction",reason:"some-sort-of"},{match:"of some sort",tag:"Conjunction Adjective Noun",reason:"of-some-sort"},{match:"[such] (a|an|is)? #Noun",group:0,tag:"Determiner",reason:"such-skill"},{match:"[right] (before|after|in|into|to|toward)",group:0,tag:"#Adverb",reason:"right-into"},{match:"#Preposition [about]",group:0,tag:"Adjective",reason:"at-about"},{match:"(are|#Modal|see|do|for) [ya]",group:0,tag:"Pronoun",reason:"are-ya"},{match:"[long live] .",group:0,tag:"#Adjective #Infinitive",reason:"long-live"},{match:"[plenty] of",group:0,tag:"#Uncountable",reason:"plenty-of"},{match:"(always|nearly|barely|practically) [there]",group:0,tag:"Adjective",reason:"always-there"},{match:"[there] (#Adverb|#Pronoun)? #Copula",group:0,tag:"There",reason:"there-is"},{match:"#Copula [there] .",group:0,tag:"There",reason:"is-there"},{match:"#Modal #Adverb? [there]",group:0,tag:"There",reason:"should-there"},{match:"^[do] (you|we|they)",group:0,tag:"QuestionWord",reason:"do-you"},{match:"^[does] (he|she|it|#ProperNoun)",group:0,tag:"QuestionWord",reason:"does-he"},{match:"#Determiner #Noun+ [who] #Verb",group:0,tag:"Preposition",reason:"the-x-who"},{match:"#Determiner #Noun+ [which] #Verb",group:0,tag:"Preposition",reason:"the-x-which"},{match:"a [while]",group:0,tag:"Noun",reason:"a-while"},{match:"guess who",tag:"#Infinitive #QuestionWord",reason:"guess-who"},{match:"[fucking] !#Verb",group:0,tag:"#Gerund",reason:"f-as-gerund"}],[{match:"university of #Place",tag:"Organization",reason:"university-of-Foo"},{match:"#Noun (&|n) #Noun",tag:"Organization",reason:"Noun-&-Noun"},{match:"#Organization of the? #ProperNoun",tag:"Organization",reason:"org-of-place",safe:!0},{match:"#Organization #Country",tag:"Organization",reason:"org-country"},{match:"#ProperNoun #Organization",tag:"Organization",notIf:"#FirstName",reason:"titlecase-org"},{match:"#ProperNoun (ltd|co|inc|dept|assn|bros)",tag:"Organization",reason:"org-abbrv"},{match:"the [#Acronym]",group:0,tag:"Organization",reason:"the-acronym",safe:!0},{match:"government of the? [#Place+]",tag:"Organization",reason:"government-of-x"},{match:"(health|school|commerce) board",tag:"Organization",reason:"school-board"},{match:"(nominating|special|conference|executive|steering|central|congressional) committee",tag:"Organization",reason:"special-comittee"},{match:"(world|global|international|national|#Demonym) #Organization",tag:"Organization",reason:"global-org"},{match:"#Noun+ (public|private) school",tag:"School",reason:"noun-public-school"},{match:"#Place+ #SportsTeam",tag:"SportsTeam",reason:"place-sportsteam"},{match:"(dc|atlanta|minnesota|manchester|newcastle|sheffield) united",tag:"SportsTeam",reason:"united-sportsteam"},{match:"#Place+ fc",tag:"SportsTeam",reason:"fc-sportsteam"},{match:"#Place+ #Noun{0,2} (club|society|group|team|committee|commission|association|guild|crew)",tag:"Organization",reason:"place-noun-society"}],[{match:"(west|north|south|east|western|northern|southern|eastern)+ #Place",tag:"Region",reason:"west-norfolk"},{match:"#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|pa|sc|tn|tx|ut|vt|pr)]",group:0,tag:"Region",reason:"us-state"},{match:"portland [or]",group:0,tag:"Region",reason:"portland-or"},{match:"#ProperNoun+ (cliff|place|range|pit|place|point|room|grounds|ruins)",tag:"Place",reason:"foo-point"},{match:"in [#ProperNoun] #Place",group:0,tag:"Place",reason:"propernoun-place"},{match:"#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)",tag:"Address",reason:"address-st"},{match:"(port|mount|mt) #ProperName",tag:"Place",reason:"port-name"}],[{match:"[so] #Noun",group:0,tag:"Conjunction",reason:"so-conj"},{match:"[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)",group:0,tag:"Conjunction",reason:"how-he-is-x"},{match:"#Copula [(who|what|where|why|how|when)] #Noun",group:0,tag:"Conjunction",reason:"when-he"},{match:"#Verb [that] #Pronoun",group:0,tag:"Conjunction",reason:"said-that-he"},{match:"#Noun [that] #Copula",group:0,tag:"Conjunction",reason:"that-are"},{match:"#Noun [that] #Verb #Adjective",group:0,tag:"Conjunction",reason:"that-seem"},{match:"#Noun #Copula not? [that] #Adjective",group:0,tag:"Adverb",reason:"that-adj"},{match:"#Verb #Adverb? #Noun [(that|which)]",group:0,tag:"Preposition",reason:"that-prep"},{match:"@hasComma [which] (#Pronoun|#Verb)",group:0,tag:"Preposition",reason:"which-copula"},{match:"#Noun [like] #Noun",group:0,tag:"Preposition",reason:"noun-like"},{match:"^[like] #Determiner",group:0,tag:"Preposition",reason:"like-the"},{match:"a #Noun [like] (#Noun|#Determiner)",group:0,tag:"Preposition",reason:"a-noun-like"},{match:"#Adverb [like]",group:0,tag:"Verb",reason:"really-like"},{match:"(not|nothing|never) [like]",group:0,tag:"Preposition",reason:"nothing-like"},{match:"#Infinitive #Pronoun [like]",group:0,tag:"Preposition",reason:"treat-them-like"},{match:"[#QuestionWord] (#Pronoun|#Determiner)",group:0,tag:"Preposition",reason:"how-he"},{match:"[#QuestionWord] #Participle",group:0,tag:"Preposition",reason:"when-stolen"},{match:"[how] (#Determiner|#Copula|#Modal|#PastTense)",group:0,tag:"QuestionWord",reason:"how-is"},{match:"#Plural [(who|which|when)] .",group:0,tag:"Preposition",reason:"people-who"}],[{match:"holy (shit|fuck|hell)",tag:"Expression",reason:"swears-expression"},{match:"^[(well|so|okay|now)] !#Adjective?",group:0,tag:"Expression",reason:"well-"},{match:"^come on",tag:"Expression",reason:"come-on"},{match:"(say|says|said) [sorry]",group:0,tag:"Expression",reason:"say-sorry"},{match:"^(ok|alright|shoot|hell|anyways)",tag:"Expression",reason:"ok-"},{match:"^(say && @hasComma)",tag:"Expression",reason:"say-"},{match:"^(like && @hasComma)",tag:"Expression",reason:"like-"},{match:"^[(dude|man|girl)] #Pronoun",group:0,tag:"Expression",reason:"dude-i"}]);let Bl=null;var Sl={postTagger:function(e){const{world:t}=e,{model:n,methods:a}=t;Bl=Bl||a.one.buildNet(n.two.matches,t);const r=a.two.quickSplit(e.document).map((e=>{const t=e[0];return[t.index[0],t.index[1],t.index[1]+e.length]})),o=e.update(r);return o.cache(),o.sweep(Bl),e.uncache(),e.unfreeze(),e},tagger:e=>e.compute(["freeze","lexicon","preTagger","postTagger","unfreeze"])};const Kl={api:function(e){e.prototype.confidence=function(){let e=0,t=0;return this.docs.forEach((n=>{n.forEach((n=>{t+=1,e+=n.confidence||1}))})),0===t?1:(e=>Math.round(100*e)/100)(e/t)},e.prototype.tagger=function(){return this.compute(["tagger"])}},compute:Sl,model:{two:{matches:Vl}},hooks:["postTagger"]},$l=function(e,t){const n=function(e){return Object.keys(e.hooks).filter((e=>!e.startsWith("#")&&!e.startsWith("%")))}(t);if(0===n.length)return e;e._cache||e.cache();const a=e._cache;return e.filter(((e,t)=>n.some((e=>a[t].has(e)))))};var Ll={lib:{lazy:function(e,t){let n=t;"string"==typeof t&&(n=this.buildNet([{match:t}]));const a=this.tokenize(e),r=$l(a,n);return r.found?(r.compute(["index","tagger"]),r.match(t)):a.none()}}};const Ml=function(e,t,n){let a=e.split(/ /g).map((e=>e.toLowerCase().trim()));a=a.filter((e=>e)),a=a.map((e=>`{${e}}`)).join(" ");let r=this.match(a);return n&&(r=r.if(n)),r.has("#Verb")?function(e,t){let n=t;return e.forEach((e=>{e.has("#Infinitive")||(n=function(e,t){const n=(0,e.methods.two.transform.verb.conjugate)(t,e.model);return e.has("#Gerund")?n.Gerund:e.has("#PastTense")?n.PastTense:e.has("#PresentTense")?n.PresentTense:e.has("#Gerund")?n.Gerund:t}(e,t)),e.replaceWith(n)})),e}(r,t):r.has("#Noun")?function(e,t){let n=t;e.has("#Plural")&&(n=(0,e.methods.two.transform.noun.toPlural)(t,e.model));e.replaceWith(n,{possessives:!0})}(r,t):r.has("#Adverb")?function(e,t){const{toAdverb:n}=e.methods.two.transform.adjective,a=n(t);a&&e.replaceWith(a)}(r,t):r.has("#Adjective")?function(e,t){const{toComparative:n,toSuperlative:a}=e.methods.two.transform.adjective;let r=t;e.has("#Comparative")?r=n(r,e.model):e.has("#Superlative")&&(r=a(r,e.model)),r&&e.replaceWith(r)}(r,t):this};var Jl={api:function(e){e.prototype.swap=Ml}};d.plugin(cl),d.plugin(Fl),d.plugin(Kl),d.plugin(Ll),d.plugin(Jl);export{d as default}; diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..71218df --- /dev/null +++ b/changelog.md @@ -0,0 +1,990 @@ +compromise uses semver, and pushes to npm and github frequently + +- **Major** is a breaking api change - method or response changes that can cause runtime errors. +- **Minor** is a behaviour change - Tagging or grammar changes. +- **Patch** is an obvious, non-controversial bugfix. + +While all _Major_ releases should be reviewed, our only _large_ releases are **v6** in 2016 **v12** in 2019 and **v14** in 2022. Others have been mostly incremental. + + + + + +#### 14.15.1 [May 2026] +- **[fix]** - better textual time parsing - "one thirty am" +- **[fix]** - ignore postinstall scripts +- **[update]** - github action for publish providence +- **[update]** - dependencies + audit fixes + +#### 14.15.0 [Feb 2026] +- **[update]** - support for Typescript 7 #1198 +- **[update]** - dependencies + +#### 14.14.5 [Dec 2025] +- **[fix]** - update types #1181 +- **[update]** - add nelissa and gert #1180 +- **[fix]** - sentence tokenization issues #1194 and #1193 +- **[update]** - prefer const to let +- **[new]** - experimental cmd-k plugin +- **[update]** - dependencies + +#### 14.14.4 [Jan 2025] +- **[fix]** - TypeScript & esm resolution #1165 + +#### 14.14.3 [Dec 2024] +- **[fix]** - another runtime error in punctuation replace #1150 +- **[update]** - dependencies + +#### 14.14.2 [Oct 2024] +- **[fix]** - runtime error in punctuation replace #1150 + +#### 14.14.1 [Oct 2024] +- **[update]** - compromise-dates 3.7.0 +- **[fix]** - runtime error in number parser #1145 +- **[update]** - dependencies + + +#### 14.14.0 [July 2024] +- **[new]** - .slashes() and .slashes().split() methods #1100 +- **[fix]** - multiple contraction issue #1128 +- **[fix]** - toNumbers() return values #1113 +- **[fix]** - (plugins/wikipedia) - fix hard-coded path for #1116 +- **[fix]** - (plugins/dates) - limit values in `mm/dd` format +- **[fix]** - (plugins/dates) params mutation #1109 +- **[change]** - split people names by commas #1111 +- **[change]** - typescript export update #1104 +- **[update]** - eslint config format +- **[update]** - github actions +- **[update]** - dependencies + +#### 14.13.0 [Apr 2024] + +- **[new]** - .compute('freeze') +- **[new]** - .debug('freeze') +- **[change]** - allow 3-slashes in a word + +#### 14.12.0 [Feb 2024] + +- **[new]** - .payload() plugin +- **[new]** - `.numbers().isUnit()` method #1089 +- **[change]** - update github workflow (thanks FDawgs!) +- **[fix]** - README issues (thanks track0x1!) +- **[fix]** - .has() inconsistency +- **[new]** - support adding debug methods via plugins +- **[change]** - remove deprecated .debug(object) support +- **[fix]** - parentheses() match issue +- **[fix]** - tokenization issue #1085 +- **[new]** - `dates().isBefore()`, `dates().isBefore()` methods +- **[new]** - `.debug('dates')` method +- **[fix]** - lazy join() issue +- **[update]** - dependencies + +#### 14.11.2 [Jan 2024] + +- **[new]** - support for frozen lex in plugin object #1080 +- **[fix]** - toggling options in .json() +- **[new]** - .join() and .joinIf() methods +- **[new]** - support freeze in sweep +- **[change]** - internal typescript improvements +- **[fix]** - tagging issues +- **[change]** - @hasEllipses must be following the word +- **[update]** - dependencies + +#### 14.11.1 [Jan 2024] + +- **[fix]** - missing words in html output (thanks ryan!) +- **[change]** - better #Possessive tagging for #1074 +- **[change]** - improved is/has contraction classifier #1074 +- **[change]** - fixes to subordinate clause identification #1072 +- **[update]** - dependencies + +#### 14.11.0 [Dec 2023] + +- **[new]** - tagging `.freeze()` and `.unfreeze()` feature +- **[change]** - stronger deferal to internal lexicon +- **[change]** - support any-length phrases in lexicon +- **[fix]** - prevent missed overlapping lexicon phrases +- **[update]** - dependencies + +#### 14.10.1 [Nov 2023] + +- **[fix]** - abbreviation checks for sentence-tokenizer #1061 +- **[change]** - improve person tagger #1059 +- **[change]** - add #FutureTense tag +- **[fix]** - .out() runtime error #1056 +- **[fix]** - punctuation loss in .not() #1022 +- **[update]** - dependencies + +#### 14.10.0 [Aug 2023] + +- **[fix]** - verb conjugation fixes +- **[fix]** - tagger fixes +- **[change]** - align package.json with ESM module #1023 +- **[fix]** - .splitBefore() bugfix +- **[fix]** - typescript+docs fixes #1023 +- **[fix]** - subtle changes to .text() and .isFull() +- **[update]** - dependencies + +#### 14.9.0 [May 2023] + +- **[new]** - .verbs().toPastParticiple() method +- **[new]** - `.normalize({ debullet: true })` #1004 +- **[change]** - typescript path changes (thanks @rotemdan !) +- **[fix]** - suffix tagging issues +- **[fix]** - match syntax issue #997 +- **[change]** - keep possessive in replace #1011 +- **[change]** - major improvements to adj.toNoun() conjugator +- **[fix]** - parsematch bug #997 +- **[fix]** - "there's been" contraction +- **[new]** - .conjugate() methods on Noun/Adverb/Adjective classes +- **[new]** - add Gerund and PastParticiple to .verbs().conjugate() results +- **[new]** - option to keep possessives in .replace() #1011 +- **[fix]** - tagger fix #998 +- **[update]** - dependencies + +#### 14.8.2 [Feb 2023] + +- **[change]** - #Actor tagging - in advance of #565 +- **[change]** - .noun() lumping changes - in advance of #565 +- **[new]** - support japanese full-stop +- **[fix]** - number tagging #992 +- **[update]** - dependencies + +#### 14.8.1 [Dec 2022] + +- **[fix]** - tagging fixes +- **[change]** - allow #Plural acronyms +- **[fix]** - allow root matches in fastOr +- **[fix]** - more flexible PhrasalVerb tagging + +#### 14.8.0 [Dec 2022] + +- **[fix]** - tagging fixes +- **[new]** - add Person .presumedMale(), .presumedFemale() methods +- **[new]** - add Pronoun class, .refersTo() +- **[new]** - add Noun.references() +- **[new]** - .nouns('spencer') shorthand as an if-match +- **[change]** - "[do] you .." etc now #QuestionWord +- **[new]** - add #Hyphenated tag +- **[fix]** - improved Auxiliary verb tagging +- **[update]** - dependencies + +#### 14.7.1 [Nov 2022] + +- **[fix]** - concat fix +- **[change]** - tagging fixes +- **[change]** - `{word/tag/sense}` sense-match syntax + +#### 14.7.0 [Nov 2022] + +- **[new]** - match term id +- **[change]** - tag text by default on .concat('') +- **[change]** - allow modifying term prePunctuation +- **[new]** - .wrap() method +- **[new]** - .isFull() method +- **[new]** - support full `notIf` matches on sweep +- **[fix]** - text params for #953 +- **[fix]** - nouns().isSingular() missing +- **[change]** - one-character w/ dash tokenization #977 +- **[change]** - allow setting `model.one.prePunctuation` + `postPunctuation` +- **[fix]** - compromise-paragraphs plugin + +#### 14.6.0 [Oct 2022] + +- **[change]** - move internal conjugation methods +- **[update]** - github scripts +- **[change]** - fixes to .clauses() parser +- **[change]** - an astrix is not a word +- **[new]** - @hasColon method +- **[new]** - @hasDash supports two dashes +- **[new]** - `#Passive` verb tag +- **[new]** - existential `#There` tag +- **[new]** - add tense info to sentence json +- **[fix]** - verb tokenization issues +- **[fix]** - .replace() issues +- **[update]** - dependencies + +#### 14.5.2 [Oct 2022] + +- **[fix]** - runtime error #965 +- **[fix]** - misc possessive tagging issues +- **[update]** - dependencies + +#### 14.5.1 [Oct 2022] + +- **[fix]** - .remove() fixes +- **[change]** - support « angle quotes » +- **[update]** - dependencies + +#### 14.5.0 [August 2022] + +- **[fix]** - possible runtime error in setTag method +- **[change]** - make #Honorific always a #Person #951 +- **[new]** - manually change conjugations/inflections from plugin #949 +- **[new]** - `.adjectives().conjugate()` method +- **[update]** - dependencies + +#### 14.4.5 [August 2022] + +- **[fix]** - fix logic for greedy-negative matches - #936 +- **[fix]** - fix tagging for 3-digit year iso dates - #868 +- **[update]** - dependencies + +#### 14.4.4 [August 2022] + +- **[fix]** - support {root} matches without compromise/two + +#### 14.4.3 [August 2022] + +- **[fix]** - guard for toRoot methods in root match +- **[update]** - compromise-stats + +#### 14.4.2 [July 2022] + +- **[fix]** - hotfix for sentence tokenization issue #935 + +#### 14.4.1 [July 2022] + +- **[change]** - improvements to negative-optional match logic - `!foo?` +- **[change]** - support short sentences embedded in quotes+parentheses +- **[change]** - faster sentence tokenizer +- **[change]** - ° symbol is not punctuation +- **[new]** - implement .swap() for comparative/superlative adjectives +- **[fix]** - sentence.toFuture() conjugation rules +- **[update]** - dependencies + +#### 14.4.0 [July 2022] + +- **[change]** - support root matches like '{walk}' work without doing .compute('root') +- **[change]** - split numbers+units '12km' as contraction - #919 +- **[new]** - `.lazy(txt, match)` fast-scan method [1](https://observablehq.com/@spencermountain/compromise-performance) +- **[fix]** - support apostrophes in lexicon #932 +- **[fix]** - support unTag property in sweep +- **[change]** - keep sentence caches, when still valid +- **[change]** - alias nlp.compile() to .buildTrie() +- **[fix]** - tagging fixes +- **[update]** - dependencies + _plugin-releases_: dates, speed, de-compromise + +#### 14.3.1 [June 2022] + +- **[fix]** - missed caches in .sweep() +- **[new]** - .out('hash') and `.json({hash:true})` + +#### 14.3.0 [June 2022] + +- **[fix]** - unwanted logging in compromise/one +- **[fix]** - dependency export path for react-native builds #928 +- **[change]** - split hyphenated words in match syntax 'foo-bar' +- **[change]** - support 4-digit number-ranges (when not a phone number) + _plugin-releases_: dates + +#### 14.2.1 [June 2022] + +- **[fix]** - double-contraction issue #925 +- **[fix]** - .not() memleak #926 + +#### 14.2.0 [June 2022] + +- **[fix]** - speed improvements +- **[fix]** - bug with fast-or possessive matches +- **[fix]** - bug with slow-or end-matches +- **[change]** - no-longer attempt 's contractions in compromise/one +- **[new]** - flag novel tags in world.one.tagSet +- **[new]** - .sweep() and nlp.buildNet() methods +- **[new]** - some typescript support in plugins #918 +- **[fix]** - better unicode support with Unicode property escapes +- **[fix]** - problems matching on cached documents +- **[fix]** - typescript fixes +- **[fix]** - suffix tagging issues +- **[fix]** - uncached matches missing in .sweep() +- **[fix]** - non-empty results when pointer is first repaired +- **[fix]** - nouns().toPlural() fix for #921 +- **[fix]** - drop deprecated .subst() method internally +- **[new]** - some support for .numbers().units() again #919 + +#### 14.1.2 [April 2022] + +- **[new]** - add .harden() .soften() undocumented methods +- **[fix]** - support pre-parsed matches in .has() .if() and .not() +- **[fix]** - contraction OR match issue +- **[fix]** - match-syntax min-max issue +- **[fix]** - normalized printout of abbreviations +- **[update]** - date plugin release +- **[update]** - dependencies + +#### 14.1.1 [April 2022] + +- **[fix]** - main property in package.json #911 + +#### 14.1.0 [April 2022] + +- **[fix]** - client-side export format for plugins +- **[new]** - more adjective transformation methods +- **[new]** - emoji + emoticon tagger +- **[new]** - case-sensitive match option - `{caseSensitive:true}` + +### 🚨 14.0.0 🚨   [March 2022] + +Major release - see [Release Notes](https://github.com/spencermountain/compromise/releases/tag/14.0.0) for full details + +- **[breaking]** - remove `.parent()` and `.parents()` chain - (use `.all()` instead) +- **[breaking]** - remove `@titleCase` alias (use @isTitleCase) +- **[breaking]** - remove '.get()' alias - use '.eq()' +- **[breaking]** - remove `.json(0)` shorthand - use `.json()[0]` +- **[breaking]** - remove `.tagger()` - use .compute('tagger') +- **[breaking]** - remove `.export()` -> .load() - use .json() -> nlp(json) +- **[breaking]** - remove `nlp.clone()` +- **[breaking]** - remove `.join()` _deprecated_ +- **[breaking]** - remove `.lists()` _deprecated_ +- **[breaking]** - remove `.segment()` _deprecated_ +- **[breaking]** - remove `.sententences().toParticiple()` & `.verbs().toParticiple()` +- **[breaking]** - remove `.nouns().toPossessive()` & `.nouns().hasPlural()` +- **[breaking]** - remove array support in match methods - (use `.match().match()` instead) +- **[breaking]** - refactor `.out('freq')` output format - (uses `.compute('freq').terms().unique().json()` instead) +- **[breaking]** - change `.json()` result format for subsets +- **[change]** merge re-used capture-group names in one match +- **[change]** drop support for undocumented empty '.split()' methods - which used to split the parent +- **[change]** subtle changes to `.text('fmt')` formats +- **[change]** @hasContraction is no-longer secretly-greedy. use `@hasContraction{2}` +- **[change]** `.and()` now does a set 'union' operation of results (no overlaps) +- **[change]** bestTag is now `.compute('tagRank')` +- **[change]** `.sort()` is no longer in-place (its now immutable) +- **[change]** drop undocumented options param to `.replaceWith()` method +- **[change]** add match-group as 2nd param to split methods +- **[change]** remove #FutureTense tag - which is not really a thing in english +- **[change]** `.unique()` no-longer mutates parent +- **[change]** `.normalize()` inputs cleanup +- **[change]** drop agreement parameters in .numbers() methods +- **[change]** - less-magical money parsing - `nlp('50 cents').money().get()` is no-longer `0.5` +- **[change]** - .find() does not return undefined on an empty result anymore +- **[change]** - fuzzy matches must now be wrapped in tildes, like `~this~` +- **[new]** `.union()`, .intersection(), .difference() and .complement() methods +- **[new]** `.confidence()` method - approximate tagging confidence score for arbitrary selections +- **[new]** `.settle()` - remove overlaps in matches +- **[new]** `.isDoc()` - helper-method for comparing two views +- **[new]** `.none()` - helper-method for returning an empty view of the document +- **[new]** `.toView()` method - drop back to a normal Class instance +- **[new]** `.grow()` `.growLeft()` and `.growRight()` methods +- **[new]** add punctuation match support via pre/post params +- **[new]** add ambiguous empty .map() state as 2nd param + +#### 13.11.3 [June 2021] + +- **[fix]** - regex backtracing issue \#847 (thanks @srubin) +- misc tagging fixes + update deps + +#### 13.11.2 [May 2021] + +- **[fix]** - verbphrase conjugation fixes +- **[fix]** - verbphrase tagger fixes +- **[fix]** - url tagging regex improvements (thanks Axay!) + update deps + _plugin-releases_: dates + +#### 13.11.1 [April 2021] + +- **[fix]** - obscure runtime error in capture-groups + update deps + _plugin-releases_: typeahead + +#### 13.11.0 [April 2021] + +- **[change]** - use babel default build target (drop ie11 polyfill) +- **[change]** - dont compile esm build w/ babel anymore +- **[fix]** - sentence conjugation fixes +- **[fix]** - improvements to phrasal verbs +- **[change]** - keep tokenization for some more dashed suffixes like 'snail-like' + _plugin-releases_: dates, numbers, sentences + +#### 13.10.7 [April 2021] + +- **[change]** - tokenize '2 - 5' as NumerRange, like '2-5' is +- **[fix]** - edge-cases for URLs with numbers +- **[fix]** - some sentences.toPastTense() fixes +- **[fix]** - 'n weekends from now' math in plugin-date + _plugin-releases_: dates, sentences + +#### 13.10.6 [April 2021] + +- **[fix]** - support more time-ranges + _plugin-releases_: dates@2.0.2 + +#### 13.10.5 [March 2021] + +- **[new]** - support Time-range like '3pm-4pm' +- **[change]** - cleanup some unicode regexes + _plugin-releases_: dates + +#### 13.10.4 [March 2021] + +- **[fix]** - match syntax tokenization fix +- **[change]** - improved performance monitoring + +#### 13.10.3 [March 2021] + +- **[fix]** - support complicated regular-expressions in match syntax +- improved performance testing + +#### 13.10.2 [March 2021] + +- **[fix]** - support matching implicit terms in (or|blocks) +- **[change]** - add #Timezone tag (from date-plugin) +- **[change]** - add many more cities and regions + +#### 13.10.1 [March 2021] + +- **[change]** - #Date terms can still be a #Conjunction +- **[new]** - #Imperative tag and `.verbs().isImperative()` method +- **[fix]** - some tagger issues +- update deps + _plugin-releases_: dates + +#### 13.10.0 [Feb 2021] + +- **[new]** - #Fraction tag and improved fraction support (thanks Jakeii!) +- **[fix]** - edge-case match issues with `!` syntax +- **[change]** - update deps +- updates for `compromise-dates@1.4.0`, `compromise-numbers@1.2.0` + +#### 13.9.3 [Feb 2021] + +- **[fix]** - fix weird ordering issue with named exports #815 + +#### 13.9.2 [Feb 2021] + +- **[fix]** - typescript issue + +#### 13.9.1 [Feb 2021] + +- **[fix]** - matches over a contraction +- **[new]** - add 'implicit' text output + +#### 13.9.0 [Feb 2021] + +- **[new]** - World.addConjugations() method +- **[new]** - World.addPlurals() method +- **[new]** - start compromise-penn-tags plugin +- **[new]** - add fuzzy option to match commands +- **[new]** - support multiple-word matches in OR matches (a|b|foo bar|c) +- **[change] (internal)** - rename 'oneOf' match syntax to 'fastOr' +- **[change]** - use new export maps format +- **[fix]** - conjugations fixes #800 +- **[fix]** - tokenization fixes #801 + +#### 13.8.0 [Dec 2020] + +- **[change]** improved support for fractions in numbers-plugin #793 +- **[change]** remove zero-width characters in normalized output #759 +- **[change]** improved Person tagging with particles #794 +- **[change]** improved i18n Person names +- **[change]** tagger+tokenization fixes +- **[change]** remove empty results from .out('array') #795 +- **[change]** `.tokenize()` runs any postProcess() scripts from plugins +- **[change]** improved support for lowercase acronyms +- **[change]** - support years like '97 +- **[change]** - change tokenizer for '20-aug' +- **[change]** - update deps of all plugins +- **[fix]** - NumberRange tagging issue #795 +- **[fix]** - improved support for ordinal number ranges +- **[fix]** - improved regex support in match-syntax +- **[fix]** - improved support for ~soft~ match syntax #797 +- **[fix]** - better handling of `{0,n}` match syntax +- **[new]** - new plugin `strict-match` +- **[new]** - set NounPhrase, VerbPhrase tags in nlp-sentences plugin +- **[new]** - `.phrases()` method in nlp-sentences plugin +- **[new]** - support `.apppend(doc)` and `.prepend(doc)` +- **[new]** - `values.normalize()` method + +#### 13.7.0 [Oct 2020] + +- **[change]** many misc tagging fixes + - 'if' is now a #Preposition + - possessive pronouns are #Pronoun and #Possessive + - more phrasal verbs + - make #Participle tag #PastTense + - favor #PastTense over #Participle interpretation in tagger +- **[change]** `@hasHyphen` returns false for sentence dashes +- a lot more testing + +#### 13.6.0 [Oct 2020] + +- **[new]** first-attempt at `verbs().subject()` method +- **[change]** avoid conjugating imperative tense - 'please close the door' +- **[change]** misc tagging fixes #786 +- **[change]** .nouns() results split on quotations #783 +- **[change]** NumberRange must be < 4 digits #735 +- **[change]** reduction in #Person tag false-positives + +#### 13.5.0 [Sep 2020] + +- **[new]** add `.parseMatch()` method for pre-parsing match statements + +#### 13.4.0 [Sep 2020] + +- **[change]** stop including adverbs and some auxiliaries in `.conjugate()` results +- **[change]** .append() and .prepend() on an empty doc now creates a new doc +- **[new]** add `verbs().toParticiple()` method (add to observables/verb) +- **[new]** add `sentences().toParticiple()` method (add to observables/verb) +- **[fix]** some verb-tagging issues +- **[fix]** contractions issue in `.clone()` +- **[fix]** try harder to retain modal-verbs in conjugation - 'i should drive' no-longer becomes 'i will drive' + +#### 13.3.2 [Aug 2020] + +- fix for offset issue #771 +- fix for `{min,max}` syntax #767 +- typescript fixes +- update deps + +#### 13.3.1 [June 2020] + +-support unicode spaces for #759 + +- major improvements to `compromise-plugin-dates` (1.0.0) + +#### 13.3.0 [June 2020] + +- bugfixes (conjugation and tagging) 752, 737, 725, 751, 743 748, 755, 758, 706, 761 +- support tokenized array as input +- update deps +- bugfix updates to `plugin-sentences`, and `plugin-dates` + +#### 13.2.0 [May 2020] + +- deprecate `.money()` and favour overloaded method in compromise-numbers plugin +- add `.percentages()` and `.fractions()` to compromise-numbers plugin +- add `.hasAfter()` and `.hasBefore()` methods +- change handling of slashes +- add `.world()` method to constructor +- add more abbreviations +- fix regex backtracking #739 +- tokenize build: +- - remove conjugation and inflection data +- - remove conjugation and inflection functions +- remove sourcemap from build process (too big) +- improvements to `.numbers().units()` +- fix for linked-list runtime error #744 with contractions + +#### 13.1.1 + +- fix `verbs.json()` runtime-error +- improve empty `.lists()` methods +- allow custom tag colors +- test new github action workflow + +#### 13.1.0 + +- significant (~30%) speed up of parsing +- change sensitivity of input in `.lookup()` for major speed improvements. +- improved typescript types +- subtle changes to internal caching +- adds 'oneOf' match syntax param +- fixes `[word?]` syntax parsing + +### 13.0.0 [Feb 2020] + +_major changes to `.export()` and `[capture] group` match-syntax._ + +- **[breaking]** move .export() and .load() methods to plugin (compromise-export) +- - change .export() format - this hasn't worked properly since v12. (mis-parsed contractions) see #669 +- **[breaking]** split `compromise-output` into `compromise-html` and `compromise-hash` plugins +- **[breaking]** `.match('foo [bar]')` no-longer returns 'bar'. (use `.match('foo [bar]', 0)`) +- **[breaking]** capture groups are no longer merged. `.match('[foo] [bar]')` returns two groups accessible with the new `.groups()` function +- **[breaking]** change `.sentences()` method to return only full-sentences of matches (use `.all()` instead) + +modifications: + +- **[fix]** - nlp.clone() - hasn't worked properly, since v12. (@Drache93) +- **[fix]** - issues with greedy capture [*] and [.+] -(@Drache93) 💛 +- add whitespace properties (pre+post) to default json output (suppress with `.json({ whitespace: false })`) +- `.lookup({ key: val })` with an object now returns an object back ({val: Doc}) +- add nlp constructor as a third param to `.extend()` +- support lexicon object param in tokenize - `.tokenize('my word', { word: 'tag' })` +- clean-up of scripts and tooling +- improved typescript types +- add support for some french contractions like `j'aime -> je aime` +- allow null results in `.map()` function +- better typescript support +- allow longer acronyms +- **[fix]** - offset length issue +- **[new]** - add new named-match syntax, with .groups() method (@Drache93) +- **[new]** - add `nlp.fromJSON()` method +- **[new]** - add a new `compromise-tokenize.js` build, without the tagger, or data included. + +#### 12.3.0 [Jan 2020] + +- prefer `@titleCase` instead of `#TitleCase` tag +- update dependencies +- fix case-sensitive paths +- fix greedy-start match condition regression #651 +- fix single period sentence runtime error +- fix potentially-unsafe regexes +- improved tagging for '-ed' verbs (#616) +- improve support for auxilary-pastTense ('was lifted') verb-phrases +- more robust number-tagging regexes +- setup typescript types for plugins #661 (thanks @Drache93!) +- verb conjugation and tagger bugfixes +- disambiguate between acronyms & yelling + +##### 12.2.1 [Dec 2019] + +- fix 'aint' contraction +- make Doc.world writable +- update deps +- more tests +- fix shared period with acronym at end of sentence +- fix some mis-classification of contraction +- fix over-active emoji regex +- tag 'cookin', 'hootin' as `Gerund` +- support unicode single-quote symbols in contractions + +#### 12.2.0 [Dec 2019] + +- improved splitting in .nouns() +- add `.nouns().adjectives()` method +- add `concat` param to `.pre()` and `.post()` +- allow ellipses at start of term _"....so"_ in `@hasEllipses` +- fix matches with optional-end `foo?$` match syntax +- add typescript types for subsets + +#### 12.1.0 [Nov 2019] + +- add 'sideEffect:false' flag to build +- considerable speedup (20%) in tagger +- ensure trimming of whitespace for root/clean/reduced text formats +- fix client-side logging +- more flexible params to `replace()` and `replaceWith()` + +### 12.0.0   :postal_horn: [Nov 2019] + +- see **[Release Notes](https://github.com/spencermountain/compromise/wiki/v12-Release-Notes)** + +#### 11.13.0 + +- support singular units in `.value()` + +#### 11.11.0 + +- `.quotations()` no-longer return repeated results for nested quotes +- simplify quotation tagset +- `.out('normal')` no longer includes quotes or trailing-possessives +- improve `.debug()` on client-side + +#### 11.10.0 + +- better honorific support, add `honorifics` feature to .normalize() +- elipses bugfixes +- replace unicode chars in `.normalize()` now by default +- `acronyms().stripPeriods()` and `acronyms().addPeriods()` + +#### 11.9.0 + +- tag professions as `#Actor` +- add more behaviours to `.normalize()` +- support match-results as inputs to .match() and .not() +- support some us-state abbreviations like 'Phoeniz AZ' + +#### 11.8.0 + +- add `nouns().toPossessive()` +- ngrams now remove empty-terms in contractions - fixes counting issue [#476](https://github.com/spencermountain/compromise/issues/476) + +#### 11.7.0 + +- expose internal `sentences().isQuestion()` method +- `.join()` as an alias for `.flatten()` +- slightly different behavior for wildcards in capture-groups [pull/472](https://github.com/spencermountain/compromise/pull/472) +- `.possessives()` subset + `#Possessive` tagging fixes +- hide massive `world` output for console.log of a term + +#### 11.6.0 + +- improve quotations() method +- add .parentheses() method +- add 'nickname' support to .people() +- 'will be #Adjective' now tagged as Copula +- include adverbs in verb conjugation (more) consistently +- `sentences().toContinuous()` and `verbs().toGerund()` +- some more aliases for jquery-like methods api +- move `getPunctuation`, `setPunctuation` from .sentence to main Text method +- rename internal `endPunctuation` to `getPunctuation` +- more consistent `cardinal/ordinal` tagging for values + +#### 11.5.0 + +- add #Abbreviation tag +- add #ProperNoun tag +- fixes for noun inflection + +##### 11.4.1 + +- include old ending punctuation in a `.replace()` cmd + +##### 11.3.1 + +- almost-double the support for first-names +- changes to bestTag method + +##### 11.2.1 + +- rolls-back some aggressive JustesonKatz stuff +- better support for emdash numberRange +- 'can\'t' contraction bugfix +- fix for dates().toShortForm() + +#### 11.1.0 + +- add `#Multiple` Values tag, and changes to how invalid numbers like 'sixty fifteen hundred' are understood +- better em-dash/en-dash support +- better conjugate implicit verbs inside contractions - "i'm", "we've" +- nouns().articles() method +- neighborhoods as #Place +- support more complex noun-phrases with JustesonKatz in `.nouns()` + +### v11 + +- support for persistent lexicon/tagset changes +- `addTags, addWords, addRegs, addPlurals, addConjugations` methods to extend native data +- - `.plugin()` method to wrap all of these into one +- - (removal of `.packWords()` method) +- more `.organizations()` matches +- regex-support in .match() - `nlp('it is waaaay cool').match('/aaa/').out()//'waaaay'` +- improved apostrophe-s disambiguation +- support whitespace before sentence boundary +- improved QuestionWord tagging, some `.questions()` without a question-mark +- phrasalVerb conjugation +- new #Activity tag for Gerunds as nouns 'walking is fun' +- change ngram params to an object `{size:int, max:int}` +- implement '[]' capture-group syntax in .match() +- bring-back `map, filter, foreach and reduce` methods +- set `.words()` as alias for .terms() +- `people().firstNames()`, `people().lastNames()` +- split-out comma-separated adverbs + +##### 10.7.2 + +- fix for '.watch' reserved word in efrt + +#### 10.7.0 + +- improved `places()` parsing +- improved `{min,max}` match syntax +- new `.out('match')` method +- quiet addition of .pack() and .unpack() for owen + +#### 10.6.0 + +- move internal lexicon around, to support new format in v11 +- added states & provinces as #Region +- added #Comparable tag for adjectives that conjugate + +#### 10.5.0 + +- add increment/decrement/add/subtract methods to .values() +- add units(), noUnits() methods to .values() +- 'uncountable' nouns are no longer assumed to be singular +- money tag is no longer always a value + +#### 10.4.0 + +- improved tagging of `VerbPhrase` and `Condition` +- fixes to contractions in sentence-changes - "i'm going -> i went" +- several verb conjugation fixes +- accept Terms & Result objects in .match() and .replace() + +#### 10.3.0 + +- new `Percent` tag +- lump more units in with `.values()` + +#### 10.2.0 + +- .trim() method, +- adjective tagging fixes +- some new .out() methods + +#### 10.1.0 + +- fix return format of .isPlural(), so it acts like a match filter +- less-greedy date tagging & ambiguous month fixes + +### v10 + +- cleanup & rename some `.value()` methods +- change lumping behaviour of lexicon terms with multiple words +- keep more former tags after a term replace method +- new `.random()` method +- new `.lessThan()`, `.greaterThan()`, `.equalTo()` methods +- new prefix/suffix/infix matches with `_ffix` syntax +- `tag()` supports a sequence of tags for a sequence of terms +- .match 'range' queries now use a real match - `#Adverb{2,4}` +- new `.before()` and `.after()` match methods +- removes `.lexicon()` method for many-lexicons concept +- changes params of `.replaceWith()` method to a 'keyTags' boolean +- improved .debug() and logging on client-side + +#### 9.1.0 + +- pretty-real filesize reduction by swapping es6 classes for es5 inheritance + +### v9.0.0 + +- rename `Term.tag` object to `Term.tags` so the `.tag()` method can work throughout more-consistently +- fix 'Auxillary' tag typo to 'Auxiliary' +- optimisation of .match(), and tagset - significant speedup! +- adds `.tagger()` method and cleanup extra params +- adds `wordStart` and `wordEnd` offsets to `.out('offset')` for whitespace+punctuation +- new `.has()` method for faster lookups + +#### 8.2.0 + +- add `nlp.out('index')` method, 12 bugs + +#### 8.1.0 + +- add `nlp.tokenize()` method for disabling pos-tagging of input + +### v8.0.0 + +- less-ambitious date-parsing of nl-date forms +- filesize reduction using [efrt](https://github.com/nlp-compromise/efrt) data structure (254k -> 214k) + +##### 7.0.15 + +- fix for IE9 + +### v7   :postal_horn: + +- weee! [big change!](https://github.com/nlp-compromise/compromise/wiki/v7-Upgrade,-welcome) _npm package rename_ + +#### 6.5.0 + +- builds now using browserify + derequire() + +#### 6.4.0 + +- re-written term-lumper logic + +#### 6.3.0 + +- new nlp.lexicon({word:'POS'}) flow + +### v6 + +- be consistent with `text.normal()`, `term.all_forms()`, `text.word_count()`. `text.normal()` includes sentence-terminators, like periods etc. + +#### 5.2.0 + +- airport codes support, helper methods for specific POS + +#### 5.1.0 + +- newlines split sentences + +### v5 + +- Text methods now return this, instead of array of sentences + +#### 4.12.0 + +- more-sensible responses for invalid, non-string inputs + +#### 4.11.0 + +- 14 PRs, with fixes for currencies, pluralization, conjugation + +#### 4.10.0 + +- Value.to_text() new method, fix "Posessive" POS typo + +#### 4.9.0 + +- return of the text.spot() method (Re:#107) + +#### 4.8.0 + +- more aggressive lumping of dates, like 'last week of february' + +#### 4.7.0 + +- whitespace reproduction in .text() methods + +#### 4.6.0 + +- move negate from sentence to verb & statement + +#### 4.2.0 + +- rename 'implicit' to 'expansion' for smarter contractions + +##### 4.1.3 + +- added readable-compression to adj, verbs (121kb -> 117kb) + +#### 4.1.0 + +- hyphenated words are normalized into spaces + +### v4.0.0 + +- grammar-aware match & replace functions + +##### 3.0.2 + +- Statement & Question classes + +### v3.0.0 Feb 2016 + +- split ngram, locale, and syllables into plugins in seperate repo + +### 2.0.0 - Nov 2015 + +- es6 classes, babel building +- better test coverage +- ngram uses term tokenization, so that 'Tony Hawk' us one term, and not two +- more organized pos rules +- Pos tagging is done implicitly now once nlp.Text is run +- Entity spotting is split into .people(), .place(), .organisations() +- unicode normalisation is killed +- opaque two-letter tags are gone +- plugin support +- passive tense detection +- lexicon can be augmented third-party +- date parsing results are different + +##### 1.1.0 - May 2015 + +- smarter handling of ambiguous contractions ("he's" -> ["he is", "he has"]) + +### v1.0.0 - May 2015 + +- added name genders and beginning of co-reference resolution ('Tony' -> 'he') API. +- small breaking change on `Noun.is_plural` and `Noun.is_entity`, affording significant pos() speedup. Bumped Major version for these changes. + +##### 0.5.2 - May 2015 + +- Phrasal verbs ('step up'), firstnames and .people() + +##### 0.4.0 - May 2015 + +- Major file-size reduction through refactoring + +##### 0.3.0 - Jan 2015 + +- New NER choosing algorithm, better capitalisation logic, consolidated tests + +##### 0.2.0 - Nov 2014 + +- Sentence class methods, client-side demos diff --git a/data/README.md b/data/README.md new file mode 100644 index 0000000..ca9996f --- /dev/null +++ b/data/README.md @@ -0,0 +1,20 @@ +hello! + +here is the data compressed and compiled into the word models that compromise uses to understand text. + +there are some things to note: + +1. run `npm run pack` after making a change, to see changes appear. + +2. lexicon words are lowercased and compressed with [efrt](https://github.com/spencermountain/efrt), some characters are reserved -`[0-9,;!:|¦]` + +3. be careful adding ambiguous words - 'ray' should not be a #Person - it's a better fit for `./switches/person-date.js` + +4. many word-lists have conjugations automatically applied to them - #Singular words are pluralized, etc. + + +the lexicon output data can be found in `./src/2-two/preTagger/model/lexicon/_data.js` + +and the word-conjugation data can be found in `./src/2-two/preTagger/model/models/_data.js` + +for more information, see the [compromise-lexicon docs](https://observablehq.com/@spencermountain/compromise-lexicon). \ No newline at end of file diff --git a/data/lexicon/adjectives/adjectives.js b/data/lexicon/adjectives/adjectives.js new file mode 100644 index 0000000..a675eb9 --- /dev/null +++ b/data/lexicon/adjectives/adjectives.js @@ -0,0 +1,813 @@ +//adjectives that don't conjugate to superlative/adverb/verb forms +export default [ + 'prima', + 'ultra', + 'extra', + 'vice versa', + 'magenta', + 'superb', + 'cardiac', + + // -ic + 'specific', + 'terrific', + 'horrific', + 'scientific', + 'public', + 'symbolic', + 'alcoholic', + 'organic', + 'hispanic', + 'generic', + 'didactic', + 'gigantic', + 'frantic', + 'authentic', + 'ad hoc', + 'ahead', + 'widespread', + + // -ed + 'nuanced', + 'wounded', + 'retarded', + 'naked', + 'buck naked', + 'fabled', + 'so called', + 'old fashioned', + 'sacred', + 'deceased', + 'diseased', + 'lapsed', + 'sophisticated', + 'antiquated', + 'spirited', + 'talented', + 'subdued', + 'beloved', + 'hallowed', + 'crazed', + 'infrared', + 'grizzled', + 'appalled', + 'enamored', + 'newlywed', + 'famed', + 'jaded', + 'conceited', + + // -id + 'plaid', + 'prepaid', + 'afraid', + 'rabid', + 'placid', + 'splendid', + 'sordid', + 'rheumatoid', + 'devoid', + 'torpid', + 'languid', + + 'behind', + 'blind', + 'beyond', + 'good', + 'substandard', + 'on board', + 'aboard', + 'onboard', + 'off guard', + 'awkward', + 'forward', + 'straight forward', + 'straightforward', + 'boldface', + + 'avant garde', + 'home made', + 'wee', + 'teenage', + 'average', + 'awake', + 'upscale', + 'wholesale', + + // -ble + 'able', + 'probable', + 'foreseeable', + 'notable', + 'valuable', + 'invaluable', + 'soluble', + 'insoluble', + 'single', + + // -ile + 'fragile', + 'worthwhile', + 'sterile', + 'volatile', + 'versatile', + 'fertile', + 'hostile', + + 'whole', + 'multiple', + 'ample', + 'same', + 'supreme', + 'part time', + 'profane', + 'humane', + 'insane', + 'obscene', + 'serene', + + // -ine + 'alkaline', + 'offline', + 'crystalline', + 'online', + 'masculine', + 'feminine', + 'pristine', + + 'done', + 'autoimmune', + 'picayune', + 'aware', + 'macabre', + 'sincere', + 'mere', + 'entire', + 'bizarre', + 'premature', + 'immature', + 'obese', + 'precise', + 'concise', + 'false', + 'immense', + 'intense', + 'sparse', + 'adverse', + 'diverse', + 'perverse', + 'profuse', + + // -ate + 'delicate', + 'up to date', + 'immediate', + 'appropriate', + 'inappropriate', + 'legitimate', + 'ultimate', + 'insubordinate', + 'indeterminate', + 'innate', + 'passionate', + 'compassionate', + 'proportionate', + 'alternate', + 'fortunate', + 'disparate', + 'degenerate', + 'temperate', + 'desperate', + 'literate', + 'illiterate', + 'irate', + 'accurate', + 'inaccurate', + 'commensurate', + 'adequate', + 'inadequate', + 'private', + + 'obsolete', + 'incomplete', + 'discrete', + 'recondite', + 'impolite', + 'finite', + 'definite', + 'indefinite', + 'trite', + 'petite', + 'exquisite', + 'en suite', + 'acute', + 'absolute', + 'resolute', + 'en route', + 'due', + 'concave', + 'coercive', + 'conducive', + 'alive', + 'aggressive', + 'attractive', + 'above', + 'ablaze', + 'bronze', + 'well off', + 'far off', + 'aloof', + 'soundproof', + 'weatherproof', + + // -ing + 'menacing', + 'longstanding', + 'impending', + 'far reaching', + 'scathing', + 'foregoing', + 'ongoing', + 'easygoing', + 'lumbering', + 'nausiating', + 'preexisting', + 'left wing', + 'right wing', + 'mindblowing', + 'knowing', + 'appetizing', + 'appalling', + + 'smug', + // -ish + 'snobbish', + 'selfish', + 'hellish', + 'foolish', + 'stylish', + 'squeamish', + 'loutish', + + 'mammoth', + 'north', + 'south', + 'punjabi', + 'mini', + 'a priori', + 'ok', + 'brisk', + + // -al + 'global', + 'ethereal', + 'legal', + 'illegal', + 'conjugal', + 'lethal', + 'racial', + 'beneficial', + 'artificial', + 'crucial', + 'colonial', + 'initial', + 'influential', + 'partial', + 'impartial', + 'final', + 'literal', + 'colossal', + 'equal', + 'usual', + 'actual', + 'archival', + 'rival', + 'royal', + + // -el + 'civil', + 'all', + 'overall', + 'still', + 'old school', + + // -ful + 'peaceful', + 'graceful', + 'vengeful', + 'shameful', + 'careful', + 'useful', + 'hateful', + 'grateful', + 'tasteful', + 'wasteful', + 'beautiful', + 'gainful', + 'painful', + 'helpful', + 'doubtful', + 'forgetful', + 'fretful', + 'delightful', + 'rightful', + 'thoughtful', + 'wistful', + + 'dim', + 'longterm', + 'ad infinitum', + 'urban', + 'suburban', + 'mammalian', + 'deadpan', + + // -en + 'wooden', + 'barren', + 'rotten', + 'craven', + 'proven', + 'frozen', + + 'foreign', + 'benign', + 'main', + 'certain', + 'highfalutin', + 'spot on', + 'modern', + 'northern', + 'southern', + 'western', + 'upside down', + 'gung ho', + 'macho', + 'in vitro', + 'de facto', + 'ipso facto', + 'asleep', + 'tip top', + 'nonstop', + 'fed up', + 'hard up', + 'familiar', + + // -er + 'somber', + 'sheer', + 'eager', + 'together', + 'other', + 'former', + 'inner', + 'proper', + 'improper', + 'upper', + 'super duper', + 'super', + 'lesser', + 'outer', + 'over', + + 'junior', + 'inferior', + 'prior', + 'major', + 'indoor', + 'outdoor', + 'backwards', + 'sui generis', + 'gratis', + 'for keeps', + 'bogus', + 'dangerous', + 'offbeat', + 'upbeat', + + // -ct + 'abstract', + 'intact', + 'exact', + // 'perfect', + 'imperfect', + 'erect', + 'indirect', + 'incorrect', + 'derelict', + 'distinct', + + 'discreet', + 'soviet', + 'upset', + 'makeshift', + 'overweight', + 'lightweight', + 'overnight', + 'uptight', + 'overwrought', + 'illicit', + 'implicit', + 'explicit', + 'nonprofit', + 'difficult', + + // -ant + 'vacant', + 'significant', + 'insignificant', + 'abundant', + 'redundant', + 'extravagant', + 'elegant', + 'arrogant', + 'obediant', + 'defiant', + 'nonchalant', + 'vigilant', + 'dormant', + 'dominant', + 'resonant', + 'vibrant', + 'exuberant', + 'tolerant', + 'flagrant', + 'ignorant', + 'aberrant', + 'reluctant', + 'exultant', + 'important', + 'distant', + 'resistant', + 'constant', + 'relevant', + 'irrelevant', + 'observant', + 'cognizant', + + // -ent + 'bent', + 'fluorescent', + 'interdependent', + 'stringent', + 'emergent', + 'divergent', + 'urgent', + 'efficient', + 'permanent', + 'eminent', + 'imminent', + 'prominent', + 'pertinent', + 'apparent', + 'transparent', + 'absent', + 'fluent', + 'affluent', + 'frequent', + 'infrequent', + 'subsequent', + 'consequent', + 'congruent', + 'insolvent', + + 'conjoint', + 'disjoint', + 'in front', + 'up front', + 'moot', + 'apt', + 'adept', + 'nondescript', + // 'exempt', + 'abrupt', + + 'inert', + 'overt', + 'covert', + 'east', + 'abreast', + 'steadfast', + 'honest', + 'populist', + 'against', + 'most', + 'uttermost', + 'robust', + 'devout', + 'kaput', + 'next', + 'in situ', + 'brand new', + 'below', + 'faux', + 'everyday', + 'okay', + 'nearby', + 'muddy', + 'speedy', + 'moldy', + 'handy', + 'cutesy', + 'creepy', + 'sleepy', + 'drowsy', + 'folksy', + 'handsy', + 'fiery', + 'flowery', + 'cheery', + 'chintzy', + + // -ly + 'kindly', + 'monthly', + 'daily', + 'weekly', + 'seemly', + 'womanly', + 'yearly', + 'scholarly', + 'elderly', + 'orderly', + 'quarterly', + 'neighborly', + 'hourly', + 'surly', + 'nightly', + 'many', + 'sparkly', + // 'approximately', + // 'fortunately', + 'lately', + // 'ultimately', + + // -ry + 'legendary', + 'secondary', + 'dreary', + 'tertiary', + 'primary', + 'customary', + 'honorary', + 'temporary', + 'arbitrary', + 'contrary', + 'necessary', + 'supervisory', + 'sensory', + 'mandatory', + 'inhibitory', + 'auditory', + 'statutory', + 'sorry', + 'hairy', + 'uppity', + 'guilty', + 'woozy', + + // un-prefix that aren't verbs + 'unabated', + 'unappealing', + 'unassuming', + 'unattended', + 'unauthorized', + 'unbecoming', + 'unchallenged', + 'uncharted', + 'unchecked', + 'uncircumcised', + 'unconvincing', + 'undecided', + + 'under', + 'underage', + 'undercover', + 'underhand', + 'underlying', + 'underneath', + 'underprivileged', + 'undersized', + 'underwater', + 'underway', + 'underweight', + + 'undisclosed', + 'undisputed', + 'undocumented', + 'undue', + 'unemployed', + 'unending', + 'uneven', + 'unexpected', + 'unexplained', + 'unfair', + 'unfinished', + 'unforeseen', + 'unguarded', + 'unheard', + 'uninsured', + 'uninterested', + 'uninterrupted', + 'uninvited', + 'unique', + 'universal', + 'unknown', + 'unmarried', + 'unmatched', + 'unmet', + 'unnamed', + 'unnoticed', + 'unopposed', + 'unpaid', + 'unparalleled', + 'unprecedented', + 'unrecognized', + 'unregulated', + 'unrelated', + 'unrelenting', + 'unrequited', + 'unreserved', + 'unresolved', + 'unruly', + 'unseen', + 'unsettled', + 'unsightly', + 'unsold', + 'unspent', + 'unspoken', + 'unsupervised', + 'unsuspecting', + 'untapped', + 'untested', + 'untold', + 'untouched', + 'unused', + 'unwanted', + 'unwarranted', + 'unwieldy', + + 'recent', + 'overseas', + 'monochrome', + 'contradictory', + 'satisfactory', + + 'skilled', + 'antique', + 'dependent', + 'independent', + 'modest', + + // -ide + 'bona fide', + 'bonafide', + // -ate + 'affectionate', + 'celebate', + 'corporate', + 'illegitimate', + 'inconsiderate', + 'inordinate', + 'proximate', + + 'renowned', + 'beside', + 'alright', + 'top notch', + 'self sufficient', + 'middle aged', + 'no more', + 'ashen', + 'scarlet', + 'alone', + 'homesick', + 'longtime', + 'bigtime', + 'inside', + 'outside', + 'artsy', + 'antsy', + 'golden', + 'bare', + 'subpar', + 'ingrown', + 'agreeable', + 'vile', + 'mega', + 'frilly', + 'indulgent', + 'win win', + 'strung out', + 'whacked out', + 'crystal clear', + 'skin deep', + 'pent up', + 'partisan', + 'bipartisan', + 'ice cold', + 'one on one', + 'ongoing', + 'literary', + 'beneath', + 'alike', + 'mainstream', + 'metropolitan', + 'overboard', + 'mediocre', + 'maritime', + 'paranoid', + 'compulsory', + 'hardcore', + 'clockwise', + 'counterclockwise', + 'multifaceted', + 'lighthearted', + 'belated', + 'bestselling', + 'breathtaking', + 'infinite', + 'southwest', + 'northwest', + 'southeast', + 'northeast', + 'indie', + 'nude', + 'destitute', + 'obligated', + 'naval', + 'puzzled', + 'overdue', + 'overhand', + 'overhead', + 'hardworking', + 'gauche', + 'stout', + + 'abject', + 'adamant', + 'agile', + // 'articulate', + 'astute', + 'austere', + 'blithe', + 'circumspect', + 'coy', + 'eloquent', + 'enough', + 'expedient', + 'fervent', + 'fragrant', + 'frugal', + 'hoary', + 'inane', + 'inept', + 'jittery', + 'maverick', + 'obedient', + 'offhand', + 'orotund', + 'rampant', + 'reprobate', + 'sinister', + 'slippery', + 'stalwart', + 'stubborn', + 'sublime', + 'thorny', + 'trenchant', + 'vagrant', + 'wanton', + 'meager', + 'doting', + 'crafty', + 'morbid', + 'acquiescent', + 'despondent', + 'slipshod', + 'contrite', + 'recalcitrant', + 'merry', + 'condescending', + 'abstruse', + 'erstwhile', + 'comatose', + 'desultory', + 'pert', + 'curmudgeonly', + 'cogent', + 'spry', + 'demure', + 'docile', + 'watery', + 'succinct', + 'major', + 'minor', + 'fast paced', + 'chewy', + 'drunk', + 'greasy', + 'pointy', + 'testy', + 'sold out', +] diff --git a/data/lexicon/adjectives/comparables.js b/data/lexicon/adjectives/comparables.js new file mode 100644 index 0000000..87d7b93 --- /dev/null +++ b/data/lexicon/adjectives/comparables.js @@ -0,0 +1,317 @@ +//adjectives that convert to superlative/comparative form +export default [ + 'absurd', + 'angry', + 'awesome', + 'bad', + 'bald', + 'bawdy', + 'big', + 'bitter', + 'black', + 'bland', + 'blond', + 'bloody', + 'blue', + 'bold', + 'bouncy', + 'brash', + 'brave', + 'bright', + 'brilliant', + 'broad', + 'brown', + 'buff', + 'burly', + 'busy', + 'cagey', + 'cheap', + 'cheesy', + 'chilly', + 'clever', + 'cloudy', + 'coarse', + 'cold', + 'common', + 'costly', + 'cowardly', + 'cozy', + 'crisp', + 'cruel', + 'cuddly', + 'curly', + 'cute', + 'dapper', + 'dark', + 'dead', + 'deadly', + 'deaf', + 'dear', + 'deep', + 'dense', + 'dire', + 'dirty', + 'divine', + 'dizzy', + 'drunk', + 'dumb', + 'early', + 'earthly', + 'eastern', + 'easy', + 'eerie', + 'essential', + 'evil', + 'extreme', + 'far', + 'faulty', + 'feeble', + 'fierce', + 'financial', + 'flat', + 'flirty', + 'foamy', + 'fond', + 'formal', + 'frail', + 'fresh', + 'friendly', + 'full', + 'fun', + 'funny', + 'furry', + 'gaudy', + 'gay', + 'gentle', + 'genuine', + 'ghastly', + 'ghostly', + 'giant', + 'giddy', + 'glad', + 'glib', + 'gloomy', + 'goofy', + 'grand', + 'gray', + 'great', + 'greedy', + 'green', + 'grey', + 'grim', + 'grisly', + 'groovy', + 'gross', + 'gruesome', + 'handsome', + 'happy', + 'hard', + 'hardy', + 'harsh', + 'heady', + 'hearty', + 'heavenly', + 'heavy', + 'hefty', + 'hesitant', + 'high', + 'hilly', + 'homely', + 'hot', + 'huge', + 'humble', + 'humid', + 'hungry', + 'icy', + 'ill', + 'insecure', + 'intellegent', + 'intermediate', + 'intimate', + 'jolly', + 'juicy', + 'keen', + 'kind', + 'lame', + 'large', + 'late', + 'leery', + 'lewd', + 'likely', + 'lil', + 'limp', + 'little', + 'lively', + 'lofty', + 'lonely', + 'long', + 'loose', + 'loud', + 'lousy', + 'lovely', + 'low', + 'lowly', + 'loyal', + 'lucky', + 'mad', + 'measly', + 'meaty', + 'meek', + 'mellow', + 'mild', + 'moist', + 'moody', + 'mundane', + 'mute', + 'naive', + 'near', + 'neat', + 'nerdy', + 'new', + 'nibbly', + 'nice', + 'nimble', + 'noble', + 'noisy', + 'normal', + 'nosy', + 'numb', + 'odd', + 'oily', + 'old', + 'orange', + 'phony', + 'pink', + 'plain', + 'pleasant', + 'polite', + 'poor', + 'pregnant', + 'pricey', + 'prickly', + 'profound', + 'proud', + 'puny', + 'pure', + 'purple', + 'quaint', + 'quick', + 'quiet', + 'ragged', + 'rainy', + 'random', + 'rapid', + 'rare', + 'raw', + 'ready', + 'real', + 'red', + 'remote', + 'rich', + 'ripe', + 'ritzy', + 'romantic', + 'roomy', + 'rosy', + 'rough', + 'round', + 'rude', + 'sad', + 'safe', + 'saintly', + 'salty', + 'savvy', + 'scanty', + 'scarce', + 'scary', + 'severe', + 'sexy', + 'shady', + 'shallow', + 'sharp', + 'shiny', + 'shrill', + 'shy', + 'sick', + 'sickly', + 'silly', + 'simple', + 'skinny', + 'sleek', + 'slender', + 'slight', + 'slim', + 'slimy', + 'sly', + 'small', + 'smart', + 'smelly', + 'social', + 'soft', + 'solemn', + 'solid', + 'soon', + 'sore', + 'special', + 'spicy', + 'sprightly', + 'stale', + 'stark', + 'stately', + 'steady', + 'steep', + 'stern', + 'stiff', + 'straight', + 'strange', + 'strict', + 'strong', + 'stupid', + 'sturdy', + 'substantial', + 'subtle', + 'sudden', + 'superficial', + 'surreal', + 'sweet', + 'swift', + 'tall', + 'tame', + 'tart', + 'tawdry', + 'tense', + 'thick', + 'thirsty', + 'tidy', + 'tight', + 'timely', + 'tiny', + 'tired', + 'tough', + 'tranquil', + 'trendy', + 'true', + 'ugly', + 'vague', + 'vain', + 'vast', + 'verdant', + 'vulgar', + 'wary', + 'weak', + 'weary', + 'weird', + 'whiny', + 'white', + 'wicked', + 'wide', + 'wild', + 'wily', + 'windy', + 'wiry', + 'wise', + 'wry', + 'yellow', + 'young', + 'zany', +] diff --git a/data/lexicon/dates/dates.js b/data/lexicon/dates/dates.js new file mode 100644 index 0000000..7547328 --- /dev/null +++ b/data/lexicon/dates/dates.js @@ -0,0 +1,14 @@ +// uncontroversial date words +export default [ + 'today', + 'tomorrow', + 'tmr', + 'tmrw', + 'yesterday', + 'weekend', + 'weekends', + 'week end', + 'ago', + 'someday', + 'oneday', +] diff --git a/data/lexicon/dates/durations.js b/data/lexicon/dates/durations.js new file mode 100644 index 0000000..c8b7d0c --- /dev/null +++ b/data/lexicon/dates/durations.js @@ -0,0 +1,35 @@ +export default [ + 'century', + 'centuries', + 'day', + 'days', + 'decade', + 'decades', + 'hour', + 'hours', + 'hr', + 'hrs', + 'millisecond', + 'milliseconds', + 'minute', + 'minutes', + // 'min', + 'month', + 'months', + 'sec', + 'secs', + // 'week end', + 'weekend', + 'week', + 'weeks', + 'wk', + 'wks', + 'year', + 'years', + 'yr', + 'yrs', + 'quarter', + // 'quarters', + 'qtr', + 'season', +] diff --git a/data/lexicon/dates/months.js b/data/lexicon/dates/months.js new file mode 100644 index 0000000..e17e924 --- /dev/null +++ b/data/lexicon/dates/months.js @@ -0,0 +1,13 @@ +export default [ + // 'january', + 'february', + // 'april', + // 'june', + 'july', + // 'august', + 'september', + 'october', + 'november', + 'december', + //abbreviations are elsewhere +] diff --git a/data/lexicon/dates/weekdays.js b/data/lexicon/dates/weekdays.js new file mode 100644 index 0000000..f59ca12 --- /dev/null +++ b/data/lexicon/dates/weekdays.js @@ -0,0 +1,23 @@ +export default [ + 'monday', + 'tuesday', + 'wednesday', + 'thursday', + 'friday', + 'saturday', + 'sunday', + 'mon', + 'tues', + // 'wed', + 'thurs', + 'fri', + // 'sat', + // 'sun', + 'mondays', + 'tuesdays', + 'wednesdays', + 'thursdays', + 'fridays', + 'saturdays', + 'sundays', +] diff --git a/data/lexicon/index.js b/data/lexicon/index.js new file mode 100644 index 0000000..69291ae --- /dev/null +++ b/data/lexicon/index.js @@ -0,0 +1,150 @@ +//directory of files to pack with `node scripts/pack.js` +//they are stored in compressed form +import lex from './misc.js' + +import demonyms from './nouns/demonyms.js' +import organizations from './nouns/organizations.js' +import possessives from './nouns/possessives.js' +import actors from './nouns/actors.js' +import pronouns from './nouns/pronouns.js' +import singulars from './nouns/singulars.js' +import sportsTeams from './nouns/sportsTeams.js' +import uncountables from './nouns/uncountables.js' +import properNouns from './nouns/properNouns.js' + +import cities from './places/cities.js' +import countries from './places/countries.js' +import femaleNames from './people/femaleNames.js' +import firstnames from './people/firstnames.js' +import lastnames from './people/lastnames.js' +import maleNames from './people/maleNames.js' +import honorifics from './people/honorifics.js' +import people from './people/people.js' +import places from './places/places.js' +import regions from './places/regions.js' + +import dates from './dates/dates.js' +import months from './dates/months.js' +import weekdays from './dates/weekdays.js' +import durations from './dates/durations.js' + +import infinitives from './verbs/infinitives.js' +import modals from './verbs/modals.js' +import phrasals from './verbs/phrasals.js' +import verbs from './verbs/verbs.js' +import participles from './verbs/participles.js' + +import adjectives from './adjectives/adjectives.js' +import comparables from './adjectives/comparables.js' + +import units from './numbers/units.js' +import ordinals from './numbers/ordinals.js' +import cardinals from './numbers/cardinals.js' +import multiples from './numbers/multiples.js' + +import adverbs from './misc/adverbs.js' +import conjunctions from './misc/conjunctions.js' +import currencies from './misc/currencies.js' +import determiners from './misc/determiners.js' +import expressions from './misc/expressions.js' +import prepositions from './misc/prepositions.js' + +import actorVerb from './switches/actor-verb.js' +import adjGerund from './switches/adj-gerund.js' +import adjNoun from './switches/adj-noun.js' +import adjPast from './switches/adj-past.js' +import adjPresent from './switches/adj-present.js' +import nounVerb from './switches/noun-verb.js' +import nounGerund from './switches/noun-gerund.js' +import personNoun from './switches/person-noun.js' +import personDate from './switches/person-date.js' +import personVerb from './switches/person-verb.js' +import personPlace from './switches/person-place.js' +import personAdj from './switches/person-adj.js' +import unitNoun from './switches/unit-noun.js' + +//add-in the generic, flat word-lists +const data = [ + // nouns + [demonyms, 'Demonym'], + [organizations, 'Organization'], + [possessives, 'Possessive'], + [actors, 'Actor'], + [pronouns, 'Pronoun'], + [singulars, 'Singular'], + [sportsTeams, 'SportsTeam'], + [uncountables, 'Uncountable'], + [properNouns, 'ProperNoun'], + + // numbers + [ordinals, 'Ordinal'], + [cardinals, 'Cardinal'], + [units, 'Unit'], + [multiples, 'Multiple'], + + [cities, 'City'], + [countries, 'Country'], + [places, 'Place'], + [regions, 'Region'], + + [weekdays, 'WeekDay'], + [months, 'Month'], + [dates, 'Date'], + [durations, 'Duration'], + + [femaleNames, 'FemaleName'], //5kb + [firstnames, 'FirstName'], + [lastnames, 'LastName'], //3k + [maleNames, 'MaleName'], //5kb + [honorifics, 'Honorific'], + [people, 'Person'], + + [adjectives, 'Adjective'], + [adverbs, 'Adverb'], + [conjunctions, 'Conjunction'], + [currencies, 'Currency'], + [determiners, 'Determiner'], + [expressions, 'Expression'], + [prepositions, 'Preposition'], + [comparables, 'Comparable'], + + [infinitives, 'Infinitive'], //3kb + [modals, 'Modal'], + [verbs, 'Verb'], + [participles, 'Participle'], + [phrasals, 'PhrasalVerb'], //3kb + + // switches - 10kb + [actorVerb, 'Actor|Verb'], + [adjGerund, 'Adj|Gerund'], + [adjNoun, 'Adj|Noun'], + [adjPast, 'Adj|Past'], + [adjPresent, 'Adj|Present'], + [nounVerb, 'Noun|Verb'], + [nounGerund, 'Noun|Gerund'], + [personNoun, 'Person|Noun'], + [personPlace, 'Person|Place'], + [personDate, 'Person|Date'], + [personVerb, 'Person|Verb'], + [personAdj, 'Person|Adj'], + [unitNoun, 'Unit|Noun'], +] +for (let i = 0; i < data.length; i++) { + const list = data[i][0] + for (let o = 0; o < list.length; o++) { + // log duplicates + // if (lex[list[o]]) { + // console.log(list[o] + ' ' + lex[list[o]] + ' ' + data[i][1]) + // } + const str = list[o] + //do some linting + if (str.match(/[.,0-9-]/) || str.trim().toLowerCase() !== str) { + console.log(`'${str}'`) //eslint-disable-line + } + lex[str] = data[i][1] + } +} + +export default lex +// console.log(Object.keys(lex).length); +// console.log(lex[`will want`]) diff --git a/data/lexicon/misc.js b/data/lexicon/misc.js new file mode 100644 index 0000000..7390b4f --- /dev/null +++ b/data/lexicon/misc.js @@ -0,0 +1,86 @@ +export default { + better: 'Comparative', + farther: 'Comparative', + finer: 'Comparative', + fewer: 'Comparative', + earlier: 'Superlative', + sounds: 'PresentTense', + + unless: 'Condition', + lest: 'Condition', + + said: 'PastTense', + had: 'PastTense', + been: 'PastTense', + began: 'PastTense', + came: 'PastTense', + did: 'PastTense', + meant: 'PastTense', + went: 'PastTense', + taken: 'PastTense', + lied: 'PastTense', + + going: 'Gerund', + being: 'Gerund', + according: 'Gerund', + resulting: 'Gerund', + staining: 'Gerund', + doin: 'Gerund', + + no: 'Expression', + non: 'Negative', + never: 'Negative', + not: 'Negative', + + where: 'QuestionWord', + why: 'QuestionWord', + when: 'QuestionWord', + who: 'QuestionWord', + whom: 'QuestionWord', + whose: 'QuestionWord', + what: 'QuestionWord', + which: 'QuestionWord', + "how's": 'QuestionWord', + 'how come': 'QuestionWord', + + 'myself': 'Reflexive', + 'yourself': 'Reflexive', + 'yourselves': 'Reflexive', + 'theirselves': 'Reflexive', + 'himself': 'Reflexive', + 'herself': 'Reflexive', + 'oneself': 'Reflexive', + 'itself': 'Reflexive', + 'ourselves': 'Reflexive', + 'themselves': 'Reflexive', + 'theirself': 'Reflexive', + 'ourself': 'Reflexive', + 'themself': 'Reflexive', + + //misc + records: 'Plural', + feet: 'Plural', + 'a few': 'Value', + 'ones': 'Plural', //those ones + 'dickens': 'Plural', + 'greens': 'Plural', + + + // + 'come here': 'Imperative', + 'beware': 'Imperative', + // 'go away': 'Imperative', + // 'hurry up': 'Imperative', + // 'make sure': 'Imperative', + // 'stand back': 'Imperative' + // 'subpar': 'Adjective' + + // double-conjugations + 'kneeled': 'PastTense', + 'leaped': 'PastTense', + 'msged': 'PastTense', + 'bests': 'PresentTense', + + // funny switches + 'leaves': 'Plural|Verb' +} diff --git a/data/lexicon/misc/adverbs.js b/data/lexicon/misc/adverbs.js new file mode 100644 index 0000000..3a5ec23 --- /dev/null +++ b/data/lexicon/misc/adverbs.js @@ -0,0 +1,97 @@ +// most are generated from adjective list at runtime +export default [ + 'a lot', + 'a posteriori', + 'abroad', + 'ad nauseam', + 'again', + 'all but', + 'all that', + 'almost', + 'already', + 'also', + 'always', + 'anymore', + 'anyway', + 'alongside', + 'apart', + 'aside', + 'as soon', + 'at best', + 'at large', + 'at least', + 'at most', + 'at worst', + 'away', + 'by far', + 'by now', + 'de jure', + 'de trop', + 'definitely', + 'directly', + 'en masse', + // 'enough', + 'ever', + 'for example', + 'for good', + 'for sure', + 'forever', + 'fully', + 'further', + 'furthermore', + 'hence', + 'indeed', + 'instead', + 'just about', + 'just', + 'likewise', + 'kinda', + 'maybe', + 'meanwhile', + 'awhile', + 'more', + 'moreover', + 'newly', + 'no longer', + 'not only', + 'not withstanding', + 'of course', + 'often', + 'once again', + 'once more', + 'once', + 'only', + 'par excellence', + 'per se', + 'perhaps', + 'point blank', + 'quite', + 'randomly', + 'rather', + 'really', + 'so', + 'somehow', + 'sometimes', + 'somewhat', + 'sort of', + 'seldom', + 'such', + 'then', + 'thus', + 'too', + 'totally', + // 'toward', + 'twice', + 'up to', + 'upwards of', + 'tiny bit', + 'very', + 'well', + 'backward', + 'hella', + 'by no means', + 'altogether', + "outright", + 'ultimately', + 'fucking', +] diff --git a/data/lexicon/misc/conjunctions.js b/data/lexicon/misc/conjunctions.js new file mode 100644 index 0000000..14cf269 --- /dev/null +++ b/data/lexicon/misc/conjunctions.js @@ -0,0 +1,75 @@ +export default [ + // 'after', + 'although', + 'and', + 'as', + 'as far as', + 'as if', + // 'as long as', + 'as much as', + 'as soon as', + 'as though', + 'because', + 'before', + 'but', + 'by the time', + 'cuz', + 'even', + 'even if', + 'even though', + 'how', + 'however', + 'if', + 'if only', + 'if then', + 'if when', + 'inasmuch', + 'in as much as', + 'in case', + 'in order that', + 'in order to', + 'just as', + 'no matter', + 'nor', + 'now', + 'now since', + 'now that', + 'now when', + 'or', + 'or not', + 'otherwise', + 'plus', + // 'provided', + 'provided that', + 'since', + // 'so that', + 'supposing', + 'than', + 'therefore', + 'tho', + 'though', + // 'till', + 'to', + // 'unless', + 'until', + 'til', + // 'versus', + // 'what', + // 'when', + 'whenever', + // 'where', + // 'whereas', + 'where if', + 'wherever', + 'whether', + 'while', + 'whilst', + 'whoever', + // 'whose', + // 'why', + 'yet', + 'either', + "whereby", + "cos", + "coz", +] diff --git a/data/lexicon/misc/currencies.js b/data/lexicon/misc/currencies.js new file mode 100644 index 0000000..0387b35 --- /dev/null +++ b/data/lexicon/misc/currencies.js @@ -0,0 +1,88 @@ +export default [ + '¢', + '$', + '£', + '¥', + '฿', + '₡', + '€', + '₭', + '₨', + '﷼', + 'aud', + 'baht', + 'bitcoin', + 'bitcoins', + 'cent', + 'cents', + 'cny', + 'denar', + 'denars', + 'dime', + 'dimes', + 'dinar', + 'dinars', + 'dirham', + 'dirhams', + 'dkk', + 'dobra', + 'dobras', + 'dollar', + 'dollars', + 'eur', + 'euros', + 'forint', + 'forints', + 'franc', + 'francs', + 'gbp', + 'hkd', + 'inr', + 'jpy', + 'kn', + 'kr', + 'ils', + 'krona', + 'kronas', + 'krw', + 'kwanza', + 'kwanzas', + 'kyat', + 'kyats', + 'lempira', + 'lempiras', + 'lira', + 'liras', + 'pence', + 'pences', + 'pennies', + 'peso', + 'pesos', + 'pound sterling', + 'pound sterlings', + 'rouble', + 'roubles', + 'rp', + 'rupee', + 'rupees', + 'shekel', + 'shekels', + 'sheqel', + 'sheqels', + 'shilling', + 'shillings', + 'sterling', + 'sterlings', + 'usd', + 'xaf', + 'xof', + 'yen', + 'yuan', + 'yuans', + 'zł', + 'zloty', + 'zlotys', + 'ден', + 'лв', + 'руб', +] diff --git a/data/lexicon/misc/determiners.js b/data/lexicon/misc/determiners.js new file mode 100644 index 0000000..d0f0fe6 --- /dev/null +++ b/data/lexicon/misc/determiners.js @@ -0,0 +1,35 @@ +export default [ + 'a', + 'an', + 'another', + 'any', + 'both', + 'each', + 'else', + 'every', + 'few', + 'least', + 'much', + 'neither', + 'own', + 'plenty', + 'some', + 'several', + 'that', + 'the', + 'these', + 'this', + 'those', + 'various', + 'whatever', + 'whichever', + 'tha', + //some other languages (what could go wrong?) + // 'la', + 'le', + 'les', + 'des', + 'de', + 'du', + 'el', +] diff --git a/data/lexicon/misc/expressions.js b/data/lexicon/misc/expressions.js new file mode 100644 index 0000000..aa8b3db --- /dev/null +++ b/data/lexicon/misc/expressions.js @@ -0,0 +1,150 @@ +// also called 'interjections' +export default [ + 'a la', + 'ah', + 'aha', + 'ahem', + 'ahoy', + 'alas', + 'amen', + 'argh', + 'bah', + 'bam', + 'boo', + 'booya', + 'bravo', + 'brr', + 'bye', + 'congratulations', + 'cowabunga', + 'dammit', + 'damn', + 'damnit', + 'dang', + 'drat', + 'duh', + 'eek', + 'eep', + 'eh', + 'et cetera', + 'eww', + 'fuck', + 'gah', + 'gee whiz', + 'gee', + 'golly', + 'good grief', + 'goodbye', + 'gosh', + 'great scott', + 'grr', + 'haha', + 'hahaha', + 'hai', + 'hallelujah', + 'hee', + 'hello', + 'hey', + 'hi', + 'hip hip hooray', + 'holy cow', + 'holy moly', + 'holy smokes', + 'holy', + 'hooray', + 'hooyah', + 'huh', + 'humph', + 'hurrah', + 'hurray', + 'huzzah', + 'jeez', + 'lah', + 'lmao', + 'lmfao', + 'lol', + 'lols', + 'meh', + 'mmm', + 'nah', + 'nope', + 'oh', + 'ohh', + 'oi', + 'ooh', + 'ooo', + 'oops', + 'ouch', + 'ow', + 'oy', + 'pff', + 'phew', + 'phooey', + 'please', + 'plz', + 'pow', + 'psst', + 'sheesh', + 'shhh', + 'shit', + 'tsk', + 'tut tut', + 'ugh', + 'uh huh', + 'uh oh', + 'uh', + 'uhh', + 'uhm', + 'voila', + 'wahoo', + 'whee', + 'whew', + 'whoa', + 'whoops', + 'word up', + 'wow', + 'wtaf', + 'wtf', + 'ya', + 'yaa', + // 'yahoo', + 'yay', + 'yeah', + 'yep', + 'yes', + 'yikes', + 'yipee', + 'heck', + 'yippee', + 'yuck', + 'yup', + `d'oh`, + 'shoo', + 'there now', + 'aye', + 'cmon', //come on + 'excuse me', + 'oh well', + 'oh hell', + 'oh my god', + 'oh my gosh', + // 'thank you', + 'whatsoever', + 'btw', + 'nevertheless', + 'pls', + 'ahh', + 'sic', + 'leh', + 'wat', + 'omg', + 'aka', + 'holla', + 'very well', + + 'eureka', + 'farewell', + 'yea', + 'nay', + 'yah', +] diff --git a/data/lexicon/misc/prepositions.js b/data/lexicon/misc/prepositions.js new file mode 100644 index 0000000..c36ade3 --- /dev/null +++ b/data/lexicon/misc/prepositions.js @@ -0,0 +1,72 @@ +export default [ + 'about', + 'across', + 'after', + 'along', + 'amid', + 'amidst', + 'among', + 'amongst', + 'apropos', + 'around', + 'as long as', + 'as', + 'at', + 'atop', + 'barring', + 'besides', + 'between', + 'bout', + 'by', + 'chez', + 'circa', + 'despite', + 'down', + 'during', + 'except', + 'for', + 'from', + 'in', + 'into', + 'mid', + // 'midst', + 'notwithstanding', + 'of', + 'off', + 'on', + 'onto', + 'out', + 'per', + 'qua', + 'sans', + 'since', + 'so that', + 'such as', + 'than', + 'through', + 'throughout', + 'thereby', + 'thru', + 'till', + 'toward', + 'towards', + 'unlike', + 'until', + 'up', + 'upon', + 'versus', + 'via', + 'vis a vis', + 'w/o', + 'whereas', + 'with', + 'with whom', + 'within', + 'without', + 'as a whole', + 'in part', + 'in effect', + // `'o`, + // `a'`, + // `o'`, +] diff --git a/data/lexicon/nouns/actors.js b/data/lexicon/nouns/actors.js new file mode 100644 index 0000000..3267128 --- /dev/null +++ b/data/lexicon/nouns/actors.js @@ -0,0 +1,551 @@ +//professions 'lawyer' that aren't covered by verb.to_actor() + +export default [ + 'accountant', + 'acquaintance', + 'acrobat', + 'activist', + 'actor', + 'actress', + 'administrator', + 'admiral', + 'adolescent', + 'adopted', + 'adult', + 'adventurer', + 'advisor', + 'agent', + 'alien', + 'ally', + 'analyst', + 'anarchist', + 'ancestor', + 'animator', + 'announcer', + 'anybody', + 'apostle', + 'apparition', + 'apprentice', + 'archbishop', + 'aristocrat', + 'artisan', + 'artist', + 'assistant', + 'astronaut', + 'astronomer', + 'athiest', + 'athlete', + 'attendant', + 'attorney', + 'aunt', + 'auntie', + 'author', + 'autocrat', + 'ayatullah', + 'baby', + 'baker', + 'banker', + 'barber', + 'baron', + 'baroness', + 'bartender', + 'beatboxer', + 'beings', + 'creator', + 'bicyclist', + 'bishop', + 'blogger', + 'bohemian', + 'boogeyman', + 'boss', + 'boy', + 'boyfriend', + 'bricklayer', + 'bride', + 'brigadier', + 'bro', + 'broker', + 'brother', + 'buddhist', + 'buddy', + 'builder', + 'burglar', + 'businessman', + 'businessperson', + 'businesswoman', + 'butcher', + 'cadet', + 'captain', + 'carer', + 'caretaker', + 'carpenter', + 'cashier', + 'celebrity', + 'ceo', + 'cfo', + 'chairman', + 'chairwoman', + 'champion', + 'chancellor', + 'chaplain', + 'character', + 'cheerleader', + 'chef', + 'chief', + 'child', + 'chum', + 'citizen', + 'citizens', + 'cleaner', + 'cleric', + 'clerk', + 'client', + 'clown', + 'coworker', + 'colleague', + 'colonel', + 'columnist', + 'comedian', + 'commander', + 'commenter', + 'commissioner', + 'companion', + 'composer', + 'comrade', + 'confidant', + 'confidante', + 'congressman', + 'congresswoman', + 'constable', + 'consultant', + 'contact', + 'contender', + 'contributor', + 'controller', + 'cook', + 'coordinator', + 'corporal', + 'councillor', + 'count', + 'countess', + 'courier', + 'cousin', + 'cowboy', + 'critic', + 'crowd', + 'curator', + 'customer representative', + 'customer', + 'dad', + 'daddy', + 'dancer', + 'daredevil', + 'darling', + 'daughter', + 'deacon', + 'dealer', + 'decorator', + 'defenceman', + 'deity', + 'denizen', + 'deputee', + 'deputy', + 'descendant', + 'deserter', + 'designer', + 'detective', + 'developer', + 'dictator', + 'dietician', + 'dietitian', + 'diplomat', + 'director', + 'diva', + 'doctor', + 'dork', + 'drifter', + 'driver', + 'dude', + 'dutchess', + 'dweller', + 'economist', + 'editor', + 'elder', + 'electrician', + 'emcee', + 'emperor', + 'employee', + 'employer', + 'enemy', + 'engineer', + 'entrepreneur', + 'environmentalist', + 'everybody', + 'examiner', + 'excellency', + 'exile', + 'family', + 'farmer', + 'father', + 'fella', + 'fellow', + 'female', + 'fiance', + 'fighter', + 'filmmaker', + 'financier', + 'fire marshal', + 'firefighter', + 'fireman', + 'first lady', + 'fitter', + 'foe', + 'forebear', + 'foreman', + 'forerunner', + 'forester', + 'foster parent', + 'freelancer', + 'friend', + 'gal', + 'gambler', + 'gardener', + 'geek', + 'geisha', + 'genius', + 'gentleman', + 'ghost', + 'ghostwriter', + 'girl', + 'girlfriend', + 'gladiator', + 'goalie', + 'goalkeeper', + 'goaltender', + 'god', + 'goddess', + 'golfer', + 'grandchild', + 'granddaughter', + 'grandfather', + 'grandma', + 'grandmother', + 'grandpa', + 'grandparent', + 'grandson', + 'groom', + 'guard', + 'guest', + 'guru', + 'hairdresser', + 'hairstylist', + 'heir', + 'hermit', + 'hero', + 'heroine', + 'historian', + 'hobo', + 'host', + 'hostage', + 'hostess', + 'housekeeper', + 'human', + 'humanitarian', + 'hunter', + 'husband', + 'hygienist', + 'icon', + 'idol', + 'illustrator', + 'immigrant', + 'in law', + 'incel', + 'individual', + 'infant', + 'inhabitant', + 'innovator', + 'inspector', + 'installer', + 'instigator', + 'instructor', + 'intern', + 'inventor', + 'investigator', + 'jester', + 'jogger', + 'journalist', + 'judge', + 'juggler', + 'kid', + 'kin', + 'king', + 'kinsman', + 'kinswoman', + 'laborer', + 'lad', + 'lady', + 'landlord', + 'lass', + 'laureate', + 'lawyer', + 'layman', + 'leader', + 'lieutenant', + 'lord', + 'loser', + 'lover', + 'magician', + 'magistrate', + 'magnate', + 'maker', + 'male', + 'man', + 'manager', + 'maniac', + 'martyr', + 'mason', + 'master', + 'mate', + 'matriarch', + 'mayor', + 'mechanic', + 'mentor', + 'merchant', + 'minion', + 'minister', + 'misfit', + 'missus', + 'mister', + 'model', + 'moderator', + 'mogul', + 'mom', + 'mommy', + 'monarch', + 'monk', + 'mother', + 'mum', + 'mummy', + 'musician', + 'mystic', + 'nanny', + 'narrator', + 'native', + 'neice', + 'neighbor', + 'nemesis', + 'nephew', + 'nerd', + 'niece', + 'nobleman', + 'noblewoman', + 'nobody', + 'nomad', + 'novice', + 'nun', + 'nurse', + 'nurseryman', + 'occupant', + 'officer', + 'offspring', + 'operator', + 'optimist', + 'optometrist', + 'oracle', + 'organizer', + 'originator', + 'orphan', + 'outcast', + 'outlaw', + 'painter', + 'pal', + 'panellist', + 'parent', + 'parental', + 'pariah', + 'partner', + 'pastor', + 'patriarch', + 'patriot', + 'patron', + 'pawn', + 'peer', + 'performer', + 'person', + 'pessimist', + 'phantom', + 'pharmacist', + 'philosopher', + 'photographer', + 'phrase', + 'physician', + 'pilgrim', + 'pilot', + 'pioneer', + 'planner', + 'player', + 'playmate', + 'playwright', + 'plumber', + 'podcaster', + 'poet', + 'policeman', + 'political scientist', + 'politician', + 'population', + 'pornstar', + 'practitioner', + 'prankster', + 'preacher', + 'president', + 'priest', + 'priestess', + 'prime minister', + 'prince', + 'princess', + 'prisoner', + 'prodigy', + 'producer', + 'professor', + 'progenitor', + 'progeny', + 'programmer', + 'prophet', + 'prospector', + 'prostitute', + 'psychologist', + 'punk', + 'pupil', + 'quarterback', + 'queen', + 'rabbi', + 'radical', + 'rapper', + 'realist', + 'receptionist', + 'recluse', + 'recruiter', + 'refugee', + 'relative', + 'reporter', + 'researcher', + 'reverend', + 'revolutionary', + 'rival', + 'rogue', + 'role model', + 'roofer', + 'ruler', + 'runner up', + 'runningback', + 'sailor', + 'saint', + 'scholar', + 'scientist', + 'scion', + 'scout', + 'screenwriter', + 'sculptor', + 'secretary', + 'senior citizen', + 'sergeant', + 'servant', + 'servitor', + 'shaman', + 'shepherd', + 'showgirl', + 'showman', + 'showrunner', + 'sibling', + 'singer', + 'sinner', + 'sissy', + 'sister', + 'skier', + 'smuggler', + 'soldier', + 'soloist', + 'somebody', + 'someone', + 'son', + 'sorcerer', + 'sorceress', + 'soul', + 'sovereign', + 'specialist', + 'spectator', + 'spirit', + 'spokesperson', + 'spouse', + 'squatter', + 'staffer', + 'star', + 'statesman', + 'stepbrother', + 'stepchild', + 'stepfather', + 'stepmother', + 'stepsister', + 'stranger', + 'streamer', + 'student', + 'sultan', + 'superhero', + 'superhuman', + 'superintendent', + 'superstar', + 'supervisor', + 'surfer', + 'surgeon', + 'survivor', + 'sweeper', + 'sweetheart', + 'taoiseach', + 'teacher', + 'technician', + 'technologist', + 'teen', + 'teenager', + 'tenant', + 'tester', + 'therapist', + 'tiktoker', + 'toddler', + 'tourist', + 'trader', + 'tramp', + 'transcriptionist', + 'traveler', + 'trendsetter', + 'trooper', + 'tutor', + 'tycoon', + 'uncle', + 'underwriter', + 'user', + 'vagabond', + 'veteran', + 'veterinarian', + 'villain', + 'vip', + 'visionary', + 'visitor', + 'voyager', + 'wage earner', + 'waiter', + 'wanderer', + 'warrior', + 'weatherman', + 'welder', + 'wife', + 'winner', + 'witch', + 'wizard', + 'woman', + 'worker', + 'wrestler', + 'writer', + 'yogi', + 'youth', + 'youtuber', +] diff --git a/data/lexicon/nouns/demonyms.js b/data/lexicon/nouns/demonyms.js new file mode 100644 index 0000000..7cf9c71 --- /dev/null +++ b/data/lexicon/nouns/demonyms.js @@ -0,0 +1,131 @@ +//adjectival forms of place names, as adjectives. +export default [ + 'afghan', + 'african', + 'albanian', + 'algerian', + 'american', + 'angolan', + 'argentine', + 'armenian', + 'asian', + 'aussie', + 'australian', + 'austrian', + 'bangladeshi', + 'belarusian', + 'belgian', + 'bolivian', + 'bosnian', + 'brazilian', + 'brit', + 'bulgarian', + 'californian', + 'cambodian', + 'cameroonian', + 'canadian', + 'chadian', + 'chilean', + 'chinese', + 'colombian', + 'congolese', + 'croat', + 'croatian', + 'cuban', + 'czech', + 'dane', + 'dominican', + 'dutch', + 'ecuadorian', + 'egyptian', + 'emirati', + 'englishman', + 'estonian', + 'ethiopian', + 'european', + 'filipino', + 'french', + 'gambian', + 'georgian', + 'german', + 'ghanaian', + 'greek', + 'guatemalan', + 'haitian', + 'hindi', + 'honduran', + 'hungarian', + 'icelandic', + 'indian', + 'indonesian', + 'iranian', + 'iraqi', + 'irishman', + 'israeli', + 'italian', + 'ivorian', // of Ivory Coast + 'jamaican', + 'japanese', + 'jordanian', + 'kazakh', + 'kenyan', + 'korean', + 'kuwaiti', + 'lao', // of Laos + 'latvian', + 'lebanese', + 'liberian', + 'libyan', + 'lithuanian', + 'macedonian', + 'malagasy', // of Madagascar + 'malaysian', + 'mexican', + 'mongolian', + 'moroccan', + 'namibian', + 'nicaraguan', + 'nigerian', // of Nigeria + 'nigerien', // of Niger + 'norwegian', + 'omani', + 'pakistani', + 'palestinian', + 'panamanian', + 'paraguayan', + 'peruvian', + 'philippine', + 'portuguese', + 'puerto rican', + 'qatari', + 'romanian', + 'russian', + 'rwandan', + 'samoan', + 'saudi', + 'scottish', + 'senegalese', + 'serbian', + 'singaporean', + 'slovak', + 'somalian', + 'spaniard', + 'sudanese', + 'swede', + 'swiss', + 'syrian', + 'taiwanese', + 'thai', + 'texan', + 'trinidadian', + 'tunisian', + 'turkmen', + 'ugandan', + 'ukrainian', + 'venezuelan', + 'vietnamese', + 'welsh', + 'zambian', + 'zimbabwean', + // 'pole', +] diff --git a/data/lexicon/nouns/organizations.js b/data/lexicon/nouns/organizations.js new file mode 100644 index 0000000..8c18ef1 --- /dev/null +++ b/data/lexicon/nouns/organizations.js @@ -0,0 +1,353 @@ +//just a few named-organizations +//no acronyms needed. no product/brand pollution. +export default [ + // 'abc', + 'academy of sciences', + 'acer', + 'activision blizzard', + 'activision', + 'adidas', + 'aig', + 'airbnb', + 'al jazeera', + 'al qaeda', + 'alcatel lucent', + 'alcatel', + 'altair', + 'amc', + 'amd', + 'american express', + 'amt', + 'amtrak', + 'anheuser busch', + 'aol', + 'apple computers', + 'argos', + 'armco', + 'ashland oil', + 'associated press', + 'autodesk', + 'avis', + 'avon', + 'ayer', + 'baidu', + 'banana republic', + 'basf', + 'baskin robbins', + 'baxter', + 'bayer', + 'bbc', + 'bechtel', + 'berkshire hathaway', + 'bf goodrich', + 'bfgoodrich', + 'blockbuster video', + 'bloomingdale', + 'blue cross', + 'bmw', + 'bni', + 'boeing', + 'bombardier', + 'boston globe', + 'boston pizza', + 'bp', + 'cadbury', + 'capital one', + 'cbc', + 'chevron', + 'chevy', + 'chick fil a', + 'china daily', + 'cia', + 'cisco systems', + 'cisco', + 'citigroup', + 'cloudflare', + 'cnn', + 'coca cola', + 'coinbase', + 'colgate', + 'comcast', + 'compaq', + 'coors', + 'costco', + 'craigslist', + 'crossrail', + 'daimler', + 'dea', + 'dell', + 'der spiegel', + 'disney', + 'doj', + 'dow jones', + 'dunkin donuts', + 'dupont', + 'ebay', + 'esa', + 'eu', + 'exxon mobil', + 'exxonmobil', + 'facebook', + 'fannie mae', + 'fbi', + 'fda', + 'fedex', + 'fiat', + 'financial times', + 'firestone', + 'ford', + 'foxcon', + 'frito lay', + 'general electric', + 'general motors', + 'ghq', + 'github', + 'glaxo smith kline', + 'glencore', + 'gmb', + 'goldman sachs', + 'goodyear', + 'google', + 'gucci', + 'hasbro', + 'hewlett packard', + 'hitachi', + 'hizbollah', + 'home depot', + 'honda', + 'hsbc', + 'hyundai', + 'ibm', + 'ihop', + 'ing', + 'intel', + 'interpol', + 'itv', + 'jiffy lube', + 'jpmorgan chase', + 'jpmorgan', + 'jsa', + 'katv', + 'kfc', + 'kkk', + 'kmart', + 'kodak', + 'la presse', + 'la z boy', + 'labour party', + 'lenovo', + 'lexis', + 'lexmark', + 'lg', + 'little caesars', + 'mattel', + 'mazda', + 'mcdonalds', + 'medicaid', + 'medicare', + 'mercedes benz', + 'microsoft', + 'mitas', + 'mitsubishi', + 'mlb', + 'mobil', + 'monsanto', + 'motorola', + 'mtv', + 'myspace', + 'nandos', + 'nasa', + 'nascar', + 'nasdaq', + 'national academy of sciences', + 'nato', + 'natwest', + 'nba', + 'nbc', + 'nec', + 'nestle', + 'netflix', + 'new york times', + 'newsweek', + 'nfl', + 'nhl', + 'nhs', + 'nike', + 'nintendo', + 'nissan', + 'nokia', + 'notre dame', + 'novartis', + 'nsa', + 'nvidia', + 'nwa', + 'old navy', + 'opec', + 'orange julius', + 'oxfam', + 'palantir', + 'pan am', + 'panasonic', + 'panda express', + 'paypal', + 'pbs', + 'pepsico', + 'petrobras', + 'petrochina', + 'petronas', + 'peugeot', + 'pfizer', + 'philip morris', + 'pizza hut', + 'premier oil', + 'prudential', + 'quantas', + 'rbc', + 'rbs', + 'readers digest', + 'red bull', + 'red cross', + 'red lobster', + 'remax', + 'revlon', + 'royal bank', + 'royal dutch shell', + 'ryanair', + 'safeway', + 'salesforce', + 'samsung', + 'seagate', + 'sears', + 'siemens', + 'snp', + 'sony', + 'squarespace', + 'starbucks', + 'statoil', + 'subaru', + 't mobile', + 'taco bell', + 'td bank', + 'telefonica', + 'telus', + 'tencent', + 'tesco', + 'tesla motors', + 'texas instruments', + 'tgi fridays', + 'the daily mail', + 'tim hortons', + 'tmz', + 'toshiba', + 'toyota', + 'toys r us', + 'twitter', + 'uber', + 'ubs', + 'ukip', + 'unesco', + 'unilever', + 'united nations', + 'ups', + 'usa today', + 'usps', + 'verizon', + 'visa', + 'vodafone', + 'volkswagen', + 'volvo', + 'walgreens', + 'wall street journal', + 'walmart', + 'warner bros', + 'wells fargo', + 'westfield', + 'westinghouse', + 'world trade organization', + 'xiaomi', + 'yahoo!', + 'yamaha', + 'ymca', + 'yougov', + 'youtube', + 'ywca', + // 'mercedes', + + `applebees`, + `applebees`, + `arbys`, + `carls jr`, + `le oreal`, //l'oreal + `macs milk`, + `mcdonalds`, + `quiznos`, + `sainsburys`, + + //some bands + 'abba', + 'ac/dc', + 'aerosmith', + 'bee gees', + 'coldplay', + 'creedence clearwater revival', + 'def leppard', + 'depeche mode', + 'duran duran', + 'fleetwood mac', + 'green day', + 'guns n roses', + 'joy division', + 'metallica', + 'moody blues', + 'motley crue', + 'new kids on the block', + 'pink floyd', + // 'r.e.m.', + 'radiohead', + 'red hot chili peppers', + 'sex pistols', + 'soundgarden', + 'spice girls', + 'the beach boys', + 'the beatles', + 'the black eyed peas', + 'the byrds', + 'the carpenters', + 'the guess who', + 'the hollies', + // 'the rolling stones', + 'the smashing pumpkins', + 'the supremes', + 'the who', + 'thin lizzy', + // 'u2', + 'van halen', + `destiny's child`, + + // other groups + 'eurosceptics', + 'brexiteers', + + 'audi', + 'bacardi', + 'cadillac', + 'coco chanel', + 'fc barcelona', + 'fifa', + 'halliburton', + 'ikea', + 'klm', + 'lexus', + // 'mcgill university', + 'michelin', + 'nivea', + 'pepsi', + 'philips', + 'premier league', + 'real madrid', + 'roman empire', + 'scientology', + 'smirnoff', + 'wikileaks', + 'wikipedia', +] diff --git a/data/lexicon/nouns/possessives.js b/data/lexicon/nouns/possessives.js new file mode 100644 index 0000000..531ed98 --- /dev/null +++ b/data/lexicon/nouns/possessives.js @@ -0,0 +1,18 @@ +export default [ + // 'her', //this one is check ambiguous + // 'hers', + // 'his', + 'its', + 'mine', + 'my', + // 'none', + 'our', + 'ours', + 'thy', + // 'their', + // 'theirs', + // 'your', + // 'yours', + + +] diff --git a/data/lexicon/nouns/pronouns.js b/data/lexicon/nouns/pronouns.js new file mode 100644 index 0000000..7f267c3 --- /dev/null +++ b/data/lexicon/nouns/pronouns.js @@ -0,0 +1,18 @@ +export default [ + 'it', + 'they', + 'i', + 'them', + 'you', + 'she', + 'me', + 'he', + 'him', + 'us', + 'we', + 'thou', + 'thee', + 'il', + 'elle', + // `'em`, +] diff --git a/data/lexicon/nouns/properNouns.js b/data/lexicon/nouns/properNouns.js new file mode 100644 index 0000000..983d968 --- /dev/null +++ b/data/lexicon/nouns/properNouns.js @@ -0,0 +1,44 @@ +// properNouns +export default [ + 'mercedes', + 'barbie', + 'catalina', + 'christi', + 'diego', + 'elmo', + 'franco', + 'kirby', + 'mickey', + 'finn', + 'missy', + 'florence', + 'stevens', + 'abid', + 'mcgill', + 'hudson', + 'chesley', + 'carling', + 'berkeley', + 'beeton', + 'carleton', + 'ajax', + 'weston', + 'sherwood', + 'wembley', + 'hinton', + 'bentley', + 'landsdowne', + 'brock', + 'dalhousie', + 'spalding', + 'charlton', + 'rothwell', + 'gosford', + 'frampton', + 'fairview', + // currencies + 'nis', + 'riel', + 'euro', + 'iron maiden', +] diff --git a/data/lexicon/nouns/relative-prounoun.js b/data/lexicon/nouns/relative-prounoun.js new file mode 100644 index 0000000..1acbfad --- /dev/null +++ b/data/lexicon/nouns/relative-prounoun.js @@ -0,0 +1,17 @@ +export default [ + 'whatever', + 'whatsoever', + 'whichever', + 'whichsoever', + 'whoever', + 'whom', + 'whomever', + 'whomsoever', + 'whose', + 'whosesoever', + 'whosoever', + // 'that', + // 'when', + // 'which', + // 'who', +] diff --git a/data/lexicon/nouns/singulars.js b/data/lexicon/nouns/singulars.js new file mode 100644 index 0000000..4b66017 --- /dev/null +++ b/data/lexicon/nouns/singulars.js @@ -0,0 +1,435 @@ +//most nouns do not nead to be listed +// for whatever reasons, these look like not-nouns +// they are all inflected to add their plural form + +export default [ + // -ic + 'medic', + 'ethic', + 'republic', + 'colic', + 'garlic', + 'picnic', + 'tunic', + 'topic', + 'fabric', + 'rhetoric', + 'tic', + 'tactic', + 'characteristic', + 'statistic', + + // -ed + 'seabed', + 'waterbed', + 'riverbed', + 'hotbed', + 'moped', + + 'eyelid', + 'pyramid', + 'lipid', + 'grid', + 'dividend', + 'stipend', + 'way around', + 'credit card', + 'security guard', + 'tribe', + 'downside', + 'upside', + 'voltage', + 'advantage', + 'percentage', + 'shortage', + 'cottage', + 'whale', + + // -ble + 'syllable', + 'vegetable', + 'timetable', + 'turntable', + 'crucible', + 'mandible', + + 'example', + 'home', + 'someone', + 'headphone', + 'press release', + 'premise', + 'highrise', + 'sunrise', + 'purpose', + + // -ate + 'rebate', + 'certificate', + 'frigate', + 'surrogate', + 'opiate', + 'chocolate', + 'plate', + 'template', + 'consulate', + 'pate', + 'default rate', + 'vertebrate', + 'invertebrate', + 'carbohydrate', + 'electorate', + 'doctorate', + 'nitrate', + 'substrate', + 'acetate', + 'us state', + 'estate', + 'prostate', + + 'plebiscite', + 'luddite', + 'urbanite', + 'respite', + 'rite', + 'site', + 'appetite', + 'anecdote', + 'antidote', + 'keynote', + 'coyote', + 'flute', + 'plaque', + 'cheque', + 'communique', + 'torque', + 'mosque', + + // -ive + 'prerogative', + 'objective', + 'disincentive', + 'motive', + 'haze', + 'egg', + 'pig', + + // -ing + 'pudding', + 'thing', + 'nothing', + 'banking', + 'ceiling', + 'evening', + 'morning', + 'sibling', + 'inning', + + 'lunch', + 'breakthrough', + 'trough', + 'blemish', + 'skirmish', + 'garnish', + 'varnish', + 'death', + 'question mark', + + // -al + 'accrual', + 'acquittal', + 'burial', + 'capital', + 'cathedral', + 'cereal', + 'corral', + 'decal', + 'deferral', + 'denial', + 'funeral', + 'hospital', + 'mammal', + 'material', + 'metal', + 'mineral', + 'mural', + 'ordeal', + 'pedestal', + 'petal', + 'portal', + 'rebuttal', + 'recital', + 'referral', + 'subtotal', + 'tutorial', + 'urinal', + + 'record label', + 'skill', + 'high school', + 'christmas carol', + 'handful', + 'bowl', + 'super bowl', + 'team', + 'grand slam', + 'problem', + 'ad hominem', + 'system', + 'room', + 'chrysanthemum', + 'bean', + 'ocean', + 'student loan', + 'skeleten', + 'kitten', + 'heaven', + 'raven', + 'oven', + 'cousin', + 'gelatin', + 'tax return', + 'home run', + 'cellar', + 'us dollar', + 'exemplar', + 'civil war', + + // -er + 'number', + 'wafer', + 'glacier', + 'grenadier', + 'cahier', + 'chandelier', + 'pier', + 'copier', + 'photocopier', + 'occupier', + 'drier', + 'tier', + 'barrier', + 'carrier', + 'dossier', + 'frontier', + 'metier', + 'reformer', + 'dinner', + + 'door', + 'indices', + 'others', + 'caucus', + 'dialect', + 'aspect', + 'prospect', + 'insect', + 'intellect', + 'verdict', + 'district', + 'free market', + 'human right', + + // -ent + 'scent', + 'ascent', + 'incident', + 'rodent', + 'student', + 'coefficient', + 'client', + 'quotient', + 'talent', + 'referent', + 'deterrent', + 'discontent', + 'extent', + 'event', + + 'head start', + 'breakfast', + + // -ist + 'waist', + + 'bout', + 'overview', + 'tv show', + 't rex', + 'array', + 'way', + 'tragedy', + 'body', + 'doggy', + 'effigy', + 'clergy', + 'allergy', + 'energy', + 'synergy', + + // -ly + 'anomaly', + 'gadfly', + 'firefly', + 'dragonfly', + 'butterfly', + 'mayfly', + 'family', + 'doily', + 'ally', + 'belly', + 'jelly', + 'folly', + 'gully', + 'monopoly', + 'panoply', + + 'tummy', + 'economy', + 'fanny', + 'bunny', + 'puppy', + + // -ry + 'salary', + 'burglary', + 'vocabulary', + 'canary', + 'granary', + 'military', + 'dignitary', + 'documentary', + 'notary', + + 'city', + 'guy', + 'school', + 'bar', + 'prediction', + 'pie', + 'rerun', + 'menu', + + 'owner', + 'coke', + 'conservatory', + 'caterpillar', + 'collar', + 'fetish', + + 'attic', + 'borough', + 'adjective', + 'initiative', + 'narrative', + 'perspective', + 'incentive', + 'parish', + 'tv', + + 'stone', + 'tributary', + 'flower', + 'sandwich', + 'x ray', + 'dump truck', + 'soft serve', + 'car', + 'strategy', + 'piggy', + 'thingy', + 'peanut', + 'accident', + 'journal', + 'tribunal', + 'ritual', + 'decimal', + 'pedal', + 'canal', + + 'alien', + 'chicken', + 'haven', + 'mitten', + 'pathogen', + 'sapien', + + 'autopsy', + 'embassy', + 'pussy', + 'spin off', + 'lay up', + 'leg up', + 'poppy', + 'epidemic', + 'row', + 'drive thru', + 'hash brown', + // 'living room', + 'seminar', + 'variety', + 'laboratory', + 'programme', + 'legend', + 'fiend', + 'cloth', + 'institute', + 'tonite', + 'paradise', + 'enterprise', + 'lime', + 'magnate', + 'hormone', + 'outspoken', + 'medal', + 'recipient', + 'heist', + 'signatory', + 'narcotic', + 'threesome', + 'foursome', + 'biopic', + 'arsenal', + 'oatmeal', + 'sabbatical', + 'missive', + 'hussy', + 'cane', + 'overtime', + 'preposition', + 'disposition', + 'stake', + 'nite', + 'prop', + 'sect', + 'mischief', + 'marsupial', + 'statute', + 'mic', + 'clinic', + 'mould', + 'peyote', + 'gypsy', + 'granny', + 'vet', + 'suite', + 'uncoordinated', + 'latch', + 'deathbed', + 'tunnel', + 'intern', + 'tribute', + 'intent', + 'undertone', + 'underestimate', + 'underwear', + 'word', + 'overview', + 'yo yo', + 'phone call', + 'brick', + 'cannibal', + 'video game', + 'layer', + 'canton', +] diff --git a/data/lexicon/nouns/sportsTeams.js b/data/lexicon/nouns/sportsTeams.js new file mode 100644 index 0000000..e3bbc2e --- /dev/null +++ b/data/lexicon/nouns/sportsTeams.js @@ -0,0 +1,145 @@ +export default [ + //mlb + 'arizona diamondbacks', + 'atlanta braves', + 'baltimore orioles', + 'boston red sox', + 'chicago cubs', + 'chicago white sox', + 'cincinnati reds', + 'cleveland indians', + 'cleveland guardians', + 'colorado rockies', + 'detroit tigers', + 'houston astros', + 'miami marlins', + 'milwaukee brewers', + 'minnesota twins', + 'oakland athletics', + 'philadelphia phillies', + 'pittsburgh pirates', + 'seattle mariners', + 'texas rangers', + 'toronto blue jays', + 'washington nationals', + 'tampa bay rays', + 'new york mets', + 'new york yankees', + 'san diego padres', + 'kansas city royals', + 'los angeles dodgers', + 'san francisco giants', + 'st louis cardinals', + 'diamondbacks', + 'white sox', + 'astros', + 'dodgers', + 'mets', + 'yankees', + 'phillies', + 'padres', + + //nba + 'boston celtics', + 'brooklyn nets', + 'new york knicks', + 'toronto raptors', + 'chicago bulls', + 'cleveland cavaliers', + 'detroit pistons', + 'indiana pacers', + 'milwaukee bucks', + 'atlanta hawks', + 'charlotte hornets', + 'miami heat', + 'orlando magic', + 'washington wizards', + 'dallas mavericks', + 'houston rockets', + 'memphis grizzlies', + 'denver nuggets', + 'utah jazz', + 'minnesota timberwolves', + 'new orleans pelicans', + 'san antonio spurs', + 'portland trail blazers', + 'oklahoma city thunder', + 'golden state warriors', + 'los angeles clippers', + 'los angeles lakers', + 'phoenix suns', + 'sacramento kings', + 'knicks', + 'lakers', + 'celtics', + // 'philadelphia 76ers', + + //nfl + 'arizona cardinals', + 'atlanta falcons', + 'baltimore ravens', + 'buffalo bills', + 'carolina panthers', + 'chicago bears', + 'cincinnati bengals', + 'cleveland browns', + 'dallas cowboys', + 'denver broncos', + 'detroit lions', + 'green bay packers', + 'houston texans', + 'indianapolis colts', + 'jacksonville jaguars', + 'kansas city chiefs', + 'miami dolphins', + 'minnesota vikings', + 'new england patriots', + 'new orleans saints', + 'new york giants', + 'new york jets', + 'oakland raiders', + 'philadelphia eagles', + 'pittsburgh steelers', + 'san diego chargers', + // 'san francisco 49ers', + 'seattle seahawks', + 'st louis rams', + 'tampa bay buccaneers', + 'tennessee titans', + 'washington redskins', + + //mls + 'chicago fire', + 'colorado rapids', + 'columbus crew sc', + 'fc dallas', + 'houston dynamo', + 'la galaxy', + 'montreal impact', + 'new england revolution', + 'new york red bulls', + 'philadelphia union', + 'portland timbers', + 'real salt lake', + 'san jose earthquakes', + 'seattle sounders', + 'sporting kansas city', + 'vancouver whitecaps', + // 'new york city fc', + // 'atlanta united', + // 'dc united', + // 'minnesota united', + //premier league soccer (mostly city+fc) + 'aston villa', + 'blackburn rovers', + 'cardiff city', + 'leicester city', + 'manchester city', + 'queens park rangers', + 'stoke city', + 'tottenham hotspur', + // 'sheffield united', + // 'manchester united', + // 'newcastle united', + // 'west ham united', +] diff --git a/data/lexicon/nouns/uncountables.js b/data/lexicon/nouns/uncountables.js new file mode 100644 index 0000000..b56586a --- /dev/null +++ b/data/lexicon/nouns/uncountables.js @@ -0,0 +1,292 @@ +//common nouns that have no plural form. These are suprisingly rare +//used in noun.inflect(), and added as nouns in lexicon +export default [ + + 'acid', + 'acoustics', + 'advice', + 'aerobics', + 'aerodynamics', + 'aeronautics', + 'aircraft', + 'amends', + 'amnesty', + 'anger', + 'anise', + 'anyone', + 'anything', + 'appeal court', + 'arithmetic', + 'arsenic', + 'aspirin', + 'athletics', + 'baggage', + 'bass', + 'billiards', + 'bison', + 'blood', + 'bowling', + 'bread', + 'breadth', + 'bunting', + 'butter', + 'cad', + 'cards', + 'celcius', + 'chaos', + 'cheese', + 'chewing', + 'civics', + 'classics', + 'clothes', + 'coal', + 'cold war', + 'commentary', + 'confusion', + 'cont ed', + 'coral', + 'cotton', + 'couscous', + 'currency', + 'debut', + 'demise', + 'diabetes', + 'dice', + 'dishonesty', + 'disrepute', + 'dope', + 'downstairs', + 'draughts', + 'dynasty', + 'earnings', + 'economics', + 'education', + 'electricity', + 'electronics', + 'enjoyment', + 'entertainment', + 'equipment', + 'ethics', + 'everybody', + 'everyone', + 'everything', + 'existence', + 'expertise', + 'fahrenheit', + 'fate', + 'feeling', + 'fiction', + 'fish', + 'flour', + 'food', + 'forgiveness', + 'fourier', + 'fowl', + 'furniture', + 'gene editing', + 'gene pool', + 'genetics', + 'gluten', + 'glycerin', + 'golf', + 'gore', + 'granite', + 'grass', + 'greed', + 'gum', + 'gymnastics', + 'hair', + 'halibut', + 'happiness', + 'hashish', + 'haste', + 'headquarters', + 'here', + 'hertz', + 'history', + 'hockey', + 'homework', + 'honesty', + 'honey', + 'hooky', + 'horseradish', + 'hospitality', + 'house arrest', + 'hunger', + 'ice', + 'ignorance', + 'impatience', + 'importance', + 'improv', + 'information', + 'internet', + 'interstate', + 'jazz', + 'jeans', + 'jellyfish', + 'jewelry', + 'karate', + 'kindergarten', + 'knickers', + 'knowledge', + 'laughter', + 'leather', + 'leisure', + 'less', + 'lice', + 'lightning', + 'linguistics', + 'literature', + 'liver', + 'logic', + 'logistics', + 'luck', + 'luggage', + 'machine learning', + 'machinery', + 'majesty', + 'make up', + 'mathematics', + 'measles', + 'meat', + 'mechanics', + 'merchandise', + 'metallurgy', + 'money', + 'monogamy', + 'moose', + 'mumps', + 'music', + 'nail polish', + 'national security', + 'news', + 'nowadays', + 'obstetrics', + 'overcrowding', + 'oxygen', + 'panties', + 'pants', + 'parking', + 'patience', + 'peace', + 'petrol', + 'phys ed', + 'physics', + 'plastic', + 'politics', + 'pollen', + 'polygamy', + 'pork', + 'preamble', + 'premises', + 'presense', + 'pressure', + 'pretense', + 'putty', + 'rabies', + 'recognition', + 'recreation', + 'reins', + 'relaxation', + 'research', + 'rice', + 'rickets', + 'sadness', + 'safety', + 'salmon', + 'salt', + 'sand', + 'satish', + 'scenery', + 'scissors', + 'seating', + 'self', + 'senate', + 'series', + 'sheep', + 'shingles', + 'shopping', + 'shorts', + 'silk', + 'silver', + 'skin', + 'skittles', + 'soap', + 'soccer', + 'something', + 'spacecraft', + 'species', + 'spite', + 'static', + 'statistics', + 'steam', + 'steel', + 'sugar', + 'sunshine', + 'sushi', + 'sweepstakes', + 'tea', + 'tennis', + 'there', + 'thermodynamics', + 'thunder', + 'time off', + 'tin', + 'tonight', + 'toothpaste', + 'townfolk', + 'townsfolk', + 'traffic', + 'treatise', + 'troops', + 'trouble', + 'troubleshooting', + 'trousers', + 'trout', + 'true north', + 'tuna', + 'tungsten', + 'tyranny', + 'vernacular', + 'vinegar', + 'violence', + 'vitae', + 'warmth', + 'water', + 'whisky', + 'wildlife', + 'wine', + 'wood', + 'wool', + 'you guys', + 'nutella', + 'vanilla', + 'venus', + 'earth', + 'mars', + 'jupiter', + 'saturn', + 'uranus', + 'neptune', + 'pluto', + 'vapor', + 'magic', + 'melancholy', + + + // 'art', + // 'cash', + // 'clothing', + // 'gold', + // 'ground', + // 'justice', + // 'kelvin', + // 'mail', + // 'power', + // 'progress', + // 'snow', + // 'speed', + // 'spite', + // 'time', + // 'vanilla', +] diff --git a/data/lexicon/numbers/cardinals.js b/data/lexicon/numbers/cardinals.js new file mode 100644 index 0000000..45be82d --- /dev/null +++ b/data/lexicon/numbers/cardinals.js @@ -0,0 +1,36 @@ +export default [ + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'ten', + 'eleven', + 'twelve', + 'thirteen', + 'fourteen', + 'fifteen', + 'sixteen', + 'seventeen', + 'eighteen', + 'nineteen', + 'twenty', + 'thirty', + 'forty', + 'fourty', + 'fifty', + 'sixty', + 'seventy', + 'eighty', + 'ninety', + // plural-multiples + 'thousands', + 'millions', + 'billions', + 'trillions', +] diff --git a/data/lexicon/numbers/multiples.js b/data/lexicon/numbers/multiples.js new file mode 100644 index 0000000..2a73e19 --- /dev/null +++ b/data/lexicon/numbers/multiples.js @@ -0,0 +1,11 @@ +export default [ + 'hundred', + 'thousand', + 'million', + 'billion', + 'trillion', + 'quadrillion', + 'quintillion', + 'sextillion', + 'septillion', +] diff --git a/data/lexicon/numbers/ordinals.js b/data/lexicon/numbers/ordinals.js new file mode 100644 index 0000000..2808545 --- /dev/null +++ b/data/lexicon/numbers/ordinals.js @@ -0,0 +1,31 @@ +export default [ + 'zeroth', + 'first', + 'second', + 'third', + 'fourth', + 'fifth', + 'sixth', + 'seventh', + 'eighth', + 'ninth', + 'tenth', + 'eleventh', + 'twelfth', + 'thirteenth', + 'fourteenth', + 'fifteenth', + 'sixteenth', + 'seventeenth', + 'eighteenth', + 'nineteenth', + 'twentieth', + 'thirtieth', + 'fortieth', + 'fourtieth', + 'fiftieth', + 'sixtieth', + 'seventieth', + 'eightieth', + 'ninetieth', +] diff --git a/data/lexicon/numbers/units.js b/data/lexicon/numbers/units.js new file mode 100644 index 0000000..ab324c3 --- /dev/null +++ b/data/lexicon/numbers/units.js @@ -0,0 +1,143 @@ +// ambigous units are in ../switches/unit-noun.js +// units that are also abbreviations are in ../abbrev/units.js +export default [ + '°c', + 'celsius', + '°f', + 'fahrenheit', + 'kelvins', + '°n', + 'm³', + 'dm³', + 'cm³', + 'litre', + 'litres', + 'liter', + 'liters', + 'deciliter', + 'deciliters', + 'centiliter', + 'centiliters', + 'milliliter', + 'milliliters', + 'in³', + 'ft³', + 'yd³', + 'gallon', + 'gallons', + 'bbl', + 'pint', + 'pints', + 'quart', + 'quarts', + 'fl oz', + // 'fluid ounce', + // 'fluid ounces', + 'kilometer', + 'kilometers', + 'meter', + 'meters', + 'decimeter', + 'decimeters', + 'centimeter', + 'centimeters', + 'millimeter', + 'millimeters', + 'mile', + 'tonne', + 'tonnes', + 'kilo', + 'kilos', + 'kilogram', + 'kilograms', + 'hectogram', + 'hectograms', + 'gram', + 'grams', + 'decigram', + 'decigrams', + 'centigram', + 'centigrams', + 'milligram', + 'milligrams', + 'µg', + 'microgram', + 'micrograms', + 'carat', + 'carats', + 'ounce', + 'ounces', + 'ton', + 'km²', + 'm²', + 'dm²', + 'cm²', + 'mm²', + 'hectare', + 'hectares', + 'mile²', + 'in²', + 'yd²', + 'ft²', + 'sq ft', + 'acre', + 'acres', + 'hertz', + 'hertzs', + 'km/h', + 'kmph', + 'm/s', + 'mi/h', + 'knot', + 'knots', + 'byte', + 'bytes', + 'kilobyte', + 'kilobytes', + 'megabyte', + 'megabytes', + 'gigabyte', + 'gigabytes', + 'terabyte', + 'terabytes', + 'petabyte', + 'petabytes', + 'exabyte', + 'exabytes', + 'zettabyte', + 'zettabytes', + 'yottabyte', + 'yottabytes', + 'kbps', + 'bbps', + 'gbps', + 'joule', + 'joules', + 'pascals', + 'watt', + 'watts', + 'wb', + 'coulomb', + 'coulombs', + 'volts', + 'farad', + 'farads', + 'ohms', + 'lux', + 'lumen', + 'lumens', + 'µs', + 'microsecond', + 'microseconds', + 'nanosecond', + 'nanoseconds', + 'picosecond', + 'picoseconds', + 'femtosecond', + 'femtoseconds', + 'attosecond', + 'attoseconds', + 'percent', + 'year old', + 'years old', +] diff --git a/data/lexicon/people/femaleNames.js b/data/lexicon/people/femaleNames.js new file mode 100644 index 0000000..dbf01e0 --- /dev/null +++ b/data/lexicon/people/femaleNames.js @@ -0,0 +1,1799 @@ +//names with a distinctive signal that they identify as a female, internationally + +export default [ + 'aada', + 'aadya', + 'aaliyah', + 'aaradhya', + 'aasha', + 'abagail', + 'abbey', + 'abbi', + 'abbie', + 'abby', + 'abi', + 'abigail', + 'abril', + 'ada', + 'adaline', + 'adalyn', + 'addie', + 'addilyn', + 'addison', + 'adel', + 'adela', + 'adelaide', + 'adele', + 'adelene', + 'adelia', + 'adelina', + 'adeline', + 'adelynn', + 'adreanna', + 'adriana', + 'adrianna', + 'adrianne', + 'adriena', + 'adriene', + 'adrienne', + 'agatha', + 'aggie', + 'agnes', + 'agustina', + 'aicha', + 'aida', + 'aileen', + 'aimee', + 'aina', + 'aino', + 'ainsley', + 'aisha', + 'aishah', + 'aisling', + 'aislinn', + 'aislynn', + 'ajla', + 'alaina', + 'alana', + 'alanis', + 'alanna', + 'alannah', + 'alanoud', + 'alayah', + 'alayna', + 'alba', + 'alecia', + 'aleisha', + 'alejandra', + 'aleksandra', + 'alena', + 'alesia', + 'alessandra', + 'alexa', + 'alexandra', + 'alexia', + 'alia', + 'alice', + 'alicia', + 'alicja', + 'alina', + 'aline', + 'alisa', + 'alise', + 'alisha', + 'alison', + 'alissa', + 'aliza', + 'allie', + 'allison', + 'allyson', + 'althea', + 'alya', + 'alycia', + 'alysa', + 'alyson', + 'alyssa', + 'amahle', + 'amaia', + 'amaira', + 'amalia', + 'amanda', + 'amber', + 'amberly', + 'amelia', + 'amelija', + 'amie', + 'amilia', + 'amina', + 'aminata', + 'amy', + 'ana', + 'anabel', + 'anamaria', + 'anastasia', + 'anastasija', + 'anaya', + 'andjela', + 'ane', + 'anette', + 'angela', + 'angelia', + 'angelica', + 'angelina', + 'angeline', + 'angelique', + 'angie', + 'anika', + 'anisa', + 'anissa', + 'anita', + 'anja', + 'anjelica', + 'ann', + 'anna', + 'annabel', + 'annabella', + 'annabelle', + 'annalisa', + 'annamaria', + 'anne', + 'annemarie', + 'annette', + 'annie', + 'annika', + 'annmarie', + 'anohito', + 'antoinette', + 'antonella', + 'antonia', + 'anya', + 'aoi', + 'aria', + 'ariana', + 'arianna', + 'arianne', + 'arielle', + 'arleen', + 'arlena', + 'arlene', + 'arlette', + 'aroha', + 'arpita', + 'asha', + 'ashanti', + 'ashlee', + 'ashleigh', + 'ashley', + 'ashli', + 'ashlie', + 'ashly', + 'ashlyn', + 'ashraqat', + 'ashton', + 'asiya', + 'asja', + 'asmita', + 'assil', + 'astrid', + 'ataahua', + 'athena', + 'audra', + 'audrey', + 'audri', + 'audry', + 'augustina', + 'aurelia', + 'austeja', + 'ava', + 'avigail', + 'awa', + 'aya', + 'ayn', + 'ayana', + 'ayanna', + 'ayesha', + 'aygun', + 'aylin', + 'ayse', + 'aysel', + 'azra', + 'azuna', + 'barbara', + 'barbora', + 'barbra', + 'bayarmaa', + 'bea', + 'beatrice', + 'beatriz', + 'becky', + 'belinay', + 'belinda', + 'benita', + 'bernadette', + 'bernadine', + 'bernice', + 'bertha', + 'beryl', + 'bess', + 'bessie', + 'beth', + 'bethanie', + 'bethany', + 'betsy', + 'bette', + 'bettie', + 'bettina', + 'betty', + 'bettye', + 'beula', + 'beulah', + 'bev', + 'beverley', + 'beverly', + 'bianca', + 'biljana', + 'binita', + 'bintou', + 'bismah', + 'blanca', + 'blanche', + 'blythe', + 'bobbi', + 'bobbie', + 'boglarka', + 'bolormaa', + 'bonita', + 'bonnie', + 'brandi', + 'brandie', + 'breanna', + 'bree', + 'brenda', + 'brenna', + 'briana', + 'brianna', + 'brianne', + 'bridget', + 'bridgett', + 'bridgette', + 'brigid', + 'britney', + 'britt', + 'brittany', + 'brittney', + 'brittni', + 'brittny', + 'bronwyn', + 'brooke', + 'bryanna', + 'brynn', + 'caitlin', + 'caitlyn', + 'calista', + 'callie', + 'camila', + 'camile', + 'camilla', + 'camille', + 'candace', + 'candice', + 'cara', + 'carina', + 'carissa', + 'carla', + 'carlene', + 'carley', + 'carlie', + 'carlota', + 'carly', + 'carmel', + 'carmela', + 'carmella', + 'carmen', + 'carol', + 'carole', + 'carolina', + 'caroline', + 'carolyn', + 'carrie', + 'carrol', + 'casandra', + 'cassandra', + 'cassie', + 'catarina', + 'caterina', + 'catherina', + 'catherine', + 'cathleen', + 'cathryn', + 'cathy', + 'catrina', + 'cayla', + 'cecelia', + 'cecile', + 'cecilia', + 'cecily', + 'celeste', + 'celia', + 'celina', + 'celine', + 'chandra', + 'chanelle', + 'chantal', + 'chantelle', + 'charis', + 'charissa', + 'charla', + 'charlena', + 'charlene', + 'charlette', + 'charlotte', + 'charmaine', + 'chedeline', + 'chelsea', + 'chelsey', + 'cher', + 'cheri', + 'cherie', + 'cheryl', + 'chloe', + 'chrissy', + 'christa', + 'christal', + 'christen', + 'christiana', + 'christiane', + 'christie', + 'christina', + 'christine', + 'christy', + 'chrystal', + 'ciara', + 'cierra', + 'cindi', + 'cindy', + 'clair', + 'claire', + 'clara', + 'clare', + 'clarice', + 'claris', + 'clarissa', + 'claudette', + 'claudia', + 'claudine', + 'cleo', + 'cleopatra', + 'clotilde', + 'coleen', + 'colette', + 'colleen', + 'concepcion', + 'connie', + 'constance', + 'constanza', + 'consuelo', + 'cora', + 'coralie', + 'cordelia', + 'cori', + 'corina', + 'corine', + 'corinna', + 'corinne', + 'cornelia', + 'corrine', + 'courtney', + 'courtni', + 'courtny', + 'cristal', + 'cristina', + 'cyndi', + 'cynthia', + 'dahlia', + 'daina', + 'dalal', + 'damaris', + 'damia', + 'dana', + 'danette', + 'dani', + 'danica', + 'daniela', + 'daniele', + 'daniella', + 'danielle', + 'danika', + 'daniz', + 'daphna', + 'daphne', + 'dara', + 'darby', + 'darcey', + 'darcie', + 'daria', + 'darla', + 'darlena', + 'darlene', + 'davida', + 'davina', + 'dayle', + 'dayna', + 'deana', + 'deandra', + 'deann', + 'deanna', + 'deanne', + 'deb', + 'debbie', + 'debby', + 'debora', + 'deborah', + 'debra', + 'debrah', + 'dede', + 'dee', + 'deedee', + 'deena', + 'deidre', + 'deirdre', + 'dela', + 'delia', + 'delilah', + 'della', + 'delores', + 'deloris', + 'delphine', + 'demetria', + 'dena', + 'denice', + 'denise', + 'desiree', + 'dhia', + 'diana', + 'diane', + 'dianna', + 'dianne', + 'dina', + 'dinah', + 'dionne', + 'diya', + 'djeneba', + 'dolores', + 'dominique', + 'dona', + 'donna', + 'dora', + 'doreen', + 'doris', + 'dorla', + 'dorothea', + 'dorothy', + 'dorthy', + 'dottie', + 'ecrin', + 'edel', + 'eden', + 'edie', + 'edith', + 'edna', + 'edwina', + 'eevi', + 'eileen', + 'eisha', + 'ekta', + 'ela', + 'elaina', + 'elaine', + 'elana', + 'eleanor', + 'elen', + 'elena', + 'eliana', + 'elicia', + 'elida', + 'elif', + 'elin', + 'elina', + 'elinor', + 'elisa', + 'elisabeth', + 'elise', + 'eliska', + 'eliza', + 'elizabete', + 'elizabeth', + 'elizaveta', + 'ella', + 'ellen', + 'ellie', + 'elly', + 'elma', + 'elnora', + 'eloise', + 'elouise', + 'elsa', + 'elsie', + 'elva', + 'elvina', + 'elvira', + 'ema', + 'emelda', + 'emely', + 'emerald', + 'emilee', + 'emilia', + 'emilie', + 'emilija', + 'emily', + 'emina', + 'emine', + 'emmeline', + 'emma', + 'emmaline', + 'emmie', + 'emmy', + 'enid', + 'erica', + 'ericka', + 'erika', + 'erin', + 'erma', + 'ernestina', + 'ernestine', + 'eryn', + 'esma', + 'esmeralda', + 'esperanza', + 'estela', + 'estele', + 'estella', + 'estelle', + 'ester', + 'estere', + 'esther', + 'estrella', + 'ethel', + 'etta', + 'eugenia', + 'eugenie', + 'eunice', + 'eva', + 'evangelina', + 'evangeline', + 'evelin', + 'evelina', + 'evelyn', + 'evi', + 'evie', + 'evita', + 'fajr', + 'fanta', + 'farah', + 'farida', + 'farrah', + 'farzana', + 'fatemeh', + 'fatiha', + 'fatima', + 'fatin', + 'fatma', + 'fatoumata', + 'fay', + 'faye', + 'felecia', + 'felicia', + 'fenna', + 'fernanda', + 'fien', + 'fiona', + 'flora', + 'florencia', + 'fozia', + 'fran', + 'frances', + 'francesca', + 'francina', + 'francine', + 'francisca', + 'francoise', + 'freda', + 'freja', + 'frida', + 'frieda', + 'gabija', + 'gabriela', + 'gabriella', + 'gabrielle', + 'gale', + 'gamalat', + 'gamila', + 'garnet', + 'gayle', + 'gemma', + 'gena', + 'genesis', + 'genevieve', + 'genna', + 'georgette', + 'georgie', + 'georgina', + 'geraldina', + 'geraldine', + 'geri', + 'germaine', + 'gertrude', + 'gia', + 'gianna', + 'gigi', + 'gilda', + 'gillian', + 'gina', + 'giovanna', + 'gisela', + 'gisele', + 'giselle', + 'gita', + 'gladys', + 'glena', + 'glenda', + 'glenna', + 'gloria', + 'glynis', + 'golda', + 'goldie', + 'googoosh', + 'gracie', + 'graciela', + 'greta', + 'gretchen', + 'griselda', + 'gunay', + 'gunel', + 'gwen', + 'gwendolyn', + 'gwyneth', + 'habiba', + 'hailey', + 'hala', + 'haley', + 'hallie', + 'hana', + 'hanah', + 'hanna', + 'hannah', + 'hariet', + 'hariette', + 'harmony', + 'harriet', + 'harriett', + 'harriette', + 'hasnaa', + 'hasti', + 'hatice', + 'hattie', + 'hawa', + 'hayley', + 'heather', + 'heidi', + 'helen', + 'helena', + 'helene', + 'helga', + 'helmi', + 'henrietta', + 'hermine', + 'hessa', + 'hester', + 'hilary', + 'hilda', + 'hildegard', + 'hillary', + 'himari', + 'hoda', + 'hollie', + 'hortense', + 'hosna', + 'hosniya', + 'hussa', + 'hyacinth', + 'ida', + 'ila', + 'ilene', + 'iliana', + 'ilina', + 'ilona', + 'ilse', + 'imane', + 'imelda', + 'imogena', + 'imogene', + 'indira', + 'ines', + 'ingrid', + 'inji', + 'iona', + 'irati', + 'irena', + 'irene', + 'irina', + 'irma', + 'isabel', + 'isabela', + 'isabele', + 'isabell', + 'isabella', + 'isabelle', + 'isadora', + 'isidora', + 'isla', + 'islande', + 'isobel', + 'iva', + 'ivaana', + 'ivalu', + 'ivana', + 'izaro', + 'jacinda', + 'jacinta', + 'jackie', + 'jaclyn', + 'jacquelina', + 'jacqueline', + 'jacquelyn', + 'jada', + 'jami', + 'jana', + 'janae', + 'jane', + 'janele', + 'janelle', + 'janessa', + 'janet', + 'janette', + 'janice', + 'janie', + 'janina', + 'janine', + 'janis', + 'jaqueline', + 'jasmin', + 'jasmina', + 'javiera', + 'jayne', + 'jazmin', + 'jazmine', + 'jeana', + 'jeane', + 'jeanette', + 'jeanie', + 'jeanina', + 'jeanine', + 'jeanna', + 'jeanne', + 'jeannette', + 'jeannie', + 'jeannina', + 'jeannine', + 'jelena', + 'jen', + 'jena', + 'jenelle', + 'jenifer', + 'jenna', + 'jennette', + 'jenni', + 'jennie', + 'jennifer', + 'jenny', + 'jeri', + 'jerri', + 'jesica', + 'jess', + 'jesse', + 'jessica', + 'jil', + 'jilian', + 'jill', + 'jillian', + 'jing', + 'jo', + 'joan', + 'joana', + 'joane', + 'joann', + 'joanna', + 'joanne', + 'jocelyn', + 'jodi', + 'jodie', + 'jody', + 'joelle', + 'johana', + 'johanna', + 'joleen', + 'jolena', + 'jolene', + 'joni', + 'josefa', + 'josefina', + 'josefine', + 'joselyn', + 'josephina', + 'josephine', + 'josie', + 'jovana', + 'joya', + 'joyce', + 'juana', + 'juanita', + 'judeline', + 'judith', + 'judy', + 'julia', + 'juliana', + 'julianna', + 'julianne', + 'julie', + 'julienne', + 'juliet', + 'julieta', + 'juliette', + 'julissa', + 'justina', + 'justine', + 'kabita', + 'kacey', + 'kadiatou', + 'kaede', + 'kaia', + 'kaitlin', + 'kaitlyn', + 'kaleigh', + 'kali', + 'kallie', + 'kamala', + 'kamila', + 'kamile', + 'kanyakumari', + 'kara', + 'karen', + 'kari', + 'karima', + 'karin', + 'karina', + 'karissa', + 'karla', + 'karly', + 'karolina', + 'karyn', + 'kassandra', + 'kassie', + 'katarina', + 'kate', + 'katelyn', + 'katelynn', + 'katerina', + 'katharina', + 'katharine', + 'katherina', + 'katherine', + 'kathie', + 'kathleen', + 'kathrine', + 'kathryn', + 'kathy', + 'kati', + 'katia', + 'katie', + 'katlyn', + 'katrina', + 'katy', + 'kavita', + 'kay', + 'kaye', + 'kayla', + 'kaylee', + 'kayleigh', + 'keeley', + 'keely', + 'keira', + 'keisha', + 'kejsi', + 'keley', + 'keli', + 'kelley', + 'kelli', + 'kellie', + 'kelly', + 'kelsie', + 'kely', + 'kendra', + 'kenna', + 'kenza', + 'kera', + 'keri', + 'kerri', + 'khadija', + 'khadije', + 'khawla', + 'kheira', + 'khongordzol', + 'kia', + 'kiana', + 'kiara', + 'kiera', + 'kiersten', + 'kiley', + 'kim', + 'kimberlee', + 'kimberley', + 'kimberli', + 'kimberly', + 'kimmernaq', + 'kira', + 'kirsten', + 'kirstin', + 'kizzy', + 'klea', + 'konul', + 'kori', + 'kourtney', + 'krista', + 'kristen', + 'kristi', + 'kristie', + 'kristin', + 'kristina', + 'kristine', + 'kristy', + 'kristyna', + 'krystal', + 'kyla', + 'kylee', + 'kylie', + 'kyra', + 'lacey', + 'lacie', + 'lacy', + 'ladona', + 'ladonna', + 'laia', + 'laila', + 'lakesha', + 'lamija', + 'lana', + 'lara', + 'larissa', + 'latasha', + 'latifa', + 'latisha', + 'latonya', + 'latoya', + 'laura', + 'laurel', + 'lauren', + 'laurie', + 'lauryn', + 'laverna', + 'laverne', + 'lavinia', + 'laxmi', + 'layla', + 'lea', + 'leah', + 'leana', + 'leandra', + 'leane', + 'leann', + 'leanna', + 'leanne', + 'leda', + 'leena', + 'leia', + 'leigh', + 'leila', + 'leilani', + 'leja', + 'lejla', + 'lela', + 'lena', + 'lenora', + 'lenore', + 'leola', + 'leona', + 'leonie', + 'leonora', + 'leora', + 'lesedi', + 'lesley', + 'lesli', + 'leslie', + 'lesly', + 'leticia', + 'letitia', + 'lettie', + 'lexie', + 'leyla', + 'lia', + 'lian', + 'liana', + 'lianne', + 'libbie', + 'libby', + 'lidia', + 'lidya', + 'liepa', + 'lila', + 'lili', + 'lilia', + 'lilian', + 'liliana', + 'lilja', + 'lillia', + 'lillian', + 'lillie', + 'lilly', + 'lin', + 'lina', + 'linda', + 'lindsay', + 'lindsey', + 'lindsi', + 'lindsy', + 'lindy', + 'lisa', + 'lisette', + 'livia', + 'liz', + 'liza', + 'lizbeth', + 'lizette', + 'lizzie', + 'lois', + 'lola', + 'lolita', + 'lora', + 'loraina', + 'loraine', + 'lorelei', + 'lorena', + 'lorene', + 'loretta', + 'lori', + 'lorie', + 'lorna', + 'lorraina', + 'lorraine', + 'lorri', + 'lorrie', + 'lotte', + 'lottie', + 'louella', + 'louisa', + 'louise', + 'lovelie', + 'luann', + 'lucia', + 'luciana', + 'lucie', + 'lucija', + 'lucile', + 'lucille', + 'lucinda', + 'lucy', + 'luela', + 'luella', + 'luisa', + 'lula', + 'lulu', + 'lulwa', + 'luna', + 'lupe', + 'lupita', + 'luz', + 'lydia', + 'lyla', + 'lyn', + 'lyna', + 'lynda', + 'lyndsey', + 'lyne', + 'lynette', + 'lynn', + 'lynna', + 'lynne', + 'lynnette', + 'lynsey', + 'mabel', + 'mable', + 'macie', + 'macy', + 'madalyn', + 'maddie', + 'madeleine', + 'madelina', + 'madeline', + 'madelyn', + 'madge', + 'madison', + 'madonna', + 'mae', + 'magda', + 'magdalena', + 'magdalene', + 'maggie', + 'maha', + 'maia', + 'maire', + 'maisie', + 'maite', + 'maja', + 'malak', + 'malen', + 'malia', + 'malika', + 'malinda', + 'mallory', + 'mandakranta', + 'mandy', + 'manon', + 'manuela', + 'mara', + 'marcela', + 'marcella', + 'marcelle', + 'marci', + 'marcia', + 'marcie', + 'marcy', + 'margaret', + 'margarette', + 'margarida', + 'margarita', + 'marge', + 'margery', + 'margie', + 'margo', + 'margot', + 'margret', + 'margrette', + 'marguerite', + 'mari', + 'maria', + 'mariah', + 'mariam', + 'mariamawit', + 'mariami', + 'marian', + 'mariana', + 'mariane', + 'marianna', + 'marianne', + 'maribel', + 'marie', + 'mariela', + 'mariella', + 'marija', + 'marilyn', + 'marina', + 'maris', + 'marisa', + 'marisol', + 'marissa', + 'maritza', + 'marjorie', + 'marla', + 'marlena', + 'marlene', + 'marnie', + 'marsha', + 'marta', + 'martha', + 'martina', + 'martine', + 'marwa', + 'mary', + 'maryam', + 'maryan', + 'maryann', + 'marybeth', + 'maryjane', + 'marylou', + 'masoumeh', + 'mathilde', + 'matilda', + 'matilde', + 'mattie', + 'maude', + 'maura', + 'maureen', + 'mavis', + 'maxina', + 'maxine', + 'maybell', + 'mayra', + 'maysoun', + 'mazie', + 'mckenzie', + 'meagan', + 'meg', + 'megan', + 'meghan', + 'mei', + 'melanie', + 'melina', + 'melinda', + 'melisa', + 'melissa', + 'mellisa', + 'meredith', + 'meriem', + 'merissa', + 'merjem', + 'meron', + 'meryem', + 'meryl', + 'mia', + 'micaela', + 'michaela', + 'michele', + 'michelle', + 'mika', + 'mikaela', + 'mila', + 'milagros', + 'mildred', + 'milica', + 'millicent', + 'millie', + 'milly', + 'mimi', + 'mindy', + 'minenhle', + 'minerva', + 'minh', + 'minnie', + 'mira', + 'miral', + 'miranda', + 'miriam', + 'mirlande', + 'mitzi', + 'miyar', + 'mobina', + 'moira', + 'mollie', + 'molly', + 'mona', + 'monica', + 'monika', + 'monique', + 'mrignayani', + 'muriel', + 'mya', + 'myra', + 'myrlande', + 'myrna', + 'myrtle', + 'naasunnguaq', + 'nadene', + 'nadia', + 'nadina', + 'nadine', + 'nahia', + 'naima', + 'nalla', + 'nancy', + 'nanette', + 'naomi', + 'naomie', + 'narges', + 'natalia', + 'natalie', + 'natasha', + 'nathalie', + 'nehir', + 'nel', + 'nela', + 'nelisa', + 'nell', + 'nellie', + 'nena', + 'nerissa', + 'nesreen', + 'nia', + 'niamh', + 'nichole', + 'nicki', + 'nicky', + 'nicola', + 'nicole', + 'nicolette', + 'niharika', + 'nika', + 'niki', + 'nikita', + 'nikki', + 'nila', + 'nilay', + 'nina', + 'nisanur', + 'nisha', + 'nita', + 'nivi', + 'noa', + 'noella', + 'noelle', + 'noemi', + 'noor', + 'nora', + 'norah', + 'noreen', + 'norma', + 'nouf', + 'nour', + 'nur', + 'nuray', + 'nurul', + 'nyla', + 'octavia', + 'odelia', + 'odette', + 'odval', + 'ofelia', + 'oisha', + 'ola', + 'olga', + 'olivia', + 'ophelia', + 'oumou', + 'oyunbileg', + 'paige', + 'pam', + 'pamela', + 'pandora', + 'paninnguaq', + 'paola', + 'parvati', + 'patrica', + 'patrice', + 'patricia', + 'patti', + 'pattie', + 'patty', + 'paula', + 'paulette', + 'paulina', + 'pauline', + 'peggy', + 'penelope', + 'perla', + 'petra', + 'philomena', + 'phoebe', + 'phylis', + 'phyllis', + 'pipaluk', + 'polly', + 'portia', + 'priscila', + 'priscilla', + 'priyamvada', + 'prudence', + 'puteri', + 'queenie', + 'quiana', + 'rabina', + 'rachael', + 'rachel', + 'rachele', + 'rachelle', + 'rachida', + 'rae', + 'raina', + 'ramona', + 'randi', + 'rania', + 'raquel', + 'rayna', + 'reanna', + 'reba', + 'rebecca', + 'rebeka', + 'rebekah', + 'reem', + 'reema', + 'regina', + 'reihaneh', + 'reina', + 'rena', + 'renae', + 'renata', + 'renee', + 'reta', + 'reyna', + 'rhea', + 'rhiannon', + 'rhoda', + 'rhona', + 'rhonda', + 'ria', + 'richelle', + 'ricki', + 'rikki', + 'riko', + 'rimas', + 'rin', + 'rina', + 'rita', + 'riya', + 'robbin', + 'roberta', + 'robyn', + 'rochele', + 'rochelle', + 'rocio', + 'roghayyeh', + 'rolanda', + 'ronda', + 'roni', + 'ronna', + 'rosa', + 'rosalie', + 'rosalina', + 'rosalind', + 'rosalinda', + 'rosalyn', + 'rosanna', + 'rosanne', + 'roseann', + 'roseanne', + 'rosella', + 'roselle', + 'rosemarie', + 'rosemary', + 'rosetta', + 'rosie', + 'roslyn', + 'rowan', + 'rowena', + 'roxana', + 'roxane', + 'roxanna', + 'roxanne', + 'roxie', + 'roxy', + 'ruth', + 'ruthie', + 'saanvi', + 'sabina', + 'sabine', + 'sabrina', + 'sade', + 'sadie', + 'sahar', + 'saida', + 'sakeena', + 'sakineh', + 'sakura', + 'sallie', + 'sally', + 'salma', + 'salome', + 'samantha', + 'samira', + 'sandra', + 'sara', + 'sarah', + 'sarina', + 'sasha', + 'savanna', + 'savannah', + 'scarlett', + 'selena', + 'selene', + 'selina', + 'selma', + 'serena', + 'serife', + 'setayesh', + 'sevda', + 'sevinj', + 'shahd', + 'shaikha', + 'shaim', + 'shaimaa', + 'shakira', + 'shana', + 'shanaya', + 'shanda', + 'shania', + 'shanna', + 'shannon', + 'shanon', + 'shari', + 'sharlene', + 'sharon', + 'sharron', + 'shauna', + 'shawna', + 'shayla', + 'shayma', + 'shayna', + 'sheba', + 'sheena', + 'sheila', + 'shelia', + 'shelley', + 'shelly', + 'sheri', + 'sheridan', + 'sherifa', + 'sherri', + 'sherrie', + 'sherry', + 'sheryl', + 'shira', + 'shirley', + 'shirli', + 'shirly', + 'shona', + 'shristi', + 'shyla', + 'sierra', + 'sillin', + 'silvia', + 'simona', + 'simone', + 'sindy', + 'siobhan', + 'sita', + 'siti', + 'skye', + 'snezana', + 'sobia', + 'sofia', + 'sofie', + 'sofija', + 'somayyeh', + 'sondra', + 'sonia', + 'sonja', + 'sonya', + 'sophia', + 'sophie', + 'stacey', + 'staci', + 'stacie', + 'stacy', + 'starla', + 'stefanie', + 'stela', + 'stella', + 'stephanie', + 'suha', + 'sumayah', + 'sunita', + 'susan', + 'susana', + 'susane', + 'susanna', + 'susannah', + 'susanne', + 'susi', + 'susie', + 'suzan', + 'suzana', + 'suzane', + 'suzanna', + 'suzanne', + 'suzette', + 'suzie', + 'suzy', + 'sybil', + 'sylvia', + 'sylvie', + 'tabatha', + 'tabitha', + 'tala', + 'talia', + 'talitha', + 'tamar', + 'tamara', + 'tamera', + 'tami', + 'tamika', + 'tammi', + 'tammie', + 'tammy', + 'tamra', + 'tania', + 'tanika', + 'tanisha', + 'tanya', + 'tara', + 'tarana', + 'taryn', + 'tasha', + 'tatiana', + 'tawana', + 'tegan', + 'teodora', + 'teresa', + 'tereza', + 'teri', + 'terri', + 'terrie', + 'tess', + 'tessa', + 'tessie', + 'thalia', + 'thandolwethu', + 'thea', + 'thelma', + 'theodora', + 'theresa', + 'therese', + 'thomasina', + 'tia', + 'tiana', + 'tianna', + 'tiara', + 'tiffany', + 'tina', + 'tingting', + 'tisha', + 'toni', + 'tonia', + 'tonya', + 'tora', + 'tori', + 'tracey', + 'traci', + 'tracie', + 'tracy', + 'tricia', + 'trina', + 'trish', + 'trisha', + 'trista', + 'trudy', + 'tui', + 'tula', + 'tyra', + 'ugne', + 'ursula', + 'urte', + 'uxue', + 'valentina', + 'valeria', + 'valerie', + 'valery', + 'vanesa', + 'vanessa', + 'veda', + 'velma', + 'vera', + 'verna', + 'vernice', + 'veronica', + 'vesna', + 'vicki', + 'vickie', + 'vicky', + 'vikky', + 'viktoria', + 'viktorie', + 'viktorija', + 'vilte', + 'violeta', + 'vivian', + 'viviana', + 'vivien', + 'vivienne', + 'vusala', + 'wakana', + 'wanda', + 'wendi', + 'wendy', + 'whitney', + 'whitni', + 'whitny', + 'widelene', + 'wila', + 'wilhelmina', + 'willa', + 'willow', + 'wilma', + 'winifred', + 'winnie', + 'winnifred', + 'winona', + 'xiaomei', + 'xiaoyan', + 'ximena', + 'xinyi', + 'yael', + 'yagmur', + 'yan', + 'yarin', + 'yasmin', + 'yasmine', + 'yelena', + 'yesenia', + 'ying', + 'yolanda', + 'yuina', + 'yuna', + 'yvette', + 'yvona', + 'yvone', + 'yvonna', + 'yvonne', + 'zada', + 'zahra', + 'zainab', + 'zara', + 'zehra', + 'zeinab', + 'zelda', + 'zelma', + 'zena', + 'zeynab', + 'zeynep', + 'zineb', + 'zoe', + 'zoey', + 'zofia', + 'zola', + 'zora', + 'zsofia', + + 'abie', + 'aneta', + 'annett', + 'augustine', + 'becca', + 'bertie', + 'brigitte', + 'carlotta', + 'ekaterina', + 'eleni', + 'elie', + 'emanuela', + 'emile', + 'emile', + 'emmanuelle', + 'etienne', + 'ewa', + 'gabi', + 'gertrud', + 'iwona', + 'jacky', + 'jules', + 'kalle', + 'kat', + 'larisa', + 'lex', + 'liv', + 'luise', + 'maud', + 'midori', + 'milena', + 'myriam', + 'nadya', + 'natalya', + 'oksana', + 'pia', + 'polina', + 'rebeca', + 'sharyn', + 'sri', + 'stephane', + 'usha', + // 'grace', + // 'lily', + // 'scarlet', + // 'victoria', +] diff --git a/data/lexicon/people/firstnames.js b/data/lexicon/people/firstnames.js new file mode 100644 index 0000000..377cda1 --- /dev/null +++ b/data/lexicon/people/firstnames.js @@ -0,0 +1,73 @@ +//ambiguously-gendered firstnames +//names commonly used in either gender +export default [ + 'alexis', + 'andra', + 'aubrey', + 'blair', + 'casey', + 'cassidy', + 'charlie', + 'cheyenne', + 'devan', + 'devon', + 'jamie', + 'jammie', + 'jessie', + 'jude', + 'kiran', + 'kasey', + 'kelsey', + 'kenyatta', + 'kerry', + 'kris', + 'lashawn', + 'marion', + 'marlo', + 'mel', + 'mina', + 'morgan', + 'nelly', + 'quinn', + 'regan', + 'rene', + 'shay', + 'shea', + 'shelby', + 'shiloh', + 'andrea', + 'gabriele', + 'hinata', + 'jie', + 'luca', + 'manaia', + 'melokuhle', + 'sumit', + 'gaby', + 'jaime', + 'kendall', + 'syd', + 'kai', + 'kiril', + 'leif', + 'mads', + 'matti', + 'matty', + 'maxime', + 'nico', + 'niko', + 'nikos', + 'adrien', + 'alexei', + 'andi', + 'andrey', + 'avi', + 'darcy', + 'ilya', + 'werner', + 'francois', + 'friedrich', + 'akira', + 'alfie', + 'alois', +] diff --git a/data/lexicon/people/honorifics.js b/data/lexicon/people/honorifics.js new file mode 100644 index 0000000..abd8bad --- /dev/null +++ b/data/lexicon/people/honorifics.js @@ -0,0 +1,8 @@ +export default [ + 'lieutenant general', + 'field marshal', + 'rear admiral', + 'vice admiral', + 'sergeant major', + 'director general', +] \ No newline at end of file diff --git a/data/lexicon/people/lastnames.js b/data/lexicon/people/lastnames.js new file mode 100644 index 0000000..4ab2e41 --- /dev/null +++ b/data/lexicon/people/lastnames.js @@ -0,0 +1,926 @@ +//a random copy+paste job from around the internet +//(dont mean to step on any toes) +//some countries have a higher lastname-signal than others +//this list is further augmented by some regexps, over in ./data/punct_rules.js +// https://en.wikipedia.org/wiki/List_of_most_common_surnames_in_Europe +export default [ + 'acosta', + 'adams', + 'aguilar', + 'akhtar', + 'aleksejev', + 'aliyev', + 'almeida', + 'alvarez', + 'alves', + 'andersen', + 'anderson', + 'andersson', + 'andov', + 'andreassen', + 'andrejev', + 'angelov', + 'angelova', + 'araujo', + 'araya', + 'arslan', + 'aslan', + 'ayala', + 'aydin', + 'babic', + 'bach', + 'baez', + 'bahk', + 'bahng', + 'bailey', + 'bakker', + 'bandara', + 'bandyopadhyay', + 'banik', + 'barbieri', + 'barbosa', + 'barnes', + 'barnier', + 'barua', + 'bauer', + 'becker', + 'beckham', + 'beethoven', + 'begu', + 'bektashi', + 'bengtsson', + 'benitez', + 'bennett', + 'berger', + 'bergmann', + 'berisha', + 'bernasconi', + 'berndsen', + 'bhak', + 'bhang', + 'bhoumik', + 'bhowmik', + 'bhuiyan', + 'bianchi', + 'bishwas', + 'blanco', + 'blazevic', + 'blondal', + 'bogdanov', + 'bondarenko', + 'bonik', + 'boruya', + 'bosu', + 'bouchard', + 'boyko', + 'bozic', + 'bozinov', + 'brankov', + 'briem', + 'brooks', + 'bryant', + 'byrne', + 'bytyqi', + 'caceres', + 'calderon', + 'campbell', + 'cardoso', + 'cardozo', + 'carter', + 'caruso', + 'carvalho', + 'castillo', + 'castro', + 'cavadini', + 'ceban', + 'cebotari', + 'celik', + 'cengic', + 'cereghetti', + 'cerna', + 'cerny', + 'chakma', + 'chakraborty', + 'chan', + 'chand', + 'chang', + 'chatterjee', + 'chapman', + 'chavez', + 'che', + 'chen', + 'cheon', + 'cheong', + 'cheung', + 'chiu', + 'choi', + 'chong', + 'choung', + 'chow', + 'chowdhury', + 'choy', + 'christensen', + 'christiansen', + 'chung', + 'chwe', + 'ciobanu', + 'clark', + 'clarke', + 'cohen', + 'coleman', + 'collins', + 'conti', + 'contreras', + 'cooke', + 'cooper', + 'corbyn', + 'correa', + 'correia', + 'costa', + 'cox', + 'crivelli', + 'cruz', + 'dahl', + 'damcevski', + 'danielsen', + 'dankula', + 'datta', + 'davidov', + 'davies', + 'davis', + 'de boer', + 'de groot', + 'de jong', + 'de la cruz', + 'de leon', + 'de luca', + 'de silva', + 'de vries', + 'debnath', + 'delgado', + 'delic', + 'demir', + 'demirovic', + 'dervishi', + 'devi', + 'dewan', + 'dias', + 'diaz', + 'dimitrov', + 'dimitrova', + 'dissanayake', + 'djurhuus', + 'dogan', + 'doherty', + 'dominguez', + 'donev', + 'dordevic', + 'dotto', + 'driscoll', + 'duarte', + 'dubois', + 'dumitru', + 'durand', + 'duric', + 'dutta', + 'dvorak', + 'dvorakova', + 'eder', + 'edison', + 'edwards', + 'einstein', + 'eriksen', + 'eriksson', + 'escobar', + 'espinoza', + 'esposito', + 'estrada', + 'evans', + 'faber', + 'ferhatovic', + 'fernandes', + 'fernandez', + 'ferrara', + 'ferrari', + 'ferreira', + 'filipov', + 'filipovic', + 'fischer', + 'fjeldsted', + 'flores', + 'fontana', + 'fortin', + 'fournier', + // 'franco', + 'friedman', + 'fuchs', + 'fuentes', + 'fujita', + 'gagne', + 'gagnon', + 'galeano', + 'gallagher', + 'galli', + 'gallo', + 'gamage', + 'gandhi', + 'gao', + 'garcia', + 'garza', + 'gashi', + 'gauthier', + 'georgiev', + 'georgieva', + 'gheorghe', + 'gibson', + 'gil', + 'gimenez', + 'giordano', + 'gjonaj', + 'gjoni', + 'gorbachev', + 'golubev', + 'gomes', + 'gomez', + 'goncalves', + 'gonzales', + 'gonzalez', + 'goode', + 'goodman', + 'grayling', + 'grgic', + 'griffiths', + 'gruber', + 'guo', + 'gustafsson', + 'gutierrez', + 'guzman', + 'gwon', + 'hadzic', + 'hagen', + 'halvorsen', + 'hamalainen', + 'hansen', + 'hansson', + 'haque', + 'harris', + 'hasani', + 'hasanov', + 'hasanovic', + 'hashimoto', + 'haugen', + 'haung', + 'hayashi', + 'hayes', + 'heikkila', + 'heikkinen', + 'heinonen', + 'hemingway', + 'henderson', + 'henriksen', + 'hernandez', + 'herrera', + 'hitchcock', + 'hjaltalin', + 'hoang', + 'hodzic', + 'hofer', + 'hoffmann', + 'hojgaard', + 'hok', + 'horak', + 'horakova', + 'horvat', + 'hoxha', + 'hristov', + 'hristova', + 'hu', + 'huaman', + 'huang', + 'huber', + 'hughes', + 'huynh', + 'ibrahimovic', + 'iglesias', + 'ikeda', + 'iliev', + 'ilieva', + 'inoue', + 'ionescu', + 'ishikawa', + 'ito', + 'ivanou', + 'ivanov', + 'ivanova', + 'jackson', + 'jacobsen', + 'jakobsson', + 'jansen', + 'janssen', + 'janssens', + 'jansson', + 'jarvinen', + 'jenkins', + 'jensen', + 'jhang', + 'jimenez', + 'joensen', + 'johannesen', + 'johannessen', + 'johansen', + 'johansson', + 'johnsen', + 'johnson', + 'johnston', + 'jones', + 'jonsson', + 'jorgensen', + 'joung', + 'jovanovic', + 'jung', + 'juric', + 'kahn', + 'kalloe', + 'kaminski', + 'karjalainen', + 'karlsen', + 'karlsson', + 'kastrati', + 'kato', + 'kaur', + 'kaya', + 'kayser', + 'kazlov', + 'kennedy', + 'khan', + 'kieffer', + 'kilic', + 'kimura', + 'kinnunen', + 'klein', + 'kluivert', + 'knezevic', + 'kobayashi', + 'korhonen', + 'koskinen', + 'kovac', + 'kovacevic', + 'kovacic', + 'kovacs', + 'koval', + 'kovalchuk', + 'kovalenko', + 'kowalczyk', + 'kowalski', + 'kozlov', + 'krasniqi', + 'kravchenko', + 'kremer', + 'kristensen', + 'kristiansen', + 'kryeziu', + 'kucera', + 'kucerova', + 'kumar', + 'kumara', + 'kuznetsov', + 'kvaran', + 'kwok', + 'kwon', + 'laine', + 'laitinen', + 'lammy', + 'larsen', + 'larsson', + 'lau', + 'lavoie', + 'lebedev', + 'lefebvre', + 'lefevre', + 'lehtinen', + 'lehtonen', + 'leitner', + 'leka', + 'lekaj', + 'lenin', + 'leroy', + 'lewis', + 'li', + 'lincoln', + 'lindberg', + 'lindholm', + 'liu', + 'liyanage', + 'lombardi', + 'lopes', + 'lopez', + 'lovric', + 'lukic', + 'lund', + 'lungu', + 'luo', + 'ly', + 'lynch', + 'madrigal', + 'madsen', + 'maeda', + 'magnusson', + 'maier', + 'majerus', + 'makela', + 'makinen', + 'mamani', + 'mammadov', + 'mancini', + 'mariani', + 'maric', + 'marin', + 'marino', + 'markovic', + 'marques', + 'marroquin', + 'martinez', + 'martins', + 'matei', + 'matic', + 'matsumoto', + 'mayer', + 'mayr', + 'mccarthy', + 'mclaughlin', + 'mehmedovic', + 'mehmeti', + 'meijer', + 'mejia', + 'melnyk', + 'melo', + 'mendes', + 'mendez', + 'mercier', + 'messi', + 'messier', + 'meyer', + 'meyers', + 'micrachi', + 'mihhailov', + 'mikkelsen', + 'miller', + 'mohan', + 'molina', + 'moller', + 'moore', + 'mora', + 'morales', + 'moreau', + 'moreira', + 'moreno', + 'monroe', + 'moretti', + 'mori', + 'morin', + 'morina', + 'morozov', + 'morris', + 'mortensen', + 'moser', + 'moss', + 'mozart', + 'mulder', + 'muller', + 'munoz', + 'munteanu', + 'murati', + 'muratovic', + 'murphy', + 'murray', + 'mussolini', + 'nagy', + 'nakajima', + 'nakamura', + 'nakashima', + 'narayan', + 'navarro', + 'neilson', + 'nemcova', + 'nemec', + 'nguyen', + 'nielsen', + 'niemi', + 'nieminen', + 'nikolic', + 'nikolov', + 'nikolova', + 'nilsen', + 'nilsson', + 'nixon', + 'norodahl', + 'novak', + 'novakova', + 'novikov', + 'novotna', + 'novotny', + 'nowak', + 'nunes', + 'nunez', + 'nyman', + 'obama', + 'obrien', + 'oconnor', + 'ogawa', + 'oliveira', + 'oliynyk', + 'olofsson', + 'olsen', + 'olsson', + 'oneill', + 'orellana', + 'ortega', + 'ortiz', + 'orwell', + 'ozdemir', + 'ozturk', + 'pahk', + 'pahng', + 'pak', + 'parker', + 'patel', + 'patterson', + 'pavic', + 'pavlov', + 'pavlovic', + 'pedersen', + 'peeters', + 'pena', + 'pereira', + 'perera', + 'peretz', + 'perez', + 'peric', + 'persson', + 'petersen', + 'peterson', + 'petrov', + 'petrova', + 'petrovic', + 'pettersen', + 'pettersson', + 'phak', + 'pham', + 'phan', + 'phang', + 'phillips', + 'picasso', + 'pichler', + 'piero', + 'pinas', + 'pinto', + 'polishchuk', + 'popescu', + 'popov', + 'popovic', + 'portillo', + 'poulsen', + 'powell', + 'prasad', + 'prifti', + 'prochazka', + 'prochazkova', + 'putin', + 'quispe', + 'radic', + 'radu', + 'ramirez', + 'ramos', + 'rantanen', + 'rasmussen', + 'ravelli', + 'reagan', + 'rees', + 'reiter', + 'reuter', + 'reyes', + 'ribeiro', + 'ricci', + 'richardson', + 'ries', + 'rivas', + 'rivera', + 'rizzo', + 'roberts', + 'robertson', + 'robinson', + 'rocha', + 'rodrigues', + 'rodriguez', + 'rogers', + 'rojas', + 'romano', + 'romero', + 'roosevelt', + 'rossi', + 'rotari', + 'roux', + 'rowling', + 'rubio', + 'ruiz', + 'russo', + 'rusu', + 'ryang', + 'ryoo', + 'ryu', + 'saarinen', + 'sahin', + 'saito', + 'salas', + 'salihovic', + 'salminen', + 'salo', + 'salonen', + 'sanchez', + 'sanders', + 'santana', + 'sante', + 'santos', + 'sanz', + 'saric', + 'sasaki', + 'sato', + 'savic', + 'scheving', + 'schiltz', + 'schmid', + 'schmidt', + 'schmit', + 'schmitz', + 'schneider', + 'schroeder', + 'schulz', + 'schwarz', + 'seinfeld', + 'segura', + 'semjonov', + 'semyonov', + 'seoh', + 'sepulveda', + 'serrano', + 'shala', + 'sharma', + 'shehu', + 'shevchenko', + 'shevchuk', + 'shimizu', + 'silva', + 'simmons', + 'simonsen', + 'sinatra', + 'singh', + 'sirbu', + 'smirnov', + 'smit', + 'smith', + 'smyth', + 'sokolov', + 'solovyov', + 'sorensen', + 'sosa', + 'soto', + 'soung', + 'sousa', + 'stalin', + 'starmer', + 'steiner', + 'stoica', + 'stojanovic', + 'stoyanov', + 'stoyanova', + 'suarez', + 'subotic', + 'sullivan', + 'suzuki', + 'svensson', + 'svoboda', + 'svobodova', + 'szabo', + 'tahirovic', + 'takahashi', + 'tanaka', + 'teixeira', + 'thatcher', + 'thill', + 'thompson', + 'thomsen', + 'thomson', + 'thorarensen', + 'thorlacius', + 'tian', + 'tjin', + 'tkachenko', + 'todorov', + 'todorova', + 'tolstoy', + 'tomic', + 'torres', + 'toth', + 'tran', + 'tremblay', + 'tryniski', + 'tsui', + 'tuominen', + 'turcan', + 'turner', + 'turunen', + 'valenzuela', + 'valverde', + 'van den berg', + 'van dijk', + 'van dyk', + 'vargas', + 'vasilyev', + 'vasquez', + 'vassiljev', + 'vazquez', + 'velasquez', + 'vesela', + 'vesely', + 'vidovic', + 'villalba', + 'villalobos', + 'vinogradov', + 'virtanen', + 'visser', + 'vivaldi', + 'volkov', + 'vorobyov', + 'vukovic', + 'waage', + 'wagner', + 'walker', + 'walsh', + // 'wang', + 'watanabe', + 'weber', + 'weiss', + 'welter', + 'williams', + 'wilson', + 'wimmer', + 'winkler', + 'wisniewski', + 'wojcik', + 'wong', + 'wright', + 'wu', + 'xiao', + 'xu', + 'yamada', + 'yamaguchi', + 'yamamoto', + 'yamasaki', + 'yamashita', + 'yamazaki', + 'yang', + 'yeun', + 'yeung', + 'yi', + 'yildirim', + 'yildiz', + 'yilmaz', + 'yoshida', + 'yun', + 'zaytsev', + 'zhang', + 'zhao', + 'zhou', + 'zhu', + 'atchison', + 'dickinson', + + 'stevens', + 'watson', + 'koch', + 'peters', + 'jacobs', + 'abbas', + 'richards', + 'fisher', + 'kapoor', + 'andrews', + 'holmes', + 'dixon', + 'matthews', + 'keller', + 'armstrong', + 'gibson', + 'krishna', + 'burns', + 'browne', + 'lang', + 'mann', + 'burke', + 'davidson', + 'reynolds', + 'greene', + 'roth', + 'williamson', + 'webb', + 'choudhury', + 'gardner', + 'hart', + 'morrison', + 'carr', + 'cunningham', + 'lehmann', + 'freeman', + 'crawford', + 'dunn', + 'daniels', + 'sakamoto', + 'morton', + 'agarwal', + 'zimmermann', + 'hawkins', + 'kikuchi', + 'ansari', + 'carlsson', + 'pearson', + 'jennings', + 'stephens', + 'chopra', + 'yokoyama', + 'myers', + 'saunders', + 'papadopoulos', + 'higgins', + 'webster', + 'wilkinson', + 'kramer', + 'bergman', + 'meier', + 'baldwin', + 'stein', + 'hopkins', + 'stevenson', + 'rosenberg', + 'lindstrom', + 'hoffman', + 'mclean', + 'wolff', + 'vidal', + 'kaplan', + 'lawson', + 'perkins', + 'hofmann', + 'krause', + 'harper', + 'bashir', + 'bates', + 'atkinson', + 'walters', + 'guerra', + 'benson', + 'nicholson', + 'schmitt', + 'schubert', + 'holt', + 'kane', + 'fleming', + 'gunnarsson', + 'montgomery', + 'hess', + 'fowler', + 'vogt', + 'tavares', + 'sinclair', + 'milosevic', + 'chattopadhyay', + 'rowe', + 'fuller', + 'norris', + 'jankovic', + 'owens', + 'adler', + 'nash', + 'steele', + 'fitzgerald', + 'lowe', + 'osborne', + 'kraus', + 'tate', + 'reis', + 'buchanan', + 'makarov', + 'harding', + 'goldberg', + 'sandberg', + 'griffith', + 'guerrero', + 'bartlett', + 'zakharov', + 'walton', + 'farrell', + 'olson', + 'howe', + 'goldstein', + 'chaudhry', + 'nichols', +] diff --git a/data/lexicon/people/maleNames.js b/data/lexicon/people/maleNames.js new file mode 100644 index 0000000..9269b77 --- /dev/null +++ b/data/lexicon/people/maleNames.js @@ -0,0 +1,1328 @@ +//names with a distinctive signal that they identify as a male, internationally +// some are in ./switches/person-verb etc +export default [ + 'aarav', + 'aaron', + 'abdallah', + 'abdel', + 'abdoulaye', + 'abdul', + 'abdullah', + 'abdullo', + 'abdulrahman', + 'abe', + 'abel', + 'abraham', + 'abram', + 'abu', + 'abubakr', + 'abulfazl', + 'adam', + 'adama', + 'adan', + 'adi', + 'adolf', + 'adolfo', + 'adrian', + 'advik', + 'afonso', + 'agustin', + 'ahmad', + 'ahmed', + 'ahmet', + 'aiden', + 'aimar', + 'ajani', + 'alan', + 'albert', + 'alberto', + 'alden', + 'alec', + 'alejandro', + 'aleksandar', + 'aleksander', + 'alessandro', + 'alex', + 'alexander', + 'alexandru', + 'alfonso', + 'alfred', + 'ali', + 'aladdin', + 'allan', + 'allen', + 'alonso', + 'alonzo', + 'alphonso', + 'alton', + 'alvaro', + 'alvin', + 'amine', + 'amir', + 'amit', + 'ammanuel', + 'ammar', + 'amos', + 'anas', + 'ander', + 'andre', + 'andreas', + 'andrei', + 'andres', + 'andrew', + 'andy', + 'angel', + 'angelo', + 'anthony', + 'antoine', + 'anton', + 'antoni', + 'antonio', + 'antony', + 'aputsiaq', + 'arata', + 'archie', + 'ari', + 'ariel', + 'ariki', + 'arjun', + 'armaan', + 'armand', + 'armando', + 'arnav', + 'arnold', + 'aron', + 'arthur', + 'arturo', + 'aryan', + 'asahi', + 'augustus', + 'avery', + 'ayaan', + 'aykhan', + 'aziz', + 'bakary', + 'balazs', + 'bandar', + 'bandile', + 'banele', + 'barney', + 'barrett', + 'barry', + 'bart', + 'ben', + 'benito', + 'benjamin', + 'bennie', + 'benny', + 'berat', + 'bernard', + 'bernardo', + 'bernie', + 'bert', + 'bertram', + 'beshoi', + 'bibek', + 'bilal', + 'billie', + 'billy', + 'bishal', + 'blaine', + 'blake', + 'bobby', + 'boris', + 'boyd', + 'brad', + 'bradford', + 'bradley', + 'brady', + 'branden', + 'brandon', + 'brendan', + 'brendon', + 'brent', + 'brenton', + 'bret', + 'brett', + 'brian', + 'brice', + 'bruce', + 'bruno', + 'bryan', + 'bryce', + 'bryon', + 'buddy', + 'burt', + 'burton', + 'byron', + 'caleb', + 'calvin', + 'cameron', + 'carey', + 'carl', + 'carlos', + 'carlton', + 'carroll', + 'cary', + 'cecil', + 'cedric', + 'cesar', + 'chad', + 'charbel', + 'charles', + 'charley', + 'chas', + 'chester', + 'chris', + 'christopher', + 'ciaran', + 'clarence', + 'claude', + 'clay', + 'clayton', + 'clement', + 'cletus', + 'clifford', + 'clifton', + 'clint', + 'clyde', + 'cody', + 'colby', + 'cole', + 'colin', + 'collin', + 'colton', + 'conor', + 'conrad', + 'corey', + 'cornelius', + 'cory', + 'craig', + 'cristobal', + 'curt', + 'curtis', + 'cyril', + 'cyrus', + 'daan', + 'dale', + 'damian', + 'damien', + 'damion', + 'damon', + 'dan', + // 'dane', + 'daniel', + 'danny', + 'daren', + 'darin', + 'dario', + 'darius', + 'darnell', + 'darrel', + 'darrell', + 'darren', + 'darrin', + 'darryl', + 'daryl', + 'dave', + 'davi', + 'david', + 'deandre', + 'dejan', + 'delbert', + 'demetrius', + 'denis', + 'dennis', + 'denny', + 'deon', + 'derek', + 'derrick', + 'deshawn', + 'desmond', + 'deven', + 'devin', + 'dewayne', + 'dewey', + 'dexter', + 'diarmuid', + 'dillon', + 'dion', + 'dirk', + 'domingo', + 'dominic', + 'dominick', + 'dominik', + 'dominykas', + 'don', + 'donald', + 'donnell', + 'donnie', + 'donny', + 'donovan', + 'dorian', + 'doug', + 'douglas', + 'dovydas', + 'doyle', + 'dragan', + // 'drew', + 'duane', + 'dudley', + 'duncan', + 'dustin', + 'dwayne', + 'dwight', + 'dylan', + 'dyllan', + 'dmitry', + 'ebenezer', + 'ed', + 'eddie', + 'edgar', + 'edmond', + 'edmund', + 'edoardo', + 'eduardo', + 'edward', + 'edwardo', + 'edwin', + 'efrain', + 'efren', + 'eitan', + 'elbert', + 'eldon', + 'eli', + 'elias', + 'elijah', + 'elisha', + 'elliot', + 'elliott', + 'ellis', + 'elmer', + 'elton', + 'elvin', + 'elvis', + 'elwood', + 'emanuel', + 'emerson', + 'emery', + 'emil', + 'emilio', + 'emilis', + 'emirhan', + 'emmanuel', + 'emmett', + 'enoch', + 'enrique', + 'enzo', + 'eoin', + 'ergi', + 'eric', + 'erick', + 'erik', + 'ernest', + 'ernesto', + 'ernie', + 'errol', + 'ervin', + 'erwin', + 'esteban', + 'ethan', + 'eugene', + 'evan', + 'evens', + 'everett', + 'eymen', + 'ezra', + 'fabian', + 'fadi', + 'fahd', + 'federico', + 'felipe', + 'felix', + 'feng', + 'fernando', + 'fidel', + 'filip', + 'fionn', + 'fletcher', + 'floyd', + 'forrest', + 'francesco', + 'francis', + 'francisco', + 'franciszek', + 'frankie', + 'franklin', + 'franklyn', + 'fred', + 'freddie', + 'freddy', + 'frederick', + 'frederic', + 'fredrick', + 'fritz', + 'gabreal', + 'gabriel', + 'gabrielius', + 'galen', + 'garland', + 'garrett', + 'garry', + 'garth', + 'gary', + 'gavin', + 'geoffrey', + 'george', + 'gerald', + 'gerard', + 'gerardo', + 'gert', + 'gerry', + 'gilbert', + 'gilberto', + 'gino', + 'giorgis', + 'giovanni', + 'glen', + 'glenn', + 'gonzalo', + 'goran', + 'gordon', + 'grady', + 'graham', + 'greg', + 'gregg', + 'gregorio', + 'gregory', + 'grover', + 'guilherme', + 'guillermo', + 'gus', + 'gustavo', + 'habib', + 'hal', + 'halim', + 'hamza', + 'hank', + 'hans', + 'hao', + 'harlan', + 'harley', + 'harold', + 'harry', + 'haruhito', + 'haruki', + 'haruta', + 'haruto', + 'harvey', + 'hasan', + 'hassan', + 'hayato', + 'hayden', + 'heath', + 'hector', + 'heitor', + 'henri', + 'henrique', + 'henry', + 'herbert', + 'herman', + 'homer', + 'horace', + 'hossein', + 'howard', + 'hubert', + 'hugh', + 'hugo', + 'humberto', + 'huseyin', + 'huseyn', + 'hussain', + 'hussein', + 'hydar', + 'iain', + 'ian', + 'ibai', + 'ibrahim', + 'ichika', + 'ignacio', + 'igor', + 'ike', + 'iker', + 'ilija', + 'inuk', + 'inunnguaq', + 'ionut', + 'ira', + 'irvin', + 'irving', + 'irwin', + 'isaac', + 'isaiah', + 'isaias', + 'ishaan', + 'isiah', + 'ismael', + 'ismail', + 'issac', + 'itai', + 'itsuki', + 'ivan', + // 'jack', + // 'jackson', + 'jacob', + 'jacques', + 'jaden', + 'jaka', + 'jake', + 'jakob', + 'jakov', + 'jakub', + 'jamal', + 'james', + 'jameson', + 'jamison', + 'jared', + 'jarod', + 'jarrett', + 'jarrod', + 'jarvis', + 'jason', + 'jasper', + 'javier', + 'jayden', + 'jayson', + 'jed', + 'jeff', + 'jeffery', + 'jeffrey', + 'jeffry', + 'jerald', + 'jeremiah', + 'jeremy', + 'jermaine', + 'jerome', + 'jeronimo', + 'jerry', + 'jesus', + 'jian', + 'jim', + 'jimmie', + 'jimmy', + 'jimi', + 'joao', + 'joaquin', + 'joe', + 'joel', + 'joesph', + 'joey', + 'john', + 'johnathan', + 'johnathon', + 'johnie', + 'johnnie', + 'johnny', + 'jokubas', + 'jon', + 'jonah', + 'jonas', + 'jonathan', + 'jonathon', + 'jonny', + 'jordi', + 'jordon', + 'jorge', + 'jose', + 'joseph', + 'josh', + 'joshua', + 'josiah', + 'josue', + 'juan', + 'julen', + 'julian', + 'julien', + 'julio', + 'julius', + 'justin', + 'kacper', + 'kajus', + 'kamal', + 'kanata', + 'karim', + 'karl', + 'kaspar', + 'kathem', + 'kauri', + 'keenan', + 'keir', + 'keith', + 'ken', + 'kendrick', + 'kenneth', + 'kenny', + 'kenton', + 'kermit', + 'keven', + 'kevin', + 'khaled', + 'kieran', + 'kip', + 'kirk', + 'kirollos', + 'kristian', + 'kristopher', + 'kurt', + 'kurtis', + 'kyle', + 'lamar', + 'lamont', + 'landon', + 'larry', + 'lars', + 'laurence', + 'lawrence', + 'leandro', + 'leevi', + 'leland', + 'len', + 'lenny', + 'leon', + 'leonard', + 'leonardo', + 'leonel', + 'lester', + 'lethabo', + 'levente', + 'levi', + 'liam', + 'lionel', + 'lior', + 'lloyd', + 'logan', + 'lonnie', + 'loren', + 'lorenzo', + 'lou', + 'louie', + 'louis', + 'lovro', + 'lowell', + 'lucas', + 'luciano', + 'luigi', + 'luis', + 'luiz', + 'luka', + 'lukas', + 'luke', + 'luther', + 'luuk', + 'lyle', + 'lyndon', + 'maayan', + 'macaulay', + // 'mack', + 'mahamadou', + 'mahammad', + 'mahdi', + 'mahesh', + 'mahmoud', + 'majd', + 'maksim', + 'malachai', + 'malachy', + 'malcolm', + 'malik', + 'mamadou', + 'manish', + 'manuel', + 'marc', + 'marcel', + 'marcell', + 'marco', + 'marcos', + 'marcus', + 'mario', + // 'mark', + 'markel', + 'marko', + 'markos', + 'markus', + 'marlin', + 'marlon', + 'marquis', + 'marshall', + 'marti', + 'martim', + 'martin', + 'marty', + 'marvin', + 'matej', + 'mateo', + 'matheus', + 'mathew', + 'mathis', + 'matias', + 'matt', + 'matteo', + 'matthew', + 'mattia', + 'matus', + 'matyas', + 'maurice', + 'mauricio', + 'maximilian', + 'maximiliano', + 'maxwell', + 'mehdi', + 'mehmet', + 'melvin', + 'merle', + 'merrill', + 'mervin', + 'micah', + 'michael', + 'michal', + 'micheal', + 'michel', + 'micky', + 'miguel', + 'mihai', + 'mikaere', + 'mike', + 'mikel', + 'mikolaj', + 'milhouse', + 'milo', + 'milos', + 'milton', + 'minato', + 'minik', + 'mitch', + 'mitchell', + 'modibo', + 'moe', + 'mohamad', + 'mohamed', + 'mohammad', + 'mohammed', + 'moises', + 'monte', + 'monty', + 'moses', + 'moshe', + 'moussa', + 'muhamed', + 'muhammad', + 'muhammed', + 'murad', + 'mustafa', + 'mustapha', + 'myles', + 'myron', + 'nahom', + 'nate', + 'nathan', + 'nathanael', + 'nathaniel', + 'nathy', + 'neal', + 'ned', + 'neil', + 'nelson', + 'neville', + 'nicholas', + 'nickolas', + 'nicolas', + 'nigel', + 'niilo', + 'nik', + 'nikau', + 'nikhil', + 'nikola', + 'niles', + 'noah', + 'noam', + 'noel', + 'nojus', + 'nolan', + 'nomaan', + 'norbert', + 'norman', + 'nuka', + 'octavio', + 'oier', + 'oliver', + 'omar', + 'omer', + 'ondrej', + 'ori', + 'orville', + 'osama', + 'oscar', + 'oskar', + 'osman', + 'osvaldo', + 'otis', + 'otto', + 'oumar', + 'owen', + 'pablo', + 'padraig', + 'patrick', + 'paul', + 'paulo', + 'paulos', + 'pedro', + 'percy', + 'petar', + 'pete', + 'peter', + 'petros', + 'phil', + 'philip', + 'phillip', + 'pierre', + 'prakash', + 'prem', + 'preston', + 'quentin', + 'quincy', + 'quinton', + 'rachid', + 'rafael', + 'ralf', + 'ralph', + 'ramiro', + 'ramon', + 'randal', + 'randall', + 'randolph', + 'raphael', + 'rashad', + 'rasmus', + 'raul', + 'rawiri', + 'rayan', + 'raymond', + 'reggie', + 'reginald', + 'regis', + 'reid', + 'reuben', + 'reyansh', + 'reynaldo', + 'reza', + 'rhett', + 'ricardo', + 'riccardo', + 'richard', + 'richie', + 'rick', + 'rickey', + 'rickie', + 'ricky', + 'rico', + 'riley', + 'roan', + 'robbie', + 'robby', + 'robert', + 'roberto', + 'rocco', + 'roderick', + 'rodger', + 'rodney', + 'rodolfo', + 'rodrigo', + 'roel', + 'rogelio', + 'roger', + 'rohan', + 'roland', + 'rolando', + 'roman', + 'romeo', + 'ron', + 'ronald', + 'ronnie', + 'ronny', + 'rory', + 'roscoe', + 'ross', + 'roy', + 'royce', + 'ruben', + 'rubin', + 'rudolph', + 'rudy', + 'rufus', + 'rupert', + 'russ', + 'russel', + 'russell', + 'ryan', + 'ryou', + 'salik', + 'salvatore', + 'sam', + 'samkelo', + 'sammie', + 'sammy', + 'samuel', + 'santino', + 'saqib', + 'saul', + 'scot', + 'scott', + 'scottie', + 'scotty', + 'seamus', + 'sean', + 'sebastian', + 'sekou', + 'selim', + 'sergei', + 'sergio', + 'seth', + 'seymour', + 'shahid', + 'shane', + 'shaquille', + 'shaun', + 'shawn', + 'shayne', + 'sheldon', + 'shelton', + 'sherman', + 'sid', + 'siddhartha', + 'sidney', + 'sigmund', + 'silas', + 'silvio', + 'simon', + 'siyabonga', + 'solomon', + 'souleymane', + 'souta', + 'spencer', + 'stan', + 'stanislaw', + 'stanley', + 'stefan', + 'stephan', + 'stephen', + 'steve', + 'steven', + // 'stevenson', + 'stevie', + 'stewart', + 'stuart', + 'suraj', + 'sylvester', + 'szymon', + 'tadgh', + 'taha', + 'taichi', + 'taika', + 'tanner', + 'tareq', + 'tatsuki', + 'ted', + 'teddy', + 'terence', + 'terrance', + 'terrell', + 'terrence', + 'terry', + 'thad', + 'thaddeus', + 'theo', + 'theodore', + 'thiago', + 'thom', + 'thomas', + 'tim', + 'timmy', + 'timothy', + 'titus', + 'tobias', + 'toby', + 'tod', + 'todd', + 'tom', + 'tomas', + 'tommaso', + 'tommie', + 'tommy', + 'tomoharu', + 'tony', + 'travis', + 'trent', + 'trenton', + 'trevor', + 'trey', + 'tristan', + 'troy', + 'truman', + 'tunar', + 'turki', + 'ty', + 'tyler', + 'tyrone', + 'tyson', + 'ughur', + 'ulysses', + 'unax', + 'usman', + 'valentin', + 'valentine', + 'vance', + 'vicente', + 'victor', + 'vihaan', + 'viktor', + 'vince', + 'vincent', + 'virgil', + 'vivaan', + 'vladimir', + 'vojtech', + 'wallace', + 'wally', + 'walt', + 'walter', + 'waylon', + 'wayne', + 'wei', + 'wendell', + 'wes', + 'wesley', + 'weston', + 'wilbert', + 'wilbur', + 'wiley', + 'wilfred', + 'wilfredo', + 'willard', + 'william', + 'willie', + 'willis', + 'winston', + 'wojciech', + 'wolfgang', + 'woodrow', + 'wout', + 'wouter', + 'wyatt', + 'xavier', + 'xhoel', + 'yahli', + 'yanis', + 'yassin', + 'yassine', + 'yonas', + 'yonatan', + 'yonathan', + 'yong', + 'yosef', + 'yousouf', + 'youssef', + 'yusif', + 'yusuf', + 'yuuma', + 'yuval', + 'zachariah', + 'zachary', + 'zachery', + 'zack', + 'zackary', + 'zahid', + 'zakaria', + 'zan', + 'zane', + 'zoran', + + 'adolph', + 'adriano', + 'aidan', + 'alain', + 'alastair', + 'albrecht', + 'aleksandr', + 'aleksei', + 'alexandre', + 'alexandros', + 'alf', + 'alistair', + 'alphonse', + 'amar', + 'anatoli', + 'anatoliy', + 'anatoly', + 'anders', + 'andrej', + 'andrzej', + 'anwar', + 'archibald', + 'armin', + 'arnaud', + 'arno', + 'artem', + 'artie', + 'artur', + 'augusto', + 'bartholomew', + 'benson', + 'bernhard', + 'bertrand', + 'bjorn', + 'bogdan', + 'branislav', + 'buster', + 'cal', + 'camillo', + 'camilo', + 'carlo', + 'chet', + 'christoph', + 'christophe', + 'christos', + 'claudio', + 'claus', + 'clemens', + 'clive', + 'connor', + 'constantin', + 'cornelis', + 'cristiano', + 'danilo', + 'deepak', + 'dieter', + 'dietmar', + 'dietrich', + 'dimitri', + 'dimitris', + 'dinesh', + 'dmitri', + 'dmitry', + 'ebenezer', + 'eduard', + 'eliot', + 'emiliano', + 'enrico', + 'erich', + 'ernst', + 'eugen', + 'evgeny', + 'fabien', + 'fabio', + 'fabrice', + 'fabrizio', + 'ferdinand', + 'ferdinando', + 'fergus', + 'florian', + 'fraser', + 'frederic', + 'frederik', + 'fredrik', + 'friedrich', + 'frits', + 'fyodor', + 'gabe', + 'gareth', + 'geoff', + 'georg', + 'georges', + 'georgi', + 'georgios', + 'georgy', + 'gerhard', + 'gerrit', + 'giacomo', + 'giles', + 'gilles', + 'giorgi', + 'giorgio', + 'giuseppe', + 'godfrey', + 'gord', + 'gottfried', + 'gregor', + 'guido', + 'guillaume', + 'gunnar', + 'gunter', + 'gunther', + 'gustaf', + 'gustav', + 'gustave', + 'gyorgy', + 'hamid', + 'harri', + 'heinrich', + 'hendrik', + 'henrik', + 'henryk', + 'hermann', + 'horacio', + 'horatio', + 'howie', + 'humphrey', + 'jaroslav', + 'jens', + 'johan', + 'johann', + 'johannes', + 'josef', + 'jozef', + 'kamil', + 'khalid', + 'kingsley', + 'kiril', + 'kirill', + 'klaus', + 'konrad', + 'krzysztof', + 'kyls', + 'lambert', + 'laszlo', + 'laurent', + 'lennart', + 'leonid', + 'leopold', + 'linus', + 'luc', + 'lucien', + 'ludovic', + 'ludvig', + 'ludwig', + 'maciej', + 'magnus', + 'manfred', + 'manny', + 'marcello', + 'marcelo', + 'marcin', + 'mariano', + 'marios', + 'marius', + 'masoud', + 'mathias', + 'mathieu', + 'matthias', + 'mattias', + 'mervyn', + 'mick', + 'mickey', + 'mikhail', + 'moritz', + 'nate', + 'ned', + 'newton', + 'nguyen', + 'niels', + 'niklas', + 'nikolai', + 'nikolay', + 'nils', + 'norm', + 'olaf', + 'olav', + 'oleksandr', + 'olivier', + 'oswald', + 'paolo', + 'pascal', + 'patrik', + 'paulie', + 'pavel', + 'pavlo', + 'petr', + 'petro', + 'philipp', + 'philippe', + 'pieter', + 'pietro', + 'piotr', + 'pravit', + 'pyotr', + 'rahul', + 'rainer', + 'rajesh', + 'raoul', + 'rashid', + 'recep', + 'reece', + 'rolf', + 'ronan', + 'rosario', + 'rudolf', + 'saeed', + 'sal', + 'sami', + 'samir', + 'sandeep', + 'sandro', + 'sanjay', + 'satoshi', + 'sebastien', + 'sepp', + 'serge', + 'sergei', + 'sergey', + 'shlomo', + 'sigmund', + 'silvio', + 'slobodan', + 'soren', + 'stanislav', + 'stefano', + 'stefanos', + 'stu', + 'suresh', + 'sven', + 'svend', + 'syed', + 'theodor', + 'tomasz', + 'ulrich', + 'ulrik', + 'umberto', + 'uri', + 'val', + 'vasily', + 'vern', + 'vernon', + 'vic', + 'vincenzo', + 'vivek', + 'vlad', + 'vladislav', + 'volodymyr', + 'walt', + 'werner', + 'wilfrid', + 'wilfried', + 'wilhelm', + 'willy', + 'winfried', + 'winslow', + 'yann', + 'yannick', + 'yaroslav', + 'yevgeni', + 'yevgeny', + 'yuen', + 'yuri', + 'yuriy', + 'yury', + 'zac', + 'zach', + + // 'chase', +] diff --git a/data/lexicon/people/people.js b/data/lexicon/people/people.js new file mode 100644 index 0000000..8683ecc --- /dev/null +++ b/data/lexicon/people/people.js @@ -0,0 +1,221 @@ +export default [ + //famous people with names that are hard to recognize independendtly + //male + 'hitler', + 'ronaldo', + 'ashton kutcher', + 'barack obama', + 'cardinal wolsey', + 'carson palmer', + 'denzel washington', + 'dick wolf', + 'emeril lagasse', + 'hulk hogan', + 'kanye west', + 'kiefer sutherland', + 'kobe bryant', + 'lebron james', + 'messiaen', + 'mitt romney', + 'mubarek', + 'ray romano', + 'rod stewart', + 'ronaldinho', + 'rush limbaugh', + 'saddam hussain', + 'slobodan milosevic', + 'tiger woods', + 'valentino rossi', + 'van gogh', + 'niles crane', + 'run dmc', + + // one-named artists/athletes + 'dante', + 'keats', + 'shakespeare', + 'poe', + 'rumi', + 'chaucer', + 'bronte', + 'voltaire', + 'plato', + 'socrates', + 'aristotle', + 'confucius', + 'beyonce', + 'liberace', + 'beck', + 'nas', + 'nostradamus', + 'xzibit', + 'moby', + 'coolio', + 'banksy', + 'sinbad', + 'kesha', + 'nelly', + 'monet', + 'moliere', + 'rembrandt', + 'warhol', + 'degas', + 'rothko', + 'morrissey', + 'bono', + 'chyna', + 'puff daddy', + 'drake', + 'enya', + 'gotye', + 'macklemore', + 'ne yo', + 'pele', + 'raffi', + 'rihanna', + 'rivaldo', + 'eminem', + 'rupaul', + 'rza', + 'santigold', + 'timbaland', + 'yanni', + // 'will.i.am', + + //tricky female names + 'halle berry', + 'jk rowling', + 'oprah winfrey', + 'paris hilton', + 'reese witherspoon', + 'scarlett johansson', + 'theresa may', + 'tyra banks', + 'wednesday adams', + 'miranda july', + 'lady gaga', + + //sometimes firstname, sometimes lastname + 'brock', + 'carson', + 'clinton', + 'dalton', + 'harrison', + 'tatum', + 'effie', + 'ezekiel', + 'gaston', + 'inez', + 'jefferson', + 'lee', + 'nettie', + 'ora', + 'palmer', + 'piper', + 'humphrey', + 'raisa', + // 'sung', + 'taylor', + 'reilly', + 'warren', + 'woode', + + 'al capone', + 'al pacino', + 'archimedes', + 'avril lavigne', + 'ayn rand', + 'benazir bhutto', + 'bill gates', + 'bing crosby', + 'captain beefheart', + 'chopin', + 'christian bale', + 'conan', + 'cthulhu', + 'dalai lama', + 'darth vader', + 'demi lovato', + 'diego maradona', + 'doctor who', + 'emile zatopek', + 'florence nightingale', + 'frederic chopin', + 'haile selassie', + 'harrison ford', + 'he man', + 'henry ford', + 'humphrey bogart', + 'iron man', + 'jrr tolkien', + 'jfk', + 'jack the ripper', + 'jawaharlal nehru', + 'jay z', + 'kid cudi', + 'lech walesa', + 'mata hari', + 'maya angelou', + 'merlin', + 'napoleon', + 'pocahontas', + 'rachmaninoff', + 'ringo starr', + 'robin hood', + 'santa claus', + 'sherlock holmes', + 'shia labeouf', + 'snoop dogg', + 'snow white', + 'spider man', + 'spiderman', + 'superman', + 'thor', + 'tupac shakur', + 'usain bolt', + 'vin diesel', + 'virginia woolf', + 'walt disney', + 'will ferrell', + 'wiz khalifa', + 'yoko onen', + 'yoko ono', + + // first+last names + 'bertil', + 'camillo', + 'eustace', + 'hedwig', + 'hilde', + 'ilias', + 'oleg', + 'pilar', + 'reilley', + 'reinhold', + 'siegfried', + 'swami', + 'takashi', + 'tatyana', + 'tripp', + 'tully', + 'wolfram', + 'yuji', + 'yvan', + 'yves', + 'frans', + 'franz', + 'giannis', + 'ferguson', + 'rashid', + 'newman', + 'goodwin', + 'bhatt', + 'lu', + 'markov', + 'husain', + 'hammond', + 'hamid', + 'perry', + 'mason', + // '', +] diff --git a/data/lexicon/places/cities.js b/data/lexicon/places/cities.js new file mode 100644 index 0000000..dfe75d2 --- /dev/null +++ b/data/lexicon/places/cities.js @@ -0,0 +1,502 @@ +export default [ + 'aalborg', + 'aarhus', + 'abidjan', + 'abu dhabi', + 'ahmedabad', + 'almaty', + 'amman', + 'amsterdam', + 'ankara', + 'antwerp', + 'aqaba', + 'ashdod', + 'ashgabat', + 'athens', + 'auckland', + 'baku', + 'bangalore', + 'bangkok', + 'banja luka', + 'barcelona', + 'barranquilla', + 'basel', + 'beijing', + 'beirut', + 'belgrade', + 'bergen', + 'berlin', + 'bern', + 'birmingham', + 'bogota', + 'brasilia', + 'bratislava', + 'brisbane', + 'brussels', + 'bucharest', + 'budapest', + 'buenos aires', + 'burgas', + 'bursa', + 'busan', + 'cairo', + 'calgary', + 'cape town', + 'caracas', + 'cebu', + 'chennai', + 'chiang mai', + 'chicago', + 'chittagong', + 'christchurch', + 'cologne', + 'colombo', + 'constanta', + 'copenhagen', + 'cork', + 'craiova', + 'curitiba', + 'daegu', + 'daejeon', + 'dakar', + 'damascus', + 'daugavpils', + 'dhaka', + 'doha', + 'dublin', + 'durban', + 'dushanbe', + 'edmonton', + 'eindhoven', + 'fes', + 'frankfurt', + 'galway', + 'gdansk', + 'geneva', + 'genoa', + 'ghent', + 'giza', + 'gothenburg', + 'graz', + 'guadalajara', + 'guangzhou', + 'haifa', + 'hamburg', + // 'hamilton', + 'hanoi', + 'havana', + 'helsinki', + 'heraklion', + 'ho chi minh', + 'homs', + // 'houston', + 'incheon', + 'istanbul', + 'jakarta', + 'kabul', + 'kampala', + 'kandy', + 'kaohsiung', + 'karachi', + 'karaj', + 'kaunas', + 'kharkiv', + 'kiev', + 'kingston', + 'klaipeda', + // 'kobe', + 'kopavogur', + 'kosice', + 'krakow', + 'kuala lumpur', + 'la plata', + 'lausanne', + 'liege', + 'lima', + 'limassol', + 'linz', + 'lisbon', + 'liverpool', + 'london', + 'los angeles', + 'lviv', + 'lyon', + 'madrid', + 'malmo', + 'manchester', + 'mandalay', + 'manila', + 'maribor', + 'marseille', + 'medellin', + 'melbourne', + 'milan', + 'minsk', + 'miskolc', + 'montevideo', + 'montreal', + 'moscow', + 'mumbai', + 'munich', + 'nagoya', + 'nantes', + 'naples', + 'navan', + 'new delhi', + 'new taipei', + 'new york', + 'odessa', + 'osaka', + 'oslo', + 'ottawa', + 'palermo', + 'paris', + 'patras', + 'perth', + 'petah tikva', + 'philadelphia', + 'phnom penh', + 'phoenix', + 'pilsen', + 'piraeus', + 'port elizabeth', + 'porto', + 'poznan', + 'prague', + 'pretoria', + 'puebla', + 'pyongyang', + 'quito', + 'reykjavik', + 'riga', + 'rio de janeiro', + 'rome', + 'rosario', + 'rotterdam', + 'saint petersburg', + // 'salvador', + 'salzburg', + 'san jose', + 'san salvador', + // 'santiago', + 'sapporo', + 'seoul', + 'seville', + 'shanghai', + 'shenzhen', + 'skopje', + 'stockholm', + 'stuttgart', + // 'sydney', + 'taichung', + 'tainan', + 'taipei', + 'tallinn', + 'tampere', + 'tangier', + 'tartu', + 'tbilisi', + 'tegucigalpa', + 'tehran', + 'tel aviv', + 'the hague', + 'thessaloniki', + 'tianjin', + 'tilburg', + 'timisoara', + 'tirana', + 'tokyo', + 'toronto', + 'toulouse', + 'trondheim', + 'tunis', + 'turin', + 'turku', + 'ulan bator', + 'utrecht', + 'valencia', + 'vancouver', + 'vaughn', + 'varna', + 'vernon', + 'vienna', + 'vilnius', + 'warsaw', + 'wellington', + 'wexford', + 'wicklow', + 'winnipeg', + 'winterthur', + 'wroclaw', + 'yangon', + 'yekaterinburg', + 'yerevan', + 'yokohama', + 'zagreb', + 'zurich', + + 'delhi', + 'sao paulo', + 'wuhan', + 'lagos', + 'nyc', + 'dongguan', + 'kinshasa', + 'chongqing', + 'chengdu', + 'baghdad', + 'nanjing', + 'nanchong', + 'xian', + 'lahore', + 'shenyang', + 'hangzhou', + 'rio', + 'harbin', + 'taian', + 'suzhou', + 'shantou', + 'bengaluru', + 'kolkata', + 'jinan', + 'zhengzhou', + 'riyadh', + 'changchun', + 'dalian', + 'chattogram', + 'kunming', + 'qingdao', + 'kano', + 'foshan', + 'puyang', + 'ibadan', + 'wuxi', + 'xiamen', + 'tianshui', + 'ningbo', + 'shiyan', + 'taiyuan', + 'tangshan', + 'hefei', + 'zibo', + 'zhongshan', + 'changsha', + 'urumqi', + 'dubai', + 'surat', + 'jeddah', + 'shijiazhuang', + 'kanpur', + 'kyiv', + 'luanda', + 'quezon', + 'addis ababa', + 'nairobi', + 'jaipur', + 'dar es salaam', + 'lanzhou', + 'yunfu', + 'basrah', + 'mogadishu', + 'faisalabad', + 'izmir', + 'izmir', + 'lucknow', + 'fortaleza', + 'surabaya', + 'belo horizonte', + 'nanchang', + 'mashhad', + 'nagpur', + 'maracaibo', + 'santo domingo', + 'al mawsil al jadidah', + 'johannesburg', + 'kowloon', + 'al basrah al qadimah', + 'dadonghai', + 'medellin', + 'tashkent', + 'algiers', + 'khartoum', + 'accra', + 'guayaquil', + 'ordos', + 'sanaa', + 'jilin', + 'camayenne', + 'indore', + 'iztapalapa', + 'conakry', + 'bayan nur', + 'maracay', + 'medan', + 'rawalpindi', + 'mosul', + 'bandung', + 'soweto', + 'kallakurichi', + 'rabat', + 'aleppo', + 'kunshan', + 'patna', + 'bhopal', + 'manaus', + 'xinyang', + 'kaduna', + 'isfahan', + 'ludhiana', + 'san diego', + + 'port au prince', + 'brazzaville', + 'baotou', + 'tijuana', + 'dallas', + 'medina', + 'tripoli', + 'volgograd', + 'omsk', + 'mecca', + 'makassar', + 'asuncion', + 'recife', + 'san antonio', + 'changzhou', + 'mendoza', + 'marrakesh', + 'san francisco', + 'la paz', + 'jerusalem', + 'fort worth', + 'indianapolis', + 'sarajevo', + 'muscat', + 'salem', + 'sheffield', + 'seattle', + 'denver', + 'el paso', + 'detroit', + 'islamabad', + 'kirkuk', + 'mississauga', + 'boston', + 'nantong', + 'guadalupe', + 'bristol', + 'milwaukee', + 'kyoto', + 'cancun', + 'portland', + 'cordoba', + 'tabriz', + 'novosibirsk', + 'benghazi', + 'memphis', + 'oran', + 'glasgow', + 'gold coast', + 'zhangzhou', + 'libreville', + 'dortmund', + 'vladivostok', + 'irkutsk', + 'duesseldorf', + 'albuquerque', + 'port said', + 'nashville', + 'macau', + 'fresno', + 'hannover', + 'leicester', + 'leipzig', + 'sacramento', + 'santa fe', + 'dresden', + 'tomsk', + 'long beach', + 'staten island', + 'kawaguchi', + 'cardiff', + 'san juan', + 'edinburgh', + 'atlanta', + 'miami', + 'santa marta', + 'oakland', + 'nagasaki', + 'gaza', + 'newcastle', + 'zanzibar', + 'tulsa', + 'kandahar', + 'wichita', + 'new orleans', + 'arlington', + 'cleveland', + 'fukuyama', + 'bakersfield', + 'honolulu', + 'canberra', + 'halifax', + 'nagano', + 'anaheim', + 'raleigh', + 'santa ana', + 'islington', + 'anapolis', + 'saint louis', + 'butuan', + 'pittsburgh', + 'gujrat', + 'anchorage', + 'windsor', + 'strasbourg', + 'belfast', + 'san pedro', + 'windhoek', + 'chengzhong', + 'wuzhou', + 'peking', + + // india state-capitals + 'agartala', + 'aizawl', + 'amaravati', + 'bhubaneshwar', + 'dehradun', + 'dispur', + 'gandhinagar', + 'gangtok', + 'hyderabad', + 'imphal', + 'itanagar', + 'kohima', + 'panaji', + 'raipur', + 'ranchi', + 'shillong', + 'shimla', + + // relevant european cities + 'venice', + 'bari', + 'catania', + 'verona', + 'messina', + 'padua', + 'prato', + 'trieste', + 'cagliari', + 'ancona', + 'rennes', + 'reims', + 'toulon', + 'montpellier', + 'le mans', + 'dunkirk', + 'versailles', + + 'salt lake city', +] diff --git a/data/lexicon/places/countries.js b/data/lexicon/places/countries.js new file mode 100644 index 0000000..b1180ad --- /dev/null +++ b/data/lexicon/places/countries.js @@ -0,0 +1,251 @@ +export default [ + 'afghanistan', + 'albania', + 'algeria', + 'america', + 'andorra', + 'angola', + 'anguilla', + 'antarctica', + 'antigua and barbuda', + 'argentina', + 'armenia', + 'aruba', + 'australia', + 'austria', + 'azerbaijan', + 'bahamas', + 'bahrain', + 'bangladesh', + 'barbados', + 'belarus', + 'belgium', + 'belize', + 'benin', + 'bermuda', + 'bhutan', + 'bolivia', + 'bonaire', + 'bosnia and herzegovina', + 'botswana', + 'bouvet island', + 'brazil', + 'british virgin islands', + 'brunei', + 'bulgaria', + 'burkina faso', + 'burma', + 'burundi', + 'cambodia', + 'cameroon', + 'canada', + 'cape verde', + 'cayman islands', + 'central african republic', + 'chile', + 'china', + 'christmas island', + 'cocos islands', + 'colombia', + 'comoros', + 'congo brazzaville', + 'cook islands', + 'costa rica', + 'croatia', + 'cuba', + 'curacao', + 'cyprus', + 'czech republic', + 'czechia', + 'denmark', + 'djibouti', + 'dominica', + 'dominican republic', + 'dr congo', + 'east timor', + 'ecuador', + 'egypt', + 'el salvador', + 'england', + 'equatorial guinea', + 'eritrea', + 'estonia', + 'ethiopia', + 'falkland islands', + 'faroe islands', + 'fiji', + 'finland', + 'france', + 'french guiana', + 'french polynesia', + 'gabon', + 'gambia', + 'georgia', + 'germany', + 'ghana', + 'gibraltar', + 'greece', + 'greenland', + 'grenada', + 'guadeloupe', + 'guam', + 'guatemala', + 'guernsey', + 'guinea bissau', + 'guinea', + 'guyana', + 'haiti', + 'honduras', + 'hong kong', + 'hungary', + 'iceland', + 'india', + 'indonesia', + 'iran', + 'iraq', + 'ireland', + 'isle of man', + 'israel', + 'italy', + 'ivory coast', + 'jamaica', + 'japan', + 'jersey', + 'kazakhstan', + 'keeling islands', + 'kenya', + 'kiribati', + 'kosovo', + 'kuwait', + 'kyrgyzstan', + 'laos', + 'latvia', + 'lebanon', + 'lesotho', + 'liberia', + 'libya', + 'liechtenstein', + 'lithuania', + 'luxembourg', + 'macao', + 'macedonia', + 'madagascar', + 'malawi', + 'malaysia', + 'maldives', + 'mali', + 'malta', + 'marshall islands', + 'martinique', + 'mauritania', + 'mauritius', + 'mayotte', + 'mexico', + 'micronesia', + 'moldova', + 'monaco', + 'mongolia', + 'montenegro', + 'montserrat', + 'morocco', + 'mozambique', + 'myanmar', + 'namibia', + 'nauru', + 'nepal', + 'netherlands', + 'new zealand', + 'nicaragua', + 'niger', + 'nigeria', + 'niue', + 'norfolk island', + 'north korea', + 'northern mariana islands', + 'norway', + 'oman', + 'pakistan', + 'palau', + 'palestine', + 'panama', + 'papua new guinea', + 'paraguay', + 'peru', + 'philippines', + 'pitcairn islands', + 'poland', + 'portugal', + 'puerto rico', + 'qatar', + 'republic of ireland', + 'romania', + 'russia', + 'rwanda', + 'saint helena', + 'saint lucia', + 'saint martin', + 'samoa', + 'san marino', + 'saudi arabia', + 'scotland', + 'senegal', + 'serbia', + 'seychelles', + 'sierra leone', + 'singapore', + 'sint maarten', + 'slovakia', + 'slovenia', + 'solomon islands', + 'somalia', + 'south africa', + 'south korea', + 'korea', + 'south sudan', + 'spain', + 'sri lanka', + 'sudan', + 'suriname', + 'swaziland', + 'sweden', + 'switzerland', + 'syria', + 'taiwan', + 'tajikistan', + 'tanzania', + 'thailand', + 'timor leste', + 'togo', + 'tokelau', + 'tonga', + 'trinidad and tobago', + 'trinidad tobago', + 'tunisia', + 'turkey', + 'turkmenistan', + 'turks and caicos islands', + 'tuvalu', + 'uk', + 'us virgin islands', + 'uganda', + 'ukraine', + 'united arab emirates', + 'united kingdom', + 'united states of america', + 'united states', + 'uruguay', + 'usa', + 'ussr', + 'uzbekistan', + 'vanuatu', + 'vatican city', + 'venezuela', + 'vietnam', + 'wales', + 'wallis and futuna', + 'yemen', + 'zambia', + 'zimbabwe', + `cote de ivoire`, + // 'jordan', //... or a name? +] diff --git a/data/lexicon/places/places.js b/data/lexicon/places/places.js new file mode 100644 index 0000000..892db51 --- /dev/null +++ b/data/lexicon/places/places.js @@ -0,0 +1,348 @@ +export default [ + //some of the busiest airports in the world from + //https://www.world-airport-codes.com/world-top-30-airports.html + 'ams', + 'atl', + 'bcn', + 'bkk', + 'cdg', + 'cgk', + 'clt', + 'den', + 'dfw', + 'dxb', + 'fco', + 'fra', + 'hkg', + 'hnd', + 'iax', + 'icn', + 'ist', + 'jfk', + 'kul', + 'las', + 'lax', + 'lgw', + 'lhr', + 'mco', + 'muc', + 'ord', + 'pek', + 'phl', + 'phx', + 'sfo', + 'syd', + 'yyz', + + // bodies of water + 'antarctic ocean', + 'arctic ocean', + 'atlantic ocean', + 'everglades', + 'great britain', + 'great lakes', + 'indian ocean', + 'new england', + 'pacific ocean', + 'red sea', + 'adriadic', + + // rivers + 'nile', + 'ganges', + 'mekong', + 'thames', + 'danube', + 'yangtze', + 'orinoco', + 'seine', + 'rio grande', + 'godavari', + + //continents + 'africa', + 'europe', + 'americas', + 'asia', + + //some notable neighbourhoods (just #Place) + 'midtown', + 'downtown', + 'uptown', + 'the bronx', + 'brooklyn', + 'manhattan', + 'greenwich', + 'soho', + 'harlem', + 'chinatown', + 'the hamptons', + 'beverly hills', + 'bel air', + 'malibu', + 'gay village', + 'orange county', + 'sunderland', + + // places with their own timezones + 'tahiti', + 'chatham', + 'pitcairn', + 'azores', + 'magadan', + 'hovd', + 'vostok', + 'wake island', + 'anadyr', + 'ulaanbaatar', + 'krasnoyarsk', + 'indochina', + 'yakutsk', + 'chamorro', + 'chuuk', + 'kosrae', + 'sakhalin', + + // US national monuments + 'alhambra', + 'arc de triomphe', + 'browns canyon', + 'carrizo plain', + 'cedar breaks', + 'cedar falls', + 'chichen itza', + 'chimney rock', + 'chiricahua', + 'colosseum', + 'hovenweep', + 'kazan kremlin', + 'lincoln memorial', + 'machu picchu', + 'neuschwanstein', + 'papahanaumokuakea', + 'parthenon', + 'pompeii', + 'taj mahal', + 'teotihuacan', + 'tonto', + 'tsarskoe selo', + 'tulum', + 'tuzigoot', + 'virgin islands', + 'wupatki', + 'cedar breaks', + 'scotts bluff', + 'saint lawrence river', + + // generic place names + 'west end', + 'east end', + 'north end', + 'south end', + 'west side', + 'east side', + 'north side', + 'south side', + 'brookside', + 'brookstone', + 'centerville', + 'clearwater', + 'cedar grove', + 'fairhaven', + 'green acres', + 'highland', + 'highlands', + 'hillcrest', + 'lakefront', + 'lowlands', + 'lowland', + 'maplewood', + 'meadowlands', + 'midlands', + 'oakmont', + 'pinecrest', + 'riverbend', + 'riverfront', + 'riverside', + 'springhill', + 'springwood', + 'willowbrook', + 'sunset hills', + 'oakwood', + 'parkside', + 'green valley', + 'maple grove', + 'pine ridge', + 'greenfield', + + //misc notable british + 'abbotsford', + 'abingdon', + 'acton', + 'agincourt', + 'alberton', + 'aldershot', + 'alliston', + 'ancaster', + 'andover', + 'ashcroft', + 'aylesford', + 'baltimore', + 'barnsley', + 'battersea', + 'beaconsfield', + 'bedford', + 'bellingham', + 'berwick', + 'bexhill', + 'bingley', + 'blackburn', + 'blackpool', + 'blackwall', + 'bolton', + 'bracebridge', + 'bramley', + 'brampton', + 'bridgenorth', + 'bridgetown', + 'brigham', + 'brighton', + 'brockton', + 'buckingham', + 'caldwell', + 'cambridge', + 'campbellford', + 'carlisle', + 'caversham', + 'charlottetown', + 'chelmsford', + 'cheltenham', + 'colchester', + 'collingwood', + 'compton', + 'cornwall', + 'croydon', + 'darlington', + 'dartford', + 'dartmoor', + 'denham', + 'derry', + 'devonport', + 'digby', + 'doncaster', + 'dorchester', + 'dover', + 'dryden', + 'dumfries', + 'dunstable', + 'durham', + 'dutton', + 'earlscourt', + 'eglinton', + 'enfield', + 'epping', + 'euston', + 'everton', + 'exeter', + 'exford', + 'gravenhurst', + 'grimsby', + 'guelph', + 'haliburton', + 'hampstead', + 'hampton', + 'harford', + 'harrow', + 'hastings', + 'hereford', + 'hertford', + 'heywood', + 'highbury', + 'huntingdon', + 'ilford', + 'inglewood', + 'inverness', + 'ipswich', + 'kensington', + 'keswick', + 'kitchener', + 'lambeth', + 'lancaster', + 'langford', + 'langley', + 'langton', + 'lansing', + 'leaside', + 'lewes', + 'lindley', + 'lyndhurst', + 'maidstone', + 'malton', + 'malvern', + 'mansfield', + 'markham', + 'millington', + 'newark', + 'newham', + 'newmarket', + 'newport', + 'northampton', + 'norwich', + 'nottingham', + 'orford', + 'oxford', + 'oxley', + 'parkwood', + 'pelham', + 'pembroke', + 'pennington', + 'penzance', + 'perth', + 'pickering', + 'picton', + 'putnam', + 'rayleigh', + 'redcliffe', + 'redhill', + 'richmond', + 'rochester', + 'seaforth', + 'seaton', + 'sherbrooke', + 'southampton', + 'southwold', + 'stafford', + 'stockwell', + 'stratford', + 'stroud', + 'sudbury', + 'sunderland', + 'sydenham', + 'taunton', + 'thornhill', + 'tiverton', + 'torquay', + 'tottenham', + 'truro', + 'upton', + 'uxbridge', + 'vauxhall', + 'wakefield', + 'warwick', + 'waterford', + 'watford', + 'weedon', + 'wentworth', + 'whitby', + 'whitchurch', + 'wickham', + 'winchester', + 'wingham', + 'woking', + 'woodbridge', + 'woodside', + 'woodstock', + 'woolwich', + 'wycombe', + 'york', +] diff --git a/data/lexicon/places/regions.js b/data/lexicon/places/regions.js new file mode 100644 index 0000000..d525277 --- /dev/null +++ b/data/lexicon/places/regions.js @@ -0,0 +1,236 @@ +//some major 'second-level' administrative divisions +export default [ + 'alabama', + 'alaska', + 'arizona', + 'arkansas', + 'california', + 'colorado', + 'connecticut', + 'delaware', + 'florida', + 'georgia', + 'hawaii', + 'idaho', + 'illinois', + 'indiana', + 'iowa', + 'kansas', + 'kentucky', + 'louisiana', + 'maine', + 'maryland', + 'massachusetts', + 'michigan', + 'minnesota', + 'mississippi', + 'missouri', + 'montana', + 'nebraska', + 'nevada', + 'new hampshire', + 'new jersey', + 'new mexico', + 'new york state', + 'new york', + 'north carolina', + 'north dakota', + 'ohio', + 'oklahoma', + 'oregon', + 'pennsylvania', + 'rhode island', + 'south carolina', + 'south dakota', + 'tennessee', + 'texas', + 'utah', + 'vermont', + 'virginia', + 'washington dc', + 'washington', + 'west virginia', + 'wisconsin', + 'wyoming', + + //canada + 'alberta', + 'british columbia', + 'manitoba', + 'new brunswick', + 'newfoundland', + 'newfoundland and labrador', + 'nova scotia', + 'nunavut', + 'ontario', + 'prince edward island', + 'pei', + 'quebec', + 'saskatchewan', + 'yukon', + + //australia + 'norfolk', + 'queensland', + 'tasmania', + // 'victoria', + + //china + 'qinghai', + 'sichuan', + 'gansu', + 'hunan', + 'guangdong', + 'guizhou', + 'fujian', + 'jiangxi', + + //india + 'andhra pradesh', + 'arunachal pradesh', + 'assam', + 'bihar', + 'chhattisgarh', + 'goa', + 'gujarat', + 'haryana', + 'himachal pradesh', + 'jharkhand', + 'karnataka', + 'kerala', + 'madhya pradesh', + 'maharashtra', + 'manipur', + 'meghalaya', + 'mizoram', + 'nagaland', + 'odisha', + 'punjab', + 'rajasthan', + 'sikkim', + 'tamil nadu', + 'telangana', + 'tripura', + 'uttar pradesh', + 'uttarakhand', + 'west bengal', + + //mexico + 'aguascalientes', + 'baja california', + 'campeche', + 'chiapas', + 'chihuahua', + 'coahuila', + 'colima', + 'durango', + 'guanajuato', + 'guerrero', + 'hidalgo', + 'jalisco', + 'michoacan', + 'morelos', + 'nayarit', + 'nuevo leon', + 'oaxaca', + 'queretaro', + 'quintana roo', + 'san luis potosi', + 'sinaloa', + 'sonora', + 'tabasco', + 'tamaulipas', + 'tlaxcala', + 'veracruz', + 'yucatan', + 'zacatecas', + + //western-europe + 'basque', + 'bavaria', + 'bremen', + 'buckinghamshire', + 'cambridgeshire', + 'corsica', + 'coventry', + 'cumbria', + 'derbyshire', + 'dorset', + 'essex', + 'gloucestershire', + 'hampshire', + 'hertfordshire', + 'lancashire', + 'leeds', + 'leicestershire', + 'lincolnshire', + 'midlands', + 'normandy', + 'north yorkshire', + 'northamptonshire', + 'nottinghamshire', + 'oxfordshire', + 'saxony', + 'sicily', + 'somerset', + 'staffordshire', + 'suffolk', + 'surrey', + 'sussex', + 'tuscany', + 'warwickshire', + 'yorkshire', + + //bangladesh + 'rajshahi', + 'rangpur', + 'khulna', + 'sylhet', + + //brazil + 'minas gerais', + 'bahia', + 'parana', + 'pernambuco', + 'ceara', + 'para', + 'maranhao', + 'santa catarina', + + //russia + 'siberia', + 'adygea', + 'altai', + 'bashkortostan', + 'buryatia', + 'dagestan', + 'ingushetia', + 'kabardino', + 'balkaria', + 'kalmykia', + 'karachay', + 'cherkessia', + 'karelia', + 'komi', + 'mari el', + 'mordovia', + 'yakutia', + 'ossetia', + 'tatarstan', + 'tuva', + 'udmurtia', + 'khakassia', + 'chechnya', + 'chuvashia', + 'crimea', + + // malaysia + 'penang', + 'pahang', + 'perak', + 'sarawak', + 'selangor', + 'malacca', + 'kedah', + 'kelantan', +] diff --git a/data/lexicon/switches/actor-verb.js b/data/lexicon/switches/actor-verb.js new file mode 100644 index 0000000..6ff847b --- /dev/null +++ b/data/lexicon/switches/actor-verb.js @@ -0,0 +1,43 @@ +// actor like 'the coach' or verb like 'coach a team' +// use noun-verb for sometimes-actors, like 'target', or 'star' +export default [ + 'addict', + 'architect', + 'advocate', + 'affiliate', + 'bitch', + 'bully', + 'boss', + 'champion', + 'chauffeur', + 'coach', + 'cook', + 'doctor', + 'butcher', + 'delegate', + 'engineer', + 'fool', + 'geek', + 'goof', + 'graduate', + 'groom', + 'guide', + 'host', + 'judge', + 'man', + 'mime', + 'master', + 'nerd', + 'parent', + 'pilot', + 'recruit', + 'scout', + 'sponsor', + 'spy', + 'suspect', + 'usher', + 'volunteer', + 'conscript', + 'wimp', + 'witness', +] diff --git a/data/lexicon/switches/adj-gerund.js b/data/lexicon/switches/adj-gerund.js new file mode 100644 index 0000000..fc0d6e1 --- /dev/null +++ b/data/lexicon/switches/adj-gerund.js @@ -0,0 +1,295 @@ +// rallying the troops +// her rallying cry +export default [ + 'absorbing', + 'accelerating', + 'accompanying', + 'aching', + 'aging', + 'agonizing', + 'agonzing', + 'alarming', + 'alluring', + 'amazing', + 'amusing', + 'annoying', + 'appealing', + 'arresting', + 'aspiring', + 'assuring', + 'astonishing', + 'astounding', + 'baffling', + 'becoming', + 'bewildering', + 'bewitching', + 'binding', + 'blinding', + 'boiling', + 'booming', + 'boring', + 'bouncing', + 'breathtaking', + 'bruising', + 'budding', + 'bustling', + 'calming', + 'captivating', + 'caring', + 'challenging', + 'changing', + 'charming', + 'chilling', + 'climbing', + 'closing', + 'comforting', + 'commanding', + 'compelling', + 'competing', + 'compromising', + 'concerning', + 'conflicting', + 'confusing', + 'conspiring', + 'continuing', + 'contrasting', + 'contributing', + 'controlling', + 'convincing', + 'corresponding', + 'crippling', + 'cutting', + 'damaging', + 'daring', + 'dashing', + 'daunting', + 'dazzling', + 'debilitating', + 'decaying', + 'deceiving', + 'declining', + 'decreasing', + 'defining', + 'degrading', + 'delighting', + 'demanding', + 'demeaning', + 'demoralizing', + 'depressing', + 'deserving', + 'devastating', + 'developing', + 'disappointing', + 'disarming', + 'disgusting', + 'disheartening', + 'dissenting', + 'distracting', + 'distressing', + 'disturbing', + 'dizzying', + 'drifting', + 'electrifying', + 'embarrassing', + 'emerging', + 'empowering', + 'enabling', + 'enchanting', + 'encouraging', + 'enduring', + 'energizing', + 'engaging', + 'enlivening', + 'enriching', + 'ensuing', + 'enthralling', + 'enticing', + 'exacting', + 'exasperating', + 'exciting', + 'exhausting', + 'exhilarating', + 'existing', + 'expanding', + 'exploding', + 'fading', + 'fascinating', + 'fetching', + 'fitting', + 'flaming', + 'flattering', + 'floating', + 'flowering', + 'flowing', + 'foreboding', + 'forthcoming', + 'founding', + 'freezing', + 'frightening', + 'frustrating', + 'fulfilling', + 'glaring', + 'gleaming', + 'gratifying', + 'grating', + 'gripping', + 'groundbreaking', + 'growing', + 'grueling', + 'gruelling', + 'guiding', + 'harrowing', + 'healing', + 'heartwarming', + 'horrifying', + 'humiliating', + 'illuminating', + 'imposing', + 'incorporating', + 'increasing', + 'infuriating', + 'inspiring', + 'insulting', + 'interesting', + 'intimidating', + 'intoxicating', + 'intriguing', + 'invigorating', + 'inviting', + 'irritating', + 'judging', + 'lacking', + 'lagging', + 'lasting', + 'laughing', + 'leaning', + 'leading', + 'learning', + 'lifesaving', + 'limiting', + 'living', + 'loving', + 'maddening', + 'maturing', + 'meandering', + 'melting', + 'mending', + 'mesmerizing', + // 'mind-altering', + 'boggling', + 'numbing', + 'missing', + 'mitigating', + 'motivating', + 'moving', + 'mumbling', + 'mystifying', + 'nurturing', + 'offending', + 'offsetting', + 'opposing', + 'outgoing', + 'outlying', + 'outstanding', + 'overarching', + 'overlapping', + 'overpowering', + 'overriding', + 'overwhelming', + 'owing', + 'paying', + 'pending', + 'perplexing', + 'piercing', + 'plunging', + 'preceding', + 'pressing', + 'prevailing', + 'promising', + 'provoking', + 'punishing', + 'raging', + 'rallying', + 'rambling', + 'raving', + 'reassuring', + 'redefining', + 'refreshing', + 'reigning', + 'rejuvenating', + 'relaxing', + 'remaining', + 'resting', + 'revealing', + 'revitalising', + 'revitalizing', + 'revolving', + 'rewarding', + 'riveting', + 'roaring', + 'rolling', + 'running', + 'rushing', + 'saddening', + 'satisfying', + 'screaming', + 'screeching', + 'sentencing', + 'shining', + 'shocking', + 'skyrocketing', + 'sloping', + 'smiling', + 'soaking', + 'soaring', + 'soothing', + 'sparkling', + 'speeding', + 'spellbinding', + 'sprawling', + 'staggering', + 'startling', + 'starving', + 'steaming', + 'stimulating', + 'stirring', + 'striking', + 'stunning', + 'supporting', + 'surging', + 'surprising', + 'surrounding', + 'sweeping', + 'swelling', + 'tantalizing', + 'taxing', + 'teasing', + 'telling', + 'tempting', + 'terrifying', + 'threatening', + 'thrilling', + 'thriving', + 'tiring', + 'touching', + 'trembling', + 'troubling', + 'trusting', + 'trying', + 'twisting', + 'unfolding', + 'unnerving', + 'unsettling', + 'uplifting', + 'upsetting', + 'varying', + 'vexing', + 'willing', + 'working', + 'worrying', + 'yielding', + 'accommodating', + 'trifling', + 'endearing', + // prefixes +] diff --git a/data/lexicon/switches/adj-noun.js b/data/lexicon/switches/adj-noun.js new file mode 100644 index 0000000..e6db173 --- /dev/null +++ b/data/lexicon/switches/adj-noun.js @@ -0,0 +1,167 @@ +// the commercial market +// watching the commercial +export default [ + 'academic', + 'adolescent', + 'adult', + 'alert', + 'alternative', + 'antarctic', + 'arab', + 'arctic', + 'back', + 'best', + 'blank', + 'bottom', + 'bourgeois', + 'brief', + 'brute', + 'chief', + 'classic', + 'comic', + 'commercial', + 'communist', + 'companion', + 'complex', + 'concrete', + 'content', + 'constituent', + 'contemporary', + 'convertable', + 'cooperative', + 'crude', + 'cunning', + 'dark', + 'darling', + 'demographic', + 'derivative', + 'elder', + 'elite', + 'epic', + 'excess', + 'executive', + 'expert', + 'fair', + 'fat', + 'favorite', + 'favourite', + 'fellow', + 'female', + 'feminist', + 'fine', + 'firm', + 'fluid', + 'fugitive', + 'future', + 'general', + 'genious', + 'gold', + 'graphic', + 'grave', + 'half', + 'hobby', + 'homeless', + 'humdrum', + 'ideal', + 'impressionist', + 'incumbent', + 'individual', + 'innocent', + 'instant', + 'interim', + 'justice', + 'juvenile', + 'last', + 'latter', + 'left', + 'liberal', + 'light', + 'liquid', + 'lush', + 'male', + 'marine', + 'median', + 'medium', + 'metric', + 'miniature', + // 'major', + // 'minor', + 'mobile', + 'modernist', + 'moral', + 'mortal', + 'nagging', + 'novel', + 'nuts', + 'offensive', + 'official', + 'opposite', + 'oval', + 'parallel', + 'past', + 'patient', + 'periodical', + 'pet', + 'plastic', + // 'poor', + 'potential', + 'premier', + 'premium', + 'present', + 'principal', + 'pro', + 'professional', + 'racist', + 'rash', + 'rear', + 'rebel', + 'relative', + 'rental', + 'representative', + 'republican', + 'resident', + // 'rich', + 'right', + 'round', + 'routine', + 'rubbish', + 'sage', + 'secret', + 'senior', + 'serial', + 'silver', + 'slack', + 'socialist', + 'sole', + 'solvent', + 'sound', + 'sovereign', + 'square', + 'squat', + 'stable', + 'standard', + 'subject', + 'subordinate', + 'superior', + 'swell', + 'taboo', + 'tan', + 'teen', + 'terminal', + 'terrorist', + 'token', + 'top', + 'total', + 'trial', + 'undergraduate', + 'underground', + 'upstairs', + 'vagabond', + 'vanilla', + 'variable', + 'variant', + 'visionary', + 'void', + 'watershed', + 'welcome', +] diff --git a/data/lexicon/switches/adj-past.js b/data/lexicon/switches/adj-past.js new file mode 100644 index 0000000..dfe35f9 --- /dev/null +++ b/data/lexicon/switches/adj-past.js @@ -0,0 +1,352 @@ +// clues: [adj, past], +// fallback: 'Adjective', +export default [ + 'abandoned', + 'absorbed', + 'accepted', + 'acknowledged', + 'adjusted', + 'adopted', + 'advanced', + 'affected', + 'aged', + 'alarmed', + 'alleged', + 'altered', + 'amazed', + 'animated', + 'anticipated', + 'applied', + 'appreciated', + 'armed', + 'associated', + 'assumed', + 'assured', + 'augmented', + 'authorized', + 'awarded', + 'baffled', + 'baked', //baked goods + 'balanced', + 'based', //modern slang + 'battered', + 'bewildered', + 'biased', + 'blessed', + 'blinded', + 'boiled', + 'bored', + 'bottled', + 'bound', + 'broken', + 'bruised', + 'burned', + 'burnt', + 'caged', + 'calculated', + 'celebrated', + 'centralized', + 'certified', + 'charged', + 'charmed', + 'chilled', + 'classified', + 'closed', + 'cluttered', + 'coded', + 'colored', + 'coloured', + 'combined', + 'complicated', + 'concentrated', + 'confused', + 'considered', + 'consolidated', + 'controlled', + 'cooked', + 'covered', + 'cracked', + 'cramped', + 'crowded', + 'crushed', + 'cultivated', + 'cured', + 'customized', + 'damaged', + 'dampened', + 'dated', + 'dazed', + 'dazzled', + 'decayed', + 'decentralized', + 'decorated', + 'dedicated', + 'deferred', + 'defined', + 'deformed', + 'delayed', + 'delighted', + 'depressed', + 'deranged', + 'detailed', + 'determined', + 'developed', + 'devoted', + 'dignified', + 'diminished', + 'directed', + 'disabled', + 'disciplined', + 'discounted', + 'discouraged', + 'disgruntled', + 'distorted', + 'distressed', + 'disturbed', + 'drained', + 'dried', + 'edified', + 'educated', + 'elated', + 'emaciated', + 'embarrassed', + 'enchanted', + 'engaged', + 'enhanced', + 'ensured', + 'equipped', + 'escaped', + 'established', + 'exaggerated', + 'excited', + 'expanded', + 'expected', + 'experienced', + 'exposed', + 'extended', + 'faded', + 'failed', + 'fascinated', + 'feared', + 'finished', + 'fitted', + 'fixed', + 'flavored', + 'flavoured', + 'flustered', + 'focused', + 'fractured', + 'fragmented', + 'framed', + 'fried', + 'frozen', + 'gifted', + 'gratified', + 'grilled', + 'grown', + 'guarded', + 'guided', + 'hammered', + 'harmed', + 'heated', + 'hooked', + 'horrified', + 'humbled', + 'illuminated', + 'implied', + 'imported', + 'improved', + 'inbred', + 'increased', + 'indebted', + 'infected', + 'inflated', + 'informed', + 'infuriated', + 'injured', + 'inspired', + 'integrated', + 'intended', + 'intensified', + 'interested', + 'intoxicated', + 'invited', + 'involved', + 'isolated', + 'jagged', + 'joined', + 'judged', + 'justified', + 'knotted', + 'known', + 'lay', + 'lead', + 'left', + 'leveled', + 'licensed', + 'limited', + 'listed', + 'loaded', + 'locked', + 'lost', + 'loved', + 'managed', + 'manufactured', + 'marked', + 'measured', + 'melted', + 'mixed', + 'modified', + 'motivated', + 'mounted', + 'muted', + 'mystified', + 'nagged', + 'needed', + 'neglected', + 'noted', + 'nourished', + 'observed', + 'occupied', + 'oppressed', + 'organized', + 'overlooked', + 'overwhelmed', + 'packed', + 'painted', + 'paralleled', + 'parked', + 'pasted', + 'perfected', + 'picked', + 'pierced', + 'pissed', + 'planned', + 'pleased', + 'plugged', + 'pointed', + 'polished', + 'preferred', + 'preoccupied', + 'prepared', + 'pressed', + 'printed', + 'processed', + 'produced', + 'prolonged', + 'pronounced', + 'proposed', + 'protected', + 'proved', + 'pumped', + 'puzzled', + 'qualified', + 'quoted', + 'rained', + 'rallied', + 'ratified', + 'received', + 'recommended', + 'recorded', + 'recovered', + 'recycled', + 'reduced', + 'refined', + 'registered', + 'regulated', + 'rejected', + 'related', + 'released', + 'removed', + 'renewed', + 'repeated', + 'replaced', + 'requested', + 'required', + 'reserved', + 'respected', + 'restored', + 'restricted', + 'rotted', + 'satisfied', + 'saturated', + 'sauted', + 'scared', + 'scattered', + 'scorched', + 'scratched', + 'screened', + 'sealed', + 'seasoned', + 'seated', + 'secured', + 'selected', + 'settled', + 'shaded', + 'shared', + 'shocked', + 'shut', + 'simplified', + 'simulated', + 'smoked', + 'soaked', + 'specialized', + 'specified', + 'spiked', + 'spotted', + 'stained', + 'stated', + 'steamed', + 'stereotyped', + 'stirred', + 'stoked', + 'strengthened', + 'striped', + 'stripped', + 'stuffed', + 'stumped', + 'stunned', + 'subsidized', + 'suggested', + 'suspected', + 'suspended', + 'sustained', + 'tamed', + 'tanned', + 'targeted', + 'tarnished', + 'teased', + 'threatened', + 'thrilled', + 'tied', + 'tired', + 'touched', + 'tracked', + 'trained', + 'trapped', + 'trimmed', + 'troubled', + 'turned', + 'twisted', + 'uncovered', + 'understood', + 'unified', + 'united', + 'updated', + 'uplifted', + 'upset', + 'used', + 'varied', + 'verified', + 'warped', + 'washed', + 'watched', + 'weakened', + 'weathered', + 'wet', + 'worn', + 'worried', + 'wounded', + 'wrinkled', + 'yellowed', +] diff --git a/data/lexicon/switches/adj-present.js b/data/lexicon/switches/adj-present.js new file mode 100644 index 0000000..51983bf --- /dev/null +++ b/data/lexicon/switches/adj-present.js @@ -0,0 +1,87 @@ +// 'would mean' vs 'is mean' +export default [ + 'approximate', + 'blunt', + 'clean', + 'complete', + 'conjugate', + 'cool', + 'correct', + 'damp', + 'deliberate', + 'diffuse', + 'direct', + 'double', + 'dry', + 'elaborate', + 'empty', + 'firm', + 'free', + 'hollow', + 'idle', + 'lay',//lay-people + 'lean', + // 'light', + 'live', + 'mature', + 'mean', + 'moderate', + // 'near', + 'narrow', + 'obscure', + 'open', + 'own', + 'pale', + 'present', + 'prime', + 'prompt', + 'quack', + 'replicate', + 'right', + 'secure', + 'sedate', + 'select', + 'separate', + 'slick', + 'slow', + 'smooth', + 'sour', + 'spare', + 'sure', + 'suspect', + 'thin', + 'top',//top the chart + 'total', + 'utter', + 'warm', + 'wet', + 'wound', + 'wrong', + 'express', + 'elicit', + 'fringe', + 'consummate', + 'defuse', + 'wrought', + 'counterfeit', + 'alight', + 'tender', + 'lower', + 'close', + 'last', + 'faint', + 'bankrupt', + 'corrupt', + 'fast', + 'short', + 'foul', + 'fake', + 'fancy', + 'clear', + 'calm', + 'dull', + 'stray', + 'perfect', + 'exempt', + 'articulate', +] diff --git a/data/lexicon/switches/noun-gerund.js b/data/lexicon/switches/noun-gerund.js new file mode 100644 index 0000000..4e3eaf5 --- /dev/null +++ b/data/lexicon/switches/noun-gerund.js @@ -0,0 +1,295 @@ +// gerunds can be adjectives 'striking example' +// or nouns 'arguing', or 'operating room' +export default [ + 'abandoning', + 'accounting', + 'acting', + 'advertising', + 'aging', + 'approaching', + 'arguing', + 'assuming', + 'attracting', + 'babysitting', + 'backing', + 'baking', + 'battling', + 'beginning', + 'belonging', + 'betting', + 'bitching', + 'biting', + 'blessing', + 'bloating', + 'boating', + 'bombing', + 'booking', + 'bookkeeping', + 'branding', + 'breathing', + 'broadcasting', + 'budgeting', + 'building', + 'bullying', + 'burping', + 'camping', + 'carving', + 'casting', + 'catering', + 'celebrating', + 'chanting', + 'chatting', + 'cheering', + 'clapping', + 'cleaning', + 'clearing', + 'climbing', + 'cloning', + 'clothing', + 'clubbing', + 'coaching', + 'coating', + 'coding', + 'collecting', + 'coloring', + 'communicating', + 'complaining', + 'composing', + 'conducting', + 'constructing', + 'consulting', + 'convincing', + 'cooking', + 'coping', + 'covering', + 'crafting', + 'crawling', + 'crossing', + 'crying', + 'curling', + 'cycling', + 'dancing', + 'dating', + 'debating', + 'decorating', + 'delegating', + 'delivering', + 'developing', + 'directing', + 'discovering', + 'diving', + 'doubting', + 'drawing', + 'dreaming', + 'dressing', + 'dribbling', + 'drinking', + 'driving', + 'dumping', + 'dwelling', + 'eating', + 'educating', + 'enchanting', + 'ending', + 'engineering', + 'exercising', + 'exploring', + 'farming', + 'fascinating', + 'feeling', + 'fencing', + 'fighting', + 'filing', + 'filling', + // 'filming', + 'financing', + 'finding', + 'fishing', + 'flirting', + 'flooding', + 'forecasting', + 'formatting', + 'frosting', + 'funding', + 'gardening', + 'gathering', + 'generating', + 'gliding', + 'greeting', + 'grieving', + 'guiding', + 'handling', + 'harrowing', + 'harvesting', + 'heating', + 'hiking', + 'hiring', + 'holding', + 'howling', + 'hunting', + 'icing', + 'illustrating', + // 'imaging', + 'imagining', + 'imploding', + 'innovating', + 'inspecting', + 'interacting', + 'interviewing', + 'inventing', + 'ironing', + 'jogging', + 'judging', + 'juggling', + 'justifying', + 'kicking', + 'killing', + 'kneading', + 'knitting', + 'landing', + 'laughing', + 'learning', + 'leasing', + 'licensing', + 'lifting', + 'limiting', + 'listening', + 'listing', + 'lodging', + 'lying', + 'maintaining', + 'manifesting', + 'manufacturing', + 'marketing', + 'meaning', + 'meditating', + 'meeting', + 'messaging', + 'mining', + 'modeling', + 'monitoring', + 'navigating', + 'negotiating', + 'networking', + 'nursing', + 'offering', + 'opening', + 'operating', + 'organising', + 'organizing', + 'overcoming', + 'ovulating', + 'packaging', + 'painting', + 'parking', + 'partying', + 'peacekeeping', + 'planning', + 'playing', + 'poisoning', + 'positioning', + 'praying', + 'pretending', + 'printing', + 'processing', + 'publishing', + 'questioning', + 'rapping', + 'rating', + 'reading', + 'reasoning', + 'recording', + 'recycling', + 'rehearsing', + 'relaxing', + 'rendering', + 'reporting', + 'responding', + 'restructruing', + 'restructuring', + 'riding', + 'roofing', + 'rowing', + 'ruling', + 'running', + 'sailing', + 'saying', + 'scheduling', + 'schooling', + 'scoring', + 'screaming', + 'screening', + 'sculpting', + 'seating', + 'serving', + 'setting', + 'shipping', + 'shopping', + 'shortening', + 'shouting', + 'signaling', + 'signing', + 'singing', + 'sitting', + 'skateboarding', + 'skating', + 'sleeping', + 'smoking', + 'snowboarding', + 'snowing', + 'spelling', + 'spending', + 'staging', + 'storytelling', + 'stretching', + 'struggling', + 'studying', + 'stuffing', + 'subtracting', + 'suffering', + 'surfing', + 'surveying', + 'surviving', + 'swearing', + 'swimming', + 'talking', + 'tanning', + 'tasting', + 'teaching', + 'teasing', + 'testing', + 'thinking', + 'timing', + 'tipping', + 'tracking', + 'trading', + 'training', + 'traveling', + 'travelling', + 'typing', + 'understanding', + 'undertaking', + 'visualizing', + 'volunteering', + 'voting', + 'waiting', + // 'walking', + 'warning', + 'washing', + 'watching', + 'wedding', + 'whispering', + 'wiring', + 'wondering', + 'working', + 'worrying', + 'wrapping', + 'wrestling', + 'writing', + 'yawning', + 'yearning', + 'yelling', + 'zeroing', + 'zoning', + 'zooming', +] diff --git a/data/lexicon/switches/noun-verb.js b/data/lexicon/switches/noun-verb.js new file mode 100644 index 0000000..4badbe7 --- /dev/null +++ b/data/lexicon/switches/noun-verb.js @@ -0,0 +1,932 @@ +// words that can be infinitives or nouns +export default [ + 'abuse', + 'accent', + 'access', + 'accord', + 'account', + 'ace', + 'ache', + 'act', + 'address', + 'advance', + 'advocate', + 'age', + 'aid', + 'aim', + 'air', + 'alarm', + 'alter', + 'anchor', + 'anger', + 'answer', + 'appeal', + 'approach', + 'arch', + 'archive', + 'arm', + 'armour', + 'ask', + 'assist', + 'associate', + 'attack', + 'attempt', + 'auction', + 'award', + 'back', + 'bail', + 'balance', + 'ban', + 'band', + 'bang', + 'bank', + 'bar', + 'bargain', + 'barge', + 'bark', + 'base', + 'bash', + 'battle', + 'bear', + 'beat', + 'beef', + 'belt', + 'bend', + 'benefit', + 'bet', + 'bias', + 'bid', + 'bike', + 'bill', + 'bind', + 'biopsy', + 'bit', + 'bitch', + 'bite', + 'blame', + 'blend', + 'blink', + 'blitz', + 'block', + 'blur', + 'board', + 'boast', + 'bog', + 'bomb', + 'bond', + 'bone', + 'book', + 'boost', + 'boot', + 'border', + 'bottle', + 'box', + 'boycott', + 'branch', + 'brand', + 'breach', + 'break', + 'breed', + 'bribe', + 'bridge', + 'broadcast', + 'bruise', + 'brush', + 'bubble', + 'buckle', + 'budget', + 'buffer', + 'bump', + 'burden', + 'burn', + 'bust', + 'buzz', + 'bypass', + 'cake', + 'call', + 'camp', + 'canoe', + 'cap', + 'capture', + 'card', + 'care', + 'cash', + 'cast', + 'catalog', + 'catch', + 'cause', + 'caution', + 'cave', + 'center', + 'centre', + 'chain', + 'chair', + 'challenge', + 'change', + 'channel', + 'charge', + 'charm', + 'chart', + 'chase', + 'cheat', + 'check', + 'cheer', + 'chip', + 'circle', + 'claim', + 'claw', + 'click', + 'clip', + 'cloud', + 'club', + 'coat', + 'code', + 'coin', + 'collapse', + 'color', + 'colour', + 'combat', + 'combine', + 'comfort', + 'command', + 'comment', + 'commit', + 'commute', + 'complement', + 'compound', + 'compromise', + 'concentrate', + 'concern', + 'conduct', + 'conflict', + 'conglomerate', + 'consent', + 'construct', + 'contact', + 'contrast', + 'control', + 'convert', + 'coordinate', + 'copy', + 'core', + 'cost', + 'cough', + 'counsel', + 'count', + 'couple', + 'court', + 'cover', + 'crack', + 'craft', + 'crash', + 'credit', + 'creep', + 'crop', + 'cross', + 'crowd', + 'crush', + 'cry', + 'cube', + 'cue', + 'curb', + 'cure', + 'curl', + 'curve', + 'cut', + 'dab', + 'damage', + 'dance', + 'dare', + 'dart', + 'date', + 'deal', + 'debate', + 'debut', + 'decline', + 'decrease', + 'defeat', + 'defect', + 'delay', + 'delegate', + 'delight', + 'demand', + 'deposit', + 'desert', + 'design', + 'desire', + 'detail', + 'digest', + 'dip', + 'discharge', + 'disguise', + 'dish', + 'dislike', + 'dispatch', + 'display', + 'dispute', + 'ditch', + 'dive', + 'divide', + 'divorce', + 'dock', + 'document', + 'dodge', + 'doubt', + 'download', + 'draft', + 'drag', + 'drain', + 'dream', + 'dress', + 'drift', + 'drill', + 'drink', + 'drip', + 'drive', + 'drone', + 'drop', + 'dub', + 'duel', + 'dump', + 'duplicate', + 'dye', + 'echo', + 'edge', + 'effect', + 'encounter', + 'end', + 'envy', + 'escape', + 'estimate', + 'excel', + 'exchange', + 'excuse', + 'exercise', + 'exhaust', + 'exhibit', + 'experience', + 'experiment', + 'export', + 'extract', + 'eye', + 'eyeball', + 'face', + 'fail', + 'fall', + 'farm', + 'favour', + 'fear', + 'feature', + 'feed', + 'feel', + 'fence', + 'field', + 'fight', + 'figure', + 'file', + 'film', + 'filter', + 'finance', + 'finish', + 'fire', + 'fish', + 'fit', + 'fix', + 'flag', + 'flake', + 'flame', + 'flare', + 'flash', + 'flavor', + 'flavour', + 'flesh', + 'flip', + 'float', + 'flock', + 'flood', + 'flow', + 'flower', + 'fly', + 'focus', + 'fog', + 'foil', + 'fold', + 'foot', + 'force', + 'forecast', + 'form', + 'format', + 'forward', + 'fracture', + 'fragment', + 'frame', + 'franchise', + 'frost', + 'frown', + 'fry', + 'fuck', + 'fuel', + 'function', + 'fund', + 'fuss', + 'fuzz', + 'gag', + 'gain', + 'game', + 'gang', + 'gas', + 'gate', + 'gaze', + 'gear', + 'gift', + 'glare', + 'gloss', + 'glow', + 'glue', + 'gossip', + 'grade', + 'grasp', + 'grill', + 'grind', + 'grip', + 'ground', + 'growth', + 'grumble', + 'guarantee', + 'guard', + 'guess', + 'gulp', + 'gun', + 'hack', + 'ham', + 'hammer', + 'hand', + 'handle', + 'harbour', + 'harm', + 'harness', + 'harvest', + 'hash', + 'hatch', + 'hate', + 'haunt', + 'head', + 'heat', + 'hedge', + 'help', + 'highlight', + 'hike', + 'hint', + 'hire', + 'hit', + 'hold', + 'hole', + 'honor', + 'honour', + 'hook', + 'hop', + 'hope', + 'horse', + 'house', + 'hug', + 'hunt', + 'impact', + 'implement', + 'incline', + 'increase', + 'index', + 'influence', + 'inhale', + 'ink', + 'insert', + 'intent', + 'interest', + 'interface', + 'interview', + 'invoice', + 'iron', + 'issue', + 'jam', + 'jazz', + 'joke', + 'juice', + 'jump', + 'keel', + 'key', + 'kick', + 'kid', + 'kill', + 'kiss', + 'knock', + 'label', + 'labor', + 'labour', + 'lace', + 'lack', + 'land', + 'lap', + 'latch', + 'laugh', + 'launch', + 'leach', + 'lead', + 'leak', + 'leap', + 'lease', + 'lecture', + 'leech', + 'level', + 'levy', + 'license', + 'lick', + 'lift', + 'limit', + 'line', + 'link', + 'list', + 'load', + 'loan', + 'lobby', + 'lock', + 'log', + 'look', + 'loot', + 'love', + 'lump', + 'lust', + 'mail', + 'mandate', + 'manner', + 'manoeuvre', + 'map', + 'market', + 'mash', + 'mask', + 'master', + 'match', + 'matter', + 'measure', + 'mention', + 'merge', + 'merit', + 'mess', + 'milk', + 'mind', + 'mine', + 'mirror', + 'miss', + 'mistake', + 'mix', + 'mock', + 'model', + 'mold', + 'monitor', + 'monkey', + 'mop', + 'mount', + 'mouth', + 'move', + 'murder', + 'name', + 'need', + 'neglect', + 'net', + 'network', + 'nod', + 'note', + 'notice', + 'nurse', + 'object', + 'offer', + 'oil', + 'ooze', + 'orbit', + 'order', + 'orient', + 'outline', + 'overpass', + 'pack', + 'package', + 'paint', + 'pair', + 'paise', + 'pan', + 'panic', + 'park', + 'part', + 'party', + 'pass', + 'paste', + 'patch', + 'patent', + 'pause', + 'pay', + 'peak', + 'pee', + 'peel', + 'peer', + 'pen', + 'pencil', + 'perfume', + 'permit', + 'pet', + 'phase', + 'phone', + 'photograph', + 'pick', + 'pile', + 'pin', + 'pine', + 'pipe', + 'pit', + 'pity', + 'pivot', + 'place', + 'plan', + 'plant', + 'play', + 'plce', + 'plead', + 'plug', + 'plump', + 'plunge', + 'point', + 'poison', + 'police', + 'polish', + 'poll', + 'pool', + 'poop', + 'pop', + 'pore', + 'pose', + 'position', + 'post', + 'pound', + 'power', + 'practice', + 'praise', + 'preserve', + 'press', + 'prey', + 'price', + 'pride', + 'print', + 'probe', + 'proceed', + 'process', + 'produce', + 'profile', + 'program', + 'programme', + 'progress', + 'project', + 'promise', + 'prop', + 'protest', + 'prune', + 'psych', + 'pump', + 'punch', + 'purchase', + 'push', + 'question', + 'quiver', + 'race', + 'rack', + 'rage', + 'rain', + 'raise', + 'rake', + 'rally', + 'range', + 'rank', + 'rant', + 'rap', + 'rape', + 'rat', + 'rate', + 'reach', + 'reason', + 'recall', + 'record', + 'redo', + 'reel', + 'refactor', + 'reference', + 'reform', + 'refund', + 'refuse', + 'regard', + 'register', + 'regret', + 'reject', + 'release', + 'relish', + 'remake', + 'remark', + 'remedy', + 'rendezvous', + 'rent', + 'reorder', + 'repair', + 'repeal', + 'repeat', + 'reply', + 'report', + 'request', + 'reserve', + 'resolve', + 'resort', + 'respect', + 'rest', + 'restart', + 'result', + 'resume', + 'return', + 'reveal', + 'reverse', + 'review', + 'reward', + 'rhyme', + 'ride', + 'ring', + 'riot', + 'rip', + 'rise', + 'risk', + 'roast', + 'rock', + 'roll', + 'roof', + 'root', + 'rope', + 'route', + 'rub', + 'ruin', + 'rule', + 'run', + 'rush', + 'rust', + 'sack', + 'sacrifice', + 'safeguard', + 'sail', + 'sample', + 'scale', + 'scan', + 'scar', + 'scare', + 'schedule', + 'score', + 'scrape', + 'scratch', + 'screen', + 'screw', + 'scribble', + 'scroll', + 'seal', + 'search', + 'seat', + 'seed', + 'sense', + 'sentence', + 'serve', + 'service', + 'set', + 'shack', + 'shade', + 'shape', + 'share', + 'shave', + 'shed', + 'sheild', + 'shelter', + 'shift', + 'ship', + 'shiver', + 'shock', + 'shop', + 'shore', + 'show', + 'shuffle', + 'side', + 'sign', + 'signal', + 'silence', + 'sink', + 'sip', + 'size', + 'skateboard', + 'ski', + 'skip', + 'sleep', + 'slice', + 'slip', + 'slit', + 'slouch', + 'smash', + 'smell', + 'smile', + 'smirk', + 'smoke', + 'snake', + 'snap', + 'sneeze', + 'snow', + 'sob', + 'sound', + 'spam', + 'span', + 'spark', + 'speed', + 'spell', + 'spill', + 'spin', + 'spiral', + 'spite', + 'splash', + 'split', + 'sponsor', + 'spot', + 'spray', + 'spread', + 'spring', + 'sprinkle', + 'spruce', + 'spur', + 'spy', + 'square', + 'stack', + 'staff', + 'stage', + 'stain', + 'stake', + 'stalk', + 'stall', + 'stamp', + 'stand', + 'staple', + 'star', + 'stare', + 'start', + 'state', + 'stay', + 'steer', + 'stem', + 'step', + 'stick', + 'stink', + 'stitch', + 'stocking', + 'stockpile', + 'stoop', + 'stop', + 'store', + 'storm', + 'strain', + 'stream', + 'stress', + 'stretch', + 'strike', + 'string', + 'stroke', + 'struggle', + 'study', + 'stuff', + 'stumble', + 'style', + 'sub', + 'subject', + 'suit', + 'sum', + 'supplement', + 'supply', + 'support', + 'surface', + 'surge', + 'surprise', + 'survey', + 'swear', + 'sweat', + 'swing', + 'swipe', + 'switch', + 'tag', + 'talk', + 'tally', + 'tangle', + 'target', + 'taste', + 'tax', + 'tear', + 'tee', + 'tell', + 'temper', + 'test', + 'text', + 'thread', + 'throw', + 'thrust', + 'tick', + 'tide', + 'tie', + 'tile', + 'time', + 'tip', + 'tire', + 'toll', + 'tone', + 'top', + 'torture', + 'toss', + 'total', + 'touch', + 'tour', + 'track', + 'trade', + 'train', + 'transfer', + 'transition', + 'trap', + 'travel', + 'treat', + 'trek', + 'trend', + 'tribute', + 'trick', + 'trickle', + 'trigger', + 'trim', + 'trip', + 'trot', + 'trouble', + 'trust', + 'tune', + 'tunnel', + 'turn', + 'twin', + 'twist', + 'type', + 'update', + 'upgrade', + 'upload', + 'urge', + 'vacuum', + 'value', + 'venture', + 'vibe', + 'view', + 'visit', + 'voice', + 'void', + 'vomit', + 'vote', + 'vow', + 'wait', + 'walk', + 'war', + 'warehouse', + 'warrant', + 'wash', + 'waste', + 'watch', + 'wave', + 'wax', + 'wear', + 'weather', + 'weed', + 'welcome', + 'wheel', + 'whip', + 'whisk', + 'whisper', + 'whistle', + 'wick', + 'win', + 'wind', + 'wing', + 'wipe', + 'wire', + 'wish', + 'wonder', + 'work', + 'workshop', + 'worry', + 'worship', + 'worth', + 'wound', + 'wrap', + 'wreck', + 'wrinkle', + 'yawn', + 'yell', + 'yield', + 'zip', + 'zone', + 'zoom', + 'lie', + // 'average', + // 'fast', + // 'try', +] diff --git a/data/lexicon/switches/person-adj.js b/data/lexicon/switches/person-adj.js new file mode 100644 index 0000000..c303247 --- /dev/null +++ b/data/lexicon/switches/person-adj.js @@ -0,0 +1,14 @@ +export default [ + 'misty', + 'rusty', + 'dusty', + 'rich', + 'randy', + 'sandy', + 'earnest', + 'frank', + // 'young', + 'brown', + 'bella', + 'woody' +] \ No newline at end of file diff --git a/data/lexicon/switches/person-date.js b/data/lexicon/switches/person-date.js new file mode 100644 index 0000000..ce3a786 --- /dev/null +++ b/data/lexicon/switches/person-date.js @@ -0,0 +1,8 @@ +// person-names that can be dates +export default [ + // clues: [person, date], + // fallback: 'Month', + 'april', 'august', 'jan', 'january', 'june', 'sep', 'avril', + // 'may' +] + diff --git a/data/lexicon/switches/person-noun.js b/data/lexicon/switches/person-noun.js new file mode 100644 index 0000000..2428b1e --- /dev/null +++ b/data/lexicon/switches/person-noun.js @@ -0,0 +1,107 @@ +// person-names that can be dates +export default [ + // clues: [person, noun], + // fallback: 'Singular', + // words: [ + 'alfredo', + 'alma', + 'art', + 'baker', + 'benedict', + 'berg', + 'bill', + 'brandy', + 'brook', + 'cam', + 'charity', + 'chin', + 'christian', + 'cliff', + 'crystal', + 'daisy', + 'dawn', + 'dean', + 'deja', + 'dick', + 'dixie', + 'dolly', + 'earl', + 'eddy', + 'emir', + 'eula', + 'eve', + 'faith', + 'fern', + 'flo', + 'gail', + 'gene', + 'grant', + "guy", + 'hall', + 'hazel', + 'hill', + 'holly', + // 'hope', + 'jade', + 'jasmine', + 'jay', + 'jean', + 'jewel', + 'jolie', + 'joy', + 'kelvin', + 'king', + 'kitty', + 'lane', + 'leo', + 'lily', + 'max', + 'maya', + 'melody', + 'miles', + 'olive', + 'patsy', + 'page', + 'pearl', + 'penny', + 'pol', + 'ray', + 'reed', + 'rex', + 'robin', + 'rod', + 'rose', + 'ruby', + 'sky', + 'sonny', + 'summer', + 'trinity', + 'van', + 'viola', + 'violet', + 'wang', + 'ward', + 'venus', + "dj", + "paddy", + "herb", + "fanny", + "norm", + "bo", + "bud", + "finn", + "mat", + "mats", + "nat", + "hunter", + "ward", + "dean", + "gill", + "chambers", + "watts", + "banks", + "fields", + "miles", + "potter", +] + diff --git a/data/lexicon/switches/person-place.js b/data/lexicon/switches/person-place.js new file mode 100644 index 0000000..30bae0b --- /dev/null +++ b/data/lexicon/switches/person-place.js @@ -0,0 +1,19 @@ +// cities +export default [ + 'alexandria', + 'austin', + 'darwin', + 'diego', + 'hamilton', + 'houston', + 'jordan', + 'kent', + 'kobe', + 'orlando', + 'salvador', + 'samara', + 'santiago', + 'sydney', + 'victoria', + 'virginia', +] diff --git a/data/lexicon/switches/person-verb.js b/data/lexicon/switches/person-verb.js new file mode 100644 index 0000000..a3ab5c7 --- /dev/null +++ b/data/lexicon/switches/person-verb.js @@ -0,0 +1,39 @@ +// words that can be a verb or a person's name +export default [ + // clues: [person, verb], + // fallback: 'PresentTense', //maybe? + 'biff', + 'blaze', + 'blossom', + 'bob', + 'buck', + 'chase', + 'chuck', + 'drew', + 'foster', + 'grace', + 'grant', + 'jack', + 'lance', + 'mack', + 'mark', + 'marshal', + 'nick', + 'ollie', + 'pat', + 'peg', + 'pierce', + 'rob', + 'spike', + 'stew', + 'sue', + 'skip', + 'wade', + // 'hope', + // 'trace', + // 'bill', + // 'will', + // 'sung' + // 'may' + // 'peter', +] diff --git a/data/lexicon/switches/unit-noun.js b/data/lexicon/switches/unit-noun.js new file mode 100644 index 0000000..ce8cb6c --- /dev/null +++ b/data/lexicon/switches/unit-noun.js @@ -0,0 +1,51 @@ +export default [ + 'cm', + 'cup', + 'cups', + 'feet', + 'foot', + 'ft', + 'gal', + 'gb', + 'hg', + 'inch', + 'inches', + 'k', + 'kb', + 'kelvin', + 'kg', + 'kb', + 'km', + 'lb', + 'm', + 'mb', + 'mg', + 'mi', + 'hz', + 'mps', + 'mph', + 'miles', + 'ml', + 'mm', + 'mph', + 'newton', + 'newtons', + 'oz', + 'pa', + // 'pound', + // 'pounds', + 'pt', + 'px', + 'qt', + 'tablespoon', + 'tablespoons', + 'tb', + 'tbl', + 'tbsp', + 'teaspoon', + 'teaspoons', + 'tsp', + 'yard', + 'yards', + 'yd', +] \ No newline at end of file diff --git a/data/lexicon/verbs/infinitives.js b/data/lexicon/verbs/infinitives.js new file mode 100644 index 0000000..b557c99 --- /dev/null +++ b/data/lexicon/verbs/infinitives.js @@ -0,0 +1,792 @@ +export default [ + 'abandon', + 'abet', + 'abide', + 'abolish', + 'abort', + 'abound', + 'abscond', + 'absolve', + 'accept', + 'acclimate', + 'accommodate', + 'accompany', + 'accomplish', + 'accost', + 'accrue', + 'accuse', + 'accustom', + 'achieve', + 'acknowledge', + 'acquiesce', + 'acquire', + 'activate', + 'adapt', + 'adjourn', + 'adjust', + 'administer', + 'admit', + 'adopt', + 'adorn', + 'adsorb', + 'affix', + 'afford', + 'agree', + 'align', + 'allege', + 'allot', + 'allow', + 'allude', + 'amalgamate', + 'amaze', + 'amuse', + 'analyse', + 'animate', + 'anneal', + 'announce', + 'annoy', + 'annul', + 'anticipate', + 'appear', + 'appease', + 'apply', + 'appoint', + 'appraise', + 'approve', + 'argue', + 'arise', + 'arouse', + 'arrange', + 'arrive', + 'aspire', + 'assail', + 'assemble', + 'assert', + 'assess', + 'assign', + 'assure', + 'astonish', + 'attach', + 'attest', + 'attract', + 'augment', + 'automate', + 'avert', + 'avoid', + 'await', + 'awaken', + 'babysit', + 'backfire', + 'baffle', + 'bathe', + 'be', + 'become', + 'beg', + 'begin', + 'beguile', + 'behave', + 'behead', + 'behold', + 'believe', + 'belittle', + 'bequeath', + 'bestow', + 'betray', + 'bewilder', + 'bide', + 'bleed', + 'blow', + 'boil', + 'bolster', + 'bombard', + 'borrow', + 'bother', + 'brake', + 'breastfeed', + 'breathe', + 'bring', + 'broaden', + 'build', + 'burst', + 'bury', + 'buy', + 'cancel', + 'careen', + 'cater', + 'caulk', + 'cease', + 'cherish', + 'chew', + 'chirp', + 'choose', + 'chop', + 'circumvent', + 'cite', + 'cleanse', + 'cling', + 'coalesce', + 'coerce', + 'coexist', + 'cohabit', + 'coincide', + 'collect', + 'collide', + 'collude', + 'combust', + 'come', + 'commence', + 'compel', + 'compete', + 'compile', + 'comply', + 'conceal', + 'conceive', + 'conclude', + 'concur', + 'condemn', + 'condense', + 'condone', + 'confess', + 'confide', + 'configure', + 'confirm', + 'conform', + 'confront', + 'confuse', + 'conjure', + 'connote', + 'conquer', + 'conserve', + 'consider', + 'consist', + 'consolidate', + 'conspire', + 'constitute', + 'consult', + 'contain', + 'continue', + 'contribute', + 'convene', + 'converge', + 'convey', + 'convince', + 'corrode', + 'crave', + 'create', + 'cripple', + 'crumble', + 'curtail', + 'dampen', + 'darken', + 'daunt', + 'deafen', + 'debark', + 'debrief', + 'debug', + 'debunk', + 'deceive', + 'decide', + 'decimate', + 'decipher', + 'declare', + 'decode', + 'decommission', + 'decompose', + 'decouple', + 'decree', + 'decry', + 'decrypt', + 'deduct', + 'deepen', + 'deface', + 'define', + 'deform', + 'defraud', + 'defy', + 'delimit', + 'deliver', + 'demean', + 'demolish', + 'denote', + 'denounce', + 'deny', + 'depart', + 'depict', + 'deplore', + 'deploy', + 'deport', + 'derail', + 'derive', + 'desist', + 'detach', + 'develop', + 'devolve', + 'diagnose', + 'die', + 'differ', + 'dig', + 'diminish', + 'dine', + 'disable', + 'disarm', + 'disband', + 'disburse', + 'discard', + 'discern', + 'disclaim', + 'disclose', + 'discourage', + 'discover', + 'discuss', + 'dislodge', + 'dismantle', + 'dispense', + 'disperse', + 'displace', + 'displease', + 'dispose', + 'disprove', + 'disrupt', + 'dissolve', + 'dissuade', + 'distil', + 'distill', + 'distinguish', + 'distort', + 'disturb', + 'diverge', + 'divert', + 'divest', + 'divulge', + 'do', + 'draw', + 'dredge', + 'drown', + 'dwindle', + 'earmark', + 'earn', + 'eat', + 'edit', + 'elapse', + 'elect', + 'elucidate', + 'elude', + 'embalm', + 'embark', + 'embody', + 'embrace', + 'embroider', + 'embroil', + 'emerge', + 'emphasize', + 'empower', + 'enable', + 'enact', + 'encircle', + 'enclose', + 'encourage', + 'encroach', + 'encrypt', + 'encumber', + 'endanger', + 'endorse', + 'endow', + 'endure', + 'enforce', + 'engage', + 'engender', + 'engrave', + 'engulf', + 'enhance', + 'enjoy', + 'enlarge', + 'enlist', + 'enquire', + 'enrich', + 'enrol', + 'enroll', + 'ensue', + 'ensure', + 'enter', + 'entice', + 'entrain', + 'entrench', + 'entrust', + 'envelop', + 'envisage', + 'envision', + 'equip', + 'erase', + 'erupt', + 'eschew', + 'espouse', + 'establish', + 'etch', + 'evaluate', + 'evoke', + 'evolve', + 'exalt', + 'examine', + 'exceed', + 'exclaim', + 'exclude', + 'exert', + 'exhale', + 'exhort', + 'exhume', + 'exist', + 'exit', + 'expect', + 'expedite', + 'expel', + 'expire', + 'explain', + 'exploit', + 'explore', + 'expose', + 'expunge', + 'extinguish', + 'extol', + 'exude', + 'falter', + 'fasten', + 'ferment', + 'find', + 'flatter', + 'flee', + 'fling', + 'forbid', + 'foreclose', + 'forego', + 'foreshadow', + 'forewarn', + 'forfeit', + 'forge', + 'forget', + 'forgive', + 'forsake', + 'forsee', + 'freeze', + 'freshen', + 'frighten', + 'frolic', + 'fulfil', + 'fundraise', + 'furnish', + 'gather', + 'get', + 'give', + 'glean', + 'go', + 'govern', + 'grab', + 'grapple', + 'graze', + 'greet', + 'grow', + 'hamper', + 'hang', + 'happen', + 'harangue', + 'harass', + 'hasten', + 'have', + 'hear', + 'heighten', + 'hide', + 'hijack', + 'hinder', + 'hoist', + 'hurt', + 'ignore', + 'imbue', + 'immerse', + 'impale', + 'impart', + 'imperil', + 'impinge', + 'imply', + 'import', + 'impose', + 'impoverish', + 'impress', + 'imprison', + 'improve', + 'incite', + 'include', + 'indicate', + 'indulge', + 'infest', + 'inform', + 'infuse', + 'ingest', + 'inhabit', + 'inhibit', + 'initiate', + 'injure', + 'inquire', + 'insist', + 'inspire', + 'install', + 'instil', + 'instruct', + 'insure', + 'interact', + 'intern', + 'interpret', + 'interrupt', + 'intimidate', + 'intoxicate', + 'introduce', + 'intrude', + 'inundate', + 'invade', + 'invent', + 'invert', + 'invest', + 'invoke', + 'involve', + 'irk', + 'join', + 'juggle', + 'juxtapose', + 'keep', + 'kidnap', + 'kneel', + 'know', + 'languish', + 'launder', + 'learn', + 'leave', + 'lend', + 'lengthen', + 'lessen', + 'like', + 'linger', + 'liquefy', + 'liquidate', + 'liven', + 'lose', + 'lurk', + 'maim', + 'maintain', + 'make', + 'manage', + 'meet', + 'mimic', + 'mimick', + 'mince', + 'mingle', + 'minus', + 'misplace', + 'molest', + 'mourn', + 'mow', + 'multiply', + 'nourish', + 'obey', + 'observe', + 'obsess', + 'obtain', + 'occupy', + 'occur', + 'omit', + 'operate', + 'opine', + 'oppose', + 'outgrow', + 'outnumber', + 'outpace', + 'overlap', + 'oversee', + 'overshadow', + 'overturn', + 'overuse', + 'overwhelm', + 'owe', + 'pamper', + 'paralyse', + 'participate', + 'patrol', + 'pave', + 'perceive', + 'perform', + 'perish', + 'permeate', + 'perplex', + 'persevere', + 'persist', + 'persuade', + 'pervade', + 'pinpoint', + 'plummet', + 'poach', + 'pollute', + 'portray', + 'possess', + 'preach', + 'preclude', + 'predetermine', + 'predict', + 'prefer', + 'preoccupy', + 'presuppose', + 'prevail', + 'prevent', + 'proclaim', + 'procure', + 'prod', + 'profess', + 'prohibit', + 'promote', + 'pronounce', + 'propose', + 'prosper', + 'protrude', + 'prove', + 'provide', + 'provoke', + 'publish', + 'puke', + 'punish', + 'purport', + 'pursuant', + 'pursue', + 'put', + 'quash', + 'quench', + 'quit', + 'quote', + 'rattle', + 'ravish', + 'react', + 'read', + 'realise', + 'realize', + 'reap', + 'reboot', + 'rebuff', + 'receive', + 'reckon', + 'reclaim', + 'recognize', + 'reconcile', + 'recoup', + 'recover', + 'recycle', + 'redact', + 'reduce', + 'refinance', + 'refine', + 'reflect', + 'refocus', + 'refract', + 'refresh', + 'refuel', + 'refurbish', + 'regroup', + 'rehearse', + 'reheat', + 'reimburse', + 'reinforce', + 'rejoice', + 'relate', + 'relent', + 'relieve', + 'relinquish', + 'relive', + 'reload', + 'rely', + 'remain', + 'remember', + 'remove', + 'render', + 'renew', + 'renounce', + 'repel', + 'rephrase', + 'replace', + 'replenish', + 'replicate', + 'represent', + 'require', + 'resemble', + 'resent', + 'reside', + 'resign', + 'resist', + 'respond', + 'restock', + 'restrain', + 'restrict', + 'restructure', + 'resurface', + 'retire', + 'retrieve', + 'retrofit', + 'reup', //'re-up' + 'revamp', + 'revel', + 'revere', + 'revert', + 'revisit', + 'revive', + 'revoke', + 'revolve', + 'rid', + 'ripen', + 'roam', + 'rot', + 'rout', + 'ruin', + 'sadden', + 'satisfy', + 'say', + 'scavenge', + 'sculpt', + 'see', + 'seek', + 'seem', + 'sell', + 'send', + 'sequester', + 'sever', + 'sew', + 'shake', + 'sharpen', + 'shatter', + 'shine', + 'shoot', + 'shorten', + 'shrink', + 'shrivel', + 'shun', + 'sift', + 'sing', + 'sit', + 'slam', + 'slay', + 'slide', + 'smuggle', + 'snatch', + 'sneak', + 'sniff', + 'solicit', + 'solve', + 'soothe', + 'sow', + 'spawn', + 'speak', + 'spend', + 'spit', + 'splay', + 'spoil', + 'spoof', + 'spring', + 'squander', + 'squish', + 'stab', + 'stagger', + 'startle', + 'starve', + 'steal', + 'stiffen', + 'stifle', + 'sting', + 'strangle', + 'strengthen', + 'strew', + 'strive', + 'sublimate', + 'submerge', + 'submit', + 'subside', + 'subsist', + 'subvert', + 'succeed', + 'succumb', + 'suffer', + 'suffice', + 'suggest', + 'summarise', + 'summon', + 'suppose', + 'suppress', + 'surmount', + 'surpass', + 'survive', + 'swallow', + 'sweep', + 'sweeten', + 'swim', + 'tackle', + 'tailor', + 'take part', + 'take', + 'tamper', + 'tarnish', + 'teach', + 'tease', + 'tempt', + 'thank', + 'think', + 'threaten', + 'thrive', + 'thwart', + 'topple', + 'toughen', + 'traffick', + 'trample', + 'transact', + 'transform', + 'transpire', + 'transport', + 'tremble', + 'tumble', + 'uncover', + 'undercut', + 'undergo', + 'understand', + 'undervalue', + 'underwhelm', + 'undo', + 'unearth', + 'unfounded', + 'unleash', + 'unlock', + 'unplug', + 'unravel', + 'untie', + 'unveil', + 'uphold', + 'uplift', + 'validate', + 'vanish', + 'vary', + 'vie', + 'waive', + 'wake', + 'wander', + 'want', + 'warn', + 'weave', + 'wed', + 'weep', + 'widen', + 'wield', + 'withdraw', + 'wither', + 'worsen', + 'wreak', + 'wrestle', + 'wring', + 'write', + 'giggle', + 'sway', + 'constrain', + 'abduct', + 'attain', + 'pound', + 'consume', + 'befriend', +] diff --git a/data/lexicon/verbs/modals.js b/data/lexicon/verbs/modals.js new file mode 100644 index 0000000..cbdb932 --- /dev/null +++ b/data/lexicon/verbs/modals.js @@ -0,0 +1,16 @@ +export default [ + 'can', + 'could', + 'lets', //arguable + // 'may', + 'might', + 'must', + 'ought to', + 'ought', + 'oughta', + 'shall', + 'shant', + 'should', + 'will', + 'would', +] diff --git a/data/lexicon/verbs/participles.js b/data/lexicon/verbs/participles.js new file mode 100644 index 0000000..eeb3dd9 --- /dev/null +++ b/data/lexicon/verbs/participles.js @@ -0,0 +1,78 @@ +export default [ + // -- participle forms-- + 'arisen', + 'awaken', + 'awoken', + 'beaten', + 'been', + 'begun', + 'bitten', + 'blown', + 'broken', + 'built', + 'chosen', + 'clung', + // 'done', + 'dove', + 'drawn', + 'dreamt', + 'driven', + // 'drunk', + 'eaten', + 'fallen', + 'flown', + 'forbidden', + 'forgiven', + 'forgotten', + 'forsaken', + 'forseen', + 'frozen', + 'given', + 'gone', + 'gotten', + 'grown', + 'hasten', + 'hidden', + 'known', + 'outdone', + 'outgrown', + 'overdone', + 'overseen', + 'overtaken', + 'overthrown', + 'proven', + 'rewritten', + 'ridden', + 'risen', + 'rung', + 'seen', + 'sewn', + 'shaken', + 'shone', + 'shown', + 'shrunk', + 'slain', + 'sought', + 'sown', + 'spilt', + 'spoken', + 'stolen', + 'strewn', + 'sung', + 'sunk', + 'sworn', + 'swum', + 'taken', + 'thrown', + 'torn', + 'undergone', + 'undone', + 'uprisen', + 'waken', + 'withdrawn', + 'woken', + 'worn', + 'woven', + 'written', + 'wrung', +] diff --git a/data/lexicon/verbs/phrasals.js b/data/lexicon/verbs/phrasals.js new file mode 100644 index 0000000..bab20e9 --- /dev/null +++ b/data/lexicon/verbs/phrasals.js @@ -0,0 +1,954 @@ +// phrasal verbs are two words that really mean one verb. +// 'beef up' is one verb, and not some direction of beefing. +// this seems like an inefficient way to store it, but the trie compresses by prefix +// the first-words are also conjugated as infinitives, so mind that +// by @spencermountain, 2015 mit +// many credits to http://www.allmyphrasalverbs.com/ + +export default [ + 'act out', + 'air out', + 'act up', + 'add down', + 'add off', + 'add on', + 'add up', + 'ask around', + 'ask out', + 'auction off', + 'back away', + 'back down', + 'back out', + 'back off', + 'back in', + 'back up', + 'bail out', + 'bang in', + 'bang out', + 'bank on', + 'bargain on', + 'barge in', + 'barge out', + 'bash in', + 'bash out', + 'be off', + 'be onto', + 'belt out', + 'bear out', + 'bear down', + 'beat down', + 'beat in', + 'beat off', + 'beat out', + 'beat up', + 'beef up', + 'bend down', + 'bend over', + 'bend up', + 'bite off', + 'black out', + 'blank out', + 'blast off', + 'bleed out', + 'block in', + 'block off', + 'block out', + 'blow away', + 'blow back', + 'blow down', + 'blow out', + 'blow up', + 'blurt out', + 'board up', + 'bore down', + 'bog down', + 'bog up', + 'boil down', + 'boil up', + 'bone up', + 'book in', + 'book out', + 'boot up', + 'boss around', + 'bottle down', + 'bottle up', + 'bounce away', + 'bounce back', + 'box in', + 'box out', + 'branch out', + 'break down', + 'break in', + 'break out', + 'break up', + 'brighten up', + 'bring about', + 'bring along', + 'bring around', + 'bring away', + 'bring back', + 'bring down', + 'bring forth', + 'bring in', + 'bring out', + 'bring up', + 'bring on', + 'bring under', + 'brush off', + 'brush up', + 'bubble over', + 'buckle down', + 'buckle up', + 'build up', + 'bulk down', + 'bulk up', + 'bundle down', + 'bundle up', + 'burn in', + 'burn off', + 'burn out', + 'burst in', + 'burst out', + 'bust down', + 'bust in', + 'bust out', + 'bust up', + 'butt in', + 'butt out', + 'buy out', + 'buy up', + 'buzz off', + 'call around', + 'call away', + 'call back', + 'call down', + 'call off', + 'call on', + 'call up', + 'call out', + 'calm down', + 'cancel out', + 'carry away', + 'carry off', + 'carry on', + 'carry out', + 'carve down', + 'carve in', + 'carve out', + 'carve up', + 'cash in', + 'cash out', + 'cast doubt', + 'cast off', + 'catch off', + 'catch on', + 'catch up', + 'cave in', + 'check in', + 'check out', + 'cheer on', + 'cheer up', + 'chat up', + 'chew up', + 'chew out', + 'chill out', + 'chip in', + 'clean down', + 'clean up', + 'clear up', + 'clear out', + 'close up', + 'close off', + 'close out', + 'close in', + 'come apart', + 'come around', + 'come away', + 'come back', + 'come by', + 'come forth', + 'come forward', + 'come in', + 'come off', + 'come up', + 'come out', + 'come over', + 'come together', + 'come through', + 'come under', + 'come true', + 'cook down', + 'cook up', + 'cool down', + 'cool off', + 'count off', + 'count on', + 'crack on', + 'creep by', + 'creep down', + 'creep in', + 'creep on', + 'creep out', + 'creep up', + 'cross in', + 'crowd out', + 'cross out', + 'cry out', + 'cut away', + 'cut back', + 'cut down', + 'cut out', + 'cut up', + 'cut off', + 'die down', + 'dam up', + 'dole out', + 'do over', + 'double down', + 'double up', + 'drum up', + 'drag on', + 'draw on', + 'dress down', + 'dress up', + 'drop away', + 'drop back', + 'drop by', + 'drop in', + 'drop off', + 'drop out', + 'eat in', + 'eat out', + 'eat up', + 'edge out', + 'end off', + 'end up', + 'eye up', + 'face down', + 'face off', + 'face up', + 'fall apart', + 'fall back', + 'fall behind', + 'fall down', + 'fall in', + 'fall off', + 'fall out', + 'fall over', + 'fall through', + 'fall short', + 'fall victim', + 'farm out', + 'fatten up', + 'feed off', + 'feed on', + 'feel up', + 'fence in', + 'fence out', + 'fend for', + 'fend off', + 'fess up', + 'fight back', + 'figure out', + 'file away', + 'file for', + 'file in', + 'file out', + 'fill down', + 'fill in', + 'fill out', + 'fill up', + 'find out', + 'finish up', + 'fire away', + 'fire back', + 'fire up', + 'firm up', + 'fish out', + 'fish up', + 'fizzle out', + 'flag down', + 'flag up', + 'flake out', + 'flame out', + 'flame up', + 'flare out', + 'flare up', + 'flatten down', + 'flesh out', + 'flip out', + 'fork over', + 'fold down', + 'fold up', + 'fog up', + 'follow up', + 'fool about', + 'fool around', + 'fool with', + 'free up', + 'freeze up', + 'freshen up', + 'frighten away', + 'frighten off', + 'frown on', + 'fry up', + 'fuck up', + 'fuck around', + 'fuel down', + 'fuel up', + 'gad about', + 'gang up', + 'gear down', + 'gear up', + 'geek out', + 'get across', + 'get ahead', + 'get along', + 'get around', + 'get at', + 'get away', + 'get back', + 'get by', + 'get down', + 'get in', + 'get off', + 'get on', + 'get out', + 'get over', + 'get round', + 'get up', + 'give away', + 'give back', + 'give birth', + 'give down', + 'give in', + 'give off', + 'give on', + 'give out', + 'give rise', + 'give up', + 'give way', + 'gloss over', + 'go about', + 'go after', + 'go ahead', + 'go away', + 'go back', + 'go by', + 'go it', + 'go off', + 'go on', + 'go over', + 'go round', + 'go through', + 'go under', + 'goof off', + 'goof up', + 'grind down', + 'grind off', + 'grind on', + 'grind up', + 'grow down', + 'grow in', + 'grow out', + 'grow up', + 'gun for', + 'hack up', + 'hash out', + 'ham up', + 'hand down', + 'hand in', + 'hand out', + 'hand over', + 'hang down', + 'hang in', + 'hang out', + 'hang up', + 'hang on', + 'hanker for', + 'have at', + 'have it', + 'have to', + 'haze over', + 'head in', + 'head off', + 'head on', + 'head out', + 'head over', + 'head under', + 'head for', + 'heal over', + 'hear from', + 'hear of', + 'heat up', + 'help out', + 'hide away', + 'hide out', + 'hit back', + 'hit on', + 'hit up', + 'hold back', + 'hold down', + 'hold dear', + 'hold fast', + 'hold off', + 'hold on', + 'hold out', + 'hold over', + 'hold up', + 'hole up', + 'hone in', + 'horse around', + 'hunker down', + 'hunt around', + 'hunt down', + 'hurry up', + 'hush down', + 'hush up', + 'iron out', + 'jack in', + 'jack off', + 'jack out', + 'jazz up', + 'joke around', + 'jot down', + 'juice up', + 'jump in', + 'keel over', + 'keep away', + 'keep back', + 'keep down', + 'keep from', + 'keep in', + 'keep off', + 'keep on', + 'keep out', + 'keep to', + 'keep up', + 'key in', + 'key up', + 'kick off', + 'kick out', + 'kick up', + 'knock down', + 'knock off', + 'knock out', + 'knock up', + 'lace up', + 'lap up', + 'lash into', + 'lash out', + 'latch on', + 'laugh off', + 'lay off', + 'lay on', + 'lay down', + 'lean in', + 'leave in', + 'leave open', + 'leave out', + 'let down', + 'let go', + 'let in', + 'let out', + 'let up', + 'level off', + 'level out', + 'lie around', + 'lie down', + 'lie in', + 'light up', + 'lighten up', + 'line up', + 'link up', + 'listen out', + 'listen up', + 'live off', + 'live up', + 'live out', + 'load down', + 'load up', + 'lock down', + 'lock in', + 'lock out', + 'lock up', + 'log in', + 'log off', + 'log on', + 'log out', + 'look after', + 'look back', + 'look down', + 'look forward', + 'look into', + 'look over', + 'look out', + 'look under', + 'look up', + 'loosen up', + 'lose out', + 'luck out', + 'lust over', + 'make do', + 'make off', + 'make out', + 'make up', + 'make sure', + 'make fun', + 'man down', + 'man up', + 'mark down', + 'mark up', + 'marry off', + 'mash up', + 'max out', + 'measure up', + 'melt down', + 'melt up', + 'mess about', + 'mess around', + 'mess up', + 'meet up', + 'miss out', + 'mix up', + 'mock up', + 'monkey with', + 'mop down', + 'mop up', + 'mouth off', + 'move along', + 'move away', + 'move down', + 'move in', + 'move out', + 'move up', + 'move on', + 'muddle up', + 'mull over', + 'nail down', + 'narrow down', + 'nerd out', + 'nod off', + 'note down', + 'open up', + 'opt in', + 'opt out', + 'own up', + 'pack down', + 'pack in', + 'pack out', + 'pack up', + 'pair down', + 'pair off', + 'pair up', + 'pan out', + 'pass away', + 'pass back', + 'pass in', + 'pass off', + 'pass on', + 'pass out', + 'pat down', + 'patch up', + 'pay back', + 'pay off', + 'peel in', + 'peel off', + 'peel out', + 'pencil in', + 'pick off', + 'pick on', + 'pick out', + 'pick up', + 'pig out', + 'pile on', + 'pile up', + 'pin down', + 'pin up', + 'pipe down', + 'pipe up', + 'play around', + 'play out', + 'place under', + 'plug in', + 'plump down', + 'plump up', + 'point out', + 'pop down', + 'pop off', + 'pop on', + 'pop up', + 'pop in', + 'pore over', + 'pour down', + 'power down', + 'power off', + 'power on', + 'power up', + 'prattle on', + 'press ahead', + 'press on', + 'print out', + 'prop up', + 'psych out', + 'psych up', + 'punch out', + 'pull apart', + 'pull down', + 'pull in', + 'pull out', + 'pull together', + 'pull up', + 'pull over', + 'put apart', + 'put away', + 'put back', + 'put down', + 'put in', + 'put off', + 'put on', + 'put out', + 'put together', + 'put up', + 'quiet down', + 'rack up', + 'rat out', + 'reach in', + 'reach out', + 'read off', + 'read out', + 'read over', + 'read up', + 'reel off', + 'rein in', + 'rent out', + 'rise up', + 'ring in', + 'ring off', + 'ring out', + 'rip off', + 'rip open', + 'rope off', + 'roll around', + 'roll in', + 'roll out', + 'roll up', + 'root about', + 'root for', + 'root out', + 'round out', + 'rough up', + 'round off', + 'rub down', + 'rub in', + 'rub out', + 'rub up', + 'rule out', + 'run across', + 'run away', + 'run back', + 'run down', + 'run in', + 'run into', + 'run out', + 'run over', + 'run through', + 'run under', + 'run up', + 'run around', + 'rustle up', + 'sail off', + 'save up', + 'scale down', + 'scale up', + 'scout out', + 'scrape down', + 'scrape up', + 'screw off', + 'screw in', + 'screw out', + 'see off', + 'see out', + 'see to', + 'sell off', + 'sell out', + 'send away', + 'send back', + 'send down', + 'send in', + 'send off', + 'send on', + 'send out', + 'send over', + 'send up', + 'set down', + 'set in', + 'set out', + 'set up', + 'set forth', + 'set upon', + 'set foot', + 'settle down', + 'settle in', + 'settle out', + 'settle up', + 'serve up', + 'shack up', + 'shade in', + 'shake down', + 'shake up', + 'shave off', + 'shoot away', + 'shoot back', + 'shoot for', + 'shoot off', + 'shoot out', + 'shout out', + 'show down', + 'show off', + 'show on', + 'show up', + 'shut in', + 'shut out', + 'shut up', + 'shut down', + 'side with', + 'sign in', + 'sign out', + 'sign up', + 'sink in', + 'sing along', + 'single out', + 'sit down', + 'sit in', + 'sit out', + 'sit up', + 'size up', + 'sleep in', + 'sleep off', + 'sleep over', + 'slice off', + 'slice up', + 'slip up', + 'slip on', + 'slip out', + 'slow down', + 'slow up', + 'smash down', + 'smash in', + 'smash out', + 'smash up', + 'smoke out', + 'snuggle up', + 'snap off', + 'snap on', + 'snap up', + 'snow in', + 'snow out', + 'sober up', + 'soak up', + 'sort out', + 'sound like', + 'spark up', + 'speed up', + 'speed down', + 'speak up', + 'speak out', + 'spell out', + 'spill out', + 'spill over', + 'spin up', + 'spice up', + 'splash out', + 'split off', + 'split up', + 'spread out', + 'spring on', + 'spruce up', + 'spur on', + 'square down', + 'square off', + 'square up', + 'stack up', + 'stamp out', + 'stand back', + 'stand down', + 'stand up', + 'start out', + 'start up', + 'start off', + 'stare down', + 'stave off', + 'stay up', + 'stay in', + 'step up', + 'step out', + 'stink up', + 'stir up', + 'stitch up', + 'stop by', + 'stop in', + 'stop off', + 'storm off', + 'storm out', + 'stretch out', + 'straighten out', + 'straighten up', + 'strike down', + 'strike in', + 'strike off', + 'strike out', + 'strike up', + 'string up', + 'string along', + 'stick up', + 'study up', + 'suck in', + 'suck off', + 'suck out', + 'suck up', + 'suit up', + 'sum up', + 'suss out', + 'swear by', + 'swing by', + 'switch away', + 'switch back', + 'switch off', + 'switch on', + 'tack on', + 'take aback', + 'take after', + 'take apart', + 'take away', + 'take back', + 'take down', + 'take leave', + 'take in', + 'take off', + 'take on', + 'take out', + 'take up', + 'take over', + 'talk over', + 'talk shit', + 'talk under', + 'team up', + 'tear down', + 'tear off', + 'tear up', + 'tee off', + 'tee up', + 'tell off', + 'tell on', + 'think back', + 'think over', + 'think up', + 'throw away', + 'throw back', + 'throw up', + 'throw in', + 'tick by', + 'tick off', + 'tide over', + 'tidy up', + 'tie away', + 'tie back', + 'tie down', + 'tie in', + 'tie up', + 'tighten down', + 'tighten up', + 'time out', + 'tip off', + 'tip over', + 'tire out', + 'tone down', + 'top down', + 'top off', + 'top out', + 'top up', + 'toss up', + 'track down', + 'trade in', + 'trade out', + 'trade up', + 'trickle down', + 'trip out', + 'trip up', + 'trot out', + 'try in', + 'try off', + 'try on', + 'try out', + 'tuck in', + 'turn down', + 'turn in', + 'turn off', + 'turn on', + 'turn out', + 'turn up', + 'type in', + 'type out', + 'type up', + 'urge on', + 'use up', + 'usher in', + 'vacuum up', + 'wait off', + 'wait on', + 'wait up', + 'wake up', + 'walk away', + 'walk in', + 'walk off', + 'walk out', + 'warm in', + 'warm out', + 'warm up', + 'wash away', + 'wash down', + 'wash out', + 'wash up', + 'watch out', + 'wave in', + 'wave out', + 'wean in', + 'wean out', + 'wear down', + 'wear in', + 'wear off', + 'wear on', + 'wear out', + 'weigh in', + 'weigh up', + 'weird out', + 'went down', + 'went up', + 'whack off', + 'wheel in', + 'wheel out', + 'whip out', + 'whip up', + 'wimp out', + 'wind down', + 'wind up', + 'wipe out', + 'wire up', + 'wise up', + 'work in', + 'work off', + 'work out', + 'work up', + 'write off', + 'write up', + 'yammer on', + 'zero in', + 'zero out', + 'zip by', + 'zip up', + 'zip over', + 'zone out', + 'zonk out', + 'grab hold', +] diff --git a/data/lexicon/verbs/verbs.js b/data/lexicon/verbs/verbs.js new file mode 100644 index 0000000..f0a0846 --- /dev/null +++ b/data/lexicon/verbs/verbs.js @@ -0,0 +1,11 @@ +//verbs we shouldn't conjugate, for whatever reason +export default [ + 'has', + 'keep tabs', + 'born', + 'cannot', + 'gonna', + 'msg', + 'make sure', + +] diff --git a/data/pairs/AdjToNoun.js b/data/pairs/AdjToNoun.js new file mode 100644 index 0000000..52e166e --- /dev/null +++ b/data/pairs/AdjToNoun.js @@ -0,0 +1,442 @@ +export default [ + ['abject', 'abjection'], + ['abstemious', 'abstemiousness'], + ['abundant', 'abundance'], + ['accomplished', 'accomplishment'], + ['accurate', 'accuracy'], + ['active', 'activity'], + ['adamant', 'adamance'], + ['adaptable', 'adaptability'], + ['addictive', 'addiction'], + ['admirable', 'admiration'], + ['adventurous', 'adventurousness'], + ['affectionate', 'affection'], + ['aggressive', 'aggression'], + ['agile', 'agility'], + ['agitated', 'agitation'], + ['alert', 'alertness'], + ['aloof', 'aloofness'], + ['amazed', 'amazement'], + ['ambitious', 'ambition'], + ['amiable', 'amiability'], + ['amicable', 'amicability'], + ['amorous', 'amorousness'], + ['ample', 'ampleness'], + ['amused', 'amusement'], + ['amusing', 'amusement'], + ['ancient', 'antiquity'], + ['apprehensive', 'apprehensiveness'], + ['ardent', 'ardor'], + ['argumentative', 'argumentativeness'], + ['articulate', 'articulacy'], + ['artistic', 'art'], + ['assertive', 'assertiveness'], + ['astute', 'astuteness'], + ['attractive', 'attractiveness'], + ['audacious', 'audacity'], + ['austere', 'austerity'], + ['authentic', 'authenticity'], + ['automatic', 'automation'], + ['bad', 'badness'], + ['beautiful', 'beauty'], + ['benevolent', 'benevolence'], + ['bold', 'boldness'], + ['boring', 'boredom'], + ['brave', 'bravery'], + ['bright', 'brightness'], + ['busy', 'business'], + ['calm', 'calmness'], + ['cantankerous', 'cantankerousness'], + ['careful', 'carefulness'], + ['caring', 'care'], + ['cautious', 'caution'], + ['certain', 'certainty'], + ['charismatic', 'charisma'], + ['cheap', 'cheapness'], + ['cheerful', 'cheerfulness'], + ['circumspect', 'circumspection'], + ['clean', 'cleanliness'], + ['clear', 'clarity'], + ['clever', 'cleverness'], + ['cold', 'coldness'], + ['comfortable', 'comfort'], + ['compassionate', 'compassion'], + ['compatible', 'compatibility'], + ['competent', 'competency'], + ['concise', 'conciseness'], + ['condescending', 'condescension'], + ['confident', 'confidence'], + ['congenial', 'congeniality'], + ['conscientious', 'conscientiousness'], + ['contemptuous', 'contemptuousness'], + ['cooperative', 'cooperation'], + ['courageous', 'courage'], + ['courteous', 'courtesy'], + ['coy', 'coyness'], + ['creative', 'creativity'], + ['credible', 'credibility'], + ['curious', 'curiosity'], + ['dark', 'darkness'], + ['decisive', 'decisiveness'], + ['dedicated', 'dedication'], + ['deep', 'depth'], + ['deliberate', 'deliberation'], + ['delicate', 'delicacy'], + ['delightful', 'delight'], + ['dependable', 'dependability'], + ['desperate', 'desperation'], + ['determined', 'determination'], + ['devoted', 'devotion'], + ['diffident', 'diffidence'], + ['diligent', 'diligence'], + ['dirty', 'dirtiness'], + ['disciplined', 'discipline'], + ['discreet', 'discretion'], + ['doleful', 'dolefulness'], + ['dramatic', 'drama'], + ['dull', 'dullness'], + ['dynamic', 'dynamism'], + ['eager', 'eagerness'], + ['educated', 'education'], + ['efficient', 'efficiency'], + ['elegant', 'elegance'], + ['eloquent', 'eloquence'], + ['empathetic', 'empathy'], + ['empty', 'emptiness'], + ['enduring', 'endurance'], + ['energetic', 'energy'], + ['engaging', 'engagement'], + ['enough', 'enoughness'], + ['enthusiastic', 'enthusiasm'], + ['excellent', 'excellence'], + ['excited', 'excitement'], + ['exciting', 'excitement'], + ['exemplary', 'exemplariness'], + ['expedient', 'expedience'], + ['expensive', 'expense'], + ['experienced', 'experience'], + ['explosive', 'explosiveness'], + ['expressive', 'expressiveness'], + ['facetious', 'facetiousness'], + ['fanciful', 'fancifulness'], + ['fantastic', 'fantasy'], + ['fast', 'fastness'], + ['fatuous', 'fatuousness'], + ['fearless', 'fearlessness'], + ['fertile', 'fertility'], + ['fervent', 'fervor'], + ['fierce', 'fierceness'], + ['flawless', 'flawlessness'], + ['flexible', 'flexibility'], + ['flowing', 'flow'], + ['focused', 'focus'], + ['forceful', 'force'], + ['forgiving', 'forgiveness'], + ['fortunate', 'fortune'], + ['fragrant', 'fragrance'], + ['frank', 'frankness'], + ['free', 'freedom'], + ['friendly', 'friendliness'], + ['frivolous', 'frivolity'], + ['frugal', 'frugality'], + ['full', 'fullness'], + ['funny', 'funniness'], + ['furious', 'fury'], + ['furry', 'furriness'], + ['furtive', 'furtiveness'], + ['gaudy', 'gaudiness'], + ['gay', 'gayness'], + ['generous', 'generosity'], + ['gentle', 'gentleness'], + ['ghastly', 'ghastliness'], + ['glamorous', 'glamour'], + ['glaring', 'glare'], + ['glowing', 'glow'], + ['good', 'goodness'], + ['graceful', 'grace'], + ['gracious', 'graciousness'], + ['guileless', 'guilelessness'], + ['gullible', 'gullibility'], + ['hard', 'hardness'], + ['hardworking', 'hardwork'], + ['harried', 'harriedness'], + ['harsh', 'harshness'], + ['hazardous', 'hazard'], + ['heavy', 'heaviness'], + ['heroic', 'heroism'], + ['hoary', 'hoariness'], + ['honest', 'honesty'], + ['hopeful', 'hopefulness'], + ['hospitable', 'hospitality'], + ['hot', 'heat'], + ['huge', 'hugeness'], + ['humble', 'humility'], + ['humorous', 'humor'], + ['iffy', 'iffiness'], + ['imaginative', 'imagination'], + ['impartial', 'impartiality'], + ['imperfect', 'imperfection'], + ['imperious', 'imperiousness'], + ['imperturbable', 'imperturbability'], + ['implacable', 'implacability'], + ['impossible', 'impossibility'], + ['impressive', 'impressiveness'], + ['impulsive', 'impulsiveness'], + ['inane', 'inanity'], + ['independent', 'independence'], + ['indolent', 'indolence'], + ['industrious', 'industry'], + ['ineluctable', 'ineluctability'], + ['inept', 'ineptitude'], + ['inimitable', 'inimitability'], + ['innovative', 'innovation'], + ['inquisitive', 'inquisitiveness'], + ['insightful', 'insight'], + ['inspiring', 'inspiration'], + ['intelligent', 'intelligence'], + ['intemperate', 'intemperance'], + ['intrepid', 'intrepidity'], + ['intuitive', 'intuition'], + ['inventive', 'inventiveness'], + ['ironic', 'irony'], + ['jittery', 'jitteriness'], + ['jovial', 'joviality'], + ['joyful', 'joy'], + ['joyous', 'joy'], + ['keen', 'keenness'], + ['kind', 'kindness'], + ['knowledgeable', 'knowledge'], + ['laconic', 'laconicism'], + ['lavish', 'lavishness'], + ['lazy', 'laziness'], + ['legal', 'legality'], + ['liberal', 'liberality'], + ['light', 'lightness'], + ['lively', 'liveliness'], + ['lofty', 'loftiness'], + ['long', 'length'], + ['loquacious', 'loquaciousness'], + ['lost', 'loss'], + ['loud', 'loudness'], + ['loving', 'love'], + ['loyal', 'loyalty'], + ['lucid', 'lucidity'], + ['luminous', 'luminosity'], + ['lush', 'lushness'], + ['luxurious', 'luxury'], + ['magical', 'magic'], + ['magnanimous', 'magnanimity'], + ['majestic', 'majesty'], + ['mature', 'maturity'], + ['maverick', 'maverickness'], + ['mawkish', 'mawkishness'], + ['melodic', 'melody'], + ['meticulous', 'meticulousness'], + ['mighty', 'mightiness'], + ['modest', 'modesty'], + ['moist', 'moistness'], + ['momentous', 'momentousness'], + ['motivated', 'motivation'], + ['mundane', 'mundanity'], + ['musical', 'music'], + ['mysterious', 'mystery'], + ['mystical', 'mysticism'], + ['naive', 'naivety'], + ['narcissistic', 'narcissism'], + ['narrow', 'narrowness'], + ['naughty', 'naughtiness'], + ['nervous', 'nervousness'], + ['noble', 'nobility'], + ['nonchalant', 'nonchalance'], + ['nurturing', 'nurturance'], + ['obedient', 'obedience'], + ['oblivious', 'obliviousness'], + ['observant', 'observation'], + ['offensive', 'offence'], + ['offhand', 'offhandedness'], + ['ominous', 'ominousness'], + ['optimistic', 'optimism'], + ['organized', 'organization'], + ['orotund', 'orotundity'], + ['ostentatious', 'ostentatiousness'], + ['outgoing', 'outgoingness'], + ['pacifist', 'pacifism'], + ['passionate', 'passion'], + ['patient', 'patience'], + ['pedantic', 'pedantry'], + ['peerless', 'peerlessness'], + ['perceptive', 'perception'], + ['perfect', 'perfection'], + ['persistent', 'persistence'], + ['personal', 'personality'], + ['persuasive', 'persuasion'], + ['physical', 'physicality'], + ['placid', 'placidity'], + ['playful', 'playfulness'], + ['pleasant', 'pleasantness'], + ['pliant', 'pliancy'], + ['poignant', 'poignancy'], + ['poised', 'poise'], + ['polite', 'politeness'], + ['poor', 'poverty'], + ['popular', 'popularity'], + ['positive', 'positivity'], + ['possessive', 'possession'], + ['powerful', 'power'], + ['practical', 'practicality'], + ['pragmatic', 'pragmatism'], + ['present', 'presence'], + ['proactive', 'proactivity'], + ['prodigious', 'prodigiousness'], + ['professional', 'professionalism'], + ['proficient', 'proficiency'], + ['proportionate', 'proportion'], + ['protective', 'protection'], + ['prudent', 'prudence'], + ['punctual', 'punctuality'], + ['purposeful', 'purpose'], + ['querulous', 'querulousness'], + ['quick', 'quickness'], + ['quiet', 'quietness'], + ['quixotic', 'quixoticism'], + ['radiant', 'radiance'], + ['rampant', 'rampantness'], + ['random', 'randomness'], + ['rapacious', 'rapaciousness'], + ['ravishing', 'ravishingness'], + ['ready', 'readiness'], + ['realistic', 'realism'], + ['reasonable', 'reasonableness'], + ['receptive', 'receptiveness'], + ['recondite', 'reconditeness'], + ['red', 'redness'], + ['refined', 'refinement'], + ['relentless', 'relentlessness'], + ['reliable', 'reliability'], + ['reprobate', 'reprobacy'], + ['resilient', 'resilience'], + ['resolute', 'resolution'], + ['resourceful', 'resourcefulness'], + ['respectable', 'respect'], + ['respectful', 'respect'], + ['responsible', 'responsibility'], + ['reverent', 'reverence'], + ['rich', 'richness'], + ['riotous', 'riotousness'], + ['ripe', 'ripeness'], + ['risible', 'risibility'], + ['romantic', 'romance'], + ['rough', 'roughness'], + ['round', 'roundness'], + ['sad', 'sadness'], + ['salubrious', 'salubriousness'], + ['scrupulous', 'scrupulousness'], + ['scurrilous', 'scurrility'], + ['seditious', 'seditiousness'], + ['selfless', 'selflessness'], + ['sensible', 'sensibility'], + ['sensitive', 'sensitivity'], + ['serene', 'serenity'], + ['serious', 'seriousness'], + ['sharp', 'sharpness'], + ['shining', 'shininess'], + ['short', 'shortness'], + ['silent', 'silence'], + ['simple', 'simplicity'], + ['sincere', 'sincerity'], + ['sinister', 'sinisterness'], + ['skillful', 'skill'], + ['slippery', 'slipperiness'], + ['slow', 'slowness'], + ['smooth', 'smoothness'], + ['soft', 'softness'], + ['solid', 'solidity'], + ['soothing', 'soothingness'], + ['sour', 'sourness'], + ['specious', 'speciousness'], + ['spiritual', 'spirituality'], + ['spontaneous', 'spontaneity'], + ['sporadic', 'sporadicness'], + ['spurious', 'spuriousness'], + ['stalwart', 'stalwartness'], + ['stern', 'sternness'], + ['straight', 'straightness'], + ['strategic', 'strategy'], + ['strict', 'strictness'], + ['strong', 'strength'], + ['stubborn', 'stubbornness'], + ['sturdy', 'sturdiness'], + ['sublime', 'sublimity'], + ['subservient', 'subservience'], + ['subtle', 'subtleties'], + ['successful', 'success'], + ['superficial', 'superficiality'], + ['supportive', 'support'], + ['suspicious', 'suspicion'], + ['sweet', 'sweetness'], + ['swift', 'swiftness'], + ['sympathetic', 'sympathy'], + ['tactful', 'tact'], + ['talented', 'talent'], + ['tall', 'tallness'], + ['tame', 'tameness'], + ['tart', 'tartness'], + ['tawdry', 'tawdriness'], + ['tenacious', 'tenacity'], + ['tender', 'tenderness'], + ['tense', 'tenseness'], + ['tenuous', 'tenuousness'], + ['thin', 'thinness'], + ['thirsty', 'thirstiness'], + ['thorny', 'thorniness'], + ['thorough', 'thoroughness'], + ['thoughtful', 'thoughtfulness'], + ['tidy', 'tidiness'], + ['timely', 'timeliness'], + ['timid', 'timidity'], + ['timorous', 'timorousness'], + ['tiny', 'tininess'], + ['tired', 'tiredness'], + ['tireless', 'tirelessness'], + ['tolerant', 'tolerance'], + ['tough', 'toughness'], + ['trenchant', 'trenchancy'], + ['trusting', 'trust'], + ['trustworthy', 'trustworthiness'], + ['tumultuous', 'tumult'], + ['ubiquitous', 'ubiquitousness'], + ['unctuous', 'unctuousness'], + ['understanding', 'understanding'], + ['unflappable', 'unflappability'], + ['unique', 'uniqueness'], + ['unyielding', 'unyieldingness'], + ['vagrant', 'vagrancy'], + ['valuable', 'value'], + ['vapid', 'vapidity'], + ['venerable', 'venerability'], + ['versatile', 'versatility'], + ['vertical', 'verticality'], + ['vibrant', 'vibrancy'], + ['vigilant', 'vigilance'], + ['vigorous', 'vigor'], + ['vivacious', 'vivacity'], + ['vixenish', 'vixenishness'], + ['volatile', 'volatility'], + ['volumous', 'voluminousness'], + ['vulnerable', 'vulnerability'], + ['wanton', 'wantonness'], + ['warm', 'warmth'], + ['weak', 'weakness'], + ['whimsical', 'whimsicalness'], + ['wide', 'wideness'], + ['wily', 'wiliness'], + ['wise', 'wisdom'], + ['wistful', 'wistfulness'], + ['witty', 'wit'], + ['witty', 'wittiness'], + ['woebegone', 'woefulness'], + ['yielding', 'yieldingness'], + ['young', 'youth'], + ['zany', 'zaniness'], + ['zealous', 'zeal'], +] \ No newline at end of file diff --git a/data/pairs/Comparative.js b/data/pairs/Comparative.js new file mode 100644 index 0000000..663d1b0 --- /dev/null +++ b/data/pairs/Comparative.js @@ -0,0 +1,309 @@ +export default [ + ['angry', 'angrier'], + ['bad', 'worse'], + ['bald', 'balder'], + ['bawdy', 'bawdier'], + ['big', 'bigger'], + ['black', 'blacker'], + ['bland', 'blander'], + ['blond', 'blonder'], + ['bloody', 'bloodier'], + ['blue', 'bluer'], + ['bold', 'bolder'], + ['bouncy', 'bouncier'], + ['brash', 'brasher'], + ['brave', 'braver'], + ['bright', 'brighter'], + ['broad', 'broader'], + ['buff', 'buffer'], + ['burly', 'burlier'], + ['busy', 'busier'], + ['calm', 'calmer'], + ['camp', 'camper'], + ['catchy', 'catchier'], + ['cheap', 'cheaper'], + ['cheesy', 'cheesier'], + ['chilly', 'chillier'], + ['clean', 'cleaner'], + ['clear', 'clearer'], + ['close', 'closer'], + ['cloudy', 'cloudier'], + ['coarse', 'coarser'], + ['cold', 'colder'], + ['common', 'commoner'], + ['cool', 'cooler'], + ['costly', 'costlier'], + ['cowardly', 'cowardlier'], + ['cozy', 'cozier'], + ['crisp', 'crisper'], + ['cruel', 'crueler'], + ['cuddly', 'cuddlier'], + ['curly', 'curlier'], + ['cute', 'cuter'], + ['damp', 'damper'], + ['dark', 'darker'], + ['dead', 'deader'], + ['deadly', 'deadlier'], + ['deaf', 'deafer'], + ['dear', 'dearer'], + ['deep', 'deeper'], + ['dense', 'denser'], + ['diffuse', 'diffuser'], + ['dire', 'direr'], + ['dirty', 'dirtier'], + ['divine', 'diviner'], + ['drunk', 'drunker'], + ['dry', 'drier'], + ['dull', 'duller'], + ['dumb', 'dumber'], + ['early', 'earlier'], + ['easy', 'easier'], + ['eerie', 'eerier'], + ['evil', 'eviler'], + ['fair', 'fairer'], + ['fake', 'faker'], + ['fancy', 'fancier'], + ['far', 'further'], + ['fast', 'faster'], + ['fat', 'fatter'], + ['faulty', 'faultier'], + ['feeble', 'feebler'], + ['few', 'fewer'], + ['fierce', 'fiercer'], + ['fine', 'finer'], + ['firm', 'firmer'], + ['flat', 'flatter'], + ['foamy', 'foamier'], + ['fond', 'fonder'], + ['formal', 'formaler'], + ['foul', 'fouler'], + ['frail', 'frailer'], + ['free', 'freer'], + ['fresh', 'fresher'], + ['friendly', 'friendlier'], + ['full', 'fuller'], + ['fun', 'funer'], + ['funny', 'funnier'], + ['furry', 'furrier'], + ['further', 'further'], + ['gauche', 'gaucher'], + ['gaudy', 'gaudier'], + ['gay', 'gaier'], + ['gentle', 'gentler'], + ['genuine', 'genuiner'], + ['ghastly', 'ghastlier'], + ['ghostly', 'ghostlier'], + ['giddy', 'giddier'], + ['glib', 'glibber'], + ['gloomy', 'gloomier'], + ['gold', 'golder'], + ['good', 'better'], + ['goofy', 'goofier'], + ['grand', 'grander'], + ['gray', 'grayer'], + ['great', 'greater'], + ['green', 'greener'], + ['grisly', 'grislier'], + ['groovy', 'groovier'], + ['gross', 'grosser'], + ['gruesome', 'gruesomer'], + ['handsome', 'handsomer'], + ['happy', 'happier'], + ['hard', 'harder'], + ['hardy', 'hardier'], + ['harsh', 'harsher'], + ['heady', 'headier'], + ['healthy', 'healthier'], + ['heavy', 'heavier'], + ['hefty', 'heftier'], + ['high', 'higher'], + ['hilly', 'hillier'], + ['homely', 'homelier'], + ['hot', 'hotter'], + ['huge', 'huger'], + ['humble', 'humbler'], + ['humid', 'humider'], + ['hungry', 'hungrier'], + ['icy', 'icier'], + ['ill', 'iller'], + ['jolly', 'jollier'], + ['juicy', 'juicier'], + ['keen', 'keener'], + ['kind', 'kinder'], + ['lame', 'lamer'], + ['large', 'larger'], + ['late', 'later'], + ['lean', 'leaner'], + ['lengthy', 'lengthier'], + ['lesser', 'lesser'], + ['lewd', 'lewder'], + ['light', 'lighter'], + ['likely', 'likelier'], + ['little', 'littler'], + ['lively', 'livelier'], + ['lofty', 'loftier'], + ['lonely', 'lonelier'], + ['long', 'longer'], + ['loose', 'looser'], + ['loud', 'louder'], + ['lousy', 'lousier'], + ['lovely', 'lovelier'], + ['low', 'lower'], + ['lucky', 'luckier'], + ['mad', 'madder'], + ['mean', 'meaner'], + ['measly', 'measlier'], + ['meaty', 'meatier'], + ['meek', 'meeker'], + ['mellow', 'mellower'], + ['mild', 'milder'], + ['moist', 'moister'], + ['moody', 'moodier'], + ['narrow', 'narrower'], + ['nasty', 'nastier'], + ['near', 'nearer'], + ['neat', 'neater'], + ['new', 'newer'], + ['nice', 'nicer'], + ['nimble', 'nimbler'], + ['noble', 'nobler'], + ['noisy', 'noisier'], + ['normal', 'normaler'], + ['nosy', 'nosier'], + ['numb', 'number'], + ['odd', 'odder'], + ['oily', 'oilier'], + ['old', 'older'], + ['orient', 'orienter'], + ['pale', 'paler'], + ['phony', 'phonier'], + ['pink', 'pinker'], + ['plain', 'plainer'], + ['poor', 'poorer'], + ['premier', 'premier'], + ['present', 'presenter'], + ['prickly', 'pricklier'], + ['proud', 'prouder'], + ['puny', 'punier'], + ['pure', 'purer'], + ['quick', 'quicker'], + ['quiet', 'quieter'], + ['ragged', 'raggeder'], + ['random', 'randomer'], + ['rapid', 'rapider'], + ['rare', 'rarer'], + ['raw', 'rawer'], + ['ready', 'readier'], + ['real', 'realer'], + ['remote', 'remoter'], + ['rich', 'richer'], + ['ripe', 'riper'], + ['risky', 'riskier'], + ['ritzy', 'ritzier'], + ['roomy', 'roomier'], + ['rosy', 'rosier'], + ['rough', 'rougher'], + ['round', 'rounder'], + ['rude', 'ruder'], + ['sad', 'sadder'], + ['safe', 'safer'], + ['saintly', 'saintlier'], + ['salty', 'saltier'], + ['savvy', 'savvier'], + ['scarce', 'scarcer'], + ['scary', 'scarier'], + ['sexy', 'sexier'], + ['shady', 'shadier'], + ['shallow', 'shallower'], + ['sharp', 'sharper'], + ['shiny', 'shinier'], + ['short', 'shorter'], + ['shrill', 'shriller'], + ['shy', 'shyer'], + ['sick', 'sicker'], + ['silly', 'sillier'], + ['simple', 'simpler'], + ['skinny', 'skinnier'], + ['sleek', 'sleeker'], + ['slight', 'slighter'], + ['slim', 'slimmer'], + ['slimy', 'slimier'], + ['slow', 'slower'], + ['sly', 'slier'], + ['small', 'smaller'], + ['smart', 'smarter'], + ['smelly', 'smellier'], + ['smooth', 'smoother'], + ['soft', 'softer'], + ['solemn', 'solemner'], + ['solid', 'solider'], + ['soon', 'sooner'], + ['sore', 'sorer'], + ['speedy', 'speedier'], + ['spicy', 'spicier'], + ['sprightly', 'sprightlier'], + ['square', 'squarer'], + ['stale', 'staler'], + ['stark', 'starker'], + ['steady', 'steadier'], + ['steep', 'steeper'], + ['stern', 'sterner'], + ['stiff', 'stiffer'], + ['straight', 'straighter'], + ['strict', 'stricter'], + ['strong', 'stronger'], + ['stupid', 'stupider'], + ['sturdy', 'sturdier'], + ['subtle', 'subtler'], + ['sudden', 'suddener'], + ['surreal', 'surrealer'], + ['sweet', 'sweeter'], + ['swift', 'swifter'], + ['tall', 'taller'], + ['tame', 'tamer'], + ['tart', 'tarter'], + ['tawdry', 'tawdrier'], + ['tense', 'tenser'], + ['thick', 'thicker'], + ['thin', 'thinner'], + ['thirsty', 'thirstier'], + ['tidy', 'tidier'], + ['tight', 'tighter'], + ['timely', 'timelier'], + ['tiny', 'tinier'], + ['tired', 'tireder'], + ['tough', 'tougher'], + ['tranquil', 'tranquiler'], + ['trendy', 'trendier'], + ['tricky', 'trickier'], + ['trim', 'trimmer'], + ['true', 'truer'], + ['ugly', 'uglier'], + ['unlikely', 'unlikelier'], + ['untidy', 'untidier'], + ['untrue', 'untruer'], + ['vague', 'vaguer'], + ['vain', 'vainer'], + ['vast', 'vaster'], + ['warm', 'warmer'], + ['wary', 'warier'], + ['weak', 'weaker'], + ['wealthy', 'wealthier'], + ['weary', 'wearier'], + ['weird', 'weirder'], + ['wet', 'wetter'], + ['white', 'whiter'], + ['wicked', 'wickeder'], + ['wide', 'wider'], + ['wild', 'wilder'], + ['wily', 'wilier'], + ['wise', 'wiser'], + ['young', 'younger'], + ['zany', 'zanier'], + ['clever', 'cleverer'], + ['glad', 'gladder'], + ['neat', 'neater'], + ['dim', 'dimmer'], + ['', ''], + ['', ''], +] diff --git a/data/pairs/Gerund.js b/data/pairs/Gerund.js new file mode 100644 index 0000000..c5d23fa --- /dev/null +++ b/data/pairs/Gerund.js @@ -0,0 +1,2976 @@ +export default [ + ['including', 'include'], + ['following', 'follow'], + ['being', 'is'], + ['using', 'use'], + ['working', 'work'], + ['developing', 'develop'], + ['providing', 'provide'], + ['regarding', 'regard'], + ['dumping', 'dump'], + ['according', 'accord'], + ['operating', 'operate'], + ['making', 'make'], + ['increasing', 'increase'], + ['having', 'have'], + ['supporting', 'support'], + ['heading', 'head'], + ['exceeding', 'exceed'], + ['growing', 'grow'], + ['concerning', 'concern'], + ['reporting', 'report'], + ['relating', 'relate'], + ['leading', 'lead'], + ['ensuring', 'ensure'], + ['improving', 'improve'], + ['meeting', 'meet'], + ['existing', 'exist'], + ['promoting', 'promote'], + ['taking', 'take'], + ['learning', 'learn'], + ['originating', 'originate'], + ['creating', 'create'], + ['building', 'build'], + ['resulting', 'result'], + ['living', 'live'], + ['funding', 'fund'], + ['emerging', 'emerge'], + ['involving', 'involve'], + ['receiving', 'receive'], + ['participating', 'participate'], + ['representing', 'represent'], + ['reducing', 'reduce'], + ['determining', 'determine'], + ['implementing', 'implement'], + ['changing', 'change'], + ['establishing', 'establish'], + ['identifying', 'identify'], + ['containing', 'contain'], + ['doing', 'do'], + ['looking', 'look'], + ['addressing', 'address'], + ['selling', 'sell'], + ['excluding', 'exclude'], + ['moving', 'move'], + ['helping', 'help'], + ['continuing', 'continue'], + ['coming', 'come'], + ['achieving', 'achieve'], + ['going', 'go'], + ['producing', 'produce'], + ['respecting', 'respect'], + ['depending', 'depend'], + ['applying', 'apply'], + ['planning', 'plan'], + ['conducting', 'conduct'], + ['managing', 'manage'], + ['maintaining', 'maintain'], + ['remaining', 'remain'], + ['performing', 'perform'], + ['dealing', 'deal'], + ['seeking', 'seek'], + ['contributing', 'contribute'], + ['starting', 'start'], + ['enhancing', 'enhance'], + ['writing', 'write'], + ['hosting', 'host'], + ['strengthening', 'strengthen'], + ['facing', 'face'], + ['allowing', 'allow'], + ['measuring', 'measure'], + ['becoming', 'become'], + ['affecting', 'affect'], + ['finding', 'find'], + ['offering', 'offer'], + ['considering', 'consider'], + ['beginning', 'begin'], + ['setting', 'set'], + ['aging', 'age'], + ['bringing', 'bring'], + ['keeping', 'keep'], + ['monitoring', 'monitor'], + ['requiring', 'require'], + ['indicating', 'indicate'], + ['giving', 'give'], + ['preparing', 'prepare'], + ['ending', 'end'], + ['rising', 'rise'], + ['sharing', 'share'], + ['reaching', 'reach'], + ['expanding', 'expand'], + ['getting', 'get'], + ['governing', 'govern'], + ['assessing', 'assess'], + ['granting', 'grant'], + ['obtaining', 'obtain'], + ['subsidizing', 'subsidize'], + ['attending', 'attend'], + ['entering', 'enter'], + ['delivering', 'deliver'], + ['arising', 'arise'], + ['targeting', 'target'], + ['travelling', 'travel'], + ['fostering', 'foster'], + ['carrying', 'carry'], + ['encouraging', 'encourage'], + ['underlying', 'underlie'], + ['understanding', 'understand'], + ['completing', 'complete'], + ['covering', 'cover'], + ['responding', 'respond'], + ['visiting', 'visit'], + ['importing', 'import'], + ['protecting', 'protect'], + ['reviewing', 'review'], + ['owing', 'owe'], + ['focusing', 'focus'], + ['recognizing', 'recognize'], + ['serving', 'serve'], + ['facilitating', 'facilitate'], + ['pertaining', 'pertain'], + ['examining', 'examine'], + ['enabling', 'enable'], + ['evaluating', 'evaluate'], + ['consisting', 'consist'], + ['adding', 'add'], + ['exporting', 'export'], + ['investing', 'invest'], + ['studying', 'study'], + ['showing', 'show'], + ['raising', 'raise'], + ['ranging', 'range'], + ['reflecting', 'reflect'], + ['processing', 'process'], + ['submitting', 'submit'], + ['advancing', 'advance'], + ['declining', 'decline'], + ['surrounding', 'surround'], + ['competing', 'compete'], + ['preventing', 'prevent'], + ['defining', 'define'], + ['paying', 'pay'], + ['undertaking', 'undertake'], + ['speaking', 'speak'], + ['acting', 'act'], + ['holding', 'hold'], + ['describing', 'describe'], + ['training', 'train'], + ['countervailing', 'countervail'], + ['presenting', 'present'], + ['evolving', 'evolve'], + ['pending', 'pend'], + ['assisting', 'assist'], + ['requesting', 'request'], + ['pursuing', 'pursue'], + ['incorporating', 'incorporate'], + ['noting', 'note'], + ['coordinating', 'coordinate'], + ['attracting', 'attract'], + ['leaving', 'leave'], + ['organizing', 'organize'], + ['counselling', 'counsel'], + ['playing', 'play'], + ['trying', 'try'], + ['causing', 'cause'], + ['integrating', 'integrate'], + ['belonging', 'belong'], + ['collecting', 'collect'], + ['administering', 'administer'], + ['linking', 'link'], + ['negotiating', 'negotiate'], + ['putting', 'put'], + ['limiting', 'limit'], + ['cutting', 'cut'], + ['occurring', 'occur'], + ['falling', 'fall'], + ['partnering', 'partner'], + ['matching', 'match'], + ['accessing', 'access'], + ['experiencing', 'experience'], + ['buying', 'buy'], + ['exploring', 'explore'], + ['calculating', 'calculate'], + ['teaching', 'teach'], + ['generating', 'generate'], + ['varying', 'vary'], + ['assuming', 'assume'], + ['marking', 'mark'], + ['calling', 'call'], + ['driving', 'drive'], + ['cleaning', 'clean'], + ['selecting', 'select'], + ['spending', 'spend'], + ['engaging', 'engage'], + ['returning', 'return'], + ['comparing', 'compare'], + ['running', 'run'], + ['wishing', 'wish'], + ['eliminating', 'eliminate'], + ['demonstrating', 'demonstrate'], + ['hiring', 'hire'], + ['opening', 'open'], + ['communicating', 'communicate'], + ['arriving', 'arrive'], + ['filing', 'file'], + ['extending', 'extend'], + ['controlling', 'control'], + ['tracking', 'track'], + ['handling', 'handle'], + ['adopting', 'adopt'], + ['preserving', 'preserve'], + ['forming', 'form'], + ['parenting', 'parent'], + ['policing', 'police'], + ['shipping', 'ship'], + ['outlining', 'outline'], + ['signing', 'sign'], + ['introducing', 'introduce'], + ['waiting', 'wait'], + ['choosing', 'choose'], + ['threatening', 'threaten'], + ['stating', 'state'], + ['celebrating', 'celebrate'], + ['issuing', 'issue'], + ['contacting', 'contact'], + ['sending', 'send'], + ['seeding', 'seed'], + ['qualifying', 'qualify'], + ['drawing', 'draw'], + ['testing', 'test'], + ['investigating', 'investigate'], + ['distributing', 'distribute'], + ['seeing', 'see'], + ['saying', 'say'], + ['asking', 'ask'], + ['marketing', 'market'], + ['weighing', 'weigh'], + ['suggesting', 'suggest'], + ['explaining', 'explain'], + ['discussing', 'discuss'], + ['accounting', 'account'], + ['placing', 'place'], + ['designing', 'design'], + ['gaining', 'gain'], + ['securing', 'secure'], + ['removing', 'remove'], + ['decreasing', 'decrease'], + ['informing', 'inform'], + ['turning', 'turn'], + ['treating', 'treat'], + ['thinking', 'think'], + ['joining', 'join'], + ['sponsoring', 'sponsor'], + ['amending', 'amend'], + ['searching', 'search'], + ['retaining', 'retain'], + ['fulfilling', 'fulfill'], + ['influencing', 'influence'], + ['reading', 'read'], + ['missing', 'miss'], + ['standing', 'stand'], + ['estimating', 'estimate'], + ['featuring', 'feature'], + ['planting', 'plant'], + ['shaping', 'shape'], + ['reinforcing', 'reinforce'], + ['combining', 'combine'], + ['leveraging', 'leverage'], + ['comprising', 'comprise'], + ['analyzing', 'analyze'], + ['purchasing', 'purchase'], + ['updating', 'update'], + ['highlighting', 'highlight'], + ['consulting', 'consult'], + ['recruiting', 'recruit'], + ['knowing', 'know'], + ['drafting', 'draft'], + ['acquiring', 'acquire'], + ['sustaining', 'sustain'], + ['transferring', 'transfer'], + ['confirming', 'confirm'], + ['accepting', 'accept'], + ['referring', 'refer'], + ['grading', 'grade'], + ['launching', 'launch'], + ['replacing', 'replace'], + ['filling', 'fill'], + ['claiming', 'claim'], + ['appearing', 'appear'], + ['transporting', 'transport'], + ['connecting', 'connect'], + ['benefiting', 'benefit'], + ['talking', 'talk'], + ['collaborating', 'collaborate'], + ['winning', 'win'], + ['accompanying', 'accompany'], + ['meaning', 'mean'], + ['ordering', 'order'], + ['hatching', 'hatch'], + ['gathering', 'gather'], + ['welcoming', 'welcome'], + ['deciding', 'decide'], + ['challenging', 'challenge'], + ['posting', 'post'], + ['losing', 'lose'], + ['proposing', 'propose'], + ['registering', 'register'], + ['recording', 'record'], + ['publishing', 'publish'], + ['closing', 'close'], + ['listening', 'listen'], + ['translating', 'translate'], + ['inviting', 'invite'], + ['cropping', 'crop'], + ['interpreting', 'interpret'], + ['totalling', 'total'], + ['attempting', 'attempt'], + ['disseminating', 'disseminate'], + ['tendering', 'tender'], + ['crossing', 'cross'], + ['maximizing', 'maximize'], + ['employing', 'employ'], + ['concluding', 'conclude'], + ['profiling', 'profil'], + ['breaking', 'break'], + ['labelling', 'label'], + ['prescribing', 'prescribe'], + ['touring', 'tour'], + ['adapting', 'adapt'], + ['showcasing', 'showcase'], + ['neighbouring', 'neighbour'], + ['shifting', 'shift'], + ['allocating', 'allocate'], + ['authorizing', 'authorize'], + ['resolving', 'resolve'], + ['preceding', 'precede'], + ['costing', 'cost'], + ['approving', 'approve'], + ['specifying', 'specify'], + ['utilizing', 'utilize'], + ['editing', 'edit'], + ['branding', 'brand'], + ['volunteering', 'volunteer'], + ['pressing', 'press'], + ['failing', 'fail'], + ['upgrading', 'upgrade'], + ['minimizing', 'minimize'], + ['avoiding', 'avoid'], + ['clarifying', 'clarify'], + ['lacking', 'lack'], + ['emphasizing', 'emphasize'], + ['differing', 'differ'], + ['initiating', 'initiate'], + ['announcing', 'announce'], + ['feeding', 'feed'], + ['farming', 'farm'], + ['stimulating', 'stimulate'], + ['sitting', 'sit'], + ['happening', 'happen'], + ['educating', 'educate'], + ['viewing', 'view'], + ['exercising', 'exercise'], + ['summarizing', 'summarize'], + ['regulating', 'regulate'], + ['residing', 'reside'], + ['suffering', 'suffer'], + ['commencing', 'commence'], + ['permitting', 'permit'], + ['advising', 'advise'], + ['pruning', 'prune'], + ['specializing', 'specialize'], + ['expressing', 'express'], + ['breeding', 'breed'], + ['broadening', 'broaden'], + ['supplying', 'supply'], + ['drying', 'dry'], + ['earning', 'earn'], + ['licensing', 'license'], + ['modeling', 'model'], + ['contracting', 'contract'], + ['financing', 'finance'], + ['climbing', 'climb'], + ['adjusting', 'adjust'], + ['undergoing', 'undergo'], + ['bridging', 'bridge'], + ['screening', 'screen'], + ['detailing', 'detail'], + ['directing', 'direct'], + ['proceeding', 'proceed'], + ['capturing', 'capture'], + ['mailing', 'mail'], + ['demanding', 'demand'], + ['bearing', 'bear'], + ['outsourcing', 'outsource'], + ['realizing', 'realize'], + ['complying', 'comply'], + ['documenting', 'document'], + ['solving', 'solve'], + ['passing', 'pass'], + ['enforcing', 'enforce'], + ['fighting', 'fight'], + ['relying', 'rely'], + ['watching', 'watch'], + ['malting', 'malt'], + ['mentoring', 'mentore'], + ['clearing', 'clear'], + ['balancing', 'balance'], + ['overseeing', 'oversee'], + ['broadcasting', 'broadcast'], + ['acknowledging', 'acknowledge'], + ['pooling', 'pool'], + ['laying', 'lay'], + ['transmitting', 'transmit'], + ['eating', 'eat'], + ['mixing', 'mix'], + ['transforming', 'transform'], + ['recommending', 'recommend'], + ['packing', 'pack'], + ['approaching', 'approach'], + ['verifying', 'verify'], + ['combating', 'combat'], + ['renewing', 'renew'], + ['spraying', 'spray'], + ['stemming', 'stem'], + ['averaging', 'average'], + ['infringing', 'infringe'], + ['releasing', 'release'], + ['betting', 'bet'], + ['distinguishing', 'distinguish'], + ['lowering', 'lower'], + ['networking', 'network'], + ['binding', 'bind'], + ['imposing', 'impose'], + ['furthering', 'further'], + ['attaining', 'attain'], + ['committing', 'commit'], + ['researching', 'research'], + ['coding', 'code'], + ['telling', 'tell'], + ['checking', 'check'], + ['wanting', 'want'], + ['certifying', 'certify'], + ['loading', 'load'], + ['listing', 'list'], + ['booking', 'book'], + ['nurturing', 'nurture'], + ['bullying', 'bully'], + ['staying', 'stay'], + ['sourcing', 'source'], + ['dividing', 'divide'], + ['streaming', 'stream'], + ['crushing', 'crush'], + ['benchmarking', 'benchmark'], + ['restricting', 'restrict'], + ['optimizing', 'optimize'], + ['answering', 'answer'], + ['rounding', 'round'], + ['agreeing', 'agree'], + ['recurring', 'recur'], + ['designating', 'designate'], + ['expecting', 'expect'], + ['saving', 'save'], + ['flowing', 'flow'], + ['impacting', 'impact'], + ['flying', 'fly'], + ['awarding', 'award'], + ['accelerating', 'accelerate'], + ['spreading', 'spread'], + ['prohibiting', 'prohibit'], + ['restoring', 'restore'], + ['functioning', 'function'], + ['misleading', 'mislead'], + ['streamlining', 'streamline'], + ['citing', 'cite'], + ['dying', 'die'], + ['aiming', 'aim'], + ['messaging', 'message'], + ['reproducing', 'reproduce'], + ['storing', 'store'], + ['signaling', 'signal'], + ['encompassing', 'encompass'], + ['sporting', 'sport'], + ['pumping', 'pump'], + ['doping', 'dope'], + ['sampling', 'sample'], + ['revising', 'revise'], + ['modifying', 'modify'], + ['retiring', 'retire'], + ['hearing', 'hear'], + ['printing', 'print'], + ['detecting', 'detect'], + ['rolling', 'roll'], + ['mounting', 'mount'], + ['drinking', 'drink'], + ['baking', 'bake'], + ['dropping', 'drop'], + ['converting', 'convert'], + ['alleging', 'allege'], + ['advocating', 'advocate'], + ['welding', 'weld'], + ['recovering', 'recover'], + ['assembling', 'assemble'], + ['struggling', 'struggle'], + ['finishing', 'finish'], + ['guiding', 'guide'], + ['embracing', 'embrace'], + ['cataloguing', 'catalogue'], + ['stabilizing', 'stabilize'], + ['modernizing', 'modernize'], + ['awaiting', 'await'], + ['steering', 'steer'], + ['nominating', 'nominate'], + ['ensuing', 'ensue'], + ['wearing', 'wear'], + ['carding', 'card'], + ['clicking', 'click'], + ['slowing', 'slow'], + ['forecasting', 'forecast'], + ['separating', 'separate'], + ['consolidating', 'consolidate'], + ['assigning', 'assign'], + ['antidumping', 'antidump'], + ['advertizing', 'advertize'], + ['safeguarding', 'safeguard'], + ['declaring', 'declare'], + ['coping', 'cope'], + ['scanning', 'scan'], + ['forging', 'forge'], + ['arguing', 'argue'], + ['prevailing', 'prevail'], + ['enriching', 'enrich'], + ['questioning', 'question'], + ['needing', 'need'], + ['counting', 'count'], + ['harmonizing', 'harmonize'], + ['enjoying', 'enjoy'], + ['shrinking', 'shrink'], + ['unloading', 'unload'], + ['constructing', 'construct'], + ['walking', 'walk'], + ['displaying', 'display'], + ['interviewing', 'interview'], + ['pushing', 'push'], + ['proving', 'prove'], + ['valuing', 'value'], + ['locating', 'locate'], + ['illustrating', 'illustrate'], + ['mobilizing', 'mobilize'], + ['multiplying', 'multiply'], + ['dating', 'date'], + ['shooting', 'shoot'], + ['simplifying', 'simplify'], + ['diminishing', 'diminish'], + ['pointing', 'point'], + ['boosting', 'boost'], + ['promising', 'promise'], + ['discovering', 'discover'], + ['breastfeeding', 'breastfeed'], + ['tabling', 'table'], + ['hoping', 'hope'], + ['diversifying', 'diversify'], + ['offsetting', 'offset'], + ['trapping', 'trap'], + ['striving', 'strive'], + ['cooperating', 'cooperate'], + ['cooling', 'cool'], + ['formulating', 'formulate'], + ['switching', 'switch'], + ['surviving', 'survive'], + ['scouting', 'scout'], + ['maturing', 'mature'], + ['grinding', 'grind'], + ['doubling', 'double'], + ['renting', 'rent'], + ['interacting', 'interact'], + ['scoring', 'score'], + ['departing', 'depart'], + ['sealing', 'seal'], + ['positioning', 'position'], + ['stopping', 'stop'], + ['commemorating', 'commemorate'], + ['exposing', 'expose'], + ['compiling', 'compile'], + ['refining', 'refine'], + ['exploiting', 'exploit'], + ['adhering', 'adhere'], + ['heating', 'heat'], + ['intoxicating', 'intoxicate'], + ['defending', 'defend'], + ['casing', 'case'], + ['lobbying', 'lobby'], + ['feeling', 'feel'], + ['routing', 'rout'], + ['overcoming', 'overcome'], + ['practising', 'practise'], + ['compromising', 'compromise'], + ['arranging', 'arrange'], + ['terminating', 'terminate'], + ['warehousing', 'warehouse'], + ['commissioning', 'commission'], + ['confronting', 'confront'], + ['forcing', 'force'], + ['anticipating', 'anticipate'], + ['trending', 'trend'], + ['appealing', 'appeal'], + ['soliciting', 'solicit'], + ['settling', 'settle'], + ['tracing', 'trace'], + ['counterfeiting', 'counterfeit'], + ['floating', 'float'], + ['analysing', 'analyse'], + ['peacekeeping', 'peacekeep'], + ['filtering', 'filter'], + ['withdrawing', 'withdraw'], + ['amounting', 'amount'], + ['empowering', 'empower'], + ['leaching', 'leach'], + ['exchanging', 'exchange'], + ['motivating', 'motivate'], + ['predicting', 'predict'], + ['escalating', 'escalate'], + ['guaranteeing', 'guarantee'], + ['aligning', 'align'], + ['numbering', 'number'], + ['spanning', 'span'], + ['exhibiting', 'exhibit'], + ['lading', 'lade'], + ['assuring', 'assure'], + ['washing', 'wash'], + ['rendering', 'render'], + ['bonding', 'bond'], + ['insulating', 'insulate'], + ['finalizing', 'finalize'], + ['disclosing', 'disclose'], + ['harming', 'harm'], + ['practicing', 'practice'], + ['burgeoning', 'burgeon'], + ['manufacturing', 'manufacture'], + ['supervising', 'supervise'], + ['caring', 'care'], + ['stamping', 'stamp'], + ['coasting', 'coast'], + ['circulating', 'circulate'], + ['appointing', 'appoint'], + ['pioneering', 'pioneer'], + ['harnessing', 'harness'], + ['charging', 'charge'], + ['sorting', 'sort'], + ['executing', 'execute'], + ['projecting', 'project'], + ['altering', 'alter'], + ['mapping', 'map'], + ['filmmaking', 'filmmak'], + ['stereotyping', 'stereotype'], + ['incurring', 'incur'], + ['correcting', 'correct'], + ['overwintering', 'overwinter'], + ['structuring', 'structure'], + ['favouring', 'favour'], + ['tackling', 'tackle'], + ['honouring', 'honour'], + ['servicing', 'service'], + ['soaring', 'soar'], + ['deteriorating', 'deteriorate'], + ['rotating', 'rotate'], + ['mowing', 'mow'], + ['believing', 'believe'], + ['reforming', 'reform'], + ['accommodating', 'accommodate'], + ['concentrating', 'concentrate'], + ['installing', 'install'], + ['forwarding', 'forward'], + ['intending', 'intend'], + ['conserving', 'conserve'], + ['presiding', 'preside'], + ['emanating', 'emanate'], + ['judging', 'judge'], + ['sequencing', 'sequence'], + ['withholding', 'withhold'], + ['attesting', 'attest'], + ['staffing', 'staff'], + ['mentioning', 'mention'], + ['computing', 'compute'], + ['commenting', 'comment'], + ['intervening', 'intervene'], + ['capitalizing', 'capitalize'], + ['logging', 'log'], + ['progressing', 'progress'], + ['denying', 'deny'], + ['deepening', 'deepen'], + ['picking', 'pick'], + ['opposing', 'oppose'], + ['distorting', 'distort'], + ['nursing', 'nurse'], + ['instituting', 'institute'], + ['mitigating', 'mitigate'], + ['trading', 'trade'], + ['reversing', 'reverse'], + ['decisionmaking', 'decisionmak'], + ['fixing', 'fix'], + ['deducting', 'deduct'], + ['articulating', 'articulate'], + ['delaying', 'delay'], + ['mountaineering', 'mountaineer'], + ['conveying', 'convey'], + ['graduating', 'graduate'], + ['rebuilding', 'rebuild'], + ['validating', 'validate'], + ['hiking', 'hike'], + ['weakening', 'weaken'], + ['eradicating', 'eradicate'], + ['observing', 'observe'], + ['classifying', 'classify'], + ['scheduling', 'schedule'], + ['naming', 'name'], + ['reconciling', 'reconcile'], + ['dispensing', 'dispense'], + ['cultivating', 'cultivate'], + ['satisfying', 'satisfy'], + ['staging', 'stage'], + ['inspecting', 'inspect'], + ['stressing', 'stress'], + ['revitalizing', 'revitalize'], + ['blocking', 'block'], + ['yielding', 'yield'], + ['tapping', 'tap'], + ['voting', 'vote'], + ['packaging', 'package'], + ['lodging', 'lodge'], + ['killing', 'kill'], + ['cloning', 'clon'], + ['violating', 'violate'], + ['accruing', 'accrue'], + ['photocopying', 'photocopy'], + ['riding', 'ride'], + ['destroying', 'destroy'], + ['retraining', 'retrain'], + ['enacting', 'enact'], + ['formatting', 'format'], + ['succeeding', 'succeed'], + ['subtracting', 'subtract'], + ['merging', 'merge'], + ['copying', 'copy'], + ['officiating', 'officiate'], + ['letting', 'let'], + ['justifying', 'justify'], + ['composting', 'compost'], + ['possessing', 'possess'], + ['lagging', 'lag'], + ['differentiating', 'differentiate'], + ['surveying', 'survey'], + ['moulding', 'mould'], + ['thanking', 'thank'], + ['refusing', 'refuse'], + ['bidding', 'bid'], + ['striking', 'strike'], + ['constituting', 'constitute'], + ['widening', 'widen'], + ['blending', 'blend'], + ['innovating', 'innovate'], + ['stocking', 'stock'], + ['repairing', 'repair'], + ['sawing', 'saw'], + ['wrapping', 'wrap'], + ['commercializing', 'commercialize'], + ['ranking', 'rank'], + ['posing', 'pose'], + ['patenting', 'patent'], + ['lending', 'lend'], + ['inserting', 'insert'], + ['appreciating', 'appreciate'], + ['fuelling', 'fuel'], + ['invoicing', 'invoice'], + ['thinning', 'thin'], + ['lingering', 'linger'], + ['stepping', 'step'], + ['sliding', 'slide'], + ['drilling', 'drill'], + ['notifying', 'notify'], + ['founding', 'found'], + ['surpassing', 'surpass'], + ['impeding', 'impede'], + ['complementing', 'complement'], + ['depicting', 'depict'], + ['lasting', 'last'], + ['transplanting', 'transplant'], + ['stacking', 'stack'], + ['deriving', 'derive'], + ['owning', 'own'], + ['quoting', 'quote'], + ['consuming', 'consume'], + ['alternating', 'alternate'], + ['prototyping', 'prototyp'], + ['auditing', 'audit'], + ['restructuring', 'restructure'], + ['undermining', 'undermine'], + ['exempting', 'exempt'], + ['mulching', 'mulch'], + ['dressing', 'dress'], + ['hitting', 'hit'], + ['phasing', 'phase'], + ['pulling', 'pull'], + ['weaving', 'weave'], + ['milling', 'mill'], + ['enrolling', 'enroll'], + ['filming', 'film'], + ['machining', 'machine'], + ['healing', 'heal'], + ['characterizing', 'characterize'], + ['internationalizing', 'internationalize'], + ['borrowing', 'borrow'], + ['conferencing', 'conference'], + ['sensing', 'sense'], + ['peaking', 'peak'], + ['contemplating', 'contemplate'], + ['underpinning', 'underpin'], + ['tanning', 'tan'], + ['refrigerating', 'refrigerate'], + ['devoting', 'devote'], + ['harvesting', 'harvest'], + ['championing', 'champion'], + ['alleviating', 'alleviate'], + ['compensating', 'compensate'], + ['tying', 'tie'], + ['decorating', 'decorate'], + ['crosscutting', 'crosscut'], + ['ignoring', 'ignore'], + ['extracting', 'extract'], + ['easing', 'ease'], + ['dedicating', 'dedicate'], + ['embarking', 'embark'], + ['prompting', 'prompt'], + ['cooking', 'cook'], + ['eroding', 'erode'], + ['narrowing', 'narrow'], + ['occupying', 'occupy'], + ['attaching', 'attach'], + ['implying', 'imply'], + ['duplicating', 'duplicate'], + ['slaughtering', 'slaughter'], + ['upholding', 'uphold'], + ['affirming', 'affirm'], + ['hauling', 'haul'], + ['fluctuating', 'fluctuate'], + ['lifting', 'lift'], + ['convening', 'convene'], + ['conforming', 'conform'], + ['mining', 'mine'], + ['rejecting', 'reject'], + ['substantiating', 'substantiate'], + ['liaising', 'liaise'], + ['devising', 'devise'], + ['navigating', 'navigate'], + ['catching', 'catch'], + ['revealing', 'reveal'], + ['racing', 'race'], + ['dampening', 'dampen'], + ['nesting', 'nest'], + ['resembling', 'resemble'], + ['curing', 'cure'], + ['disposing', 'dispose'], + ['sounding', 'sound'], + ['sweetening', 'sweeten'], + ['sowing', 'sow'], + ['tutoring', 'tutor'], + ['pricing', 'price'], + ['revisiting', 'revisit'], + ['grouping', 'group'], + ['substituting', 'substitute'], + ['thriving', 'thrive'], + ['hedging', 'hedge'], + ['lining', 'line'], + ['coaching', 'coach'], + ['netting', 'net'], + ['furnishing', 'furnish'], + ['polishing', 'polish'], + ['watering', 'water'], + ['supplementing', 'supplement'], + ['subscribing', 'subscribe'], + ['spinning', 'spin'], + ['synthesizing', 'synthesize'], + ['rethinking', 'rethink'], + ['intensifying', 'intensify'], + ['reciprocating', 'reciprocate'], + ['rescinding', 'rescind'], + ['ratifying', 'ratify'], + ['offending', 'offend'], + ['charting', 'chart'], + ['deploying', 'deploy'], + ['nearing', 'near'], + ['portraying', 'portray'], + ['catering', 'cater'], + ['damaging', 'damage'], + ['casting', 'cast'], + ['blowing', 'blow'], + ['ruling', 'rule'], + ['fleeing', 'flee'], + ['culminating', 'culminate'], + ['flowering', 'flower'], + ['discharging', 'discharge'], + ['converging', 'converge'], + ['spotting', 'spot'], + ['ticketing', 'ticket'], + ['quantifying', 'quantify'], + ['rating', 'rate'], + ['aiding', 'aid'], + ['bending', 'bend'], + ['relieving', 'relieve'], + ['quarrying', 'quarry'], + ['levelling', 'level'], + ['basing', 'base'], + ['wholesaling', 'wholesale'], + ['browsing', 'browse'], + ['leasing', 'lease'], + ['gauging', 'gauge'], + ['purifying', 'purify'], + ['interfering', 'interfere'], + ['lubricating', 'lubricate'], + ['exiting', 'exit'], + ['preferring', 'prefer'], + ['discouraging', 'discourage'], + ['camping', 'camp'], + ['spawning', 'spawn'], + ['bundling', 'bundle'], + ['conferring', 'confer'], + ['touching', 'touch'], + ['popping', 'pop'], + ['effecting', 'effect'], + ['inhibiting', 'inhibit'], + ['chewing', 'chew'], + ['underlining', 'underline'], + ['debriefing', 'debrief'], + ['contrasting', 'contrast'], + ['stretching', 'stretch'], + ['warning', 'warn'], + ['summing', 'sum'], + ['witnessing', 'witness'], + ['disappearing', 'disappear'], + ['chairing', 'chair'], + ['mating', 'mate'], + ['plaiting', 'plait'], + ['divorcing', 'divorce'], + ['piloting', 'pilot'], + ['speeding', 'speed'], + ['cancelling', 'cancel'], + ['digitizing', 'digitize'], + ['replicating', 'replicate'], + ['affording', 'afford'], + ['taxing', 'tax'], + ['redefining', 'redefin'], + ['opting', 'opt'], + ['constraining', 'constrain'], + ['publicizing', 'publicize'], + ['burning', 'burn'], + ['excavating', 'excavate'], + ['consenting', 'consent'], + ['grazing', 'graze'], + ['yellowing', 'yellow'], + ['ripening', 'ripen'], + ['songwriting', 'songwrite'], + ['standardizing', 'standardize'], + ['reminding', 'remind'], + ['remembering', 'remember'], + ['repositioning', 'reposition'], + ['tightening', 'tighten'], + ['lessening', 'lessen'], + ['circumventing', 'circumvent'], + ['seizing', 'seize'], + ['referencing', 'reference'], + ['locking', 'lock'], + ['sterilizing', 'sterilize'], + ['dyeing', 'dye'], + ['tending', 'tend'], + ['videoconferencing', 'videoconference'], + ['diagnosing', 'diagnose'], + ['reacting', 'react'], + ['descending', 'descend'], + ['looming', 'loom'], + ['waiving', 'waive'], + ['surging', 'surge'], + ['fitting', 'fit'], + ['clustering', 'cluster'], + ['lying', 'lie'], + ['stalking', 'stalk'], + ['wilting', 'wilt'], + ['backing', 'back'], + ['stitching', 'stitch'], + ['tailoring', 'tailor'], + ['rooting', 'root'], + ['migrating', 'migrate'], + ['hurting', 'hurt'], + ['rebounding', 'rebound'], + ['expediting', 'expedite'], + ['unveiling', 'unveil'], + ['canoeing', 'canoe'], + ['accumulating', 'accumulate'], + ['deterring', 'deter'], + ['immigrating', 'immigrate'], + ['attacking', 'attack'], + ['reaffirming', 'reaffirm'], + ['fencing', 'fence'], + ['capping', 'cap'], + ['colouring', 'colour'], + ['germinating', 'germinate'], + ['freezing', 'freeze'], + ['remedying', 'remedy'], + ['absorbing', 'absorb'], + ['splitting', 'split'], + ['boating', 'boat'], + ['equipping', 'equip'], + ['typing', 'type'], + ['formalizing', 'formalize'], + ['scaling', 'scale'], + ['defaulting', 'default'], + ['soldering', 'solder'], + ['knitting', 'knit'], + ['decoding', 'decode'], + ['fishing', 'fish'], + ['sacrificing', 'sacrifice'], + ['renovating', 'renovate'], + ['hanging', 'hang'], + ['augmenting', 'augment'], + ['relaxing', 'relax'], + ['endorsing', 'endorse'], + ['shortening', 'shorten'], + ['recycling', 'recycle'], + ['repeating', 'repeat'], + ['hindering', 'hinder'], + ['undercutting', 'undercut'], + ['fingerprinting', 'fingerprint'], + ['displacing', 'displace'], + ['dismantling', 'dismantle'], + ['emitting', 'emit'], + ['countering', 'counter'], + ['cracking', 'crack'], + ['stunting', 'stunt'], + ['flavouring', 'flavour'], + ['scripting', 'script'], + ['injecting', 'inject'], + ['twinning', 'twin'], + ['breathing', 'breathe'], + ['boarding', 'board'], + ['boiling', 'boil'], + ['ticking', 'tick'], + ['greeting', 'greet'], + ['triggering', 'trigger'], + ['rewarding', 'reward'], + ['fruiting', 'fruit'], + ['stipulating', 'stipulate'], + ['threading', 'thread'], + ['experimenting', 'experiment'], + ['blurring', 'blur'], + ['redesigning', 'redesign'], + ['paging', 'page'], + ['jumping', 'jump'], + ['crowding', 'crowd'], + ['associating', 'associate'], + ['carving', 'carve'], + ['freeing', 'free'], + ['accomplishing', 'accomplish'], + ['recalling', 'recall'], + ['penetrating', 'penetrate'], + ['tubing', 'tube'], + ['stiffening', 'stiffen'], + ['discriminating', 'discriminate'], + ['framing', 'frame'], + ['spearheading', 'spearhead'], + ['disabling', 'disable'], + ['keying', 'key'], + ['flaming', 'flame'], + ['tripling', 'triple'], + ['sizing', 'size'], + ['outpacing', 'outpace'], + ['expiring', 'expire'], + ['attributing', 'attribute'], + ['skating', 'skate'], + ['diverting', 'divert'], + ['insisting', 'insist'], + ['golfing', 'golf'], + ['reaping', 'reap'], + ['urging', 'urge'], + ['winding', 'wind'], + ['lighting', 'light'], + ['signifying', 'signify'], + ['debating', 'debate'], + ['weighting', 'weight'], + ['procuring', 'procure'], + ['compounding', 'compound'], + ['decommissioning', 'decommission'], + ['embodying', 'embody'], + ['dispersing', 'disperse'], + ['boring', 'bore'], + ['centralizing', 'centralize'], + ['crafting', 'craft'], + ['alerting', 'alert'], + ['deferring', 'defer'], + ['handing', 'hand'], + ['curbing', 'curb'], + ['discounting', 'discount'], + ['asserting', 'assert'], + ['shining', 'shine'], + ['milking', 'milk'], + ['grappling', 'grapple'], + ['donating', 'donate'], + ['tuning', 'tune'], + ['proofreading', 'proofread'], + ['lapsing', 'lapse'], + ['slitting', 'slit'], + ['ascending', 'ascend'], + ['insuring', 'insure'], + ['complicating', 'complicate'], + ['dining', 'dine'], + ['lapping', 'lap'], + ['bathing', 'bath'], + ['beating', 'beat'], + ['stripping', 'strip'], + ['transiting', 'transit'], + ['tagging', 'tag'], + ['plugging', 'plug'], + ['mediating', 'mediate'], + ['belting', 'belt'], + ['injuring', 'injure'], + ['reclaiming', 'reclaim'], + ['repackaging', 'repackage'], + ['rationing', 'ration'], + ['retooling', 'retool'], + ['subtitling', 'subtitle'], + ['probing', 'probe'], + ['draining', 'drain'], + ['swimming', 'swim'], + ['paving', 'pave'], + ['complaining', 'complain'], + ['overlapping', 'overlap'], + ['administrating', 'administrate'], + ['suspending', 'suspend'], + ['barring', 'bar'], + ['postponing', 'postpone'], + ['moderating', 'moderate'], + ['convincing', 'convince'], + ['unwavering', 'unwaver'], + ['unfolding', 'unfold'], + ['manipulating', 'manipulate'], + ['metering', 'meter'], + ['disrupting', 'disrupt'], + ['ranching', 'ranch'], + ['mastering', 'master'], + ['captioning', 'caption'], + ['smelting', 'smelt'], + ['tampering', 'tamper'], + ['smoothing', 'smooth'], + ['bleaching', 'bleach'], + ['aggregating', 'aggregate'], + ['arming', 'arm'], + ['coinciding', 'coincide'], + ['pairing', 'pair'], + ['dwindling', 'dwindle'], + ['docking', 'dock'], + ['rafting', 'raft'], + ['categorizing', 'categorize'], + ['exerting', 'exert'], + ['jeopardizing', 'jeopardize'], + ['throwing', 'throw'], + ['landscaping', 'landscape'], + ['acceding', 'accede'], + ['stealing', 'steal'], + ['accrediting', 'accredit'], + ['foregoing', 'forego'], + ['sensitizing', 'sensitize'], + ['dissolving', 'dissolve'], + ['wrestling', 'wrestle'], + ['extruding', 'extrude'], + ['diverging', 'diverge'], + ['grafting', 'graft'], + ['fasting', 'fast'], + ['transcribing', 'transcribe'], + ['boxing', 'box'], + ['detaining', 'detain'], + ['forgetting', 'forget'], + ['encoding', 'encode'], + ['shedding', 'shed'], + ['suppressing', 'suppress'], + ['banning', 'ban'], + ['stirring', 'stir'], + ['gambling', 'gamble'], + ['encountering', 'encounter'], + ['simulating', 'simulate'], + ['commuting', 'commute'], + ['trimming', 'trim'], + ['abandoning', 'abandon'], + ['firing', 'fire'], + ['scrambling', 'scramble'], + ['ceasing', 'cease'], + ['polluting', 'pollute'], + ['precluding', 'preclude'], + ['transacting', 'transact'], + ['inducing', 'induce'], + ['unpacking', 'unpack'], + ['perforating', 'perforate'], + ['licencing', 'licence'], + ['realigning', 'realign'], + ['splashing', 'splash'], + ['decaying', 'decay'], + ['coating', 'coat'], + ['gluing', 'glue'], + ['isolating', 'isolate'], + ['blanketing', 'blanket'], + ['slipping', 'slip'], + ['worsening', 'worsen'], + ['softening', 'soften'], + ['escaping', 'escape'], + ['drifting', 'drift'], + ['hampering', 'hamper'], + ['creeping', 'creep'], + ['bolstering', 'bolster'], + ['garnering', 'garner'], + ['hiding', 'hide'], + ['ionizing', 'ionize'], + ['marrying', 'marry'], + ['rebalancing', 'rebalance'], + ['repaying', 'repay'], + ['shearing', 'shear'], + ['catalyzing', 'catalyze'], + ['girdling', 'girdle'], + ['confounding', 'confound'], + ['piling', 'pile'], + ['amplifying', 'amplify'], + ['rationalizing', 'rationalize'], + ['slicing', 'slice'], + ['refreshing', 'refresh'], + ['composing', 'compose'], + ['astounding', 'astound'], + ['discontinuing', 'discontinue'], + ['subcontracting', 'subcontract'], + ['underscoring', 'underscore'], + ['shopping', 'shop'], + ['flooding', 'flood'], + ['abolishing', 'abolish'], + ['factoring', 'factor'], + ['conflicting', 'conflict'], + ['towing', 'tow'], + ['deserving', 'deserve'], + ['sticking', 'stick'], + ['embossing', 'emboss'], + ['synchronizing', 'synchronize'], + ['resuming', 'resume'], + ['vetting', 'vet'], + ['instructing', 'instruct'], + ['calibrating', 'calibrate'], + ['enclosing', 'enclose'], + ['taping', 'tape'], + ['ascertaining', 'ascertain'], + ['predisposing', 'predispose'], + ['farrowing', 'farrow'], + ['planing', 'plane'], + ['smoking', 'smoke'], + ['activating', 'activate'], + ['resorting', 'resort'], + ['wondering', 'wonder'], + ['neutralizing', 'neutralize'], + ['automating', 'automate'], + ['extenuating', 'extenuate'], + ['relocating', 'relocate'], + ['topping', 'top'], + ['eliciting', 'elicit'], + ['socializing', 'socialize'], + ['trailing', 'trail'], + ['enticing', 'entice'], + ['dictating', 'dictate'], + ['sleeping', 'sleep'], + ['curling', 'curl'], + ['starring', 'star'], + ['babysitting', 'babysit'], + ['solidifying', 'solidify'], + ['uniting', 'unite'], + ['aspiring', 'aspire'], + ['trampling', 'trample'], + ['teaming', 'team'], + ['appraising', 'appraise'], + ['delegating', 'delegate'], + ['confining', 'confine'], + ['fertilizing', 'fertilize'], + ['reinstating', 'reinstate'], + ['banding', 'band'], + ['pickling', 'pickle'], + ['tunnelling', 'tunnel'], + ['piercing', 'pierce'], + ['frying', 'fry'], + ['redressing', 'redress'], + ['engendering', 'engender'], + ['prosecuting', 'prosecute'], + ['sentencing', 'sentence'], + ['depositing', 'deposit'], + ['enduring', 'endure'], + ['elevating', 'elevate'], + ['rallying', 'rally'], + ['flattening', 'flatten'], + ['painting', 'paint'], + ['dancing', 'dance'], + ['airing', 'air'], + ['gearing', 'gear'], + ['ramping', 'ramp'], + ['skyrocketing', 'skyrocket'], + ['dominating', 'dominate'], + ['tasting', 'taste'], + ['pitching', 'pitch'], + ['steaming', 'steam'], + ['impairing', 'impair'], + ['ventilating', 'ventilate'], + ['damping', 'damp'], + ['scouring', 'scour'], + ['revoking', 'revoke'], + ['contaminating', 'contaminate'], + ['franchising', 'franchise'], + ['deeming', 'deem'], + ['zeroing', 'zero'], + ['cohabiting', 'cohabit'], + ['intersecting', 'intersect'], + ['dubbing', 'dub'], + ['merchandizing', 'merchandize'], + ['adjudicating', 'adjudicate'], + ['saluting', 'salute'], + ['annealing', 'anneal'], + ['dismissing', 'dismiss'], + ['subjecting', 'subject'], + ['excepting', 'except'], + ['reorganizing', 'reorganize'], + ['drumming', 'drum'], + ['sanctioning', 'sanction'], + ['elaborating', 'elaborate'], + ['waning', 'wane'], + ['restraining', 'restrain'], + ['perpetuating', 'perpetuate'], + ['curtailing', 'curtail'], + ['illuminating', 'illuminate'], + ['prolonging', 'prolong'], + ['refuelling', 'refuel'], + ['recognising', 'recognise'], + ['brazing', 'braze'], + ['galvanizing', 'galvanize'], + ['amalgamating', 'amalgamate'], + ['inciting', 'incite'], + ['vending', 'vend'], + ['reselling', 'resell'], + ['customizing', 'customize'], + ['canvassing', 'canvass'], + ['microfilming', 'microfilm'], + ['weeding', 'weed'], + ['brokering', 'broker'], + ['policymaking', 'policymak'], + ['tilling', 'till'], + ['rotting', 'rot'], + ['melting', 'melt'], + ['terracing', 'terrace'], + ['sucking', 'suck'], + ['reigning', 'reign'], + ['aerating', 'aerate'], + ['diluting', 'dilute'], + ['backwashing', 'backwash'], + ['admitting', 'admit'], + ['underperforming', 'underperform'], + ['resting', 'rest'], + ['surfing', 'surf'], + ['abusing', 'abuse'], + ['interlocking', 'interlock'], + ['embedding', 'embed'], + ['billing', 'bill'], + ['faxing', 'fax'], + ['invading', 'invade'], + ['distilling', 'distil'], + ['swelling', 'swell'], + ['tipping', 'tip'], + ['electing', 'elect'], + ['confusing', 'confuse'], + ['reinvesting', 'reinvest'], + ['spurring', 'spur'], + ['hardening', 'harden'], + ['bordering', 'border'], + ['polarizing', 'polarize'], + ['singing', 'sing'], + ['resisting', 'resist'], + ['necessitating', 'necessitate'], + ['reopening', 'reopen'], + ['pledging', 'pledge'], + ['reshaping', 'reshape'], + ['overarching', 'overarch'], + ['wintering', 'winter'], + ['modulating', 'modulate'], + ['baling', 'bale'], + ['threshing', 'thresh'], + ['potting', 'pot'], + ['landing', 'land'], + ['remitting', 'remit'], + ['sifting', 'sift'], + ['penalizing', 'penalize'], + ['boning', 'bone'], + ['disregarding', 'disregard'], + ['encapsulating', 'encapsulate'], + ['rectifying', 'rectify'], + ['concealing', 'conceal'], + ['intercepting', 'intercept'], + ['proclaiming', 'proclaim'], + ['laminating', 'laminate'], + ['figuring', 'figure'], + ['paddling', 'paddle'], + ['faring', 'fare'], + ['depriving', 'deprive'], + ['evidencing', 'evidence'], + ['corresponding', 'correspond'], + ['reeling', 'reel'], + ['crimping', 'crimp'], + ['edging', 'edge'], + ['anchoring', 'anchor'], + ['uncovering', 'uncover'], + ['flourishing', 'flourish'], + ['scratching', 'scratch'], + ['honing', 'hone'], + ['reinventing', 'reinvent'], + ['mandating', 'mandate'], + ['objecting', 'object'], + ['revolving', 'revolve'], + ['deleting', 'delete'], + ['spelling', 'spell'], + ['quitting', 'quit'], + ['pouring', 'pour'], + ['budgeting', 'budget'], + ['teleconferencing', 'teleconference'], + ['wasting', 'waste'], + ['reallocating', 'reallocate'], + ['sanding', 'sand'], + ['shadowing', 'shadow'], + ['punching', 'punch'], + ['infecting', 'infect'], + ['ploughing', 'plough'], + ['disinfecting', 'disinfect'], + ['wiping', 'wipe'], + ['condensing', 'condense'], + ['redistributing', 'redistribute'], + ['housing', 'house'], + ['fastening', 'fasten'], + ['perfuming', 'perfume'], + ['calendering', 'calender'], + ['voicing', 'voice'], + ['mooring', 'moor'], + ['sinking', 'sink'], + ['unlocking', 'unlock'], + ['phoning', 'phone'], + ['risking', 'risk'], + ['heightening', 'heighten'], + ['reserving', 'reserve'], + ['breaching', 'breach'], + ['depreciating', 'depreciate'], + ['symbolizing', 'symbolize'], + ['underwriting', 'underwrite'], + ['regaining', 'regain'], + ['depleting', 'deplete'], + ['detracting', 'detract'], + ['sprouting', 'sprout'], + ['energizing', 'energize'], + ['bagging', 'bag'], + ['overturning', 'overturn'], + ['entertaining', 'entertain'], + ['provoking', 'provoke'], + ['rehabilitating', 'rehabilitate'], + ['fracturing', 'fracture'], + ['desiring', 'desire'], + ['retreading', 'retread'], + ['steelmaking', 'steelmak'], + ['revamping', 'revamp'], + ['segregating', 'segregate'], + ['crawling', 'crawl'], + ['straightening', 'straighten'], + ['worrying', 'worry'], + ['perplexing', 'perplex'], + ['conceptualizing', 'conceptualize'], + ['monetizing', 'monetize'], + ['watermarking', 'watermark'], + ['humiliating', 'humiliate'], + ['remanufacturing', 'remanufacture'], + ['masking', 'mask'], + ['dialing', 'dial'], + ['exacerbating', 'exacerbate'], + ['inspiring', 'inspire'], + ['precipitating', 'precipitate'], + ['equating', 'equate'], + ['bypassing', 'bypass'], + ['enlarging', 'enlarge'], + ['omitting', 'omit'], + ['liberalizing', 'liberalize'], + ['luring', 'lure'], + ['pressuring', 'pressure'], + ['exploding', 'explode'], + ['shaking', 'shake'], + ['jogging', 'jog'], + ['propelling', 'propel'], + ['leaking', 'leak'], + ['surrendering', 'surrender'], + ['neglecting', 'neglect'], + ['imparting', 'impart'], + ['relaunching', 'relaunch'], + ['channelling', 'channel'], + ['remarking', 'remark'], + ['forbidding', 'forbid'], + ['disciplining', 'discipline'], + ['roaming', 'roam'], + ['clipping', 'clip'], + ['arresting', 'arrest'], + ['repealing', 'repeal'], + ['expending', 'expend'], + ['wetting', 'wet'], + ['irrigating', 'irrigate'], + ['decomposing', 'decompose'], + ['renaming', 'rename'], + ['ditching', 'ditch'], + ['emptying', 'empty'], + ['reassessing', 'reassess'], + ['vaccinating', 'vaccinate'], + ['bunching', 'bunch'], + ['denigrating', 'denigrate'], + ['sharpening', 'sharpen'], + ['punishing', 'punish'], + ['presuming', 'presume'], + ['testifying', 'testify'], + ['tolling', 'toll'], + ['indexing', 'index'], + ['retrieving', 'retrieve'], + ['snowshoeing', 'snowshoe'], + ['outperforming', 'outperform'], + ['downsizing', 'downsize'], + ['sparking', 'spark'], + ['echoing', 'echo'], + ['pinpointing', 'pinpoint'], + ['reconsidering', 'reconsider'], + ['overlooking', 'overlook'], + ['relaying', 'relay'], + ['enlisting', 'enlist'], + ['perfecting', 'perfect'], + ['branching', 'branch'], + ['commending', 'commend'], + ['pitting', 'pit'], + ['defeating', 'defeat'], + ['contravening', 'contravene'], + ['congratulating', 'congratulate'], + ['equalizing', 'equalize'], + ['nourishing', 'nourish'], + ['underfunding', 'underfund'], + ['retailing', 'retail'], + ['resurfacing', 'resurface'], + ['plotting', 'plot'], + ['lettering', 'letter'], + ['burying', 'bury'], + ['imputing', 'impute'], + ['degrading', 'degrade'], + ['flushing', 'flush'], + ['crusting', 'crust'], + ['spacing', 'space'], + ['shading', 'shade'], + ['notching', 'notch'], + ['scalding', 'scald'], + ['earmarking', 'earmark'], + ['refilling', 'refill'], + ['homogenizing', 'homogenize'], + ['disputing', 'dispute'], + ['kneading', 'knead'], + ['sintering', 'sinter'], + ['blinding', 'blind'], + ['swearing', 'swear'], + ['imaging', 'image'], + ['rejuvenating', 'rejuvenate'], + ['trawling', 'trawl'], + ['abiding', 'abide'], + ['plowing', 'plow'], + ['scrutinizing', 'scrutinize'], + ['segmenting', 'segment'], + ['excelling', 'excel'], + ['skiing', 'ski'], + ['dreaming', 'dream'], + ['exhilarating', 'exhilarate'], + ['hunting', 'hunt'], + ['disagreeing', 'disagree'], + ['wandering', 'wander'], + ['tilting', 'tilt'], + ['rearing', 'rear'], + ['overheating', 'overheat'], + ['dipping', 'dip'], + ['bustling', 'bustle'], + ['swapping', 'swap'], + ['recounting', 'recount'], + ['erecting', 'erect'], + ['redirecting', 'redirect'], + ['halting', 'halt'], + ['oscillating', 'oscillate'], + ['stuffing', 'stuff'], + ['quenching', 'quench'], + ['noticing', 'notice'], + ['reviving', 'revive'], + ['refurbishing', 'refurbish'], + ['vesting', 'vest'], + ['invoking', 'invoke'], + ['invalidating', 'invalidate'], + ['compressing', 'compress'], + ['venting', 'vent'], + ['merchandising', 'merchandise'], + ['divulging', 'divulge'], + ['subsisting', 'subsist'], + ['replying', 'reply'], + ['flashing', 'flash'], + ['straining', 'strain'], + ['proofing', 'proof'], + ['vaporizing', 'vaporize'], + ['foraging', 'forage'], + ['budding', 'bud'], + ['staining', 'stain'], + ['grooving', 'groove'], + ['wounding', 'wound'], + ['delineating', 'delineate'], + ['lactating', 'lactate'], + ['pleasing', 'please'], + ['clotting', 'clot'], + ['promulgating', 'promulgate'], + ['legitimizing', 'legitimize'], + ['demystifying', 'demystify'], + ['pulping', 'pulp'], + ['generalizing', 'generalize'], + ['orienting', 'orient'], + ['broaching', 'broach'], + ['folding', 'fold'], + ['birthing', 'birth'], + ['braking', 'brake'], + ['disfiguring', 'disfigure'], + ['stifling', 'stifle'], + ['boasting', 'boast'], + ['timing', 'time'], + ['reassuring', 'reassure'], + ['vacationing', 'vacation'], + ['sparing', 'spare'], + ['regrouping', 'regroup'], + ['tacking', 'tack'], + ['chucking', 'chuck'], + ['bleeding', 'bleed'], + ['entrenching', 'entrench'], + ['clamping', 'clamp'], + ['cashing', 'cash'], + ['gratifying', 'gratify'], + ['maximising', 'maximise'], + ['reprinting', 'reprint'], + ['rinsing', 'rinse'], + ['familiarizing', 'familiarize'], + ['recouping', 'recoup'], + ['cementing', 'cement'], + ['scraping', 'scrape'], + ['democratizing', 'democratize'], + ['grasping', 'grasp'], + ['defraying', 'defray'], + ['normalizing', 'normalize'], + ['weaning', 'wean'], + ['extrapolating', 'extrapolate'], + ['cycling', 'cycle'], + ['disbursing', 'disburse'], + ['endeavouring', 'endeavour'], + ['molting', 'molt'], + ['devolving', 'devolve'], + ['blossoming', 'blossom'], + ['wading', 'wade'], + ['refuting', 'refute'], + ['escorting', 'escort'], + ['disembarking', 'disembark'], + ['strapping', 'strap'], + ['reclining', 'recline'], + ['privatizing', 'privatize'], + ['dredging', 'dredge'], + ['abating', 'abate'], + ['compelling', 'compel'], + ['mirroring', 'mirror'], + ['organising', 'organise'], + ['warming', 'warm'], + ['waving', 'wave'], + ['tumbling', 'tumble'], + ['battling', 'battle'], + ['contending', 'contend'], + ['intimidating', 'intimidate'], + ['pampering', 'pamper'], + ['lengthening', 'lengthen'], + ['invigorating', 'invigorate'], + ['spotlighting', 'spotlight'], + ['apportioning', 'apportion'], + ['authoring', 'authore'], + ['persisting', 'persist'], + ['tempering', 'temper'], + ['preaching', 'preach'], + ['vying', 'vie'], + ['evaporating', 'evaporate'], + ['crumbling', 'crumble'], + ['bracing', 'brace'], + ['bubbling', 'bubble'], + ['grooming', 'groom'], + ['reusing', 'reuse'], + ['repatriating', 'repatriate'], + ['unraveling', 'unravel'], + ['piping', 'pipe'], + ['engineering', 'engineer'], + ['chipping', 'chip'], + ['clogging', 'clog'], + ['malfunctioning', 'malfunction'], + ['alloying', 'alloy'], + ['minding', 'mind'], + ['appropriating', 'appropriate'], + ['authenticating', 'authenticate'], + ['videotaping', 'videotape'], + ['warranting', 'warrant'], + ['reprocessing', 'reprocess'], + ['affixing', 'affix'], + ['shattering', 'shatter'], + ['falsifying', 'falsify'], + ['bursting', 'burst'], + ['reworking', 'rework'], + ['renegotiating', 'renegotiate'], + ['refocusing', 'refocus'], + ['inventing', 'invent'], + ['sculpting', 'sculpt'], + ['economizing', 'economize'], + ['encrypting', 'encrypt'], + ['sheltering', 'shelter'], + ['fogging', 'fog'], + ['harrowing', 'harrow'], + ['shredding', 'shred'], + ['browning', 'brown'], + ['bruising', 'bruise'], + ['trucking', 'truck'], + ['interrupting', 'interrupt'], + ['denoting', 'denote'], + ['surfacing', 'surface'], + ['breading', 'bread'], + ['fragmenting', 'fragment'], + ['legislating', 'legislate'], + ['frustrating', 'frustrate'], + ['surprising', 'surprise'], + ['gardening', 'garden'], + ['bowling', 'bowl'], + ['elucidating', 'elucidate'], + ['blanking', 'blank'], + ['stapling', 'staple'], + ['felling', 'fell'], + ['eviscerating', 'eviscerate'], + ['imprinting', 'imprint'], + ['hemming', 'hem'], + ['sheeting', 'sheet'], + ['puffing', 'puff'], + ['kicking', 'kick'], + ['imagining', 'imagine'], + ['uttering', 'utter'], + ['resubmitting', 'resubmit'], + ['fallowing', 'fallow'], + ['drowning', 'drown'], + ['behaving', 'behave'], + ['rewriting', 'rewrite'], + ['polling', 'poll'], + ['trekking', 'trek'], + ['aggravating', 'aggravate'], + ['hovering', 'hover'], + ['encroaching', 'encroach'], + ['persuading', 'persuade'], + ['fading', 'fade'], + ['stagnating', 'stagnate'], + ['bucking', 'buck'], + ['shutting', 'shut'], + ['soaking', 'soak'], + ['fearing', 'fear'], + ['knocking', 'knock'], + ['biting', 'bite'], + ['banking', 'bank'], + ['incubating', 'incubate'], + ['globalizing', 'globalize'], + ['thawing', 'thaw'], + ['revolutionizing', 'revolutionize'], + ['pounding', 'pound'], + ['grabbing', 'grab'], + ['delving', 'delve'], + ['contesting', 'contest'], + ['criticizing', 'criticize'], + ['mourning', 'mourn'], + ['manifesting', 'manifest'], + ['decentralizing', 'decentralize'], + ['reiterating', 'reiterate'], + ['inquiring', 'inquire'], + ['sewing', 'sew'], + ['availing', 'avail'], + ['relinquishing', 'relinquish'], + ['silencing', 'silence'], + ['patching', 'patch'], + ['instilling', 'instill'], + ['offloading', 'offload'], + ['zoning', 'zone'], + ['bolting', 'bolt'], + ['meshing', 'mesh'], + ['profiting', 'profit'], + ['sequestering', 'sequester'], + ['tabulating', 'tabulate'], + ['dwarfing', 'dwarf'], + ['bronzing', 'bronze'], + ['digging', 'dig'], + ['scarring', 'scar'], + ['skinning', 'skin'], + ['burrowing', 'burrow'], + ['reorienting', 'reorient'], + ['reasoning', 'reason'], + ['grossing', 'gross'], + ['reconditioning', 'recondition'], + ['fermenting', 'ferment'], + ['preexisting', 'preexist'], + ['speculating', 'speculate'], + ['averting', 'avert'], + ['emulsifying', 'emulsify'], + ['marinating', 'marinate'], + ['marginalizing', 'marginalize'], + ['smudging', 'smudge'], + ['implicating', 'implicate'], + ['vanishing', 'vanish'], + ['engraving', 'engrave'], + ['tearing', 'tear'], + ['fusing', 'fuse'], + ['slotting', 'slot'], + ['concurring', 'concur'], + ['spoofing', 'spoof'], + ['decrypting', 'decrypt'], + ['advertising', 'advertise'], + ['interdicting', 'interdict'], + ['foaming', 'foam'], + ['dosing', 'dose'], + ['interlining', 'interline'], + ['burnishing', 'burnish'], + ['singeing', 'singe'], + ['electrogalvanizing', 'electrogalvanize'], + ['trusting', 'trust'], + ['overflowing', 'overflow'], + ['immersing', 'immerse'], + ['flocking', 'flock'], + ['chatting', 'chat'], + ['roughing', 'rough'], + ['looping', 'loop'], + ['outfitting', 'outfit'], + ['receding', 'recede'], + ['dragging', 'drag'], + ['centering', 'center'], + ['harbouring', 'harbour'], + ['bumping', 'bump'], + ['decelerating', 'decelerate'], + ['venturing', 'venture'], + ['alienating', 'alienate'], + ['roasting', 'roast'], + ['cabling', 'cable'], + ['manoeuvring', 'manoeuvre'], + ['occuring', 'occure'], + ['firefighting', 'firefight'], + ['chronicling', 'chronicle'], + ['fabricating', 'fabricate'], + ['obliging', 'oblige'], + ['enlightening', 'enlighten'], + ['rescheduling', 'reschedule'], + ['destabilizing', 'destabilize'], + ['resigning', 'resign'], + ['caulking', 'caulk'], + ['reordering', 'reorder'], + ['diffusing', 'diffuse'], + ['flooring', 'floor'], + ['powering', 'power'], + ['forgoing', 'forgo'], + ['shoplifting', 'shoplift'], + ['vulcanizing', 'vulcanize'], + ['radiating', 'radiate'], + ['subdividing', 'subdivide'], + ['daunting', 'daunt'], + ['uprooting', 'uproot'], + ['discing', 'disc'], + ['sanitizing', 'sanitize'], + ['endangering', 'endanger'], + ['buffering', 'buffer'], + ['parking', 'park'], + ['dispelling', 'dispel'], + ['propagating', 'propagate'], + ['fumigating', 'fumigate'], + ['mottling', 'mottle'], + ['lightening', 'lighten'], + ['reapplying', 'reapply'], + ['blaming', 'blame'], + ['prejudging', 'prejudge'], + ['flaking', 'flake'], + ['depressing', 'depress'], + ['trenching', 'trench'], + ['dehydrating', 'dehydrate'], + ['emulating', 'emulate'], + ['conceiving', 'conceive'], + ['hailing', 'hail'], + ['unleashing', 'unleash'], + ['upsetting', 'upset'], + ['immunizing', 'immunize'], + ['antagonizing', 'antagonize'], + ['racking', 'rack'], + ['typesetting', 'typeset'], + ['hardworking', 'hardwork'], + ['accentuating', 'accentuate'], + ['awakening', 'awaken'], + ['headlining', 'headline'], + ['reprogramming', 'reprogram'], + ['pasting', 'paste'], + ['disassembling', 'disassemble'], + ['assaulting', 'assault'], + ['extinguishing', 'extinguish'], + ['disobeying', 'disobey'], + ['reuniting', 'reunite'], + ['stigmatizing', 'stigmatize'], + ['commingling', 'commingle'], + ['icing', 'ice'], + ['unlading', 'unlade'], + ['detonating', 'detonate'], + ['bunkering', 'bunker'], + ['vulcanising', 'vulcanise'], + ['descaling', 'descale'], + ['priming', 'prime'], + ['autoclaving', 'autoclave'], + ['praising', 'praise'], + ['twisting', 'twist'], + ['scrubbing', 'scrub'], + ['spilling', 'spill'], + ['receipting', 'receipt'], + ['telephoning', 'telephone'], + ['bragging', 'brag'], + ['replenishing', 'replenish'], + ['materializing', 'materialize'], + ['majoring', 'major'], + ['sightseeing', 'sightsee'], + ['emphasising', 'emphasise'], + ['unwinding', 'unwind'], + ['decompressing', 'decompress'], + ['visualizing', 'visualize'], + ['grounding', 'ground'], + ['clouding', 'cloud'], + ['actualizing', 'actualize'], + ['stalling', 'stall'], + ['billeting', 'billet'], + ['lecturing', 'lecture'], + ['conspiring', 'conspire'], + ['rearranging', 'rearrange'], + ['outstripping', 'outstrip'], + ['interesting', 'interest'], + ['plummeting', 'plummet'], + ['plunging', 'plunge'], + ['inflating', 'inflate'], + ['corroborating', 'corroborate'], + ['brightening', 'brighten'], + ['raging', 'rage'], + ['roving', 'rove'], + ['stencilling', 'stencil'], + ['rescuing', 'rescue'], + ['daring', 'dare'], + ['laughing', 'laugh'], + ['busking', 'busk'], + ['juggling', 'juggle'], + ['sailing', 'sail'], + ['predating', 'predate'], + ['reconstructing', 'reconstruct'], + ['conquering', 'conquer'], + ['electroplating', 'electroplate'], + ['alluding', 'allude'], + ['nullifying', 'nullify'], + ['contradicting', 'contradict'], + ['recharging', 'recharg'], + ['entitling', 'entitle'], + ['impinging', 'impinge'], + ['liquidating', 'liquidate'], + ['tweaking', 'tweak'], + ['optimising', 'optimise'], + ['guarding', 'guard'], + ['spying', 'spy'], + ['conditioning', 'condition'], + ['embalming', 'embalm'], + ['choking', 'choke'], + ['sweeping', 'sweep'], + ['imitating', 'imitate'], + ['counteracting', 'counteract'], + ['deciphering', 'decipher'], + ['overcrowding', 'overcrowd'], + ['petitioning', 'petition'], + ['pollinating', 'pollinate'], + ['severing', 'sever'], + ['secreting', 'secrete'], + ['pasteurizing', 'pasteurize'], + ['blasting', 'blast'], + ['sugaring', 'sugar'], + ['redeveloping', 'redevelop'], + ['halving', 'halve'], + ['culling', 'cull'], + ['commanding', 'command'], + ['whipping', 'whip'], + ['bottling', 'bottle'], + ['pinning', 'pin'], + ['overlying', 'overlie'], + ['infiltrating', 'infiltrate'], + ['jetting', 'jet'], + ['trembling', 'tremble'], + ['swallowing', 'swallow'], + ['stewing', 'stew'], + ['brooding', 'brood'], + ['evading', 'evade'], + ['filleting', 'fillet'], + ['unifying', 'unify'], + ['teasing', 'tease'], + ['approximating', 'approximate'], + ['seating', 'seat'], + ['rocking', 'rock'], + ['briefing', 'brief'], + ['waking', 'wake'], + ['springing', 'spring'], + ['dabbling', 'dabble'], + ['prejudicing', 'prejudice'], + ['harassing', 'harass'], + ['mimicking', 'mimick'], + ['chasing', 'chase'], + ['crating', 'crate'], + ['retouching', 'retouch'], + ['hoisting', 'hoist'], + ['institutionalizing', 'institutionalize'], + ['condemning', 'condemn'], + ['humbling', 'humble'], + ['incapacitating', 'incapacitate'], + ['corrupting', 'corrupt'], + ['kneeling', 'kneel'], + ['lashing', 'lash'], + ['nailing', 'nail'], + ['vibrating', 'vibrate'], + ['reassembling', 'reassemble'], + ['supercalendering', 'supercalender'], + ['morticing', 'mortice'], + ['banting', 'bant'], + ['sheathing', 'sheath'], + ['diving', 'dive'], + ['abstracting', 'abstract'], + ['scrolling', 'scroll'], + ['kidding', 'kid'], + ['transcending', 'transcend'], + ['requisitioning', 'requisition'], + ['cruising', 'cruise'], + ['spiralling', 'spiral'], + ['loosing', 'loose'], + ['tramping', 'tramp'], + ['liking', 'like'], + ['laddering', 'ladder'], + ['chanting', 'chant'], + ['roaring', 'roar'], + ['bouncing', 'bounce'], + ['littering', 'litter'], + ['paralleling', 'parallel'], + ['photographing', 'photograph'], + ['fetching', 'fetch'], + ['cautioning', 'caution'], + ['shoring', 'shore'], + ['withstanding', 'withstand'], + ['overriding', 'override'], + ['inflicting', 'inflict'], + ['squeezing', 'squeeze'], + ['swinging', 'swing'], + ['smiling', 'smile'], + ['rushing', 'rush'], + ['blazing', 'blaze'], + ['swathing', 'swathe'], + ['recirculating', 'recirculate'], + ['bulking', 'bulk'], + ['incriminating', 'incriminate'], + ['liberating', 'liberate'], + ['molding', 'mold'], + ['endeavoring', 'endeavor'], + ['inhabiting', 'inhabit'], + ['faltering', 'falter'], + ['befitting', 'befit'], + ['grieving', 'grieve'], + ['stevedoring', 'stevedore'], + ['criminalizing', 'criminalize'], + ['dusting', 'dust'], + ['irritating', 'irritate'], + ['gaming', 'game'], + ['padding', 'pad'], + ['computerizing', 'computerize'], + ['underestimating', 'underestimate'], + ['envisioning', 'envision'], + ['clinging', 'cling'], + ['purporting', 'purport'], + ['reconfiguring', 'reconfigure'], + ['configuring', 'configure'], + ['oxidizing', 'oxidize'], + ['screaming', 'scream'], + ['levering', 'lever'], + ['visioning', 'vision'], + ['scaring', 'scare'], + ['pecking', 'peck'], + ['webbing', 'web'], + ['pupating', 'pupate'], + ['podding', 'pod'], + ['silking', 'silk'], + ['flecking', 'fleck'], + ['raking', 'rake'], + ['peeling', 'peel'], + ['enunciating', 'enunciate'], + ['mingling', 'mingle'], + ['disintegrating', 'disintegrate'], + ['fattening', 'fatten'], + ['cumulating', 'cumulate'], + ['grilling', 'grill'], + ['ingesting', 'ingest'], + ['fouling', 'foul'], + ['inferring', 'infer'], + ['refinancing', 'refinance'], + ['ceding', 'cede'], + ['suing', 'sue'], + ['interrogating', 'interrogate'], + ['contextualizing', 'contextualize'], + ['crediting', 'credit'], + ['overshooting', 'overshoot'], + ['lumping', 'lump'], + ['bewildering', 'bewilder'], + ['redrafting', 'redraft'], + ['firming', 'firm'], + ['disallowing', 'disallow'], + ['brimming', 'brim'], + ['feasting', 'feast'], + ['schooling', 'school'], + ['minimising', 'minimise'], + ['indemnifying', 'indemnify'], + ['assimilating', 'assimilate'], + ['gleaning', 'glean'], + ['cataloging', 'cataloge'], + ['pretending', 'pretend'], + ['tailing', 'tail'], + ['trafficking', 'traffick'], + ['skewing', 'skew'], + ['copyrighting', 'copyright'], + ['publicising', 'publicise'], + ['telecasting', 'telecast'], + ['orchestrating', 'orchestrate'], + ['erasing', 'erase'], + ['sniffing', 'sniff'], + ['dishwashing', 'dishwash'], + ['faceting', 'facet'], + ['immobilizing', 'immobilize'], + ['telescoping', 'telescope'], + ['interlacing', 'interlace'], + ['plastering', 'plaster'], + ['dieting', 'diet'], + ['ameliorating', 'ameliorate'], + ['dissecting', 'dissect'], + ['shelving', 'shelve'], + ['unforgiving', 'unforgive'], + ['assaying', 'assay'], + ['rerouting', 'reroute'], + ['fringing', 'fringe'], + ['reimbursing', 'reimburse'], + ['reintroducing', 'reintroduce'], + ['delighting', 'delight'], + ['sipping', 'sip'], + ['gliding', 'glide'], + ['ballooning', 'balloon'], + ['motoring', 'motor'], + ['wedding', 'wed'], + ['popularizing', 'popularize'], + ['outing', 'out'], + ['weathering', 'weather'], + ['chopping', 'chop'], + ['singling', 'single'], + ['relegating', 'relegate'], + ['industrializing', 'industrialize'], + ['pegging', 'peg'], + ['plaguing', 'plague'], + ['refraining', 'refrain'], + ['wooing', 'woo'], + ['obstructing', 'obstruct'], + ['stranding', 'strand'], + ['staking', 'stake'], + ['tiring', 'tire'], + ['devouring', 'devour'], + ['braising', 'braise'], + ['marching', 'march'], + ['streaking', 'streak'], + ['hacking', 'hack'], + ['quadrupling', 'quadruple'], + ['animating', 'animate'], + ['fashioning', 'fashion'], + ['moisturizing', 'moisturize'], + ['articling', 'article'], + ['applauding', 'applaud'], + ['appending', 'append'], + ['entailing', 'entail'], + ['superseding', 'supersede'], + ['resurrecting', 'resurrect'], + ['heeding', 'heed'], + ['evoking', 'evoke'], + ['deliberating', 'deliberate'], + ['afflicting', 'afflict'], + ['codifying', 'codify'], + ['outlawing', 'outlaw'], + ['disconcerting', 'disconcert'], + ['biasing', 'bias'], + ['deviating', 'deviate'], + ['guessing', 'guess'], + ['voiding', 'void'], + ['abutting', 'abut'], + ['leaning', 'lean'], + ['masquerading', 'masquerade'], + ['divesting', 'divest'], + ['underpricing', 'underprice'], + ['internalizing', 'internalize'], + ['redeeming', 'redeem'], + ['disentangling', 'disentangle'], + ['flaring', 'flare'], + ['coking', 'coke'], + ['pirating', 'pirate'], + ['unbundling', 'unbundle'], + ['shielding', 'shield'], + ['readying', 'ready'], + ['chaining', 'chain'], + ['protesting', 'protest'], + ['backdating', 'backdate'], + ['excusing', 'excuse'], + ['queuing', 'queue'], + ['rejoining', 'rejoin'], + ['overburdening', 'overburden'], + ['recreating', 'recreate'], + ['prospering', 'prosper'], + ['wagering', 'wager'], + ['calving', 'calve'], + ['gnawing', 'gnaw'], + ['sloping', 'slope'], + ['stratifying', 'stratify'], + ['blooming', 'bloom'], + ['smothering', 'smother'], + ['hilling', 'hill'], + ['chilling', 'chill'], + ['thickening', 'thicken'], + ['overspending', 'overspend'], + ['pursing', 'purse'], + ['itching', 'itch'], + ['gelling', 'gell'], + ['purging', 'purge'], + ['combing', 'comb'], + ['bartering', 'barter'], + ['pelleting', 'pellet'], + ['fobbing', 'fob'], + ['perching', 'perch'], + ['robbing', 'rob'], + ['cribbing', 'crib'], + ['predominating', 'predominate'], + ['pollarding', 'pollard'], + ['curving', 'curve'], + ['margining', 'margin'], + ['straying', 'stray'], + ['auctioning', 'auction'], + ['flipping', 'flip'], + ['bedding', 'bed'], + ['jointing', 'joint'], + ['marshalling', 'marshal'], + ['mutating', 'mutate'], + ['mothering', 'mother'], + ['hastening', 'hasten'], + ['collapsing', 'collapse'], + ['remunerating', 'remunerate'], + ['postulating', 'postulate'], + ['comprehending', 'comprehend'], + ['equilibrating', 'equilibrate'], + ['misinterpreting', 'misinterpret'], + ['recasting', 'recast'], + ['rehearsing', 'rehearse'], + ['devaluing', 'devalue'], + ['cheering', 'cheer'], + ['donning', 'don'], + ['mulling', 'mull'], + ['exemplifying', 'exemplify'], + ['acculturating', 'acculturate'], + ['frequenting', 'frequent'], + ['coproducing', 'coproduce'], + ['equaling', 'equal'], + ['legitimating', 'legitimate'], + ['conciliating', 'conciliate'], + ['interlinking', 'interlink'], + ['electrifying', 'electrify'], + ['succumbing', 'succumb'], + ['rebating', 'rebate'], + ['civilizing', 'civilize'], + ['inaugurating', 'inaugurate'], + ['interweaving', 'interweave'], + ['butchering', 'butcher'], + ['reinstituting', 'reinstitute'], + ['embarrassing', 'embarrass'], + ['denouncing', 'denounce'], + ['misunderstanding', 'misunderstand'], + ['bunking', 'bunk'], + ['initialling', 'initial'], + ['regenerating', 'regenerate'], + ['conjuring', 'conjure'], + ['smuggling', 'smuggle'], + ['embroidering', 'embroider'], + ['pinking', 'pink'], + ['undervaluing', 'undervalue'], + ['shaving', 'shave'], + ['compacting', 'compact'], + ['comminuting', 'comminute'], + ['clinching', 'clinch'], + ['agglomerating', 'agglomerate'], + ['shafting', 'shaft'], + ['bribing', 'bribe'], + ['overeating', 'overeat'], + ['relapsing', 'relapse'], + ['individualizing', 'individualize'], + ['complimenting', 'compliment'], + ['orphaning', 'orphan'], + ['culturing', 'culture'], + ['coughing', 'cough'], + ['downplaying', 'downplay'], + ['scattering', 'scatter'], + ['impressing', 'impress'], + ['prospecting', 'prospect'], + ['dispatching', 'dispatch'], + ['overwhelming', 'overwhelm'], + ['biking', 'bike'], + ['slashing', 'slash'], + ['rippling', 'ripple'], + ['exciting', 'excite'], + ['sunbathing', 'sunbathe'], + ['summarising', 'summarise'], + ['tobogganing', 'toboggan'], + ['utilising', 'utilise'], + ['sighting', 'sight'], + ['fronting', 'front'], + ['motorcycling', 'motorcycle'], + ['outselling', 'outsell'], + ['subduing', 'subdue'], + ['outshining', 'outshine'], + ['sketching', 'sketch'], + ['reentering', 'reenter'], + ['redeploying', 'redeploy'], + ['outnumbering', 'outnumber'], + ['gleaming', 'gleam'], + ['warring', 'war'], + ['penning', 'pen'], + ['darkening', 'darken'], + ['fluttering', 'flutter'], + ['reverberating', 'reverberate'], + ['previewing', 'preview'], + ['buzzing', 'buzz'], + ['haunting', 'haunt'], + ['undulating', 'undulate'], + ['smearing', 'smear'], + ['flapping', 'flap'], + ['crackling', 'crackle'], + ['deafening', 'deafen'], + ['labouring', 'labour'], + ['parachuting', 'parachute'], + ['snorkeling', 'snorkel'], + ['gutting', 'gut'], + ['downgrading', 'downgrade'], + ['enshrining', 'enshrine'], + ['rubbing', 'rub'], + ['melding', 'meld'], + ['propping', 'prop'], + ['annoying', 'annoy'], + ['gazing', 'gaze'], + ['assenting', 'assent'], + ['reciting', 'recite'], + ['emigrating', 'emigrate'], + ['ushering', 'usher'], + ['arousing', 'arouse'], + ['obeying', 'obey'], + ['battering', 'batter'], + ['distracting', 'distract'], + ['obviating', 'obviate'], + ['staggering', 'stagger'], + ['hooking', 'hook'], + ['reformulating', 'reformulate'], + ['refunding', 'refund'], + ['courting', 'court'], + ['overcharging', 'overcharge'], + ['cueing', 'cue'], + ['floundering', 'flounder'], + ['overshadowing', 'overshadow'], + ['wining', 'wine'], + ['tossing', 'toss'], + ['annualizing', 'annualize'], + ['envisaging', 'envisage'], + ['seeming', 'seem'], + ['restating', 'restate'], + ['reunifying', 'reunify'], + ['retreating', 'retreat'], + ['grandfathering', 'grandfather'], + ['quickening', 'quicken'], + ['doubting', 'doubt'], + ['disadvantaging', 'disadvantage'], + ['obscuring', 'obscure'], + ['seeping', 'seep'], + ['intercropping', 'intercrop'], + ['spitting', 'spit'], + ['prying', 'pry'], + ['shrivelling', 'shrivel'], + ['metabolizing', 'metabolize'], + ['puncturing', 'puncture'], + ['exuding', 'exude'], + ['protruding', 'protrude'], + ['blackening', 'blacken'], + ['rouging', 'rouge'], + ['ridging', 'ridge'], + ['stippling', 'stipple'], + ['winnowing', 'winnow'], + ['misusing', 'misuse'], + ['programing', 'program'], + ['deactivating', 'deactivate'], + ['recalculating', 'recalculate'], + ['paralyzing', 'paralyze'], + ['colluding', 'collude'], + ['demoralizing', 'demoralize'], + ['specialising', 'specialise'], + ['pasturing', 'pasture'], + ['meatpacking', 'meatpack'], + ['suckering', 'sucker'], + ['infusing', 'infuse'], + ['everchanging', 'everchange'], + ['bargaining', 'bargain'], + ['dialoguing', 'dialogue'], + ['favoring', 'favor'], + ['suffocating', 'suffocate'], + ['berthing', 'berth'], + ['disturbing', 'disturb'], + ['resettling', 'resettle'], + ['trolling', 'troll'], + ['inactivating', 'inactivate'], + ['clumping', 'clump'], + ['rephrasing', 'rephrase'], + ['dwelling', 'dwell'], + ['cheating', 'cheat'], + ['intermingling', 'intermingle'], + ['roosting', 'roost'], + ['ruffling', 'ruffle'], + ['huddling', 'huddle'], + ['quizzing', 'quiz'], + ['militating', 'militate'], + ['revitalising', 'revitalise'], + ['eschewing', 'eschew'], + ['glazing', 'glaze'], + ['patrolling', 'patrol'], + ['ankylosing', 'ankylose'], + ['joking', 'joke'], + ['bettering', 'better'], + ['consummating', 'consummate'], + ['proliferating', 'proliferate'], + ['defusing', 'defuse'], + ['deceiving', 'deceive'], + ['cushioning', 'cushion'], + ['extolling', 'extol'], + ['crystallizing', 'crystallize'], + ['localizing', 'localize'], + ['subsidising', 'subsidise'], + ['retarding', 'retard'], + ['belittling', 'belittle'], + ['dawning', 'dawn'], + ['captivating', 'captivate'], + ['modernising', 'modernise'], + ['toasting', 'toast'], + ['wowing', 'wow'], + ['relearning', 'relearn'], + ['instigating', 'instigate'], + ['hijacking', 'hijack'], + ['harmonising', 'harmonise'], + ['delimiting', 'delimit'], + ['distancing', 'distance'], + ['dehumanizing', 'dehumanize'], + ['reassigning', 'reassign'], + ['privileging', 'privilege'], + ['preceeding', 'preceed'], + ['flattering', 'flatter'], + ['endowing', 'endow'], + ['trivializing', 'trivialize'], + ['consigning', 'consign'], + ['refitting', 'refit'], + ['overprinting', 'overprint'], + ['tallying', 'tally'], + ['tantalizing', 'tantalize'], + ['coupling', 'couple'], + ['etching', 'etch'], + ['salvaging', 'salvage'], + ['entrusting', 'entrust'], + ['chauffeuring', 'chauffeur'], + ['withing', 'withe'], + ['underachieving', 'underachieve'], + ['backfilling', 'backfill'], + ['campaigning', 'campaign'], + ['coercing', 'coerce'], + ['regretting', 'regret'], + ['slapping', 'slap'], + ['expelling', 'expel'], + ['handcuffing', 'handcuff'], + ['inheriting', 'inherit'], + ['reestablishing', 'reestablish'], + ['garnishing', 'garnish'], + ['apprehending', 'apprehend'], + ['kidnaping', 'kidnap'], + ['reappraising', 'reappraise'], + ['rewording', 'reword'], + ['rowing', 'row'], + ['refereeing', 'referee'], + ['barking', 'bark'], + ['kennelling', 'kennel'], + ['screwing', 'screw'], + ['cleaving', 'cleave'], + ['impregnating', 'impregnate'], + ['chambering', 'chamber'], + ['strolling', 'stroll'], + ['ironing', 'iron'], + ['wadding', 'wad'], + ['concatenating', 'concatenate'], + ['tamping', 'tamp'], + ['paring', 'pare'], + ['collating', 'collate'], + ['enveloping', 'envelop'], + ['besetting', 'beset'], + ['superceding', 'supercede'], + ['piggybacking', 'piggyback'], + ['graphing', 'graph'], + ['stooping', 'stoop'], + ['populating', 'populate'], + ['sneezing', 'sneeze'], + ['waging', 'wage'], + ['pleading', 'plead'], + ['disproving', 'disprove'], + ['pinching', 'pinch'], + ['presupposing', 'presuppose'], + ['teeming', 'teem'], + ['igniting', 'ignite'], + ['rediscovering', 'rediscover'], + ['demobilizing', 'demobilize'], + ['finalising', 'finalise'], + ['sizzling', 'sizzle'], + ['flagging', 'flag'], + ['magnifying', 'magnify'], + ['perceiving', 'perceive'], + ['procrastinating', 'procrastinate'], + ['gifting', 'gift'], + ['uncaring', 'uncare'], + ['fascinating', 'fascinate'], + ['tripping', 'trip'], + ['honoring', 'honor'], + ['flirting', 'flirt'], + ['homebuilding', 'homebuild'], + ['swooning', 'swoon'], + ['sagging', 'sag'], + ['gripping', 'grip'], + ['erupting', 'erupt'], + ['fledging', 'fledge'], + ['deflating', 'deflate'], + ['shocking', 'shock'], + ['throttling', 'throttle'], + ['shimmering', 'shimmer'], + ['gaping', 'gape'], + ['poking', 'poke'], + ['petting', 'pet'], + ['persevering', 'persevere'], + ['raiding', 'raid'], + ['decking', 'deck'], + ['lulling', 'lull'], + ['wailing', 'wail'], + ['fiddling', 'fiddle'], + ['howling', 'howl'], + ['lurking', 'lurk'], + ['hammering', 'hammer'], + ['lugging', 'lug'], + ['pining', 'pine'], + ['leaping', 'leap'], + ['whaling', 'whale'], + ['swooping', 'swoop'], + ['massing', 'mass'], + ['buttressing', 'buttress'], + ['evacuating', 'evacuate'], + ['stabilising', 'stabilise'], + ['ravaging', 'ravage'], + ['staving', 'stave'], + ['straddling', 'straddle'], + ['cornering', 'corner'], + ['bandaging', 'bandage'], + ['inventorying', 'inventory'], + ['acquainting', 'acquaint'], + ['deprecating', 'deprecate'], + ['summoning', 'summon'], + ['adorning', 'adorn'], + ['admiring', 'admire'], + ['disqualifying', 'disqualify'], + ['overruling', 'overrule'], + ['maiming', 'maim'], + ['adjourning', 'adjourn'], + ['forsaking', 'forsake'], + ['triumphing', 'triumph'], + ['derogating', 'derogate'], + ['shepherding', 'shepherd'], + ['clamouring', 'clamour'], + ['horrifying', 'horrify'], + ['beefing', 'beef'], + ['garnisheeing', 'garnishee'], + ['dissipating', 'dissipate'], + ['wording', 'word'], + ['oversimplifying', 'oversimplify'], + ['snooping', 'snoop'], + ['overreaching', 'overreach'], + ['preconditioning', 'precondition'], + ['wrecking', 'wreck'], + ['agonizing', 'agonize'], + ['resonating', 'resonate'], + ['thrilling', 'thrill'], + ['bobbing', 'bob'], + ['parting', 'part'], + ['idling', 'idle'], + ['sparging', 'sparge'], + ['obligating', 'obligate'], + ['arbitrating', 'arbitrate'], + ['disguising', 'disguise'], + ['unsatisfying', 'unsatisfy'], + ['waxing', 'wax'], + ['construing', 'construe'], + ['submersing', 'submerse'], + ['contouring', 'contour'], + ['docketing', 'docket'], + ['scorching', 'scorch'], + ['raining', 'rain'], + ['sensationalizing', 'sensationalize'], + ['fixating', 'fixate'], + ['advantaging', 'advantage'], + ['wagging', 'wag'], + ['trotting', 'trot'], + ['pacing', 'pace'], + ['manuring', 'manure'], + ['haying', 'hay'], + ['recordkeeping', 'recordkeepe'], + ['coring', 'core'], + ['grouting', 'grout'], + ['strewing', 'strew'], + ['loafing', 'loaf'], + ['landfilling', 'landfil'], + ['percolating', 'percolate'], + ['forking', 'fork'], + ['blunting', 'blunt'], + ['defoliating', 'defoliate'], + ['moulting', 'moult'], + ['starving', 'starve'], + ['infesting', 'infest'], + ['liming', 'lime'], + ['hollowing', 'hollow'], + ['mounding', 'mound'], + ['sweating', 'sweat'], + ['drooping', 'droop'], + ['wrinkling', 'wrinkle'], + ['spoiling', 'spoil'], + ['hoeing', 'hoe'], + ['replanting', 'replant'], + ['vectoring', 'vector'], + ['understating', 'understate'], + ['interceding', 'intercede'], + ['rivaling', 'rival'], + ['sparkling', 'sparkle'], + ['oiling', 'oil'], + ['fractionating', 'fractionate'], + ['overestimating', 'overestimate'], + ['flexing', 'flex'], + ['reverting', 'revert'], + ['diking', 'dike'], + ['negating', 'negate'], + ['overlaying', 'overlay'], + ['grassing', 'grass'], + ['dehorning', 'dehorn'], + ['slumping', 'slump'], + ['poisoning', 'poison'], + ['heeling', 'heel'], + ['deflecting', 'deflect'], + ['overdosing', 'overdose'], + ['thrusting', 'thrust'], + ['stumbling', 'stumble'], + ['poaching', 'poach'], + ['interchanging', 'interchange'], + ['portioning', 'portion'], + ['exaggerating', 'exaggerate'], + ['litigating', 'litigate'], + ['mobilising', 'mobilise'], + ['levying', 'levy'], + ['overfeeding', 'overfeed'], + ['coexisting', 'coexist'], + ['tethering', 'tether'], + ['allotting', 'allot'], + ['adjoining', 'adjoin'], + ['inclining', 'incline'], + ['panting', 'pant'], + ['impending', 'impend'], + ['brewing', 'brew'], + ['scavenging', 'scavenge'], + ['trumpeting', 'trumpet'], + ['outweighing', 'outweigh'], + ['intertwining', 'intertwine'], + ['toting', 'tote'], + ['redrawing', 'redraw'], + ['disenfranchising', 'disenfranchise'], + ['supposing', 'suppose'], + ['traversing', 'traverse'], + ['overhauling', 'overhaul'], + ['repurchasing', 'repurchase'], + ['crowning', 'crown'], + ['disdaining', 'disdain'], + ['proselytizing', 'proselytize'], + ['tainting', 'taint'], + ['regressing', 'regress'], + ['misreading', 'misread'], + ['scrapping', 'scrap'], + ['tiering', 'tier'], + ['uplifting', 'uplift'], + ['troubling', 'trouble'], + ['pausing', 'pause'], + ['clashing', 'clash'], + ['piecing', 'piece'], + ['disheartening', 'dishearten'], + ['likening', 'liken'], + ['transposing', 'transpose'], + ['internalising', 'internalise'], + ['decentralising', 'decentralise'], + ['conversing', 'converse'], + ['deducing', 'deduce'], + ['chaperoning', 'chaperon'], + ['memorizing', 'memorize'], + ['begging', 'beg'], + ['restarting', 'restart'], + ['apologizing', 'apologize'], + ['correlating', 'correlate'], + ['abstaining', 'abstain'], + ['bureaucratizing', 'bureaucratize'], + ['plateauing', 'plateaue'], + ['consecrating', 'consecrate'], + ['reinvigorating', 'reinvigorate'], + ['enslaving', 'enslave'], + ['appeasing', 'appease'], + ['constricting', 'constrict'], + ['domesticating', 'domesticate'], + ['multitasking', 'multitask'], + ['remodeling', 'remodel'], + ['touting', 'tout'], + ['latching', 'latch'], + ['cannibalizing', 'cannibalize'], + ['numbing', 'numb'], + ['begrudging', 'begrudge'], + ['squandering', 'squander'], + ['nonthreatening', 'nonthreaten'], + ['insinuating', 'insinuate'], + ['couching', 'couch'], + ['exacting', 'exact'], + ['recapitulating', 'recapitulate'], + ['convoluting', 'convolute'], + ['centralising', 'centralise'], + ['amassing', 'amass'], + ['affiliating', 'affiliate'], + ['disclaiming', 'disclaim'], + ['ascribing', 'ascribe'], + ['tolerating', 'tolerate'], + ['amortizing', 'amortize'], + ['skimming', 'skim'], + ['renouncing', 'renounce'], + ['comporting', 'comport'], + ['muddling', 'muddle'], + ['usurping', 'usurp'], + ['fractioning', 'fraction'], + ['juxtaposing', 'juxtapose'], + ['ripping', 'rip'], + ['unscrambling', 'unscramble'], + ['descrambling', 'descramble'], + ['misappropriating', 'misappropriate'], + ['scaffolding', 'scaffold'], + ['jeopardising', 'jeopardise'], + ['stationing', 'station'], + ['encumbering', 'encumber'], + ['roping', 'rope'], + ['reheating', 'reheat'], + ['underselling', 'undersell'], + ['overtaking', 'overtake'], + ['initializing', 'initialize'], + ['perusing', 'peruse'], + ['befriending', 'befriend'], + ['cramming', 'cram'], + ['intriguing', 'intrigue'], + ['personalizing', 'personalize'], + ['loaning', 'loan'], + ['overloading', 'overload'], + ['flanking', 'flank'], + ['auditioning', 'audition'], + ['rebroadcasting', 'rebroadcast'], + ['parceling', 'parcel'], + ['gentrifying', 'gentrify'], + ['absolving', 'absolve'], + ['pillaging', 'pillage'], + ['bankrupting', 'bankrupt'], + ['digitalizing', 'digitalize'], + ['decreeing', 'decree'], + ['teething', 'teethe'], + ['centring', 'centre'], + ['instating', 'instate'], + ['righting', 'right'], + ['taunting', 'taunt'], + ['caucusing', 'caucus'], + ['crashing', 'crash'], + ['pondering', 'ponder'], + ['flaunting', 'flaunt'], + ['conscripting', 'conscript'], + ['shouting', 'shout'], + ['sobbing', 'sob'], + ['fraying', 'fray'], + ['disentitling', 'disentitle'], + ['convicting', 'convict'], + ['bequeathing', 'bequeath'], + ['enumerating', 'enumerate'], + ['quashing', 'quash'], + ['mouthing', 'mouth'], + ['abducting', 'abduct'], + ['federating', 'federate'], + ['remanding', 'remand'], + ['incarcerating', 'incarcerate'], + ['hazing', 'haze'], + ['kissing', 'kiss'], + ['perpetrating', 'perpetrate'], + ['disarming', 'disarm'], + ['bulging', 'bulge'], + ['dovetailing', 'dovetail'], + ['bicycling', 'bicycle'], + ['anesthetizing', 'anesthetize'], + ['menacing', 'menace'], + ['scapegoating', 'scapegoate'], + ['acquitting', 'acquit'], + ['seasoning', 'season'], + ['pivoting', 'pivot'], + ['retracting', 'retract'], + ['gunning', 'gun'], + ['peening', 'peen'], + ['flocculating', 'flocculate'], + ['cleansing', 'cleanse'], + ['lacing', 'lace'], + ['hemstitching', 'hemstitch'], + ['fulling', 'full'], + ['napping', 'nap'], + ['cubing', 'cube'], + ['decontaminating', 'decontaminate'], + ['dehumanising', 'dehumanise'], + ['whitening', 'whiten'], + ['superimposing', 'superimpose'], + ['needling', 'needle'], + ['recapping', 'recap'], + ['matting', 'mat'], + ['hewing', 'hew'], + ['tufting', 'tuft'], + ['wringing', 'wring'], + ['tinning', 'tin'], + ['wiring', 'wire'], + ['bushing', 'bush'], + ['granulating', 'granulate'], + ['sieving', 'sieve'], + ['debonding', 'debond'], + ['splicing', 'splice'], + ['beeping', 'beep'], + ['underreporting', 'underreport'], + ['booming', 'boom'], + ['armouring', 'armour'], + ['reaming', 'ream'], + ['chamfering', 'chamfer'], + ['superheating', 'superheat'], + ['coiling', 'coil'], + ['flanging', 'flange'], + ['destining', 'destine'], + ['demineralizing', 'demineralize'], + ['laboring', 'labor'], + ['coalescing', 'coalesce'], + ['wheezing', 'wheeze'], + ['coaxing', 'coax'], + ['tapering', 'taper'], + ['fooling', 'fool'], + ['quaking', 'quak'], + ['buckling', 'buckle'], + ['characterising', 'characterise'], + ['greying', 'grey'], + ['crippling', 'cripple'], + ['siphoning', 'siphon'], + ['debilitating', 'debilitate'], + ['lauding', 'laud'], + ['perturbing', 'perturb'], + ['unstinting', 'unstint'], + ['desensitizing', 'desensitize'], + ['inoculating', 'inoculate'], + ['alarming', 'alarm'], + ['depolarizing', 'depolarize'], + ['crying', 'cry'], + ['aching', 'ache'], + ['glaring', 'glare'], + ['stunning', 'stun'], + ['blitzing', 'blitz'], + ['bossing', 'boss'], + ['fuzzing', 'fuzz'], + ['gassing', 'gas'], + ['glossing', 'gloss'], + ['messing', 'mess'], + ['smelling', 'smell'], + ['yelling', 'yell'], + ['peacemaking', 'peacemake'], + ['fundraising', 'fundraise'], + ['matchmaking', 'matchmake'], + ['kayaking', 'kayak'], + + // ["awakening", "awaken"], + ["baiting", "bait"], + ["binning", "bin"], + ["bitting", "bite"], + ["blotting", "blot"], + ["canvassing", "canvass"], + ["combatting", "combat"], + ["compressing", "compress"], + ["crowning", "crown"], + ["customing", "custom"], + ["dimming", "dim"], + // ["cross-checking", "cross-check"], + // ["double-checking", "double-check"], + ["embedding", "embed"], + ["encompassing", "encompass"], + ["enlivening", "enliven"], + ["enrolling", "enrol"], + ["equalling", "equal"], + ["expressing", "express"], + ["fathoming", "fathom"], + // ["fine-tuning", "fine-tune"], + ["fretting", "fret"], + ["fulfilling", "fulfil"], + ["gossiping", "gossip"], + ["hastening", "hasten"], + ["hinging", "hinge"], + ["hopping", "hop"], + ["inputting", "input"], + ["instilling", "instil"], + // ["kick-starting", "kick-start"], + ["massing", "mass"], + ["mimicking", "mimic"], + ["mopping", "mop"], + ["nodding", "nod"], + ["outputting", "output"], + ["owning", "own"], + ["panning", "pan"], + ["rapping", "rap"], + ["rebelling", "rebel"], + ["refiting", "refit"], + ["reining", "rein"], + ["remodelling", "remodel"], + ["repenting", "repent"], + ["ridding", "rid"], + ["ruining", "ruin"], + // ["self-destructing", "self-destruct"], + ["shielding", "shield"], + ["signalling", "signal"], + ["sinning", "sin"], + ["slimming", "slim"], + ["subpoenaing", "subpoena"], + ["suiting", "suit"], + ["tilting", "tilt"], + ["trespassing", "trespass"], + ["withholding", "withhold"], + ["witnessing", "witness"], + + + // ['', ''], +] \ No newline at end of file diff --git a/data/pairs/Participle.js b/data/pairs/Participle.js new file mode 100644 index 0000000..9ea7195 --- /dev/null +++ b/data/pairs/Participle.js @@ -0,0 +1,81 @@ +export default [ + ['arisen', 'arise'], + ['awoken', 'awake'], + ['beaten', 'beat'], + ['been', 'be'], + ['begun', 'begin'], + ['become', 'become'], + ['bitten', 'bite'], + ['blown', 'blow'], + ['broken', 'break'], + ['built', 'build'], + ['chosen', 'choose'], + ['clung', 'cling'], + ['come', 'come'], + ['done', 'do'], + ['dove', 'dive'], + ['drawn', 'draw'], + ['dreamt', 'dream'], + ['driven', 'drive'], + ['drunk', 'drink'], + ['eaten', 'eat'], + ['fallen', 'fall'], + ['flown', 'fly'], + ['forbidden', 'forbid'], + ['forgiven', 'forgive'], + ['forgotten', 'forget'], + ['forsaken', 'forsake'], + ['forseen', 'forsee'], + ['frozen', 'freeze'], + ['given', 'give'], + ['gone', 'go'], + ['gotten', 'get'], + ['grown', 'grow'], + ['hasten', 'haste'], + ['hidden', 'hide'], + ['known', 'know'], + ['outdone', 'outdo'], + ['outgrown', 'outgrow'], + ['overdone', 'overdo'], + ['overseen', 'oversee'], + ['overtaken', 'overtake'], + ['overthrown', 'overthrow'], + ['proven', 'prove'], + ['rewritten', 'rewrite'], + ['ridden', 'ride'], + ['risen', 'rise'], + ['rung', 'ring'], + ['seen', 'see'], + ['sewn', 'sew'], + ['shrunk', 'shrink'], + ['shaken', 'shake'], + ['shone', 'shine'], + ['shown', 'show'], + ['slain', 'slay'], + ['sought', 'seek'], + ['sown', 'sow'], + ['spilt', 'spill'], + ['spoken', 'speak'], + ['stolen', 'steal'], + ['strewn', 'strew'], + ['run', 'run'], + ['sung', 'sing'], + ['sunk', 'sink'], + ['sworn', 'swear'], + ['swum', 'swim'], + ['taken', 'take'], + ['thrown', 'throw'], + ['torn', 'tear'], + ['undergone', 'undergo'], + ['undone', 'undo'], + ['uprisen', 'uprise'], + ['woken', 'wake'], + ['withdrawn', 'withdraw'], + ['woken', 'wake'], + ['worn', 'wear'], + ['woven', 'weave'], + ['written', 'write'], + ['wrung', 'wring'], + ['waken', 'wake'], + +] \ No newline at end of file diff --git a/data/pairs/PastTense.js b/data/pairs/PastTense.js new file mode 100644 index 0000000..bbbfbdf --- /dev/null +++ b/data/pairs/PastTense.js @@ -0,0 +1,2227 @@ +export default [ + ['abandoned', 'abandon'], + ['abated', 'abate'], + ['abducted', 'abduct'], + ['abolished', 'abolish'], + ['abraded', 'abrade'], + ['abridged', 'abridge'], + ['absolved', 'absolve'], + ['absorbed', 'absorb'], + ['abstained', 'abstain'], + ['abused', 'abuse'], + ['acceded', 'accede'], + ['accelerated', 'accelerate'], + ['accepted', 'accept'], + ['accessed', 'access'], + ['accommodated', 'accommodate'], + ['accompanied', 'accompany'], + ['accomplished', 'accomplish'], + ['accorded', 'accord'], + ['accounted', 'account'], + ['accredited', 'accredit'], + ['accumulated', 'accumulate'], + ['accused', 'accuse'], + ['ached', 'ache'], + ['achieved', 'achieve'], + ['acknowledged', 'acknowledge'], + ['acquired', 'acquire'], + ['acquitted', 'acquit'], + ['acted', 'act'], + ['activated', 'activate'], + ['adapted', 'adapt'], + ['added', 'add'], + ['addressed', 'address'], + ['adduced', 'adduce'], + ['adhered', 'adhere'], + ['adjoined', 'adjoin'], + ['adjourned', 'adjourn'], + ['adjudicated', 'adjudicate'], + ['adjusted', 'adjust'], + ['administered', 'administer'], + ['admired', 'admire'], + ['admitted', 'admit'], + ['adopted', 'adopt'], + ['advanced', 'advance'], + ['advantaged', 'advantage'], + ['advertised', 'advertise'], + ['advised', 'advise'], + ['advocated', 'advocate'], + ['aerated', 'aerate'], + ['affected', 'affect'], + ['affiliated', 'affiliate'], + ['affirmed', 'affirm'], + ['affixed', 'affix'], + ['afflicted', 'afflict'], + ['afforded', 'afford'], + ['aged', 'age'], + ['agglomerated', 'agglomerate'], + ['aggravated', 'aggravate'], + ['aggregated', 'aggregate'], + ['aggrieved', 'aggrieve'], + ['agreed', 'agree'], + ['aided', 'aid'], + ['aimed', 'aim'], + ['aired', 'air'], + ['alerted', 'alert'], + ['aligned', 'align'], + ['alleged', 'allege'], + ['allied', 'ally'], + ['allocated', 'allocate'], + ['alloted', 'allote'], + ['allotted', 'allot'], + ['allowed', 'allow'], + ['alloyed', 'alloy'], + ['alluded', 'allude'], + ['altered', 'alter'], + ['amalgamated', 'amalgamate'], + ['amassed', 'amass'], + ['amended', 'amend'], + ['amounted', 'amount'], + ['analogized', 'analogize'], + ['analysed', 'analyse'], + ['analyzed', 'analyze'], + ['anchored', 'anchor'], + ['annexed', 'annex'], + ['annotated', 'annotate'], + ['announced', 'announce'], + ['annulled', 'annul'], + ['answered', 'answer'], + ['anticipated', 'anticipate'], + ['apologized', 'apologize'], + ['appealed', 'appeal'], + ['appeared', 'appear'], + ['appeased', 'appease'], + ['appended', 'append'], + ['applauded', 'applaud'], + ['applied', 'apply'], + ['appointed', 'appoint'], + ['apportioned', 'apportion'], + ['appraised', 'appraise'], + ['appreciated', 'appreciate'], + ['apprised', 'apprise'], + ['approached', 'approach'], + ['appropriated', 'appropriate'], + ['approved', 'approve'], + ['approximated', 'approximate'], + ['argued', 'argue'], + ['arose', 'arise'], + ['aroused', 'arouse'], + ['arranged', 'arrange'], + ['arrested', 'arrest'], + ['arrived', 'arrive'], + ['articulated', 'articulate'], + ['ascended', 'ascend'], + ['ascertained', 'ascertain'], + ['asked', 'ask'], + ['assailed', 'assail'], + ['assaulted', 'assault'], + ['assembled', 'assemble'], + ['assented', 'assent'], + ['asserted', 'assert'], + ['assessed', 'assess'], + ['assigned', 'assign'], + ['assimilated', 'assimilate'], + ['assisted', 'assist'], + ['associated', 'associate'], + ['assumed', 'assume'], + ['assured', 'assure'], + ['ate', 'eat'], + ['attached', 'attach'], + ['attacked', 'attack'], + ['attained', 'attain'], + ['attempted', 'attempt'], + ['attended', 'attend'], + ['attested', 'attest'], + ['attracted', 'attract'], + ['attributed', 'attribute'], + ['attuned', 'attune'], + ['auctioned', 'auction'], + ['audited', 'audit'], + ['augmented', 'augment'], + ['authenticated', 'authenticate'], + ['authored', 'authore'], + ['authorised', 'authorise'], + ['authorized', 'authorize'], + ['autolyzed', 'autolyze'], + ['availed', 'avail'], + ['averaged', 'average'], + ['avoided', 'avoid'], + ['awaited', 'await'], + ['awakened', 'awaken'], + ['awarded', 'award'], + ['awoke', 'awake'], + ['backed', 'back'], + ['bagged', 'bag'], + ['baked', 'bake'], + ['balanced', 'balance'], + ['baled', 'bale'], + ['banded', 'band'], + ['banned', 'ban'], + ['barred', 'bar'], + ['based', 'base'], + ['basted', 'baste'], + ['battled', 'battle'], + ['beat', 'beat'], + ['became', 'become'], + ['bedecked', 'bedeck'], + ['been', 'be'], + ['began', 'begin'], + ['beguiled', 'beguile'], + ['believed', 'believe'], + ['belonged', 'belong'], + ['benefited', 'benefit'], + ['bent', 'bend'], + ['bestowed', 'bestow'], + ['bet', 'bet'], + ['bettered', 'better'], + ['biased', 'bias'], + ['bid', 'bid'], + ['biked', 'bike'], + ['billed', 'bill'], + ['bit', 'bite'], + ['blamed', 'blame'], + ['blasted', 'blast'], + ['bleached', 'bleach'], + ['bled', 'bleed'], + ['blended', 'blend'], + ['blew', 'blow'], + ['blighted', 'blight'], + ['blitzed', 'blitz'], + ['bloated', 'bloat'], + ['blocked', 'block'], + ['blurred', 'blur'], + ['blushed', 'blush'], + ['boarded', 'board'], + ['boasted', 'boast'], + ['bodied', 'body'], + ['boiled', 'boil'], + ['bonded', 'bond'], + ['boned', 'bone'], + ['booked', 'book'], + ['boomed', 'boom'], + ['boosted', 'boost'], + ['bore', 'bear'], + ['bored', 'bore'], + ['borrowed', 'borrow'], + ['bossed', 'boss'], + ['bothered', 'bother'], + ['bought', 'buy'], + ['bounced', 'bounce'], + ['bound', 'bind'], + ['boxed', 'box'], + ['boycotted', 'boycott'], + ['braised', 'braise'], + ['branded', 'brand'], + ['braved', 'brave'], + ['brazed', 'braze'], + ['breached', 'breach'], + ['breaded', 'bread'], + ['breathed', 'breathe'], + ['bred', 'breed'], + ['brewed', 'brew'], + ['bridged', 'bridge'], + ['briefed', 'brief'], + ['brightened', 'brighten'], + ['broadcast', 'broadcast'], + ['broadened', 'broaden'], + ['broke', 'break'], + ['brokered', 'broker'], + ['brought', 'bring'], + ['browsed', 'browse'], + ['built', 'build'], + ['burgeoned', 'burgeon'], + ['burned', 'burn'], + ['burst', 'burst'], + ['buzzed', 'buzz'], + ['bypassed', 'bypass'], + ['cabled', 'cable'], + ['caged', 'cage'], + ['calcined', 'calcine'], + ['calculated', 'calculate'], + ['calendered', 'calender'], + ['calibrated', 'calibrate'], + ['called', 'call'], + ['came', 'come'], + ['campaigned', 'campaign'], + ['cancelled', 'cancel'], + ['caned', 'cane'], + ['canned', 'can'], + ['canvassed', 'canvass'], + ['capitalized', 'capitalize'], + ['capped', 'cap'], + ['captioned', 'caption'], + ['captivated', 'captivate'], + ['captured', 'capture'], + ['carded', 'card'], + ['cared', 'care'], + ['carried', 'carry'], + ['carved', 'carve'], + ['cast', 'cast'], + ['categorized', 'categorize'], + ['catered', 'cater'], + ['caught', 'catch'], + ['caused', 'cause'], + ['cautioned', 'caution'], + ['ceased', 'cease'], + ['ceded', 'cede'], + ['celebrated', 'celebrate'], + ['centered', 'center'], + ['centralized', 'centralize'], + ['centred', 'centre'], + ['certificated', 'certificate'], + ['certified', 'certify'], + ['chained', 'chain'], + ['chaired', 'chair'], + ['challenged', 'challenge'], + ['championed', 'champion'], + ['changed', 'change'], + ['channelled', 'channel'], + ['characterized', 'characterize'], + ['charged', 'charge'], + ['charmed', 'charm'], + ['chartered', 'charter'], + ['chatted', 'chat'], + ['chauffeured', 'chauffeur'], + ['cheated', 'cheat'], + ['checked', 'check'], + ['cheered', 'cheer'], + ['chilled', 'chill'], + ['choked', 'choke'], + ['chopped', 'chop'], + ['chose', 'choose'], + ['christened', 'christen'], + ['circled', 'circle'], + ['circulated', 'circulate'], + ['circumvented', 'circumvent'], + ['cited', 'cite'], + ['claimed', 'claim'], + ['clarified', 'clarify'], + ['classified', 'classify'], + ['cleaned', 'clean'], + ['cleared', 'clear'], + ['clicked', 'click'], + ['climbed', 'climb'], + ['clinched', 'clinch'], + ['cloned', 'clon'], + ['closed', 'close'], + ['clung', 'cling'], + ['clustered', 'cluster'], + ['coached', 'coach'], + ['coated', 'coat'], + ['coded', 'code'], + ['cohabited', 'cohabit'], + ['coiled', 'coil'], + ['coincided', 'coincide'], + ['coined', 'coin'], + ['collaborated', 'collaborate'], + ['collapsed', 'collapse'], + ['collected', 'collect'], + ['collided', 'collide'], + ['colonized', 'colonize'], + ['colored', 'color'], + ['coloured', 'colour'], + ['combed', 'comb'], + ['combined', 'combine'], + ['commanded', 'command'], + ['commemorated', 'commemorate'], + ['commenced', 'commence'], + ['commended', 'commend'], + ['commented', 'comment'], + ['commercialized', 'commercialize'], + ['commissioned', 'commission'], + ['committed', 'commit'], + ['communicated', 'communicate'], + ['compared', 'compare'], + ['compelled', 'compel'], + ['compensated', 'compensate'], + ['competed', 'compete'], + ['compiled', 'compile'], + ['complained', 'complain'], + ['complemented', 'complement'], + ['completed', 'complete'], + ['complied', 'comply'], + ['complimented', 'compliment'], + ['composed', 'compose'], + ['composted', 'compost'], + ['compounded', 'compound'], + ['compressed', 'compress'], + ['comprised', 'comprise'], + ['compromised', 'compromise'], + ['computed', 'compute'], + ['computerized', 'computerize'], + ['concealed', 'conceal'], + ['conceded', 'concede'], + ['conceived', 'conceive'], + ['concentrated', 'concentrate'], + ['conceptualized', 'conceptualize'], + ['concerned', 'concern'], + ['concluded', 'conclude'], + ['concurred', 'concur'], + ['condemned', 'condemn'], + ['conducted', 'conduct'], + ['conferred', 'confer'], + ['confessed', 'confess'], + ['confided', 'confide'], + ['configured', 'configure'], + ['confined', 'confine'], + ['confirmed', 'confirm'], + ['confiscated', 'confiscate'], + ['confounded', 'confound'], + ['confronted', 'confront'], + ['congratulated', 'congratulate'], + ['conjectured', 'conjecture'], + ['conjugated', 'conjugate'], + ['conjured', 'conjure'], + ['connected', 'connect'], + ['conquered', 'conquer'], + ['consented', 'consent'], + ['conserved', 'conserve'], + ['considered', 'consider'], + ['consigned', 'consign'], + ['consisted', 'consist'], + ['consolidated', 'consolidate'], + ['constituted', 'constitute'], + ['constructed', 'construct'], + ['consulted', 'consult'], + ['consumed', 'consume'], + ['contacted', 'contact'], + ['contained', 'contain'], + ['contemplated', 'contemplate'], + ['contended', 'contend'], + ['contested', 'contest'], + ['continued', 'continue'], + ['contracted', 'contract'], + ['contradicted', 'contradict'], + ['contravened', 'contravene'], + ['contributed', 'contribute'], + ['controlled', 'control'], + ['convened', 'convene'], + ['converged', 'converge'], + ['converted', 'convert'], + ['conveyed', 'convey'], + ['convicted', 'convict'], + ['convinced', 'convince'], + ['convoluted', 'convolute'], + ['cooked', 'cook'], + ['cooled', 'cool'], + ['cooperated', 'cooperate'], + ['coordinated', 'coordinate'], + ['copied', 'copy'], + ['coproduced', 'coproduce'], + ['copyrighted', 'copyright'], + ['cored', 'core'], + ['corrected', 'correct'], + ['correlated', 'correlate'], + ['corresponded', 'correspond'], + ['corroborated', 'corroborate'], + ['corrugated', 'corrugate'], + ['cosponsored', 'cosponsor'], + ['cost', 'cost'], + ['couched', 'couch'], + ['counselled', 'counsel'], + ['counted', 'count'], + ['countered', 'counter'], + ['countersigned', 'countersign'], + ['coupled', 'couple'], + ['covered', 'cover'], + ['cracked', 'crack'], + ['crafted', 'craft'], + ['crashed', 'crash'], + ['created', 'create'], + ['credited', 'credit'], + ['crept', 'creep'], + ['crimped', 'crimp'], + ['criticized', 'criticize'], + ['cropped', 'crop'], + ['crossed', 'cross'], + ['crowded', 'crowd'], + ['crystallized', 'crystallize'], + ['cubed', 'cube'], + ['culminated', 'culminate'], + ['cultivated', 'cultivate'], + ['cultured', 'culture'], + ['curated', 'curate'], + ['cured', 'cure'], + ['curled', 'curl'], + ['curtailed', 'curtail'], + ['curved', 'curve'], + ['customized', 'customize'], + ['cut', 'cut'], + ['damaged', 'damage'], + ['dampened', 'dampen'], + ['danced', 'dance'], + ['dared', 'dare'], + ['dated', 'date'], + ['dawned', 'dawn'], + ['dealt', 'deal'], + ['debated', 'debate'], + ['debited', 'debit'], + ['debuted', 'debut'], + ['decaffeinated', 'decaffeinate'], + ['deceased', 'decease'], + ['decelerated', 'decelerate'], + ['decentralized', 'decentralize'], + ['decided', 'decide'], + ['declared', 'declare'], + ['declined', 'decline'], + ['decomposed', 'decompose'], + ['decorated', 'decorate'], + ['decreased', 'decrease'], + ['decried', 'decry'], + ['dedicated', 'dedicate'], + ['deducted', 'deduct'], + ['deemed', 'deem'], + ['deepened', 'deepen'], + ['defaulted', 'default'], + ['defeated', 'defeat'], + ['defended', 'defend'], + ['deferred', 'defer'], + ['defined', 'define'], + ['deflated', 'deflate'], + ['deflected', 'deflect'], + ['degraded', 'degrade'], + ['dehydrated', 'dehydrate'], + ['delayed', 'delay'], + ['delegated', 'delegate'], + ['deliberated', 'deliberate'], + ['delighted', 'delight'], + ['delineated', 'delineate'], + ['delivered', 'deliver'], + ['demanded', 'demand'], + ['demonstrated', 'demonstrate'], + ['denatured', 'denature'], + ['denied', 'deny'], + ['denoted', 'denote'], + ['denounced', 'denounce'], + ['departed', 'depart'], + ['depended', 'depend'], + ['depicted', 'depict'], + ['depleted', 'deplete'], + ['deplored', 'deplore'], + ['deployed', 'deploy'], + ['deported', 'deport'], + ['deposited', 'deposit'], + ['depreciated', 'depreciate'], + ['depressed', 'depress'], + ['deprived', 'deprive'], + ['deregulated', 'deregulate'], + ['derived', 'derive'], + ['descended', 'descend'], + ['described', 'describe'], + ['deserved', 'deserve'], + ['desiccated', 'desiccate'], + ['designated', 'designate'], + ['designed', 'design'], + ['desired', 'desire'], + ['destined', 'destine'], + ['destroyed', 'destroy'], + ['detailed', 'detail'], + ['detained', 'detain'], + ['detected', 'detect'], + ['determined', 'determine'], + ['deterred', 'deter'], + ['detracted', 'detract'], + ['devalued', 'devalue'], + ['devastated', 'devastate'], + ['developed', 'develop'], + ['devised', 'devise'], + ['devolved', 'devolve'], + ['devoted', 'devote'], + ['diagnosed', 'diagnose'], + ['diced', 'dice'], + ['dictated', 'dictate'], + ['did', 'do'], + ['died', 'die'], + ['differed', 'differ'], + ['differentiated', 'differentiate'], + ['digitized', 'digitize'], + ['dined', 'dine'], + ['dipped', 'dip'], + ['directed', 'direct'], + ['disabled', 'disable'], + ['disadvantaged', 'disadvantage'], + ['disagreed', 'disagree'], + ['disallowed', 'disallow'], + ['disappeared', 'disappear'], + ['disbursed', 'disburse'], + ['discharged', 'discharge'], + ['disclosed', 'disclose'], + ['discoloured', 'discolour'], + ['discontinued', 'discontinue'], + ['discounted', 'discount'], + ['discouraged', 'discourage'], + ['discovered', 'discover'], + ['discriminated', 'discriminate'], + ['discussed', 'discuss'], + ['disembarked', 'disembark'], + ['disenfranchised', 'disenfranchise'], + ['disfavoured', 'disfavour'], + ['disinfected', 'disinfect'], + ['disliked', 'dislike'], + ['dismantled', 'dismantle'], + ['dismissed', 'dismiss'], + ['disordered', 'disorder'], + ['disorganized', 'disorganize'], + ['dispelled', 'dispel'], + ['dispensed', 'dispense'], + ['dispersed', 'disperse'], + ['displaced', 'displace'], + ['displayed', 'display'], + ['disposed', 'dispose'], + ['disproved', 'disprove'], + ['disputed', 'dispute'], + ['disqualified', 'disqualify'], + ['disregarded', 'disregard'], + ['disrupted', 'disrupt'], + ['dissatisfied', 'dissatisfy'], + ['dissected', 'dissect'], + ['disseminated', 'disseminate'], + ['dissolved', 'dissolve'], + ['dissuaded', 'dissuade'], + ['distanced', 'distance'], + ['distinguished', 'distinguish'], + ['distorted', 'distort'], + ['distributed', 'distribute'], + ['disturbed', 'disturb'], + ['diversified', 'diversify'], + ['diverted', 'divert'], + ['divested', 'divest'], + ['divided', 'divide'], + ['documented', 'document'], + ['domiciled', 'domicile'], + ['dominated', 'dominate'], + ['donated', 'donate'], + ['donned', 'don'], + ['doubled', 'double'], + ['doubted', 'doubt'], + ['dove', 'dive'], + ['downed', 'down'], + ['downgraded', 'downgrade'], + ['downsized', 'downsize'], + ['drafted', 'draft'], + ['dragged', 'drag'], + ['drank', 'drink'], + ['dreamed', 'dream'], + ['dressed', 'dress'], + ['drew', 'draw'], + ['dried', 'dry'], + ['drifted', 'drift'], + ['drilled', 'drill'], + ['dropped', 'drop'], + ['drove', 'drive'], + ['drowned', 'drown'], + ['dubbed', 'dub'], + ['dug', 'dig'], + ['dumped', 'dump'], + ['duplicated', 'duplicate'], + ['dusted', 'dust'], + ['dwindled', 'dwindle'], + ['dyed', 'dye'], + ['earmarked', 'earmark'], + ['earned', 'earn'], + ['eased', 'ease'], + ['echoed', 'echo'], + ['edged', 'edge'], + ['edited', 'edit'], + ['educated', 'educate'], + ['effected', 'effect'], + ['egged', 'egg'], + ['elaborated', 'elaborate'], + ['elected', 'elect'], + ['elevated', 'elevate'], + ['elicited', 'elicit'], + ['eliminated', 'eliminate'], + ['eluded', 'elude'], + ['embarked', 'embark'], + ['embedded', 'embed'], + ['embodied', 'embody'], + ['embossed', 'emboss'], + ['embraced', 'embrace'], + ['emerged', 'emerge'], + ['emigrated', 'emigrate'], + ['emitted', 'emit'], + ['empaneled', 'empanel'], + ['emphasised', 'emphasise'], + ['emphasized', 'emphasize'], + ['employed', 'employ'], + ['empowered', 'empower'], + ['enabled', 'enable'], + ['enacted', 'enact'], + ['enamelled', 'enamel'], + ['enclosed', 'enclose'], + ['encoded', 'encode'], + ['encompassed', 'encompass'], + ['encountered', 'encounter'], + ['encouraged', 'encourage'], + ['encroached', 'encroach'], + ['encrypted', 'encrypt'], + ['endangered', 'endanger'], + ['endeared', 'endear'], + ['endeavored', 'endeavor'], + ['endeavoured', 'endeavour'], + ['ended', 'end'], + ['endorsed', 'endorse'], + ['endowed', 'endow'], + ['endured', 'endure'], + ['enforced', 'enforce'], + ['engaged', 'engage'], + ['engendered', 'engender'], + ['enhanced', 'enhance'], + ['enjoyed', 'enjoy'], + ['enlarged', 'enlarge'], + ['enlisted', 'enlist'], + ['enriched', 'enrich'], + ['enrolled', 'enroll'], + ['enshrined', 'enshrine'], + ['ensued', 'ensue'], + ['ensured', 'ensure'], + ['entailed', 'entail'], + ['entered', 'enter'], + ['entertained', 'entertain'], + ['enthralled', 'enthrall'], + ['enticed', 'entice'], + ['entitled', 'entitle'], + ['entrenched', 'entrench'], + ['entrusted', 'entrust'], + ['entwined', 'entwine'], + ['enumerated', 'enumerate'], + ['enunciated', 'enunciate'], + ['enveloped', 'envelop'], + ['envisaged', 'envisage'], + ['envisioned', 'envision'], + ['equalized', 'equalize'], + ['equalled', 'equal'], + ['equated', 'equate'], + ['equipped', 'equip'], + ['erected', 'erect'], + ['eroded', 'erode'], + ['erred', 'err'], + ['erupted', 'erupt'], + ['escalated', 'escalate'], + ['escaped', 'escape'], + ['escorted', 'escort'], + ['espoused', 'espouse'], + ['established', 'establish'], + ['estimated', 'estimate'], + ['evaluated', 'evaluate'], + ['evidenced', 'evidence'], + ['eviscerated', 'eviscerate'], + ['evoked', 'evoke'], + ['evolved', 'evolve'], + ['exacerbated', 'exacerbate'], + ['examined', 'examine'], + ['exasperated', 'exasperate'], + ['excavated', 'excavate'], + ['exceeded', 'exceed'], + ['excepted', 'except'], + ['exchanged', 'exchange'], + ['excited', 'excite'], + ['excluded', 'exclude'], + ['excreted', 'excrete'], + ['executed', 'execute'], + ['exempted', 'exempt'], + ['exercised', 'exercise'], + ['exerted', 'exert'], + ['exhausted', 'exhaust'], + ['exhibited', 'exhibit'], + ['exhorted', 'exhort'], + ['exiled', 'exile'], + ['existed', 'exist'], + ['exited', 'exit'], + ['expanded', 'expand'], + ['expected', 'expect'], + ['expedited', 'expedite'], + ['expelled', 'expel'], + ['expended', 'expend'], + ['experienced', 'experience'], + ['experimented', 'experiment'], + ['expired', 'expire'], + ['explained', 'explain'], + ['exploded', 'explode'], + ['exploited', 'exploit'], + ['explored', 'explore'], + ['exported', 'export'], + ['exposed', 'expose'], + ['expounded', 'expound'], + ['expressed', 'express'], + ['expunged', 'expunge'], + ['extended', 'extend'], + ['extolled', 'extol'], + ['extracted', 'extract'], + ['extruded', 'extrude'], + ['eyed', 'eye'], + ['faced', 'face'], + ['faceted', 'facet'], + ['facilitated', 'facilitate'], + ['factored', 'factor'], + ['failed', 'fail'], + ['faked', 'fake'], + ['familiarized', 'familiarize'], + ['fared', 'fare'], + ['farmed', 'farm'], + ['fastened', 'fasten'], + ['favored', 'favor'], + ['favoured', 'favour'], + ['faxed', 'fax'], + ['feared', 'fear'], + ['featured', 'feature'], + ['fed', 'feed'], + ['federated', 'federate'], + ['feed', 'fee'], + ['fell', 'fall'], + ['felt', 'feel'], + ['fielded', 'field'], + ['figured', 'figure'], + ['filed', 'file'], + ['filled', 'fill'], + ['finalized', 'finalize'], + ['financed', 'finance'], + ['fined', 'fine'], + ['finished', 'finish'], + ['fired', 'fire'], + ['fished', 'fish'], + ['fit', 'fit'], + ['fixed', 'fix'], + ['flagged', 'flag'], + ['flaked', 'flake'], + ['flanged', 'flange'], + ['flattened', 'flatten'], + ['flavored', 'flavor'], + ['flavoured', 'flavour'], + ['fled', 'flee'], + ['flew', 'fly'], + ['floated', 'float'], + ['flooded', 'flood'], + ['flourished', 'flourish'], + ['flowed', 'flow'], + ['fluctuated', 'fluctuate'], + ['flung', 'fling'], + ['focused', 'focus'], + ['folded', 'fold'], + ['followed', 'follow'], + ['footed', 'foot'], + ['forbade', 'forbid'], + ['forbore', 'forbear'], + ['forced', 'force'], + ['forecasted', 'forecast'], + ['foresaw', 'foresee'], + ['forfeited', 'forfeit'], + ['forgave', 'forgive'], + ['forged', 'forge'], + ['forgot', 'forget'], + ['formalised', 'formalise'], + ['formalized', 'formalize'], + ['formatted', 'format'], + ['formed', 'form'], + ['formulated', 'formulate'], + ['forsaken', 'forsake'], + ['forwarded', 'forward'], + ['fostered', 'foster'], + ['fought', 'fight'], + ['fouled', 'foul'], + ['found', 'find'], + ['founded', 'found'], + ['fractionated', 'fractionate'], + ['framed', 'frame'], + ['freaked', 'freak'], + ['freed', 'free'], + ['froze', 'freeze'], + ['frustrated', 'frustrate'], + ['fuelled', 'fuel'], + ['fulfilled', 'fulfil'], + ['fulfilled', 'fulfill'], + ['functioned', 'function'], + ['funded', 'fund'], + ['funnelled', 'funnel'], + ['furnished', 'furnish'], + ['furthered', 'further'], + ['fuzzed', 'fuzz'], + ['gained', 'gain'], + ['galvanized', 'galvanize'], + ['gamed', 'game'], + ['garnered', 'garner'], + ['gassed', 'gas'], + ['gathered', 'gather'], + ['gave', 'give'], + ['gelled', 'gell'], + ['generalized', 'generalize'], + ['generated', 'generate'], + ['gifted', 'gift'], + ['glazed', 'glaze'], + ['gleaned', 'glean'], + ['glossed', 'gloss'], + ['got', 'get'], + ['governed', 'govern'], + ['grabbed', 'grab'], + ['graded', 'grade'], + ['graduated', 'graduate'], + ['granted', 'grant'], + ['granulated', 'granulate'], + ['grappled', 'grapple'], + ['grassed', 'grass'], + ['grated', 'grate'], + ['gravitated', 'gravitate'], + ['grazed', 'graze'], + ['greeted', 'greet'], + ['grew', 'grow'], + ['gripped', 'grip'], + ['grooved', 'groove'], + ['grossed', 'gross'], + ['ground', 'grind'], + ['grounded', 'ground'], + ['grouped', 'group'], + ['guaranteed', 'guarantee'], + ['guessed', 'guess'], + ['guided', 'guide'], + ['hacked', 'hack'], + ['had', 'have'], + ['hailed', 'hail'], + ['halogenated', 'halogenate'], + ['halted', 'halt'], + ['hampered', 'hamper'], + ['handed', 'hand'], + ['handled', 'handle'], + ['happened', 'happen'], + ['harmed', 'harm'], + ['harmonized', 'harmonize'], + ['harnessed', 'harness'], + ['harvested', 'harvest'], + ['hatched', 'hatch'], + ['hauled', 'haul'], + ['headed', 'head'], + ['heard', 'hear'], + ['hearted', 'heart'], + ['hedged', 'hedge'], + ['heightened', 'heighten'], + ['held', 'hold'], + ['helped', 'help'], + ['heralded', 'herald'], + ['hid', 'hide'], + ['highlighted', 'highlight'], + ['hiked', 'hike'], + ['hindered', 'hinder'], + ['hired', 'hire'], + ['hit', 'hit'], + ['homogenized', 'homogenize'], + ['honoured', 'honour'], + ['hooked', 'hook'], + ['hoped', 'hope'], + ['hosted', 'host'], + ['housed', 'house'], + ['hovered', 'hover'], + ['huddled', 'huddle'], + ['hung', 'hang'], + ['hurt', 'hurt'], + ['hydrogenated', 'hydrogenate'], + ['hypothesized', 'hypothesize'], + ['idealized', 'idealize'], + ['identified', 'identify'], + ['idled', 'idle'], + ['ignited', 'ignite'], + ['ignored', 'ignore'], + ['illuminated', 'illuminate'], + ['illustrated', 'illustrate'], + ['imagined', 'imagine'], + ['immersed', 'immerse'], + ['immigrated', 'immigrate'], + ['immunized', 'immunize'], + ['impacted', 'impact'], + ['impaired', 'impair'], + ['impaled', 'impale'], + ['imparted', 'impart'], + ['impeded', 'impede'], + ['implanted', 'implant'], + ['implemented', 'implement'], + ['implied', 'imply'], + ['imported', 'import'], + ['imposed', 'impose'], + ['impregnated', 'impregnate'], + ['impressed', 'impress'], + ['imprinted', 'imprint'], + ['improved', 'improve'], + ['improvised', 'improvise'], + ['inactivated', 'inactivate'], + ['inaugurated', 'inaugurate'], + ['incarcerated', 'incarcerate'], + ['incited', 'incite'], + ['inclined', 'incline'], + ['included', 'include'], + ['incorporated', 'incorporate'], + ['increased', 'increase'], + ['incurred', 'incur'], + ['indemnified', 'indemnify'], + ['indented', 'indent'], + ['indexed', 'index'], + ['indicated', 'indicate'], + ['indicted', 'indict'], + ['individualized', 'individualize'], + ['induced', 'induce'], + ['industrialized', 'industrialize'], + ['infected', 'infect'], + ['inferred', 'infer'], + ['infested', 'infest'], + ['influenced', 'influence'], + ['informed', 'inform'], + ['infringed', 'infringe'], + ['infused', 'infuse'], + ['ingested', 'ingest'], + ['inhabited', 'inhabit'], + ['inhaled', 'inhale'], + ['inherited', 'inherit'], + ['inhibited', 'inhibit'], + ['initialled', 'initial'], + ['initiated', 'initiate'], + ['injected', 'inject'], + ['injured', 'injure'], + ['inked', 'ink'], + ['innovated', 'innovate'], + ['inquired', 'inquire'], + ['inserted', 'insert'], + ['insisted', 'insist'], + ['inspected', 'inspect'], + ['inspired', 'inspire'], + ['installed', 'install'], + ['instigated', 'instigate'], + ['instilled', 'instill'], + ['instituted', 'institute'], + ['institutionalized', 'institutionalize'], + ['instructed', 'instruct'], + ['insulated', 'insulate'], + ['insured', 'insure'], + ['integrated', 'integrate'], + ['intended', 'intend'], + ['intensified', 'intensify'], + ['interacted', 'interact'], + ['intercepted', 'intercept'], + ['interested', 'interest'], + ['interfered', 'interfere'], + ['interlinked', 'interlink'], + ['internalized', 'internalize'], + ['internationalized', 'internationalize'], + ['interned', 'intern'], + ['interpreted', 'interpret'], + ['interrelated', 'interrelate'], + ['intersected', 'intersect'], + ['intertwined', 'intertwine'], + ['intervened', 'intervene'], + ['interviewed', 'interview'], + ['intoxicated', 'intoxicate'], + ['introduced', 'introduce'], + ['invaded', 'invade'], + ['invalidated', 'invalidate'], + ['invented', 'invent'], + ['inventoried', 'inventory'], + ['invested', 'invest'], + ['investigated', 'investigate'], + ['invited', 'invite'], + ['invoiced', 'invoice'], + ['invoked', 'invoke'], + ['involved', 'involve'], + ['irrigated', 'irrigate'], + ['isolated', 'isolate'], + ['issued', 'issue'], + ['italicized', 'italicize'], + ['itemized', 'itemize'], + ['jarred', 'jar'], + ['jeopardized', 'jeopardize'], + ['jogged', 'jog'], + ['joined', 'join'], + ['joked', 'joke'], + ['journeyed', 'journey'], + ['judged', 'judge'], + ['jumped', 'jump'], + ['justified', 'justify'], + ['kept', 'keep'], + ['kicked', 'kick'], + ['killed', 'kill'], + ['kindled', 'kindle'], + ['kissed', 'kiss'], + ['knelt', 'kneel'], + ['knew', 'know'], + ['knitted', 'knit'], + ['knocked', 'knock'], + ['knurled', 'knurl'], + ['labeled', 'label'], + ['lacked', 'lack'], + ['lacquered', 'lacquer'], + ['lagged', 'lag'], + ['laid', 'lay'], + ['lambasted', 'lambaste'], + ['lamented', 'lament'], + ['laminated', 'laminate'], + ['landed', 'land'], + ['lapsed', 'lapse'], + ['lasted', 'last'], + ['lauded', 'laud'], + ['laughed', 'laugh'], + ['launched', 'launch'], + ['layered', 'layer'], + ['leached', 'leach'], + ['leaked', 'leak'], + ['leapt', 'leap'], + ['learned', 'learn'], + ['leased', 'lease'], + ['lectured', 'lecture'], + ['led', 'lead'], + ['left', 'leave'], + ['legislated', 'legislate'], + ['legitimized', 'legitimize'], + ['lent', 'lend'], + ['lessened', 'lessen'], + ['let', 'let'], + ['leveled', 'level'], + ['levelled', 'level'], + ['levied', 'levy'], + ['liaised', 'liaise'], + ['liberalized', 'liberalize'], + ['licenced', 'licence'], + ['licensed', 'license'], + ['lied', 'lie'], + ['lifted', 'lift'], + ['liked', 'like'], + ['likened', 'liken'], + ['limited', 'limit'], + ['lined', 'line'], + ['linked', 'link'], + ['listed', 'list'], + ['listened', 'listen'], + ['lit', 'light'], + ['lived', 'live'], + ['loaded', 'load'], + ['loaned', 'loan'], + ['lobbied', 'lobby'], + ['localized', 'localize'], + ['located', 'locate'], + ['locked', 'lock'], + ['lodged', 'lodge'], + ['logged', 'log'], + ['looked', 'look'], + ['looped', 'loop'], + ['lost', 'lose'], + ['loved', 'love'], + ['lowered', 'lower'], + ['lubricated', 'lubricate'], + ['machined', 'machine'], + ['made', 'make'], + ['magnified', 'magnify'], + ['mailed', 'mail'], + ['maintained', 'maintain'], + ['malted', 'malt'], + ['managed', 'manage'], + ['mandated', 'mandate'], + ['manifested', 'manifest'], + ['manipulated', 'manipulate'], + ['manned', 'man'], + ['manoeuvred', 'manoeuvre'], + ['manufactured', 'manufacture'], + ['mapped', 'map'], + ['marginalized', 'marginalize'], + ['marked', 'mark'], + ['marketed', 'market'], + ['married', 'marry'], + ['masked', 'mask'], + ['mastered', 'master'], + ['matched', 'match'], + ['materialized', 'materialize'], + ['mattered', 'matter'], + ['matured', 'mature'], + ['maximized', 'maximize'], + ['meant', 'mean'], + ['measured', 'measure'], + ['mediated', 'mediate'], + ['melted', 'melt'], + ['mentioned', 'mention'], + ['mercerized', 'mercerize'], + ['merged', 'merge'], + ['messed', 'mess'], + ['met', 'meet'], + ['metallized', 'metallize'], + ['microfilmed', 'microfilm'], + ['migrated', 'migrate'], + ['mimicked', 'mimic'], + ['minced', 'mince'], + ['minded', 'mind'], + ['mined', 'mine'], + ['minimized', 'minimize'], + ['mirrored', 'mirror'], + ['misinterpreted', 'misinterpret'], + ['misrepresented', 'misrepresent'], + ['missed', 'miss'], + ['mistook', 'mistake'], + ['misused', 'misuse'], + ['mitigated', 'mitigate'], + ['mixed', 'mix'], + ['mobilized', 'mobilize'], + ['modeled', 'model'], + ['moderated', 'moderate'], + ['modernized', 'modernize'], + ['modified', 'modify'], + ['modulated', 'modulate'], + ['moistened', 'moisten'], + ['molded', 'mold'], + ['monitored', 'monitor'], + ['motivated', 'motivate'], + ['motorized', 'motorize'], + ['moulded', 'mould'], + ['mounted', 'mount'], + ['moved', 'move'], + ['mowed', 'mow'], + ['multiplied', 'multiply'], + ['named', 'name'], + ['napped', 'nap'], + ['narrated', 'narrate'], + ['narrowed', 'narrow'], + ['naturalized', 'naturalize'], + ['navigated', 'navigate'], + ['neared', 'near'], + ['necessitated', 'necessitate'], + ['needed', 'need'], + ['negotiated', 'negotiate'], + ['netted', 'net'], + ['networked', 'network'], + ['nicknamed', 'nickname'], + ['nominated', 'nominate'], + ['normalized', 'normalize'], + ['nosed', 'nose'], + ['notarized', 'notarize'], + ['notched', 'notch'], + ['noted', 'note'], + ['noticed', 'notice'], + ['notified', 'notify'], + ['nourished', 'nourish'], + ['numbered', 'number'], + ['nurtured', 'nurture'], + ['objected', 'object'], + ['obligated', 'obligate'], + ['obscured', 'obscure'], + ['observed', 'observe'], + ['obtained', 'obtain'], + ['occupied', 'occupy'], + ['occured', 'occure'], + ['occurred', 'occur'], + ['offended', 'offend'], + ['offered', 'offer'], + ['offset', 'offset'], + ['omitted', 'omit'], + ['oozed', 'ooze'], + ['opened', 'open'], + ['operated', 'operate'], + ['opined', 'opine'], + ['opposed', 'oppose'], + ['oppressed', 'oppress'], + ['opted', 'opt'], + ['optimized', 'optimize'], + ['ordered', 'order'], + ['organised', 'organise'], + ['organized', 'organize'], + ['orientated', 'orientate'], + ['oriented', 'orient'], + ['originated', 'originate'], + ['ousted', 'oust'], + ['outbid', 'outbid'], + ['outgrew', 'outgrow'], + ['outlawed', 'outlaw'], + ['outlined', 'outline'], + ['outnumbered', 'outnumber'], + ['outpaced', 'outpace'], + ['outperformed', 'outperform'], + ['outstripped', 'outstrip'], + ['outweighed', 'outweigh'], + ['overcame', 'overcome'], + ['overhauled', 'overhaul'], + ['overlapped', 'overlap'], + ['overlooked', 'overlook'], + ['overpaid', 'overpay'], + ['overruled', 'overrule'], + ['oversaw', 'oversee'], + ['overstated', 'overstate'], + ['overthrew', 'overthrow'], + ['overtook', 'overtake'], + ['overturned', 'overturn'], + ['overvalued', 'overvalue'], + ['overwhelmed', 'overwhelm'], + ['owed', 'owe'], + ['owned', 'own'], + ['oxygenated', 'oxygenate'], + ['packaged', 'package'], + ['packed', 'pack'], + ['padded', 'pad'], + ['paid', 'pay'], + ['painted', 'paint'], + ['paired', 'pair'], + ['panicked', 'panic'], + ['panned', 'pan'], + ['parachuted', 'parachute'], + ['paralleled', 'parallel'], + ['paraphrased', 'paraphrase'], + ['pardoned', 'pardon'], + ['parked', 'park'], + ['participated', 'participate'], + ['partnered', 'partner'], + ['partook', 'partake'], + ['passed', 'pass'], + ['patented', 'patent'], + ['patrolled', 'patrol'], + ['paused', 'pause'], + ['paved', 'pave'], + ['peaked', 'peak'], + ['pelleted', 'pellet'], + ['penetrated', 'penetrate'], + ['pent', 'pen'], + ['peppered', 'pepper'], + ['perceived', 'perceive'], + ['perforated', 'perforate'], + ['performed', 'perform'], + ['perfumed', 'perfume'], + ['perished', 'perish'], + ['permeated', 'permeate'], + ['permitted', 'permit'], + ['persevered', 'persevere'], + ['persisted', 'persist'], + ['personified', 'personify'], + ['persuaded', 'persuade'], + ['pertained', 'pertain'], + ['petitioned', 'petition'], + ['phoned', 'phone'], + ['photocopied', 'photocopy'], + ['picked', 'pick'], + ['pied', 'pie'], + ['piled', 'pile'], + ['piloted', 'pilot'], + ['pioneered', 'pioneer'], + ['piqued', 'pique'], + ['pitched', 'pitch'], + ['pitted', 'pit'], + ['placed', 'place'], + ['plagued', 'plague'], + ['planned', 'plan'], + ['planted', 'plant'], + ['plated', 'plate'], + ['played', 'play'], + ['pleaded', 'plead'], + ['pleased', 'please'], + ['pleated', 'pleat'], + ['pledged', 'pledge'], + ['plodded', 'plod'], + ['plotted', 'plot'], + ['plugged', 'plug'], + ['plummeted', 'plummet'], + ['plunged', 'plunge'], + ['pointed', 'point'], + ['poked', 'poke'], + ['polished', 'polish'], + ['polled', 'poll'], + ['polymerized', 'polymerize'], + ['pondered', 'ponder'], + ['pooled', 'pool'], + ['popped', 'pop'], + ['popularized', 'popularize'], + ['pored', 'pore'], + ['portrayed', 'portray'], + ['posed', 'pose'], + ['posited', 'posit'], + ['positioned', 'position'], + ['possessed', 'possess'], + ['posted', 'post'], + ['postponed', 'postpone'], + ['postulated', 'postulate'], + ['potted', 'pot'], + ['poured', 'pour'], + ['powered', 'power'], + ['practiced', 'practice'], + ['practised', 'practise'], + ['praised', 'praise'], + ['prayed', 'pray'], + ['preached', 'preach'], + ['preceded', 'precede'], + ['precipitated', 'precipitate'], + ['precluded', 'preclude'], + ['predated', 'predate'], + ['predetermined', 'predetermine'], + ['predicted', 'predict'], + ['predominated', 'predominate'], + ['prefabricated', 'prefabricate'], + ['preferred', 'prefer'], + ['premiered', 'premier'], + ['premised', 'premise'], + ['preoccupied', 'preoccupy'], + ['prepared', 'prepare'], + ['prescribed', 'prescribe'], + ['presented', 'present'], + ['preserved', 'preserve'], + ['presided', 'preside'], + ['pressed', 'press'], + ['pressurized', 'pressurize'], + ['prevailed', 'prevail'], + ['prevented', 'prevent'], + ['pried', 'pry'], + ['primed', 'prime'], + ['printed', 'print'], + ['probed', 'probe'], + ['proceeded', 'proceed'], + ['processed', 'process'], + ['proclaimed', 'proclaim'], + ['prodded', 'prod'], + ['produced', 'produce'], + ['proffered', 'proffer'], + ['profiled', 'profile'], + ['programmed', 'programme'], + ['progressed', 'progress'], + ['prohibited', 'prohibit'], + ['projected', 'project'], + ['prolonged', 'prolong'], + ['promised', 'promise'], + ['promoted', 'promote'], + ['prompted', 'prompt'], + ['promulgated', 'promulgate'], + ['pronounced', 'pronounce'], + ['proofed', 'proof'], + ['propelled', 'propel'], + ['proposed', 'propose'], + ['prorated', 'prorate'], + ['prosecuted', 'prosecute'], + ['prospered', 'prosper'], + ['protected', 'protect'], + ['proved', 'prove'], + ['provided', 'provide'], + ['provoked', 'provoke'], + ['pruned', 'prune'], + ['published', 'publish'], + ['pulled', 'pull'], + ['pumped', 'pump'], + ['punched', 'punch'], + ['punctuated', 'punctuate'], + ['purchased', 'purchase'], + ['pursued', 'pursue'], + ['pushed', 'push'], + ['put', 'put'], + ['qualified', 'qualify'], + ['quarantined', 'quarantine'], + ['quashed', 'quash'], + ['queried', 'query'], + ['questioned', 'question'], + ['queued', 'queue'], + ['quit', 'quit'], + ['quoted', 'quote'], + ['racked', 'rack'], + ['radiated', 'radiate'], + ['raged', 'rage'], + ['raided', 'raid'], + ['rained', 'rain'], + ['raised', 'raise'], + ['rallied', 'rally'], + ['ran', 'run'], + ['randomised', 'randomise'], + ['randomized', 'randomize'], + ['rang', 'ring'], + ['ranged', 'range'], + ['ranked', 'rank'], + ['rated', 'rate'], + ['ratified', 'ratify'], + ['rationalized', 'rationalize'], + ['ravaged', 'ravage'], + ['reached', 'reach'], + ['reacquired', 'reacquire'], + ['reacted', 'react'], + ['read', 'read'], + ['reaffirmed', 'reaffirm'], + ['realigned', 'realign'], + ['realised', 'realise'], + ['realized', 'realize'], + ['reaped', 'reap'], + ['reasoned', 'reason'], + ['reasserted', 'reassert'], + ['reassessed', 'reassess'], + ['reassured', 'reassure'], + ['rebated', 'rebate'], + ['rebounded', 'rebound'], + ['rebuilt', 'rebuild'], + ['rebutted', 'rebut'], + ['recalculated', 'recalculate'], + ['recalled', 'recall'], + ['recast', 'recast'], + ['received', 'receive'], + ['recited', 'recite'], + ['reckoned', 'reckon'], + ['reclaimed', 'reclaim'], + ['reclassified', 'reclassify'], + ['recognised', 'recognise'], + ['recognized', 'recognize'], + ['recommended', 'recommend'], + ['reconciled', 'reconcile'], + ['reconfigured', 'reconfigure'], + ['reconfirmed', 'reconfirm'], + ['reconsidered', 'reconsider'], + ['recorded', 'record'], + ['recounted', 'recount'], + ['recovered', 'recover'], + ['recreated', 'recreate'], + ['recruited', 'recruit'], + ['redefined', 'redefin'], + ['redesigned', 'redesign'], + ['redid', 'redo'], + ['redirected', 'redirect'], + ['redistributed', 'redistribute'], + ['reduced', 'reduce'], + ['reestablished', 'reestablish'], + ['refereed', 'referee'], + ['referenced', 'reference'], + ['referred', 'refer'], + ['refinanced', 'refinance'], + ['refined', 'refine'], + ['reflected', 'reflect'], + ['refocused', 'refocuse'], + ['reformed', 'reform'], + ['refrigerated', 'refrigerate'], + ['refunded', 'refund'], + ['refused', 'refuse'], + ['refuted', 'refute'], + ['regained', 'regain'], + ['regarded', 'regard'], + ['registered', 'register'], + ['regressed', 'regress'], + ['regretted', 'regret'], + ['regulated', 'regulate'], + ['rehearsed', 'rehearse'], + ['reigned', 'reign'], + ['reimbursed', 'reimburse'], + ['reinforced', 'reinforce'], + ['reinstated', 'reinstate'], + ['reintroduced', 'reintroduce'], + ['reinvented', 'reinvent'], + ['reinvested', 'reinvest'], + ['reinvigorated', 'reinvigorate'], + ['reissued', 'reissue'], + ['reiterated', 'reiterate'], + ['rejected', 'reject'], + ['rejoined', 'rejoin'], + ['related', 'relate'], + ['relaunched', 'relaunch'], + ['relaxed', 'relax'], + ['relayed', 'relay'], + ['released', 'release'], + ['relied', 'rely'], + ['relieved', 'relieve'], + ['relinquished', 'relinquish'], + ['relocated', 'relocate'], + ['remade', 'remake'], + ['remained', 'remain'], + ['remanded', 'remand'], + ['remarked', 'remark'], + ['remembered', 'remember'], + ['reminded', 'remind'], + ['remitted', 'remit'], + ['removed', 'remove'], + ['renamed', 'rename'], + ['rendered', 'render'], + ['renegotiated', 'renegotiate'], + ['renewed', 'renew'], + ['renounced', 'renounce'], + ['renovated', 'renovate'], + ['rent', 'rend'], + ['rented', 'rent'], + ['reopened', 'reopen'], + ['reordered', 'reorder'], + ['reorganized', 'reorganize'], + ['reoriented', 'reorient'], + ['repaid', 'repay'], + ['repatriated', 'repatriate'], + ['repealed', 'repeal'], + ['repeated', 'repeat'], + ['replaced', 'replace'], + ['replanted', 'replant'], + ['replicated', 'replicate'], + ['replied', 'reply'], + ['reported', 'report'], + ['represented', 'represent'], + ['reprinted', 'reprint'], + ['reproached', 'reproach'], + ['reproduced', 'reproduce'], + ['requested', 'request'], + ['required', 'require'], + ['reread', 'reread'], + ['rescheduled', 'reschedule'], + ['rescinded', 'rescind'], + ['rescued', 'rescue'], + ['researched', 'research'], + ['resembled', 'resemble'], + ['reserved', 'reserve'], + ['resided', 'reside'], + ['resigned', 'resign'], + ['resisted', 'resist'], + ['resold', 'resell'], + ['resolved', 'resolve'], + ['resonated', 'resonate'], + ['respected', 'respect'], + ['responded', 'respond'], + ['restated', 'restate'], + ['rested', 'rest'], + ['restored', 'restore'], + ['restricted', 'restrict'], + ['restructured', 'restructure'], + ['resubmitted', 'resubmit'], + ['resulted', 'result'], + ['resumed', 'resume'], + ['retained', 'retain'], + ['retired', 'retire'], + ['retook', 'retake'], + ['retraced', 'retrace'], + ['retransmitted', 'retransmit'], + ['retreated', 'retreat'], + ['retrieved', 'retrieve'], + ['returned', 'return'], + ['revamped', 'revamp'], + ['revealed', 'reveal'], + ['revered', 'revere'], + ['reversed', 'reverse'], + ['reverted', 'revert'], + ['reviewed', 'review'], + ['revised', 'revise'], + ['revisited', 'revisit'], + ['revitalized', 'revitalize'], + ['revived', 'revive'], + ['revoked', 'revoke'], + ['revolutionized', 'revolutionize'], + ['revolved', 'revolve'], + ['rewrote', 'rewrite'], + ['ribbed', 'rib'], + ['risked', 'risk'], + ['rivalled', 'rival'], + ['roamed', 'roam'], + ['roared', 'roar'], + ['roasted', 'roast'], + ['robbed', 'rob'], + ['rode', 'ride'], + ['rolled', 'roll'], + ['rooted', 'root'], + ['rose', 'rise'], + ['rotated', 'rotate'], + ['rounded', 'round'], + ['rubberized', 'rubberize'], + ['ruined', 'ruin'], + ['ruled', 'rule'], + ['rushed', 'rush'], + ['sacrificed', 'sacrifice'], + ['said', 'say'], + ['sailed', 'sail'], + ['salted', 'salt'], + ['saluted', 'salute'], + ['sampled', 'sample'], + ['sanctioned', 'sanction'], + ['sang', 'sing'], + ['sank', 'sink'], + ['sat', 'sit'], + ['satisfied', 'satisfy'], + ['saturated', 'saturate'], + ['saved', 'save'], + ['saw', 'see'], + ['scaled', 'scale'], + ['scanned', 'scan'], + ['scheduled', 'schedule'], + ['schooled', 'school'], + ['scored', 'score'], + ['scouted', 'scout'], + ['scrambled', 'scramble'], + ['screened', 'screen'], + ['screwed', 'screw'], + ['sculptured', 'sculpture'], + ['scutched', 'scutch'], + ['sealed', 'seal'], + ['searched', 'search'], + ['seated', 'seat'], + ['seconded', 'second'], + ['secured', 'secure'], + ['seeded', 'seed'], + ['seemed', 'seem'], + ['seeped', 'seep'], + ['segmented', 'segment'], + ['segregated', 'segregate'], + ['seized', 'seize'], + ['selected', 'select'], + ['sensed', 'sense'], + ['sensitized', 'sensitize'], + ['sent', 'send'], + ['sentenced', 'sentence'], + ['separated', 'separate'], + ['sequestered', 'sequester'], + ['serrated', 'serrate'], + ['served', 'serve'], + ['serviced', 'service'], + ['set', 'set'], + ['settled', 'settle'], + ['severed', 'sever'], + ['sewn', 'sew'], + ['shaped', 'shape'], + ['shared', 'share'], + ['shattered', 'shatter'], + ['shaved', 'shave'], + ['shed', 'shed'], + ['shelled', 'shell'], + ['sheltered', 'shelter'], + ['shielded', 'shield'], + ['shifted', 'shift'], + ['shipped', 'ship'], + ['shone', 'shine'], + ['shook', 'shake'], + ['shored', 'shore'], + ['shortened', 'shorten'], + ['shot', 'shoot'], + ['shouted', 'shout'], + ['shoved', 'shove'], + ['showcased', 'showcase'], + ['showed', 'show'], + ['shrank', 'shrink'], + ['shredded', 'shred'], + ['shrieked', 'shriek'], + ['shucked', 'shuck'], + ['shuffled', 'shuffle'], + ['shunned', 'shun'], + ['shut', 'shut'], + ['sided', 'side'], + ['sidelined', 'sideline'], + ['signaled', 'signal'], + ['signed', 'sign'], + ['signified', 'signify'], + ['simplified', 'simplify'], + ['simulated', 'simulate'], + ['singled', 'single'], + ['sized', 'size'], + ['sketched', 'sketch'], + ['skidded', 'skid'], + ['skied', 'ski'], + ['skimmed', 'skim'], + ['skinned', 'skin'], + ['skyrocketed', 'skyrocket'], + ['slammed', 'slam'], + ['slashed', 'slash'], + ['slatted', 'slat'], + ['slaughtered', 'slaughter'], + ['slayed', 'slay'], + ['slept', 'sleep'], + ['sliced', 'slice'], + ['slid', 'slide'], + ['slipped', 'slip'], + ['sloped', 'slope'], + ['slowed', 'slow'], + ['slumped', 'slump'], + ['smiled', 'smile'], + ['smoked', 'smoke'], + ['smuggled', 'smuggle'], + ['snaked', 'snake'], + ['snarled', 'snarl'], + ['sniped', 'snipe'], + ['snuck', 'sneak'], + ['soaked', 'soak'], + ['soared', 'soar'], + ['socked', 'sock'], + ['softened', 'soften'], + ['soiled', 'soil'], + ['sold', 'sell'], + ['solemnized', 'solemnize'], + ['solicited', 'solicit'], + ['solidified', 'solidify'], + ['solved', 'solve'], + ['sought', 'seek'], + ['sounded', 'sound'], + ['sowed', 'sow'], + ['spaced', 'space'], + ['spanned', 'span'], + ['spared', 'spare'], + ['sparked', 'spark'], + ['sparred', 'spar'], + ['spat', 'spit'], + ['spawned', 'spawn'], + ['spearheaded', 'spearhead'], + ['specialised', 'specialise'], + ['specialized', 'specialize'], + ['specified', 'specify'], + ['speckled', 'speckle'], + ['speculated', 'speculate'], + ['speeded', 'speed'], + ['spelled', 'spell'], + ['spent', 'spend'], + ['spiked', 'spike'], + ['spilled', 'spill'], + ['spited', 'spite'], + ['split', 'split'], + ['spoke', 'speak'], + ['sponsored', 'sponsor'], + ['spotted', 'spot'], + ['spouted', 'spout'], + ['sprang', 'spring'], + ['spread', 'spread'], + ['sprinkled', 'sprinkle'], + ['sprouted', 'sprout'], + ['routed', 'route'], + ['spun', 'spin'], + ['spurred', 'spur'], + ['squared', 'square'], + ['squeezed', 'squeeze'], + ['stabilized', 'stabilize'], + ['stacked', 'stack'], + ['staffed', 'staff'], + ['staged', 'stage'], + ['staggered', 'stagger'], + ['stagnated', 'stagnate'], + ['stained', 'stain'], + ['staked', 'stake'], + ['stalled', 'stall'], + ['stamped', 'stamp'], + ['standardized', 'standardize'], + ['stapled', 'staple'], + ['started', 'start'], + ['stated', 'state'], + ['stationed', 'station'], + ['stayed', 'stay'], + ['stemmed', 'stem'], + ['stepped', 'step'], + ['stifled', 'stifle'], + ['stimulated', 'stimulate'], + ['stipulated', 'stipulate'], + ['stirred', 'stir'], + ['stockpiled', 'stockpile'], + ['stole', 'steal'], + ['stood', 'stand'], + ['stopped', 'stop'], + ['stored', 'store'], + ['stormed', 'storm'], + ['stowed', 'stow'], + ['straddled', 'straddle'], + ['stratified', 'stratify'], + ['streamed', 'stream'], + ['streamlined', 'streamline'], + ['strengthened', 'strengthen'], + ['stressed', 'stress'], + ['stretched', 'stretch'], + ['strewn', 'strew'], + ['stripped', 'strip'], + ['strolled', 'stroll'], + ['strove', 'strive'], + ['struck', 'strike'], + ['structured', 'structure'], + ['struggled', 'struggle'], + ['stuck', 'stick'], + ['studied', 'study'], + ['stuffed', 'stuff'], + ['stumbled', 'stumble'], + ['stunk', 'stink'], + ['stunned', 'stun'], + ['styled', 'style'], + ['stylized', 'stylize'], + ['subdivided', 'subdivide'], + ['submerged', 'submerge'], + ['submitted', 'submit'], + ['subscribed', 'subscribe'], + ['subsided', 'subside'], + ['subsidized', 'subsidize'], + ['substantiated', 'substantiate'], + ['substituted', 'substitute'], + ['subsumed', 'subsume'], + ['succeeded', 'succeed'], + ['succumbed', 'succumb'], + ['sued', 'sue'], + ['suffered', 'suffer'], + ['suggested', 'suggest'], + ['suited', 'suit'], + ['sulphonated', 'sulphonate'], + ['summarized', 'summarize'], + ['summed', 'sum'], + ['summoned', 'summon'], + ['superseded', 'supersede'], + ['supervised', 'supervise'], + ['supplemented', 'supplement'], + ['supplied', 'supply'], + ['supported', 'support'], + ['suppressed', 'suppress'], + ['surfaced', 'surface'], + ['surfed', 'surf'], + ['surged', 'surge'], + ['surmised', 'surmise'], + ['surmounted', 'surmount'], + ['surpassed', 'surpass'], + ['surprised', 'surprise'], + ['surrendered', 'surrender'], + ['surrounded', 'surround'], + ['surveyed', 'survey'], + ['survived', 'survive'], + ['suspected', 'suspect'], + ['suspended', 'suspend'], + ['sustained', 'sustain'], + ['swam', 'swim'], + ['sweetened', 'sweeten'], + ['swelled', 'swell'], + ['swept', 'sweep'], + ['switched', 'switch'], + ['swore', 'swear'], + ['synthesized', 'synthesize'], + ['systematized', 'systematize'], + ['tabbed', 'tab'], + ['tabled', 'table'], + ['tabulated', 'tabulate'], + ['tackled', 'tackle'], + ['tagged', 'tag'], + ['tailored', 'tailor'], + ['talked', 'talk'], + ['tallied', 'tally'], + ['tanned', 'tan'], + ['taped', 'tape'], + ['tapered', 'taper'], + ['tapped', 'tap'], + ['targeted', 'target'], + ['tarnished', 'tarnish'], + ['tasked', 'task'], + ['tasted', 'taste'], + ['taught', 'teach'], + ['taxed', 'tax'], + ['teamed', 'team'], + ['teetered', 'teeter'], + ['telegraphed', 'telegraph'], + ['telephoned', 'telephone'], + ['tempted', 'tempt'], + ['tended', 'tend'], + ['tendered', 'tender'], + ['termed', 'term'], + ['terminated', 'terminate'], + ['tested', 'test'], + ['testified', 'testify'], + ['thanked', 'thank'], + ['thawed', 'thaw'], + ['thinned', 'thin'], + ['thought', 'think'], + ['threaded', 'thread'], + ['threatened', 'threaten'], + ['threw', 'throw'], + ['thrived', 'thrive'], + ['thrust', 'thrust'], + ['tied', 'tie'], + ['tiered', 'tier'], + ['tightened', 'tighten'], + ['timed', 'time'], + ['tipped', 'tip'], + ['titled', 'title'], + ['toasted', 'toast'], + ['told', 'tell'], + ['tolerated', 'tolerate'], + ['tolled', 'toll'], + ['toned', 'tone'], + ['took', 'take'], + ['topped', 'top'], + ['tore', 'tear'], + ['tossed', 'toss'], + ['totaled', 'total'], + ['touched', 'touch'], + ['toured', 'tour'], + ['traced', 'trace'], + ['tracked', 'track'], + ['traded', 'trade'], + ['trafficked', 'traffick'], + ['trailed', 'trail'], + ['trained', 'train'], + ['transacted', 'transact'], + ['transferred', 'transfer'], + ['transformed', 'transform'], + ['transited', 'transit'], + ['translated', 'translate'], + ['transmitted', 'transmit'], + ['transpired', 'transpire'], + ['transported', 'transport'], + ['travelled', 'travel'], + ['treated', 'treat'], + ['trended', 'trend'], + ['tried', 'try'], + ['triggered', 'trigger'], + ['trimmed', 'trim'], + ['tripled', 'triple'], + ['trumpeted', 'trumpet'], + ['truncated', 'truncate'], + ['trusted', 'trust'], + ['tufted', 'tuft'], + ['tumbled', 'tumble'], + ['tuned', 'tune'], + ['turned', 'turn'], + ['twinned', 'twin'], + ['typed', 'type'], + ['typified', 'typify'], + ['uncovered', 'uncover'], + ['underbid', 'underbid'], + ['undercapitalized', 'undercapitalize'], + ['undercut', 'undercut'], + ['underdeveloped', 'underdevelop'], + ['underestimated', 'underestimate'], + ['underlay', 'underlie'], + ['underlined', 'underline'], + ['undermined', 'undermine'], + ['underpaid', 'underpay'], + ['underperformed', 'underperform'], + ['underpinned', 'underpin'], + ['underrepresented', 'underrepresent'], + ['underscored', 'underscore'], + ['undersigned', 'undersign'], + ['understood', 'understand'], + ['undertook', 'undertake'], + ['underwent', 'undergo'], + ['unearthed', 'unearth'], + ['unfolded', 'unfold'], + ['unified', 'unify'], + ['unionized', 'unionize'], + ['united', 'unite'], + ['unleashed', 'unleash'], + ['unloaded', 'unload'], + ['unscrambled', 'unscramble'], + ['unveiled', 'unveil'], + ['updated', 'update'], + ['upgraded', 'upgrade'], + ['upheld', 'uphold'], + ['upholstered', 'upholster'], + ['uploaded', 'upload'], + ['upped', 'up'], + ['upset', 'upset'], + ['urged', 'urge'], + ['used', 'use'], + ['ushered', 'usher'], + ['utilized', 'utilize'], + ['vaccinated', 'vaccinate'], + ['validated', 'validate'], + ['valued', 'value'], + ['vanished', 'vanish'], + ['vaporized', 'vaporize'], + ['varied', 'vary'], + ['varnished', 'varnish'], + ['vegetated', 'vegetate'], + ['vented', 'vent'], + ['ventilated', 'ventilate'], + ['ventured', 'venture'], + ['verified', 'verify'], + ['vibed', 'vibe'], + ['vied', 'vie'], + ['viewed', 'view'], + ['violated', 'violate'], + ['visited', 'visit'], + ['voiced', 'voice'], + ['voided', 'void'], + ['volunteered', 'volunteer'], + ['voted', 'vote'], + ['vowed', 'vow'], + ['vulcanized', 'vulcanize'], + ['waited', 'wait'], + ['waived', 'waive'], + ['walked', 'walk'], + ['walled', 'wall'], + ['waned', 'wane'], + ['wanted', 'want'], + ['warehoused', 'warehouse'], + ['warmed', 'warm'], + ['warned', 'warn'], + ['warranted', 'warrant'], + ['was', 'is'], + ['washed', 'wash'], + ['wasted', 'waste'], + ['watched', 'watch'], + ['watered', 'water'], + ['waxed', 'wax'], + ['weakened', 'weaken'], + ['weed', 'wee'], + ['weighed', 'weigh'], + ['weighted', 'weight'], + ['welcomed', 'welcome'], + ['welded', 'weld'], + ['went', 'go'], + ['wept', 'weep'], + ['were', 'are'], + ['whirled', 'whirl'], + ['widened', 'widen'], + ['widowed', 'widow'], + ['winged', 'wing'], + ['wiped', 'wipe'], + ['wired', 'wire'], + ['wished', 'wish'], + ['withdrew', 'withdraw'], + ['withheld', 'withhold'], + ['withstood', 'withstand'], + ['witnessed', 'witness'], + ['woke', 'wake'], + ['won', 'win'], + ['wondered', 'wonder'], + ['wore', 'wear'], + ['worked', 'work'], + ['worried', 'worry'], + ['worsened', 'worsen'], + ['wound', 'wind'], + ['wove', 'weave'], + ['wrapped', 'wrap'], + ['wrestled', 'wrestle'], + ['wrote', 'write'], + ['wrung', 'wring'], + ['yielded', 'yield'], + ['zoned', 'zone'], + ['smelled', 'smell'], + ['chirped', 'chirp'], + ['doomed', 'doom'], + ['bowed', 'bow'], + ['begged', 'beg'], + ['chewed', 'chew'], + ['flapped', 'flap'], + ['murmured', 'murmur'], + ['oiled', 'oil'], + ['scarred', 'scar'], + ['slapped', 'slap'], + ['swayed', 'sway'], + ['snapped', 'snap'], + ['trotted', 'trot'], + ['winked', 'wink'], + ['yelled', 'yell'], + ['jammed', 'jam'], + ['courted', 'court'], + ['emptied', 'empty'], + + ['deleted', 'delete'], + ['secreted', 'secrete'], + ['tamed', 'tame'], + ['glared', 'glare'], + ['impelled', 'impel'], + ['dwelled', 'dwell'], + ['honored', 'honor'], + ['obliged', 'oblige'], + ['lubed', 'lube'], + ['stared', 'stare'], + ['growled', 'growl'], + ['gasped', 'gasp'], + ['roped', 'rope'], + ['ridiculed', 'ridicule'], + ['prided', 'pride'], + ['quelled', 'quell'], + ['indulged', 'indulge'], + ['eloped', 'elope'], + ['chimed', 'chime'], + ['raped', 'rape'], + ['groaned', 'groan'], + ['faded', 'fade'], + ['dialed', 'dial'], + ['stroked', 'stroke'], + ['scared', 'scare'], + ['marshalled', 'marshall'], + ['waked', 'wake'], + ['rioted', 'riot'], + ['mired', 'mire'], + ['texted', 'text'], + ['equaled', 'equal'], + ['caked', 'cake'], + ['groped', 'grope'], + ['honed', 'hone'], + ['clouded', 'cloud'], + ['backfired', 'backfire'], + ['majored', 'major'], + ['modelled', 'model'], + ['sizzled', 'sizzle'], + ['msged', 'msg'], + ['txted', 'txt'], + ['rhymed', 'rhyme'], + ['sped', 'speed'], + ['barricaded', 'barricade'], + ['draped', 'drape'], + ['cringed', 'cringe'], + ['rebuked', 'rebuke'], + ['chronicled', 'chronicle'], + ['martialed', 'martial'], + ['quaked', 'quake'], + ['coveted', 'covet'], + ['honeymooned', 'honeymoon'], + ['accustomed', 'accustom'], + ['befriended', 'befriend'], + + ["abutted", "abut"], + ["apprehended", "apprehend"], + ["assayed", "assay"], + ["awakened", "awaken"], + ["banged", "bang"], + ["binned", "bin"], + ["blinked", "blink"], + ["blossomed", "blossom"], + ["blotted", "blot"], + ["canvassed", "canvass"], + ["combatted", "combat"], + ["comprehended", "comprehend"], + ["compressed", "compress"], + // ["cross-checked", "cross-check"], + ["crowned", "crown"], + ["culled", "cull"], + ["decayed", "decay"], + ["dimmed", "dim"], + ["disbanded", "disband"], + ["elbowed", "elbow"], + ["embedded", "embed"], + ["encompassed", "encompass"], + ["enlivened", "enliven"], + ["enrolled", "enrol"], + ["expressed", "express"], + ["fancied", "fancy"], + ["fathomed", "fathom"], + // ["fine-tuned", "fine-tune"], + ["fitted", "fit"], + // ["forecast", "forecast"], + ["forewent", "forego"], + ["fretted", "fret"], + ["gossiped", "gossip"], + ["hastened", "hasten"], + ["healed", "heal"], + ["heated", "heat"], + ["heeded", "heed"], + ["hopped", "hop"], + ["instilled", "instil"], + ["kick-started", "kick-start"], + ["labelled", "label"], + ["levelled", "level"], + ["massed", "mass"], + ["mended", "mend"], + ["misled", "mislead"], + ["mopped", "mop"], + ["nodded", "nod"], + ["outed", "out"], + ["outran", "outrun"], + ["overrode", "override"], + ["owned", "own"], + ["peeled", "peel"], + ["pinned", "pin"], + ["raked", "rake"], + ["rebelled", "rebel"], + ["rebooted", "reboot"], + ["reeled", "reel"], + ["refited", "refit"], + ["reined", "rein"], + ["remodelled", "remodel"], + ["repented", "repent"], + ["rigged", "rig"], + // ["self-destructed", "self-destruct"], + ["sewed", "sew"], + ["sheared", "shear"], + ["shielded", "shield"], + ["signalled", "signal"], + ["sinned", "sin"], + ["skewed", "skew"], + ["slew", "slay"], + ["slimmed", "slim"], + ["stewed", "stew"], + ["stung", "sting"], + ["subpoenaed", "subpoena"], + ["sweated", "sweat"], + ["swung", "swing"], + ["swivelled", "swivel"], + ["thrived", "thrive"], + ["tilted", "tilt"], + ["totalled", "total"], + ["towed", "tow"], + ["trespassed", "trespass"], + ["tweaked", "tweak"], + ["untied", "untie"], + ["unwound", "unwind"], + ["vetted", "vet"], + ["vetoed", "veto"], + ["withheld", "withhold"], + ["witnessed", "witness"], + ["welled", "well"], + ["babysat", "babysit"], + ["recycled", "recycle"], + + + // ['', ''], +] \ No newline at end of file diff --git a/data/pairs/PresentTense.js b/data/pairs/PresentTense.js new file mode 100644 index 0000000..fb180a1 --- /dev/null +++ b/data/pairs/PresentTense.js @@ -0,0 +1,1960 @@ +export default [ + ['are', 'is'], + ['has', 'have'], + ['provides', 'provide'], + ['does', 'do'], + ['includes', 'include'], + ['means', 'mean'], + ['requires', 'require'], + ['needs', 'need'], + ['continues', 'continue'], + ['supports', 'support'], + ['allows', 'allow'], + ['makes', 'make'], + ['represents', 'represent'], + ['follows', 'follow'], + ['remains', 'remain'], + ['offers', 'offer'], + ['indicates', 'indicate'], + ['appears', 'appear'], + ['applies', 'apply'], + ['contains', 'contain'], + ['shows', 'show'], + ['takes', 'take'], + ['says', 'say'], + ['suggests', 'suggest'], + ['recognizes', 'recognize'], + ['helps', 'help'], + ['works', 'work'], + ['reflects', 'reflect'], + ['involves', 'involve'], + ['consists', 'consist'], + ['gives', 'give'], + ['uses', 'use'], + ['exists', 'exist'], + ['presents', 'present'], + ['comes', 'come'], + ['agrees', 'agree'], + ['outlines', 'outline'], + ['refers', 'refer'], + ['becomes', 'become'], + ['aims', 'aim'], + ['focuses', 'focus'], + ['meets', 'meet'], + ['occurs', 'occur'], + ['recommends', 'recommend'], + ['plans', 'plan'], + ['promotes', 'promote'], + ['covers', 'cover'], + ['seems', 'seem'], + ['contributes', 'contribute'], + ['identifies', 'identify'], + ['relates', 'relate'], + ['receives', 'receive'], + ['describes', 'describe'], + ['ensures', 'ensure'], + ['addresses', 'address'], + ['encourages', 'encourage'], + ['explains', 'explain'], + ['serves', 'serve'], + ['sets', 'set'], + ['brings', 'bring'], + ['believes', 'believe'], + ['holds', 'hold'], + ['depends', 'depend'], + ['determines', 'determine'], + ['plays', 'play'], + ['states', 'state'], + ['produces', 'produce'], + ['seeks', 'seek'], + ['considers', 'consider'], + ['operates', 'operate'], + ['reports', 'report'], + ['enables', 'enable'], + ['leads', 'lead'], + ['constitutes', 'constitute'], + ['varies', 'vary'], + ['creates', 'create'], + ['maintains', 'maintain'], + ['goes', 'go'], + ['proposes', 'propose'], + ['increases', 'increase'], + ['demonstrates', 'demonstrate'], + ['notes', 'note'], + ['affects', 'affect'], + ['begins', 'begin'], + ['establishes', 'establish'], + ['exceeds', 'exceed'], + ['administers', 'administer'], + ['examines', 'examine'], + ['defines', 'define'], + ['wishes', 'wish'], + ['reduces', 'reduce'], + ['links', 'link'], + ['develops', 'develop'], + ['falls', 'fall'], + ['intends', 'intend'], + ['finds', 'find'], + ['highlights', 'highlight'], + ['assists', 'assist'], + ['processes', 'process'], + ['pays', 'pay'], + ['wants', 'want'], + ['causes', 'cause'], + ['tends', 'tend'], + ['builds', 'build'], + ['calls', 'call'], + ['illustrates', 'illustrate'], + ['permits', 'permit'], + ['expects', 'expect'], + ['facilitates', 'facilitate'], + ['reveals', 'reveal'], + ['looks', 'look'], + ['summarizes', 'summarize'], + ['reviews', 'review'], + ['adds', 'add'], + ['confirms', 'confirm'], + ['measures', 'measure'], + ['raises', 'raise'], + ['assumes', 'assume'], + ['fails', 'fail'], + ['acknowledges', 'acknowledge'], + ['happens', 'happen'], + ['comprises', 'comprise'], + ['prohibits', 'prohibit'], + ['conducts', 'conduct'], + ['improves', 'improve'], + ['faces', 'face'], + ['concludes', 'conclude'], + ['excludes', 'exclude'], + ['implies', 'imply'], + ['features', 'feature'], + ['extends', 'extend'], + ['controls', 'control'], + ['estimates', 'estimate'], + ['protects', 'protect'], + ['specifies', 'specify'], + ['manages', 'manage'], + ['participates', 'participate'], + ['relies', 'rely'], + ['forms', 'form'], + ['incorporates', 'incorporate'], + ['places', 'place'], + ['encompasses', 'encompass'], + ['acts', 'act'], + ['carries', 'carry'], + ['lies', 'lie'], + ['publishes', 'publish'], + ['generates', 'generate'], + ['delivers', 'deliver'], + ['lists', 'list'], + ['fosters', 'foster'], + ['leaves', 'leave'], + ['employs', 'employ'], + ['emphasizes', 'emphasize'], + ['starts', 'start'], + ['stands', 'stand'], + ['sells', 'sell'], + ['enhances', 'enhance'], + ['owns', 'own'], + ['claims', 'claim'], + ['costs', 'cost'], + ['responds', 'respond'], + ['feels', 'feel'], + ['announces', 'announce'], + ['hopes', 'hope'], + ['discusses', 'discuss'], + ['discloses', 'disclose'], + ['respects', 'respect'], + ['accounts', 'account'], + ['collects', 'collect'], + ['arises', 'arise'], + ['prevents', 'prevent'], + ['welcomes', 'welcome'], + ['undertakes', 'undertake'], + ['limits', 'limit'], + ['speaks', 'speak'], + ['sees', 'see'], + ['puts', 'put'], + ['accepts', 'accept'], + ['gets', 'get'], + ['runs', 'run'], + ['reaches', 'reach'], + ['ends', 'end'], + ['stipulates', 'stipulate'], + ['monitors', 'monitor'], + ['stems', 'stem'], + ['decides', 'decide'], + ['imposes', 'impose'], + ['compares', 'compare'], + ['targets', 'target'], + ['points', 'point'], + ['knows', 'know'], + ['commits', 'commit'], + ['differs', 'differ'], + ['ceases', 'cease'], + ['submits', 'submit'], + ['qualifies', 'qualify'], + ['benefits', 'benefit'], + ['values', 'value'], + ['chooses', 'choose'], + ['argues', 'argue'], + ['explores', 'explore'], + ['distributes', 'distribute'], + ['coordinates', 'coordinate'], + ['enters', 'enter'], + ['keeps', 'keep'], + ['sends', 'send'], + ['guarantees', 'guarantee'], + ['rests', 'rest'], + ['strengthens', 'strengthen'], + ['combines', 'combine'], + ['moves', 'move'], + ['retains', 'retain'], + ['draws', 'draw'], + ['prepares', 'prepare'], + ['marks', 'mark'], + ['strives', 'strive'], + ['advises', 'advise'], + ['authorizes', 'authorize'], + ['opens', 'open'], + ['arrives', 'arrive'], + ['awards', 'award'], + ['poses', 'pose'], + ['asks', 'ask'], + ['grants', 'grant'], + ['projects', 'project'], + ['directs', 'direct'], + ['pertains', 'pertain'], + ['files', 'file'], + ['replaces', 'replace'], + ['grows', 'grow'], + ['attracts', 'attract'], + ['results', 'result'], + ['regards', 'regard'], + ['supplies', 'supply'], + ['centres', 'centre'], + ['tells', 'tell'], + ['invests', 'invest'], + ['regulates', 'regulate'], + ['funds', 'fund'], + ['integrates', 'integrate'], + ['corresponds', 'correspond'], + ['performs', 'perform'], + ['attempts', 'attempt'], + ['complements', 'complement'], + ['matters', 'matter'], + ['introduces', 'introduce'], + ['oversees', 'oversee'], + ['concerns', 'concern'], + ['turns', 'turn'], + ['enjoys', 'enjoy'], + ['changes', 'change'], + ['references', 'reference'], + ['understands', 'understand'], + ['belongs', 'belong'], + ['resides', 'reside'], + ['challenges', 'challenge'], + ['implements', 'implement'], + ['releases', 'release'], + ['ranks', 'rank'], + ['extracts', 'extract'], + ['informs', 'inform'], + ['expires', 'expire'], + ['alleges', 'allege'], + ['invites', 'invite'], + ['assesses', 'assess'], + ['expands', 'expand'], + ['captures', 'capture'], + ['translates', 'translate'], + ['interns', 'intern'], + ['approves', 'approve'], + ['imports', 'import'], + ['dates', 'date'], + ['approaches', 'approach'], + ['celebrates', 'celebrate'], + ['governs', 'govern'], + ['reserves', 'reserve'], + ['issues', 'issue'], + ['fits', 'fit'], + ['evaluates', 'evaluate'], + ['feeds', 'feed'], + ['deals', 'deal'], + ['handles', 'handle'], + ['eliminates', 'eliminate'], + ['influences', 'influence'], + ['sits', 'sit'], + ['documents', 'document'], + ['engages', 'engage'], + ['lacks', 'lack'], + ['complies', 'comply'], + ['specializes', 'specialize'], + ['impacts', 'impact'], + ['matches', 'match'], + ['equals', 'equal'], + ['expresses', 'express'], + ['dies', 'die'], + ['visits', 'visit'], + ['organizes', 'organize'], + ['initiatives', 'initiative'], + ['bears', 'bear'], + ['rises', 'rise'], + ['confers', 'confer'], + ['entails', 'entail'], + ['achieves', 'achieve'], + ['obtains', 'obtain'], + ['exhibits', 'exhibit'], + ['hosts', 'host'], + ['exports', 'export'], + ['buys', 'buy'], + ['satisfies', 'satisfy'], + ['anticipates', 'anticipate'], + ['allocates', 'allocate'], + ['emerges', 'emerge'], + ['studies', 'study'], + ['spends', 'spend'], + ['conforms', 'conform'], + ['sections', 'section'], + ['acquires', 'acquire'], + ['flows', 'flow'], + ['weeds', 'weed'], + ['connects', 'connect'], + ['passes', 'pass'], + ['voyages', 'voyage'], + ['reads', 'read'], + ['steps', 'step'], + ['removes', 'remove'], + ['deems', 'deem'], + ['tracks', 'track'], + ['reinforces', 'reinforce'], + ['requests', 'request'], + ['exercises', 'exercise'], + ['lives', 'live'], + ['investigates', 'investigate'], + ['concentrates', 'concentrate'], + ['stresses', 'stress'], + ['launches', 'launch'], + ['favours', 'favour'], + ['contends', 'contend'], + ['consults', 'consult'], + ['transfers', 'transfer'], + ['restricts', 'restrict'], + ['signs', 'sign'], + ['embraces', 'embrace'], + ['sponsors', 'sponsor'], + ['underscores', 'underscore'], + ['evolves', 'evolve'], + ['attributes', 'attribute'], + ['completes', 'complete'], + ['reaffirms', 'reaffirm'], + ['assigns', 'assign'], + ['manufactures', 'manufacture'], + ['designs', 'design'], + ['occupies', 'occupy'], + ['pursues', 'pursue'], + ['overwinters', 'overwinter'], + ['overlaps', 'overlap'], + ['clarifies', 'clarify'], + ['promises', 'promise'], + ['derives', 'derive'], + ['drives', 'drive'], + ['programmes', 'programme'], + ['teaches', 'teach'], + ['urges', 'urge'], + ['honours', 'honour'], + ['tries', 'try'], + ['chairs', 'chair'], + ['aligns', 'align'], + ['originates', 'originate'], + ['designates', 'designate'], + ['balances', 'balance'], + ['heads', 'head'], + ['transmits', 'transmit'], + ['denotes', 'denote'], + ['guides', 'guide'], + ['views', 'view'], + ['reminds', 'remind'], + ['offsets', 'offset'], + ['amounts', 'amount'], + ['records', 'record'], + ['experiences', 'experience'], + ['deserves', 'deserve'], + ['stimulates', 'stimulate'], + ['predicts', 'predict'], + ['distinguishes', 'distinguish'], + ['decreases', 'decrease'], + ['supersedes', 'supersede'], + ['lasts', 'last'], + ['houses', 'house'], + ['affirms', 'affirm'], + ['fulfills', 'fulfill'], + ['demands', 'demand'], + ['certifies', 'certify'], + ['binds', 'bind'], + ['charges', 'charge'], + ['updates', 'update'], + ['refuses', 'refuse'], + ['minimizes', 'minimize'], + ['forces', 'force'], + ['displays', 'display'], + ['signals', 'signal'], + ['accompanies', 'accompany'], + ['analyzes', 'analyze'], + ['shares', 'share'], + ['embodies', 'embody'], + ['utilizes', 'utilize'], + ['collaborates', 'collaborate'], + ['disseminates', 'disseminate'], + ['justifies', 'justify'], + ['lends', 'lend'], + ['proves', 'prove'], + ['purchases', 'purchase'], + ['answers', 'answer'], + ['yields', 'yield'], + ['returns', 'return'], + ['breaks', 'break'], + ['dominates', 'dominate'], + ['competes', 'compete'], + ['realizes', 'realize'], + ['adopts', 'adopt'], + ['services', 'service'], + ['appreciates', 'appreciate'], + ['terminates', 'terminate'], + ['fills', 'fill'], + ['thinks', 'think'], + ['boasts', 'boast'], + ['communicates', 'communicate'], + ['ranges', 'range'], + ['departs', 'depart'], + ['threatens', 'threaten'], + ['treats', 'treat'], + ['possesses', 'possess'], + ['coincides', 'coincide'], + ['suffers', 'suffer'], + ['showcases', 'showcase'], + ['depicts', 'depict'], + ['cuts', 'cut'], + ['articulates', 'articulate'], + ['lays', 'lay'], + ['commences', 'commence'], + ['joins', 'join'], + ['negotiates', 'negotiate'], + ['notifies', 'notify'], + ['writes', 'write'], + ['credits', 'credit'], + ['markets', 'market'], + ['spreads', 'spread'], + ['broadcasts', 'broadcast'], + ['films', 'film'], + ['spans', 'span'], + ['selects', 'select'], + ['slips', 'slip'], + ['declares', 'declare'], + ['cites', 'cite'], + ['observes', 'observe'], + ['crosses', 'cross'], + ['renders', 'render'], + ['exemplifies', 'exemplify'], + ['totals', 'total'], + ['lowers', 'lower'], + ['forecasts', 'forecast'], + ['necessitates', 'necessitate'], + ['mandates', 'mandate'], + ['persists', 'persist'], + ['recalls', 'recall'], + ['counts', 'count'], + ['mentions', 'mention'], + ['climbs', 'climb'], + ['mirrors', 'mirror'], + ['preserves', 'preserve'], + ['lets', 'let'], + ['incurs', 'incur'], + ['avoids', 'avoid'], + ['gathers', 'gather'], + ['drops', 'drop'], + ['details', 'detail'], + ['adjusts', 'adjust'], + ['amends', 'amend'], + ['attaches', 'attach'], + ['kills', 'kill'], + ['contacts', 'contact'], + ['precludes', 'preclude'], + ['prefers', 'prefer'], + ['verifies', 'verify'], + ['enriches', 'enrich'], + ['attends', 'attend'], + ['advances', 'advance'], + ['travels', 'travel'], + ['matures', 'mature'], + ['earns', 'earn'], + ['reiterates', 'reiterate'], + ['progresses', 'progress'], + ['adheres', 'adhere'], + ['calculates', 'calculate'], + ['affords', 'afford'], + ['accommodates', 'accommodate'], + ['initiates', 'initiate'], + ['transports', 'transport'], + ['wins', 'win'], + ['insists', 'insist'], + ['underlines', 'underline'], + ['endorses', 'endorse'], + ['proceeds', 'proceed'], + ['contrasts', 'contrast'], + ['attacks', 'attack'], + ['posts', 'post'], + ['resembles', 'resemble'], + ['tests', 'test'], + ['prevails', 'prevail'], + ['envisions', 'envision'], + ['infects', 'infect'], + ['cruises', 'cruise'], + ['diminishes', 'diminish'], + ['loses', 'lose'], + ['undergoes', 'undergo'], + ['subsidizes', 'subsidize'], + ['styles', 'style'], + ['conveys', 'convey'], + ['empowers', 'empower'], + ['advocates', 'advocate'], + ['stays', 'stay'], + ['classifies', 'classify'], + ['interacts', 'interact'], + ['enforces', 'enforce'], + ['signifies', 'signify'], + ['interprets', 'interpret'], + ['asserts', 'assert'], + ['arranges', 'arrange'], + ['portrays', 'portray'], + ['prizes', 'prize'], + ['assures', 'assure'], + ['disclaims', 'disclaim'], + ['undermines', 'undermine'], + ['converts', 'convert'], + ['hires', 'hire'], + ['maximizes', 'maximize'], + ['licenses', 'license'], + ['appoints', 'appoint'], + ['accelerates', 'accelerate'], + ['slows', 'slow'], + ['finishes', 'finish'], + ['warrants', 'warrant'], + ['violates', 'violate'], + ['discovers', 'discover'], + ['hears', 'hear'], + ['lags', 'lag'], + ['symbolizes', 'symbolize'], + ['underlies', 'underlie'], + ['accrues', 'accrue'], + ['characterizes', 'characterize'], + ['contravenes', 'contravene'], + ['admits', 'admit'], + ['consumes', 'consume'], + ['survives', 'survive'], + ['inspires', 'inspire'], + ['registers', 'register'], + ['succeeds', 'succeed'], + ['compiles', 'compile'], + ['expenditures', 'expenditure'], + ['devotes', 'devote'], + ['entitles', 'entitle'], + ['denies', 'deny'], + ['triggers', 'trigger'], + ['disagrees', 'disagree'], + ['alters', 'alter'], + ['impedes', 'impede'], + ['unveils', 'unveil'], + ['questions', 'question'], + ['revolves', 'revolve'], + ['discourages', 'discourage'], + ['secures', 'secure'], + ['edits', 'edit'], + ['unites', 'unite'], + ['suspects', 'suspect'], + ['thanks', 'thank'], + ['prescribes', 'prescribe'], + ['tours', 'tour'], + ['owes', 'owe'], + ['licences', 'licence'], + ['unfolds', 'unfold'], + ['comments', 'comment'], + ['strikes', 'strike'], + ['attains', 'attain'], + ['infringes', 'infringe'], + ['cooperates', 'cooperate'], + ['simplifies', 'simplify'], + ['regrets', 'regret'], + ['flies', 'fly'], + ['averages', 'average'], + ['touches', 'touch'], + ['applauds', 'applaud'], + ['compensates', 'compensate'], + ['supplements', 'supplement'], + ['sizes', 'size'], + ['forwards', 'forward'], + ['analyses', 'analyse'], + ['divides', 'divide'], + ['dictates', 'dictate'], + ['inhibits', 'inhibit'], + ['reproduces', 'reproduce'], + ['weighs', 'weigh'], + ['rewards', 'reward'], + ['exposes', 'expose'], + ['withdraws', 'withdraw'], + ['predominates', 'predominate'], + ['boosts', 'boost'], + ['destroys', 'destroy'], + ['disciplines', 'discipline'], + ['consolidates', 'consolidate'], + ['approximates', 'approximate'], + ['elects', 'elect'], + ['trains', 'train'], + ['shapes', 'shape'], + ['educates', 'educate'], + ['bases', 'base'], + ['codes', 'code'], + ['attests', 'attest'], + ['ages', 'age'], + ['rejects', 'reject'], + ['stops', 'stop'], + ['listens', 'listen'], + ['saves', 'save'], + ['figures', 'figure'], + ['commends', 'commend'], + ['commemorates', 'commemorate'], + ['parts', 'part'], + ['graduates', 'graduate'], + ['motivates', 'motivate'], + ['sustains', 'sustain'], + ['ignores', 'ignore'], + ['obliges', 'oblige'], + ['flocks', 'flock'], + ['effects', 'effect'], + ['warns', 'warn'], + ['bodes', 'bode'], + ['recognises', 'recognise'], + ['gains', 'gain'], + ['positions', 'position'], + ['liaises', 'liaise'], + ['transforms', 'transform'], + ['retires', 'retire'], + ['exempts', 'exempt'], + ['accomplishes', 'accomplish'], + ['recruits', 'recruit'], + ['underpins', 'underpin'], + ['fulfils', 'fulfil'], + ['perceives', 'perceive'], + ['restores', 'restore'], + ['broadens', 'broaden'], + ['declines', 'decline'], + ['accumulates', 'accumulate'], + ['practises', 'practise'], + ['alerts', 'alert'], + ['congratulates', 'congratulate'], + ['shifts', 'shift'], + ['resonates', 'resonate'], + ['maps', 'map'], + ['surveys', 'survey'], + ['sounds', 'sound'], + ['learns', 'learn'], + ['intervenes', 'intervene'], + ['induces', 'induce'], + ['hinders', 'hinder'], + ['streamlines', 'streamline'], + ['searches', 'search'], + ['committees', 'committee'], + ['outweighs', 'outweigh'], + ['traces', 'trace'], + ['interferes', 'interfere'], + ['ents', 'ent'], + ['weakens', 'weaken'], + ['skirts', 'skirt'], + ['risks', 'risk'], + ['reimburses', 'reimburse'], + ['cares', 'care'], + ['finances', 'finance'], + ['separates', 'separate'], + ['hurts', 'hurt'], + ['supervises', 'supervise'], + ['stretches', 'stretch'], + ['charts', 'chart'], + ['complicates', 'complicate'], + ['upholds', 'uphold'], + ['remits', 'remit'], + ['renews', 'renew'], + ['excels', 'excel'], + ['checks', 'check'], + ['packages', 'package'], + ['trips', 'trip'], + ['likes', 'like'], + ['instructs', 'instruct'], + ['tubes', 'tube'], + ['disappears', 'disappear'], + ['presses', 'press'], + ['exerts', 'exert'], + ['transcends', 'transcend'], + ['videotapes', 'videotape'], + ['factors', 'factor'], + ['reacts', 'react'], + ['mixes', 'mix'], + ['envisages', 'envisage'], + ['sheds', 'shed'], + ['closes', 'close'], + ['relieves', 'relieve'], + ['stabilizes', 'stabilize'], + ['functions', 'function'], + ['notices', 'notice'], + ['catalogues', 'catalogue'], + ['surrounds', 'surround'], + ['inquires', 'inquire'], + ['briefs', 'brief'], + ['blouses', 'blouse'], + ['resolves', 'resolve'], + ['solicits', 'solicit'], + ['surpasses', 'surpass'], + ['hits', 'hit'], + ['caters', 'cater'], + ['recovers', 'recover'], + ['purports', 'purport'], + ['farms', 'farm'], + ['aids', 'aid'], + ['cultures', 'culture'], + ['ties', 'tie'], + ['presupposes', 'presuppose'], + ['endeavours', 'endeavour'], + ['widens', 'widen'], + ['doubles', 'double'], + ['suits', 'suit'], + ['interests', 'interest'], + ['thrives', 'thrive'], + ['crafts', 'craft'], + ['struggles', 'struggle'], + ['furthers', 'further'], + ['greets', 'greet'], + ['proclaims', 'proclaim'], + ['subjects', 'subject'], + ['blocks', 'block'], + ['interviews', 'interview'], + ['unloads', 'unload'], + ['clamps', 'clamp'], + ['levies', 'levy'], + ['lectures', 'lecture'], + ['munitions', 'munition'], + ['prints', 'print'], + ['correlates', 'correlate'], + ['walks', 'walk'], + ['hinges', 'hinge'], + ['springs', 'spring'], + ['nurtures', 'nurture'], + ['quotes', 'quote'], + ['enacts', 'enact'], + ['screens', 'screen'], + ['leases', 'lease'], + ['counsels', 'counsel'], + ['concurs', 'concur'], + ['lessons', 'lesson'], + ['absorbs', 'absorb'], + ['lambs', 'lamb'], + ['manifests', 'manifest'], + ['reprints', 'reprint'], + ['optimizes', 'optimize'], + ['routes', 'route'], + ['prides', 'pride'], + ['contracts', 'contract'], + ['equates', 'equate'], + ['types', 'type'], + ['tables', 'table'], + ['remembers', 'remember'], + ['loves', 'love'], + ['adapts', 'adapt'], + ['replies', 'reply'], + ['delineates', 'delineate'], + ['drains', 'drain'], + ['beetles', 'beetle'], + ['bridges', 'bridge'], + ['merits', 'merit'], + ['screws', 'screw'], + ['shakes', 'shake'], + ['tops', 'top'], + ['institutes', 'institute'], + ['categorizes', 'categorize'], + ['trails', 'trail'], + ['desires', 'desire'], + ['contents', 'content'], + ['narrows', 'narrow'], + ['executes', 'execute'], + ['repeats', 'repeat'], + ['sports', 'sport'], + ['echoes', 'echo'], + ['erodes', 'erode'], + ['casts', 'cast'], + ['connotes', 'connote'], + ['fluctuates', 'fluctuate'], + ['imparts', 'impart'], + ['objects', 'object'], + ['replicates', 'replicate'], + ['hampers', 'hamper'], + ['centers', 'center'], + ['picks', 'pick'], + ['capitalizes', 'capitalize'], + ['differentiates', 'differentiate'], + ['commissions', 'commission'], + ['dedicates', 'dedicate'], + ['trades', 'trade'], + ['overcomes', 'overcome'], + ['circumvents', 'circumvent'], + ['detects', 'detect'], + ['disposes', 'dispose'], + ['opposes', 'oppose'], + ['prompts', 'prompt'], + ['borrows', 'borrow'], + ['modifies', 'modify'], + ['conserves', 'conserve'], + ['mitigates', 'mitigate'], + ['researches', 'research'], + ['uncovers', 'uncover'], + ['depreciates', 'depreciate'], + ['encounters', 'encounter'], + ['favors', 'favor'], + ['fuels', 'fuel'], + ['entertains', 'entertain'], + ['pushes', 'push'], + ['aspires', 'aspire'], + ['subscribes', 'subscribe'], + ['exacerbates', 'exacerbate'], + ['settles', 'settle'], + ['subsists', 'subsist'], + ['misses', 'miss'], + ['salts', 'salt'], + ['simulates', 'simulate'], + ['advertises', 'advertise'], + ['rules', 'rule'], + ['activates', 'activate'], + ['appeals', 'appeal'], + ['talks', 'talk'], + ['damages', 'damage'], + ['reverses', 'reverse'], + ['pulls', 'pull'], + ['assembles', 'assemble'], + ['bestows', 'bestow'], + ['contemplates', 'contemplate'], + ['wears', 'wear'], + ['elaborates', 'elaborate'], + ['discounts', 'discount'], + ['courses', 'course'], + ['watches', 'watch'], + ['mediates', 'mediate'], + ['frames', 'frame'], + ['cops', 'cop'], + ['jackets', 'jacket'], + ['begs', 'beg'], + ['tools', 'tool'], + ['sites', 'site'], + ['recounts', 'recount'], + ['masks', 'mask'], + ['evokes', 'evoke'], + ['surfaces', 'surface'], + ['eases', 'ease'], + ['tiers', 'tier'], + ['paints', 'paint'], + ['logs', 'log'], + ['frees', 'free'], + ['compounds', 'compound'], + ['marries', 'marry'], + ['derogates', 'derogate'], + ['impairs', 'impair'], + ['disrupts', 'disrupt'], + ['corrects', 'correct'], + ['defends', 'defend'], + ['quantifies', 'quantify'], + ['foresees', 'foresee'], + ['streams', 'stream'], + ['transacts', 'transact'], + ['constrains', 'constrain'], + ['exits', 'exit'], + ['looms', 'loom'], + ['mails', 'mail'], + ['stages', 'stage'], + ['labels', 'label'], + ['hooks', 'hook'], + ['dresses', 'dress'], + ['shorts', 'short'], + ['mars', 'mar'], + ['cautions', 'caution'], + ['plugs', 'plug'], + ['convenes', 'convene'], + ['forbids', 'forbid'], + ['rents', 'rent'], + ['speeds', 'speed'], + ['intersects', 'intersect'], + ['deprives', 'deprive'], + ['testifies', 'testify'], + ['formulates', 'formulate'], + ['resigns', 'resign'], + ['neglects', 'neglect'], + ['corroborates', 'corroborate'], + ['substantiates', 'substantiate'], + ['spells', 'spell'], + ['degrades', 'degrade'], + ['inspects', 'inspect'], + ['combs', 'comb'], + ['worsens', 'worsen'], + ['grains', 'grain'], + ['purposes', 'purpose'], + ['chapters', 'chapter'], + ['saws', 'saw'], + ['precedes', 'precede'], + ['radios', 'radio'], + ['prises', 'prise'], + ['deploys', 'deploy'], + ['injects', 'inject'], + ['awaits', 'await'], + ['fields', 'field'], + ['summarises', 'summarise'], + ['behaves', 'behave'], + ['beats', 'beat'], + ['pairs', 'pair'], + ['boils', 'boil'], + ['senses', 'sense'], + ['accords', 'accord'], + ['culminates', 'culminate'], + ['structures', 'structure'], + ['mobilizes', 'mobilize'], + ['opts', 'opt'], + ['budgets', 'budget'], + ['equips', 'equip'], + ['rots', 'rot'], + ['privileges', 'privilege'], + ['switches', 'switch'], + ['ships', 'ship'], + ['ensues', 'ensue'], + ['outstrips', 'outstrip'], + ['posits', 'posit'], + ['confronts', 'confront'], + ['diverts', 'divert'], + ['honors', 'honor'], + ['antiques', 'antique'], + ['baffles', 'baffle'], + ['gloves', 'glove'], + ['enlists', 'enlist'], + ['parties', 'party'], + ['filters', 'filter'], + ['stores', 'store'], + ['encapsulates', 'encapsulate'], + ['scales', 'scale'], + ['insures', 'insure'], + ['heats', 'heat'], + ['bars', 'bar'], + ['compromises', 'compromise'], + ['exploits', 'exploit'], + ['washes', 'wash'], + ['cultivates', 'cultivate'], + ['deepens', 'deepen'], + ['praises', 'praise'], + ['validates', 'validate'], + ['upgrades', 'upgrade'], + ['mimics', 'mimic'], + ['abrogates', 'abrogate'], + ['supposes', 'suppose'], + ['detracts', 'detract'], + ['predates', 'predate'], + ['contradicts', 'contradict'], + ['images', 'image'], + ['soils', 'soil'], + ['calves', 'calve'], + ['dries', 'dry'], + ['infests', 'infest'], + ['strips', 'strip'], + ['invoices', 'invoice'], + ['disburses', 'disburse'], + ['distorts', 'distort'], + ['kernels', 'kernel'], + ['deteriorates', 'deteriorate'], + ['aggregates', 'aggregate'], + ['nourishes', 'nourish'], + ['encrypts', 'encrypt'], + ['afflicts', 'afflict'], + ['yarns', 'yarn'], + ['burns', 'burn'], + ['chronicles', 'chronicle'], + ['amalgamates', 'amalgamate'], + ['solves', 'solve'], + ['partners', 'partner'], + ['refines', 'refine'], + ['conjures', 'conjure'], + ['overlooks', 'overlook'], + ['intensifies', 'intensify'], + ['aliments', 'aliment'], + ['lifts', 'lift'], + ['gears', 'gear'], + ['trends', 'trend'], + ['salutes', 'salute'], + ['isolates', 'isolate'], + ['offends', 'offend'], + ['doubts', 'doubt'], + ['paves', 'pave'], + ['commands', 'command'], + ['drafts', 'draft'], + ['inserts', 'insert'], + ['requisitions', 'requisition'], + ['crops', 'crop'], + ['berries', 'berry'], + ['suppresses', 'suppress'], + ['cases', 'case'], + ['harms', 'harm'], + ['caps', 'cap'], + ['diffuses', 'diffuse'], + ['seals', 'seal'], + ['defers', 'defer'], + ['intercepts', 'intercept'], + ['clears', 'clear'], + ['nets', 'net'], + ['backs', 'back'], + ['copies', 'copy'], + ['bills', 'bill'], + ['revises', 'revise'], + ['tutors', 'tutor'], + ['fears', 'fear'], + ['grades', 'grade'], + ['reinvests', 'reinvest'], + ['outpaces', 'outpace'], + ['abounds', 'abound'], + ['distils', 'distil'], + ['reasons', 'reason'], + ['disputes', 'dispute'], + ['donates', 'donate'], + ['evaporates', 'evaporate'], + ['materializes', 'materialize'], + ['stars', 'star'], + ['channels', 'channel'], + ['sums', 'sum'], + ['permeates', 'permeate'], + ['packs', 'pack'], + ['installs', 'install'], + ['overrides', 'override'], + ['defeats', 'defeat'], + ['medals', 'medal'], + ['withholds', 'withhold'], + ['pledges', 'pledge'], + ['rolls', 'roll'], + ['conceals', 'conceal'], + ['displaces', 'displace'], + ['outperforms', 'outperform'], + ['emits', 'emit'], + ['welds', 'weld'], + ['bands', 'band'], + ['conflicts', 'conflict'], + ['formalizes', 'formalize'], + ['oils', 'oil'], + ['slugs', 'slug'], + ['collapses', 'collapse'], + ['catches', 'catch'], + ['repays', 'repay'], + ['duplicates', 'duplicate'], + ['lessens', 'lessen'], + ['interchanges', 'interchange'], + ['compels', 'compel'], + ['rows', 'row'], + ['augments', 'augment'], + ['postulates', 'postulate'], + ['complains', 'complain'], + ['consents', 'consent'], + ['navigates', 'navigate'], + ['chats', 'chat'], + ['scans', 'scan'], + ['shocks', 'shock'], + ['suspends', 'suspend'], + ['circulates', 'circulate'], + ['wonders', 'wonder'], + ['airs', 'air'], + ['proscribes', 'proscribe'], + ['conditions', 'condition'], + ['games', 'game'], + ['nominates', 'nominate'], + ['detains', 'detain'], + ['spills', 'spill'], + ['embarks', 'embark'], + ['orders', 'order'], + ['kicks', 'kick'], + ['rates', 'rate'], + ['stews', 'stew'], + ['reaps', 'reap'], + ['avails', 'avail'], + ['descends', 'descend'], + ['remarks', 'remark'], + ['innovates', 'innovate'], + ['disperses', 'disperse'], + ['constructs', 'construct'], + ['disables', 'disable'], + ['cleans', 'clean'], + ['presumes', 'presume'], + ['invokes', 'invoke'], + ['fixes', 'fix'], + ['sprouts', 'sprout'], + ['sacrifices', 'sacrifice'], + ['groups', 'group'], + ['codifies', 'codify'], + ['convicts', 'convict'], + ['locks', 'lock'], + ['teams', 'team'], + ['multiplies', 'multiply'], + ['remedies', 'remedy'], + ['items', 'item'], + ['copyrights', 'copyright'], + ['fees', 'fee'], + ['waives', 'waive'], + ['elicits', 'elicit'], + ['cancels', 'cancel'], + ['pastures', 'pasture'], + ['blights', 'blight'], + ['deposits', 'deposit'], + ['predisposes', 'predispose'], + ['omits', 'omit'], + ['counters', 'counter'], + ['solidifies', 'solidify'], + ['tolerates', 'tolerate'], + ['empties', 'empty'], + ['dampens', 'dampen'], + ['curves', 'curve'], + ['tackles', 'tackle'], + ['rotates', 'rotate'], + ['disadvantages', 'disadvantage'], + ['reconciles', 'reconcile'], + ['legislates', 'legislate'], + ['provisions', 'provision'], + ['pervades', 'pervade'], + ['condemns', 'condemn'], + ['dovetails', 'dovetail'], + ['undercuts', 'undercut'], + ['mounts', 'mount'], + ['penalizes', 'penalize'], + ['safeguards', 'safeguard'], + ['entrenches', 'entrench'], + ['authenticates', 'authenticate'], + ['brevets', 'brevet'], + ['adjudicates', 'adjudicate'], + ['pads', 'pad'], + ['rescinds', 'rescind'], + ['stamps', 'stamp'], + ['consigns', 'consign'], + ['hats', 'hat'], + ['halts', 'halt'], + ['pillars', 'pillar'], + ['practices', 'practice'], + ['emanates', 'emanate'], + ['retrofits', 'retrofit'], + ['blends', 'blend'], + ['repairs', 'repair'], + ['retrieves', 'retrieve'], + ['abandons', 'abandon'], + ['names', 'name'], + ['redistributes', 'redistribute'], + ['automates', 'automate'], + ['excites', 'excite'], + ['tightens', 'tighten'], + ['softens', 'soften'], + ['fires', 'fire'], + ['nears', 'near'], + ['articles', 'article'], + ['hangs', 'hang'], + ['spurs', 'spur'], + ['escapes', 'escape'], + ['tips', 'tip'], + ['throws', 'throw'], + ['hails', 'hail'], + ['sings', 'sing'], + ['furnishes', 'furnish'], + ['smiles', 'smile'], + ['reverts', 'revert'], + ['bypasses', 'bypass'], + ['votes', 'vote'], + ['harbours', 'harbour'], + ['tailors', 'tailor'], + ['proteins', 'protein'], + ['resins', 'resin'], + ['invades', 'invade'], + ['escalates', 'escalate'], + ['deters', 'deter'], + ['resists', 'resist'], + ['powers', 'power'], + ['instills', 'instill'], + ['audits', 'audit'], + ['sands', 'sand'], + ['gauges', 'gauge'], + ['neighbours', 'neighbour'], + ['synthesizes', 'synthesize'], + ['voices', 'voice'], + ['abides', 'abide'], + ['earmarks', 'earmark'], + ['fruits', 'fruit'], + ['ducks', 'duck'], + ['pods', 'pod'], + ['shoots', 'shoot'], + ['shrinks', 'shrink'], + ['splits', 'split'], + ['rings', 'ring'], + ['nuts', 'nut'], + ['sponges', 'sponge'], + ['crushes', 'crush'], + ['penetrates', 'penetrate'], + ['vests', 'vest'], + ['borders', 'border'], + ['accentuates', 'accentuate'], + ['heralds', 'herald'], + ['obeys', 'obey'], + ['parallels', 'parallel'], + ['levers', 'lever'], + ['rights', 'right'], + ['hogs', 'hog'], + ['steers', 'steer'], + ['surprises', 'surprise'], + ['jeopardizes', 'jeopardize'], + ['infuses', 'infuse'], + ['merges', 'merge'], + ['dissipates', 'dissipate'], + ['elapses', 'elapse'], + ['fins', 'fin'], + ['discriminates', 'discriminate'], + ['seizes', 'seize'], + ['revitalizes', 'revitalize'], + ['enlightens', 'enlighten'], + ['coproduces', 'coproduce'], + ['formats', 'format'], + ['suffices', 'suffice'], + ['revokes', 'revoke'], + ['programs', 'program'], + ['scores', 'score'], + ['inaugurates', 'inaugurate'], + ['boards', 'board'], + ['sensitizes', 'sensitize'], + ['fuses', 'fuse'], + ['pages', 'page'], + ['demeans', 'demean'], + ['dogs', 'dog'], + ['expedites', 'expedite'], + ['disorders', 'disorder'], + ['plates', 'plate'], + ['alloys', 'alloy'], + ['bits', 'bit'], + ['slats', 'slat'], + ['relaunches', 'relaunch'], + ['circumscribes', 'circumscribe'], + ['mingles', 'mingle'], + ['fairs', 'fair'], + ['centralizes', 'centralize'], + ['deletes', 'delete'], + ['breaches', 'breach'], + ['procures', 'procure'], + ['seats', 'seat'], + ['skews', 'skew'], + ['interrupts', 'interrupt'], + ['worries', 'worry'], + ['cycles', 'cycle'], + ['underestimates', 'underestimate'], + ['probes', 'probe'], + ['cools', 'cool'], + ['illuminates', 'illuminate'], + ['funnels', 'funnel'], + ['fascinates', 'fascinate'], + ['windows', 'window'], + ['inspectors', 'inspector'], + ['floats', 'float'], + ['adorns', 'adorn'], + ['oxidizes', 'oxidize'], + ['cherishes', 'cherish'], + ['sanctions', 'sanction'], + ['obstructs', 'obstruct'], + ['founds', 'found'], + ['breathes', 'breathe'], + ['epitomizes', 'epitomize'], + ['endures', 'endure'], + ['cries', 'cry'], + ['meters', 'meter'], + ['champions', 'champion'], + ['endangers', 'endanger'], + ['contours', 'contour'], + ['abstracts', 'abstract'], + ['surrenders', 'surrender'], + ['enrols', 'enrol'], + ['sticks', 'stick'], + ['overlays', 'overlay'], + ['cows', 'cow'], + ['bans', 'ban'], + ['delays', 'delay'], + ['eats', 'eat'], + ['warms', 'warm'], + ['pellets', 'pellet'], + ['wafers', 'wafer'], + ['depresses', 'depress'], + ['blurs', 'blur'], + ['deviates', 'deviate'], + ['discharges', 'discharge'], + ['scouts', 'scout'], + ['vents', 'vent'], + ['mills', 'mill'], + ['bids', 'bid'], + ['garners', 'garner'], + ['understates', 'understate'], + ['eggs', 'egg'], + ['pens', 'pen'], + ['recreates', 'recreate'], + ['amplifies', 'amplify'], + ['judges', 'judge'], + ['models', 'model'], + ['accesses', 'access'], + ['environs', 'environ'], + ['pins', 'pin'], + ['implicates', 'implicate'], + ['enshrines', 'enshrine'], + ['engenders', 'engender'], + ['spikes', 'spike'], + ['deplores', 'deplore'], + ['reorganizes', 'reorganize'], + ['entrusts', 'entrust'], + ['abuses', 'abuse'], + ['comports', 'comport'], + ['organises', 'organise'], + ['warehouses', 'warehouse'], + ['forges', 'forge'], + ['dispenses', 'dispense'], + ['prosecutes', 'prosecute'], + ['scissors', 'scissor'], + ['queries', 'query'], + ['bastes', 'baste'], + ['stuffs', 'stuff'], + ['elucidates', 'elucidate'], + ['ascribes', 'ascribe'], + ['encodes', 'encode'], + ['prolongs', 'prolong'], + ['leans', 'lean'], + ['negates', 'negate'], + ['officers', 'officer'], + ['graves', 'grave'], + ['propositions', 'proposition'], + ['shingles', 'shingle'], + ['readies', 'ready'], + ['weaves', 'weave'], + ['ponders', 'ponder'], + ['sorts', 'sort'], + ['augurs', 'augur'], + ['unlocks', 'unlock'], + ['cements', 'cement'], + ['locates', 'locate'], + ['criticizes', 'criticize'], + ['disturbs', 'disturb'], + ['subcontracts', 'subcontract'], + ['emphasises', 'emphasise'], + ['trusts', 'trust'], + ['relaxes', 'relax'], + ['resorts', 'resort'], + ['pumps', 'pump'], + ['waits', 'wait'], + ['vacations', 'vacation'], + ['jumps', 'jump'], + ['escorts', 'escort'], + ['inflates', 'inflate'], + ['melts', 'melt'], + ['buckles', 'buckle'], + ['recycles', 'recycle'], + ['wraps', 'wrap'], + ['blooms', 'bloom'], + ['smells', 'smell'], + ['loads', 'load'], + ['sketches', 'sketch'], + ['jokes', 'joke'], + ['erases', 'erase'], + ['dimensions', 'dimension'], + ['concedes', 'concede'], + ['defies', 'defy'], + ['plants', 'plant'], + ['presides', 'preside'], + ['belies', 'belie'], + ['hastens', 'hasten'], + ['bankrupts', 'bankrupt'], + ['discontinues', 'discontinue'], + ['redirects', 'redirect'], + ['firms', 'firm'], + ['discredits', 'discredit'], + ['pressures', 'pressure'], + ['footnotes', 'footnote'], + ['exchanges', 'exchange'], + ['photocopies', 'photocopy'], + ['photographs', 'photograph'], + ['instances', 'instance'], + ['colours', 'colour'], + ['perpetuates', 'perpetuate'], + ['trees', 'tree'], + ['rejoins', 'rejoin'], + ['pales', 'pale'], + ['migrates', 'migrate'], + ['pupates', 'pupate'], + ['yellows', 'yellow'], + ['parasitizes', 'parasitize'], + ['ripens', 'ripen'], + ['encloses', 'enclose'], + ['heals', 'heal'], + ['preys', 'prey'], + ['forfeits', 'forfeit'], + ['keys', 'key'], + ['arouses', 'arouse'], + ['endeavors', 'endeavor'], + ['specialises', 'specialise'], + ['waxes', 'wax'], + ['dissolves', 'dissolve'], + ['insulates', 'insulate'], + ['traps', 'trap'], + ['slopes', 'slope'], + ['heightens', 'heighten'], + ['shuts', 'shut'], + ['franchises', 'franchise'], + ['indexes', 'index'], + ['ameliorates', 'ameliorate'], + ['triples', 'triple'], + ['catalyzes', 'catalyze'], + ['regroups', 'regroup'], + ['holidays', 'holiday'], + ['converges', 'converge'], + ['swaps', 'swap'], + ['exhausts', 'exhaust'], + ['supplants', 'supplant'], + ['reconvenes', 'reconvene'], + ['modernizes', 'modernize'], + ['leafs', 'leaf'], + ['shines', 'shine'], + ['familiarizes', 'familiarize'], + ['tongues', 'tongue'], + ['chances', 'chance'], + ['numbers', 'number'], + ['refrains', 'refrain'], + ['fades', 'fade'], + ['retails', 'retail'], + ['ratifies', 'ratify'], + ['alludes', 'allude'], + ['enunciates', 'enunciate'], + ['rouges', 'rouge'], + ['embeds', 'embed'], + ['decrypts', 'decrypt'], + ['upsets', 'upset'], + ['demotes', 'demote'], + ['friends', 'friend'], + ['wows', 'wow'], + ['restates', 'restate'], + ['conceives', 'conceive'], + ['dwarfs', 'dwarf'], + ['relocates', 'relocate'], + ['infers', 'infer'], + ['taboos', 'taboo'], + ['expends', 'expend'], + ['obligates', 'obligate'], + ['combats', 'combat'], + ['belittles', 'belittle'], + ['conspires', 'conspire'], + ['peoples', 'people'], + ['conflates', 'conflate'], + ['collates', 'collate'], + ['shears', 'shear'], + ['wheels', 'wheel'], + ['conjugates', 'conjugate'], + ['glazes', 'glaze'], + ['taps', 'tap'], + ['retorts', 'retort'], + ['bottoms', 'bottom'], + ['hikes', 'hike'], + ['peddles', 'peddle'], + ['mulls', 'mull'], + ['rues', 'rue'], + ['utilises', 'utilise'], + ['pops', 'pop'], + ['underwrites', 'underwrite'], + ['stirs', 'stir'], + ['aggravates', 'aggravate'], + ['vies', 'vie'], + ['sues', 'sue'], + ['diverges', 'diverge'], + ['situates', 'situate'], + ['plots', 'plot'], + ['billets', 'billet'], + ['compliments', 'compliment'], + ['pours', 'pour'], + ['stocks', 'stock'], + ['dares', 'dare'], + ['skips', 'skip'], + ['propagates', 'propagate'], + ['breeds', 'breed'], + ['typifies', 'typify'], + ['liquefies', 'liquefy'], + ['pinpoints', 'pinpoint'], + ['winds', 'wind'], + ['transpires', 'transpire'], + ['disapproves', 'disapprove'], + ['admires', 'admire'], + ['gifts', 'gift'], + ['finalizes', 'finalize'], + ['floods', 'flood'], + ['deducts', 'deduct'], + ['prejudices', 'prejudice'], + ['assents', 'assent'], + ['revives', 'revive'], + ['disqualifies', 'disqualify'], + ['enquires', 'enquire'], + ['refutes', 'refute'], + ['pivots', 'pivot'], + ['revisits', 'revisit'], + ['calibrates', 'calibrate'], + ['gasses', 'gas'], + ['covenants', 'covenant'], + ['supercedes', 'supercede'], + ['harvests', 'harvest'], + ['postpones', 'postpone'], + ['reconsiders', 'reconsider'], + ['invents', 'invent'], + ['wipes', 'wipe'], + ['confines', 'confine'], + ['rekindles', 'rekindle'], + ['fights', 'fight'], + ['chains', 'chain'], + ['enrolls', 'enroll'], + ['rusts', 'rust'], + ['manipulates', 'manipulate'], + ['gouges', 'gouge'], + ['germinates', 'germinate'], + ['disintegrates', 'disintegrate'], + ['obscures', 'obscure'], + ['inhabits', 'inhabit'], + ['sporulates', 'sporulate'], + ['thickens', 'thicken'], + ['coats', 'coat'], + ['contaminates', 'contaminate'], + ['fats', 'fat'], + ['charters', 'charter'], + ['bins', 'bin'], + ['slices', 'slice'], + ['thins', 'thin'], + ['hives', 'hive'], + ['depletes', 'deplete'], + ['stations', 'station'], + ['pits', 'pit'], + ['closures', 'closure'], + ['clogs', 'clog'], + ['lengthens', 'lengthen'], + ['needles', 'needle'], + ['decomposes', 'decompose'], + ['blankets', 'blanket'], + ['corrodes', 'corrode'], + ['stifles', 'stifle'], + ['scares', 'scare'], + ['hints', 'hint'], + ['speculates', 'speculate'], + ['frustrates', 'frustrate'], + ['harmonizes', 'harmonize'], + ['pools', 'pool'], + ['tabulates', 'tabulate'], + ['subsides', 'subside'], + ['subtracts', 'subtract'], + ['overstates', 'overstate'], + ['characters', 'character'], + ['paws', 'paw'], + ['wages', 'wage'], + ['resets', 'reset'], + ['enumerates', 'enumerate'], + ['peers', 'peer'], + ['internalizes', 'internalize'], + ['laughs', 'laugh'], + ['coops', 'coop'], + ['pretends', 'pretend'], + ['errs', 'err'], + ['allowances', 'allowance'], + ['anchors', 'anchor'], + ['weights', 'weight'], + ['lunches', 'lunch'], + ['checkers', 'checker'], + ['redefines', 'redefine'], + ['befits', 'befit'], + ['disregards', 'disregard'], + ['expertises', 'expertise'], + ['spotlights', 'spotlight'], + ['publicizes', 'publicize'], + ['times', 'time'], + ['premiers', 'premier'], + ['champs', 'champ'], + ['endows', 'endow'], + ['symbols', 'symbol'], + ['occasions', 'occasion'], + ['lobbies', 'lobby'], + ['refocuses', 'refocuse'], + ['branches', 'branch'], + ['dislikes', 'dislike'], + ['freezes', 'freeze'], + ['decodes', 'decode'], + ['confounds', 'confound'], + ['eludes', 'elude'], + ['reasserts', 'reassert'], + ['primes', 'prime'], + ['relinquishes', 'relinquish'], + ['overstocks', 'overstock'], + ['excepts', 'except'], + ['stalls', 'stall'], + ['sails', 'sail'], + ['arches', 'arch'], + ['passages', 'passage'], + ['recurs', 'recur'], + ['trumps', 'trump'], + ['frequents', 'frequent'], + ['litigates', 'litigate'], + ['abolishes', 'abolish'], + ['defects', 'defect'], + ['doses', 'dose'], + ['chauffeurs', 'chauffeur'], + ['teasels', 'teasel'], + ['bitters', 'bitter'], + ['rails', 'rail'], + ['scrubs', 'scrub'], + ['ornaments', 'ornament'], + ['brackets', 'bracket'], + ['traverses', 'traverse'], + ['transits', 'transit'], + ['excuses', 'excuse'], + ['fulminates', 'fulminate'], + ['torches', 'torch'], + ['shovels', 'shovel'], + ['eyelets', 'eyelet'], + ['carillons', 'carillon'], + ['garlands', 'garland'], + ['reassures', 'reassure'], + ['samples', 'sample'], + ['resells', 'resell'], + ['slates', 'slate'], + ['referees', 'referee'], + ['troubles', 'trouble'], + ['inhales', 'inhale'], + ['bullies', 'bully'], + ['repeals', 'repeal'], + ['quits', 'quit'], + ['disobeys', 'disobey'], + ['persuades', 'persuade'], + ['reprises', 'reprise'], + ['couches', 'couch'], + ['disassociates', 'disassociate'], + ['crashes', 'crash'], + + [ + 'singles', + 'single', + 2 + ], + ['scrutinizes', 'scrutinize'], + ['realigns', 'realign'], + ['entices', 'entice'], + ['elevates', 'elevate'], + ['awakens', 'awaken'], + ['contests', 'contest'], + ['schedules', 'schedule'], + ['magnifies', 'magnify'], + ['couples', 'couple'], + ['fares', 'fare'], + ['hovers', 'hover'], + ['debuts', 'debut'], + ['dazzles', 'dazzle'], + ['patrols', 'patrol'], + ['rumbles', 'rumble'], + ['curls', 'curl'], + ['glints', 'glint'], + ['seduces', 'seduce'], + ['steals', 'steal'], + ['incinerates', 'incinerate'], + ['sparks', 'spark'], + ['chambers', 'chamber'], + ['ascends', 'ascend'], + ['clusters', 'cluster'], + ['vaporizes', 'vaporize'], + ['commercializes', 'commercialize'], + ['dips', 'dip'], + ['enthuses', 'enthuse'], + ['restrains', 'restrain'], + ['thwarts', 'thwart'], + ['ripples', 'ripple'], + ['saps', 'sap'], + ['entraps', 'entrap'], + ['humiliates', 'humiliate'], + ['grounds', 'ground'], + ['bowls', 'bowl'], + ['appropriates', 'appropriate'], + ['nullifies', 'nullify'], + ['rubbers', 'rubber'], + ['glues', 'glue'], + ['polishes', 'polish'], + ['inks', 'ink'], + ['sifts', 'sift'], + ['defrays', 'defray'], + ['annotates', 'annotate'], + ['associates', 'associate'], + ['headlines', 'headline'], + ['layers', 'layer'], + ['accents', 'accent'], + ['juggles', 'juggle'], + ['skates', 'skate'], + ['protests', 'protest'], + ['patents', 'patent'], + ['lapses', 'lapse'], + ['gravitates', 'gravitate'], + ['surnames', 'surname'], + ['alarms', 'alarm'], + ['imitates', 'imitate'], + ['inconveniences', 'inconvenience'], + ['doctors', 'doctor'], + ['rebuilds', 'rebuild'], + ['administrates', 'administrate'], + ['sows', 'sow'], + ['disentitles', 'disentitle'], + ['bugs', 'bug'], + ['sprays', 'spray'], + ['stunts', 'stunt'], + ['mates', 'mate'], + ['defoliates', 'defoliate'], + ['burrows', 'burrow'], + ['alleviates', 'alleviate'], + ['encroaches', 'encroach'], + ['buries', 'bury'], + ['secretes', 'secrete'], + ['colonizes', 'colonize'], + ['repels', 'repel'], + ['injures', 'injure'], + ['tastes', 'taste'], + ['debriefs', 'debrief'], + ['flakes', 'flake'], + ['cakes', 'cake'], + ['starches', 'starch'], + ['pegs', 'peg'], + ['diversifies', 'diversify'], + ['hinnies', 'hinny'], + ['seeds', 'seed'], + ['sauces', 'sauce'], + ['squeezes', 'squeeze'], + ['overwhelms', 'overwhelm'], + ['spices', 'spice'], + ['militates', 'militate'], + ['cups', 'cup'], + ['exclaims', 'exclaim'], + ['partakes', 'partake'], + ['guesses', 'guess'], + ['thaws', 'thaw'], + ['leaches', 'leach'], + ['zones', 'zone'], + ['bolsters', 'bolster'], + ['apportions', 'apportion'], + ['surmises', 'surmise'], + ['coils', 'coil'], + ['lines', 'line'], + ['slits', 'slit'], + ['debunks', 'debunk'], + ['overlies', 'overlie'], + ['buffers', 'buffer'], + ['shelves', 'shelve'], + ['lands', 'land'], + ['strains', 'strain'], + ['stagnates', 'stagnate'], + ['exaggerates', 'exaggerate'], + ['hides', 'hide'], + ['blunts', 'blunt'], + ['rivals', 'rival'], + ['minimises', 'minimise'], + ['dwells', 'dwell'], + ['nests', 'nest'], + ['crumbles', 'crumble'], + ['pans', 'pan'], + ['wastes', 'waste'], + ['disengages', 'disengage'], + ['provokes', 'provoke'], + ['disconnects', 'disconnect'], + ['ministers', 'minister'], + ['calendars', 'calendar'], + ['reshapes', 'reshape'], + ['mines', 'mine'], + ['downplays', 'downplay'], + ['burdens', 'burden'], + ['handicaps', 'handicap'], + ['alternates', 'alternate'], + ['internationalizes', 'internationalize'], + ['spawns', 'spawn'], + ['propels', 'propel'], + ['dismisses', 'dismiss'], + ['neutralizes', 'neutralize'], + ['sterilizes', 'sterilize'], + ['sheets', 'sheet'], + ['hypothesizes', 'hypothesize'], + ['chases', 'chase'], + ['unwinds', 'unwind'], + ['incites', 'incite'], + ['blames', 'blame'], + ['overestimates', 'overestimate'], + ['equalizes', 'equalize'], + ['immunizes', 'immunize'], + ['debits', 'debit'], + ['forgoes', 'forgo'], + ['advantages', 'advantage'], + ['dreams', 'dream'], + ['exacts', 'exact'], + ['delves', 'delve'], + ['relays', 'relay'], + ['falters', 'falter'], + ['institutionalizes', 'institutionalize'], + ['inherits', 'inherit'], + ['presages', 'presage'], + ['outnumbers', 'outnumber'], + ['convinces', 'convince'], + ['bulletins', 'bulletin'], + ['spearheads', 'spearhead'], + ['personalizes', 'personalize'], + ['volunteers', 'volunteer'], + ['guests', 'guest'], + ['battles', 'battle'], + ['pockets', 'pocket'], + ['expounds', 'expound'], + ['legitimates', 'legitimate'], + ['sidesteps', 'sidestep'], + ['rosters', 'roster'], + ['paroles', 'parole'], + ['professes', 'profess'], + ['prorates', 'prorate'], + ['disallows', 'disallow'], + ['engulfs', 'engulf'], + ['straddles', 'straddle'], + ['bespeaks', 'bespeak'], + ['laments', 'lament'], + ['discords', 'discord'], + ['propitiates', 'propitiate'], + ['recuperates', 'recuperate'], + ['accedes', 'accede'], + ['behooves', 'behoove'], + ['legalizes', 'legalize'], + ['analogizes', 'analogize'], + ['lingers', 'linger'], + ['traffics', 'traffic'], + ['radiates', 'radiate'], + ['clips', 'clip'], + ['carts', 'cart'], + ['trumpets', 'trumpet'], + ['indemnifies', 'indemnify'], + ['drags', 'drag'], + ['collides', 'collide'], + ['flags', 'flag'], + ['chimes', 'chime'], + ['saddles', 'saddle'], + ['clubs', 'club'], + ['rattles', 'rattle'], + ['harbors', 'harbor'], + ['ruins', 'ruin'], + ['amazes', 'amaze'], + ['revolts', 'revolt'], + ['auditions', 'audition'], + ['serenades', 'serenade'], + ['disassembles', 'disassemble'], + ['subsumes', 'subsume'], + ['petitions', 'petition'], + ['subsidises', 'subsidise'], + ['longs', 'long'], + ['treasures', 'treasure'], + ['overemphasizes', 'overemphasize'], + ['apprises', 'apprise'], + ['initials', 'initial'], + ['rides', 'ride'], + ['marginalizes', 'marginalize'], + ['slumps', 'slump'], + ['premises', 'premise'], + ['taints', 'taint'], + ['mutualizes', 'mutualize'], + ['digitizes', 'digitize'], + ['apprehends', 'apprehend'], + ['arrests', 'arrest'], + ['amnesties', 'amnesty'], + ['cosponsors', 'cosponsor'], + ['mumps', 'mump'], + ['orchestrates', 'orchestrate'], + ['fortifies', 'fortify'], + ['courts', 'court'], + ['wards', 'ward'], + ['plumes', 'plume'], + ['cheats', 'cheat'], + ['stables', 'stable'], + ['delights', 'delight'], + ['berths', 'berth'], + ['clocks', 'clock'], + ['cooks', 'cook'], + ['roughs', 'rough'], + ['slides', 'slide'], + ['fastens', 'fasten'], + ['repositions', 'reposition'], + ['folds', 'fold'], + ['encircles', 'encircle'], + ['tows', 'tow'], + ['defaces', 'deface'], + ['mats', 'mat'], + ['hoses', 'hose'], + ['recalculates', 'recalculate'], + ['docks', 'dock'], + ['tires', 'tire'], + ['disembarks', 'disembark'], + ['belts', 'belt'], + ['coins', 'coin'], + ['offloads', 'offload'], + ['stows', 'stow'], + ['waters', 'water'], + ['tents', 'tent'], + ['jars', 'jar'], + ['sulphonates', 'sulphonate'], + ['burrs', 'burr'], + ['plows', 'plow'], + ['cranes', 'crane'], + ['brushes', 'brush'], + ['buoys', 'buoy'], + ['roots', 'root'], + ['powders', 'powder'], + ['drills', 'drill'], + ['blanks', 'blank'], + ['cables', 'cable'], + ['garments', 'garment'], + ['pipes', 'pipe'], + ['tiles', 'tile'], + ['compresses', 'compress'], + ['boots', 'boot'], + ['cubes', 'cube'], + ['mineralizes', 'mineralize'], + ['regains', 'regain'], + ['espouses', 'espouse'], + ['arrays', 'array'], + ['represses', 'repress'], + ['assays', 'assay'], + ['attenuates', 'attenuate'], + ['modulates', 'modulate'], + ['mutates', 'mutate'], + ['popularizes', 'popularize'], + ['dismantles', 'dismantle'], + ['fuzzes', 'fuzz'], + ['fizzes', 'fizz'], + ['fizzles', 'fizzle'], + ['impresses', 'impress'], + + ["awakens", "awaken"], + ["biases", "bias"], + ["compresses", "compress"], + ["crowns", "crown"], + // ["cross-checks", "cross-check"], + // ["double-checks", "double-check"], + ["embeds", "embed"], + ["enlivens", "enliven"], + ["expresses", "express"], + ["fancies", "fancy"], + ["hastens", "hasten"], + // ["fine-tunes", "fine-tune"], + // ["kick-starts", "kick-start"], + // ["self-destructs", "self-destruct"], + ["owns", "own"], + ["repents", "repent"], + ["shed", "shed"], + ["shields", "shield"], + ["tilts", "tilt"], + ["undoes", "undo"], + ["vetoes", "veto"], + ["withholds", "withhold"], + ["witnesses", "witness"] +] \ No newline at end of file diff --git a/data/pairs/Superlative.js b/data/pairs/Superlative.js new file mode 100644 index 0000000..6885b7c --- /dev/null +++ b/data/pairs/Superlative.js @@ -0,0 +1,376 @@ +export default [ + ['good', 'best'], + ['least', 'least'], + ['large', 'largest'], + ['high', 'highest'], + ['late', 'latest'], + ['great', 'greatest'], + ['low', 'lowest'], + ['near', 'nearest'], + ['big', 'biggest'], + ['strong', 'strongest'], + ['early', 'earliest'], + ['old', 'oldest'], + ['close', 'closest'], + ['small', 'smallest'], + ['fast', 'fastest'], + ['bright', 'brightest'], + ['new', 'newest'], + ['bad', 'worst'], + ['long', 'longest'], + ['poor', 'poorest'], + ['broad', 'broadest'], + ['young', 'youngest'], + ['wide', 'widest'], + ['full', 'fullest'], + ['fine', 'finest'], + ['busy', 'busiest'], + ['simple', 'simplest'], + ['weak', 'weakest'], + ['deep', 'deepest'], + ['easy', 'easiest'], + ['short', 'shortest'], + ['safe', 'safest'], + ['healthy', 'healthiest'], + ['warm', 'warmest'], + ['narrow', 'narrowest'], + ['cheap', 'cheapest'], + ['slight', 'slightest'], + ['southwest', 'southwest'], + ['heavy', 'heaviest'], + ['few', 'fewest'], + ['hard', 'hardest'], + ['dry', 'driest'], + ['strict', 'strictest'], + ['slow', 'slowest'], + ['hot', 'hottest'], + ['clear', 'clearest'], + ['rich', 'richest'], + ['quick', 'quickest'], + ['wealthy', 'wealthiest'], + ['tough', 'toughest'], + ['sharp', 'sharpest'], + ['harsh', 'harshest'], + ['tall', 'tallest'], + ['proud', 'proudest'], + ['wet', 'wettest'], + ['deadly', 'deadliest'], + ['fair', 'fairest'], + ['wise', 'wisest'], + ['pure', 'purest'], + ['steep', 'steepest'], + ['fresh', 'freshest'], + ['sure', 'surest'], + ['risky', 'riskiest'], + ['common', 'commonest'], + ['quiet', 'quietest'], + ['green', 'greenest'], + ['dirty', 'dirtiest'], + ['wild', 'wildest'], + ['thin', 'thinnest'], + ['tight', 'tightest'], + ['keen', 'keenest'], + ['fit', 'fittest'], + ['severe', 'severest'], + ['costly', 'costliest'], + ['happy', 'happiest'], + ['sticky', 'stickiest'], + ['fond', 'fondest'], + ['sincere', 'sincerest'], + ['hearty', 'heartiest'], + ['lengthy', 'lengthiest'], + ['soft', 'softest'], + ['clean', 'cleanest'], + ['straight', 'straightest'], + ['loud', 'loudest'], + ['bold', 'boldest'], + ['tricky', 'trickiest'], + ['bleak', 'bleakest'], + ['kind', 'kindest'], + ['nice', 'nicest'], + + ['nice', 'nicest'], + ['late', 'latest'], + ['hard', 'hardest'], + ['inner', 'innermost'], + ['outer', 'outermost'], + ['far', 'furthest'], + ['worse', 'worst'], + ['bad', 'worst'], + ['good', 'best'], + ['big', 'biggest'], + ['large', 'largest'], + + + ['absurd', 'absurdest'], + ['angry', 'angriest'], + ['bad', 'worst'], + ['bald', 'baldest'], + ['bawdy', 'bawdiest'], + ['big', 'biggest'], + ['bitter', 'bitterest'], + ['black', 'blackest'], + ['bland', 'blandest'], + ['blond', 'blondest'], + ['bloody', 'bloodiest'], + ['blue', 'bluest'], + ['bold', 'boldest'], + ['bouncy', 'bounciest'], + ['brash', 'brashest'], + ['brave', 'bravest'], + ['brief', 'briefest'], + ['brown', 'brownest'], + ['burly', 'burliest'], + ['busy', 'busiest'], + ['calm', 'calmest'], + ['cheap', 'cheapest'], + ['cheesy', 'cheesiest'], + ['chilly', 'chilliest'], + ['clear', 'clearest'], + ['clever', 'cleverest'], + ['cloudy', 'cloudiest'], + ['cold', 'coldest'], + ['common', 'commonest'], + ['cool', 'coolest'], + ['costly', 'costliest'], + ['cozy', 'coziest'], + ['cruel', 'cruelest'], + ['cuddly', 'cuddliest'], + ['cute', 'cutest'], + ['deadly', 'deadliest'], + ['dear', 'dearest'], + ['dense', 'densest'], + ['dirty', 'dirtiest'], + ['drunk', 'drunkest'], + ['dull', 'dullest'], + ['dumb', 'dumbest'], + ['early', 'earliest'], + ['earthly', 'earthliest'], + ['eastern', 'easternest'], + ['easy', 'easiest'], + ['eerie', 'eeriest'], + ['evil', 'evilest'], + ['fair', 'fairest'], + ['fake', 'fakest'], + ['fancy', 'fanciest'], + ['far', 'furthest'], + ['faulty', 'faultiest'], + ['feeble', 'feeblest'], + ['fierce', 'fiercest'], + ['fine', 'finest'], + ['foamy', 'foamiest'], + ['foul', 'foulest'], + ['frail', 'frailest'], + ['friendly', 'friendliest'], + ['full', 'fullest'], + ['funny', 'funniest'], + ['furry', 'furriest'], + ['gaudy', 'gaudiest'], + ['gay', 'gayest'], + ['gentle', 'gentlest'], + ['ghastly', 'ghastliest'], + ['ghostly', 'ghostliest'], + ['giant', 'giantest'], + ['giddy', 'giddiest'], + ['glad', 'gladest'], + ['glib', 'glibest'], + ['gloomy', 'gloomiest'], + ['goofy', 'goofiest'], + ['grand', 'grandest'], + ['gray', 'graiest'], + ['green', 'greenest'], + ['grey', 'greyest'], + ['grisly', 'grisliest'], + ['groovy', 'grooviest'], + ['gross', 'grossest'], + ['handsome', 'handsomest'], + ['happy', 'happiest'], + ['harsh', 'harshest'], + ['heavenly', 'heavenliest'], + ['heavy', 'heaviest'], + ['hefty', 'heftiest'], + ['high', 'highest'], + ['hilly', 'hilliest'], + ['homely', 'homeliest'], + ['hot', 'hottest'], + ['huge', 'hugest'], + ['humble', 'humblest'], + ['humid', 'humidest'], + ['hungry', 'hungriest'], + ['ill', 'illest'], + ['instant', 'instantest'], + ['jolly', 'jolliest'], + ['juicy', 'juiciest'], + ['keen', 'keenest'], + ['kind', 'kindest'], + ['lame', 'lamest'], + ['large', 'largest'], + ['late', 'latest'], + ['lewd', 'lewdest'], + ['likely', 'likeliest'], + ['little', 'littlest'], + ['lively', 'liveliest'], + ['lofty', 'loftiest'], + ['lonely', 'loneliest'], + ['long', 'longest'], + ['loud', 'loudest'], + ['lousy', 'lousiest'], + ['lovely', 'loveliest'], + ['low', 'lowest'], + ['lowly', 'lowliest'], + ['loyal', 'loyalest'], + ['lucky', 'luckiest'], + ['mean', 'meanest'], + ['meek', 'meekest'], + ['mellow', 'mellowest'], + ['mild', 'mildest'], + ['moody', 'moodiest'], + ['narrow', 'narrowest'], + ['near', 'nearest'], + ['neat', 'neattest'], + ['new', 'newest'], + ['nice', 'nicest'], + ['nimble', 'nimblest'], + ['noble', 'noblest'], + ['noisy', 'noisiest'], + ['normal', 'normalest'], + ['nosy', 'nosiest'], + ['odd', 'oddest'], + ['oily', 'oiliest'], + ['old', 'oldest'], + ['pale', 'palest'], + ['phony', 'phoniest'], + ['plain', 'plainest'], + ['pleasant', 'pleasantest'], + ['poor', 'poorest'], + ['pricey', 'priciest'], + ['prickly', 'prickliest'], + ['proud', 'proudest'], + ['puny', 'puniest'], + ['pure', 'purest'], + ['quaint', 'quaintest'], + ['random', 'randomest'], + ['rapid', 'rapidest'], + ['rare', 'rarest'], + ['raw', 'rawest'], + ['ready', 'readiest'], + ['real', 'realest'], + ['remote', 'remotest'], + ['rich', 'richest'], + ['ritzy', 'ritziest'], + ['roomy', 'roomiest'], + ['rosy', 'rosiest'], + ['round', 'roundest'], + ['rude', 'rudest'], + ['safe', 'safest'], + ['saintly', 'saintliest'], + ['salty', 'saltiest'], + ['savvy', 'savviest'], + ['scary', 'scariest'], + ['sexy', 'sexiest'], + ['shady', 'shadiest'], + ['shallow', 'shallowest'], + ['shiny', 'shiniest'], + ['shrill', 'shrillest'], + ['shy', 'shyest'], + ['silly', 'silliest'], + ['simple', 'simplest'], + ['skinny', 'skinniest'], + ['sleek', 'sleekest'], + ['slender', 'slenderest'], + ['slight', 'slightest'], + ['slim', 'slimest'], + ['slimy', 'slimiest'], + ['slow', 'slowest'], + ['sly', 'sliest'], + ['small', 'smallest'], + ['smelly', 'smelliest'], + ['solid', 'solidest'], + ['soon', 'soonest'], + ['sore', 'sorest'], + ['spicy', 'spiciest'], + ['sprightly', 'sprightliest'], + ['square', 'squarest'], + ['stark', 'starkest'], + ['steady', 'steadiest'], + ['stern', 'sternest'], + ['strange', 'strangest'], + ['strict', 'strictest'], + ['strong', 'strongest'], + ['stupid', 'stupidest'], + ['sturdy', 'sturdiest'], + ['subtle', 'subtlest'], + ['sudden', 'suddenest'], + ['swift', 'swiftest'], + ['tall', 'tallest'], + ['tame', 'tamest'], + ['tart', 'tartest'], + ['thirsty', 'thirstiest'], + ['tidy', 'tidiest'], + ['timely', 'timeliest'], + ['tiny', 'tiniest'], + ['tired', 'tiredest'], + ['tranquil', 'tranquilest'], + ['trendy', 'trendiest'], + ['true', 'truest'], + ['ugly', 'ugliest'], + ['unlikely', 'unlikeliest'], + ['untidy', 'untidiest'], + ['vague', 'vaguest'], + ['vulgar', 'vulgarest'], + ['wary', 'wariest'], + ['weary', 'weariest'], + ['weird', 'weirdest'], + ['wicked', 'wickedest'], + ['wild', 'wildest'], + ['wily', 'wiliest'], + ['windy', 'windiest'], + ['wiry', 'wiriest'], + ['wise', 'wisest'], + ['wry', 'wriest'], + ['young', 'youngest'], + ['zany', 'zaniest'], + ['bright', 'brightest'], + ['broad', 'broadest'], + ['coarse', 'coarsest'], + ['damp', 'dampest'], + ['dark', 'darkest'], + ['dead', 'deadest'], + ['deep', 'deepest'], + ['fast', 'fastest'], + ['fat', 'fattest'], + ['flat', 'flattest'], + ['fresh', 'freshest'], + ['great', 'greattest'], + ['hard', 'hardest'], + ['loose', 'loosest'], + ['mad', 'madest'], + ['quick', 'quickest'], + ['quiet', 'quiettest'], + ['red', 'redest'], + ['ripe', 'ripest'], + ['rough', 'roughest'], + ['sad', 'sadest'], + ['sharp', 'sharpest'], + ['short', 'shortest'], + ['sick', 'sickest'], + ['smart', 'smartest'], + ['soft', 'softest'], + ['steep', 'steepest'], + ['stiff', 'stiffest'], + ['straight', 'straightest'], + ['sweet', 'sweetest'], + ['thick', 'thickest'], + ['tight', 'tightest'], + ['tough', 'toughest'], + ['weak', 'weakest'], + ['white', 'whitest'], + ['wide', 'widest'], + ['dire', 'direst'], + ['polite', 'politest'], + ['eager', 'eagerest'], + ['prompt', 'promptest'], + ['cheerful', 'cheerfullest'], + + +] \ No newline at end of file diff --git a/data/pairs/index.js b/data/pairs/index.js new file mode 100644 index 0000000..82d531f --- /dev/null +++ b/data/pairs/index.js @@ -0,0 +1,17 @@ +import Comparative from './Comparative.js' +import Gerund from './Gerund.js' +import Participle from './Participle.js' +import PastTense from './PastTense.js' +import PresentTense from './PresentTense.js' +import Superlative from './Superlative.js' +import AdjToNoun from './AdjToNoun.js' + +export default { + Comparative, + Gerund, + Participle, + PastTense, + PresentTense, + Superlative, + AdjToNoun, +} \ No newline at end of file diff --git a/demos/performance.html b/demos/performance.html new file mode 100644 index 0000000..fddd55f --- /dev/null +++ b/demos/performance.html @@ -0,0 +1,61 @@ + + + + + + + + + + + + + +
+
nlp-compromise stress-test
+
parse a bunch of large texts in the browser
+ +
+
+
+ + + + + + \ No newline at end of file diff --git a/demos/plugin.html b/demos/plugin.html new file mode 100644 index 0000000..d45fd7b --- /dev/null +++ b/demos/plugin.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + +
compromise plugin demo
+ +

+
+
+
\ No newline at end of file
diff --git a/demos/web-worker/_worker.js b/demos/web-worker/_worker.js
new file mode 100644
index 0000000..7b890c6
--- /dev/null
+++ b/demos/web-worker/_worker.js
@@ -0,0 +1,14 @@
+/* global importScripts */
+
+//loads and runs compromise inside the worker-instance
+self.addEventListener(
+  'message',
+  function (e) {
+    // importScripts('https://unpkg.com/compromise@next')
+    importScripts('../../builds/compromise.js')
+    const doc = self.nlp(e.data)
+    const m = doc.places()
+    self.postMessage(m.json({ count: true, unique: true }))
+  },
+  false
+)
\ No newline at end of file
diff --git a/demos/web-worker/index.html b/demos/web-worker/index.html
new file mode 100644
index 0000000..082ec91
--- /dev/null
+++ b/demos/web-worker/index.html
@@ -0,0 +1,72 @@
+
+
+
+  
+  
+
+
+
+
+  compromise web-worker demo
+  
+  

+ +

worker output:

+
+ + + \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..d063bfd --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,40 @@ +import * as regexpPlugin from "eslint-plugin-regexp" + +export default [ + regexpPlugin.configs["flat/recommended"], + + { + // "ignorePatterns": ["**/builds/*"], + "ignores": ["**/builds/*"], + "rules": { + "comma-dangle": [1, "only-multiline"], + "quotes": [0, "single", "avoid-escape"], + "max-nested-callbacks": [1, 4], + "max-params": [1, 5], + "consistent-return": 1, + "no-bitwise": 1, + "no-empty": 1, + "no-console": 1, + "no-duplicate-imports": 1, + "no-eval": 2, + "no-implied-eval": 2, + "no-mixed-operators": 2, + "no-multi-assign": 2, + "no-nested-ternary": 1, + "no-prototype-builtins": 0, + "no-self-compare": 1, + "no-sequences": 1, + "no-shadow": 2, + "no-unmodified-loop-condition": 1, + "no-use-before-define": 1, + "prefer-const": 1, + "radix": 1, + "no-unused-vars": 1, + "regexp/prefer-d": 0, + "regexp/prefer-w": 0, + "regexp/prefer-range": 0, + "regexp/no-unused-capturing-group": 0, + "eslint-comments/no-unused-disable": 0 + } + }, +] diff --git a/one/package.json b/one/package.json new file mode 100644 index 0000000..0a1ed32 --- /dev/null +++ b/one/package.json @@ -0,0 +1,25 @@ +{ + "name": "compromise-one", + "version": "14.14.4", + "description": "", + "type": "module", + "module": "./../src/one.js", + "main": "./../src/one.js", + "types": "./../types/one.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./../types/one/one.d.ts", + "default": "./../src/one.js" + }, + "require": { + "types": "./../types/one.d.cts", + "default": "./../builds/one/compromise-one.cjs" + } + } + }, + "author": "Spencer Kelly (http://spencermounta.in)", + "license": "MIT", + "sideEffects": true +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..6dfc062 --- /dev/null +++ b/package.json @@ -0,0 +1,151 @@ +{ + "author": "Spencer Kelly (http://spencermounta.in)", + "name": "compromise", + "description": "modest natural language processing", + "version": "14.15.1", + "module": "./src/three.js", + "main": "./src/three.js", + "unpkg": "./builds/compromise.js", + "type": "module", + "sideEffects": false, + "types": "./types/three.d.ts", + "exports": { + ".": { + "import": { + "types": "./types/three.d.ts", + "default": "./src/three.js" + }, + "require": { + "types": "./types/three.d.cts", + "default": "./builds/three/compromise-three.cjs" + } + }, + "./tokenize": { + "import": { + "types": "./types/one.d.ts", + "default": "./src/one.js" + }, + "require": { + "types": "./types/one.d.cts", + "default": "./builds/one/compromise-one.cjs" + } + }, + "./one": { + "import": { + "types": "./types/one.d.ts", + "default": "./src/one.js" + }, + "require": { + "types": "./types/one.d.cts", + "default": "./builds/one/compromise-one.cjs" + } + }, + "./two": { + "import": { + "types": "./types/two.d.ts", + "default": "./src/two.js" + }, + "require": { + "types": "./types/two.d.cts", + "default": "./builds/two/compromise-two.cjs" + } + }, + "./three": { + "import": { + "types": "./types/three.d.ts", + "default": "./src/three.js" + }, + "require": { + "types": "./types/three.d.cts", + "default": "./builds/three/compromise-three.cjs" + } + }, + "./misc": { + "types": "./types/misc.d.ts" + }, + "./view/one": { + "types": "./types/view/one.d.ts" + }, + "./view/two": { + "types": "./types/view/two.d.ts" + }, + "./view/three": { + "types": "./types/view/three.d.ts" + } + }, + "repository": { + "type": "git", + "url": "git://github.com/spencermountain/compromise.git" + }, + "homepage": "https://github.com/spencermountain/compromise", + "engines": { + "node": ">=12.0.0" + }, + "scripts": { + "build": "npm run version && rollup -c --silent", + "watch": "node --watch ./scratch.js", + "pack": "node ./scripts/pack.js", + "version": "node ./scripts/version.js", + "test": "tape \"./tests/**/*.test.js\" | tap-dancer", + "testb": "npm run test:smoke && cross-env TESTENV=prod npm run test", + "test:one": "tape \"./tests/one/**/*.test.js\" | tap-dancer", + "test:two": "tape \"./tests/two/**/*.test.js\" | tap-dancer", + "test:three": "tape \"./tests/three/**/*.test.js\" | tap-dancer", + "test:smoke": "tape \"./scripts/test/smoke.test.js\" | tap-dancer", + "test:plugins": "tape \"./plugins/**/tests/**/*.test.js\" | tap-dancer", + "stress": "node scripts/test/stress.js", + "debug": "node ./scripts/debug.js", + "match": "node ./scripts/match.js", + "coverage": "c8 -r lcov -n 'src/**/*' -n 'plugins/**/*' npm run test", + "perf": "node ./scripts/perf/index.js", + "flame": "clinic flame -- node ./scripts/perf/flame", + "lint": "eslint src", + "plugins:ci": "node ./scripts/plugins.js npm ci", + "plugins:build": "node ./scripts/plugins.js npm run build" + }, + "files": [ + "builds/", + "types/", + "src/", + "tokenize/", + "one/", + "two/", + "three/" + ], + "keywords": [ + "nlp" + ], + "prettier": { + "trailingComma": "es5", + "tabWidth": 2, + "semi": false, + "singleQuote": true, + "printWidth": 120, + "arrowParens": "avoid" + }, + "dependencies": { + "efrt": "2.7.0", + "grad-school": "0.0.5", + "suffix-thumb": "5.0.2" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "16.0.3", + "@rollup/plugin-terser": "1.0.0", + "cross-env": "10.1.0", + "eslint": "10.4.0", + "eslint-plugin-regexp": "3.1.0", + "nlp-corpus": "4.4.0", + "rollup": "4.60.4", + "rollup-plugin-filesize-check": "1.2.0", + "shelljs": "0.10.0", + "tap-dancer": "0.3.4", + "tape": "5.9.0" + }, + "eslintIgnore": [ + "builds/*.js", + "*.ts", + "_old/**", + "_tests/**" + ], + "license": "MIT" +} \ No newline at end of file diff --git a/plugins/_experiments/ast/README.md b/plugins/_experiments/ast/README.md new file mode 100644 index 0000000..2166273 --- /dev/null +++ b/plugins/_experiments/ast/README.md @@ -0,0 +1 @@ +attempt to create a [unist-formatted](https://github.com/syntax-tree/unist) Abstract Syntax Tree via some [dependency parsing](http://nlpprogress.com/english/dependency_parsing.html) diff --git a/plugins/_experiments/ast/package.json b/plugins/_experiments/ast/package.json new file mode 100644 index 0000000..0511349 --- /dev/null +++ b/plugins/_experiments/ast/package.json @@ -0,0 +1,45 @@ +{ + "name": "compromise-ast", + "description": "plugin for nlp-compromise", + "version": "0.0.0", + "author": "Spencer Kelly (http://spencermounta.in)", + "main": "./src/plugin.js", + "unpkg": "./builds/compromise-ast.min.js", + "module": "./builds/compromise-ast.mjs", + "type": "module", + "types": "index.d.ts", + "sideEffects": false, + "exports": { + ".": { + "import": "./src/plugin.js", + "require": "./builds/compromise-ast.cjs" + } + }, + "repository": { + "type": "git", + "url": "git://github.com/spencermountain/compromise.git" + }, + "homepage": "https://github.com/spencermountain/compromise/tree/master/plugins/ast", + "scripts": { + "test": "tape \"./tests/**/*.test.js\" | tap-dancer --color always", + "testb": "TESTENV=prod tape \"./tests/**/*.test.js\" | tap-dancer --color always", + "watch": "node --watch ./scratch.js", + "build": "rollup -c --silent" + }, + "eslintIgnore": [ + "builds/*.js" + ], + "files": [ + "builds/", + "src/", + "index.d.ts" + ], + "peerDependencies": { + "compromise": ">=14.0.0" + }, + "dependencies": {}, + "license": "MIT", + "devDependencies": { + "@rollup/plugin-commonjs": "^24.0.1" + } +} \ No newline at end of file diff --git a/plugins/_experiments/ast/scratch.js b/plugins/_experiments/ast/scratch.js new file mode 100644 index 0000000..be96d08 --- /dev/null +++ b/plugins/_experiments/ast/scratch.js @@ -0,0 +1,12 @@ +import nlp from '../../../src/three.js' +import plg from './src/plugin.js' +nlp.plugin(plg) + +let str = '' +str = `I prefer the morning flight through Denver. it was cool, +oh yeah nice` +const doc = nlp(str) +// console.log(doc.lines()) +// let tree = doc.ast() +// console.dir(tree, { depth: 10 }) +doc.chunks().debug('chunker') diff --git a/plugins/_experiments/ast/src/ast.js b/plugins/_experiments/ast/src/ast.js new file mode 100644 index 0000000..2d32767 --- /dev/null +++ b/plugins/_experiments/ast/src/ast.js @@ -0,0 +1,75 @@ + +const chunkType = function (chunk) { + if (chunk.isVerb().found) { + return 'verbPhrase' + } + if (chunk.isNoun().found) { + return 'nounPhrase' + } + if (chunk.isPivot().found) { + return 'pivot' + } + if (chunk.isAdjective().found) { + return 'adjectivePhrase' + } + return null +} + +const doWord = function (w) { + const term = w.docs[0][0] + const offset = term.offset + const node = { + type: 'word', + children: [], + position: { + start: { line: term.line + 1, column: null, offset: offset.start }, + end: { line: term.line + 1, column: null, offset: offset.start + offset.length } + } + } + if (term.pre) { + node.children.push({ + type: 'punct', value: term.pre, // data: { word: false } + }) + } + node.children.push({ + type: 'text', value: term.text, data: { normal: term.normal, tags: Array.from(term.tags) }, + // position: { } + }) + if (term.post) { + node.children.push({ + type: 'punct', value: term.post, // data: { word: false } + }) + } + return node +} + +const doChunk = function (chunk) { + const type = chunkType(chunk) + const node = { + type: type, + children: chunk.terms().map(doWord), + // position: {} + } + return node +} + + +const doSentence = function (s) { + const node = { + type: 'sentence', + children: s.chunks().map(doChunk, []), + position: {} + } + return node +} + +const toAst = function (doc) { + doc.compute(['chunks', 'offset', 'lines']) + const root = { + type: 'root', + children: doc.sentences().map(doSentence), + position: {} + } + return root +} +export default toAst \ No newline at end of file diff --git a/plugins/_experiments/ast/src/compute/index.js b/plugins/_experiments/ast/src/compute/index.js new file mode 100644 index 0000000..2c34367 --- /dev/null +++ b/plugins/_experiments/ast/src/compute/index.js @@ -0,0 +1,12 @@ + +export default { + lines: function (view) { + view.lines().forEach((arr, i) => { + arr.forEach(s => { + s.docs[0].forEach(term => { + term.line = i + }) + }) + }) + } +} \ No newline at end of file diff --git a/plugins/_experiments/ast/src/lines.js b/plugins/_experiments/ast/src/lines.js new file mode 100644 index 0000000..61868ad --- /dev/null +++ b/plugins/_experiments/ast/src/lines.js @@ -0,0 +1,21 @@ +// return all newline-seperated sections in the document +const toLines = function (doc) { + const newLine = /\n/ + const lines = [[]] + // a newline already splits a sentence, + // so it can only happen at the end of a sentence + doc.sentences().forEach(s => { + lines[lines.length - 1].push(s) + const terms = s.docs[0] + const end = terms[terms.length - 1] + if (newLine.test(end.post)) { + lines.push([]) + } + }) + // remove an empty last one + if (lines[lines.length - 1].length === 0) { + lines.pop() + } + return lines +} +export default toLines \ No newline at end of file diff --git a/plugins/_experiments/ast/src/plugin.js b/plugins/_experiments/ast/src/plugin.js new file mode 100644 index 0000000..b0eaef4 --- /dev/null +++ b/plugins/_experiments/ast/src/plugin.js @@ -0,0 +1,21 @@ +import toAst from './ast.js' +import toLines from './lines.js' +import compute from './compute/index.js' + + + +export default { + compute, + + api: function (View) { + + View.prototype.lines = function () { + return toLines(this) + } + + + View.prototype.ast = function (opts) { + return toAst(this, opts) + } + } +} \ No newline at end of file diff --git a/plugins/_experiments/cmd-k/README.md b/plugins/_experiments/cmd-k/README.md new file mode 100644 index 0000000..40a42d8 --- /dev/null +++ b/plugins/_experiments/cmd-k/README.md @@ -0,0 +1,24 @@ +
+ + +
a plugin for compromise
+ + + + + + v + + + + +
+
+ +
+ npm install compromise-cmd-k +
+ +experimental plugins for command-prompt parsing + +MIT diff --git a/plugins/_experiments/cmd-k/package.json b/plugins/_experiments/cmd-k/package.json new file mode 100644 index 0000000..c3dbb6b --- /dev/null +++ b/plugins/_experiments/cmd-k/package.json @@ -0,0 +1,42 @@ +{ + "name": "compromise-cmd-k", + "description": "plugin for nlp-compromise", + "version": "0.0.1", + "author": "Spencer Kelly (http://spencermounta.in)", + "main": "./src/plugin.js", + "unpkg": "./builds/compromise-cmd-k.min.js", + "module": "./builds/compromise-cmd-k.mjs", + "type": "module", + "sideEffects": false, + "types": "./index.d.ts", + "exports": { + ".": { + "import": "./src/plugin.js", + "require": "./builds/compromise-cmd-k.cjs", + "types": "./index.d.ts" + } + }, + "repository": { + "type": "git", + "url": "git://github.com/spencermountain/compromise.git" + }, + "homepage": "https://github.com/spencermountain/compromise/tree/master/plugins/dates", + "scripts": { + "test": "tape \"./tests/**/*.test.js\" | tap-dancer --color always", + "testb": "TESTENV=prod tape \"./tests/**/*.test.js\" | tap-dancer --color always", + "watch": "node --watch ./scratch.js", + "perf": "node ./scripts/perf.js", + "version": "node ./scripts/version.js", + "build": "npm run version && rollup -c --silent" + }, + "files": [ + "builds/", + "src/", + "index.d.ts" + ], + "peerDependencies": { + "compromise": ">=14.2.0" + }, + "dependencies": {}, + "license": "MIT" +} \ No newline at end of file diff --git a/plugins/_experiments/cmd-k/scratch.js b/plugins/_experiments/cmd-k/scratch.js new file mode 100644 index 0000000..1c3f9af --- /dev/null +++ b/plugins/_experiments/cmd-k/scratch.js @@ -0,0 +1,11 @@ +/* eslint-disable no-console, no-unused-vars */ +import nlp from '../../../src/three.js' +import plugin from './src/plugin.js' +nlp.extend(plugin) + + +let txt = '! i walk !ohyeah gh' +const doc = nlp(txt) +doc.searchBangs() +doc.debug() + diff --git a/plugins/_experiments/cmd-k/src/plugin.js b/plugins/_experiments/cmd-k/src/plugin.js new file mode 100644 index 0000000..c3283ee --- /dev/null +++ b/plugins/_experiments/cmd-k/src/plugin.js @@ -0,0 +1,4 @@ +import searchBang from './searchBang.js' +import slashCmd from './slashCmd.js' + +export default [searchBang, slashCmd] diff --git a/plugins/_experiments/cmd-k/src/searchBang.js b/plugins/_experiments/cmd-k/src/searchBang.js new file mode 100644 index 0000000..7f60792 --- /dev/null +++ b/plugins/_experiments/cmd-k/src/searchBang.js @@ -0,0 +1,48 @@ +// searchbang is a ! followed by a word +// it's a search engine shortcut +// !g is google, etc + + +const instaBangs = [ + 'g', + 'gh', + 'yt', +] + +const searchBang = { + /** add a method */ + api: (View) => { + View.prototype.searchBangs = function () { + return this.matchOne('#SearchBang+').text('normal') + } + }, + + /** add some tags */ + tags: { + SearchBang: { + notA: ['Noun', 'Verb', 'Adjective'], + color: 'red' + }, + }, + + /** add words to the stronger, more adamant lexicon */ + frozen: instaBangs.reduce((h, str) => { + h[str] = 'SearchBang' + h['!' + str] = 'SearchBang' + return h + }, {}), + + /** post-process tagger */ + compute: { + tagBangs: (doc) => { + doc.match([{ word: '!' }]).tag('#SearchBang') + doc.match([{ pre: '!' }]).tag('#SearchBang') + doc.match([{ post: '!' }]).tag('#SearchBang') + } + }, + + + /** run it on init */ + hooks: ['tagBangs'] +} +export default searchBang \ No newline at end of file diff --git a/plugins/_experiments/cmd-k/src/slashCmd.js b/plugins/_experiments/cmd-k/src/slashCmd.js new file mode 100644 index 0000000..16f17ac --- /dev/null +++ b/plugins/_experiments/cmd-k/src/slashCmd.js @@ -0,0 +1,35 @@ + +// slashCmds are / followed by a word +// they're a way to add custom commands +// "/me writes some bugs" + +const slashCmd = { + /** add a method */ + api: (View) => { + View.prototype.slashCmds = function () { + return this.matchOne('#SlashCmd+').text('normal') + } + }, + + + /** add some tags */ + tags: { + SlashCmd: { + notA: ['Noun', 'Verb', 'Adjective'], + color: 'yellow' + }, + }, + + + /** post-process tagger */ + compute: { + tagSlashCmds: (doc) => { + doc.match([{ pre: '/' }]).not('#Number').tag('#SlashCmd') + } + }, + + + /** run it on init */ + hooks: ['tagSlashCmds'] +} +export default slashCmd \ No newline at end of file diff --git a/plugins/_experiments/compress/README.md b/plugins/_experiments/compress/README.md new file mode 100644 index 0000000..58d42da --- /dev/null +++ b/plugins/_experiments/compress/README.md @@ -0,0 +1,3 @@ +they say that compression and intellegence are the same thing, +but I'm not small-enough to understand that. + diff --git a/plugins/_experiments/compress/src/index.js b/plugins/_experiments/compress/src/index.js new file mode 100644 index 0000000..7123274 --- /dev/null +++ b/plugins/_experiments/compress/src/index.js @@ -0,0 +1,23 @@ +import lz from './lz.js' +import fs from 'fs' + +let string = fs.readFileSync('../../../plugins/speed/tests/files/freshPrince.txt').toString() +// string = "This is my compression test."; + + +// console.log("Size of sample is: " + string.length, '\n\n'); +const compressed = lz.compress(string); +// console.log(string) +// console.log(compressed) +// console.log("\n\nSize of compressed sample is: " + compressed.length); +string = lz.decompress(compressed); + + + +/* +[ + text, + tag, + post, + pre +*/ \ No newline at end of file diff --git a/plugins/_experiments/compress/src/lz.js b/plugins/_experiments/compress/src/lz.js new file mode 100644 index 0000000..51675f7 --- /dev/null +++ b/plugins/_experiments/compress/src/lz.js @@ -0,0 +1,460 @@ +/* eslint-disable */ +// Copyright (c) 2013 Pieroxy +// This work is free. You can redistribute it and/or modify it +// under the terms of the WTFPL, Version 2 +// For more information see LICENSE.txt or http://www.wtfpl.net/ +// +// For more information, the home page: +// http://pieroxy.net/blog/pages/lz-string/testing.html +// +// LZ-based compression algorithm, version 1.4.4 + +// private property +var f = String.fromCharCode; +var keyStrBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; +var keyStrUriSafe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$"; +var baseReverseDic = {}; + +function getBaseValue(alphabet, character) { + if (!baseReverseDic[alphabet]) { + baseReverseDic[alphabet] = {}; + for (var i = 0; i < alphabet.length; i++) { + baseReverseDic[alphabet][alphabet.charAt(i)] = i; + } + } + return baseReverseDic[alphabet][character]; +} + +var LZString = { + compressToBase64: function (input) { + if (input == null) return ""; + var res = LZString._compress(input, 6, function (a) { return keyStrBase64.charAt(a); }); + switch (res.length % 4) { // To produce valid Base64 + default: // When could this happen ? + case 0: return res; + case 1: return res + "==="; + case 2: return res + "=="; + case 3: return res + "="; + } + }, + + decompressFromBase64: function (input) { + if (input == null) return ""; + if (input == "") return null; + return LZString._decompress(input.length, 32, function (index) { return getBaseValue(keyStrBase64, input.charAt(index)); }); + }, + + compressToUTF16: function (input) { + if (input == null) return ""; + return LZString._compress(input, 15, function (a) { return f(a + 32); }) + " "; + }, + + decompressFromUTF16: function (compressed) { + if (compressed == null) return ""; + if (compressed == "") return null; + return LZString._decompress(compressed.length, 16384, function (index) { return compressed.charCodeAt(index) - 32; }); + }, + + //compress into a string that is already URI encoded + compressToEncodedURIComponent: function (input) { + if (input == null) return ""; + return LZString._compress(input, 6, function (a) { return keyStrUriSafe.charAt(a); }); + }, + + //decompress from an output of compressToEncodedURIComponent + decompressFromEncodedURIComponent: function (input) { + if (input == null) return ""; + if (input == "") return null; + input = input.replace(/ /g, "+"); + return LZString._decompress(input.length, 32, function (index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); }); + }, + + compress: function (uncompressed) { + return LZString._compress(uncompressed, 16, function (a) { return f(a); }); + }, + _compress: function (uncompressed, bitsPerChar, getCharFromInt) { + if (uncompressed == null) return ""; + var i, value, + context_dictionary = {}, + context_dictionaryToCreate = {}, + context_c = "", + context_wc = "", + context_w = "", + context_enlargeIn = 2, // Compensate for the first entry which should not count + context_dictSize = 3, + context_numBits = 2, + context_data = [], + context_data_val = 0, + context_data_position = 0, + ii; + + for (ii = 0; ii < uncompressed.length; ii += 1) { + context_c = uncompressed.charAt(ii); + if (!Object.prototype.hasOwnProperty.call(context_dictionary, context_c)) { + context_dictionary[context_c] = context_dictSize++; + context_dictionaryToCreate[context_c] = true; + } + + context_wc = context_w + context_c; + if (Object.prototype.hasOwnProperty.call(context_dictionary, context_wc)) { + context_w = context_wc; + } else { + if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) { + if (context_w.charCodeAt(0) < 256) { + for (i = 0; i < context_numBits; i++) { + context_data_val = (context_data_val << 1); + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + } + value = context_w.charCodeAt(0); + for (i = 0; i < 8; i++) { + context_data_val = (context_data_val << 1) | (value & 1); + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + value = value >> 1; + } + } else { + value = 1; + for (i = 0; i < context_numBits; i++) { + context_data_val = (context_data_val << 1) | value; + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + value = 0; + } + value = context_w.charCodeAt(0); + for (i = 0; i < 16; i++) { + context_data_val = (context_data_val << 1) | (value & 1); + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + value = value >> 1; + } + } + context_enlargeIn--; + if (context_enlargeIn == 0) { + context_enlargeIn = Math.pow(2, context_numBits); + context_numBits++; + } + delete context_dictionaryToCreate[context_w]; + } else { + value = context_dictionary[context_w]; + for (i = 0; i < context_numBits; i++) { + context_data_val = (context_data_val << 1) | (value & 1); + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + value = value >> 1; + } + + + } + context_enlargeIn--; + if (context_enlargeIn == 0) { + context_enlargeIn = Math.pow(2, context_numBits); + context_numBits++; + } + // Add wc to the dictionary. + context_dictionary[context_wc] = context_dictSize++; + context_w = String(context_c); + } + } + + // Output the code for w. + if (context_w !== "") { + if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) { + if (context_w.charCodeAt(0) < 256) { + for (i = 0; i < context_numBits; i++) { + context_data_val = (context_data_val << 1); + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + } + value = context_w.charCodeAt(0); + for (i = 0; i < 8; i++) { + context_data_val = (context_data_val << 1) | (value & 1); + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + value = value >> 1; + } + } else { + value = 1; + for (i = 0; i < context_numBits; i++) { + context_data_val = (context_data_val << 1) | value; + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + value = 0; + } + value = context_w.charCodeAt(0); + for (i = 0; i < 16; i++) { + context_data_val = (context_data_val << 1) | (value & 1); + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + value = value >> 1; + } + } + context_enlargeIn--; + if (context_enlargeIn == 0) { + context_enlargeIn = Math.pow(2, context_numBits); + context_numBits++; + } + delete context_dictionaryToCreate[context_w]; + } else { + value = context_dictionary[context_w]; + for (i = 0; i < context_numBits; i++) { + context_data_val = (context_data_val << 1) | (value & 1); + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + value = value >> 1; + } + + + } + context_enlargeIn--; + if (context_enlargeIn == 0) { + context_enlargeIn = Math.pow(2, context_numBits); + context_numBits++; + } + } + + // Mark the end of the stream + value = 2; + for (i = 0; i < context_numBits; i++) { + context_data_val = (context_data_val << 1) | (value & 1); + if (context_data_position == bitsPerChar - 1) { + context_data_position = 0; + context_data.push(getCharFromInt(context_data_val)); + context_data_val = 0; + } else { + context_data_position++; + } + value = value >> 1; + } + + // Flush the last char + while (true) { + context_data_val = (context_data_val << 1); + if (context_data_position == bitsPerChar - 1) { + context_data.push(getCharFromInt(context_data_val)); + break; + } + else context_data_position++; + } + return context_data.join(''); + }, + + decompress: function (compressed) { + if (compressed == null) return ""; + if (compressed == "") return null; + return LZString._decompress(compressed.length, 32768, function (index) { return compressed.charCodeAt(index); }); + }, + + _decompress: function (length, resetValue, getNextValue) { + var dictionary = [], + next, + enlargeIn = 4, + dictSize = 4, + numBits = 3, + entry = "", + result = [], + i, + w, + bits, resb, maxpower, power, + c, + data = { val: getNextValue(0), position: resetValue, index: 1 }; + + for (i = 0; i < 3; i += 1) { + dictionary[i] = i; + } + + bits = 0; + maxpower = Math.pow(2, 2); + power = 1; + while (power != maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb > 0 ? 1 : 0) * power; + power <<= 1; + } + + switch (next = bits) { + case 0: + bits = 0; + maxpower = Math.pow(2, 8); + power = 1; + while (power != maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb > 0 ? 1 : 0) * power; + power <<= 1; + } + c = f(bits); + break; + case 1: + bits = 0; + maxpower = Math.pow(2, 16); + power = 1; + while (power != maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb > 0 ? 1 : 0) * power; + power <<= 1; + } + c = f(bits); + break; + case 2: + return ""; + } + dictionary[3] = c; + w = c; + result.push(c); + while (true) { + if (data.index > length) { + return ""; + } + + bits = 0; + maxpower = Math.pow(2, numBits); + power = 1; + while (power != maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb > 0 ? 1 : 0) * power; + power <<= 1; + } + + switch (c = bits) { + case 0: + bits = 0; + maxpower = Math.pow(2, 8); + power = 1; + while (power != maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb > 0 ? 1 : 0) * power; + power <<= 1; + } + + dictionary[dictSize++] = f(bits); + c = dictSize - 1; + enlargeIn--; + break; + case 1: + bits = 0; + maxpower = Math.pow(2, 16); + power = 1; + while (power != maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb > 0 ? 1 : 0) * power; + power <<= 1; + } + dictionary[dictSize++] = f(bits); + c = dictSize - 1; + enlargeIn--; + break; + case 2: + return result.join(''); + } + + if (enlargeIn == 0) { + enlargeIn = Math.pow(2, numBits); + numBits++; + } + + if (dictionary[c]) { + entry = dictionary[c]; + } else { + if (c === dictSize) { + entry = w + w.charAt(0); + } else { + return null; + } + } + result.push(entry); + + // Add w+entry[0] to the dictionary. + dictionary[dictSize++] = w + entry.charAt(0); + enlargeIn--; + + w = entry; + + if (enlargeIn == 0) { + enlargeIn = Math.pow(2, numBits); + numBits++; + } + + } + } +}; +export default LZString; diff --git a/plugins/_experiments/markdown/README.md b/plugins/_experiments/markdown/README.md new file mode 100644 index 0000000..11dee2b --- /dev/null +++ b/plugins/_experiments/markdown/README.md @@ -0,0 +1 @@ +experimental nlp on a [unified/remark](https://unifiedjs.com/) AST. diff --git a/plugins/_experiments/markdown/builds/compromise-markup.min.js b/plugins/_experiments/markdown/builds/compromise-markup.min.js new file mode 100644 index 0000000..e27d07e --- /dev/null +++ b/plugins/_experiments/markdown/builds/compromise-markup.min.js @@ -0,0 +1 @@ +var e,t;e=this,t=function(){const e=t(/[\dA-Za-z]/);function t(e){return function(t){return null!==t&&e.test(String.fromCharCode(t))}}function n(t){const n=[];let r=-1,o=0,a=0;for(;++r55295&&l<57344){const e=t.charCodeAt(r+1);l<56320&&e>56319&&e<57344?(u=String.fromCharCode(l,e),a=1):u="�"}else u=String.fromCharCode(l);u&&(n.push(t.slice(o,r),encodeURIComponent(u)),o=r+a+1,u=""),a&&(r+=a,a=0)}return n.join("")+t.slice(o)}function r(e,t){const r=String(t.identifier).toUpperCase(),o=n(r.toLowerCase()),a=e.footnoteOrder.indexOf(r);let l;-1===a?(e.footnoteOrder.push(r),e.footnoteCounts[r]=1,l=e.footnoteOrder.length):(e.footnoteCounts[r]++,l=a+1);const u=e.footnoteCounts[r],i={type:"element",tagName:"a",properties:{href:"#"+e.clobberPrefix+"fn-"+o,id:e.clobberPrefix+"fnref-"+o+(u>1?"-"+u:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(l)}]};e.patch(t,i);const p={type:"element",tagName:"sup",properties:{},children:[i]};return e.patch(t,p),e.applyData(t,p)}function o(e,t){const n=t.referenceType;let r="]";if("collapsed"===n?r+="[]":"full"===n&&(r+="["+(t.label||t.identifier)+"]"),"imageReference"===t.type)return{type:"text",value:"!["+t.alt+r};const o=e.all(t),a=o[0];a&&"text"===a.type?a.value="["+a.value:o.unshift({type:"text",value:"["});const l=o[o.length-1];return l&&"text"===l.type?l.value+=r:o.push({type:"text",value:r}),o}function a(e){const t=e.spread;return null==t?e.children.length>1:t}t(/[!-/:-@[-`{-~\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/);const l=i("start"),u=i("end");function i(e){return function(t){const n=t&&t.position&&t.position[e]||{};return{line:n.line||null,column:n.column||null,offset:n.offset>-1?n.offset:null}}}function p(e){const t=String(e),n=/\r?\n|\r/g;let r=n.exec(t),o=0;const a=[];for(;r;)a.push(c(t.slice(o,r.index),o>0,!0),r[0]),o=r.index+r[0].length,r=n.exec(t);return a.push(c(t.slice(o),o>0,!1)),a.join("")}function c(e,t,n){let r=0,o=e.length;if(t){let t=e.codePointAt(r);for(;9===t||32===t;)r++,t=e.codePointAt(r)}if(n){let t=e.codePointAt(o-1);for(;9===t||32===t;)o--,t=e.codePointAt(o-1)}return o>r?e.slice(r,o):""}const s={blockquote:function(e,t){const n={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)},break:function(e,t){const n={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:"text",value:"\n"}]},code:function(e,t){const n=t.value?t.value+"\n":"",r=t.lang?t.lang.match(/^[^ \t]+(?=[ \t]|$)/):null,o={};r&&(o.className=["language-"+r]);let a={type:"element",tagName:"code",properties:o,children:[{type:"text",value:n}]};return t.meta&&(a.data={meta:t.meta}),e.patch(t,a),a=e.applyData(t,a),a={type:"element",tagName:"pre",properties:{},children:[a]},e.patch(t,a),a},delete:function(e,t){const n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},emphasis:function(e,t){const n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},footnoteReference:r,footnote:function(e,t){const n=e.footnoteById;let o=1;for(;o in n;)o++;const a=String(o);return n[a]={type:"footnoteDefinition",identifier:a,children:[{type:"paragraph",children:t.children}],position:t.position},r(e,{type:"footnoteReference",identifier:a,position:t.position})},heading:function(e,t){const n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},html:function(e,t){if(e.dangerous){const n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}return null},imageReference:function(e,t){const r=e.definition(t.identifier);if(!r)return o(e,t);const a={src:n(r.url||""),alt:t.alt};null!==r.title&&void 0!==r.title&&(a.title=r.title);const l={type:"element",tagName:"img",properties:a,children:[]};return e.patch(t,l),e.applyData(t,l)},image:function(e,t){const r={src:n(t.url)};null!==t.alt&&void 0!==t.alt&&(r.alt=t.alt),null!==t.title&&void 0!==t.title&&(r.title=t.title);const o={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,o),e.applyData(t,o)},inlineCode:function(e,t){const n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);const r={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)},linkReference:function(e,t){const r=e.definition(t.identifier);if(!r)return o(e,t);const a={href:n(r.url||"")};null!==r.title&&void 0!==r.title&&(a.title=r.title);const l={type:"element",tagName:"a",properties:a,children:e.all(t)};return e.patch(t,l),e.applyData(t,l)},link:function(e,t){const r={href:n(t.url)};null!==t.title&&void 0!==t.title&&(r.title=t.title);const o={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,o),e.applyData(t,o)},listItem:function(e,t,n){const r=e.all(t),o=n?function(e){let t=!1;if("list"===e.type){t=e.spread||!1;const n=e.children;let r=-1;for(;!t&&++r0&&n.children.unshift({type:"text",value:" "}),n.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),l.className=["task-list-item"]}let i=-1;for(;++i0){const r={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},a=l(t.children[1]),i=u(t.children[t.children.length-1]);a.line&&i.line&&(r.position={start:a,end:i}),o.push(r)}const a={type:"element",tagName:"table",properties:{},children:e.wrap(o,!0)};return e.patch(t,a),e.applyData(t,a)},tableCell:function(e,t){const n={type:"element",tagName:"td",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},tableRow:function(e,t,n){const r=n?n.children:void 0,o=0===(r?r.indexOf(t):1)?"th":"td",a=n&&"table"===n.type?n.align:void 0,l=a?a.length:t.children.length;let u=-1;const i=[];for(;++u":""),""+c+")")})}var c;return s;function s(){let p,c,s,f=[];if((!t||o(l,u,i[i.length-1]||null))&&(f=function(e){return Array.isArray(e)?e:"number"==typeof e?[!0,e]:[e]}(n(l,i)),!1===f[0]))return f;if(l.children&&"skip"!==f[0])for(c=(r?l.children.length:-1)+a,s=i.concat(l);c>-1&&c{const n=A(e.identifier);n&&!F.call(t,n)&&(t[n]=e)})),function(e){const n=A(e);return n&&F.call(t,n)?t[n]:null}}(e),i.footnoteById=o,i.footnoteOrder=[],i.footnoteCounts={},i.patch=N,i.applyData=b,i.one=function(e,t){return v(i,e,t)},i.all=function(e){return x(i,e)},i.wrap=E,i.augment=a,g(e,"footnoteDefinition",(e=>{const t=String(e.identifier).toUpperCase();D.call(o,t)||(o[t]=e)})),i;function a(e,t){if(e&&"data"in e&&e.data){const n=e.data;n.hName&&("element"!==t.type&&(t={type:"element",tagName:"",properties:{},children:[]}),t.tagName=n.hName),"element"===t.type&&n.hProperties&&(t.properties={...t.properties,...n.hProperties}),"children"in t&&t.children&&n.hChildren&&(t.children=n.hChildren)}if(e){const r="type"in e?e:{position:e};(n=r)&&n.position&&n.position.start&&n.position.start.line&&n.position.start.column&&n.position.end&&n.position.end.line&&n.position.end.column&&(t.position={start:l(r),end:u(r)})}var n;return t}function i(e,t,n,r){return Array.isArray(n)&&(r=n,n={}),a(e,{type:"element",tagName:t,properties:n||{},children:r||[]})}}function N(e,t){var n;e.position&&(t.position={start:l(n=e),end:u(n)})}function b(e,t){let n=t;if(e&&e.data){const t=e.data.hName,r=e.data.hChildren,o=e.data.hProperties;"string"==typeof t&&("element"===n.type?n.tagName=t:n={type:"element",tagName:t,properties:{},children:[]}),"element"===n.type&&o&&(n.properties={...n.properties,...o}),"children"in n&&n.children&&null!=r&&(n.children=r)}return n}function v(e,t,n){const r=t&&t.type;if(!r)throw new Error("Expected node, got `"+t+"`");return D.call(e.handlers,r)?e.handlers[r](e,t,n):e.passThrough&&e.passThrough.includes(r)?"children"in t?{...t,children:x(e,t)}:t:e.unknownHandler?e.unknownHandler(e,t,n):function(e,t){const n=t.data||{},r=!("value"in t)||D.call(n,"hProperties")||D.call(n,"hChildren")?{type:"element",tagName:"div",properties:{},children:x(e,t)}:{type:"text",value:t.value};return e.patch(t,r),e.applyData(t,r)}(e,t)}function x(e,t){const n=[];if("children"in t){const r=t.children;let o=-1;for(;++o0&&n.push({type:"text",value:"\n"}),n}function B(e,t){const r=C(e,t),o=r.one(e,null),a=function(e){const t=[];let r=-1;for(;++r1?"-"+i:""),dataFootnoteBackref:!0,className:["data-footnote-backref"],ariaLabel:e.footnoteBackLabel},children:[{type:"text",value:"↩"}]};i>1&&t.children.push({type:"element",tagName:"sup",children:[{type:"text",value:String(i)}]}),p.length>0&&p.push({type:"text",value:" "}),p.push(t)}const c=a[a.length-1];if(c&&"element"===c.type&&"p"===c.tagName){const e=c.children[c.children.length-1];e&&"text"===e.type?e.value+=" ":c.children.push({type:"text",value:" "}),c.children.push(...p)}else a.push(...p);const s={type:"element",tagName:"li",properties:{id:e.clobberPrefix+"fn-"+u},children:e.wrap(a,!0)};e.patch(o,s),t.push(s)}if(0!==t.length)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:e.footnoteLabelTagName,properties:{...JSON.parse(JSON.stringify(e.footnoteLabelProperties)),id:"footnote-label"},children:[{type:"text",value:e.footnoteLabel}]},{type:"text",value:"\n"},{type:"element",tagName:"ol",properties:{},children:e.wrap(t,!0)},{type:"text",value:"\n"}]}}(r);return a&&o.children.push({type:"text",value:"\n"},a),Array.isArray(o)?{type:"root",children:o}:o}return{api:function(e){e.fromMarkdown=function(e){B(e)}}}},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).compromiseMarkup=t(); diff --git a/plugins/_experiments/markdown/package.json b/plugins/_experiments/markdown/package.json new file mode 100644 index 0000000..7724370 --- /dev/null +++ b/plugins/_experiments/markdown/package.json @@ -0,0 +1,52 @@ +{ + "name": "compromise-markdown", + "description": "plugin for nlp-compromise", + "version": "0.0.0", + "author": "Spencer Kelly (http://spencermounta.in)", + "main": "./src/plugin.js", + "unpkg": "./builds/compromise-markdown.min.js", + "module": "./builds/compromise-markdown.mjs", + "type": "module", + "types": "index.d.ts", + "sideEffects": false, + "exports": { + ".": { + "import": "./src/plugin.js", + "require": "./builds/compromise-markdown.cjs" + } + }, + "repository": { + "type": "git", + "url": "git://github.com/spencermountain/compromise.git" + }, + "homepage": "https://github.com/spencermountain/compromise/tree/master/plugins/markdown", + "scripts": { + "test": "tape \"./tests/**/*.test.js\" | tap-dancer --color always", + "testb": "TESTENV=prod tape \"./tests/**/*.test.js\" | tap-dancer --color always", + "watch": "node --watch ./scratch.js", + "build": "rollup -c --silent" + }, + "eslintIgnore": [ + "builds/*.js" + ], + "files": [ + "builds/", + "src/", + "index.d.ts" + ], + "peerDependencies": { + "compromise": ">=14.0.0" + }, + "dependencies": { + "hast-util-to-mdast": "^9.0.0", + "mdast-util-frontmatter": "^1.0.1", + "mdast-util-gfm-table": "^1.0.7", + "mdast-util-to-markdown": "^1.5.0", + "micromark-extension-gfm-table": "^1.0.5", + "unist-util-visit": "^4.1.2" + }, + "license": "MIT", + "devDependencies": { + "@rollup/plugin-commonjs": "^24.0.1" + } +} \ No newline at end of file diff --git a/plugins/_experiments/markdown/scratch.js b/plugins/_experiments/markdown/scratch.js new file mode 100644 index 0000000..a8e0bf3 --- /dev/null +++ b/plugins/_experiments/markdown/scratch.js @@ -0,0 +1,42 @@ +/* eslint-disable */ +import nlp from '../../../src/three.js' +import plg from './src/plugin.js' +nlp.plugin(plg) + +let md = `is this [working](http://noitsnot.com) *again*? nope. + +## oh yeah + +and this is too +-- +and **this** will be another section. i guess. \`inline stuff\` + +\`\`\` +block stuff +\`\`\` +afterwards + +> Alpha bravo charlie. + +and then a cool: +* list 1 +* list 2 +* list 3 + +hello ![alpha](https://example.com/favicon.ico "bravo") world + +` + + + +md = `| cool | also | here | | | +|------|------|-------|---|---| +| one | two | three | | | +| four | five | | | | +| | | | | |` + +md = `ok **cool** after. + +below` +const doc = nlp.fromMarkdown(md) +console.log(doc) \ No newline at end of file diff --git a/plugins/_experiments/markdown/src/Wrap.js b/plugins/_experiments/markdown/src/Wrap.js new file mode 100644 index 0000000..e69de29 diff --git a/plugins/_experiments/markdown/src/parse/crawl.js b/plugins/_experiments/markdown/src/parse/crawl.js new file mode 100644 index 0000000..ca5867d --- /dev/null +++ b/plugins/_experiments/markdown/src/parse/crawl.js @@ -0,0 +1,47 @@ +// [a, b, a1, b1] +const breadthFirst = (root, fn) => { + const list = [] + const queue = [root] + while (queue.length > 0) { + // get first + const node = queue.shift() + if (fn) { + fn(node) + } + // add to list + list.push(node) + // add kids to queue + if (node.children) { + node.children.forEach(n => { + // n._cache.parents = node._cache.parents + 1 + queue.push(n) + }) + } + } + return list +} + + +// [a, a1, b, b1] +const depthFirst = (root, fn) => { + const list = [] + const queue = [root] + while (queue.length > 0) { + // get first + const node = queue.pop() + // add to list + list.push(node) + // add kids to queue + if (node.children) { + node.children.forEach(child => { + queue.push(child) + if (fn) { + fn(child) + } + }) + } + } + return list +} + +export { depthFirst, breadthFirst } \ No newline at end of file diff --git a/plugins/_experiments/markdown/src/parse/index.js b/plugins/_experiments/markdown/src/parse/index.js new file mode 100644 index 0000000..886f48a --- /dev/null +++ b/plugins/_experiments/markdown/src/parse/index.js @@ -0,0 +1,14 @@ +import { fromMarkdown } from 'mdast-util-from-markdown' +import { gfmTable } from 'micromark-extension-gfm-table' +import { gfmTableFromMarkdown } from 'mdast-util-gfm-table' +// import { frontmatterFromMarkdown, frontmatterToMarkdown } from 'mdast-util-frontmatter' + +const parseMd = function (md) { + const tree = fromMarkdown(md, { + extensions: [gfmTable], + mdastExtensions: [gfmTableFromMarkdown] + }) + return tree + +} +export default parseMd \ No newline at end of file diff --git a/plugins/_experiments/markdown/src/parse/toPlaintext.js b/plugins/_experiments/markdown/src/parse/toPlaintext.js new file mode 100644 index 0000000..e7d25c3 --- /dev/null +++ b/plugins/_experiments/markdown/src/parse/toPlaintext.js @@ -0,0 +1,52 @@ +// import { depthFirst, breadthFirst } from './crawl.js' +import { visit } from 'unist-util-visit' +// import uuid from './uuid.js' + + +const shouldBreak = { + heading: true, + paragraph: true, + code: true, + thematicBreak: true, + blockquote: true, + break: true, + image: true, + table: true, + tableRow: true, + tableCell: true +} +const skipText = { + code: true +} + +const toPlaintext = function (tree) { + const texts = [] + let current = '' + let startId = null + visit(tree, null, (node) => { + // n += 1 + // node.id = node.type + '|' + uuid(n) + // console.log(node/.type, '|', node.value) + if (current && shouldBreak[node.type]) { + texts.push({ + startId, + txt: current, + }) + current = '' + startId = null + } + if (node.value && !skipText[node.type]) { + startId = startId || node.id + current += node.value + } + }) + // add last one + if (current) { + texts.push({ + startId, + txt: current, + }) + } + return texts +} +export default toPlaintext \ No newline at end of file diff --git a/plugins/_experiments/markdown/src/parse/uuid.js b/plugins/_experiments/markdown/src/parse/uuid.js new file mode 100644 index 0000000..470dcd1 --- /dev/null +++ b/plugins/_experiments/markdown/src/parse/uuid.js @@ -0,0 +1,67 @@ +/* +unique & ordered term ids, based on time & term index + +Base 36 (numbers+ascii) + 3 digit 4,600 + 2 digit 1,200 + 1 digit 36 + + TTT|NNN|II|R + +TTT -> 46 terms since load +NNN -> 46 thousand sentences (>1 inf-jest) +II -> 1,200 words in a sentence (nuts) +R -> 1-36 random number + +novels: + avg 80,000 words + 15 words per sentence + 5,000 sentences + +Infinite Jest: + 36,247 sentences + https://en.wikipedia.org/wiki/List_of_longest_novels + +collisions are more-likely after + 46 seconds have passed, + and + after 46-thousand sentences + +*/ +let index = 0 + +const pad3 = (str) => { + str = str.length < 3 ? '0' + str : str + return str.length < 3 ? '0' + str : str +} + +const toId = function (n) { + index += 1 + + //don't overflow index + index = index > 46655 ? 0 : index + //don't overflow sentences + n = n > 46655 ? 0 : n + // //don't overflow terms + // i = i > 1294 ? 0 : i + + // 3 digits for time + let id = pad3(index.toString(36)) + // 3 digit for sentence index (46k) + id += pad3(n.toString(36)) + + // 1 digit for term index (36) + // let tx = i.toString(36) + // tx = tx.length < 2 ? '0' + tx : tx //pad2 + // id += tx + + // 1 digit random number + const r = parseInt(Math.random() * 36, 10) + id += (r).toString(36) + + return id.toUpperCase() +} + +export default toId + +// setInterval(() => console.log(toId(4, 12)), 100) diff --git a/plugins/_experiments/markdown/src/plugin.js b/plugins/_experiments/markdown/src/plugin.js new file mode 100644 index 0000000..5c0faf5 --- /dev/null +++ b/plugins/_experiments/markdown/src/plugin.js @@ -0,0 +1,29 @@ +// import { convertToHtml, parseHtml, printHtml } from './html/index.js' +// import { convertToMd, parseMd, printMd } from './md/index.js' +// import { fromMarkdown } from 'mdast-util-from-markdown' +import parse from './parse/index.js' + +import toPlaintexts from './parse/toPlaintext.js' +import { visit } from 'unist-util-visit' + +const cleanup = function (tree) { + let n = 0 + visit(tree, null, (node) => { + node.id = String(n) + n += 1 + delete node.position + }) + return tree +} + + +export default { + lib: { + fromMarkdown: function (md = '') { + let tree = parse(md) + tree = cleanup(tree) + // console.dir(tree, { depth: 8 }) + return toPlaintexts(tree) + } + } +} \ No newline at end of file diff --git a/plugins/_experiments/sentiment/README.md b/plugins/_experiments/sentiment/README.md new file mode 100644 index 0000000..d1286a2 --- /dev/null +++ b/plugins/_experiments/sentiment/README.md @@ -0,0 +1 @@ +experimental rule-based, compressed-data sentiment analysis by Scott Cram diff --git a/plugins/_experiments/sentiment/package.json b/plugins/_experiments/sentiment/package.json new file mode 100644 index 0000000..48010e7 --- /dev/null +++ b/plugins/_experiments/sentiment/package.json @@ -0,0 +1,46 @@ +{ + "name": "compromise-sentiment", + "description": "plugin for nlp-compromise", + "version": "0.0.0", + "author": "Spencer Kelly (http://spencermounta.in)", + "main": "./src/plugin.js", + "unpkg": "./builds/compromise-sentiment.min.js", + "module": "./builds/compromise-sentiment.mjs", + "type": "module", + "types": "index.d.ts", + "sideEffects": false, + "exports": { + ".": { + "import": "./src/plugin.js" + } + }, + "repository": { + "type": "git", + "url": "git://github.com/spencermountain/compromise.git" + }, + "homepage": "https://github.com/spencermountain/compromise/tree/master/plugins/sentiment", + "scripts": { + "test": "tape \"./tests/**/*.test.js\" | tap-dancer --color always", + "testb": "TESTENV=prod tape \"./tests/**/*.test.js\" | tap-dancer --color always", + "watch": "node --watch ./scratch.js", + "build": "rollup -c --silent" + }, + "eslintIgnore": [ + "builds/*.js" + ], + "files": [ + "builds/", + "src/", + "index.d.ts" + ], + "peerDependencies": { + "compromise": ">=14.0.0" + }, + "dependencies": { + "efrt": "^2.7.0" + }, + "license": "MIT", + "devDependencies": { + "@rollup/plugin-commonjs": "^24.0.1" + } +} \ No newline at end of file diff --git a/plugins/_experiments/sentiment/scratch.js b/plugins/_experiments/sentiment/scratch.js new file mode 100644 index 0000000..43f7da1 --- /dev/null +++ b/plugins/_experiments/sentiment/scratch.js @@ -0,0 +1,11 @@ +import nlp from '../../../src/three.js' +import plg from './src/plugin.js' +nlp.plugin(plg) + +const arr = [ + "the acting was terrible", + "these pretzels are making me thirsty", +] + +const res = nlp(arr[0]).sentiment() +console.log(res) diff --git a/plugins/_experiments/sentiment/src/data/_pckd.js b/plugins/_experiments/sentiment/src/data/_pckd.js new file mode 100644 index 0000000..68a4cd4 --- /dev/null +++ b/plugins/_experiments/sentiment/src/data/_pckd.js @@ -0,0 +1,28 @@ +/** +* pattern_en_packed +* +* Variable containing polarity, subjectivity, and intensity scores for selected opinion-based words in English, compressed with efrt 2.7.0 +* +* @author Scott Cram +* +* Original version: +* @author Steven Loria +* @see {@link https://github.com/sloria/TextBlob/blob/dev/textblob/en/en-sentiment.xml|en-sentiment.xml} +* +* From xml file above, multiple occurences of the same word were replaced with single instance, and values were averaged to four decimal places. +* Resulting data was trimmed so as to only contain polarity, subjectivity and intensity scores. +* All apostrophes removed. +* Added all words from negation array below (with dummy values same as "wont", since they won't be used.) +* Converted to JSON object. +* Format for entries: "word": ["i1.0", "p0.0", "s0.1"] +* i denotes intensity score +* p denotes polarity score +* s denotes subjectivity score +* +* Alternative versions: +* @see {@link https://github.com/NaturalNode/natural/blob/master/lib/natural/sentiment/English/pattern-sentiment-en.json|pattern-sentiment-en.json (Another English language version)} +* @see {@link https://github.com/NaturalNode/natural/blob/master/lib/natural/sentiment/Dutch/pattern-sentiment-nl.json|pattern-sentiment-nl.json (Dutch language)} +* @see {@link https://github.com/NaturalNode/natural/blob/master/lib/natural/sentiment/French/pattern-sentiment-fr.json|pattern-sentiment-fr.json (French language)} +* @see {@link https://github.com/NaturalNode/natural/blob/master/lib/natural/sentiment/Italian/pattern-sentiment-it.json|pattern-sentiment-it.json (Italian language)} +*/ +export default "i1.0¦0:N2;1:MG;2:N5;3:MX;4:M7;5:MQ;6:MP;7:M3;8:MY;9:KB;A:M1;B:JE;C:LP;D:L2;E:IX;F:II;G:KX;H:JO;I:IO;J:MW;K:LC;L:L0;aJTbIOcFQdE7eD0fBNgAShA7i8Wj8Rk8Pl7Xm6Sn6Io63p4Zqu4Vr46s22t1Hu0Fv09wPyM;aNellM4oungM;!er,iD;aawwnnnn,rn;a00eWhUiRoMro3tf;manJ0nPodKHrMu3Jw;kmanli89sNthM;!leJLwDFy;e,t;deCDky,t;de,lNnMse,tI;!ni3s;d,li3;addupwitdM2iMo6;ms9te;aOiN0lMre2st2Nt;coJLl-M;advis0intLVo3V;k,ltFB;cGSnPrOsM;nt,teM;!d,s;m,y;!ts;aPeterCiNoDDulM;gC5nG0;bCCcMoFLsu1t1vLL;io7tim;cu5JgA7pMrGst;id,orif5;gl0LltiK8nPppErOsMttE;eMu1;d LZfBleIW;bCinEK;a0Fb0Cc09d08e05f01grL5hYiVknown,likeI7nUorigF5pPreaOsNtMusu1w0;hink4race4;alt0chool0ettK8tirr0;d,liH;aL9lPrM;eNoM;ceDKpKD;cedeLZdi8B;ay4easa2;ec5Hotic0;l5Ompor8NnMq9Rvers1;spir0teM;lliFArrupt0;aNeM;altEHsiDP;mpG5pGG;aiOoMruitfB;cJErM;gett4tunateG5;r,t04;ngaGNvJ4xM;cell0pM;eUlHQ;eserv0ign78;ared-f68h85ivil,oMrit9ut;mMntroEWok0;fFKmGR;eNlMraH6;emLHinH8;fitKliHT;b6dultBPffeMnswFQppeJEsham0vow0waIA;ct0;iFLyM;!-duckJD;a05e01hXiVoSrNwMyp9;ist0o-dimen4I;aPeOiDKoub1AuM;e,tM;hfB;men8Hn9C;diESg5pp0;il1UneFpNt1uM;cIZgh;!-not9Uic1;dy,gGRny,reMt3U;d,soHU;anks,eOiNoughtMrillJ;-provoGPfB;ck,n,rd;atr9mHJoret9;chn9dGen1YnOrM;min3HrM;est5Di7X;!se;leKOme,steF;a1Mc1Je19h14i0Yk0Wl0Tm0Qo0Jp0DtYuNwMympathI6;e1Fi3N;bVcRddI3ffQit4pNrMspensH3;e,prisJre1;erNportiM;ng,ve;!b,fi8Xi57natD9;e3QocaK;ceNh,kM;erBJs;e2XssM;!fB;conscGjeC0norm1seqJOt6urbC;aWeTiRrOuMyliD;mb6nEWpidM;!iI;aMetCOiG1o3utK;ightMnH6;!forGZ;ff,nkM;er,s;adNll9SreotypM;ed,ic1;faJ3y;bBHinFle,ndaKArNtM;e-suppo57ic;k,tM;i3li3;aniDeOiritNlendJ2oMrightFW;ntanD2of;ed,u1;cMnt;iMtac2N;al,f5;bEci1ftRlPphOrLuM;nd,rHWthM;ern;ist9Hom28;e,iM;c91d;!-boBH;aNiMooAW;le6W;ll6Xrt;iNoM;pE3w;ck,gF6p7A;ept9iM;ll0ttiD;ckQgnifica2lPmNnMxth-graFH;ceG7g6istEks;il8YplM;e,iH;e2ly;!eDS;aPeEit,oNriMy;eDAll;ckJd7Brt,uMweL;ld2;dy,ky,llI1m,peFrp;aUcRizurBDlfQnOrNv2SxM;u1y;io7mE8;sMtim93;aCLiA;-acKiD;!ondNrMuFR;et;!aLhaHH;mFsI0;aMum;rMtGN;ey,y;dCPfe,me,rcaHtisM;fMyfi3;i0yi3;a07eTiQoNuM;de,iH5r1sG6thF;b0Afl,hypnol,maFPse,uM;ghMnd;!aFF;ch,dicu88ghtNp-oMsk-free,veK;ff;!-E2iHF;aYcXdWfresGAgUhaDlTmSpQsNtardMwarFS;!ed,s;ourcERpM;ectMoC2;ab6fBiIR;eMut4;lBCtiA;ark4inis2Wo8;atHWe3YigG;rets,uM;l7RrgitAE;!eeGWoubt4uI9;e2ogniz4;dy,liHsS;nNre,uMw;co7ncAL;coHEdom,k;estiOiM;ck,et,rC0xM;ot5;on4;a0Ie0Dh0Bi08l03oXrOsychoNuM;bl5re,taA;lFFt5;eRiQoM;fOlix,miNpMud,vA0;aganda,er;ne2si3;es0Ui1EouG9;ceFmaLor,sBSva8;acA6ciNdi3TgTse2tMvG;e2Sty;o7se;et5iPlOor,p0AsNtentMwerCR;!i1;iAsHH;ar,it9;gMntF;na2;aPeNodM;!di3;asMonaH;a2ed;cGBin,titud9IusH9;nMo7ty,vot1;heaMk;ds;antasmagMenomen1ilosoph80ys9;or5;aPeviDppeLrM;fe8MpMsAO;etuMlex0;alCW;cDCky;infBlRrNsMthEC;sioFDt;aOtiM;al,cM;ul6F;de,llel;e,p4;bYccaXdd,ffVkUld43nCNoz90pSrRthEutOverMwn;-the-top,aMbGKexcit0whelFH;ll;dF8rageNsM;iCPt5F;d,o7;di99ig9Fthodox;enC4po6ItimM;um;!ay;beFNeM;rs;siA1;ed8KjecAsMvG;e7Stacl8M;aSeQiGNoNumM;b,eFP;!b6nvio9CrNstalg5tM;!ab6;m1wegiC;ar,cMedFgaAithErve-racBWt,vEw,xt;essaL;iGKk0meFrrF1sIturalNuM;ghIseEO;!iH;a0Ee05iZoRuMysterG;ch,g4OltiNnda4CsMzak;ic1t2;lMp6;atM;er1;dQnPrNst,tl42uth-waM;te6G;alMe,on6U;!iDR;k3Yosyllab5;!eM;rMst;a8n;dQghIlPnNsMx0;er4fiCGplac0si3;dMim1or,us;-boggDKleC4;d,i9D;!d6;aSdiPlodrama,m7HnOrNsMtaphor9xDP;meriDFs4H;ciFe;a8Lt1;caNev1ocrM;e,iI;l,tiFR;gEnMsB7;!ingAI;d,gVin,jUlSnPrOsNtM;hemat9uC1;culi3IsiFMte4K;k0ri0ti1ve4V;nerB1oNq2VyM;!-sid0;ri1;adroit,eM;!vo83;or;ic9EnifiM;ce2;a09e05iVmao,oNuMyr5;c8Ysh;c1g9lSnQo9HsePuOvMw,y1;ab6eMi3;!d,ly;d,sy;rs,s;eAMgM;!-wiAB;!ol;ab6ceUfelSghtQkOmNnguiHtMve8Z;eCAt6;it0p;ab6eM;d,ly;!-heaM;rt0;iMo3;ke;ntG;aOftNgMn6Jss1P;al,endaLib6;!iD9;dBNst;me,rge1Xst67tNughMwfBzy;!ab6ed;eMtE;!r,st;ey,iM;ll0nd;aOewiDoy,uM;stMveni6;ifi0;ckassMil,mm0pane8M;!es;c0Vd0Rll0Qm0HnPrMs2tB2;iDon5rM;eleMi5O;va2; 0Ba0Ac06d02eYfWgenGhuma25i45nUsStMvenA;eMiBMrigui3;llOn8ErM;e57naM;l,ti7C;ectu1igentM;!sia;a1YecuAGpirMta2ulting7Z;a77i3;er,oM;ce2vaA;aMlexDJuriaK;mo7nti6tuC2;luOvQxpM;eMlic4reDF;d5LrieCV;ct4;eOiNomM;it4;e,spens4vidu1;ciph6Qpende2;alc8MoMredD9ur4;heDOmpNnMrruX;sistenci5Gven5D;ar4e6L;ppo33rticu90uspicG;good tMsto8W;as8;aginaAbeci6itati88mTpM;aRePlicOoMressCP;rMssD0;ta2;at0it 7X;cc4rceM;ptCW;s31t51;ane2en7G;!eg1;eOioM;cy,tM;!ic,s;al,ntifi4;ky,on5y;aVeTiSoOuMyster9;ge,mM;an,b6oBZ;llBGnestOrriMt;b6fM;ic,yi3;!-to-god;dd9TghSlarGnd6Pstor3Bt-and-mi8Z;aMro5;lt4YrtfeBVvy;d2haTlf,ndSpQrOs2teNve2zarM;do7;!d;dMsh;!er;hazaCEle8RpM;i6Dy;-held,so8Yy;!haM;!haM;!ha;a0Ee0Bi0Al07o02rNuM;ard0ilI;aYeUiRoPrNuM;d6Veso8R;!rM;!r;ss,tesqM;ue;eNm,pMtI;pi3;f,vo7;atNeMy;k,n;!eM;r,st;ndMph5tu0Z;!iloqAU;dforsak8Yld8YoNrM;g4Ny;dMfy;!y-gooM;dy;ad,oNuM;ey;b1om;a2ft0mmic5F;nMrmCtt4;er6Ct6uiM;ne;meMrgantuCw5By;!changE;*c6Wa0Le0Ii0Al05o00rSuM;ckQllOnNrtMtu7Z;hEiBK;!ny;! of life,-M;bodi0fleBFleng2B;!ed,i3;agi6ePiMostbitt8DustratJ;end6VgNnM;gy;h1Eid;eNnMqA4sh;ch;!-thin6JstM;an85;llowi3rMur21; su7KcOeign,getNmMtu97;er,ula5;fBt4;ed,ib6;aOippa2uMy;ffMid;!y;s34t,wM;ed,le72;c43endiDftie1RlSnPrNtMx0;!ti3;m,stM;!-st10;aNeM;!-loo62;l,n7U;l0t2V;aNeb6licMma6veriDw;ito7;rfB;bVci1iTke,l4TmRnQrOsNtIultFvorM;ed,i8;cinaKt;!-out,cMthermo92;e,ic1;at5taH;iliMo7;ar;lMnt,r;!ed,s,u6R;l0rNuM;lo7;ic8F;a0Qc0Nd0Lerie,ff0KgoiHl0Im0Gn08p5qu1r06ssen05th9uropeCv03xM;a00cXhWot5pSquiRtNubeM;ra2;eOin1BrM;aMe6I;!ordi2D;nUrn1;si8;eMlo6OresS;ct0nRriM;e90mM;ent1;au0YilaraK;eMitJu43;l2Ip31sM;si9U;ct,ggM;er7X;eryday,iM;de2l;ti1;ot5ron2CstwMudi8;hi6;dRerg6LgQigm5SjoyPlighOoNtM;ertai3OhusiaHi5Z;r64ugh;te3M;!ab6ed,i3;a3YliDros77;eaMle5K;ri3;o2KpM;ir9ty;abo8UeM;ct,ga2m2O;ecAi3;gy,uM;ca2E;centr5oM;l6DnomM;ic35;rlMsy;iEy;a11e0DiXoSrQuMynam5;dsvil6e,hNllMmb,sIuuh;!s;!hhM;!h;aMeadfBi0own0unk,y;g,m52;cum28es2meHnOubNwM;dy,n;le,tfB;e wiMt;th;a00dZffXgit1mWrUsMurn1;aRbelie06court1De0LguQhone78lik0possePtM;aNinTraug3XurM;bi3;nt,st4K;ss0;stJ;bl0ppointMst7I;ed,i3me2;eMty;ct;!-witt0;e8FiM;cu7Fde2;act5nt;lect1pha3A;ad08bau07c05ep,fZlVnomina1GpSsPtaOvMxtr1;asMelop0o6W;taK;il0;erNpe7OtrM;oyOucA;vi3;lNressM;!i3;or4;iMuxe;cNghtM;ed,fB;a8io7;eOiMt;cMni8;ie2;cMn2G;atM;es;e2reM;as0;ch0;!ly,pC;iNnge6Lrk,zM;ed,z55;ly,nI;a27e21h1Li1Kl17o01rTuMyn9;lPn1LrOsNtM;e,ti3;hy;io7re2si7F;iNtM;ur1;naL;aSeRiPoOuMyi3;ci1dMel,shJ;dy,e;ok0ss;mMsp,t9;in1;aAd6Qe1A;fIp,zy;ar1Ac0Qhe74l0Om0BnSol,rNsmopolitCuMw,zy;ld2ntFrtQ;iacPpNruptM;!ib6;o6HuM;le2;eo7;c00fYsUtPvM;eNinM;ci3;nZx;ePinOrM;iv0oM;versi1;ge2;mpo3Xst4;cGecr4SiMta2um41;dNsM;te2;er4;iMusJ;de2rm0;avo-convex,eMi0Ore8;iv4pM;tiM;on1;a,e-at-4fXic0DmVpM;eTlNreheM;ns5W;ainQePiM;c4EmM;enM;taL;te,x;ed,t;l3Ote2;ercialMon;!ism;ort4;d,lect5LoM;rfBss1;ky;aVeSoPuM;elessNmM;sy;ne1Y;s0udM;-covMle1W;er0;aMvE;nMr;!ly;ssMustrophob5;icMy;!al;nem1Qviliz0;aXeTiPopOrNurM;ni3;istiCon2N;py;ck2DlNneMtch46;se;diDlM;i3y;ap,eM;rNsM;ie3Sy;fBy;llenOngeFrM;acteriHiMmi3;sm1Bt4;gi3;aQlebr38ntOrM;emoni1taM;in;er,rM;al,ic;seF;cophoWlUnTpRrPsNtMuH;c2Bh36;t-irMu1;on;diac,eM;fBle0W;ab6tivM;aKe;d3Ct;cMm;ul4;no7;a0Ie0Ei0Cl03oZrNuM;d1Hsy;aUeathtaTiRoNuM;sh0t1;adMk1F;!-M;miM;nd0;ef,gMllia2tiD;ht;ki3;insiNsh,vM;ado,e;ck;diOgg0ilerpNld,nny,otleg,rJundF;le0A;la8;ly;aSeRi29oMue;nPodM;stNthirsIy;ty;ain0;de;ak,ch;ck,nMst0ta2;d,k;gMograph5ttEzar08;!gE;autifBco24efy,hi1YlNst,ttEwitc17;er;iMov0;ev4;ck,dRlmy,nQrOsNttlM;efB;e,ic,s;barMe;iCo7;al,d0g-up;!neM;ss;b34c2Qd2Aeriform,f20g1Whw,i1Tl1Gm15n12p0Qr0Gs0At06uXvVwNxiomM;at5;aSeQfBkOwM;!wM;!w;wa32;ul;aLsoM;me;re;ail4eraMid;ge;rea8strTtM;hPiHoM;biograph9noM;mo7;st5;eNorM;itaA;nt5;aliC;mospher5rocGtMyp9;enMracA;da2tiM;on-getKve;cQhPiCkew,sumpAtM;oMu8;nis04unM;di3;en;et5;bitUchaeRduo7e2oQre14tM;eOiM;fiMst5;ci1;siC;us0;olM;og9;ic1;raL;hon5pMt;aVeSlRoQrM;eciat1IoM;acNpria8xiM;ma8;hi3;r0Usi8;aud4icaA;aNtiM;zi3;li3;llJre2;gMnoyJxG;erMry;!ed;aRbPeNuM;si3;n4rM;icC;itG;io7;tMzi3;eurNoL;ry;!iD;sh;aWcohVg08iSlNterM;na8;-arouPeNusioM;ns;g0viM;at0;nd;enMve;!aK;ti3;ol5;rMs;mi3;nt,rM;ed,heM;ad0;ed,haOiNlM;ow;le,taA;st;fTloSoremPrM;aNicC;an;id;enM;tiM;on0;at;ab6irmaAlM;ue2;ama2dZeWjectiv1ministr4orUuTvM;aReM;ntuOrM;saAte2;ti0N;ro7;us;nc0;lt;ab6i3;ab6;pt,quateM;! M;to;ictMl0;ed,i0C;adem5cSquaiRross-the-bQtNuM;a8te;iNu1;al;ng,on,ve;oaX;nt0;eOomplNuM;ra8;ish0;ssM;ib6;le;ic;horYle,oXrUsNuM;nda2;enRoNuM;rd;lu8rbJ;ed,i3;ng;te;ce;iMupt;dg0;ed;ve;re2;nt|p0.0¦0:3I;1:2U;2:35;3:3K;4:3A;5:3E;6:3B;7:2W;8:2A;9:3J;a36b2Tc28d23e1Tf1Jg1Gh1Ei17j16key,l0Zm0Pn0No0Kp0Dqui0Cr06sQtJuFvDwByA;el3Foung1;estXhi3DoA;man2UoP;aAeter4isu0;porSri7st;ltima39nApp1rb4tt1;aBcr0AiAw6;nterrupt6vers0;vow6wa1S;eDhBiny,oAradi2B;p2t0;eAiJ;atr2m2Uoret2;chn2enBn,rrA;est0Jif3;!age;ame,eNhMiKmall1oHpFtaDuA;bBch,dAspense0L;den;consci7seque8urb4;ndaArK;rd;an29ecAiritu0;if3;lButhA;ern;e,id;le8mA;iIp5;e1ort;cond,lf-acAver0;ti9;eBomant3uA;r0ssi4;al1Yce8d,guClAminisce8spe2P;atAigi7;ed,i2T;lar;et,rky;aFers1IhEi7oCrAsych29ubl3;ese8iAop1;or,va29;igna8lAssib5t0R;it2;antasmagor3iloso20ys2;lp2Crallel;bBccasi1Bn1MpAutsi1Overall;en,posi23;je2Bvi7;ak6eAorwegi4umer7;cess0Wt,xt;aGeEiCoBuAysteri7;ltip5s2;de0Yr0;dAx6;!d5;diAtaphor2x1X;c0ev0;le,nAr0Cs09themat2;oAy-sid6;ri0;aCeBike17oA;c0w;ft,ss1;rg1stCtBwA;ful;er,t1;!i9;apa0Tew0Z;mFnAr0Yt1C;calcul1NdBevCi00n1s0JternaA;l,ti0M;epende8iBomA;it1K;e,vidu0;men0Nplicit in;and-held,eartfelt,istoricAum4;!al;eBia8lob0rA;a0Teek,itty,o07;n13rm4;aIema5iGluid,oErBuA;rth1tuQ;agi5eA;eAnch;-thinki9standi9;llowi9rmAurth;er,ula3;c04naA;l,n05;bricat6ci0rthermost;arli1ccentr3mo01nGqu0rstwhi5sDurope4xtA;eAra;nArn0;si17;pecial09sA;enA;ti0;gl05oBtiA;re;rm7ugh;ai03eCiBoAynam3;cumentGmest3ub5;ffere8git0urn0;ep,finiteAnominaOxtr0;!ly;athol3entrThPinem08lass2oFrDuA;linBnni9rA;re8si0T;ary;it2oAuK;ok6ss;arMmmerInCrpoBsmopolit4untleA;ss;ra08;cCsA;ta8;nt;avo-convex,epA;tiA;on0;ci0;iBrA;isti4onX;neA;se;al,ic;aKiGlEodiDrA;iAoad-mind6ush6;ef,tA;ish;ly;ank,onAue;de;gBograA;ph3;!g1;er;ck,nd6rbar7s3;ous;boXcSdOfKgJlternaImerLpproachi9rchaeGsi4tEuBxiomA;at3;strBtobiograA;ph2;ali4;mosphAyp2;er3;olog2;ic0;te;low;loat,oremention6rA;ic4;an;ed;diCministrA;ab5;le;ctiF;adem3tA;i9u0;al;ng;ic;ve|s0.1¦a0Cb08c00dXeTfPgOhNiLlJmDobjCp8respCs4t2un1w0;ants,orR;affect0Fco00origin0HprocXw0F;e0heoretTitular,wo-dimen8;chnSrrestE;e2ileHlippLmiQo1peHt0ucceeds;artKumbP;lKur0A;amXlf-actI;hantasmagor05olitNro0sychologN;fes1p0;aganda,er;sion07;ec2;a2edica1i0;lita00nus;ti04;le,n0ture;o0y-sidZ;ri00;augh,i0oses;nguiDteraU;cy,mplicit in,s0;nt;inderTumF;ettab6rey;ew,iftie2lu1ollow0reestand0;ing;id;th;mpir2rstwhi1xt0;ernOra;le;icM;extrLisposs1ome0rownJulls;stF;essH;a6ent5lo3osmopolit2r0ulturI;o0u7;okE;an;sCud0;less;er,r7;nt,thol6;a2ig,lue,o1ru0;sh7;dily,gg6;nd5re;bo7ct5djectiv6float,ll3mato2p0;hon0preciat3;ic;ry;eg0usions;ed;ion,u0;al;ve|s0.0¦0:1O;a1Gb1Cc10d0Re0Qf0Mg0Hh0Di09j07kill1Tl03mWnUoTpRrMsFtAu6v4w2y1;ellow,ou0J;aste1estHhi1Nooden;!d,s;a1eter1Oisu0;cuum,porif1R;n2pp0Fr1seZ;b1Lin0R;explain1Li1;nterrupt1Kvers0;e3h1oilet,rapp1J;e1i7;atr1Bmat1K;en1n;!aB;adi0Te6i5outh4pani0Yt2u1;burb1Ccce0O;anda1retch1C;rd;ern;nks,xth-gra0V;cond,izur0Ever0;e4o2u1;r0ssi15;hypnol,ugha1;ge;d,ha0Nlat0C;arallel,hiloso0Rr1;esent,ior,ov07;bstacl06ffers,pposi0Wverall;e1orwegi0Y;t,xt;a6e4id3on2u1;ltipWs0Qzak;key,osyllab0Y;!dU;di1x0R;c0ev0;rAthemat0L;a1eft,oc0;sti0Rt2w1;ful;er,tF;a1ewi06;il,pa03;mitation,n1ri04t0A;consistenciPdie,i2terna1;l,tM;ti0;a3i1;storic1t-and-miQ;!al;nd-held,rd5;amecha3e2lob0r1;eek,oM;n01rm09;ng1;er;a3inan3o1rench;rm1urth;er,ula08;ci0;ngliNurope02;aily,e4i3o1;cumentBub1;le;git0urn0;fec3nominat2stroy1;!iZ;ion0;at1;es;ardiac,h9lassNo5ro4u1;lin2rs1;ive;ary;ss;m1ncavo-convex,rporaK;a,mercial1;!i1;sm;i2r1;istiIonC;nese;ack,iographKl2oilerplaDriti1;sh;ank,on1;de;bsence,cEfAlterna9merBpproachiFr5siCtmosph4u1;str2tobiogra1;ph5;ali9;erC;chae1rest;olog1;ic0;al;te;oremention3r1;ic1;an;ed;adem2ti1;ng;ic|s0.9¦0:1T;1:1N;2:1M;a1Cb14c0Qd0Le0Df07g06h03iXjUkind,lSmPnNoMpJrGsBt8un4w3;elcome,ise,orth12ro1Q;asham0befit0Pchas1UdignTexcell0f5grad0ha4necess0Hpr3;eced7opiQ;mper0ppy;aith16ruit16;a3ren0O;l3ste0W;ent0;ensi1Jp6t5u3;bnorm0Aper3rpris0;fiOior;at14ereotyp0;ectac8ontane1;a4e3ofl;doub0Jleva2source0W;nk,re;ain0Uerplex0leon00o3rolix;p3wer0L;ular;bedIptimum,verexcit0;a3o0X;me0Hugh0N;annerly,i4o3;de0Vtley;gh0Knd0E;ate0TenCicen3ong-wind0;ti1;ackass4ust3;ifi0;!es;mpat7n3ron0L;auspici1credi0Md5exp4huma3tellige2;ne;ed4lica0K;ispensa0JomiZ;ie2;a4ero0Fonest3uge;!-to-god;nRte,zard1;orge1randiloque2;a7i6l5r4ull3; of life,-fledg0;ee-thinki0Kingy,ust8;ippa2y;ll0rst-st0H;bl0ir,nt7vor0;conomic9le7n5rot05x3;hila3perienc0ubera2;raE;orm1thusi3;ast01;ct,ment3;ary;al;anger1e4o3;ne with,ubtR;bauch0ft,l4p3;loraWressi05;ica09uxe;aDhBiviliz0lassy,o8r4ut3;ti02;a5u3;d3sB;dy;fGzy;cky,ntes4r3;pule2ruptiN;taM;ill3urniU;iTy;re4st-iron,tc3;hiR;less;a8eefy,l5o4ra3;insick,sh;nny,otleg;ast0ood3;thirs3y;ty;rbar1ttle3;ful;bsoKcJdCfAgha9hw,lgBmaziHnnoyiHpp7rtesian,s5ttenIuthoritaIww3;!w3;!w;cet3tuJ;ic;alliClauda3reciaD;ble;st;firmaAra3;id;dic8ept,o6ve3;ntur1rte2;nt;ous;ri3;ng;tive;ross-the-board,u5;lu4rb0;ed;te|s0.3¦aTbScPdMeHfEgreen,haha,lDmCpAre9s2thought-provokVundeservOv1w0;haddupwitdQonky;apid,e6;e3h0ucks;a1o0;rt,uldA;m,peless;cond0rmon;a0hand;ry;al,gurgitates;ar8erson9hilosophJi0reachy;nk,ous;asculine,odern;ow,ush;ail1luff,reque0;nt;!ed,s,ure;ar3ssen1x0;cruciating2ploitE;ti0;al;ly;evelop1is0;abl0tinct;ed;hitch1onc0;eiv7rete;at;est,usy;d2lienat1xiomat0;ic;ing;ministr1ult,vers0;ative;able|s0.2¦a09b06c02d00eZfVgrief,haUiRjoy,lQmKnHoFpDrAs8t6u3w0yarn;as0Fe1iAo0;nt,u02;ll-intentionVre0D;gly-duckl03n0s3;answerTe0fortunateS;ngag01ven;hanks,on0rouM;el00;milPob06poof,ta0will;inlYte-supportO;e1obot00ui0;ns;dunda03grets,moZ;erpetualJiBl0rofiterT;atitud1od;ld,oz0;es;e1o0;!t;ithVvV;e3i1u0;ch,ltilaterSstU;nor,s0;fire,placA;diocri0lodrama,ntPtaphorO;ty;augh7egNosers;mpercepti1n0;fatuat5telligentsia;ble;dLppinDsLveL;ix2orc2rustrat0un;ed,ing0;ly;ed;conomBrudiC;evoid,idFo0;esEnt;hoppy,inemat8luelessn5o0;mplain1u0;ldB;ed,t;adn1udd0;ing;ess;glow,i6ng5re6typ3u0;rea1tist0;ic;te;ic0;al;er;nt|s0.125¦bas2f1independent,occasional,s0;ame,pecif1;lat,oreign,uture;ic|s0.5¦a1Db14c0Vd0Se0Pf0Fg0Ch0Ai07l04mZnYoWpNquiMrJs8t5un3v1w0;himsEorthwhi19;a0ulner17;gue,ri0W;a0blem1Glike0Estirr1H;b15ppea1Cwa0F;e1houghtWiny,o0ruthWyp9;p,uchi1B;n0Urminal0A;afe,h8i7k5m4t1u0;bt10ch,dd03ffoca0GrprF;a1eaAi0;ff,nks;le,rt14;all0Uooth;ept0ill16;ic0W;mplist12nce03;a0od3y;ky,llow;andom,e0ip-off,omant0Z;a0deemi0Xminisce0Kspe6;dy;ck,xot0W;alp0Le7henomen0Oinheads,lausib0Mo4r0uW;e1ima0Com0;isi0S;di0g3;ct0H;i0te0C;g0n03;na0A;ace6ppe05;bvi02ffbeat,k0pGrdina04;!ay;ot0Aumer00;a3e1ild,o0;re,st;aning0re;ful;jor,ny;arg03ess03i1o0;usy,v03;ab03k02mp,tt03ve;con0Bdentifi01lleg04mplicat0Dn0;articula06terest0;ed,i08;ahahaha,ea0ighX;ltAvy;en1immicky,luey,old0reatV;en;erXuine;a8i7la5or3r1urt0;hRiZ;agiSesh,iend0;ly; su0gettP;re;s0wZ;hy;ne,t2;miliar,rce;arliIccentrTmpty,n1xhaus0;tiR;deariQergetRjoy,ough;efiniMi1u0;ll,mb;m,shon8;heesi7o0;ar5m3n1un0;tless;ceptionDsci0;ous;e-at-8ic,mon,plimenta0;ry;se;est;a6e2i1lata0;nt;gg1tt1;liev1tt0;er;ab0;le;n0ss;al;bridg7ccompl6lcohol5pp0;ea2licati1ropria0;te;ve;li0;ng;ic;ish0;ed|s0.3333¦adequate,brief,const0extensive,first,hidden,main,older,particular,quiet,realistic,subject,vibr0;ant|s0.6¦a0Ab08cZdReMfJgIhahahahaha,iEjamm0OlBmAn8orthodox,p7r6s3un2w0;arm,ell-off,o0;manly,r02;hesitati0Gknown,notic0L;ec1hrill,t0;ark,inker;!u03;aucReaso0Aisk-free,ude;eevish,loddi0Boor;a0onviolT;turalisWuseT;ark0DinimF;a04e1ifel0o0B;ike,o06;ftist,gi04;cky,n0;c0experie05flexi02tZ;ompa0u0;ra00;ood,uard05;a1rostbittRu0;ck,ll-bodi03;lIst;colog2n0rroneBth2veryday,xtinct;ig8joy0;aTiU;ic0;al;estrucFi5r3u0;h0sty,uuh;!hh0;!h;a0iSy;ma9;aphan0ffer4slikQ;ous;a5loud-coverOo0ryiJ;mpelliIn0;ci2secr1ting0vex;ent;atK;se;p1us0;tic;tiF;izar0road-mindF;re;cBd9larmi8me6pp3r1sh0we2;en;bitr0ousB;ary;etizi4ortion9rox0;ima0;te;na0;ble;ng;dict3equate to,va0;nc2;quaint1ti0;ve;ed|s0.25¦aDcAe8fic9juveni7logicCm5odd,p3re1s0usuC;eason5o6tel3upporting;c0ligious,petitive;e8ognizab4;ast,o0;lar;arri0ix0or6;ed;le;duca0qu3vide2xact;tion2;entr1onsiste0;nt;al;mateur,ware|s0.8¦a05b04cTdNeLfHgEhaphazard,iAl8m7p6re5s2tiOun0vulgar,well-advis08young07;blink05c0focus07think00;ared-for,ontroversiVut;arcasOh1kitt04t0uckerA;abb02eadfaF;it,ock03;putVtard02;ivotQrecise;aladroit,uggy;ikZo0;lol,ud,vY;diot2mpassBn0rrit1;corrupMfuri0;atT;!s;argantuan,entNrr0;!r0;!r;*2a0ree,u2;na8rthermo0;st;ckL;ffect0xcitK;ive;azKe4i1ow0;dy;dac1ffidJrty,s0;astrCbelievFturbF;tic;fenseless,servD;a6h5o1r0;ap,itic2;l0mfort5;lec1oss0;al;tib3;arit1ild7;cophon2lcul0ndid;ab0;le;ous;loodstain3right;bhorr3lleviat2mateur1nnoy2pposite,ttention-gett0;ing;ish;ed;ent|s1.0¦0:3W;1:3V;2:3T;3:36;4:40;5:3S;6:3P;a3Ib3Ac2Kd28e1Yf1Mg1Ch15i0Wkey,l0Tm0Jn0Go0Dp07qu05r01sMtJuDvBw7yaaawwnnnn;ac05e9it2Io7tf;nde1Rr7w;st,t2K;alt2Ji45;a1Ci7;c5o1Z;g29lti2Pn7tt0H;appetizi1believ4comAexpect0f8i7predict4real1Zsalt0usu6;nspir0q16;air,or7;gett4tuna2M;fort4mon;e8hril25ire38op-notch,r7wist0;emendo2oubl0;d5r0S;aJcaHeFhoc2XiEoDpCt9u7ympaW;p7rre6spens2R;erb,por3L;ereotyp22ri2Uu7ylD;n14pid7;!i1Y;irit0lend31;ft-boil0phist2Cr3D;cke10nist00;lf7ntiment6rious1Rxy;ish;r7t31;ey,y;d,tisf7;i0yi1;a9e8i7uthl10;dicu11ve2D;al1Jfres2Vpel18tardNwar2U;nc08unc1P;estion4ir7;ky;aBerfect,leas0oAr7sychot2T;e8icel0To7;fou0Fmine3ud;c5t1F;ss0Ktenti6we0O;thet2O;bsess0n19utrage8ver7wn;-the-top,whelmi1;d,o2;a8e7ice,ostalg2Kumb;cessa2Pedl0Krve-rac22;i2Ss17;aCe9i8oron7yster5;!s;nd-bogg13ser4;a7diocre,m2Pna1Frcil0F;g7ningl0E;er;d,g8levo0Mrve0Es7;si2Kte09;ic7nifice3;!al;a8egenda2Di7mao;ght-heart0ke0S;ugh4zy;de6ll,mAn7rreleva3; good tas16appo0Aconvenie3evit4famo2gen5nova2Cs7tDven2C;ane,pir7ul1H;a0Bi1;beci2DmAp7;o8ress7;ed,i28;rta3ssS;en1J;aBeartfe0Dilar5or8um7yster0M;oro2;ri7;b25f7;ic,yi1;nd1Hp7;lQpy;iFlad,oDr7uil0D;aBeateAi9otesq8u7;d0Ye1D;ue;evo2m,ppi1;st;nd;o7ry;dy-goody,fy;a3ft0;aEeCiAlawlForc9rig7unny;hte7id;ni1;ib1O;lt03n7;al,e-loo0S;a7eb1Llicito2;rf0X;bu9i3ke,mo2r8ultl7vori09;ess;!-out;lo2;erie,goFlEspecialOvil,x7;agger07ce9ot11presAqui8tr7;aordina16e0S;si02;l9p8s7;si17;tion6;le3;aboEega3;ist0T;aFeBi8r7;eadf0Hunk;fficu8m-witt0s7;gust09traught;lt;ad9finite9li8spe7vasta02;raP;c5ghtf0B;ly;in8zz7;li1;ty;aThNoDrAu8yn7;ic6;r5s7te;hy;e8u7;ci6de,el;a0Jepy;ld,mDn9r7urt8;iac7r0O;eo2;firm0sum8vin7;ci1;ma7;te;ic6pl7;ic7;at0;a9ee7;r7sy;fNy;llen8r7;ismatVmi1;gi1;ptiva8r7;efI;ti1;aDeCleBorAr7;aZeathta8illia3ut6;nt;ki1;ed,i1;ak,ch;autifAlov0witcI;se;bWdTff4gitaRirhead0las,musi1nLpKrtiHsDtCvBw7;e8f7kwaW;ul;so7;me;id;roc5tracL;sumpKto7;nis8un7;di1;hi1;fici6st7;ic;al;pall0t;g9x5;io2;us;ry;ng;ed;ti7;ve;or4;ab7;le;r8su7;rd;upt|s0.7¦aZbYcSdMeHfEhaDiAl7m6open-mind01p5respectPs4t3u1w0;ary,orkmanlike;n0sed to;adulteratYcriticNhealthy,ilaterNplay9settlQtrace9;hrillXirX;ecret,pright4uffers;lacid,retentiU;esmerizModer8;ight,o0;l,ne0;ly;maginat8n0;calcul0expressJnoceQ;abJ;r2tN;iendi1ortun0uckM;ate;sh;ffBn2x0;haustIpens0;ive;g0joyGtertain8;ag7ross7;e4i0udsvil9;alect2s0;appoint4taste0;ful;al;creas9ficieAlight9;heap,lean4o1red2unn0;ing;here7mprehens0nfus6;ib0;le;!ly;ang-up,ehind,oundless;dama2ir1utonom0;ous;ed;nt|s0.4¦a0Bbr0Ac03d00eWfTgShRiOlMmKnFpDr9s5tries,u3v2w0you05;et,ho0Di0;de,ld,n;itVocationV;glin05n0;avow0Ebra7paid,read,school0E;atisyfiZcum,h2imilar,lDmall,o1tr0;aight,uttiY;phomorRu09;owery,rie5;elat09ight1ou0;gh,nd;-mi0iB;nd06;ea0risUut3;ky;a2e0;ar,g0;ati00;k00rr0turF;ow;anque,esNo0;d,raliziJ;ea0oI;st;diocy,mmaneQn0; stock,competePdividu8eluctNsultingly,t0;ellectu7riguiE;ahaha,umbM;ame,raph6;a1everish,i0luffy,orgetD;rm,t;rcic2tty;nlighteni8p2xpe0;ctLriment0;al;ic;ark,e1i0;rect,sappointmeD;ad,ep;ap9easel5lum4o0urreB;lor2mple1nfusi0;ng;te,x;ful;sy;ess;avado,oken;cuate,g7l4skew,ttenda3v0;ail0erage;ab0;le;nt;i1l-arou0;nd;ve;ed|i2.¦definite1especi0re0serious1;al0;ly|s0.1667¦c3dynam5fema2half,in1mundane,p0slight;a1revious;coherent,ner;le;lass1o0;ntemporary,w;ic|s0.65¦cool,emotion0lyric,norm0sweet,true;al|s0.625¦able,entire,shady,weak|s0.75¦aKcGdEeDfabricIgBi9l8origin7poetLr6s4t2vivid,wi0;ll0nn0;ing;ot4ra0;dition3gH;h0loppy,uit5;arp,eer;emark3ich;al;ame,ovely;mpecc0ndecipher0;abC;odforsakAr0;eat,itty;dgy,ndless,xcit5;etail4is0;appoint3eas3;alm,elebr1laustrophob4o0;ntriv1zy;at0;ed;eriform,gi2li1mbitious,uthent0;ic;en;le|s0.6667¦b3compete2dece2insta2s0;e0uper;nsational,rious;nt;ad,lind,old|s0.0667¦l0public,social;ast,ess|s0.05¦missing,outside,subsequent,topical,victim|s0.1429¦limited,physical|s0.375¦accessible,due,other,private,s0;lick,traightforward|s0.0769¦regular|s0.3571¦conventional,plain,simple|s0.1333¦gloom,spiritual|s0.55¦criminal,full,responsible,subconscious|p-0.0125¦absence,vacuum|p-0.05¦arreDcCgAl9m8obstacl7p6rehash,s1un0well-intention5;affect4explain4thinka2;adism,eizur5ixth-grade,t0;r1um0;ble;ange,etch0;ed;assionate,erpetually;es;inor,onk2uzak;efti3ong;argantuan,r0;ey;ardiac,hangeless;st|p-0.1¦a0Nb0Jc09d00eXfVhaUiQjaPlNmJnGpErAs6t5u3w0yarn;as0Te1haddupwitdat,ide,o0;nt,u09;re0Rt;gly-duckli0Pn0rin03sed to;answer0Qbrand0Qcook0QfortunateUknown,proc00;on09ri02wo-dimensionG;e1hou04inks,lippi0Moft-boil0Op0tereotyp0Owill;e0Moof;c0riousQ;!ondhand;e2o0;bot0Ehypnol,ugh0;!age;grets,mo07;arti7eppe0Ai0ropaganda;nk,ty;e1o0;!t;ith03v03;ent2i0onosyllab06ust0A;lita04n0;im0us;al;i0oneB;a4felo04;il,mm05;cy,mmane03n0;articuSconsistenciGe0telligentsia;lucta0xperienc02;ble;dZrdRsZveZ;everish,luff,orgetMu0;ll-bodiYrZ;mpty,x0;cruciating0pectW;ly;e5i2o1r0ulls;ag,ownT;esRnt;dQs0;believiOposs0taP;essP;fec0void;at0;es;a7e4l3o0rushLurious;m1ntingeJu0;ldI;a,mercialism;osHuelessn2;as0nt7;el0;ess;nt,re0;ful;itt2oilerp0;la0;te;er;dversa8g7i6l3phon2r0skew;bitra0e5;ry;ic;armi1l0;eg2usions;ng;nt;ed;tive|p-0.2¦autist0Gb0Ac02dTeveryday,fRgPhNiKkill0FlImEnarrow,oCp9r8s5tr4un2wa0;n,ste0;!d,s;cared-for,e0notic0CoriginWschool0C;ngagiZvM;app0AoubP;h0ophomor0Atark;a0it,owery;m,pe05;edundaOightist,ound;l1re0;achy,dictabJ;atitud1od;oz0rthodox;es;e2i0;ndXs0;fire,placYsiM;diocriAssy;ead7imp,o0;ng-windVsers;mp1n0sC;cohereBfatuatT;atieAerceptib7;arLeavy,i0umb6;ndHt-and-miP;immicFre0;en;at0ew,irm,luffy,rustratingly,ull of life;ty;e6i1riLudsvil0;le;a2ffide1s0;ablIlikI;nt;lect0phanous;al;ad,stroy0;!i1;h4loud-cov3o1ryi0;ng;c0zy;ky;er8;i0oppy;ldi0tchat;sh;o1ra0;sh,vado;gg2und0;le0;ss;ed;ic|p0.3¦aMbonny,cCdistinct,eBf8g7int6l5mesmerizHp4raAs3u1vocationKw0;ins,orth;n0seJ;blinkEcontroversiH;miEolicitous,uccess;owerGroves;augh,ifelike;ellectuDriguA;amechanger,olden;or su1r0un;esh,ingy;re;conomic8le4nlighten5xcit5;alm,leanly,o0;lo5m0;e-at-ab3p0;ell1li0;mentary;ing;le;r1ss0;al;ful;bsorb0hw,pportion0uthoritative,ww;ed|p-0.1333¦active,cow,gloom,imitation|p0.1¦0:06;aYbVcLdJeHfFgettRiElBm9n8o7p6right-mind0s3titulUun2vit02w1youX;ild,ow;blemish0expect0hesitatiVread;arcaAe2o1tate-support0urpris0;ber,ft;amOnsitV;eaky,rofessionW;ffers,ld;aEeM;a1edicatRodest,ultilaterT;nque,rk0sculine,ture;i1oud,ush;ngui1teraN;st5;dentifiDn stock;ar,i1requeO;ftieth,x0;arly,mpiricLnigmat1p1rudiOxperimentL;ic;evelop0i1;m,rect;l7o2ul1;turG;mpleIn1;c2s1;cious,ider2;eiv1ise;able;assy,e2oud1;less;ar;almy,u1;ddi1sy;ng;bridg0c6d3ir0l2mato1rous0;ry;ive;ama2jectiv1ult;al;nt;ross-the-board,tion,ua1;te;ed|p-0.0333¦excuse,toilet|p-0.7¦a5ba4crude,disastr6frustrat3grr1merciless,painful,shock3u0vulgar;gly,nchaste;!r0;!r;ed;d,rbarian;bhorrent,nger,troci0;ous|p0.5¦0:13;a0Pbe0Nc0Fe09f06g04h02iYlUmNnot12oJpGrDs6t4unexce9w1;acky,e02i2or1;kmanlike,thwhi12;n08tty;o1ruthfM;p,uc0M;a5ex4incere,ki3ophistic0Qpirit0t2u1ympath07;ppor09re;at0Iriki0Nun03ylish;ll0;u0Ay;fe,tisf1;i0yi0J;e1ive09;dee6fres0Dput0Ospect1war7;ab0PfB;henomen04ivot04l2o0Jr1;eci0Komine0J;ausPeas0;k3utstan2verwhel1;mi0B;di0A;!ay;a4e2ind-bogg07o1;re,st;aningf1mor0D;ul;gic2n1;nerly,y;!al;atest,enie06i3ov1;ab09e1;!ly;ght-heart0k05;conSn1;corrupt8geni02no2spir1teresNvenH;ationKiV;ceZvaF;andsome,e1ilariZumorZ;althy;ift0lad,oofy,r1;and,eaJippiQ;a2itGorc1;ibX;mTvoriL;l5n1xotH;deariLerg3joy2tertai1;niK;abSed,iJ;etD;aboraFegaM;aptiva7ha6o2rea1uE;tive;hereJm2n1;fideIvinciD;ic1peG;al;llengiArismat5;ti9;lievFt1;ter;bFcquaint0d8giFirhead0llevi7pp3stonis2uthent1wwww;ic;hi4;ea2ropria1;te;li1;ng;at0;or5ve1;ntur3r1;te1;nt;ous;ab2;ed;le|p-0.125¦abrupt,due,e0foreign,other,sharp;ndless,xtreme|p0.2¦aKbeefy,cHeEfast,gentOhahaBi9leg8m6p5quixotGre3st2thanks,un1very,w0;ants,hoN;paid,usuD;ainless,raight;a0sponsibK;dy,l,soI;hilosophAromisL;od0uch;!ern;al,ibF;nt0ron6;ense,imaH;!ha0;!ha0;!ha;conom1thic0;al;ic;ap1on0;secr3vex;ab4tive;bso5ccomplish4dor6ll-around,me2pp0ttendant,urea7;etiz5reci0;at2;nab0;le;ed;lu1rb0;ing;te|s0.95¦a3barbarian,c2discourteous,gawky,lov6mouth-water6rose,successful,un0;i0pleasa4;mporta3ntellige3;hicken,ontroversial;b0fflue1;sorb1unda0;nt;ing|p-0.5¦a0Wb0Rc0Dd07e04fXgVhonest-to-god,iRjackassQlOmeNnMoLpJquestion0PraIs9t8u2v1w0yaaawwnnnn;a10ei11himsBro0Jtf;ague,ulner0N;n0se0L;a3c2f1i0likeCreaBsett0F;later0Inspir0N;air,ortunate;omfort0Iut;b0Isham0K;ediXiresome,roubl0Jwist0J;ad,car7elfish,hy,i3kept2or0Rt0uffocati0A;a0ereotyp1ink3;le,rt07;ic0A;l2mp1nist0;er;li4;ly;ey,y;ndom,uncH;leona0ower04sychot0G;st0F;bsess06ffbeat,ver-the-top;ame01eed01ostalg0D;aning00dioc5re;a0ouW;me,ughZ;!es;ll2n0rreleva03;auspiciDcurWexpedie02famDsecu0;re;!egS;o0ratuitAuilY;ody-gooDry;a3eebSla1orgettRr0;ighteJostbitt00;s0wS;hy;i0ke;l0nt;!ed,s;erie,ffiFrrone1x0;aggerApensS;ous;azKi3ow2runk,u0;hhh0uuh;!h;dy;dactOfficult,st0;asteful,urbi7;a8h3o0reepy;llectibBmplic1ntrivDr0;puleFrupt;atB;ee3il1ur0;ni1;li0;ng;sy;lcul2re1su0;al;less;ab0;le;l1or0rainsick;ed;ata1ind,oodthirs0;ty;nt;bsu5ng4s0wea4;cet2h1sumpt0;ive;en;ic;ry;rd|p0.6¦aOcJdeIeGfDhAimaginaSkind,l9motley,n8own,pop7r5s3t2un1w0;arm,ell-advisD;hamperCprecedentC;hrillBi9ren9;atisyfNmilAp0;ectac2ontaneF;e0ose;doubEsourceful;ular;ice,oD;ik4mao,ovH;a0onest;n0zard8;dy;i1ull-fledg0;ed;ne-lookBrst-strB;ffecBn0;gross9thusiastic;ft,luxe,serv8;a3hari1ourte0;ous;ta0;ble;ndid,tch3;bundant,cute,dept,ffirma3m1p0stound2;precia2t;az0us0;ing;tive|p0.375¦accessible,excited,f1original,poetic,rich,s0unique;ignificant,traightforward;amiliar,riendly|p0.4¦aUbScLdetail00eJfDgBhuge,i9justifi00li8mighNn7o6p4r3s2thought1un0well-off,youngish;adulteratZsaltZ;-provokWfP;ecuQmooth,ound,prightly,teadfast,uperf9;elevaBisk-frA;erplexVr0;ecise,imary;bedie8pen-mindT;aturaliAonviole7;centiNght;mporta5n0;comparaKdispensaK;enu0uardO;ine;a3i2lippa1ortunaNr0;ee;nt;llJt;bulEnta0r-out;stic;cological,n0;gagDjoy;he4ivilizEo2r0;af0edi8ushB;ty;m0nfirmB;forta5prehensi5;ap,erf0;ul;ang-up,izar0;re;ccura6dvanc5pp4ttenti2utonom1vaila0www;ble;ous;on-gett0ve;ing;licative,osi1;ed;te|s0.6333¦accurate,outdated|p-0.4¦aXbVcOdKexHfCgBi7n6o5p4rip-off,s2t1un0worG;appealiIfocSgrad00healthy,importaMnecessary,playQstirr00;erminally,hin,irZ;ecret,hri0;eky,ll;eevToor;utd4verexcitV;ause3erve-rackiC;mp1nf0rrit5;antiJlexibJ;assive,lic0;atQ;ame,luey,odforsaK;a1rustr0uck;ati5;l1rc0;e,ic9;se;haust0tinct;ed,i0;ng;e0usty;creasFf0;enseless,icie0;nt;a5heesiest,on1rimin0;al;f2test0;ab0;le;us7;cophonous,ustic;ehind,ootleg,ro0;ken;d2l1mateur0nnoy3pproximate;ish;as,gid;dict0equate to;ed|p-0.4667¦addled,maladroit|s0.8333¦addled,bland,c2easy,gratuitous,idiotic,l0sexu1tough;oy0ucky;al;lever,onfident|p0.3333¦a2bo1extraordinary,l0mi1pregnant,quick,super,tremendous,worthy;oyal,ucky;ld;dequate,rtistic|p-0.25¦a7excess6juveni5lazy,o4p3repetit6s1u0;nbelievab4su1;entiment0hady,lick,mall;al;ast,ointless;rdinary,verboard;le;ive;eriform,l0mateur,nxious;coholic,ien|p0.8¦a7bra8e4f3great,happy,intelligent,joy,lol2proud,rofl,un1w0;elcome,in;common,forgett7;!ol;avor2ly;lect,xp0;erienc0ressi2;ed;ff1ttracti0;ve;able|p0.65¦affluent|p-0.6¦aWbScMdCfAgr9hap7in6m5numb,prolix,s2tastel8un0;befitMdignifiTf0happy,propitiK;aithTruitT;cathiLt1u0;bnormUffers;abbiJinks,upidiC;eager,uggy;conveni9explicaJfuriaG;hazPl0;ess;andiloqu6udgiE;*ckiDiendish,uck0;ed,iC;anger8e5i0one with;m-wittGr3s0;appoint0easFtraught;i8m0;ent;ty;p1s0;perate,trucG;lora5ressi3;ous;hi4o2razy,ut0ynicB;ti0;ng;ld,rrupti0;ble;cken,lly;attle2l0;ast0oodstain0;ed;ful;fraid,g2rtifici1wkw0;ard;al;hast,ita0;tive|p-0.3¦alienatXbaVcOdLeIfGiElCmBnAp6r5s2thick,u0vap9wonF;gliVn0;deservFtraceable;cum,econdary,hoddy,low,ourEtruttUuck0;er0s;!s;aucKegurgitat7ude;inheads,l1r0;etentiIisMofiterP;ac0oddO;id;a9eg8;elodrama,oralizL;aAea9os0;es;c0diocy,nsultingly;ky;anatic,orc0;ed;dgy,xploit0;at0;ive;elica1ishone0uh;st;te;lum5o0;m1nfus7riace0;ous;mon,pl0;ain0ex;ed,t;sy;d0nal;ness;ing|p0.25¦aFcBe9f8h7interest6l5marri6p4recognizable,s1thr0w0;ill2;eason4tellar,u0;pport0rre7;ing;eaceful,retty;ogic4yr8;ed;igher,ot;irst,unny;ducation0vid3xact;al;o0risp;m1nsist0;ent;ic;mbitious,vid,ware|p-0.75¦anger1claustrophob0disappoint1trag0;ic;ed|s0.85¦a2b0deadpan,fascinat1hot,passionate,solicit3thin;almy,ecom0;ing;ngered,rdu0;ous|p-0.8¦aCbAcrap,d9egoistic,filthy,grie7ha6i4m2r0stupid,unappetizEvi3worthless;an0etardC;cor6k;alev0oron2;olent;diot0mbecile,napposi1;!s;te;f,v0;ous;ebauch3oubtful;ase,l0;ech,oody;nnoy1ppall0;ed;ing|p-0.35¦a0;ppalling,rduous|p0.05¦appare1bare,ceremoni0exubera1gener0inexpressible;al;nt|s0.35¦appare0ceremonial,dista0infantile,soft;nt|p0.7¦applaudable,bCchBdelightFe8f5go4h3l2mouth-waterEoptimum,s0talentFwise;kittish,u0;cceeds,perior,rprisC;aughCovC;appiness,ero6;od,rge1;a1elicit0;ous;bl7ir,scin1;rot1xhilar0;at4;ic;arm2eery;e0right;lov1witch0;ing;ed|p0.9¦artesian,brilliant,c2dainty,i0;deal,n0; good taste,credible;ast-iron,ushy|p0.55¦astute,controversial,suitable|p-0.15¦average,ba0dark,me0naughty,pale,ruins;ss|p1.0¦awesome,bBdeli8ex6f4greateCimpress3legendary,ma1p0superb,top-notch,wond2;erfect,rice4;gnific5rvel8st0;er6;ed,ive;ault0law0;less;cell0quisite;ent;ci1ght0;ful;ous;e0reathtaking;st|p-1.¦awEbCcruel,d9evil,gr8h4ins3m2nasty,outrage1pathet6ruthless,shockiDterri0vici1worst;b6fyiC;ous;enaciAiserab4;ane,ul7;orri0ysterical;b1f0;ic;le;im,uesome;evasta1isgust0read4;ed,i2;ti1;leak,ori0;ng;ful|p0.85¦beautiful|p0.45¦becoming|p-0.1667¦bla2h1less,mundane,odd,previous,s0typical,unpredictable;light,ubject;alf,idden;ck,nd|s0.4333¦black,full-length|p0.0625¦broad,major|s0.3125¦broad|p-0.875¦brutal|s0.8667¦casual,measly|p0.35¦c0full,sweet,true;elebrated,ool|p0.2143¦certain,large,pure,smart|s0.5714¦certain,special|s0.15¦changel0m0overboard,strange,wan;ess|p-0.0667¦characteristic,d0hollow,putative;epress,ry|s0.4667¦characteristic|p0.1667¦c2dece1main,old4particular,realist5s0vibra1;teady,upernatural;nt;l0ontemporary;ass1ev0;er;ic|p0.3667¦clean|s0.3833¦clear|p0.15¦concrete,normal|s0.45¦considerable|p0.95¦consummate|p-0.1429¦conventional|s0.4167¦crisp|p-0.9¦cruddy,f5h2inhumane,outrag4re0sicken3;pellent,tard0;!s;at1orrify0;ing;ed;earful,rigid|p0.75¦dazzling,impecc0remark0successful;able|p-0.8333¦deadly|p-0.55¦deadpan,g0indecipherable;awky,rotesque|s0.0333¦depress,excuse,hollow|p-0.65¦discourteous,un0;intellige0pleasa0;nt|p-0.1556¦down|s0.2889¦down|s0.07¦drag|p-0.4333¦dramatic|p-0.2917¦dull,hard|p-0.375¦dumb,incompetent,weak|p0.4333¦easy,strong|p0.6667¦excep0lively,sensa0;tional|p-0.3167¦failure|p0.4167¦fine,gay|p-0.025¦flat|p0.0333¦full-length,social|s0.5833¦gay|s0.5417¦hard|p0.16¦high|s0.54¦high|p-0.6667¦i0;diotic,mpossible|s0.875¦insecure,outstanding,si0;gnificant,lly|s0.4286¦large|s0.2667¦leaden|p-0.0714¦limited,single|p-0.1875¦little|p0.1364¦live,new|s0.9333¦lively,uncivil|p-0.0769¦loose|s0.2692¦loose|p-0.625¦mad|p-0.3125¦mean|s0.6875¦mean|p-0.5667¦measly|s0.4545¦new|p-0.24¦parade|s0.22¦parade|p-0.2143¦plain,stiff|p0.7333¦pleasant|s0.9667¦pleasant|p-0.0833¦polar|p0.2273¦positive|s0.5455¦positive|p0.0833¦profound|p-0.2308¦raw|s0.4615¦raw|p-0.3333¦ridicul2s0tense;eri1ha0ubtle;ky,llow;ous|p0.2857¦right|s0.5357¦right|p-0.225¦sermon,tame|p-0.7143¦sick|s0.8571¦sick|s0.2143¦single|p-0.4167¦sloppy|s0.6429¦smart|p-0.1571¦sour|s0.1143¦sour|p0.3571¦special|p0.8333¦splendid|s0.7333¦strong|s0.5667¦supernatural|s0.8889¦sure|s0.225¦tame|s0.475¦thick|p-0.1786¦tight|s0.2857¦tight|p-0.3889¦tough|p-0.7333¦uncivil|p-0.075¦victim|p0.125¦vivid|i1.5¦real|i1.3¦excruciatingly,very|i1.2¦frustratingly"; diff --git a/plugins/_experiments/sentiment/src/data/index.js b/plugins/_experiments/sentiment/src/data/index.js new file mode 100644 index 0000000..48e59c6 --- /dev/null +++ b/plugins/_experiments/sentiment/src/data/index.js @@ -0,0 +1,44 @@ +import { unpack } from 'efrt' +import pattern_en_packed from './_pckd.js' + + +// Decompress above data +const pattern_en = unpack(pattern_en_packed); + +// Add some data efrt 2.7.0 compression can't handle yet +// +// Wait...you can add to a const? Yes! +// Ref: https://stackoverflow.com/a/23436563 +const arrayInfo = ["i1.0", "p0.0", "s0.0"]; +pattern_en['13th'] = arrayInfo; +pattern_en['20th'] = arrayInfo; +pattern_en['21st'] = arrayInfo; +pattern_en['2nd'] = arrayInfo; +pattern_en['3rd'] = arrayInfo; + +// Sort all subarrays in alphabetical order +// resulting order and their corresponding +// indices will be: +// intensity [0] +// polarity [1] +// subjectivity [2] +Object.values(pattern_en).forEach(function (element) { + element.sort(); +}) +//console.log('pattern_en:', pattern_en); + +// Find all keys from expanded pattern_en object +const pattern_en_keys = Object.keys(pattern_en); +//console.log('pattern_en_keys: ', pattern_en_keys); + +// Find all intensifiers (keys whose values are not "i1.0") in pattern_en object +const intensifiers = Object.keys(pattern_en).filter(function (element) { + return (pattern_en[element][0] != "i1.0"); +}); +//console.log('intensifiers', intensifiers); + +// Set up dictionary of negations +const negations = ['not', 'no', 'never', 'neither', 'havent', 'hasnt', 'hadnt', 'cant', 'couldnt', 'shouldnt', 'wasnt', 'wont', 'wouldnt', 'dont', 'doesnt', 'didnt', 'isnt', 'arent', 'aint', 'mustnt', 'werent']; +//console.log('negations: ', negations); + +export { pattern_en, pattern_en_keys, intensifiers, negations } \ No newline at end of file diff --git a/plugins/_experiments/sentiment/src/emoji.js b/plugins/_experiments/sentiment/src/emoji.js new file mode 100644 index 0000000..88bbf00 --- /dev/null +++ b/plugins/_experiments/sentiment/src/emoji.js @@ -0,0 +1,50 @@ +import RegExpEscape from './escape.js' + +/** +* emoticons +* +* Variable containing polarity scores for selected emoticons/smileys +* +* @author Scott Cram +* +* Original version: +* @author Steven Loria +* @see {@link https://github.com/sloria/TextBlob/blob/dev/textblob/_text.py|_text.py} +* +* From emoticons section of python file above, data was converted to JSON Object containing selected emoticons/smileys and their associated polarity scores +*/ +const emoticons = { "<3": "1.00", "♥": "1.00", ">:D": "1.00", ":-D": "1.00", ":D": "1.00", "=-D": "1.00", "=D": "1.00", "X-D": "1.00", "x-D": "1.00", "XD": "1.00", "xD": "1.00", "8-D": "1.00", ">:P": "0.75", ":-P": "0.75", ":P": "0.75", ":-p": "0.75", ":p": "0.75", ":-b": "0.75", ":b": "0.75", ":c)": "0.75", ":o)": "0.75", ":^)": "0.75", ">:)": "0.50", ":-)": "0.50", ":)": "0.50", "=)": "0.50", "=]": "0.50", ":]": "0.50", ":}": "0.50", ":>": "0.50", ":3": "0.50", "8)": "0.50", "8-)": "0.50", ">;]": "0.25", ";-)": "0.25", ";)": "0.25", ";-]": "0.25", ";]": "0.25", ";D": "0.25", ";^)": "0.25", "*-)": "0.25", "*)": "0.25", ">:o": "0.05", ":-O": "0.05", ":O": "0.05", ":o": "0.05", ":-o": "0.05", "o_O": "0.05", "o.O": "0.05", "°O°": "0.05", "°o°": "0.05", ">:/": "-0.25", ":-/": "-0.25", ":/": "-0.25", ":\\": "-0.25", ">:\\": "-0.25", ":-.": "-0.25", ":-s": "-0.25", ":s": "-0.25", ":S": "-0.25", ":-S": "-0.25", ">.>": "-0.25", ">:[": "-0.75", ":-(": "-0.75", ":(": "-0.75", "=(": "-0.75", ":-[": "-0.75", ":[": "-0.75", ":{": "-0.75", ":-<": "-0.75", ":c": "-0.75", ":-c": "-0.75", "=/": "-0.75", ":'(": "-1.00", ":'''(": "-1.00", ";'(": "-1.00" }; +//console.log('emoticons', emoticons); + +// Combine all the keys from the emoticon object into a regex which match any of those emoticons +const emoticon_regex = new RegExp((RegExpEscape(Object.keys(emoticons).join(' '))).replace(/\\\s/g, '|'), 'g'); +//console.log('emoticon_regex: ', emoticon_regex); + +/** +* emojis +* +* Variable containing polarity scores for selected emojis +* +* @author Scott Cram +* +* Original version: +* @author P. Kralj Novak, J. Smailovic, B. Sluban, I. Mozetic +* @see {@link https://kt.ijs.si/data/Emoji_sentiment_ranking/|Emoji Sentiment Ranking v1.0} +* +* From emoji file above, data from Char and Sentiment score columns was used, and converted to JSON Object +*/ +const emojis = { "😂": "0.221", "❤": "0.746", "♥": "0.657", "😍": "0.678", "😭": "-0.093", "😘": "0.701", "😊": "0.644", "👌": "0.563", "💕": "0.632", "👏": "0.520", "😁": "0.449", "☺": "0.657", "♡": "0.669", "👍": "0.521", "😩": "-0.368", "🙏": "0.417", "✌": "0.463", "😏": "0.332", "😉": "0.463", "🙌": "0.559", "🙈": "0.432", "💪": "0.555", "😄": "0.421", "😒": "-0.374", "💃": "0.734", "💖": "0.712", "😃": "0.557", "😔": "-0.146", "😱": "0.190", "🎉": "0.738", "😜": "0.455", "☯": "0.001", "🌸": "0.650", "💜": "0.654", "💙": "0.730", "✨": "0.351", "😳": "0.018", "💗": "0.657", "★": "0.283", "☀": "0.465", "😡": "-0.173", "😎": "0.491", "😢": "0.007", "💋": "0.691", "😋": "0.631", "🙊": "0.459", "😴": "-0.080", "🎶": "0.537", "💞": "0.739", "😌": "0.482", "🔥": "0.139", "💯": "0.120", "🔫": "-0.194", "💛": "0.709", "💁": "0.326", "💚": "0.656", "♫": "0.287", "😞": "-0.118", "😆": "0.409", "😝": "0.423", "😪": "-0.080", "😫": "-0.145", "😅": "0.178", "👊": "0.228", "💀": "-0.207", "😀": "0.568", "😚": "0.710", "😻": "0.619", "©": "0.117", "👀": "0.063", "💘": "0.683", "🐓": "0.028", "☕": "0.244", "👋": "0.413", "✋": "0.126", "🎊": "0.721", "🍕": "0.417", "❄": "0.506", "😥": "0.122", "😕": "-0.397", "💥": "0.148", "💔": "-0.121", "😤": "-0.209", "😈": "0.265", "✈": "0.415", "🔝": "0.474", "😰": "-0.020", "⚽": "0.616", "😑": "-0.311", "👑": "0.694", "😹": "0.141", "👉": "0.390", "🍃": "0.378", "🎁": "0.759", "😠": "-0.299", "🐧": "0.456", "🍀": "0.285", "🎈": "0.718", "🎅": "0.318", "😓": "-0.080", "😣": "-0.212", "😐": "-0.388", "✊": "0.429", "😨": "-0.140", "😖": "-0.155", "💤": "0.370", "💓": "0.664", "👎": "-0.188", "💦": "0.471", "✔": "0.270", "😷": "-0.169", "⚡": "0.177", "🙋": "0.485", "🎄": "0.531", "💩": "-0.116", "🎵": "0.500", "➡": "0.147", "😛": "0.601", "😬": "0.194", "👯": "0.439", "💎": "0.561", "🌿": "0.384", "🎂": "0.613", "🌟": "0.327", "🔮": "0.267", "❗": "0.100", "👫": "0.255", "🏆": "0.726", "✖": "0.311", "☝": "0.309", "😙": "0.778", "⛄": "0.521", "👅": "0.461", "♪": "0.534", "🍂": "0.547", "💏": "0.388", "🔪": "0.070", "🌴": "0.525", "👈": "0.424", "🌹": "0.600", "🙆": "0.500", "👻": "0.228", "💰": "0.251", "🍻": "0.512", "🙅": "-0.202", "🌞": "0.558", "🍁": "0.482", "⭐": "0.580", "▪": "0.198", "🎀": "0.629", "☷": "0.064", "🐷": "0.368", "🙉": "0.333", "🌺": "0.549", "💅": "0.388", "🐶": "0.576", "🌚": "0.464", "👽": "0.315", "🎤": "0.476", "👭": "0.463", "🎧": "0.414", "👆": "0.326", "🍸": "0.539", "🍷": "0.393", "®": "0.279", "🍉": "0.597", "😇": "0.587", "☑": "0.101", "🏃": "0.406", "😿": "-0.372", "💣": "0.007", "🍺": "0.493", "▶": "0.209", "😲": "-0.068", "🎸": "0.516", "🍹": "0.659", "💫": "0.500", "📚": "0.336", "😶": "-0.142", "🌷": "0.538", "💝": "0.644", "💨": "0.381", "🏈": "0.530", "💍": "0.478", "☔": "0.289", "👸": "0.605", "🍩": "0.382", "👾": "0.361", "☁": "0.308", "🌻": "0.570", "😵": "0.085", "📒": "0.038", "🐯": "0.476", "👼": "0.333", "🍔": "0.277", "😸": "0.410", "👶": "0.434", "💐": "0.735", "🌊": "0.500", "🍦": "0.459", "🍓": "0.670", "👇": "0.247", "💆": "0.221", "🍴": "0.537", "😧": "-0.063", "😮": "0.269", "🚫": "-0.440", "😽": "0.571", "🌈": "0.516", "🙀": "0.330", "⚠": "-0.066", "🎮": "0.427", "🍆": "0.402", "🍰": "0.448", "👐": "-0.023", "🙇": "0.140", "🍟": "0.302", "🍌": "0.435", "💑": "0.659", "👬": "-0.059", "🐣": "0.476", "🎃": "0.595", "😟": "0.072", "🐾": "0.605", "🎓": "0.563", "🏊": "0.575", "🍫": "0.152", "📷": "0.430", "👄": "0.474", "🌼": "0.779", "🚶": "-0.143", "🐱": "0.513", "🐸": "-0.080", "👿": "-0.534", "🚬": "0.521", "📖": "0.169", "🐒": "0.521", "🌍": "0.592", "🐥": "0.586", "🌀": "0.101", "🐼": "0.261", "🎥": "0.290", "💄": "0.435", "💸": "0.159", "⛔": "0.485", "🏀": "0.254", "💉": "0.358", "💟": "0.682", "🚗": "0.231", "😯": "0.123", "📝": "0.231", "♦": "0.453", "💭": "0.206", "🌙": "0.590", "🐟": "0.689", "👣": "0.344", "☞": "0.115", "✂": "-0.459", "🗿": "0.443", "🍝": "0.117", "👪": "-0.017", "🍭": "0.300", "🌃": "0.390", "❌": "0.271", "🐰": "0.586", "💊": "0.431", "🚨": "0.638", "😦": "-0.368", "🍪": "0.316", "🍣": "-0.232", "🎆": "0.709", "🎎": "0.907", "✅": "0.407", "👹": "0.058", "📱": "0.308", "🙍": "-0.327", "🍑": "0.250", "🎼": "0.327", "🔊": "0.404", "🌌": "0.520", "🍎": "0.320", "🐻": "0.440", "💇": "0.327", "♬": "0.245", "♚": "0.041", "🔴": "0.396", "🍱": "-0.313", "🍊": "0.417", "🍒": "0.313", "🐭": "0.688", "👟": "0.417", "🌎": "0.319", "🍍": "0.468", "🐮": "0.587", "📲": "0.239", "☼": "0.196", "🌅": "0.356", "👠": "0.356", "🌽": "0.444", "💧": "-0.159", "❓": "0.068", "🍬": "0.364", "😺": "0.395", "🐴": "0.070", "🚀": "0.488", "💢": "0.233", "🎬": "0.279", "🍧": "0.302", "🍜": "0.395", "🐏": "0.558", "🐘": "0.023", "👧": "0.140", "🏄": "0.524", "⬆": "0.286", "🍋": "0.244", "🆗": "0.537", "⚪": "0.450", "📺": "0.375", "🍅": "0.350", "⛅": "0.450", "🐢": "0.200", "👙": "0.500", "🏡": "0.436", "🌾": "0.538", "✏": "0.342", "🐬": "0.421", "🍤": "0.053", "♣": "0.342", "🐝": "0.211", "🌝": "0.189", "🔋": "-0.486", "🐍": "0.351", "♔": "0.541", "🍳": "0.028", "🔵": "0.306", "😾": "-0.333", "🌕": "0.556", "🐨": "0.444", "🔐": "0.333", "💿": "0.611", "🌳": "0.486", "👰": "0.486", "⚓": "0.571", "🚴": "0.657", "👗": "0.235", "➕": "0.529", "💬": "0.364", "🔜": "0.273", "🍨": "0.212", "💲": "0.242", "⛽": "0.152", "🍙": "0.281", "🍗": "0.063", "🍲": "0.125", "🍥": "-0.594", "♛": "0.188", "😼": "0.355", "🐙": "0.387", "👨": "0.516", "🍚": "0.452", "🍖": "0.129", "♨": "0.871", "🎹": "0.355", "♕": "0.387", "🚘": "0.067", "🍏": "0.067", "👩": "0.067", "👦": "0.133", "☠": "-0.033", "🐠": "0.414", "🚹": "0.690", "💵": "0.379", "👛": "0.357", "🚙": "0.036", "🌱": "0.571", "💻": "0.250", "🌏": "0.321", "👓": "0.296", "⚾": "-0.037", "🌲": "0.385", "👴": "0.231", "🏠": "0.500", "🍇": "0.269", "🍘": "0.385", "🍛": "0.038", "🐇": "0.231", "🔞": "-0.038", "👵": "0.423", "◀": "0.269", "🔙": "0.192", "🌵": "0.192", "🐽": "0.120", "🍮": "-0.120", "🎇": "0.680", "🐎": "0.400", "💶": "0.000", "🐤": "0.520", "🛀": "0.125", "🌑": "0.458", "🚲": "0.375", "🐑": "-0.167", "🏁": "0.500", "🍞": "0.042", "🎾": "0.542", "🈹": "0.292", "🐳": "0.130", "👮": "-0.348", "☹": "-0.522", "🐵": "0.478", "🗼": "0.522", "♠": "0.304", "👺": "-0.182", "🐚": "0.227", "👂": "-0.136", "🗽": "0.318", "🍵": "0.364", "🆒": "0.364", "🍯": "0.045", "🐺": "0.227", "🌓": "0.591", "🔒": "0.182", "👳": "0.619", "🌂": "0.238", "🚌": "0.190", "♩": "0.524", "🍡": "-0.048", "❥": "0.238", "🎡": "0.286", "💌": "0.500", "🐩": "0.350", "🌜": "0.500", "⌚": "0.200", "🚿": "0.600", "🐖": "0.150", "🔆": "0.550", "🌛": "0.550", "💂": "-0.150", "🐔": "0.300", "🙎": "-0.050", "🏩": "0.421", "🔨": "-0.105", "📢": "0.421", "🐦": "0.421", "🐲": "-0.053", "♻": "0.474", "🌘": "0.579", "🍐": "0.158", "🌔": "0.579", "👖": "0.333", "🚺": "0.167", "😗": "0.611", "🎭": "0.000", "🐄": "0.278", "🍢": "-0.111", "🎨": "0.167", "⬇": "0.389", "🚼": "0.556", "⛲": "0.056", "🌗": "0.611", "🌖": "0.611", "🔅": "0.833", "👜": "0.235", "🐌": "0.647", "💼": "0.529", "🚕": "0.000", "🐹": "0.294", "🌠": "0.529", "🐈": "0.294", "☎": "0.000", "🌁": "0.176", "⚫": "0.235", "♧": "0.471", "🏰": "0.294", "🚵": "0.353", "🎢": "0.471", "🎷": "0.647", "🎐": "0.176", "🌇": "0.500", "⏰": "0.438", "🚂": "0.250", "🎿": "0.375", "🆔": "0.750", "⛪": "0.125", "🌒": "0.563", "🐪": "0.563", "👔": "0.333", "🔱": "0.067", "🆓": "0.200", "🐋": "0.200", "🐛": "0.267", "👕": "0.400", "🚋": "0.067", "💳": "0.400", "🌆": "0.133", "🏧": "0.800", "💡": "0.600", "🔹": "0.133", "⬅": "0.467", "🍠": "0.000", "🐫": "0.333", "🏪": "0.067", "📹": "0.429", "👞": "0.429", "🚑": "0.071", "🆘": "0.071", "👚": "0.571", "🚍": "0.071", "🐂": "0.143", "🚣": "0.571", "✳": "0.000", "🏉": "0.500", "🗻": "0.571", "🐀": "0.143", "⛺": "0.462", "🐕": "0.231", "🏂": "0.385", "👡": "0.385", "📻": "0.308", "✒": "0.231", "🌰": "0.538", "🏢": "0.154", "🎒": "0.462", "🏫": "-0.231", "📴": "0.615", "🚢": "0.231", "🚚": "-0.077", "🐉": "0.154", "🐊": "0.077", "🔔": "0.769", "🏥": "0.250", "❔": "0.000", "🚖": "-0.083", "🃏": "0.083", "☛": "0.333", "💒": "0.500", "🚤": "0.333", "🐐": "0.417", "🔚": "0.333", "🎻": "0.333", "🔷": "0.167", "🚦": "0.083", "🔓": "0.083", "🎽": "0.417", "📅": "0.167", "🎺": "0.583", "🍈": "-0.333", "✉": "0.250", "🍼": "0.455", "📀": "0.091", "🚛": "-0.182", "📓": "0.182", "☉": "0.182", "💴": "-0.182", "🐃": "0.000", "➰": "-0.091", "🔌": "-0.091", "🍄": "0.000", "📕": "0.182", "📣": "0.364", "🚓": "0.273", "🐗": "0.455", "↪": "0.091", "⛳": "0.636", "👱": "0.100", "⏳": "0.000", "💺": "0.200", "🏇": "-0.100", "☻": "0.200", "📞": "0.400", "🌉": "0.500", "🚩": "-0.200", "✎": "0.500", "📃": "0.400", "🏨": "0.200", "📌": "-0.400", "♎": "-0.100", "💷": "0.400", "🚄": "0.500", "⛵": "0.500", "🔸": "0.200", "⌛": "0.100", "🚜": "0.700", "🐆": "0.300", "👒": "0.200", "❕": "0.200", "🔛": "0.400", "♢": "0.300", "👝": "0.333", "🎋": "0.444", "👥": "0.222", "📵": "0.111", "🐡": "0.222", "🏯": "0.111", "☂": "0.000", "🔭": "0.333", "🎪": "0.222", "🐜": "0.444", "♌": "0.556", "☐": "-0.667", "👷": "0.222", "🔈": "0.222", "📄": "0.667", "📍": "0.111", "🚐": "0.556", "🚔": "0.000", "🌋": "0.444", "📡": "0.222", "⏩": "0.111", "🚳": "0.667", "☾": "0.000", "🅰": "0.222", "📥": "0.000", "🔦": "0.000", "👤": "0.500", "🚁": "0.125", "🎠": "0.375", "🐁": "-0.250", "📗": "0.125", "☮": "0.000", "♂": "0.125", "📯": "-0.125", "🔩": "0.125", "👢": "0.500", "📰": "0.250", "📶": "0.250", "🚥": "0.000", "🌄": "0.125", "🗾": "0.250", "🔶": "0.250", "🏤": "0.250", "🎩": "0.250", "Ⓜ": "0.250", "🔧": "-0.375", "🐅": "0.125", "♮": "0.125", "🅾": "-0.125", "🔄": "0.000", "☄": "0.000", "☨": "0.000" }; +//console.log('emojis: ', emojis); + +// Create emoji regex object tjat matches the emojis from emojis object +const emoji_object_regex = new RegExp((RegExpEscape(Object.keys(emojis).join(' '))).replace(/\\\s/g, '|'), 'g'); +//console.log('emoji_object_regex: ', emoji_object_regex); + +// Create emoji regex object that matches all emojis +// Ref: +// How to strip emojis from string in JavaScript +// https://edvins.io/how-to-strip-emojis-from-string-in-java-script +const emoji_regex = new RegExp("([✀-➿-‑-⛿]|��|��|��)", 'g'); +//console.log('emoji_regex: ', emoji_regex); + +export { emoji_object_regex, emoji_regex, emoticon_regex, emoticons, emojis } diff --git a/plugins/_experiments/sentiment/src/escape.js b/plugins/_experiments/sentiment/src/escape.js new file mode 100644 index 0000000..7640845 --- /dev/null +++ b/plugins/_experiments/sentiment/src/escape.js @@ -0,0 +1,16 @@ +/** +* Function to escape characters in preparation for conversion to regex +* +* @author Brian L +* @see {@link https://stackoverflow.com/a/7317957|Regex matching list of emoticons of various type} +* +* @param {string} text - The text to be escaped +* +* @returns {string} text - Input text with special regex characters escaped +* +* +*/ +function RegExpEscape(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); +} +export default RegExpEscape \ No newline at end of file diff --git a/plugins/_experiments/sentiment/src/lib.js b/plugins/_experiments/sentiment/src/lib.js new file mode 100644 index 0000000..757c965 --- /dev/null +++ b/plugins/_experiments/sentiment/src/lib.js @@ -0,0 +1,198 @@ +import { intensifiers, negations } from './data/index.js' + +// HELPER FUNCTIONS + + + +/** +* Label the words of the input array as either 'negation', 'instensifier', 'opinion', or 'opinion!' +* ('opinion!' is an opinion word that is followed by an exclamation mark) +* +* @author Scott Cram +* +* @param {Array} inputArr - The array to be labeled +* +* @returns {Object} labelReturnObj - Object consisting of labeling results, including: +* @returns {Array} labelReturnObj.words - words from inputArr, less any exclamation marks +* @returns {Array} labelReturnObj.labels - array of word types that act as labels for each element in labelReturnObj.words +*/ +function labelWordArray(inputArr) { + // Return error array if inputArr has no elements + if (inputArr.length === 0) { return { 'error': 'input array has no elements' } } + // Initialize variables + const labelReturnObj = { 'words': [], 'labels': [] }; + let wordsArr = inputArr; + let labelsArr = []; + // Classify each word in Array as + // either 'em' (exclamation mark), negation', 'intensifier', or 'opinion' + inputArr.forEach(function (element, index) { + if (element.includes('!')) { + labelsArr[index] = 'em'; + return; + } + if (negations.includes(element)) { + labelsArr[index] = 'negation'; + return; + } + if (intensifiers.includes(element)) { + labelsArr[index] = 'intensifier'; + return; + } + labelsArr[index] = 'opinion'; + }); + // In labelsArr, look for any instances of + // 'opinion' followed by 'em', and if found, + // convert 'opnion' to 'opinion!', remove 'em', + // and remove exclamation mark from wordsArr + for (let countdown = labelsArr.length - 1; countdown >= 0; countdown--) { + if (countdown < labelsArr.length - 1) { + if ((labelsArr[countdown] === 'opinion') && (labelsArr[countdown + 1] === 'em')) { + labelsArr[countdown] = 'opinion!'; + labelsArr.splice(countdown + 1, 1); + wordsArr.splice(countdown + 1, 1); + } + } + } + // If there is not at least 1 'opinion' in + // labelsArr, then return object with error + if ((labelsArr.indexOf('opinion') < 0) && (labelsArr.indexOf('opinion!') < 0)) { + return { 'error': 'no opinion-based words found' }; + } + // Each 'opinion'/'opinion!' is only modified + // by preceeding words, so ensure that the last + // item in wordsArr and labelArr is an 'opinion'/'opinion!' + wordsArr = wordsArr.slice(0, Math.max(labelsArr.lastIndexOf('opinion'), labelsArr.lastIndexOf('opinion!')) + 1); + labelsArr = labelsArr.slice(0, Math.max(labelsArr.lastIndexOf('opinion'), labelsArr.lastIndexOf('opinion!')) + 1); + labelReturnObj.words = wordsArr; + labelReturnObj.labels = labelsArr; + return labelReturnObj; +} + +/** +* Find indices to split array at a given word +* +* @author Scott Cram +* +* @param {Array} startingArr - The array to be split +* @param {string} splitWord - The word at which split +* +* @returns {Array} splitPoints - Array of numbers that, when used in pairs for Array.splice(), cane be used to split the array so that only once occurence of splitWord appears +* +* +*/ + +function findArraySplitPoints(startingArr, splitWord) { + // Count how many times the splitWord occurs in startingArr + const howManySplitWords = startingArr.reduce(function (accumulator, currentValue) { + if (currentValue.match(splitWord) !== null) { accumulator++ } + return accumulator; + }, 0); + // If count is less than zero, return empty array + if (howManySplitWords < 1) { + return []; + } + // Using the above count of splitWord occurences, + // locate splice points for array + let startArrCount = 0; + let splitWordCount = 1; // We can now assume at least 1 occurence of splitWord + const splitPoints = [startArrCount]; + startingArr.forEach(function (element, index) { + if ((element.match(splitWord) !== null) && (splitWordCount < howManySplitWords)) { + splitPoints.push(index + 1); + splitPoints.push(index + 1); + startArrCount = index + 1; + splitWordCount++; + return; + } + if ((element.match(splitWord) !== null) && (splitWordCount === howManySplitWords)) { + splitPoints.push(startingArr.length); + } + }); + return splitPoints; +} + +/** +* Chunk up included arrays into subarrays, with each subarray containing only one 'opinion'/'opinion!' and single preceeding negation and/or modifier +* +* @author Scott Cram +* +* @param {Array} wordsArr - Array of words to be chunked +* @param {Array} labelsArr - Array of labels to be chunked +* +* @returns {Object} chunks - Object consisting of chunking results, including: +* @returns {Array} chunks.words - words from inputArr, less any exclamation marks +* @returns {Array} chunks.labels - 2D array of word types +*/ +function chunkArrays(wordsArr, labelsArr) { + // Initialize variables + const wordsArr2d = []; + const labelsArr2d = []; + const chunkReturnObj = { 'word_chunks': wordsArr2d, 'label_chunks': labelsArr2d }; + // Find points where 'opinion'/'opinion!' can be split up in array, + // and store them in wordLocs (word locations) + const wordLocs = findArraySplitPoints(labelsArr, 'opinion'); + // Use parameters stored in wordLocs array to + // create 2d arrays, grouping a 'opinion' with any + // preceeding negations and/or intensifiers. + for (let index = 0; index < wordLocs.length; index += 2) { + wordsArr2d.push(wordsArr.slice(wordLocs[index], wordLocs[index + 1])); + labelsArr2d.push(labelsArr.slice(wordLocs[index], wordLocs[index + 1])); + } + // Go through each subarray, and only keep + // 1 closest preceeding negation, as well as + // 1 closest preceeding intensifier + + // Iterate through labelsArr2d to work with each subarray + labelsArr2d.forEach(function (element, index) { + // Create array to hold location of a + // single 'negation' (index 0), a + // single 'intensifier' (index 1), and + // 'opinion'/'opinion!' + const tempLocArr = []; + // Get values of last occurences of each type of words + tempLocArr.push(element.lastIndexOf('negation')); + tempLocArr.push(element.lastIndexOf('intensifier')); + tempLocArr.push(Math.max(element.lastIndexOf('opinion'), element.lastIndexOf('opinion!'))); + // Filter words and labels down to just the items at the indices in tempLocArr + wordsArr2d[index] = wordsArr2d[index].filter(function (_, i) { + return tempLocArr.includes(i); + }); + labelsArr2d[index] = labelsArr2d[index].filter(function (_, i) { + return tempLocArr.includes(i); + }); + }); + // chunkReturnObj = {'word_chunks': wordsArr2d, 'label_chunks': labelsArr2d}; + chunkReturnObj.word_chunks = wordsArr2d; + chunkReturnObj.label_chunks = labelsArr2d; + return chunkReturnObj; +} + +/** +* Limit a value inside a certain range +* +* +* Original version: +* @author w3resource +* @see {@link https://www.w3resource.com/javascript-exercises/JavaScript: Limit a value inside a certain range} +* +* @param {number} val - The value to be tested for range +* @param {number} min - The minimum amount in the desired range +* @param {number} max - The maximum amount in the desired range +* +* @returns {number} value - If the val input is within the range of min to max, val will be returned. If val is higher than max, then max will be returned. If val is lower than min, then min will be returned. +* +*/ +function value_limit(val, min, max) { + return val < min ? min : (val > max ? max : val); +} + +// Average all values in inputArr together +// or leave at 0, if array is empty. +function averageArray(inputArr) { + if (inputArr.length === 0) { return 0; } + return inputArr.reduce(function (accum, currentVal) { + return accum + currentVal; + }, 0) / inputArr.length; +} + +export { labelWordArray, averageArray, value_limit, chunkArrays } diff --git a/plugins/_experiments/sentiment/src/plugin.js b/plugins/_experiments/sentiment/src/plugin.js new file mode 100644 index 0000000..9b0b905 --- /dev/null +++ b/plugins/_experiments/sentiment/src/plugin.js @@ -0,0 +1,176 @@ +import { emoji_object_regex, emoji_regex, emoticon_regex, emoticons, emojis } from './emoji.js' +import { pattern_en, pattern_en_keys } from './data/index.js' +import { labelWordArray, averageArray, value_limit, chunkArrays } from './lib.js' + + + +const sentimentComp = { + /** add a method */ + api: (View) => { + + + View.prototype.sentiment = function (addMood = false, addSummary = false) { + //console.log('addMood: ', addMood); + //console.log('addSummary: ', addSummary); + // Ensure that inputStr is text + let inputStr = this.text(); + const isInputValid = typeof inputStr === 'string'; + if ((isInputValid === false) || (inputStr === '')) { + return { 'error': 'Input must be a string containing text.' }; + } + + // SET DEFAULTS + // + // Create default return object with scores of 0 + const returnObj = { 'polarity': 0, 'subjectivity': 0 }; + // Create default empty summary array + const summaryArr = []; + + // INPUT STRING PROCESSING + // + // Remove sarcasm symbols [!] and (!), if present + inputStr = inputStr.replace(/\(!\)|\[!\]/g, '').replace(/\s+/g, ' ').trim(); + // Create array of emoticons from input string + let emoticonArr = inputStr.match(emoticon_regex) || []; + //console.log('emoticonArr: ', emoticonArr); + // Create array of emoticon values using emoticonArr + let emoticonValArr = emoticonArr.map(function (element) { return parseFloat(emoticons[element]) }) || []; + //console.log('emoticonValArr: ', emoticonValArr); + // From inputText, get all the emojis which have scores + const emojisOnlyArr = inputStr.match(emoji_object_regex) || []; + //console.log('emojisOnlyArr: ', emojisOnlyArr); + // Get all the values of the emojis in emojisOnlyArr + const emojiValArr = emojisOnlyArr.map(function (element) { return parseFloat(emojis[element]) }) || []; + //console.log('emojiValArr: ', emojiValArr); + // Add emojisOnlyArr into emoticonArr + emoticonArr = emoticonArr.concat(emojisOnlyArr); + //console.log('emoticonArr: ', emoticonArr); + // Add emoticonValArr into emoticonValArr + emoticonValArr = emoticonValArr.concat(emojiValArr); + //console.log('emoticonValArr: ', emoticonValArr); + // Remove emoticons from inputStr, + // remove emojis, + // replace multiple exclamation marks with 1, + // remove apostrophes, + // and change entire string to lower case + inputStr = inputStr.replace(emoticon_regex, '').replace(emoji_regex, ' ').replace(/\s+/g, ' ').replace(/!{2,}/g, '!').replace(/['’]/g, '').trim().toLowerCase(); + //console.log('inputStr: ', inputStr); + // From inputStr, create array containing only words listed in pattern_en or exclamation marks + const wordArr = (inputStr.match(/\w+|!/g)).filter(function (element) { + return (pattern_en_keys.includes(element) || element.includes('!')); + }); + //console.log('wordArr: ', wordArr); + // Create array of labels of types of words in wordArr + const labelInfoObj = labelWordArray(wordArr); + //console.log('labelInfoObj: ', labelInfoObj); + // If wordArr is now empty, + // return an object with polarity and subjectivity of 0, + // as well as mood and summary information, if those flags + // are set + if ((wordArr.length === 0) || (labelInfoObj.hasOwnProperty('error'))) { + if (addMood === true) { + returnObj.mood = averageArray(emoticonValArr); + // If addSummary is true, add scored_icons + if (addSummary === true) { + const summaryObj = {}; + summaryObj.scored_icons = emoticonArr; + summaryObj.mood = emoticonValArr; + summaryArr.push(summaryObj); + } + } + if (addSummary === true) { returnObj.summary = summaryArr; } + return returnObj; + } + // Since labelInfoObjn returned valid data, + // it's time to chunk the words and labels + // in groupd, each containing just 1 + // 'opinion'/ 'opinion!', and the closest + // preceeding negation and intensifiers, + // if included + const chunkInfoObj = chunkArrays(labelInfoObj.words, labelInfoObj.labels); + //console.log('chunkInfoObj', chunkInfoObj); + const wordArr2d = chunkInfoObj.word_chunks; + const labelArr2d = chunkInfoObj.label_chunks; + + // VALUE CALCULATION + // + // Create polarityArr and subjectivityArr arrays + // to hold individual calculation results before + // averaging them at the end. + const polarityValArr = []; + const subjectivityValArr = []; + // Iterate through arrays to calculate polarity and subjectivity + for (let index = 0; index < labelArr2d.length; index++) { + // Prepare this iteration's summary object + const summaryObject = {}; + // Add scored_words index + summaryObject.scored_words = wordArr2d[index]; + // If 'opinion!' exists, add '!' to scored_words array + if (labelArr2d[index].indexOf('opinion!') > -1) { summaryObject.scored_words.push('!'); } + // If a 'negation' exists, set value of multiplier + // to -0.5, otherwise, set it to 1 + const negationMultiplier = labelArr2d[index].indexOf('negation') > -1 ? -0.5 : 1; + // If an 'intensifier' exists, calculate value, + // otherwise, default to 1 + let intensityMultiplier = 1; + // Get index of location of intensifier for this index + const intensifierIndex = labelArr2d[index].indexOf('intensifier'); + // If an intensifier exists... + if (intensifierIndex > -1) { + // ...get corresponding intensity score + // from pattern_en object + intensityMultiplier = parseFloat(pattern_en[wordArr2d[index][intensifierIndex]][0].replace(/i/g, '')); + // if negationMultiplier = -0.5, then + // use inverse of intensityMultiplier + if (negationMultiplier === -0.5) { intensityMultiplier = 1 / intensityMultiplier } + } + // Find 'opinion' or 'opinion!' in current array + const opinionLoc = Math.max(labelArr2d[index].indexOf('opinion'), labelArr2d[index].indexOf('opinion!')); + // If 'opinion!' is the current array, + // set exclamationMultiplier to 1.25, + // otherwise set it at 1 + const exclamationMultiplier = labelArr2d[index].indexOf('opinion!') > -1 ? 1.25 : 1; + // Use location of 'opinion' in current array to + // get polarity and subjectivity values, and + // then multiply them by the appropriate multipliers + let polarityVal = (parseFloat(pattern_en[wordArr2d[index][opinionLoc]][1].replace(/p/g, ''))) * negationMultiplier * intensityMultiplier * exclamationMultiplier; + let subjectivityVal = (parseFloat(pattern_en[wordArr2d[index][opinionLoc]][2].replace(/s/g, ''))) * intensityMultiplier; + // Limit polarity to a range of -1 to 1 + polarityVal = value_limit(polarityVal, -1, 1); + // Limit subjectiivity to a range of 0 to 1 + subjectivityVal = value_limit(subjectivityVal, 0, 1); + polarityValArr.push(polarityVal); + subjectivityValArr.push(subjectivityVal); + // Add polarity and subjectivity of this iteration to summaryObject + summaryObject.polarity = polarityVal; + summaryObject.subjectivity = subjectivityVal; + // Add this iteration's information to summary array + summaryArr.push(summaryObject); + } + //console.log('polarityValArr', polarityValArr); + //console.log('subjectivityValArr', subjectivityValArr); + //console.log('summaryArr', summaryArr); + // Average values in arrays to get respective scores + const polarityScore = averageArray(polarityValArr); + const subjectivityScore = averageArray(subjectivityValArr); + returnObj.polarity = polarityScore; + returnObj.subjectivity = subjectivityScore; + if (addMood === true) { + returnObj.mood = averageArray(emoticonValArr); + // If addSummary is true, add scored_icons + if (addSummary === true) { + const summaryObj = {}; + summaryObj.scored_icons = emoticonArr; + summaryObj.mood = emoticonValArr; + summaryArr.push(summaryObj); + } + } + if (addSummary === true) { returnObj.summary = summaryArr; } + return returnObj; + } + } +} + +export default sentimentComp + + diff --git a/plugins/_experiments/sentiment/test.js b/plugins/_experiments/sentiment/test.js new file mode 100644 index 0000000..e7d65df --- /dev/null +++ b/plugins/_experiments/sentiment/test.js @@ -0,0 +1,215 @@ +/* eslint-disable */ +import nlp from '../../../src/three.js' +import plg from './src/plugin.js' +nlp.plugin(plg) + +// Tests +console.log("Test submissions to sentiment:"); + +console.log(""); + +console.log("INPUTS THAT RETURN ERRORS:"); +console.log("-----"); +console.log("No input:"); +console.log("", nlp().sentiment()); +// Expected result: +// {error: 'Input must be a string containing text.'} +console.log("-----"); +console.log("Empty string:"); +console.log("", nlp("").sentiment("")); +// Expected result: +// {error: 'Input must be a string containing text.'} +console.log("-----"); +console.log("Object:"); +console.log({ 'This': 'object', 'contains': 'words' }, nlp({ 'This': 'object', 'contains': 'words' }).sentiment()); +console.log("-----"); +// Expected result: +// {error: 'Input must be a string containing text.'} + +console.log(""); + +console.log("BASIC EXPLANATIONS:"); +console.log("-----"); +console.log("Polarity is the negative or positive sentiment of the score, and ranges from -1.0 (negative sentiment) to 1.0 (positive sentiment). Neutral is anything around zero (usually -0.05 to 0.05)."); +console.log("Subjectivity is a measure of how likely it is that the string is opinion-based, and ranges from 0 (not likely to be opinion-based) to 1.0 (highly likely to be opinion-based)."); +console.log("-----"); +console.log("sentiment looks for known opinion-based words. The following string has none:"); +console.log("This movie exists.", nlp("This movie exists.").sentiment()); +// Expected result: +// {polarity: 0, subjectivity: 0} +console.log("-----"); +console.log("The following string has a single opinion-based word in it (\"good\"):"); +console.log("This movie is good.", nlp("This movie is good.").sentiment()); +// Expected result: +// {polarity: 0.7, subjectivity: 0.6} +console.log("-----"); +console.log("The scores can be changed in several ways."); +console.log("This sentence adds the intensifier \"very\". Note how the scores change from above:"); +console.log("This movie is very good.", nlp("This movie is very good.").sentiment()); +// Expected result: +// {polarity: 0.9099999999999999, subjectivity: 0.78} +console.log("-----"); +console.log("This sentence adds the negation \"not\". Note the effect of this on the scores:"); +console.log("This movie is not good.", nlp("This movie is not good.").sentiment()); +// Expected result: +// {polarity: -0.35, subjectivity: 0.6} +console.log("-----"); +console.log("Adding an exclamation mark also affects scores:"); +console.log("This movie is good!", nlp("This movie is good!").sentiment()); +// Expected result: +// {polarity: 0.875, subjectivity: 0.6} +console.log("-----"); +console.log("Combining a negation, intensifier, and an exclamation mark to the opinion-based word:"); +console.log("This movie is not very good!", nlp("This movie is not very good!").sentiment()); +// Expected result: +// {polarity: -0.33653846153846145, subjectivity: 0.46153846153846145} +console.log("-----"); +console.log("However, sentiment only looks at the 1 closest preceeding negation (if present), the 1 closest preceeding intensifier (if present), and a single exclamation mark:"); +console.log("This movie is not not really very good!!!!", nlp("This movie is not not really very good!!!!").sentiment()); +// Expected result: +// {polarity: -0.33653846153846145, subjectivity: 0.46153846153846145} +console.log("-----"); +console.log("If a negation and/or an intensifier follow the opinion-based word, they are ignored. The following sentence is scored as if (not very) didn't exist:"); +console.log("This movie is good (not very).", nlp("This movie is good (not very).").sentiment()); +// Expected result: +// {polarity: 0.7, subjectivity: 0.6} +console.log("-----"); +console.log("Moving the (not very) phrase to before the opinion-based word makes a difference in the scores:"); +console.log("This movie is (not very) good.", nlp("This movie is (not very) good.").sentiment()); +// Expected result: +// {polarity: -0.26923076923076916, subjectivity: 0.46153846153846145} +console.log("-----"); + +console.log(""); + +console.log("MULTIPLE OPINION-BASED WORDS:"); +console.log("-----"); +console.log("Multiple opinion-based words can be used:"); +console.log("It's not very good. In fact, it was bad.", nlp("It's not very good. In fact, it was bad.").sentiment()); +// Expected result: +// {polarity: -0.48461538461538456, subjectivity: 0.5641192307692307} +console.log("-----"); +console.log("When multiple opinion-based words are used, each opinion-based word is affected by the closest preceeding single negation and/or intensifier."); +console.log("The following sentence is scored differently than directly above because (not very) is attributed to the following opinion-based word (bad), rather than the opinion-based word before them (good):"); +console.log("It's good (not very). In fact, it was bad.", nlp("It's good (not very). In fact, it was bad.").sentiment()); +// Expected result: +// {polarity: 0.48461538461538456, subjectivity: 0.5564230769230769} +console.log("-----"); + +console.log(""); + +console.log("EMOJIS, EMOTIONS (\"SMILEYS\") AND MOOD:"); +console.log("-----"); +console.log("Here's a short text-style message, with no emojis or emoticons/smileys:"); +console.log("Awesome. I love it!", nlp("Awesome. I love it!").sentiment()); +// Expected result: +// {polarity: 0.8125, subjectivity: 0.8} +console.log("-----"); +console.log("Polarity and subjectivity scores are measured solely from text, so they aren't affected by the includion of emojis or emoticons/smileys:"); +console.log("Awesome. I love it!😍", nlp("Awesome. I love it!😍").sentiment()); +// Expected result: +// {polarity: 0.8125, subjectivity: 0.8} +console.log("-----"); +console.log("However, you can set the mood flag to true, and you'll see a mood score. The mood score is similar to polarity, but calculated from the emojis and emoticons/smileys."); +console.log("Just like polarity, mood can range from -1.0 (negative sentiment) to 1.0 (positive sentiment)."); +console.log("Awesome. I love it!😍", nlp("Awesome. I love it!😍").sentiment(true)); +// Expected result: +// {polarity: 0.8125, subjectivity: 0.8, mood: 0.678} +console.log("-----"); +console.log("Naturally, you can use multiple emoticons/smileys, and this will change the mood score:"); +console.log("Awesome.🎉 I love it! 🤗😍:-D", nlp("Awesome.🎉 I love it! 🤗😍:-D").sentiment(true)); +// Expected result: +// {polarity: 0.8125, subjectivity: 0.8, mood: 0.8053333333333333} +console.log("-----"); +console.log("You can even use mood score to detect cynicism, by noting when the polarity (text) is negative and mood (emoticons/smileys) is positive (or vice-versa):"); +const sentimentVal = nlp("The movie wasn't that good.😉 ;-)").sentiment(true); +console.log("The movie wasn't that good.😉 ;-)", sentimentVal); +// Expected result: +// {polarity: -0.35, subjectivity: 0.6, mood: 0.35650000000000004} +console.log("If you detect situations like this, you can calculate the average of these two scores to get the true overall polarity:"); +console.log("(" + sentimentVal.polarity + " + " + sentimentVal.mood + ") ÷ 2 = " + ((sentimentVal.polarity + sentimentVal.mood) / 2)); +// Expected result: +// (-0.35 + 0.35650000000000004) ÷ 2 = 0.0032500000000000306 +console.log("-----"); + +console.log(""); + +console.log("SUMMARY:"); +console.log("-----"); +console.log("The other flag that can be set is the summary flag."); +console.log("This summary includes which negation and intensifier (if any) were chunked together with which opinion-based word, as well as the polarity and subjectivity score of each chunk:"); +console.log("It's not really very good.", nlp("It's not really very good.").sentiment(false, true)); +// Expected result: +// { +// "polarity": -0.26923076923076916, +// "subjectivity": 0.46153846153846145, +// "summary": [ +// { +// "scored_words": [ +// "not", +// "very", +// "good" +// ], +// "polarity": -0.26923076923076916, +// "subjectivity": 0.46153846153846145 +// } +// ] +// } +console.log("-----"); +console.log("If you set both the mood flag and the summary flag to true, you can see each emoji, emoticon and how they were scored, as well:"); +console.log("It's not really very good. 😦:-(", nlp("It's not really very good. 😦:-(").sentiment(true, true)); +// { +// "polarity": -0.26923076923076916, +// "subjectivity": 0.46153846153846145, +// "mood": -0.5589999999999999, +// "summary": [ +// { +// "scored_words": [ +// "not", +// "very", +// "good" +// ], +// "polarity": -0.26923076923076916, +// "subjectivity": 0.46153846153846145 +// }, +// { +// "scored_icons": [ +// ":-(", +// "😦" +// ], +// "mood": [ +// -0.75, +// -0.368 +// ] +// } +// ] +// } +console.log("-----"); +console.log("If you set both the mood flag and the summary flag to true, but have no emojis or emoticons/smileys in the text, the scored emoticons and mood in the summary will simply be empty arrays:"); +console.log("It's not really very good.", nlp("It's not really very good.").sentiment(true, true)); +// Expected result: +// { +// "polarity": -0.26923076923076916, +// "subjectivity": 0.46153846153846145, +// "mood": 0, +// "summary": [ +// { +// "scored_words": [ +// "not", +// "very", +// "good" +// ], +// "polarity": -0.26923076923076916, +// "subjectivity": 0.46153846153846145 +// }, +// { +// "scored_icons": [], +// "mood": [] +// } +// ] +// } +console.log("-----"); + +// Dependencies: +// https://unpkg.com/efrt@2.7.0/builds/efrt-unpack.min.js +// https://unpkg.com/compromise \ No newline at end of file diff --git a/plugins/dates/README.md b/plugins/dates/README.md new file mode 100644 index 0000000..3df0570 --- /dev/null +++ b/plugins/dates/README.md @@ -0,0 +1,417 @@ +
+ + +
date-parsing plugin for compromise
+ + + + + + + + + + + +
+ npm install compromise-dates +
+
+ + + + +This library is an earnest attempt to get date information out of text, in a clear way - + +
+- including all informal text formats, and folksy shorthands. +
+ + + + +```js +import nlp from 'compromise' +import datePlugin from 'compromise-dates' +nlp.plugin(datePlugin) + +let doc = nlp('the second monday of february') +doc.dates().get()[0] +/* + { start: '2021-02-08T00:00:00.000Z', end: '2021-02-08T23:59:59.999Z'} +*/ +``` + + + + + +
+ +
+ +
+ Tokenization and disambiguation with compromise. +
+
+ Timezone and DST reckoning with spacetime [1] +
+
+ Number-parsing with compromise-numbers [1] +
+
+ Timezone reconciliation with spacetime-informal [1] +
+ + + + + + + +
+

Demo

+
+ + + +### _Things it does well:_ + +| `explicit-dates` | _description_ | `Start` | `End` | +| ----------------------------------- | :-----------------------------------: | ---------------: | ---------------: | +| _march 2nd_ | | March 2, 12:00am | March 2, 11:59pm | +| _2 march_ | | '' | '' | +| _tues march 2_ | | '' | '' | +| _march the second_ | _natural-language number_ | '' | '' | +| _on the 2nd_ | _implicit months_ | '' | '' | +| _tuesday the 2nd_ | _date-reckoning_ | '' | '' | +|
**`numeric-dates:`** | | +| _2020/03/02_ | _iso formats_ | '' | '' | +| _2020-03-02_ | | '' | '' | +| _03-02-2020_ | _british formats_ | '' | '' | +| _03/02_ | | '' | '' | +| _2020.08.13_ | _alt-ISO_ | '' | '' | +|
**`named-dates:`** | | +| _today_ | | - | - | +| _tomorrow_ | | '' | '' | +| _christmas eve_ | _calendar-holidays_ | Dec 24, 12:00am | Dec 24, 11:59pm | +| _easter_ | _astronomical holidays_ | -depends- | - | +| _q1_ | | Jan 1, 12:00am | Mar 31, 11:59pm | +|
**`times:`** | | +| _2pm_ | | '' | '' | +| _2:12pm_ | | '' | '' | +| _2:12_ | | '' | '' | +| _02:12:00_ | _weird iso-times_ | '' | '' | +| _two oclock_ | _written formats_ | '' | '' | +| _before 1_ | | '' | '' | +| _noon_ | | '' | '' | +| _at night_ | _informal daytimes_ | '' | '' | +| _in the morning_ | | '' | '' | +| _tomorrow evening_ | | '' | '' | +|
**`timezones:`** | | +| _eastern time_ | _informal zone support_ | '' | '' | +| _est_ | _TZ shorthands_ | '' | '' | +| _peru time_ | | '' | '' | +| _..in beirut_ | _by location_ | '' | '' | +| _GMT+9_ | _by UTC/GMT offset_ | '' | '' | +| _-4h_ | '' | '' | '' | +| _Canada/Eastern_ | _IANA codes_ | '' | '' | +|
**`relative durations:`** | | +| _this march_ | | '' | '' | +| _this week_ | | '' | '' | +| _this sunday_ | | '' | '' | +| _next april_ | | '' | '' | +| _this past year_ | | '' | '' | +| _second week of march_ | | '' | '' | +| _last weekend of march_ | | '' | '' | +| _last spring_ | | '' | '' | +| _the saturday after next_ | | '' | '' | +|
**`punted dates:`** | | +| _in seven weeks_ | _now+duration_ | '' | '' | +| _two days after june 6th_ | _date+duration_ | '' | '' | +| _2 weeks from now_ | | '' | '' | +| _2 weeks after june_ | | '' | '' | +| _2 years, 4 months, and 5 days ago_ | _complex durations_ | '' | '' | +| _a week and a half before_ | _written-out numbers_ | '' | '' | +| _a week friday_ | _idiom format_ | '' | '' | +|
**`start/end:`** | | +| _end of the week_ | _up-against the ending_ | '' | '' | +| _start of next year_ | _lean-toward starting_ | '' | '' | +| _middle of q2 last year_ | _rough-center calculation_ | '' | '' | +|
**`date-ranges:`** | | +| _between june and july_ | _explicit ranges_ | '' | '' | +| _from today to next haloween_ | | '' | '' | +| _aug 1 - aug 31_ | _dash-ranges_ | '' | '' | +| _22-23 February_ | | '' | '' | +| _today to next friday_ | | '' | '' | +| _during june_ | | '' | '' | +| _aug to june 1999_ | _shared range info_ | '' | '' | +| _before [2019]_ | _up-to a date_ | '' | '' | +| _by march_ | | '' | '' | +| _after february_ | _date-to-infinity_ | '' | '' | +|
**`repeating-intervals:`** | | +| _any wednesday_ | _n-repeating dates_ | | +| _any day in June_ | _repeating-date in range_ | June 1 ... | .. June 30 | +| _any wednesday this week_ | | '' | '' | +| _weekends in July_ | _more-complex interval_ | '' | '' | +| _every weekday until February_ | _interval until date_ | '' | '' | + + + + +### _Things it does awkwardly:_ + +| _`hmmm,`_ | _description_ | `Start` | `End` | +| ------------------------ | :--------------------------------------------: | :-----: | :---: | +| _middle of 2019/June_ | tries to find the sorta-center | June 15 | '' | +| _good friday 2025_ | tries to reckon astronomically-set holidays | '' | '' | +| _Oct 22 1975 2am in PST_ | historical DST changes (assumes current dates) | '' | '' | + + + + +### _Things it doesn't do:_ + +| _😓,_ | _description_ | `Start` | `End` | +| ------------------------------------------- | :----------------------: | :-----: | :---: | +| _not this Saturday, but the Saturday after_ | self-reference logic | '' | '' | +| _3 years ago tomorrow_ | folksy short-hand | '' | '' | +| _2100_ | military time formats | '' | '' | +| _may 97_ | 'bare' 2-digit years | '' | '' | + + + +
+ +
+ +## API + +- **[.dates()](https://observablehq.com/@spencermountain/compromise-dates)** - find dates like `June 8th` or `03/03/18` + - **[.dates().get()](https://observablehq.com/@spencermountain/compromise-dates)** - simple start/end json result + - **[.dates().json()](https://observablehq.com/@spencermountain/compromise-dates)** - overloaded output with date metadata + - **[.dates().format('')](https://observablehq.com/@spencermountain/compromise-dates)** - convert the dates to specific formats + - **[.dates().isBefore(iso)](https://observablehq.com/@spencermountain/compromise-dates)** - return only dates occuring before given date + - **[.dates().isAfter(iso)](https://observablehq.com/@spencermountain/compromise-dates)** - return only dates occuring after given date + - **[.dates().isSame(unit, iso)](https://observablehq.com/@spencermountain/compromise-dates)** - return only dates within a given year, month, date +- **[.durations()](https://observablehq.com/@spencermountain/compromise-dates)** - `2 weeks` or `5mins` + - **[.durations().get()](https://observablehq.com/@spencermountain/compromise-dates)** - return simple json for duration + - **[.durations().json()](https://observablehq.com/@spencermountain/compromise-dates)** - overloaded output with duration metadata +- **[.times()](https://observablehq.com/@spencermountain/compromise-dates)** - `4:30pm` or `half past five` + - **[.durations().get()](https://observablehq.com/@spencermountain/compromise-dates)** - return simple json for times + - **[.times().json()](https://observablehq.com/@spencermountain/compromise-dates)** - overloaded output with time metadata + + + + +### Configuration: + +`.dates()` accepts an optional object, that lets you set the context for the date parsing. + +```js +const context = { + timezone: 'Canada/Eastern', //the default timezone is 'ETC/UTC' + today: '2020-02-20', //the implicit, or reference day/year + punt: { weeks: 2 }, // the implied duration to use for 'after june 2nd' + dayStart: '8:00am', + dayEnd: '5:30pm', + dmy : false //assume british-format dates, when unclear +} + +nlp('in two days').dates(context).get() +/* + [{ start: '2020-02-22T08:00:00.000+5:00', end: '2020-02-22T17:30:00.000+5:00' }] +*/ +``` + + + +## _Opinions_: + +### _Start of week:_ + +By default, weeks start on a Monday, and _'next week'_ will run from Monday morning to Sunday night. +This can be configued in spacetime, but right now we are not passing-through this config. + +### _Implied durations:_ + +_'after October'_ returns a range starting **Nov 1st**, and ending **2-weeks** after, by default. +This can be configured by setting `punt` param in the context object: + +```js +doc.dates({ punt: { month: 1 } }) +``` + +### _Future bias:_ + +_'May 7th'_ will prefer a May 7th in the future. + +The parser will return a past-date though, in the current-month: + +```js +// from march 2nd +nlp('feb 30th').dates({ today: '2021-02-01' }).get() +``` + +### _This/Next/Last:_ + +named-weeks or months eg _'this/next/last week'_ are mostly straight-forward. + +#### _This monday_ + +A bare 'monday' will always refer to itself, or the upcoming monday. + +- Saying _'this monday'_ on monday, is itself. +- Saying _'this monday'_ on tuesday , is next week. + +Likewise, _'this june'_ in June, is itself. _'this june'_ in any other month, is the nearest June in the future. + +Future versions of this library could look at sentence-tense to help disambiguate these dates - _'i paid on monday'_ vs _'i will pay on monday'_. + +#### _Last monday_ + +If it's Tuesday, _'last monday'_ will not mean yesterday. + +- Saying _'last monday'_ on a tuesday will be -1 week. +- Saying _'a week ago monday'_ will also work. +- Saying _'this past monday'_ will return yesterday. + +For reference, **Wit.ai** & **chronic** libraries both return yesterday. **Natty** and **SugarJs** returns -1 week, like we do. + +_'last X'_ can be less than 7 days backward, if it crosses a week starting-point: + +- Saying _'last friday'_ on a monday will be only a few days back. + +#### _Next Friday_ + +If it's Tuesday, _'next wednesday'_ will not be tomorrow. It will be a week after tomorrow. + +- Saying _'next wednesday'_ on a tuesday, will be +1 week. +- Saying _'a week wednesday'_ will also be +1 week. +- Saying _'this coming wednesday'_ will be tomorrow. + +For reference, **Wit.ai**, **chronic**, and **Natty** libraries all return tomorrow. **SugarJs** returns +1 week, like we do. + +### _Nth Week:_ + +The first week of a month, or a year is the first week _with a thursday in it_. This is a weird, but widely-held standard. I believe it's a military formalism. It cannot be (easily) configued. This means that the start-date for _first week of January_ may be a Monday in December, etc. + +As expected, _first monday of January_ will always be in January. + +### _British/American ambiguity:_ + +by default, we use the same interpretation of dates as javascript does - we assume `01/02/2020` is Jan 2nd, (US-version) but allow `13/01/2020` to be Jan 13th (UK-version). + +if you want to co-erce an interpretation of `02/03/1999`, you can set it with the `dmy:true` option: +```js +nlp('02/03/1999').dates().get() //February 3 +nlp('02/03/1999').dates({dmy:true}).get() // March 2 +``` +ISO dates, (like `1999-03-02`) are unaffected by the change. + +### _Seasons:_ + +By default, _'this summer'_ will return **June 1 - Sept 1**, which is northern hemisphere ISO. +Configuring the default hemisphere should be possible in the future. + +### _Day times:_ + +There are some hardcoded times for _'lunch time'_ and others, but mainly, a day begins at `12:00am` and ends at `11:59pm` - the last millisecond of the day. + +### _Invalid dates:_ + +compromise will tag anything that looks like a date, but not validate the dates until they are parsed. + +- _'january 34th 2020'_ will return **Jan 31 2020**. +- _'tomorrow at 2:62pm'_ will return just return 'tomorrow'. +- _'6th week of february_ will return the 2nd week of march. +- Setting an hour that's skipped, or repeated by a DST change will return the closest valid time to the DST change. + +### _Inclusive/exclusive ranges:_ + +_'between january and march'_ will include all of march. This is usually pretty-ambiguous normally. + +### _Date greediness:_ + +This library makes no assumptions about the input text, and is careful to avoid false-positive dates. +If you know your text is a date, you can crank-up the date-tagger with a [compromise-plugin](https://observablehq.com/@spencermountain/compromise-plugins), like so: + +```js +nlp.extend(function (Doc, world) { + // ambiguous words + world.addWords({ + weds: 'WeekDay', + wed: 'WeekDay', + sat: 'WeekDay', + sun: 'WeekDay', + }) + world.postProcess(doc => { + // tag '2nd quarter' as a date + doc.match('#Ordinal quarter').tag('#Date') + // tag '2/2' as a date (not a fraction) + doc.match('/[0-9]{1,2}/[0-9]{1,2}/').tag('#Date') + }) +}) +``` + +### _Misc:_ + +- _'thursday the 16th'_ - will set to the 16th, even if it's not thursday +- _'in a few hours/years'_ - in 2 hours/years +- _'jan 5th 2008 to Jan 6th the following year'_ - date-range explicit references +- assume _'half past 5'_ is 5pm + + +
+ +
+
+
+ +
+ +### _About:_ + + + + +
+ 1 - Regular-expressions are too-brittle to parse dates. +
+ +
+ 2 - Neural-nets are too-wonky to parse dates. +
+ +
+ 3 - A corporation, or startup is the wrong place to build a universal date-parser. +
+ + + + +Parsing _dates_, _times_, _durations_, and _intervals_ from natural language can be a solved-problem. + +A rule-based, community open-source library - _one based on simple NLP_ - is the best way to build a natural language date parser - commercial, or otherwise - for the frontend, or the backend. + +The _[match-syntax](https://observablehq.com/@spencermountain/compromise-match-syntax)_ is effective and easy, _javascript_ is prevailing, and the more people who contribute, the better. + + + +### See also + +- [Duckling](https://duckling.wit.ai/) - by wit.ai (facebook) +- [Sugarjs/dates](https://sugarjs.com/dates/) - by Andrew Plummer (js) +- [Chronic](https://github.com/mojombo/chronic) - by Tom Preston-Werner (Ruby) +- [SUTime](https://nlp.stanford.edu/software/sutime.shtml) - by Angel Chang, Christopher Manning (Java) +- [Natty](http://natty.joestelmach.com/) - by Joe Stelmach (Java) +- [rrule](https://github.com/jakubroztocil/rrule) - repeating date-interval handler (js) +- [ParseDateTime](https://pypi.org/project/parsedatetime/) by Mike Taylor (Python) + +
+ +
+ +compromise-date is sponsored by + +**MIT** licenced diff --git a/plugins/dates/builds/compromise-dates.cjs b/plugins/dates/builds/compromise-dates.cjs new file mode 100644 index 0000000..422fe11 --- /dev/null +++ b/plugins/dates/builds/compromise-dates.cjs @@ -0,0 +1,9009 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.compromiseDates = factory()); +})(this, (function () { 'use strict'; + + // chop things up into bite-size pieces + const split = function (dates) { + let m = null; + // don't split anything if it looks like a range + if (dates.has('^(between|within) #Date')) { + return dates + } + + if (dates.has('#Month')) { + // 'june 5, june 10' + m = dates.match('[#Month #Value] and? #Month', 0).ifNo('@hasDash$'); + if (m.found) { + dates = dates.splitAfter(m); + } + + // '5 june, 10 june' + m = dates.match('[#Value #Month] and? #Value #Month', 0); + if (m.found) { + dates = dates.splitAfter(m); + } + + // 'june, august' + m = dates.match('^[#Month] and? #Month #Ordinal?$', 0); + if (m.found) { + dates = dates.splitAfter(m); + } + + // 'june 5th, june 10th' + m = dates.match('[#Month #Value] #Month', 0).ifNo('@hasDash$'); + if (m.found) { + dates = dates.splitAfter(m); + } + } + + if (dates.has('#WeekDay')) { + // 'tuesday, wednesday' + m = dates.match('^[#WeekDay] and? #WeekDay$', 0).ifNo('@hasDash$'); + if (m.found) { + dates = dates.splitAfter(m); + } + + // 'tuesday, wednesday, and friday' + m = dates.match('#WeekDay #WeekDay and? #WeekDay'); + if (m.found) { + dates = dates.splitOn('#WeekDay'); + } + + // monday, wednesday + m = dates.match('[#WeekDay] (and|or|this|next)? #WeekDay', 0).ifNo('@hasDash$'); + if (m.found) { + dates = dates.splitAfter('#WeekDay'); + } + } + + // next week tomorrow + m = dates.match('(this|next) #Duration [(today|tomorrow|yesterday)]', 0); + if (m.found) { + dates = dates.splitBefore(m); + } + // tomorrow 15 march + m = dates.match('[(today|tomorrow|yesterday)] #Value #Month', 0); + if (m.found) { + dates = dates.splitAfter(m); + } + // tomorrow yesterday + m = dates.match('[(today|tomorrow|yesterday)] (today|tomorrow|yesterday|#WeekDay)', 0).ifNo('@hasDash$'); + if (m.found) { + dates = dates.splitAfter(m); + } + //1998 and 1999 + m = dates.match('#Year [and] #Year', 0); + if (m.found) { + dates = dates.splitAfter(m); + } + // cleanup any splits + dates = dates.not('^and'); + dates = dates.not('and$'); + return dates + }; + + const findDate = function (doc) { + let dates = doc.match('#Date+'); + // ignore only-durations like '20 minutes' + dates = dates.filter(m => { + let isDuration = m.has('^#Duration+$') || m.has('^#Value #Duration+$'); + // allow 'q4', etc + if (isDuration === true && m.has('(#FinancialQuarter|quarter)')) { + return true + } + return isDuration === false + }); + // 30 minutes on tuesday + let m = dates.match('[#Cardinal #Duration (in|on|this|next|during|for)] #Date', 0); + if (m.found) { + dates = dates.not(m); + } + // 30 minutes tuesday + m = dates.match('[#Cardinal #Duration] #WeekDay', 0); + if (m.found) { + dates = dates.not(m); + } + // tuesday for 30 mins + m = dates.match('#Date [for #Value #Duration]$', 0); + if (m.found) { + dates = dates.not(m); + } + // '20 minutes june 5th' + m = dates.match('[#Cardinal #Duration] #Date', 0); //but allow '20 minutes ago' + if (m.found && !dates.has('#Cardinal #Duration] (ago|from|before|after|back)')) { + dates = dates.not(m); + } + // for 20 minutes + m = dates.match('for #Cardinal #Duration'); + if (m.found) { + dates = dates.not(m); + } + // 'one saturday' + dates = dates.notIf('^one (#WeekDay|#Month)$'); + // tokenize the dates + dates = split(dates); + + // $5 an hour + dates = dates.notIf('(#Money|#Percentage)'); + dates = dates.notIf('^per #Duration'); + return dates + }; + + const knownUnits = { + second: true, + minute: true, + hour: true, + day: true, + week: true, + weekend: true, + month: true, + season: true, + quarter: true, + year: true, + }; + + const aliases$2 = { + wk: 'week', + min: 'minute', + sec: 'second', + weekend: 'week', //for now... + }; + + const parseUnit = function (m) { + let unit = m.match('#Duration').text('normal'); + unit = unit.replace(/s$/, ''); + // support shorthands like 'min' + if (aliases$2.hasOwnProperty(unit)) { + unit = aliases$2[unit]; + } + return unit + }; + + //turn '5 weeks before' to {weeks:5} + const parseShift = function (doc) { + let result = {}; + let m = doc.none(); + let shift = doc.match('#DateShift+'); + if (shift.found === false) { + return { res: result, m } + } + + // '5 weeks' + shift.match('#Cardinal #Duration').forEach((ts) => { + let num = ts.match('#Cardinal').numbers().get()[0]; + if (num && typeof num === 'number') { + let unit = parseUnit(ts); + if (knownUnits[unit] === true) { + result[unit] = num; + } + } + }); + //is it 2 weeks ago? → -2 + if (shift.has('(before|ago|hence|back)$') === true) { + Object.keys(result).forEach((k) => (result[k] *= -1)); + } + m = shift.match('#Cardinal #Duration'); + shift = shift.not(m); + + // supoprt '1 day after tomorrow' + m = shift.match('[#Duration] [(after|before)]'); + if (m.found) { + let unit = m.groups('unit').text('reduced'); + // unit = unit.replace(/s$/, '') + let dir = m.groups('dir').text('reduced'); + if (dir === 'after') { + result[unit] = 1; + } else if (dir === 'before') { + result[unit] = -1; + } + } + + // in half an hour + m = shift.match('half (a|an) [#Duration]', 0); + if (m.found) { + let unit = parseUnit(m); + result[unit] = 0.5; + } + + // a couple years + m = shift.match('a (few|couple) [#Duration]', 0); + if (m.found) { + let unit = parseUnit(m); + result[unit] = m.has('few') ? 3 : 2; + } + + // finally, remove it from our text + m = doc.match('#DateShift+'); + return { result, m } + }; + + /* + a 'counter' is a Unit determined after a point + * first hour of x + * 7th week in x + * last year in x + * + unlike a shift, like "2 weeks after x" + */ + const oneBased = { + minute: true, + }; + + const getCounter = function (doc) { + // 7th week of + let m = doc.match('[#Value] [#Duration+] (of|in)'); + if (m.found) { + let obj = m.groups(); + let num = obj.num.numbers().get()[0]; + let unit = obj.unit.text('reduced'); + let result = { + unit: unit, + num: Number(num) || 0, + }; + // 0-based or 1-based units + if (!oneBased[unit]) { + result.num -= 1; + } + return { result, m } + } + // first week of + m = doc.match('[(first|initial|last|final)] [#Duration+] (of|in)'); + if (m.found) { + let obj = m.groups(); + let dir = obj.dir.text('reduced'); + let unit = obj.unit.text('reduced'); + if (dir === 'initial') { + dir = 'first'; + } + if (dir === 'final') { + dir = 'last'; + } + let result = { + unit: unit, + dir: dir, + }; + return { result, m } + } + + return { result: null, m: doc.none() } + }; + + const MSEC_IN_HOUR = 60 * 60 * 1000; + + //convert our local date syntax a javascript UTC date + const toUtc = (dstChange, offset, year) => { + const [month, rest] = dstChange.split('/'); + const [day, hour] = rest.split(':'); + return Date.UTC(year, month - 1, day, hour) - (offset * MSEC_IN_HOUR) + }; + + // compare epoch with dst change events (in utc) + const inSummerTime = (epoch, start, end, summerOffset, winterOffset) => { + const year = new Date(epoch).getUTCFullYear(); + const startUtc = toUtc(start, winterOffset, year); + const endUtc = toUtc(end, summerOffset, year); + // simple number comparison now + return epoch >= startUtc && epoch < endUtc + }; + + /* eslint-disable no-console */ + + // this method avoids having to do a full dst-calculation on every operation + // it reproduces some things in ./index.js, but speeds up spacetime considerably + const quickOffset = s => { + let zones = s.timezones; + let obj = zones[s.tz]; + if (obj === undefined) { + console.warn("Warning: couldn't find timezone " + s.tz); + return 0 + } + if (obj.dst === undefined) { + return obj.offset + } + + //get our two possible offsets + let jul = obj.offset; + let dec = obj.offset + 1; // assume it's the same for now + if (obj.hem === 'n') { + dec = jul - 1; + } + let split = obj.dst.split('->'); + let inSummer = inSummerTime(s.epoch, split[0], split[1], jul, dec); + if (inSummer === true) { + return jul + } + return dec + }; + + var data = { + "9|s": "2/dili,2/jayapura", + "9|n": "2/chita,2/khandyga,2/pyongyang,2/seoul,2/tokyo,2/yakutsk,11/palau,japan,rok", + "9.5|s|04/06:03->10/05:04": "4/adelaide,4/broken_hill,4/south,4/yancowinna", + "9.5|s": "4/darwin,4/north", + "8|s|03/13:01->10/02:00": "12/casey", + "8|s": "2/kuala_lumpur,2/makassar,2/singapore,4/perth,2/ujung_pandang,4/west,singapore", + "8|n": "2/brunei,2/hong_kong,2/irkutsk,2/kuching,2/macau,2/manila,2/shanghai,2/taipei,2/ulaanbaatar,2/chongqing,2/chungking,2/harbin,2/macao,2/ulan_bator,2/choibalsan,hongkong,prc,roc", + "8.75|s": "4/eucla", + "7|s": "12/davis,2/jakarta,9/christmas", + "7|n": "2/bangkok,2/barnaul,2/hovd,2/krasnoyarsk,2/novokuznetsk,2/novosibirsk,2/phnom_penh,2/pontianak,2/ho_chi_minh,2/tomsk,2/vientiane,2/saigon", + "6|s": "12/vostok", + "6|n": "2/almaty,2/bishkek,2/dhaka,2/omsk,2/qyzylorda,2/qostanay,2/thimphu,2/urumqi,9/chagos,2/dacca,2/kashgar,2/thimbu", + "6.5|n": "2/yangon,9/cocos,2/rangoon", + "5|s": "12/mawson,9/kerguelen", + "5|n": "2/aqtau,2/aqtobe,2/ashgabat,2/atyrau,2/dushanbe,2/karachi,2/oral,2/samarkand,2/tashkent,2/yekaterinburg,9/maldives,2/ashkhabad", + "5.75|n": "2/kathmandu,2/katmandu", + "5.5|n": "2/kolkata,2/colombo,2/calcutta", + "4|s": "9/reunion", + "4|n": "2/baku,2/dubai,2/muscat,2/tbilisi,2/yerevan,8/astrakhan,8/samara,8/saratov,8/ulyanovsk,8/volgograd,9/mahe,9/mauritius,2/volgograd", + "4.5|n": "2/kabul", + "3|s": "12/syowa,9/antananarivo", + "3|n|04/25:02->10/30:24": "0/cairo,egypt", + "3|n|04/12:04->10/25:02": "2/gaza,2/hebron", + "3|n|03/30:05->10/26:04": "2/famagusta,2/nicosia,8/athens,8/bucharest,8/helsinki,8/kyiv,8/mariehamn,8/riga,8/sofia,8/tallinn,8/uzhgorod,8/vilnius,8/zaporozhye,8/nicosia,8/kiev,eet", + "3|n|03/30:04->10/26:03": "8/chisinau,8/tiraspol", + "3|n|03/30:02->10/25:24": "2/beirut", + "3|n|03/28:04->10/26:02": "2/jerusalem,2/tel_aviv,israel", + "3|n": "0/addis_ababa,0/asmara,0/asmera,0/dar_es_salaam,0/djibouti,0/juba,0/kampala,0/mogadishu,0/nairobi,2/aden,2/amman,2/baghdad,2/bahrain,2/damascus,2/kuwait,2/qatar,2/riyadh,8/istanbul,8/kirov,8/minsk,8/moscow,8/simferopol,9/comoro,9/mayotte,2/istanbul,turkey,w-su", + "3.5|n": "2/tehran,iran", + "2|s|03/30:04->10/26:02": "12/troll", + "2|s": "0/gaborone,0/harare,0/johannesburg,0/lubumbashi,0/lusaka,0/maputo,0/maseru,0/mbabane", + "2|n|03/30:04->10/26:03": "0/ceuta,arctic/longyearbyen,8/amsterdam,8/andorra,8/belgrade,8/berlin,8/bratislava,8/brussels,8/budapest,8/busingen,8/copenhagen,8/gibraltar,8/ljubljana,8/luxembourg,8/madrid,8/malta,8/monaco,8/oslo,8/paris,8/podgorica,8/prague,8/rome,8/san_marino,8/sarajevo,8/skopje,8/stockholm,8/tirane,8/vaduz,8/vatican,8/vienna,8/warsaw,8/zagreb,8/zurich,3/jan_mayen,poland,cet,met", + "2|n": "0/blantyre,0/bujumbura,0/khartoum,0/kigali,0/tripoli,8/kaliningrad,libya", + "1|s": "0/brazzaville,0/kinshasa,0/luanda,0/windhoek", + "1|n|03/30:03->10/26:02": "3/canary,3/faroe,3/madeira,8/dublin,8/guernsey,8/isle_of_man,8/jersey,8/lisbon,8/london,3/faeroe,eire,8/belfast,gb-eire,gb,portugal,wet", + "1|n": "0/algiers,0/bangui,0/douala,0/lagos,0/libreville,0/malabo,0/ndjamena,0/niamey,0/porto-novo,0/tunis", + "14|n": "11/kiritimati", + "13|s": "11/apia,11/tongatapu", + "13|n": "11/enderbury,11/kanton,11/fakaofo", + "12|s|04/06:03->09/28:04": "12/mcmurdo,11/auckland,12/south_pole,nz", + "12|s": "11/fiji", + "12|n": "2/anadyr,2/kamchatka,2/srednekolymsk,11/funafuti,11/kwajalein,11/majuro,11/nauru,11/tarawa,11/wake,11/wallis,kwajalein", + "12.75|s|04/06:03->04/06:02": "11/chatham,nz-chat", + "11|s|04/06:03->10/05:04": "12/macquarie", + "11|s": "11/bougainville", + "11|n": "2/magadan,2/sakhalin,11/efate,11/guadalcanal,11/kosrae,11/noumea,11/pohnpei,11/ponape", + "11.5|n|04/06:03->10/05:04": "11/norfolk", + "10|s|04/06:03->10/05:04": "4/currie,4/hobart,4/melbourne,4/sydney,4/act,4/canberra,4/nsw,4/tasmania,4/victoria", + "10|s": "12/dumontdurville,4/brisbane,4/lindeman,11/port_moresby,4/queensland", + "10|n": "2/ust-nera,2/vladivostok,11/guam,11/saipan,11/chuuk,11/truk,11/yap", + "10.5|s|04/06:01->10/05:02": "4/lord_howe,4/lhi", + "0|s|02/23:03->04/06:04": "0/casablanca,0/el_aaiun", + "0|n|03/30:02->10/26:01": "3/azores", + "0|n|03/30:01->10/25:24": "1/scoresbysund", + "0|n": "0/abidjan,0/accra,0/bamako,0/banjul,0/bissau,0/conakry,0/dakar,0/freetown,0/lome,0/monrovia,0/nouakchott,0/ouagadougou,0/sao_tome,1/danmarkshavn,3/reykjavik,3/st_helena,13/gmt,13/utc,0/timbuktu,13/greenwich,13/uct,13/universal,13/zulu,gmt-0,gmt+0,gmt0,greenwich,iceland,uct,universal,utc,zulu,13/unknown,factory", + "-9|n|03/09:04->11/02:02": "1/adak,1/atka,us/aleutian", + "-9|n": "11/gambier", + "-9.5|n": "11/marquesas", + "-8|n|03/09:04->11/02:02": "1/anchorage,1/juneau,1/metlakatla,1/nome,1/sitka,1/yakutat,us/alaska", + "-8|n": "11/pitcairn", + "-7|n|03/09:04->11/02:02": "1/los_angeles,1/santa_isabel,1/tijuana,1/vancouver,1/ensenada,6/pacific,10/bajanorte,us/pacific-new,us/pacific", + "-7|n": "1/creston,1/dawson,1/dawson_creek,1/fort_nelson,1/hermosillo,1/mazatlan,1/phoenix,1/whitehorse,6/yukon,10/bajasur,us/arizona,mst", + "-6|s|04/05:22->09/06:24": "11/easter,7/easterisland", + "-6|n|04/07:02->10/27:02": "1/merida", + "-6|n|03/09:04->11/02:02": "1/boise,1/cambridge_bay,1/denver,1/edmonton,1/inuvik,1/north_dakota,1/ojinaga,1/ciudad_juarez,1/yellowknife,1/shiprock,6/mountain,navajo,us/mountain", + "-6|n": "1/bahia_banderas,1/belize,1/chihuahua,1/costa_rica,1/el_salvador,1/guatemala,1/managua,1/mexico_city,1/monterrey,1/regina,1/swift_current,1/tegucigalpa,11/galapagos,6/east-saskatchewan,6/saskatchewan,10/general", + "-5|s": "1/lima,1/rio_branco,1/porto_acre,5/acre", + "-5|n|03/09:04->11/02:02": "1/chicago,1/matamoros,1/menominee,1/rainy_river,1/rankin_inlet,1/resolute,1/winnipeg,1/indiana/knox,1/indiana/tell_city,1/north_dakota/beulah,1/north_dakota/center,1/north_dakota/new_salem,1/knox_in,6/central,us/central,us/indiana-starke", + "-5|n": "1/bogota,1/cancun,1/cayman,1/coral_harbour,1/eirunepe,1/guayaquil,1/jamaica,1/panama,1/atikokan,jamaica,est", + "-4|s|04/05:24->09/07:02": "1/santiago,7/continental", + "-4|s|03/22:24->10/05:02": "1/asuncion", + "-4|s": "1/campo_grande,1/cuiaba,1/la_paz,1/manaus,5/west", + "-4|n|03/09:04->11/02:02": "1/detroit,1/grand_turk,1/indiana,1/indianapolis,1/iqaluit,1/kentucky,1/louisville,1/montreal,1/nassau,1/new_york,1/nipigon,1/pangnirtung,1/port-au-prince,1/thunder_bay,1/toronto,1/indiana/marengo,1/indiana/petersburg,1/indiana/vevay,1/indiana/vincennes,1/indiana/winamac,1/kentucky/monticello,1/fort_wayne,1/indiana/indianapolis,1/kentucky/louisville,6/eastern,us/east-indiana,us/eastern,us/michigan", + "-4|n|03/09:02->11/02:01": "1/havana,cuba", + "-4|n": "1/anguilla,1/antigua,1/aruba,1/barbados,1/blanc-sablon,1/boa_vista,1/caracas,1/curacao,1/dominica,1/grenada,1/guadeloupe,1/guyana,1/kralendijk,1/lower_princes,1/marigot,1/martinique,1/montserrat,1/port_of_spain,1/porto_velho,1/puerto_rico,1/santo_domingo,1/st_barthelemy,1/st_kitts,1/st_lucia,1/st_thomas,1/st_vincent,1/tortola,1/virgin", + "-3|s": "1/argentina,1/buenos_aires,1/catamarca,1/cordoba,1/fortaleza,1/jujuy,1/mendoza,1/montevideo,1/punta_arenas,1/sao_paulo,12/palmer,12/rothera,3/stanley,1/argentina/la_rioja,1/argentina/rio_gallegos,1/argentina/salta,1/argentina/san_juan,1/argentina/san_luis,1/argentina/tucuman,1/argentina/ushuaia,1/argentina/comodrivadavia,1/argentina/buenos_aires,1/argentina/catamarca,1/argentina/cordoba,1/argentina/jujuy,1/argentina/mendoza,1/argentina/rosario,1/rosario,5/east", + "-3|n|03/09:04->11/02:02": "1/glace_bay,1/goose_bay,1/halifax,1/moncton,1/thule,3/bermuda,6/atlantic", + "-3|n": "1/araguaina,1/bahia,1/belem,1/cayenne,1/maceio,1/paramaribo,1/recife,1/santarem", + "-2|n|03/09:04->11/02:02": "1/miquelon", + "-2|n": "1/noronha,3/south_georgia,5/denoronha", + "-2.5|n|03/09:04->11/02:02": "1/st_johns,6/newfoundland", + "-1|n|03/30:01->10/25:24": "1/nuuk,1/godthab", + "-1|n": "3/cape_verde", + "-11|n": "11/midway,11/niue,11/pago_pago,11/samoa,us/samoa", + "-10|n": "11/honolulu,11/johnston,11/rarotonga,11/tahiti,us/hawaii,hst" + }; + + //prefixes for iana names.. + var prefixes = [ + 'africa', + 'america', + 'asia', + 'atlantic', + 'australia', + 'brazil', + 'canada', + 'chile', + 'europe', + 'indian', + 'mexico', + 'pacific', + 'antarctica', + 'etc' + ]; + + let all = {}; + Object.keys(data).forEach((k) => { + let split = k.split('|'); + let obj = { + offset: Number(split[0]), + hem: split[1] + }; + if (split[2]) { + obj.dst = split[2]; + } + let names = data[k].split(','); + names.forEach((str) => { + str = str.replace(/(^[0-9]+)\//, (before, num) => { + num = Number(num); + return prefixes[num] + '/' + }); + all[str] = obj; + }); + }); + + all.utc = { + offset: 0, + hem: 'n' //default to northern hemisphere - (sorry!) + }; + + //add etc/gmt+n + for (let i = -14; i <= 14; i += 0.5) { + let num = i; + if (num > 0) { + num = '+' + num; + } + let name = 'etc/gmt' + num; + all[name] = { + offset: i * -1, //they're negative! + hem: 'n' //(sorry) + }; + name = 'utc/gmt' + num; //this one too, why not. + all[name] = { + offset: i * -1, + hem: 'n' + }; + } + + //find the implicit iana code for this machine. + //safely query the Intl object + //based on - https://bitbucket.org/pellepim/jstimezonedetect/src + const fallbackTZ = 'utc'; // + + //this Intl object is not supported often, yet + const safeIntl = () => { + if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') { + return null + } + let format = Intl.DateTimeFormat(); + if (typeof format === 'undefined' || typeof format.resolvedOptions === 'undefined') { + return null + } + let timezone = format.resolvedOptions().timeZone; + if (!timezone) { + return null + } + return timezone.toLowerCase() + }; + + const guessTz = () => { + let timezone = safeIntl(); + if (timezone === null) { + return fallbackTZ + } + return timezone + }; + + const isOffset$1 = /(-?[0-9]+)h(rs)?/i; + const isNumber$1 = /(-?[0-9]+)/; + const utcOffset$1 = /utc([\-+]?[0-9]+)/i; + const gmtOffset$1 = /gmt([\-+]?[0-9]+)/i; + + const toIana$1 = function (num) { + num = Number(num); + if (num >= -13 && num <= 13) { + num = num * -1; //it's opposite! + num = (num > 0 ? '+' : '') + num; //add plus sign + return 'etc/gmt' + num + } + return null + }; + + const parseOffset$2 = function (tz) { + // '+5hrs' + let m = tz.match(isOffset$1); + if (m !== null) { + return toIana$1(m[1]) + } + // 'utc+5' + m = tz.match(utcOffset$1); + if (m !== null) { + return toIana$1(m[1]) + } + // 'GMT-5' (not opposite) + m = tz.match(gmtOffset$1); + if (m !== null) { + let num = Number(m[1]) * -1; + return toIana$1(num) + } + // '+5' + m = tz.match(isNumber$1); + if (m !== null) { + return toIana$1(m[1]) + } + return null + }; + + /* eslint-disable no-console */ + + + let local = guessTz(); + + //add all the city names by themselves + const cities = Object.keys(all).reduce((h, k) => { + let city = k.split('/')[1] || ''; + city = city.replace(/_/g, ' '); + h[city] = k; + return h + }, {}); + + //try to match these against iana form + const normalize$4 = (tz) => { + tz = tz.replace(/ time/g, ''); + tz = tz.replace(/ (standard|daylight|summer)/g, ''); + tz = tz.replace(/\b(east|west|north|south)ern/g, '$1'); + tz = tz.replace(/\b(africa|america|australia)n/g, '$1'); + tz = tz.replace(/\beuropean/g, 'europe'); + tz = tz.replace(/islands/g, 'island'); + return tz + }; + + // try our best to reconcile the timzone to this given string + const lookupTz = (str, zones) => { + if (!str) { + // guard if Intl response is unsupported (#397) + if (!zones.hasOwnProperty(local)) { + console.warn(`Unrecognized IANA id '${local}'. Setting fallback tz to UTC.`); + local = 'utc'; + } + return local + } + if (typeof str !== 'string') { + console.error("Timezone must be a string - recieved: '", str, "'\n"); + } + let tz = str.trim(); + // let split = str.split('/') + //support long timezones like 'America/Argentina/Rio_Gallegos' + // if (split.length > 2 && zones.hasOwnProperty(tz) === false) { + // tz = split[0] + '/' + split[1] + // } + tz = tz.toLowerCase(); + if (zones.hasOwnProperty(tz) === true) { + return tz + } + //lookup more loosely.. + tz = normalize$4(tz); + if (zones.hasOwnProperty(tz) === true) { + return tz + } + //try city-names + if (cities.hasOwnProperty(tz) === true) { + return cities[tz] + } + // //try to parse '-5h' + if (/[0-9]/.test(tz) === true) { + let id = parseOffset$2(tz); + if (id) { + return id + } + } + + throw new Error( + "Spacetime: Cannot find timezone named: '" + str + "'. Please enter an IANA timezone id." + ) + }; + + //git:blame @JuliasCaesar https://www.timeanddate.com/date/leapyear.html + function isLeapYear(year) { return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 } + // unsurprisingly-nasty `typeof date` call + function isDate(d) { return Object.prototype.toString.call(d) === '[object Date]' && !isNaN(d.valueOf()) } + function isArray$1(input) { return Object.prototype.toString.call(input) === '[object Array]' } + function isObject(input) { return Object.prototype.toString.call(input) === '[object Object]' } + function isBoolean(input) { return Object.prototype.toString.call(input) === '[object Boolean]' } + + function zeroPad(str, len = 2) { + let pad = '0'; + str = str + ''; + return str.length >= len ? str : new Array(len - str.length + 1).join(pad) + str + } + + function titleCase$1(str) { + if (!str) { + return '' + } + return str[0].toUpperCase() + str.substr(1) + } + + function ordinal(i) { + let j = i % 10; + let k = i % 100; + if (j === 1 && k !== 11) { + return i + 'st' + } + if (j === 2 && k !== 12) { + return i + 'nd' + } + if (j === 3 && k !== 13) { + return i + 'rd' + } + return i + 'th' + } + + //strip 'st' off '1st'.. + function toCardinal(str) { + str = String(str); + str = str.replace(/([0-9])(st|nd|rd|th)$/i, '$1'); + return parseInt(str, 10) + } + + //used mostly for cleanup of unit names, like 'months' + function normalize$3(str = '') { + str = str.toLowerCase().trim(); + str = str.replace(/ies$/, 'y'); //'centuries' + str = str.replace(/s$/, ''); + str = str.replace(/-/g, ''); + if (str === 'day' || str === 'days') { + return 'date' + } + if (str === 'min' || str === 'mins') { + return 'minute' + } + return str + } + + function getEpoch(tmp) { + //support epoch + if (typeof tmp === 'number') { + return tmp + } + //suport date objects + if (isDate(tmp)) { + return tmp.getTime() + } + // support spacetime objects + if (tmp.epoch || tmp.epoch === 0) { + return tmp.epoch + } + return null + } + + //make sure this input is a spacetime obj + function beADate(d, s) { + if (isObject(d) === false) { + return s.clone().set(d) + } + return d + } + + function formatTimezone(offset, delimiter = '') { + const sign = offset > 0 ? '+' : '-'; + const absOffset = Math.abs(offset); + const hours = zeroPad(parseInt('' + absOffset, 10)); + const minutes = zeroPad((absOffset % 1) * 60); + return `${sign}${hours}${delimiter}${minutes}` + } + + /* eslint-disable no-console */ + const defaults$1 = { + year: new Date().getFullYear(), + month: 0, + date: 1 + }; + + //support [2016, 03, 01] format + const parseArray$1 = (s, arr, today) => { + if (arr.length === 0) { + return s + } + let order = ['year', 'month', 'date', 'hour', 'minute', 'second', 'millisecond']; + for (let i = 0; i < order.length; i++) { + let num = arr[i] || today[order[i]] || defaults$1[order[i]] || 0; + s = s[order[i]](num); + } + return s + }; + + //support {year:2016, month:3} format + const parseObject$1 = (s, obj, today) => { + // if obj is empty, do nothing + if (Object.keys(obj).length === 0) { + return s + } + obj = Object.assign({}, defaults$1, today, obj); + let keys = Object.keys(obj); + for (let i = 0; i < keys.length; i++) { + let unit = keys[i]; + //make sure we have this method + if (s[unit] === undefined || typeof s[unit] !== 'function') { + continue + } + //make sure the value is a number + if (obj[unit] === null || obj[unit] === undefined || obj[unit] === '') { + continue + } + let num = obj[unit] || today[unit] || defaults$1[unit] || 0; + s = s[unit](num); + } + return s + }; + + // this may seem like an arbitrary number, but it's 'within jan 1970' + // this is only really ambiguous until 2054 or so + const parseNumber$1 = function (s, input) { + const minimumEpoch = 2500000000; + // if the given epoch is really small, they've probably given seconds and not milliseconds + // anything below this number is likely (but not necessarily) a mistaken input. + if (input > 0 && input < minimumEpoch && s.silent === false) { + console.warn(' - Warning: You are setting the date to January 1970.'); + console.warn(' - did input seconds instead of milliseconds?'); + } + s.epoch = input; + return s + }; + + var fns = { + parseArray: parseArray$1, + parseObject: parseObject$1, + parseNumber: parseNumber$1 + }; + + // pull in 'today' data for the baseline moment + const getNow = function (s) { + s.epoch = Date.now(); + Object.keys(s._today || {}).forEach((k) => { + if (typeof s[k] === 'function') { + s = s[k](s._today[k]); + } + }); + return s + }; + + const dates$4 = { + now: (s) => { + return getNow(s) + }, + today: (s) => { + return getNow(s) + }, + tonight: (s) => { + s = getNow(s); + s = s.hour(18); //6pm + return s + }, + tomorrow: (s) => { + s = getNow(s); + s = s.add(1, 'day'); + s = s.startOf('day'); + return s + }, + yesterday: (s) => { + s = getNow(s); + s = s.subtract(1, 'day'); + s = s.startOf('day'); + return s + }, + christmas: (s) => { + let year = getNow(s).year(); + s = s.set([year, 11, 25, 18, 0, 0]); // Dec 25 + return s + }, + 'new years': (s) => { + let year = getNow(s).year(); + s = s.set([year, 11, 31, 18, 0, 0]); // Dec 31 + return s + } + }; + dates$4['new years eve'] = dates$4['new years']; + + //little cleanup.. + const normalize$2 = function (str) { + // remove all day-names + str = str.replace(/\b(mon|tues?|wed|wednes|thur?s?|fri|sat|satur|sun)(day)?\b/i, ''); + //remove ordinal ending + str = str.replace(/([0-9])(th|rd|st|nd)/, '$1'); + str = str.replace(/,/g, ''); + str = str.replace(/ +/g, ' ').trim(); + return str + }; + + let o = { + millisecond: 1 + }; + o.second = 1000; + o.minute = 60000; + o.hour = 3.6e6; // dst is supported post-hoc + o.day = 8.64e7; // + o.date = o.day; + o.month = 8.64e7 * 29.5; //(average) + o.week = 6.048e8; + o.year = 3.154e10; // leap-years are supported post-hoc + //add plurals + Object.keys(o).forEach(k => { + o[k + 's'] = o[k]; + }); + + /* eslint-disable no-console */ + + //basically, step-forward/backward until js Date object says we're there. + const walk = (s, n, fn, unit, previous) => { + let current = s.d[fn](); + if (current === n) { + return //already there + } + let startUnit = previous === null ? null : s.d[previous](); + let original = s.epoch; + //try to get it as close as we can + let diff = n - current; + s.epoch += o[unit] * diff; + //DST edge-case: if we are going many days, be a little conservative + // console.log(unit, diff) + if (unit === 'day') { + // s.epoch -= ms.minute + //but don't push it over a month + if (Math.abs(diff) > 28 && n < 28) { + s.epoch += o.hour; + } + } + // 1st time: oops, did we change previous unit? revert it. + if (previous !== null && startUnit !== s.d[previous]()) { + // console.warn('spacetime warning: missed setting ' + unit) + s.epoch = original; + // s.epoch += ms[unit] * diff * 0.89 // maybe try and make it close...? + } + //repair it if we've gone too far or something + //(go by half-steps, just in case) + const halfStep = o[unit] / 2; + while (s.d[fn]() < n) { + s.epoch += halfStep; + } + + while (s.d[fn]() > n) { + s.epoch -= halfStep; + } + // 2nd time: did we change previous unit? revert it. + if (previous !== null && startUnit !== s.d[previous]()) { + // console.warn('spacetime warning: missed setting ' + unit) + s.epoch = original; + } + }; + //find the desired date by a increment/check while loop + const units$5 = { + year: { + valid: (n) => n > -4000 && n < 4000, + walkTo: (s, n) => walk(s, n, 'getFullYear', 'year', null) + }, + month: { + valid: (n) => n >= 0 && n <= 11, + walkTo: (s, n) => { + let d = s.d; + let current = d.getMonth(); + let original = s.epoch; + let startUnit = d.getFullYear(); + if (current === n) { + return + } + //try to get it as close as we can.. + let diff = n - current; + s.epoch += o.day * (diff * 28); //special case + //oops, did we change the year? revert it. + if (startUnit !== s.d.getFullYear()) { + s.epoch = original; + } + //increment by day + while (s.d.getMonth() < n) { + s.epoch += o.day; + } + while (s.d.getMonth() > n) { + s.epoch -= o.day; + } + } + }, + date: { + valid: (n) => n > 0 && n <= 31, + walkTo: (s, n) => walk(s, n, 'getDate', 'day', 'getMonth') + }, + hour: { + valid: (n) => n >= 0 && n < 24, + walkTo: (s, n) => walk(s, n, 'getHours', 'hour', 'getDate') + }, + minute: { + valid: (n) => n >= 0 && n < 60, + walkTo: (s, n) => walk(s, n, 'getMinutes', 'minute', 'getHours') + }, + second: { + valid: (n) => n >= 0 && n < 60, + walkTo: (s, n) => { + //do this one directly + s.epoch = s.seconds(n).epoch; + } + }, + millisecond: { + valid: (n) => n >= 0 && n < 1000, + walkTo: (s, n) => { + //do this one directly + s.epoch = s.milliseconds(n).epoch; + } + } + }; + + const walkTo = (s, wants) => { + let keys = Object.keys(units$5); + let old = s.clone(); + for (let i = 0; i < keys.length; i++) { + let k = keys[i]; + let n = wants[k]; + if (n === undefined) { + n = old[k](); + } + if (typeof n === 'string') { + n = parseInt(n, 10); + } + //make-sure it's valid + if (!units$5[k].valid(n)) { + s.epoch = null; + if (s.silent === false) { + console.warn('invalid ' + k + ': ' + n); + } + return + } + units$5[k].walkTo(s, n); + } + return + }; + + const monthLengths = [ + 31, // January - 31 days + 28, // February - 28 days in a common year and 29 days in leap years + 31, // March - 31 days + 30, // April - 30 days + 31, // May - 31 days + 30, // June - 30 days + 31, // July - 31 days + 31, // August - 31 days + 30, // September - 30 days + 31, // October - 31 days + 30, // November - 30 days + 31 // December - 31 days + ]; + + // 28 - feb + // 30 - april, june, sept, nov + // 31 - jan, march, may, july, aug, oct, dec + + let shortMonths = [ + 'jan', + 'feb', + 'mar', + 'apr', + 'may', + 'jun', + 'jul', + 'aug', + 'sep', + 'oct', + 'nov', + 'dec' + ]; + let longMonths = [ + 'january', + 'february', + 'march', + 'april', + 'may', + 'june', + 'july', + 'august', + 'september', + 'october', + 'november', + 'december' + ]; + + function buildMapping() { + const obj = { + sep: 8 //support this format + }; + for (let i = 0; i < shortMonths.length; i++) { + obj[shortMonths[i]] = i; + } + for (let i = 0; i < longMonths.length; i++) { + obj[longMonths[i]] = i; + } + return obj + } + + function short$1() { return shortMonths } + function long$1() { return longMonths } + function mapping$3() { return buildMapping() } + function set$5(i18n) { + shortMonths = i18n.short || shortMonths; + longMonths = i18n.long || longMonths; + } + + //pull-apart ISO offsets, like "+0100" + const parseOffset$1 = (s, offset) => { + if (!offset) { + return s + } + offset = offset.trim().toLowerCase(); + // according to ISO8601, tz could be hh:mm, hhmm or hh + // so need few more steps before the calculation. + let num = 0; + + // for (+-)hh:mm + if (/^[+-]?[0-9]{2}:[0-9]{2}$/.test(offset)) { + //support "+01:00" + if (/:00/.test(offset) === true) { + offset = offset.replace(/:00/, ''); + } + //support "+01:30" + if (/:30/.test(offset) === true) { + offset = offset.replace(/:30/, '.5'); + } + } + + // for (+-)hhmm + if (/^[+-]?[0-9]{4}$/.test(offset)) { + offset = offset.replace(/30$/, '.5'); + } + num = parseFloat(offset); + + //divide by 100 or 10 - , "+0100", "+01" + if (Math.abs(num) > 100) { + num = num / 100; + } + //this is a fancy-move + if (num === 0 || offset === 'Z' || offset === 'z') { + s.tz = 'etc/gmt'; + return s + } + //okay, try to match it to a utc timezone + //remember - this is opposite! a -5 offset maps to Etc/GMT+5 ¯\_(:/)_/¯ + //https://askubuntu.com/questions/519550/why-is-the-8-timezone-called-gmt-8-in-the-filesystem + num *= -1; + + if (num >= 0) { + num = '+' + num; + } + let tz = 'etc/gmt' + num; + let zones = s.timezones; + + if (zones[tz]) { + // log a warning if we're over-writing a given timezone? + // console.log('changing timezone to: ' + tz) + s.tz = tz; + } + return s + }; + + // truncate any sub-millisecond values + const parseMs = function (str = '') { + str = String(str); + //js does not support sub-millisecond values + // so truncate these - 2021-11-02T19:55:30.087772 + if (str.length > 3) { + str = str.substring(0, 3); + } else if (str.length === 1) { + // assume ms are zero-padded on the left + // but maybe not on the right. + // turn '.10' into '.100' + str = str + '00'; + } else if (str.length === 2) { + str = str + '0'; + } + return Number(str) || 0 + }; + + const parseTime$1 = (s, str = '') => { + // remove all whitespace + str = str.replace(/^\s+/, '').toLowerCase(); + //formal time format - 04:30.23 + let arr = str.match(/([0-9]{1,2}):([0-9]{1,2}):?([0-9]{1,2})?[:.]?([0-9]{1,4})?/); + if (arr !== null) { + let [, h, m, sec, ms] = arr; + //validate it a little + h = Number(h); + if (h < 0 || h > 24) { + return s.startOf('day') + } + m = Number(m); //don't accept '5:3pm' + if (arr[2].length < 2 || m < 0 || m > 59) { + return s.startOf('day') + } + s = s.hour(h); + s = s.minute(m); + s = s.seconds(sec || 0); + s = s.millisecond(parseMs(ms)); + //parse-out am/pm + let ampm = str.match(/[0-9] ?(am|pm)\b/); + if (ampm !== null && ampm[1]) { + s = s.ampm(ampm[1]); + } + return s + } + + //try an informal form - 5pm (no minutes) + arr = str.match(/([0-9]+) ?(am|pm)/); + if (arr !== null && arr[1]) { + let h = Number(arr[1]); + //validate it a little.. + if (h > 12 || h < 1) { + return s.startOf('day') + } + s = s.hour(arr[1] || 0); + s = s.ampm(arr[2]); + s = s.startOf('hour'); + return s + } + + //no time info found, use start-of-day + s = s.startOf('day'); + return s + }; + + let months$1 = mapping$3(); + + //given a month, return whether day number exists in it + const validate$1 = (obj) => { + //invalid values + if (monthLengths.hasOwnProperty(obj.month) !== true) { + return false + } + //support leap-year in february + if (obj.month === 1) { + if (isLeapYear(obj.year) && obj.date <= 29) { + return true + } else { + return obj.date <= 28 + } + } + //is this date too-big for this month? + let max = monthLengths[obj.month] || 0; + if (obj.date <= max) { + return true + } + return false + }; + + const parseYear = (str = '', today) => { + str = str.trim(); + // parse '86 shorthand + if (/^'[0-9][0-9]$/.test(str) === true) { + let num = Number(str.replace(/'/, '')); + if (num > 50) { + return 1900 + num + } + return 2000 + num + } + let year = parseInt(str, 10); + // use a given year from options.today + if (!year && today) { + year = today.year; + } + // fallback to this year + year = year || new Date().getFullYear(); + return year + }; + + const parseMonth = function (str) { + str = str.toLowerCase().trim(); + if (str === 'sept') { + return months$1.sep + } + return months$1[str] + }; + + var ymd = [ + // ===== + // y-m-d + // ===== + //iso-this 1998-05-30T22:00:00:000Z, iso-that 2017-04-03T08:00:00-0700 + { + reg: /^(-?0{0,2}[0-9]{3,4})-([0-9]{1,2})-([0-9]{1,2})[T| ]([0-9.:]+)(Z|[0-9-+:]+)?$/i, + parse: (s, m) => { + let obj = { + year: m[1], + month: parseInt(m[2], 10) - 1, + date: m[3] + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + parseOffset$1(s, m[5]); + walkTo(s, obj); + s = parseTime$1(s, m[4]); + return s + } + }, + //short-iso "2015-03-25" or "2015/03/25" or "2015/03/25 12:26:14 PM" + { + reg: /^([0-9]{4})[\-/. ]([0-9]{1,2})[\-/. ]([0-9]{1,2})( [0-9]{1,2}(:[0-9]{0,2})?(:[0-9]{0,3})? ?(am|pm)?)?$/i, + parse: (s, m) => { + let obj = { + year: m[1], + month: parseInt(m[2], 10) - 1, + date: parseInt(m[3], 10) + }; + if (obj.month >= 12) { + //support yyyy/dd/mm (weird, but ok) + obj.date = parseInt(m[2], 10); + obj.month = parseInt(m[3], 10) - 1; + } + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s, m[4]); + return s + } + }, + + //text-month "2015-feb-25" + { + reg: /^([0-9]{4})[\-/. ]([a-z]+)[\-/. ]([0-9]{1,2})( [0-9]{1,2}(:[0-9]{0,2})?(:[0-9]{0,3})? ?(am|pm)?)?$/i, + parse: (s, m) => { + let obj = { + year: parseYear(m[1], s._today), + month: parseMonth(m[2]), + date: toCardinal(m[3] || '') + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s, m[4]); + return s + } + } + ]; + + var mdy = [ + // ===== + // m-d-y + // ===== + //mm/dd/yyyy - uk/canada "6/28/2019, 12:26:14 PM" + { + reg: /^([0-9]{1,2})[-/.]([0-9]{1,2})[\-/.]?([0-9]{4})?( [0-9]{1,2}:[0-9]{2}:?[0-9]{0,2} ?(am|pm|gmt))?$/i, + parse: (s, arr) => { + let month = parseInt(arr[1], 10) - 1; + let date = parseInt(arr[2], 10); + //support dd/mm/yyy + if (s.british || month >= 12) { + date = parseInt(arr[1], 10); + month = parseInt(arr[2], 10) - 1; + } + let obj = { + date, + month, + year: parseYear(arr[3], s._today) || new Date().getFullYear() + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s, arr[4]); + return s + } + }, + //alt short format - "feb-25-2015" + { + reg: /^([a-z]+)[\-/. ]([0-9]{1,2})[\-/. ]?([0-9]{4}|'[0-9]{2})?( [0-9]{1,2}(:[0-9]{0,2})?(:[0-9]{0,3})? ?(am|pm)?)?$/i, + parse: (s, arr) => { + let obj = { + year: parseYear(arr[3], s._today), + month: parseMonth(arr[1]), + date: toCardinal(arr[2] || '') + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s, arr[4]); + return s + } + }, + + //Long "Mar 25 2015" + //February 22, 2017 15:30:00 + { + reg: /^([a-z]+) ([0-9]{1,2})( [0-9]{4})?( ([0-9:]+( ?am| ?pm| ?gmt)?))?$/i, + parse: (s, arr) => { + let obj = { + year: parseYear(arr[3], s._today), + month: parseMonth(arr[1]), + date: toCardinal(arr[2] || '') + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s, arr[4]); + return s + } + }, + // 'Sun Mar 14 15:09:48 +0000 2021' + { + reg: /^([a-z]+) ([0-9]{1,2}) ([0-9]{1,2}:[0-9]{2}:?[0-9]{0,2})( \+[0-9]{4})?( [0-9]{4})?$/i, + parse: (s, arr) => { + let [, month, date, time, tz, year] = arr; + let obj = { + year: parseYear(year, s._today), + month: parseMonth(month), + date: toCardinal(date || '') + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseOffset$1(s, tz); + s = parseTime$1(s, time); + return s + } + } + ]; + + var dmy = [ + // ===== + // d-m-y + // ===== + //common british format - "25-feb-2015" + { + reg: /^([0-9]{1,2})[-/]([a-z]+)[\-/]?([0-9]{4})?$/i, + parse: (s, m) => { + let obj = { + year: parseYear(m[3], s._today), + month: parseMonth(m[2]), + date: toCardinal(m[1] || '') + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s, m[4]); + return s + } + }, + // "25 Mar 2015" + { + reg: /^([0-9]{1,2})( [a-z]+)( [0-9]{4}| '[0-9]{2})? ?([0-9]{1,2}:[0-9]{2}:?[0-9]{0,2} ?(am|pm|gmt))?$/i, + parse: (s, m) => { + let obj = { + year: parseYear(m[3], s._today), + month: parseMonth(m[2]), + date: toCardinal(m[1]) + }; + if (!obj.month || validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s, m[4]); + return s + } + }, + // 01-jan-2020 + { + reg: /^([0-9]{1,2})[. \-/]([a-z]+)[. \-/]([0-9]{4})?( [0-9]{1,2}(:[0-9]{0,2})?(:[0-9]{0,3})? ?(am|pm)?)?$/i, + parse: (s, m) => { + let obj = { + date: Number(m[1]), + month: parseMonth(m[2]), + year: Number(m[3]) + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = s.startOf('day'); + s = parseTime$1(s, m[4]); + return s + } + } + ]; + + var misc = [ + // ===== + // no dates + // ===== + + // '2012-06' month-only + { + reg: /^([0-9]{4})[\-/]([0-9]{2})$/, + parse: (s, m) => { + let obj = { + year: m[1], + month: parseInt(m[2], 10) - 1, + date: 1 + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s, m[4]); + return s + } + }, + + //February 2017 (implied date) + { + reg: /^([a-z]+) ([0-9]{4})$/i, + parse: (s, arr) => { + let obj = { + year: parseYear(arr[2], s._today), + month: parseMonth(arr[1]), + date: s._today.date || 1 + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s, arr[4]); + return s + } + }, + + { + // 'q2 2002' + reg: /^(q[0-9])( of)?( [0-9]{4})?/i, + parse: (s, arr) => { + let quarter = arr[1] || ''; + s = s.quarter(quarter); + let year = arr[3] || ''; + if (year) { + year = year.trim(); + s = s.year(year); + } + return s + } + }, + { + // 'summer 2002' + reg: /^(spring|summer|winter|fall|autumn)( of)?( [0-9]{4})?/i, + parse: (s, arr) => { + let season = arr[1] || ''; + s = s.season(season); + let year = arr[3] || ''; + if (year) { + year = year.trim(); + s = s.year(year); + } + return s + } + }, + { + // '200bc' + reg: /^[0-9,]+ ?b\.?c\.?$/i, + parse: (s, arr) => { + let str = arr[0] || ''; + //make year-negative + str = str.replace(/^([0-9,]+) ?b\.?c\.?$/i, '-$1'); + let d = new Date(); + let obj = { + year: parseInt(str.trim(), 10), + month: d.getMonth(), + date: d.getDate() + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s); + return s + } + }, + { + // '200ad' + reg: /^[0-9,]+ ?(a\.?d\.?|c\.?e\.?)$/i, + parse: (s, arr) => { + let str = arr[0] || ''; + //remove commas + str = str.replace(/,/g, ''); + let d = new Date(); + let obj = { + year: parseInt(str.trim(), 10), + month: d.getMonth(), + date: d.getDate() + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s); + return s + } + }, + { + // '1992' + reg: /^[0-9]{4}( ?a\.?d\.?)?$/i, + parse: (s, arr) => { + let today = s._today; + // using today's date, but a new month is awkward. + if (today.month && !today.date) { + today.date = 1; + } + let d = new Date(); + let obj = { + year: parseYear(arr[0], today), + month: today.month || d.getMonth(), + date: today.date || d.getDate() + }; + if (validate$1(obj) === false) { + s.epoch = null; + return s + } + walkTo(s, obj); + s = parseTime$1(s); + return s + } + } + ]; + + var parsers = [].concat(ymd, mdy, dmy, misc); + + /* eslint-disable no-console */ + + const parseString = function (s, input, givenTz) { + // let parsers = s.parsers || [] + //try each text-parse template, use the first good result + for (let i = 0; i < parsers.length; i++) { + let m = input.match(parsers[i].reg); + if (m) { + let res = parsers[i].parse(s, m, givenTz); + if (res !== null && res.isValid()) { + return res + } + } + } + if (s.silent === false) { + console.warn("Warning: couldn't parse date-string: '" + input + "'"); + } + s.epoch = null; + return s + }; + + const { parseArray, parseObject, parseNumber } = fns; + //we have to actually parse these inputs ourselves + // - can't use built-in js parser ;( + //========================================= + // ISO Date "2015-03-25" + // Short Date "03/25/2015" or "2015/03/25" + // Long Date "Mar 25 2015" or "25 Mar 2015" + // Full Date "Wednesday March 25 2015" + //========================================= + + const defaults = { + year: new Date().getFullYear(), + month: 0, + date: 1 + }; + + //find the epoch from different input styles + const parseInput = (s, input) => { + let today = s._today || defaults; + //if we've been given a epoch number, it's easy + if (typeof input === 'number') { + return parseNumber(s, input) + } + //set tmp time + s.epoch = Date.now(); + // overwrite tmp time with 'today' value, if exists + if (s._today && isObject(s._today) && Object.keys(s._today).length > 0) { + let res = parseObject(s, today, defaults); + if (res.isValid()) { + s.epoch = res.epoch; + } + } + // null input means 'now' + if (input === null || input === undefined || input === '') { + return s //k, we're good. + } + //support input of Date() object + if (isDate(input) === true) { + s.epoch = input.getTime(); + return s + } + //support [2016, 03, 01] format + if (isArray$1(input) === true) { + s = parseArray(s, input, today); + return s + } + //support {year:2016, month:3} format + if (isObject(input) === true) { + //support spacetime object as input + if (input.epoch) { + s.epoch = input.epoch; + s.tz = input.tz; + return s + } + s = parseObject(s, input, today); + return s + } + //input as a string.. + if (typeof input !== 'string') { + return s + } + //little cleanup.. + input = normalize$2(input); + //try some known-words, like 'now' + if (dates$4.hasOwnProperty(input) === true) { + s = dates$4[input](s); + return s + } + //try each text-parse template, use the first good result + return parseString(s, input) + }; + + let shortDays = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']; + let longDays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']; + + function short() { return shortDays } + function long() { return longDays } + function set$4(i18n) { + shortDays = i18n.short || shortDays; + longDays = i18n.long || longDays; + } + const aliases$1 = { + mo: 1, + tu: 2, + we: 3, + th: 4, + fr: 5, + sa: 6, + su: 7, + tues: 2, + weds: 3, + wedn: 3, + thur: 4, + thurs: 4 + }; + + let titleCaseEnabled = true; + + function useTitleCase() { + return titleCaseEnabled + } + + function set$3(val) { + titleCaseEnabled = val; + } + + // create the timezone offset part of an iso timestamp + // it's kind of nuts how involved this is + // "+01:00", "+0100", or simply "+01" + const isoOffset = s => { + let offset = s.timezone().current.offset; + return !offset ? 'Z' : formatTimezone(offset, ':') + }; + + const applyCaseFormat = (str) => { + if (useTitleCase()) { + return titleCase$1(str) + } + return str + }; + + // iso-year padding + const padYear = (num) => { + if (num >= 0) { + return zeroPad(num, 4) + } else { + num = Math.abs(num); + return '-' + zeroPad(num, 4) + } + }; + + const format = { + day: (s) => applyCaseFormat(s.dayName()), + 'day-short': (s) => applyCaseFormat(short()[s.day()]), + 'day-number': (s) => s.day(), + 'day-ordinal': (s) => ordinal(s.day()), + 'day-pad': (s) => zeroPad(s.day()), + + date: (s) => s.date(), + 'date-ordinal': (s) => ordinal(s.date()), + 'date-pad': (s) => zeroPad(s.date()), + + month: (s) => applyCaseFormat(s.monthName()), + 'month-short': (s) => applyCaseFormat(short$1()[s.month()]), + 'month-number': (s) => s.month(), + 'month-ordinal': (s) => ordinal(s.month()), + 'month-pad': (s) => zeroPad(s.month()), + 'iso-month': (s) => zeroPad(s.month() + 1), //1-based months + + year: (s) => { + let year = s.year(); + if (year > 0) { + return year + } + year = Math.abs(year); + return year + ' BC' + }, + 'year-short': (s) => { + let year = s.year(); + if (year > 0) { + return `'${String(s.year()).substr(2, 4)}` + } + year = Math.abs(year); + return year + ' BC' + }, + 'iso-year': (s) => { + let year = s.year(); + let isNegative = year < 0; + let str = zeroPad(Math.abs(year), 4); //0-padded + if (isNegative) { + //negative years are for some reason 6-digits ('-00008') + str = zeroPad(str, 6); + str = '-' + str; + } + return str + }, + + time: (s) => s.time(), + 'time-24': (s) => `${s.hour24()}:${zeroPad(s.minute())}`, + + hour: (s) => s.hour12(), + 'hour-pad': (s) => zeroPad(s.hour12()), + 'hour-24': (s) => s.hour24(), + 'hour-24-pad': (s) => zeroPad(s.hour24()), + + minute: (s) => s.minute(), + 'minute-pad': (s) => zeroPad(s.minute()), + second: (s) => s.second(), + 'second-pad': (s) => zeroPad(s.second()), + millisecond: (s) => s.millisecond(), + 'millisecond-pad': (s) => zeroPad(s.millisecond(), 3), + + ampm: (s) => s.ampm(), + AMPM: (s) => s.ampm().toUpperCase(), + quarter: (s) => 'Q' + s.quarter(), + season: (s) => s.season(), + era: (s) => s.era(), + json: (s) => s.json(), + timezone: (s) => s.timezone().name, + offset: (s) => isoOffset(s), + + numeric: (s) => `${s.year()}/${zeroPad(s.month() + 1)}/${zeroPad(s.date())}`, // yyyy/mm/dd + 'numeric-us': (s) => `${zeroPad(s.month() + 1)}/${zeroPad(s.date())}/${s.year()}`, // mm/dd/yyyy + 'numeric-uk': (s) => `${zeroPad(s.date())}/${zeroPad(s.month() + 1)}/${s.year()}`, //dd/mm/yyyy + 'mm/dd': (s) => `${zeroPad(s.month() + 1)}/${zeroPad(s.date())}`, //mm/dd + + // ... https://en.wikipedia.org/wiki/ISO_8601 ;((( + iso: (s) => { + let year = s.format('iso-year'); + let month = zeroPad(s.month() + 1); //1-based months + let date = zeroPad(s.date()); + let hour = zeroPad(s.h24()); + let minute = zeroPad(s.minute()); + let second = zeroPad(s.second()); + let ms = zeroPad(s.millisecond(), 3); + let offset = isoOffset(s); + return `${year}-${month}-${date}T${hour}:${minute}:${second}.${ms}${offset}` //2018-03-09T08:50:00.000-05:00 + }, + 'iso-short': (s) => { + let month = zeroPad(s.month() + 1); //1-based months + let date = zeroPad(s.date()); + let year = padYear(s.year()); + return `${year}-${month}-${date}` //2017-02-15 + }, + 'iso-utc': (s) => { + return new Date(s.epoch).toISOString() //2017-03-08T19:45:28.367Z + }, + + //i made these up + nice: (s) => `${short$1()[s.month()]} ${ordinal(s.date())}, ${s.time()}`, + 'nice-24': (s) => + `${short$1()[s.month()]} ${ordinal(s.date())}, ${s.hour24()}:${zeroPad( + s.minute() + )}`, + 'nice-year': (s) => `${short$1()[s.month()]} ${ordinal(s.date())}, ${s.year()}`, + 'nice-day': (s) => + `${short()[s.day()]} ${applyCaseFormat(short$1()[s.month()])} ${ordinal( + s.date() + )}`, + 'nice-full': (s) => + `${s.dayName()} ${applyCaseFormat(s.monthName())} ${ordinal(s.date())}, ${s.time()}`, + 'nice-full-24': (s) => + `${s.dayName()} ${applyCaseFormat(s.monthName())} ${ordinal( + s.date() + )}, ${s.hour24()}:${zeroPad(s.minute())}` + }; + //aliases + const aliases = { + 'day-name': 'day', + 'month-name': 'month', + 'iso 8601': 'iso', + 'time-h24': 'time-24', + 'time-12': 'time', + 'time-h12': 'time', + tz: 'timezone', + 'day-num': 'day-number', + 'month-num': 'month-number', + 'month-iso': 'iso-month', + 'year-iso': 'iso-year', + 'nice-short': 'nice', + 'nice-short-24': 'nice-24', + mdy: 'numeric-us', + dmy: 'numeric-uk', + ymd: 'numeric', + 'yyyy/mm/dd': 'numeric', + 'mm/dd/yyyy': 'numeric-us', + 'dd/mm/yyyy': 'numeric-us', + 'little-endian': 'numeric-uk', + 'big-endian': 'numeric', + 'day-nice': 'nice-day' + }; + Object.keys(aliases).forEach((k) => (format[k] = format[aliases[k]])); + + const printFormat = (s, str = '') => { + //don't print anything if it's an invalid date + if (s.isValid() !== true) { + return '' + } + //support .format('month') + if (format.hasOwnProperty(str)) { + let out = format[str](s) || ''; + if (str !== 'json') { + out = String(out); + if (str.toLowerCase() !== 'ampm') { + out = applyCaseFormat(out); + } + } + return out + } + //support '{hour}:{minute}' notation + if (str.indexOf('{') !== -1) { + let sections = /\{(.+?)\}/g; + str = str.replace(sections, (_, fmt) => { + fmt = fmt.trim(); + if (fmt !== 'AMPM') { + fmt = fmt.toLowerCase(); + } + if (format.hasOwnProperty(fmt)) { + let out = String(format[fmt](s)); + if (fmt.toLowerCase() !== 'ampm') { + return applyCaseFormat(out) + } + return out + } + return '' + }); + return str + } + + return s.format('iso-short') + }; + + //parse this insane unix-time-templating thing, from the 19th century + //http://unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns + + //time-symbols we support + const mapping$2 = { + G: (s) => s.era(), + GG: (s) => s.era(), + GGG: (s) => s.era(), + GGGG: (s) => (s.era() === 'AD' ? 'Anno Domini' : 'Before Christ'), + //year + y: (s) => s.year(), + yy: (s) => { + //last two chars + return zeroPad(Number(String(s.year()).substr(2, 4))) + }, + yyy: (s) => s.year(), + yyyy: (s) => s.year(), + yyyyy: (s) => '0' + s.year(), + // u: (s) => {},//extended non-gregorian years + + //quarter + Q: (s) => s.quarter(), + QQ: (s) => s.quarter(), + QQQ: (s) => s.quarter(), + QQQQ: (s) => s.quarter(), + + //month + M: (s) => s.month() + 1, + MM: (s) => zeroPad(s.month() + 1), + MMM: (s) => s.format('month-short'), + MMMM: (s) => s.format('month'), + + //week + w: (s) => s.week(), + ww: (s) => zeroPad(s.week()), + //week of month + // W: (s) => s.week(), + + //date of month + d: (s) => s.date(), + dd: (s) => zeroPad(s.date()), + //date of year + D: (s) => s.dayOfYear(), + DD: (s) => zeroPad(s.dayOfYear()), + DDD: (s) => zeroPad(s.dayOfYear(), 3), + + // F: (s) => {},//date of week in month + // g: (s) => {},//modified julian day + + //day + E: (s) => s.format('day-short'), + EE: (s) => s.format('day-short'), + EEE: (s) => s.format('day-short'), + EEEE: (s) => s.format('day'), + EEEEE: (s) => s.format('day')[0], + e: (s) => s.day(), + ee: (s) => s.day(), + eee: (s) => s.format('day-short'), + eeee: (s) => s.format('day'), + eeeee: (s) => s.format('day')[0], + + //am/pm + a: (s) => s.ampm().toUpperCase(), + aa: (s) => s.ampm().toUpperCase(), + aaa: (s) => s.ampm().toUpperCase(), + aaaa: (s) => s.ampm().toUpperCase(), + + //hour + h: (s) => s.h12(), + hh: (s) => zeroPad(s.h12()), + H: (s) => s.hour(), + HH: (s) => zeroPad(s.hour()), + // j: (s) => {},//weird hour format + + m: (s) => s.minute(), + mm: (s) => zeroPad(s.minute()), + s: (s) => s.second(), + ss: (s) => zeroPad(s.second()), + + //milliseconds + SSS: (s) => zeroPad(s.millisecond(), 3), + //milliseconds in the day + A: (s) => s.epoch - s.startOf('day').epoch, + //timezone + z: (s) => s.timezone().name, + zz: (s) => s.timezone().name, + zzz: (s) => s.timezone().name, + zzzz: (s) => s.timezone().name, + Z: (s) => formatTimezone(s.timezone().current.offset), + ZZ: (s) => formatTimezone(s.timezone().current.offset), + ZZZ: (s) => formatTimezone(s.timezone().current.offset), + ZZZZ: (s) => formatTimezone(s.timezone().current.offset, ':') + }; + + const addAlias = (char, to, n) => { + let name = char; + let toName = to; + for (let i = 0; i < n; i += 1) { + mapping$2[name] = mapping$2[toName]; + name += char; + toName += to; + } + }; + addAlias('q', 'Q', 4); + addAlias('L', 'M', 4); + addAlias('Y', 'y', 4); + addAlias('c', 'e', 4); + addAlias('k', 'H', 2); + addAlias('K', 'h', 2); + addAlias('S', 's', 2); + addAlias('v', 'z', 4); + addAlias('V', 'Z', 4); + + // support unix-style escaping with ' character + const escapeChars = function (arr) { + for (let i = 0; i < arr.length; i += 1) { + if (arr[i] === `'`) { + // greedy-search for next apostrophe + for (let o = i + 1; o < arr.length; o += 1) { + if (arr[o]) { + arr[i] += arr[o]; + } + if (arr[o] === `'`) { + arr[o] = null; + break + } + arr[o] = null; + } + } + } + return arr.filter((ch) => ch) + }; + + //combine consecutive chars, like 'yyyy' as one. + const combineRepeated = function (arr) { + for (let i = 0; i < arr.length; i += 1) { + let c = arr[i]; + // greedy-forward + for (let o = i + 1; o < arr.length; o += 1) { + if (arr[o] === c) { + arr[i] += arr[o]; + arr[o] = null; + } else { + break + } + } + } + // '' means one apostrophe + arr = arr.filter((ch) => ch); + arr = arr.map((str) => { + if (str === `''`) { + str = `'`; + } + return str + }); + return arr + }; + + const unixFmt = (s, str) => { + let arr = str.split(''); + // support character escaping + arr = escapeChars(arr); + //combine 'yyyy' as string. + arr = combineRepeated(arr); + return arr.reduce((txt, c) => { + if (mapping$2[c] !== undefined) { + txt += mapping$2[c](s) || ''; + } else { + // 'unescape' + if (/^'.+'$/.test(c)) { + c = c.replace(/'/g, ''); + } + txt += c; + } + return txt + }, '') + }; + + const units$4 = ['year', 'season', 'quarter', 'month', 'week', 'day', 'quarterHour', 'hour', 'minute']; + + const doUnit = function (s, k) { + let start = s.clone().startOf(k); + let end = s.clone().endOf(k); + let duration = end.epoch - start.epoch; + let percent = (s.epoch - start.epoch) / duration; + return parseFloat(percent.toFixed(2)) + }; + + //how far it is along, from 0-1 + const progress = (s, unit) => { + if (unit) { + unit = normalize$3(unit); + return doUnit(s, unit) + } + let obj = {}; + units$4.forEach(k => { + obj[k] = doUnit(s, k); + }); + return obj + }; + + /* eslint-disable no-console */ + + //round to either current, or +1 of this unit + const nearest = (s, unit) => { + //how far have we gone? + let prog = s.progress(); + unit = normalize$3(unit); + //fix camel-case for this one + if (unit === 'quarterhour') { + unit = 'quarterHour'; + } + if (prog[unit] !== undefined) { + // go forward one? + if (prog[unit] > 0.5) { + s = s.add(1, unit); + } + // go to start + s = s.startOf(unit); + } else if (s.silent === false) { + console.warn("no known unit '" + unit + "'"); + } + return s + }; + + //increment until dates are the same + const climb = (a, b, unit) => { + let i = 0; + a = a.clone(); + while (a.isBefore(b)) { + //do proper, expensive increment to catch all-the-tricks + a = a.add(1, unit); + i += 1; + } + //oops, we went too-far.. + if (a.isAfter(b, unit)) { + i -= 1; + } + return i + }; + + // do a thurough +=1 on the unit, until they match + // for speed-reasons, only used on day, month, week. + const diffOne = (a, b, unit) => { + if (a.isBefore(b)) { + return climb(a, b, unit) + } else { + return climb(b, a, unit) * -1 //reverse it + } + }; + + // don't do anything too fancy here. + // 2020 - 2019 may be 1 year, or 0 years + // - '1 year difference' means 366 days during a leap year + const fastYear = (a, b) => { + let years = b.year() - a.year(); + // should we decrement it by 1? + a = a.year(b.year()); + if (a.isAfter(b)) { + years -= 1; + } + return years + }; + + // use a waterfall-method for computing a diff of any 'pre-knowable' units + // compute years, then compute months, etc.. + // ... then ms-math for any very-small units + const diff = function (a, b) { + // an hour is always the same # of milliseconds + // so these units can be 'pre-calculated' + let msDiff = b.epoch - a.epoch; + let obj = { + milliseconds: msDiff, + seconds: parseInt(msDiff / 1000, 10) + }; + obj.minutes = parseInt(obj.seconds / 60, 10); + obj.hours = parseInt(obj.minutes / 60, 10); + + //do the year + let tmp = a.clone(); + obj.years = fastYear(tmp, b); + tmp = a.add(obj.years, 'year'); + + //there's always 12 months in a year... + obj.months = obj.years * 12; + tmp = a.add(obj.months, 'month'); + obj.months += diffOne(tmp, b, 'month'); + + // there's always 4 quarters in a year... + obj.quarters = obj.years * 4; + obj.quarters += parseInt((obj.months % 12) / 3, 10); + + // there's always atleast 52 weeks in a year.. + // (month * 4) isn't as close + obj.weeks = obj.years * 52; + tmp = a.add(obj.weeks, 'week'); + obj.weeks += diffOne(tmp, b, 'week'); + + // there's always atleast 7 days in a week + obj.days = obj.weeks * 7; + tmp = a.add(obj.days, 'day'); + obj.days += diffOne(tmp, b, 'day'); + + return obj + }; + + const reverseDiff = function (obj) { + Object.keys(obj).forEach((k) => { + obj[k] *= -1; + }); + return obj + }; + + // this method counts a total # of each unit, between a, b. + // '1 month' means 28 days in february + // '1 year' means 366 days in a leap year + const main$1 = function (a, b, unit) { + b = beADate(b, a); + //reverse values, if necessary + let reversed = false; + if (a.isAfter(b)) { + let tmp = a; + a = b; + b = tmp; + reversed = true; + } + //compute them all (i know!) + let obj = diff(a, b); + if (reversed) { + obj = reverseDiff(obj); + } + //return just the requested unit + if (unit) { + //make sure it's plural-form + unit = normalize$3(unit); + if (/s$/.test(unit) !== true) { + unit += 's'; + } + if (unit === 'dates') { + unit = 'days'; + } + return obj[unit] + } + return obj + }; + + /* + ISO 8601 duration format + // https://en.wikipedia.org/wiki/ISO_8601#Durations + "P3Y6M4DT12H30M5S" + P the start of the duration representation. + Y the number of years. + M the number of months. + W the number of weeks. + D the number of days. + T of the representation. + H the number of hours. + M the number of minutes. + S the number of seconds. + */ + + const fmt$1 = (n) => Math.abs(n) || 0; + + const toISO = function (diff) { + let iso = 'P'; + iso += fmt$1(diff.years) + 'Y'; + iso += fmt$1(diff.months) + 'M'; + iso += fmt$1(diff.days) + 'DT'; + iso += fmt$1(diff.hours) + 'H'; + iso += fmt$1(diff.minutes) + 'M'; + iso += fmt$1(diff.seconds) + 'S'; + return iso + }; + + //get number of hours/minutes... between the two dates + function getDiff(a, b) { + const isBefore = a.isBefore(b); + const later = isBefore ? b : a; + let earlier = isBefore ? a : b; + earlier = earlier.clone(); + const diff = { + years: 0, + months: 0, + days: 0, + hours: 0, + minutes: 0, + seconds: 0 + }; + Object.keys(diff).forEach((unit) => { + if (earlier.isSame(later, unit)) { + return + } + let max = earlier.diff(later, unit); + earlier = earlier.add(max, unit); + diff[unit] = max; + }); + //reverse it, if necessary + if (isBefore) { + Object.keys(diff).forEach((u) => { + if (diff[u] !== 0) { + diff[u] *= -1; + } + }); + } + return diff + } + + let units$3 = { + second: 'second', + seconds: 'seconds', + minute: 'minute', + minutes: 'minutes', + hour: 'hour', + hours: 'hours', + day: 'day', + days: 'days', + month: 'month', + months: 'months', + year: 'year', + years: 'years', + }; + + function unitsString(unit) { + return units$3[unit] || ''; + } + + function set$2(i18n = {}) { + units$3 = { + second: i18n.second || units$3.second, + seconds: i18n.seconds || units$3.seconds, + minute: i18n.minute || units$3.minute, + minutes: i18n.minutes || units$3.minutes, + hour: i18n.hour || units$3.hour, + hours: i18n.hours || units$3.hours, + day: i18n.day || units$3.day, + days: i18n.days || units$3.days, + month: i18n.month || units$3.month, + months: i18n.months || units$3.months, + year: i18n.year || units$3.year, + years: i18n.years || units$3.years, + }; + } + + let past = 'past'; + let future = 'future'; + let present = 'present'; + let now = 'now'; + let almost = 'almost'; + let over = 'over'; + let pastDistance = (value) => `${value} ago`; + let futureDistance = (value) => `in ${value}`; + + function pastDistanceString(value) { return pastDistance(value) } + function futureDistanceString(value) { return futureDistance(value) } + function pastString() { return past } + function futureString() { return future } + function presentString() { return present } + function nowString() { return now } + function almostString() { return almost } + function overString() { return over } + + function set$1(i18n) { + pastDistance = i18n.pastDistance || pastDistance; + futureDistance = i18n.futureDistance || futureDistance; + past = i18n.past || past; + future = i18n.future || future; + present = i18n.present || present; + now = i18n.now || now; + almost = i18n.almost || almost; + over = i18n.over || over; + } + + //our conceptual 'break-points' for each unit + + const qualifiers = { + months: { + almost: 10, + over: 4 + }, + days: { + almost: 25, + over: 10 + }, + hours: { + almost: 20, + over: 8 + }, + minutes: { + almost: 50, + over: 20 + }, + seconds: { + almost: 50, + over: 20 + } + }; + + // Expects a plural unit arg + function pluralize(value, unit) { + if (value === 1) { + return value + ' ' + unitsString(unit.slice(0, -1)) + } + return value + ' ' + unitsString(unit) + } + + const toSoft = function (diff) { + let rounded = null; + let qualified = null; + let abbreviated = []; + let englishValues = []; + //go through each value and create its text-representation + Object.keys(diff).forEach((unit, i, units) => { + const value = Math.abs(diff[unit]); + if (value === 0) { + return + } + abbreviated.push(value + unit[0]); + const englishValue = pluralize(value, unit); + englishValues.push(englishValue); + if (!rounded) { + rounded = englishValue; + qualified = englishValue; + if (i > 4) { + return + } + //is it a 'almost' something, etc? + const nextUnit = units[i + 1]; + const nextValue = Math.abs(diff[nextUnit]); + if (nextValue > qualifiers[nextUnit].almost) { + rounded = pluralize(value + 1, unit); + qualified = almostString() + ' ' + rounded; + } else if (nextValue > qualifiers[nextUnit].over) { + qualified = overString() + ' ' + englishValue; + } + } + }); + + return { qualified, rounded, abbreviated, englishValues } + }; + + //by spencermountain + Shaun Grady + + //create the human-readable diff between the two dates + const since = (start, end) => { + end = beADate(end, start); + const diff = getDiff(start, end); + const isNow = Object.keys(diff).every((u) => !diff[u]); + if (isNow === true) { + return { + diff, + rounded: nowString(), + qualified: nowString(), + precise: nowString(), + abbreviated: [], + iso: 'P0Y0M0DT0H0M0S', + direction: presentString(), + } + } + let precise; + let direction = futureString(); + + let { rounded, qualified, englishValues, abbreviated } = toSoft(diff); + + //make them into a string + precise = englishValues.splice(0, 2).join(', '); + //handle before/after logic + if (start.isAfter(end) === true) { + rounded = pastDistanceString(rounded); + qualified = pastDistanceString(qualified); + precise = pastDistanceString(precise); + direction = pastString(); + } else { + rounded = futureDistanceString(rounded); + qualified = futureDistanceString(qualified); + precise = futureDistanceString(precise); + } + // https://en.wikipedia.org/wiki/ISO_8601#Durations + // P[n]Y[n]M[n]DT[n]H[n]M[n]S + let iso = toISO(diff); + return { + diff, + rounded, + qualified, + precise, + abbreviated, + iso, + direction, + } + }; + + //https://www.timeanddate.com/calendar/aboutseasons.html + // Spring - from March 1 to May 31; + // Summer - from June 1 to August 31; + // Fall (autumn) - from September 1 to November 30; and, + // Winter - from December 1 to February 28 (February 29 in a leap year). + const north = [ + ['spring', 2, 1], + ['summer', 5, 1], + ['fall', 8, 1], + ['autumn', 8, 1], + ['winter', 11, 1] //dec 1 + ]; + const south = [ + ['fall', 2, 1], + ['autumn', 2, 1], + ['winter', 5, 1], + ['spring', 8, 1], + ['summer', 11, 1] //dec 1 + ]; + + var seasons$1 = { north, south }; + + var quarters = [ + null, + [0, 1], //jan 1 + [3, 1], //apr 1 + [6, 1], //july 1 + [9, 1] //oct 1 + ]; + + const units$2 = { + second: (s) => { + walkTo(s, { + millisecond: 0 + }); + return s + }, + minute: (s) => { + walkTo(s, { + second: 0, + millisecond: 0 + }); + return s + }, + quarterhour: (s) => { + let minute = s.minutes(); + if (minute >= 45) { + s = s.minutes(45); + } else if (minute >= 30) { + s = s.minutes(30); + } else if (minute >= 15) { + s = s.minutes(15); + } else { + s = s.minutes(0); + } + walkTo(s, { + second: 0, + millisecond: 0 + }); + return s + }, + hour: (s) => { + walkTo(s, { + minute: 0, + second: 0, + millisecond: 0 + }); + return s + }, + day: (s) => { + walkTo(s, { + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + return s + }, + week: (s) => { + let original = s.clone(); + s = s.day(s._weekStart); //monday + if (s.isAfter(original)) { + s = s.subtract(1, 'week'); + } + walkTo(s, { + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + return s + }, + month: (s) => { + walkTo(s, { + date: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + return s + }, + quarter: (s) => { + let q = s.quarter(); + if (quarters[q]) { + walkTo(s, { + month: quarters[q][0], + date: quarters[q][1], + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + } + return s + }, + season: (s) => { + let current = s.season(); + let hem = 'north'; + if (s.hemisphere() === 'South') { + hem = 'south'; + } + for (let i = 0; i < seasons$1[hem].length; i++) { + if (seasons$1[hem][i][0] === current) { + //winter goes between years + let year = s.year(); + if (current === 'winter' && s.month() < 3) { + year -= 1; + } + walkTo(s, { + year, + month: seasons$1[hem][i][1], + date: seasons$1[hem][i][2], + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + return s + } + } + return s + }, + year: (s) => { + walkTo(s, { + month: 0, + date: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + return s + }, + decade: (s) => { + s = s.startOf('year'); + let year = s.year(); + let decade = parseInt(year / 10, 10) * 10; + s = s.year(decade); + return s + }, + century: (s) => { + s = s.startOf('year'); + let year = s.year(); + // near 0AD goes '-1 | +1' + let decade = parseInt(year / 100, 10) * 100; + s = s.year(decade); + return s + } + }; + units$2.date = units$2.day; + + const startOf = (a, unit) => { + let s = a.clone(); + unit = normalize$3(unit); + if (units$2[unit]) { + return units$2[unit](s) + } + if (unit === 'summer' || unit === 'winter') { + s = s.season(unit); + return units$2.season(s) + } + return s + }; + + //piggy-backs off startOf + const endOf = (a, unit) => { + let s = a.clone(); + unit = normalize$3(unit); + if (units$2[unit]) { + // go to beginning, go to next one, step back 1ms + s = units$2[unit](s); // startof + s = s.add(1, unit); + s = s.subtract(1, 'millisecond'); + return s + } + return s + }; + + //is it 'wednesday'? + const isDay = function (unit) { + if (short().find((s) => s === unit)) { + return true + } + if (long().find((s) => s === unit)) { + return true + } + return false + }; + + // return a list of the weeks/months/days between a -> b + // returns spacetime objects in the timezone of the input + const every = function (start, unit, end, stepCount = 1) { + if (!unit || !end) { + return [] + } + //cleanup unit param + unit = normalize$3(unit); + //cleanup to param + end = start.clone().set(end); + //swap them, if they're backwards + if (start.isAfter(end)) { + let tmp = start; + start = end; + end = tmp; + } + //prevent going beyond end if unit/stepCount > than the range + if (start.diff(end, unit) < stepCount) { + return [] + } + //support 'every wednesday' + let d = start.clone(); + if (isDay(unit)) { + d = d.next(unit); + unit = 'week'; + } else { + let first = d.startOf(unit); + if (first.isBefore(start)) { + d = d.next(unit); + } + } + //okay, actually start doing it + let result = []; + while (d.isBefore(end)) { + result.push(d); + d = d.add(stepCount, unit); + } + return result + }; + + /* eslint-disable no-console */ + + const parseDst = dst => { + if (!dst) { + return [] + } + return dst.split('->') + }; + + //iana codes are case-sensitive, technically + const titleCase = str => { + str = str[0].toUpperCase() + str.substr(1); + str = str.replace(/[/_-]([a-z])/gi, s => { + return s.toUpperCase() + }); + str = str.replace(/_(of|es)_/i, (s) => s.toLowerCase()); + str = str.replace(/\/gmt/i, '/GMT'); + str = str.replace(/\/Dumontdurville$/i, '/DumontDUrville'); + str = str.replace(/\/Mcmurdo$/i, '/McMurdo'); + str = str.replace(/\/Port-au-prince$/i, '/Port-au-Prince'); + return str + }; + + //get metadata about this timezone + const timezone = s => { + let zones = s.timezones; + let tz = s.tz; + if (zones.hasOwnProperty(tz) === false) { + tz = lookupTz(s.tz, zones); + } + if (tz === null) { + if (s.silent === false) { + console.warn("Warn: could not find given or local timezone - '" + s.tz + "'"); + } + return { + current: { + epochShift: 0 + } + } + } + let found = zones[tz]; + let result = { + name: titleCase(tz), + hasDst: Boolean(found.dst), + default_offset: found.offset, + //do north-hemisphere version as default (sorry!) + hemisphere: found.hem === 's' ? 'South' : 'North', + current: {} + }; + + if (result.hasDst) { + let arr = parseDst(found.dst); + result.change = { + start: arr[0], + back: arr[1] + }; + } + //find the offsets for summer/winter times + //(these variable names are north-centric) + let summer = found.offset; // (july) + let winter = summer; // (january) assume it's the same for now + if (result.hasDst === true) { + if (result.hemisphere === 'North') { + winter = summer - 1; + } else { + //southern hemisphere + winter = found.offset + 1; + } + } + + //find out which offset to use right now + //use 'summer' time july-time + if (result.hasDst === false) { + result.current.offset = summer; + result.current.isDST = false; + } else if (inSummerTime(s.epoch, result.change.start, result.change.back, summer, winter) === true) { + result.current.offset = summer; + result.current.isDST = result.hemisphere === 'North'; //dst 'on' in winter in north + } else { + //use 'winter' january-time + result.current.offset = winter; + result.current.isDST = result.hemisphere === 'South'; //dst 'on' in summer in south + } + return result + }; + + /* eslint-disable no-console */ + const units$1 = [ + 'century', + 'decade', + 'year', + 'month', + 'date', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond' + ]; + + //the spacetime instance methods (also, the API) + const methods$4 = { + set: function (input, tz) { + let s = this.clone(); + s = parseInput(s, input); + if (tz) { + this.tz = lookupTz(tz); + } + return s + }, + timezone: function () { + return timezone(this) + }, + isDST: function () { + return timezone(this).current.isDST + }, + hasDST: function () { + return timezone(this).hasDst + }, + offset: function () { + return timezone(this).current.offset * 60 + }, + hemisphere: function () { + return timezone(this).hemisphere + }, + format: function (fmt) { + return printFormat(this, fmt) + }, + unixFmt: function (fmt) { + return unixFmt(this, fmt) + }, + startOf: function (unit) { + return startOf(this, unit) + }, + endOf: function (unit) { + return endOf(this, unit) + }, + leapYear: function () { + let year = this.year(); + return isLeapYear(year) + }, + progress: function (unit) { + return progress(this, unit) + }, + nearest: function (unit) { + return nearest(this, unit) + }, + diff: function (d, unit) { + return main$1(this, d, unit) + }, + since: function (d) { + if (!d) { + d = this.clone().set(); + } + return since(this, d) + }, + next: function (unit) { + let s = this.add(1, unit); + return s.startOf(unit) + }, + //the start of the previous year/week/century + last: function (unit) { + let s = this.subtract(1, unit); + return s.startOf(unit) + }, + isValid: function () { + //null/undefined epochs + if (!this.epoch && this.epoch !== 0) { + return false + } + return !isNaN(this.d.getTime()) + }, + //travel to this timezone + goto: function (tz) { + let s = this.clone(); + s.tz = lookupTz(tz, s.timezones); //science! + return s + }, + //get each week/month/day between a -> b + every: function (unit, to, stepCount) { + // allow swapping these params: + if (typeof unit === 'object' && typeof to === 'string') { + let tmp = to; + to = unit; + unit = tmp; + } + return every(this, unit, to, stepCount) + }, + isAwake: function () { + let hour = this.hour(); + //10pm -> 8am + if (hour < 8 || hour > 22) { + return false + } + return true + }, + isAsleep: function () { + return !this.isAwake() + }, + daysInMonth: function () { + switch (this.month()) { + case 0: + return 31 + case 1: + return this.leapYear() ? 29 : 28 + case 2: + return 31 + case 3: + return 30 + case 4: + return 31 + case 5: + return 30 + case 6: + return 31 + case 7: + return 31 + case 8: + return 30 + case 9: + return 31 + case 10: + return 30 + case 11: + return 31 + default: + throw new Error('Invalid Month state.') + } + }, + //pretty-printing + log: function () { + console.log(''); + console.log(printFormat(this, 'nice-short')); + return this + }, + logYear: function () { + console.log(''); + console.log(printFormat(this, 'full-short')); + return this + }, + json: function () { + return units$1.reduce((h, unit) => { + h[unit] = this[unit](); + return h + }, {}) + }, + debug: function () { + let tz = this.timezone(); + let date = this.format('MM') + ' ' + this.format('date-ordinal') + ' ' + this.year(); + date += '\n - ' + this.format('time'); + console.log('\n\n', date + '\n - ' + tz.name + ' (' + tz.current.offset + ')'); + return this + }, + //alias of 'since' but opposite - like moment.js + from: function (d) { + d = this.clone().set(d); + return d.since(this) + }, + fromNow: function () { + let d = this.clone().set(Date.now()); + return d.since(this) + }, + weekStart: function (input) { + //accept a number directly + if (typeof input === 'number') { + this._weekStart = input; + return this + } + if (typeof input === 'string') { + // accept 'wednesday' + input = input.toLowerCase().trim(); + let num = short().indexOf(input); + if (num === -1) { + num = long().indexOf(input); + } + if (num === -1) { + num = 1; //go back to default + } + this._weekStart = num; + } else { + console.warn('Spacetime Error: Cannot understand .weekStart() input:', input); + } + return this + } + }; + // aliases + methods$4.inDST = methods$4.isDST; + methods$4.round = methods$4.nearest; + methods$4.each = methods$4.every; + + // javascript setX methods like setDate() can't be used because of the local bias + //these methods wrap around them. + + const validate = (n) => { + //handle number as a string + if (typeof n === 'string') { + n = parseInt(n, 10); + } + return n + }; + + const order$1 = ['year', 'month', 'date', 'hour', 'minute', 'second', 'millisecond']; + + //reduce hostile micro-changes when moving dates by millisecond + const confirm = (s, tmp, unit) => { + let n = order$1.indexOf(unit); + let arr = order$1.slice(n, order$1.length); + for (let i = 0; i < arr.length; i++) { + let want = tmp[arr[i]](); + s[arr[i]](want); + } + return s + }; + + // allow specifying setter direction + const fwdBkwd = function (s, old, goFwd, unit) { + if (goFwd === true && s.isBefore(old)) { + s = s.add(1, unit); + } else if (goFwd === false && s.isAfter(old)) { + s = s.minus(1, unit); + } + return s + }; + + const milliseconds = function (s, n) { + n = validate(n); + let current = s.millisecond(); + let diff = current - n; //milliseconds to shift by + return s.epoch - diff + }; + + const seconds = function (s, n, goFwd) { + n = validate(n); + let old = s.clone(); + let diff = s.second() - n; + let shift = diff * o.second; + s.epoch = s.epoch - shift; + s = fwdBkwd(s, old, goFwd, 'minute'); // specify direction + return s.epoch + }; + + const minutes = function (s, n, goFwd) { + n = validate(n); + let old = s.clone(); + let diff = s.minute() - n; + let shift = diff * o.minute; + s.epoch -= shift; + confirm(s, old, 'second'); + s = fwdBkwd(s, old, goFwd, 'hour'); // specify direction + return s.epoch + }; + + const hours = function (s, n, goFwd) { + n = validate(n); + if (n >= 24) { + n = 24; + } else if (n < 0) { + n = 0; + } + let old = s.clone(); + let diff = s.hour() - n; + let shift = diff * o.hour; + s.epoch -= shift; + // oops, did we change the day? + if (s.date() !== old.date()) { + s = old.clone(); + if (diff > 1) { + diff -= 1; + } + if (diff < 1) { + diff += 1; + } + shift = diff * o.hour; + s.epoch -= shift; + } + walkTo(s, { + hour: n + }); + confirm(s, old, 'minute'); + s = fwdBkwd(s, old, goFwd, 'day'); // specify direction + return s.epoch + }; + + const time = function (s, str, goFwd) { + let m = str.match(/([0-9]{1,2})[:h]([0-9]{1,2})(:[0-9]{1,2})? ?(am|pm)?/); + if (!m) { + //fallback to support just '2am' + m = str.match(/([0-9]{1,2}) ?(am|pm)/); + if (!m) { + return s.epoch + } + m.splice(2, 0, '0'); //add implicit 0 minutes + m.splice(3, 0, ''); //add implicit seconds + } + let h24 = false; + let hour = parseInt(m[1], 10); + let minute = parseInt(m[2], 10); + if (minute >= 60) { + minute = 59; + } + if (hour > 12) { + h24 = true; + } + //make the hour into proper 24h time + if (h24 === false) { + if (m[4] === 'am' && hour === 12) { + //12am is midnight + hour = 0; + } + if (m[4] === 'pm' && hour < 12) { + //12pm is noon + hour += 12; + } + } + // handle seconds + m[3] = m[3] || ''; + m[3] = m[3].replace(/:/, ''); + let sec = parseInt(m[3], 10) || 0; + let old = s.clone(); + s = s.hour(hour); + s = s.minute(minute); + s = s.second(sec); + s = s.millisecond(0); + s = fwdBkwd(s, old, goFwd, 'day'); // specify direction + return s.epoch + }; + + const date = function (s, n, goFwd) { + n = validate(n); + //avoid setting february 31st + if (n > 28) { + let month = s.month(); + let max = monthLengths[month]; + // support leap day in february + if (month === 1 && n === 29 && isLeapYear(s.year())) { + max = 29; + } + if (n > max) { + n = max; + } + } + //avoid setting < 0 + if (n <= 0) { + n = 1; + } + let old = s.clone(); + walkTo(s, { + date: n + }); + s = fwdBkwd(s, old, goFwd, 'month'); // specify direction + return s.epoch + }; + + const month = function (s, n, goFwd) { + if (typeof n === 'string') { + if (n === 'sept') { + n = 'sep'; + } + n = mapping$3()[n.toLowerCase()]; + } + n = validate(n); + //don't go past december + if (n >= 12) { + n = 11; + } + if (n <= 0) { + n = 0; + } + + let d = s.date(); + //there's no 30th of february, etc. + if (d > monthLengths[n]) { + //make it as close as we can.. + d = monthLengths[n]; + } + let old = s.clone(); + walkTo(s, { + month: n, + d + }); + s = fwdBkwd(s, old, goFwd, 'year'); // specify direction + return s.epoch + }; + + const year = function (s, n) { + // support '97 + if (typeof n === 'string' && /^'[0-9]{2}$/.test(n)) { + n = n.replace(/'/, '').trim(); + n = Number(n); + // '89 is 1989 + if (n > 30) { + //change this in 10y + n = 1900 + n; + } else { + // '12 is 2012 + n = 2000 + n; + } + } + n = validate(n); + walkTo(s, { + year: n + }); + return s.epoch + }; + + const week = function (s, n, goFwd) { + let old = s.clone(); + n = validate(n); + s = s.month(0); + s = s.date(1); + s = s.day('monday'); + //first week starts first Thurs in Jan + // so mon dec 28th is 1st week + // so mon dec 29th is not the week + if (s.monthName() === 'december' && s.date() >= 28) { + s = s.add(1, 'week'); + } + n -= 1; //1-based + s = s.add(n, 'weeks'); + s = fwdBkwd(s, old, goFwd, 'year'); // specify direction + return s.epoch + }; + + const dayOfYear = function (s, n, goFwd) { + n = validate(n); + let old = s.clone(); + n -= 1; //days are 1-based + if (n <= 0) { + n = 0; + } else if (n >= 365) { + if (isLeapYear(s.year())) { + n = 365; + } else { + n = 364; + } + } + s = s.startOf('year'); + s = s.add(n, 'day'); + confirm(s, old, 'hour'); + s = fwdBkwd(s, old, goFwd, 'year'); // specify direction + return s.epoch + }; + + let morning = 'am'; + let evening = 'pm'; + + function am() { return morning } + function pm() { return evening } + function set(i18n) { + morning = i18n.am || morning; + evening = i18n.pm || evening; + } + + const methods$3 = { + millisecond: function (num) { + if (num !== undefined) { + let s = this.clone(); + s.epoch = milliseconds(s, num); + return s + } + return this.d.getMilliseconds() + }, + second: function (num, goFwd) { + if (num !== undefined) { + let s = this.clone(); + s.epoch = seconds(s, num, goFwd); + return s + } + return this.d.getSeconds() + }, + minute: function (num, goFwd) { + if (num !== undefined) { + let s = this.clone(); + s.epoch = minutes(s, num, goFwd); + return s + } + return this.d.getMinutes() + }, + hour: function (num, goFwd) { + let d = this.d; + if (num !== undefined) { + let s = this.clone(); + s.epoch = hours(s, num, goFwd); + return s + } + return d.getHours() + }, + + //'3:30' is 3.5 + hourFloat: function (num, goFwd) { + if (num !== undefined) { + let s = this.clone(); + let minute = num % 1; + minute = minute * 60; + let hour = parseInt(num, 10); + s.epoch = hours(s, hour, goFwd); + s.epoch = minutes(s, minute, goFwd); + return s + } + let d = this.d; + let hour = d.getHours(); + let minute = d.getMinutes(); + minute = minute / 60; + return hour + minute + }, + + // hour in 12h format + hour12: function (str, goFwd) { + let d = this.d; + if (str !== undefined) { + let s = this.clone(); + str = '' + str; + let m = str.match(/^([0-9]+)(am|pm)$/); + if (m) { + let hour = parseInt(m[1], 10); + if (m[2] === 'pm') { + hour += 12; + } + s.epoch = hours(s, hour, goFwd); + } + return s + } + //get the hour + let hour12 = d.getHours(); + if (hour12 > 12) { + hour12 = hour12 - 12; + } + if (hour12 === 0) { + hour12 = 12; + } + return hour12 + }, + + //some ambiguity here with 12/24h + time: function (str, goFwd) { + if (str !== undefined) { + let s = this.clone(); + str = str.toLowerCase().trim(); + s.epoch = time(s, str, goFwd); + return s + } + return `${this.h12()}:${zeroPad(this.minute())}${this.ampm()}` + }, + + // either 'am' or 'pm' + ampm: function (input, goFwd) { + // let which = 'am' + let which = am(); + let hour = this.hour(); + if (hour >= 12) { + // which = 'pm' + which = pm(); + } + if (typeof input !== 'string') { + return which + } + //okay, we're doing a setter + let s = this.clone(); + input = input.toLowerCase().trim(); + //ampm should never change the day + // - so use `.hour(n)` instead of `.minus(12,'hour')` + if (hour >= 12 && input === 'am') { + //noon is 12pm + hour -= 12; + return s.hour(hour, goFwd) + } + if (hour < 12 && input === 'pm') { + hour += 12; + return s.hour(hour, goFwd) + } + return s + }, + + //some hard-coded times of day, like 'noon' + dayTime: function (str, goFwd) { + if (str !== undefined) { + const times = { + morning: '7:00', + breakfast: '7:00', + noon: '12:00', + lunch: '12:00', + afternoon: '14:00', + evening: '18:00', + dinner: '18:00', + night: '23:00', + midnight: '00:00' + }; + let s = this.clone(); + str = str || ''; + str = str.toLowerCase(); + if (times.hasOwnProperty(str) === true) { + s = s.time(times[str], goFwd); + } + return s + } + let h = this.hour(); + if (h < 6) { + return 'night' + } + if (h < 12) { + //until noon + return 'morning' + } + if (h < 17) { + //until 5pm + return 'afternoon' + } + if (h < 22) { + //until 10pm + return 'evening' + } + return 'night' + }, + + //parse a proper iso string + iso: function (num) { + if (num !== undefined) { + return this.set(num) + } + return this.format('iso') + } + }; + + const methods$2 = { + // # day in the month + date: function (num, goFwd) { + if (num !== undefined) { + let s = this.clone(); + num = parseInt(num, 10); + if (num) { + s.epoch = date(s, num, goFwd); + } + return s + } + return this.d.getDate() + }, + + //like 'wednesday' (hard!) + day: function (input, goFwd) { + if (input === undefined) { + return this.d.getDay() + } + let original = this.clone(); + let want = input; + // accept 'wednesday' + if (typeof input === 'string') { + input = input.toLowerCase(); + if (aliases$1.hasOwnProperty(input)) { + want = aliases$1[input]; + } else { + want = short().indexOf(input); + if (want === -1) { + want = long().indexOf(input); + } + } + } + //move approx + let day = this.d.getDay(); + let diff = day - want; + if (goFwd === true && diff > 0) { + diff = diff - 7; + } + if (goFwd === false && diff < 0) { + diff = diff + 7; + } + let s = this.subtract(diff, 'days'); + //tighten it back up + walkTo(s, { + hour: original.hour(), + minute: original.minute(), + second: original.second() + }); + return s + }, + + //these are helpful name-wrappers + dayName: function (input, goFwd) { + if (input === undefined) { + return long()[this.day()] + } + let s = this.clone(); + s = s.day(input, goFwd); + return s + } + }; + + /* eslint-disable no-console */ + + const clearMinutes = (s) => { + s = s.minute(0); + s = s.second(0); + s = s.millisecond(1); + return s + }; + + const methods$1 = { + // day 0-366 + dayOfYear: function (num, goFwd) { + if (num !== undefined) { + let s = this.clone(); + s.epoch = dayOfYear(s, num, goFwd); + return s + } + //days since newyears - jan 1st is 1, jan 2nd is 2... + let sum = 0; + let month = this.d.getMonth(); + let tmp; + //count the num days in each month + for (let i = 1; i <= month; i++) { + tmp = new Date(); + tmp.setDate(1); + tmp.setFullYear(this.d.getFullYear()); //the year matters, because leap-years + tmp.setHours(1); + tmp.setMinutes(1); + tmp.setMonth(i); + tmp.setHours(-2); //the last day of the month + sum += tmp.getDate(); + } + return sum + this.d.getDate() + }, + + //since the start of the year + week: function (num, goFwd) { + // week-setter + if (num !== undefined) { + let s = this.clone(); + s.epoch = week(this, num, goFwd); + s = clearMinutes(s); + return s + } + //find-out which week it is + let tmp = this.clone(); + tmp = tmp.month(0); + tmp = tmp.date(1); + tmp = clearMinutes(tmp); + tmp = tmp.day('monday'); + //don't go into last-year + if (tmp.month() === 11 && tmp.date() >= 25) { + tmp = tmp.add(1, 'week'); + } + + // is first monday the 1st? + let toAdd = 1; + if (tmp.date() === 1) { + toAdd = 0; + } + tmp = tmp.minus(2, 'hours'); + const thisOne = this.epoch; + //if the week technically hasn't started yet + if (tmp.epoch > thisOne) { + return 1 + } + //speed it up, if we can + let i = 0; + let skipWeeks = this.month() * 4; + tmp.epoch += o.week * skipWeeks; + i += skipWeeks; + for (; i <= 52; i++) { + if (tmp.epoch > thisOne) { + return i + toAdd + } + tmp = tmp.add(1, 'week'); + } + return 52 + }, + //either name or number + month: function (input, goFwd) { + if (input !== undefined) { + let s = this.clone(); + s.epoch = month(s, input, goFwd); + return s + } + return this.d.getMonth() + }, + //'january' + monthName: function (input, goFwd) { + if (input !== undefined) { + let s = this.clone(); + s = s.month(input, goFwd); + return s + } + return long$1()[this.month()] + }, + + //q1, q2, q3, q4 + quarter: function (num, goFwd) { + if (num !== undefined) { + if (typeof num === 'string') { + num = num.replace(/^q/i, ''); + num = parseInt(num, 10); + } + if (quarters[num]) { + let s = this.clone(); + let month = quarters[num][0]; + s = s.month(month, goFwd); + s = s.date(1, goFwd); + s = s.startOf('day'); + return s + } + } + let month = this.d.getMonth(); + for (let i = 1; i < quarters.length; i++) { + if (month < quarters[i][0]) { + return i - 1 + } + } + return 4 + }, + + //spring, summer, winter, fall + season: function (input, goFwd) { + let hem = 'north'; + if (this.hemisphere() === 'South') { + hem = 'south'; + } + if (input !== undefined) { // setter + let s = this.clone(); + for (let i = 0; i < seasons$1[hem].length; i++) { + if (input === seasons$1[hem][i][0]) { + s = s.month(seasons$1[hem][i][1], goFwd); + s = s.date(1); + s = s.startOf('day'); + } + } + return s + } + let month = this.d.getMonth(); + for (let i = 0; i < seasons$1[hem].length - 1; i++) { + if (month >= seasons$1[hem][i][1] && month < seasons$1[hem][i + 1][1]) { + return seasons$1[hem][i][0] + } + } + return hem === 'north' ? 'winter' : 'summer' + }, + + //the year number + year: function (num) { + if (num !== undefined) { + let s = this.clone(); + s.epoch = year(s, num); + return s + } + return this.d.getFullYear() + }, + + //bc/ad years + era: function (str) { + if (str !== undefined) { + let s = this.clone(); + str = str.toLowerCase(); + //TODO: there is no year-0AD i think. may have off-by-1 error here + let year$1 = s.d.getFullYear(); + //make '1992' into 1992bc.. + if (str === 'bc' && year$1 > 0) { + s.epoch = year(s, year$1 * -1); + } + //make '1992bc' into '1992' + if (str === 'ad' && year$1 < 0) { + s.epoch = year(s, year$1 * -1); + } + return s + } + if (this.d.getFullYear() < 0) { + return 'BC' + } + return 'AD' + }, + + // 2019 -> 2010 + decade: function (input) { + if (input !== undefined) { + input = String(input); + input = input.replace(/([0-9])'?s$/, '$1'); //1950's + input = input.replace(/([0-9])(th|rd|st|nd)/, '$1'); //fix ordinals + if (!input) { + console.warn('Spacetime: Invalid decade input'); + return this + } + // assume 20th century?? for '70s'. + if (input.length === 2 && /[0-9][0-9]/.test(input)) { + input = '19' + input; + } + let year = Number(input); + if (isNaN(year)) { + return this + } + // round it down to the decade + year = Math.floor(year / 10) * 10; + return this.year(year) //.startOf('decade') + } + return this.startOf('decade').year() + }, + // 1950 -> 19+1 + century: function (input) { + if (input !== undefined) { + if (typeof input === 'string') { + input = input.replace(/([0-9])(th|rd|st|nd)/, '$1'); //fix ordinals + input = input.replace(/([0-9]+) ?(b\.?c\.?|a\.?d\.?)/i, (a, b, c) => { + if (c.match(/b\.?c\.?/i)) { + b = '-' + b; + } + return b + }); + input = input.replace(/c$/, ''); //20thC + } + let year = Number(input); + if (isNaN(input)) { + console.warn('Spacetime: Invalid century input'); + return this + } + // there is no century 0 + if (year === 0) { + year = 1; + } + if (year >= 0) { + year = (year - 1) * 100; + } else { + year = (year + 1) * 100; + } + return this.year(year) + } + // century getter + let num = this.startOf('century').year(); + num = Math.floor(num / 100); + if (num < 0) { + return num - 1 + } + return num + 1 + }, + // 2019 -> 2+1 + millenium: function (input) { + if (input !== undefined) { + if (typeof input === 'string') { + input = input.replace(/([0-9])(th|rd|st|nd)/, '$1'); //fix ordinals + input = Number(input); + if (isNaN(input)) { + console.warn('Spacetime: Invalid millenium input'); + return this + } + } + if (input > 0) { + input -= 1; + } + let year = input * 1000; + // there is no year 0 + if (year === 0) { + year = 1; + } + return this.year(year) + } + // get the current millenium + let num = Math.floor(this.year() / 1000); + if (num >= 0) { + num += 1; + } + return num + } + }; + + const methods = Object.assign({}, methods$3, methods$2, methods$1); + + //aliases + methods.milliseconds = methods.millisecond; + methods.seconds = methods.second; + methods.minutes = methods.minute; + methods.hours = methods.hour; + methods.hour24 = methods.hour; + methods.h12 = methods.hour12; + methods.h24 = methods.hour24; + methods.days = methods.day; + + const addMethods$4 = Space => { + //hook the methods into prototype + Object.keys(methods).forEach(k => { + Space.prototype[k] = methods[k]; + }); + }; + + const getMonthLength = function (month, year) { + if (month === 1 && isLeapYear(year)) { + return 29 + } + return monthLengths[month] + }; + + //month is the one thing we 'model/compute' + //- because ms-shifting can be off by enough + const rollMonth = (want, old) => { + //increment year + if (want.month > 0) { + let years = parseInt(want.month / 12, 10); + want.year = old.year() + years; + want.month = want.month % 12; + } else if (want.month < 0) { + let m = Math.abs(want.month); + let years = parseInt(m / 12, 10); + if (m % 12 !== 0) { + years += 1; + } + want.year = old.year() - years; + //ignore extras + want.month = want.month % 12; + want.month = want.month + 12; + if (want.month === 12) { + want.month = 0; + } + } + return want + }; + + // briefly support day=-2 (this does not need to be perfect.) + const rollDaysDown = (want, old, sum) => { + want.year = old.year(); + want.month = old.month(); + let date = old.date(); + want.date = date - Math.abs(sum); + while (want.date < 1) { + want.month -= 1; + if (want.month < 0) { + want.month = 11; + want.year -= 1; + } + let max = getMonthLength(want.month, want.year); + want.date += max; + } + return want + }; + + // briefly support day=33 (this does not need to be perfect.) + const rollDaysUp = (want, old, sum) => { + let year = old.year(); + let month = old.month(); + let max = getMonthLength(month, year); + while (sum > max) { + sum -= max; + month += 1; + if (month >= 12) { + month -= 12; + year += 1; + } + max = getMonthLength(month, year); + } + want.month = month; + want.date = sum; + return want + }; + + const months = rollMonth; + const days = rollDaysUp; + const daysBack = rollDaysDown; + + // this logic is a bit of a mess, + // but briefly: + // millisecond-math, and some post-processing covers most-things + // we 'model' the calendar here only a little bit + // and that usually works-out... + + const order = ['millisecond', 'second', 'minute', 'hour', 'date', 'month']; + let keep = { + second: order.slice(0, 1), + minute: order.slice(0, 2), + quarterhour: order.slice(0, 2), + hour: order.slice(0, 3), + date: order.slice(0, 4), + month: order.slice(0, 4), + quarter: order.slice(0, 4), + season: order.slice(0, 4), + year: order, + decade: order, + century: order + }; + keep.week = keep.hour; + keep.season = keep.date; + keep.quarter = keep.date; + + // Units need to be dst adjuested + const dstAwareUnits = { + year: true, + quarter: true, + season: true, + month: true, + week: true, + date: true + }; + + const keepDate = { + month: true, + quarter: true, + season: true, + year: true + }; + + const addMethods$3 = (SpaceTime) => { + SpaceTime.prototype.add = function (num, unit) { + let s = this.clone(); + + if (!unit || num === 0) { + return s //don't bother + } + let old = this.clone(); + unit = normalize$3(unit); + if (unit === 'millisecond') { + s.epoch += num; + return s + } + // support 'fortnight' alias + if (unit === 'fortnight') { + num *= 2; + unit = 'week'; + } + //move forward by the estimated milliseconds (rough) + if (o[unit]) { + s.epoch += o[unit] * num; + } else if (unit === 'week' || unit === 'weekend') { + s.epoch += o.day * (num * 7); + } else if (unit === 'quarter' || unit === 'season') { + s.epoch += o.month * (num * 3); + } else if (unit === 'quarterhour') { + s.epoch += o.minute * 15 * num; + } + //now ensure our milliseconds/etc are in-line + let want = {}; + if (keep[unit]) { + keep[unit].forEach((u) => { + want[u] = old[u](); + }); + } + + if (dstAwareUnits[unit]) { + const diff = old.timezone().current.offset - s.timezone().current.offset; + s.epoch += diff * 3600 * 1000; + } + + //ensure month/year has ticked-over + if (unit === 'month') { + want.month = old.month() + num; + //month is the one unit we 'model' directly + want = months(want, old); + } + //support coercing a week, too + if (unit === 'week') { + let sum = old.date() + (num * 7); + if (sum <= 28 && sum > 1) { + want.date = sum; + } + } + if (unit === 'weekend' && s.dayName() !== 'saturday') { + s = s.day('saturday', true); //ensure it's saturday + } + //support 25-hour day-changes on dst-changes + else if (unit === 'date') { + if (num < 0) { + want = daysBack(want, old, num); + } else { + //specify a naive date number, if it's easy to do... + let sum = old.date() + num; + // ok, model this one too + want = days(want, old, sum); + } + //manually punt it if we haven't moved at all.. + if (num !== 0 && old.isSame(s, 'day')) { + want.date = old.date() + num; + } + } + // ensure a quarter is 3 months over + else if (unit === 'quarter') { + want.month = old.month() + (num * 3); + want.year = old.year(); + // handle rollover + if (want.month < 0) { + let years = Math.floor(want.month / 12); + let remainder = want.month + (Math.abs(years) * 12); + want.month = remainder; + want.year += years; + } else if (want.month >= 12) { + let years = Math.floor(want.month / 12); + want.month = want.month % 12; + want.year += years; + } + want.date = old.date(); + } + //ensure year has changed (leap-years) + else if (unit === 'year') { + let wantYear = old.year() + num; + let haveYear = s.year(); + if (haveYear < wantYear) { + let toAdd = Math.floor(num / 4) || 1; //approx num of leap-days + s.epoch += Math.abs(o.day * toAdd); + } else if (haveYear > wantYear) { + let toAdd = Math.floor(num / 4) || 1; //approx num of leap-days + s.epoch += o.day * toAdd; + } + } + //these are easier + else if (unit === 'decade') { + want.year = s.year() + 10; + } else if (unit === 'century') { + want.year = s.year() + 100; + } + //keep current date, unless the month doesn't have it. + if (keepDate[unit]) { + let max = monthLengths[want.month]; + want.date = old.date(); + if (want.date > max) { + want.date = max; + } + } + if (Object.keys(want).length > 1) { + walkTo(s, want); + } + return s + }; + + //subtract is only add *-1 + SpaceTime.prototype.subtract = function (num, unit) { + let s = this.clone(); + return s.add(num * -1, unit) + }; + //add aliases + SpaceTime.prototype.minus = SpaceTime.prototype.subtract; + SpaceTime.prototype.plus = SpaceTime.prototype.add; + }; + + //make a string, for easy comparison between dates + const print = { + millisecond: (s) => { + return s.epoch + }, + second: (s) => { + return [s.year(), s.month(), s.date(), s.hour(), s.minute(), s.second()].join('-') + }, + minute: (s) => { + return [s.year(), s.month(), s.date(), s.hour(), s.minute()].join('-') + }, + hour: (s) => { + return [s.year(), s.month(), s.date(), s.hour()].join('-') + }, + day: (s) => { + return [s.year(), s.month(), s.date()].join('-') + }, + week: (s) => { + return [s.year(), s.week()].join('-') + }, + month: (s) => { + return [s.year(), s.month()].join('-') + }, + quarter: (s) => { + return [s.year(), s.quarter()].join('-') + }, + year: (s) => { + return s.year() + } + }; + print.date = print.day; + + const addMethods$2 = (SpaceTime) => { + SpaceTime.prototype.isSame = function (b, unit, tzAware = true) { + let a = this; + if (!unit) { + return null + } + // support swapped params + if (typeof b === 'string' && typeof unit === 'object') { + let tmp = b; + b = unit; + unit = tmp; + } + if (typeof b === 'string' || typeof b === 'number') { + b = new SpaceTime(b, this.timezone.name); + } + //support 'seconds' aswell as 'second' + unit = unit.replace(/s$/, ''); + + // make them the same timezone for proper comparison + if (tzAware === true && a.tz !== b.tz) { + b = b.clone(); + b.tz = a.tz; + } + if (print[unit]) { + return print[unit](a) === print[unit](b) + } + return null + }; + }; + + const addMethods$1 = SpaceTime => { + const methods = { + isAfter: function (d) { + d = beADate(d, this); + let epoch = getEpoch(d); + if (epoch === null) { + return null + } + return this.epoch > epoch + }, + isBefore: function (d) { + d = beADate(d, this); + let epoch = getEpoch(d); + if (epoch === null) { + return null + } + return this.epoch < epoch + }, + isEqual: function (d) { + d = beADate(d, this); + let epoch = getEpoch(d); + if (epoch === null) { + return null + } + return this.epoch === epoch + }, + isBetween: function (start, end, isInclusive = false) { + start = beADate(start, this); + end = beADate(end, this); + let startEpoch = getEpoch(start); + if (startEpoch === null) { + return null + } + let endEpoch = getEpoch(end); + if (endEpoch === null) { + return null + } + if (isInclusive) { + return this.isBetween(start, end) || this.isEqual(start) || this.isEqual(end); + } + return startEpoch < this.epoch && this.epoch < endEpoch + } + }; + + //hook them into proto + Object.keys(methods).forEach(k => { + SpaceTime.prototype[k] = methods[k]; + }); + }; + + const addMethods = SpaceTime => { + const methods = { + i18n: function (data) { + //change the day names + if (isObject(data.days)) { + set$4(data.days); + } + //change the month names + if (isObject(data.months)) { + set$5(data.months); + } + + //change the display style of the month / day names + if (isBoolean(data.useTitleCase)) { + set$3(data.useTitleCase); + } + + //change am and pm strings + if (isObject(data.ampm)) { + set(data.ampm); + } + + //change distance strings + if(isObject(data.distance)){ + set$1(data.distance); + } + + //change units strings + if(isObject(data.units)){ + set$2(data.units); + } + + return this + } + }; + + //hook them into proto + Object.keys(methods).forEach(k => { + SpaceTime.prototype[k] = methods[k]; + }); + }; + + let timezones$1 = all; + // fake timezone-support, for fakers (es5 class) + const SpaceTime = function (input, tz, options = {}) { + // the holy moment + this.epoch = null; + // the shift for the given timezone + this.tz = lookupTz(tz, timezones$1); + // whether to output warnings to console + this.silent = typeof options.silent !== 'undefined' ? options.silent : true; + // favour british interpretation of 02/02/2018, etc + this.british = options.dmy || options.british; + + // does the week start on sunday, or monday: + this._weekStart = 1; // default to monday + if (options.weekStart !== undefined) { + this._weekStart = options.weekStart; + } + // the reference today date object, (for testing) + this._today = {}; + if (options.today !== undefined) { + this._today = options.today; + } + // dunno if this is a good idea, or not + // Object.defineProperty(this, 'parsers', { + // enumerable: false, + // writable: true, + // value: parsers + // }) + // add getter/setters + Object.defineProperty(this, 'd', { + // return a js date object + get: function () { + let offset = quickOffset(this); + // every computer is somewhere- get this computer's built-in offset + let bias = new Date(this.epoch).getTimezoneOffset() || 0; + // movement + let shift = bias + (offset * 60); //in minutes + shift = shift * 60 * 1000; //in ms + // remove this computer's offset + let epoch = this.epoch + shift; + let d = new Date(epoch); + return d + } + }); + // add this data on the object, to allow adding new timezones + Object.defineProperty(this, 'timezones', { + get: () => timezones$1, + set: (obj) => { + timezones$1 = obj; + return obj + } + }); + // parse the various formats + let tmp = parseInput(this, input); + this.epoch = tmp.epoch; + if (tmp.tz) { + this.tz = tmp.tz; + } + }; + + // (add instance methods to prototype) + Object.keys(methods$4).forEach((k) => { + SpaceTime.prototype[k] = methods$4[k]; + }); + + // ¯\_(ツ)_/¯ + SpaceTime.prototype.clone = function () { + return new SpaceTime(this.epoch, this.tz, { + silent: this.silent, + weekStart: this._weekStart, + today: this._today, + parsers: this.parsers + }) + }; + + /** + * @deprecated use toNativeDate() + * @returns native date object at the same epoch + */ + SpaceTime.prototype.toLocalDate = function () { + return this.toNativeDate() + }; + + /** + * @returns native date object at the same epoch + */ + SpaceTime.prototype.toNativeDate = function () { + return new Date(this.epoch) + }; + + // append more methods + addMethods$4(SpaceTime); + addMethods$3(SpaceTime); + addMethods$2(SpaceTime); + addMethods$1(SpaceTime); + addMethods(SpaceTime); + + // const timezones = require('../data'); + + const whereIts = (a, b) => { + let start = new SpaceTime(null); + let end = new SpaceTime(null); + start = start.time(a); + //if b is undefined, use as 'within one hour' + if (b) { + end = end.time(b); + } else { + end = start.add(59, 'minutes'); + } + + let startHour = start.hour(); + let endHour = end.hour(); + let tzs = Object.keys(start.timezones).filter((tz) => { + if (tz.indexOf('/') === -1) { + return false + } + let m = new SpaceTime(null, tz); + let hour = m.hour(); + //do 'calendar-compare' not real-time-compare + if (hour >= startHour && hour <= endHour) { + //test minutes too, if applicable + if (hour === startHour && m.minute() < start.minute()) { + return false + } + if (hour === endHour && m.minute() > end.minute()) { + return false + } + return true + } + return false + }); + return tzs + }; + + var version$1 = '7.7.0'; + + const main = (input, tz, options) => new SpaceTime(input, tz, options); + + // set all properties of a given 'today' object + const setToday = function (s) { + let today = s._today || {}; + Object.keys(today).forEach((k) => { + s = s[k](today[k]); + }); + return s + }; + + //some helper functions on the main method + main.now = (tz, options) => { + let s = new SpaceTime(new Date().getTime(), tz, options); + s = setToday(s); + return s + }; + main.today = (tz, options) => { + let s = new SpaceTime(new Date().getTime(), tz, options); + s = setToday(s); + return s.startOf('day') + }; + main.tomorrow = (tz, options) => { + let s = new SpaceTime(new Date().getTime(), tz, options); + s = setToday(s); + return s.add(1, 'day').startOf('day') + }; + main.yesterday = (tz, options) => { + let s = new SpaceTime(new Date().getTime(), tz, options); + s = setToday(s); + return s.subtract(1, 'day').startOf('day') + }; + main.extend = function (obj = {}) { + Object.keys(obj).forEach((k) => { + SpaceTime.prototype[k] = obj[k]; + }); + return this + }; + main.timezones = function () { + let s = new SpaceTime(); + return s.timezones + }; + main.max = function (tz, options) { + let s = new SpaceTime(null, tz, options); + s.epoch = 8640000000000000; + return s + }; + main.min = function (tz, options) { + let s = new SpaceTime(null, tz, options); + s.epoch = -8640000000000000; + return s + }; + + //find tz by time + main.whereIts = whereIts; + main.version = version$1; + + //aliases: + main.plugin = main.extend; + + // these should be added to model + const hardCoded = { + daybreak: '7:00am', //ergh + breakfast: '8:00am', + morning: '9:00am', + noon: '12:00pm', + midday: '12:00pm', + afternoon: '2:00pm', + lunchtime: '12:00pm', + evening: '6:00pm', + dinnertime: '6:00pm', + night: '8:00pm', + eod: '10:00pm', + midnight: '12:00am', + am: '9:00am', //tomorow am + pm: '5:00pm', + 'early day': '8:00am', + 'late at night': '11:00pm' + }; + const minMap = { + quarter: 15, + half: 30, + }; + + // choose ambiguous ampm + const ampmChooser = function (s) { + let early = s.time('6:00am'); + if (s.isBefore(early)) { + return s.ampm('pm') + } + return s + }; + + // parse 'twenty past 2' + const halfPast = function (m, s) { + let hour = m.match('#Cardinal$'); + let punt = m.not(hour).match('(half|quarter|25|20|15|10|5)'); + // get the mins, and the hour + hour = hour.text('reduced'); + let mins = punt.text('reduced'); + // support 'quarter' + if (minMap.hasOwnProperty(mins)) { + mins = minMap[mins]; + } + let behind = m.has('to'); + // apply it + s = s.hour(hour); + s = s.startOf('hour'); + // assume 'half past 5' is 5pm + if (hour < 6) { + s = s.ampm('pm'); + } + if (behind) { + s = s.subtract(mins, 'minutes'); + } else { + s = s.add(mins, 'minutes'); + } + return s + }; + + const parseTime = function (doc, context) { + let time = doc.match('(at|by|for|before|this|after)? #Time+'); + // get the main part of the time + time = time.not('^(at|by|for|before|this|after)'); + time = time.not('sharp'); + time = time.not('on the dot'); + + let s = main.now(context.timezone); + let now = s.clone(); + // check for known-times (like 'today') + let timeStr = time.not('in? the').text('reduced'); + timeStr = timeStr.replace(/^@/, '');//@4pm + if (hardCoded.hasOwnProperty(timeStr)) { + return { result: hardCoded[timeStr], m: time } + } + // '5 oclock' + let m = time.match('^#Cardinal oclock (am|pm)?'); + if (m.found) { + s = s.hour(m.text('reduced')); + s = s.startOf('hour'); + if (s.isValid() && !s.isEqual(now)) { + let ampm = m.match('(am|pm)'); + if (ampm.found) { + s = s.ampm(ampm.text('reduced')); + } else { + s = ampmChooser(s); + } + return { result: s.time(), m } + } + } + + // 'quarter to two' + m = time.match('(half|quarter|25|20|15|10|5) (past|after|to) #Cardinal'); + if (m.found) { + s = halfPast(m, s); + if (s.isValid() && !s.isEqual(now)) { + // choose ambiguous ampm + s = ampmChooser(s); + return { result: s.time(), m } + } + } + // 'twenty past' + m = time.match('[(half|quarter|25|20|15|10|5)] (past|after)'); + if (m.found) { + let min = m.groups('min').text('reduced'); + let d = main(context.today); + // support 'quarter', etc. + if (minMap.hasOwnProperty(min)) { + min = minMap[min]; + } + d = d.next('hour').startOf('hour').minute(min); + if (d.isValid() && !d.isEqual(now)) { + return { result: d.time(), m } + } + } + // 'ten to' + m = time.match('[(half|quarter|25|20|15|10|5)] to'); + if (m.found) { + let min = m.groups('min').text('reduced'); + let d = main(context.today); + // support 'quarter', etc. + if (minMap.hasOwnProperty(min)) { + min = minMap[min]; + } + d = d.next('hour').startOf('hour').minus(min, 'minutes'); + if (d.isValid() && !d.isEqual(now)) { + return { result: d.time(), m } + } + } + // '4 in the evening' + m = time.match('[