dsh-spell-check 0.0.0-stage → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +125 -2
- package/README.zh-CN.md +110 -0
- package/assets/banner-dark.png +0 -0
- package/assets/banner-light.png +0 -0
- package/assets/icon.png +0 -0
- package/assets/menu.png +0 -0
- package/assets/strip.gif +0 -0
- package/assets/strip.png +0 -0
- package/assets/words.txt +20000 -0
- package/cordis.patch.yml +13 -0
- package/dsh.plugin.json +9 -0
- package/package.json +88 -4
- package/screenshots.json +4 -0
- package/scripts/build-client.mjs +102 -0
- package/scripts/check-styles.mjs +70 -0
- package/scripts/make-banner.py +191 -0
- package/scripts/make-media.py +120 -0
- package/scripts/test-client.mjs +402 -0
- package/scripts/test-engine.mjs +101 -0
- package/scripts/test-host.mjs +82 -0
- package/src/client.js +2327 -0
- package/src/engine.js +981 -0
- package/src/index.js +221 -0
package/src/client.js
ADDED
|
@@ -0,0 +1,2327 @@
|
|
|
1
|
+
window.__ModuleLoader__.load({
|
|
2
|
+
id: "dsh-spell-check",
|
|
3
|
+
factory: (require) => {
|
|
4
|
+
var module = { exports: {} };
|
|
5
|
+
var exports = module.exports;
|
|
6
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
7
|
+
|
|
8
|
+
const React = require("react");
|
|
9
|
+
|
|
10
|
+
/* >>> GENERATED ENGINE BLOCK — run `npm run build`. Do not edit between the markers. >>> */
|
|
11
|
+
|
|
12
|
+
/* The ranked word list, most frequent first. Index is the frequency rank. */
|
|
13
|
+
const WORD_LIST = "the\nand\nof\nto\nin\nthat\nis\nit\nfor\nhe\nwith\nwas\nhis\nas\nsaid\nbe\non\nnot\nbut\nyou\nthis\nfrom\nby\nat\nthey\nhave\nall\nare\nhad\nher\nan\nwhich\none\nhim\nmln\nwill\nor\nshe\nso\ntheir\nthere\nmy\nwere\nwhen\nthem\nvs\nhas\nwould\nup\nno\nme\nwho\nwe\nout\nits\nif\nwhat\ndlrs\nshall\nmore\nabout\nlike\nbeen\ninto\nyear\npct\nfilm\ndo\nman\nsome\nthan\nunto\nlord\ncan\nlt\ntwo\nthen\ncould\ncts\nnow\nafter\nother\ntime\nonly\nyour\nalso\nvery\nany\nfirst\nnew\nnet\ngood\nover\nmay\nthou\neven\nwell\njust\nbefore\nthese\nlast\nsee\ngod\nlittle\nknow\nmade\nmuch\ndid\ndown\nbillion\nmovie\nshould\nbecause\nsuch\nhow\npeople\nmost\nthy\nmake\nday\ncome\nupon\ncompany\ngo\nloss\nour\nway\nus\ngreat\nwhere\nagainst\nthee\nsay\noff\nye\nwhile\nthrough\nevery\ntoo\nget\nhere\nmust\nbeing\nhouse\nworld\nmany\ncame\ntake\nthree\nlong\nown\nold\nnever\nshr\ninc\nmen\nthose\nstill\nlife\ngirl\nback\nbank\ndoes\nyears\nagain\nam\nmight\nlet\nthink\noil\nend\nanother\nbetween\nunder\ndon\nking\nsame\nyet\nwork\nshare\nguy\nboth\nhand\ncorp\naway\nson\nright\ntrade\nthings\nthing\nthough\nwithout\ngive\nwent\nfather\nmarket\nplace\nprofit\nset\nreally\nwhy\never\nchildren\neach\nhimself\ngroup\nhigh\ntold\nput\nstock\nlook\nnothing\nhowever\nsince\nsomething\nshares\ngoing\nwoman\nmr\naround\nqtr\nname\npart\nlove\nisrael\nhead\nstory\nbetter\nland\ndays\nfive\nhath\nper\nseen\ntonnes\nfew\nbest\nthought\ncharacter\nsaw\nhalf\nyoung\nenough\nre\nquite\nfound\nnext\nsaying\nfar\nsales\nmoney\ncalled\nnight\ngovernment\nfind\nmarch\nalways\nrevs\namong\nrate\ndone\nfour\nweek\nprices\noffer\nnor\nalmost\namerican\nonce\nleft\nface\nhome\ncity\nearth\nco\napril\ninterest\neyes\nprice\nopen\nrather\ngiven\nwant\nheard\nbad\nnote\noh\nfull\nduring\nside\nquarter\naction\ntell\nstate\nheart\nmother\ntook\ntoday\nwhite\ntherefore\ncharacters\ndoesn\nsix\njapan\nmrs\nuse\nsoon\ncut\nproduction\nrose\nleast\nhelp\nuntil\nbusiness\ntogether\nwhole\ngot\nbig\nfebruary\nsure\nword\nexpected\nsmall\nreal\nless\npoint\nthus\nsecond\nshow\njanuary\nmonth\nwhom\njohn\nvoice\nrise\ndollar\nbrought\ndeath\ngeneral\nused\nhaving\nexchange\ncommon\ntax\nsea\nseems\nforeign\nscene\nstates\nseemed\nadded\nagreement\nshalt\nblack\ntotal\ncourse\nll\ndavid\nsays\nboy\nfall\nkeep\ninternational\nwife\nboard\nneed\nfamily\nmiss\nmaking\nmakes\nhear\nbring\nwhose\nmind\ngave\nwater\nfact\nwithin\ntimes\nwords\nfell\ncurrent\ncannot\nmajor\nfilms\ndirector\nplot\nlight\nrecord\nhands\nnine\nasked\nmonths\nwest\nperhaps\nearly\nalthough\nlooked\npay\nunited\nincrease\nwar\nmeeting\nlooking\nbehold\nbelieve\nve\nrest\ncountry\nstrong\nkind\nanything\nroom\nline\npresident\ngold\npresent\nround\nalong\ndead\nneither\nabove\nwhether\nseven\nlady\nfriend\nbecome\nltd\nalready\nmorning\ncast\nearlier\nrates\nmine\nfurther\nshort\naccording\ncertain\npower\nbody\nmean\ntaken\nlaw\nclose\nmoment\ntop\nnumber\nlarge\ncall\ndue\nseveral\nthemselves\npossible\nnational\nbegan\ngrowth\nhard\nbuy\npoor\nfire\nscenes\nago\ncase\ndlr\nsir\nofficial\npass\nturned\nchange\nevil\nforth\nindustry\nsent\nship\nheaven\npast\nturn\nfeel\nknew\nwhale\nreason\nherself\neconomic\nprobably\nsouth\nmovies\nyes\ndepartment\nnear\nstood\nsystem\ndoor\nhope\nsaith\nothers\ncomes\nperiod\nbased\nknown\nreport\nsons\nsense\nspeak\nbehind\nspecial\ntrue\noften\ncentral\nhast\nexports\nitself\nstg\neither\nlive\nmatter\nair\nthird\nperformance\nactually\nlater\nfelt\nbrother\nelse\nyork\ncountries\nseem\nindeed\nlot\nwindow\ninstead\noper\norder\nhigher\nreturn\nplan\nfeet\npublic\njesus\nart\nlower\nable\ngone\nlost\nmyself\nunit\nform\nhold\ncried\nsale\ncoming\nlevel\ndifferent\nminutes\nstand\nrun\ncash\nheld\njapanese\ntrying\nbit\nfree\nlow\nwheat\ntill\nsort\nfederal\ngets\nbanks\nblood\nfield\nearnings\nfriends\nbook\ndeal\nschool\neat\nchild\nexport\nagreed\nmeet\nnone\navg\naudience\ncaptain\nrole\nisn\nshrs\nincluding\ncompared\nfine\ncredit\ngoes\nsoul\nstart\ndecember\nleave\npretty\nspirit\nlikely\nlate\nfuture\nofficials\nperson\ntoward\nthine\ndividend\nhundred\nfinancial\nprogram\noffering\neverything\noperations\nplay\nproblem\nmove\nwatch\npolicy\ndidn\nrecent\nhour\nnations\npage\nincludes\nfear\nhuman\nwritten\nalone\ninvestment\ncause\nwrong\nstatement\nec\nyeah\naf\nproducts\ndaughter\nended\ncompanies\ntakes\nsell\nsight\nspokesman\nsources\ngain\nterms\nresult\nwon\ncertainly\nfollowing\nmeans\nplayed\ndevelopment\nimports\nstake\nidea\njob\nservice\neight\nsubject\ngas\nmain\noriginal\nacquisition\nworks\nhappy\nfunny\nbrown\nfinal\nred\nthereof\nanalysts\njack\nquestion\nvalue\nstar\nmths\nliving\ndark\nminister\naverage\ndoing\nthousand\nsave\nreported\nfigures\nwomen\ncapital\nemma\nyesterday\nresults\ntaking\nstop\nsugar\nmusic\ncare\nprior\ntown\nunion\nyen\ntender\nmouth\nremember\nespecially\nten\ntry\nprevious\nanswered\nmoses\nact\nscreen\nchief\nlooks\nground\ncomedy\ndeficit\npeace\nreceived\nstreet\nbeginning\ndebt\npicture\nfirefox\nplans\nworth\nfrench\nparty\njune\ntalk\nbill\nsometimes\ncommission\ninteresting\neffects\nfigure\nlonger\nnon\nproblems\ngetting\nsound\nmembers\nterm\ntowards\neye\nplays\nmarkets\nprivate\nde\naccount\nwanted\nsecurities\nsister\nimportant\njames\ncar\nsets\nfirm\nview\neffect\noffice\nask\nbelow\ncanada\ndemand\nsun\nincreased\nseries\nacross\nacting\ncontinue\ncourt\nimmediately\nchairman\nnorth\nclear\ndomestic\ncurrency\nhistory\njerusalem\nlead\ntalks\ncoffee\nshareholders\ncorn\nfed\nenergy\njudah\ntrading\nholy\nopening\nnature\nscript\ntruth\nwish\ncontrol\nmerger\ndear\nannounced\nwants\nrunning\nseeing\nfight\nreserves\nsupply\nletter\nsold\ndie\nunderstand\ncrude\nanswer\nbid\npassed\ngives\nsupport\nworking\nmiddle\nfood\nexcept\nnice\ndespite\nkept\nhours\ndeep\nenter\nwalk\nready\nbar\nlocal\nnatural\nindustrial\npriest\nannual\nbeyond\nchick\neuropean\nincome\nbear\nassets\nissue\nlines\ncost\nsat\nsituation\nmanner\nentire\nadd\nread\ngrain\nnearly\namerica\neast\nmanager\nopened\nchrist\nforce\nsummer\nsweet\negypt\narea\ncontinued\nhit\nways\nbudget\nhusband\nwall\ngerman\nsurplus\nteen\nfun\ntable\ncell\nsex\ndrop\nnews\ntrust\nexpect\nled\noutput\nsword\ncompletely\neffective\nmanagement\neveryone\nusing\nexample\nbeautiful\nsimply\nactors\nnamed\nmark\nbritish\nending\namount\ninclude\nsees\nanyone\neconomy\nheavy\nbecomes\npreviously\nsingle\ngreen\nwait\ncold\nshows\ncanadian\nperfect\nfruit\noutstanding\nthroughout\nage\nlay\ncosts\ntalking\ndiv\nforward\nwatching\ndrink\nattention\nbroken\nstrange\nbought\nneeds\nkill\nevening\nindustries\nlondon\ncommunity\ndoubt\nbecame\navailable\nstrength\ntwenty\nfast\nhair\nagriculture\nposition\nelinor\ninformation\ncharge\nkey\nowned\nsplit\ncomplete\nraised\nproposed\nnil\nexpects\nsuddenly\nfinally\nsomeone\nwashington\nstars\nchina\nsecretary\nwine\ncities\nloan\nseek\nmarks\nanne\ncouple\nparticularly\nspace\nfarm\nhell\nproducers\nstay\nremain\nsilver\nbattle\nfollowed\npurchase\ngiving\nriver\nfiscal\noperating\nexactly\nfollow\nspake\noffered\nchurch\nconsider\nchance\ndata\nsimple\nclass\nmaster\nstyle\npaid\nfourth\ndealers\nsoviet\nmaybe\nbreak\nformer\nrich\nestimated\nafraid\ngreater\nparticular\nweeks\nreached\nsubsidiary\nfeeling\nmarianne\nsend\ncommittee\nengland\nrising\ntree\npaul\nprovide\nservant\nbed\nnecessary\nbuild\noutside\nbasis\nreceive\nreturned\nflesh\ngulf\nshot\nfront\nfathers\nappear\nsocial\nthinking\ntouch\ntraders\nwonder\nattempt\nacquire\nservants\nparts\nmet\nsin\nwild\npersonal\nwestern\nahab\nbegin\nself\nserious\nplease\nservices\nfinance\neasy\nfaith\nexperience\nlevels\ntype\nactor\nbox\nblue\ndecision\nstarted\nbookmarks\nfair\nsit\nmichael\nplant\npolitical\nstudy\nglory\ncomputer\nenglish\nhollywood\nrobert\nministry\nmoments\nneeded\nbrethren\nholding\nquickly\nimage\nbalance\nhappened\nknows\nchanges\nfirebird\nran\ndirection\nsimilar\nseptember\nvarious\nmeat\nstocks\nboat\nreplied\nslightly\nplaying\nvisit\nwalked\nbrazil\nlives\nreserve\ndifficult\nknowledge\nparis\nsupposed\nassociation\nturns\nwaters\nseason\nwhatever\ntried\ntrouble\nraise\nshowed\ngame\nlength\nsociety\ndog\ninvolved\nproposal\nappeared\ndialogue\nends\nfilled\ngirls\nopec\npiece\npleasure\nbase\nsuppose\nworse\nlatest\nsmith\nsystems\nallow\nreview\nhorror\npray\nroad\nstone\ntrain\ndecided\npolice\npurpose\nbuilding\nmember\ntreasury\nbegins\ndate\npaper\npeter\npoints\nslow\nhardly\nisland\nsearch\nappears\nareas\nbread\nmaterial\ncarried\ngoods\nhot\njoy\nstraight\nforecast\nsecret\nborn\nmary\nmenu\ntrees\nturnbull\nplaces\narthur\ncrash\narm\ngrowing\nusda\nproduct\ntab\ndaily\ncouncil\npresence\nstanding\nusually\nfunds\njuly\nwood\ngermany\nreuters\nfile\nbaker\nmoving\nrelationship\nprofits\nlaid\nyourself\nmodern\nadministration\nprime\nrecently\nacquired\nconditions\nmarried\nsharp\nwrite\ncompleted\ndry\nextraordinary\nfrance\nhill\nclosed\nsyme\ntarget\ndied\njoe\nrange\ntoolbar\nwise\nmoved\ncrop\nharriet\nqtly\nfixed\ngarden\nwilliam\nentered\npetroleum\nchanged\nadditional\nconsidered\nnation\nguess\nkilled\nmighty\nplc\naddition\ncarry\nloans\nserve\ncommanded\ninside\nexcellent\nspoken\nsurely\npressure\nleading\nproduced\nspeaking\ntexas\nbond\nimport\njan\njudge\nsong\nunless\nmidst\nquality\nsign\nones\ndecline\nwindows\nbelieved\nforced\nfresh\ncaught\nstrike\nnoted\ntv\ncollege\neasily\nworst\nought\nsomewhat\nleaving\nsecurity\nwind\nusual\nalice\nlist\nfrank\nrequired\nrock\nmerely\nwrote\nbrowser\ngrace\nsitting\nwaiting\nextremely\npress\nproject\nbookmark\ninflation\nleaves\nfish\nopinion\nprepared\nsteel\nha\ncover\nmillion\nreach\nwide\nbpd\njudgment\nlargest\nstarts\nchapter\ncrew\nhuge\nperformances\nfellow\nbuilt\nfat\nstandard\nbarrels\nconference\nhumor\noctober\nviolence\nfalls\nprocess\nminute\nresources\nbright\nsleep\nimpossible\nquestions\ntitle\ndetails\npriests\nrespect\nsurprise\nintervention\nkids\nbare\nlosses\nmeant\nreduce\nadjusted\nheads\nships\nwicked\ndr\ndude\nequal\npayments\nstep\ntruly\nunderstanding\ngenerally\nkings\nmonetary\nsuit\nwriting\ndollars\neffort\nglad\nhouses\npacific\nsavings\nentirely\nlaugh\ncontract\nhealth\nkingdom\nvideo\nmilitary\ncross\ndetermined\ngeorge\nill\nlived\nperfectly\ndestroy\ndirectly\nfully\nconsumer\nimpact\nremains\nresearch\napproved\nrights\nturning\nweston\nhorse\nscience\nsouthern\nhappen\nversion\nexecutive\nshut\nsilence\naccord\ncommercial\nhaue\narms\ncredits\ndelivered\ndream\nfloor\nremained\ndownload\nsorry\ndeliver\nfaces\nfinds\nlack\npact\nsilent\nspring\nunfortunately\ncomment\ndirected\ndivision\nfoot\ngrow\nshown\nreagan\nsaul\nsing\nboys\nrelease\napparently\ncreated\nofficer\nsize\nsuccess\nurl\nwasn\napproval\narmy\nkid\ntext\nthoughts\nweather\nfeelings\nhate\nedward\nobvious\ncongregation\ncry\nquick\nslowly\ncommand\ncool\nbasic\nst\ndeclined\ndifference\nfeb\nincluded\nrevenues\nequipment\nfields\nspent\ncaused\nconcerning\ndrunk\nlearn\nmiles\npraise\ngate\nnobody\nspot\nahead\naside\nbarrel\ncuts\ndropped\nproducer\nwinter\nagency\nmacian\nprovided\nsource\nspeech\nteam\nfrancs\nfriday\nrules\ntries\naltar\nbutton\nmessage\noffers\npotential\nanger\nburnt\ncharles\neurope\njane\njones\ncattle\ncongress\niron\ntelevision\ncents\ndeclared\nnormal\nconsidering\ndesire\notherwise\nspirits\nbeauty\nbrothers\ncomic\ndwell\ngods\ndialog\nfalling\nfollows\nindividual\nmeasure\nplaced\nsomehow\nstage\nwalking\nbroad\nfeed\naccept\nalien\npost\nproperty\ncurrently\ndrive\nlimited\nmeasures\nrain\nsuccessful\nforget\noptions\nunits\nsake\nelements\ntakeover\nbuying\njustice\nsoft\nstopped\ndouble\njacob\nqueen\nrelated\nspoke\nescape\nholds\nstore\ncentury\ntone\ncovered\ndarkness\nparents\npark\nsmile\nsteps\nwriter\nclean\ndirect\npreferred\nseed\nhighly\nopportunity\nthirty\napproach\nreduced\nsequence\nworkers\nissues\nmad\nmarketing\nmurder\nangel\ncolonel\nguys\nlie\nloved\nspread\nattack\ncrazy\nham\ninterested\nwaste\nconcern\nfirms\nobviously\nallowed\nrevised\nseeking\nelizabeth\ngreatest\nnames\nplain\nreleased\nseat\nselling\nwonderful\nbottom\ndinner\nelton\nhall\nnose\ntom\ncenter\ncocoa\nmartin\nmeaning\nplanned\npure\ntheme\ndoctor\nglass\nstuff\nerror\nknightley\npossibly\nregular\nsetting\ntomorrow\nchoice\nforces\nissued\npain\nprofessor\nfit\ngentleman\ngrew\ngross\ninsurance\ntaste\nwherefore\ncamera\nalive\nhonour\nrace\nyea\nenemies\nindex\nlink\naaron\nbanking\ncreate\nmount\nsusan\nbaby\nenjoy\nevents\nfeatures\nfutures\nblessed\nmostly\nsector\ngains\nsolid\ndrew\nedge\nfund\nnovember\nfocus\njoint\npieces\nseriously\ntwice\nstupid\nclothes\ncoast\nconcerned\nmercy\nprison\nsky\ntells\nfailed\nefforts\nimages\nopens\nsides\nterrible\nbrings\nfallen\nwisdom\nhappens\njoseph\nclassic\nclearly\nevidence\nlifted\nmom\nsaved\nclub\nhearing\nshowing\naugust\ncalls\neventually\nquiet\nrichard\naid\nideas\noperation\nrule\ntaiwan\nability\ncamp\ncorner\nfails\nloud\noption\nshit\nsought\nspending\nsquare\nass\ndirectors\nmedical\npleased\nsurface\ntransaction\nanalyst\nappearance\ngathered\nhost\nlanguage\nresponse\nvolume\ndraw\nlee\nweight\nempty\nworked\nband\ncapacity\nfarmers\nreasons\nenemy\nsigned\nvalues\nevent\nhat\nlatter\noverall\nport\nhero\nmoves\nreading\nbundesbank\ndeveloped\nbound\ninitial\njews\nremaining\nstruck\nwouldn\norders\npartners\ntelling\ndaughters\ndegree\ndrama\nformed\ngay\nlose\npromise\nsignificant\nweak\nmarriage\nproduce\ntwelve\nmonday\nbills\nchase\nfemale\npopular\nvalley\nbesides\njoin\npleasant\nplus\nsigns\nstreets\ncrashes\nchosen\nentertaining\nlovely\nspend\nvan\nbooks\nimagine\npowers\nthanks\nexploration\nfeature\nflat\nhey\nhorses\nnotes\npayment\npull\nquota\nruns\nyouth\nchinese\ncomplex\neverybody\nhurt\ntest\nactual\nattempts\ntongue\nwilderness\nball\ncommerce\nfeels\nholdings\ninstant\ninterests\nreports\ntotally\naren\ncareer\nexcludes\nministers\nordinary\npayable\nquarterly\nrepeated\nsoybean\nsupporting\nventure\ndistance\ndistribution\nlarger\nlest\nsenior\nstands\nbeast\nentertainment\nfamilies\nnotice\nwilling\nmountains\nreality\nsharply\nsolomon\nauthority\ndestroyed\npowerful\nstores\naccepted\ndefense\ndrawn\ngun\ninvestors\nsite\nstranger\nunchanged\nobject\nprevent\nrespectively\naddress\nestablished\nmotion\ntechnology\ndevil\nqueer\ntabernacle\nbritain\ncircumstances\nequally\nfifty\nfill\nmoreover\nproper\nsick\nwelcome\ncauses\ndutch\neconomists\nfinished\nletters\nlies\nlips\nshame\nvain\nangry\nclosing\nincreases\nlaughing\nfairly\ngolden\ninvolving\nliked\nmountain\nstation\naustralia\nbuffer\ncomfort\ndance\nflying\ninfluence\nsafe\nbroke\norganization\nprogress\nuses\nbackground\nfamous\nlucy\nnovel\nraises\nromantic\nears\nkevin\nwarm\nmouse\nsudden\nsurprised\ntalked\nthin\ncouldn\nemotional\nassistance\navoid\nkiller\nphoenix\nrighteousness\nshew\ntonne\ncent\ncontent\ncrime\nexpress\nroles\nserved\nsongs\nwoodhouse\nfamiliar\nhosts\nprince\nproperties\nstarting\nthank\ncatch\nhopes\nneck\nremoved\nroyal\nchicago\ndanger\nelliot\nleads\nprimary\nsaudi\nsinging\nsunday\niran\nben\nbeside\nfiction\nhelped\nimproved\nmissing\nmission\nmozilla\npre\nseparate\ntechnical\nafrica\ncotton\ndisney\nleader\nrises\nabsolutely\ntemple\nadding\nfailure\nincreasing\nmale\nmystery\nnevertheless\nteeth\nconversation\ndeck\nexcuse\nchemical\ndoors\neducation\nfail\nforty\nhotel\npresented\nregard\nspecific\nclick\nguard\nlocation\nnegotiations\ndiscontinued\nma\nspeed\ntribe\ncovenant\ngrown\nmid\nprinciple\nreporters\naustralian\ncontinuing\nmentioned\nscore\nstudent\nvice\nwilliams\nconfidence\ncutting\nsatisfied\nscream\nla\ntokyo\nvessels\nbabylon\nbow\nhonest\nmorrow\nquotas\nsounds\nease\nlaws\nstaff\ntale\nequity\ngrand\nladies\nproducing\nremove\nsad\nactivity\ncases\ncolor\ndescribed\nforest\nagent\ncreature\nfreedom\nhaven\njokes\nmainly\nofferings\nrisk\nsequences\ntheater\nagree\ncopper\ndeposits\nforms\nhappiness\nknowing\nmachine\nstudents\nthrown\nafterwards\nanyway\nbeat\nshape\nbottle\ncurrencies\ndrinking\nfuck\nmeets\nrobin\nsacrifice\nsession\nthyself\nactions\nblock\ngiant\nintended\ntons\nduty\near\nextended\nfinancing\ngroups\nmere\nprinces\nrelief\nsmart\nsnow\ntabs\ntourist\nuniversity\nwitness\nblind\ndiscount\nestimate\ngonna\nintroduced\nitems\nmoon\nscreenplay\nstatus\ntalent\nbiggest\ndefault\nfactors\nbeef\ndrawing\ngrass\njordan\nmovement\npersons\nsection\nthinks\ncommodity\nhong\nlearned\nradio\nwilt\ndelight\ndisplay\ngirlfriend\njackie\nmultitude\nokay\nabraham\nangels\nbreath\ncrowd\ndoth\ndramatic\nfiles\nhobo\nmention\nnumbers\nrequest\nvast\ncloud\nestimates\nmemory\nmusical\nnoise\nolder\nunknown\ncalling\nclaims\ndelivery\ndepth\nestate\npositive\nwalter\nadvantage\ncometh\nfinding\ngrey\nimpressive\nkong\nmatch\npharaoh\nprove\nsomewhere\nsuperior\nworthy\nboring\nphysical\nputting\nthrone\napplication\nblow\nbrief\nbringing\ncounty\ngovernor\nodd\nremembered\ntall\nunable\ndress\nexplain\niniquity\nprovision\npurchases\naffected\nbuys\nchristian\ncondition\ncorporation\ndecide\nextension\nflow\ngeneration\nlo\nplenty\nusair\nyield\nark\nforgotten\nplanet\nplanning\nrow\nsenate\nstories\nthrow\nwhales\nafternoon\ncalifornia\nclever\nconnection\nfarmer\nhills\nsuffer\nconstruction\nfortune\nhole\nocean\nopposite\nrequire\nride\nrussell\nsteady\naware\ndrug\ninstitute\nitalian\nmatters\nmining\nmoral\npassing\nprophet\nskin\nthick\nah\nprovides\nstick\nimmediate\nkeeping\nlargely\nrubber\nsubstantial\nviolent\ncount\nindia\nmaintain\npromised\nproud\nactive\ncop\ncustomer\ndesign\njoined\nmeanwhile\nstatistics\nbasically\nchoose\nfashion\njourney\npossibility\nrealize\nreduction\nscheduled\nstones\nagreements\ngenre\nlots\npace\npartly\npictures\npool\nportion\nrighteous\ndad\ndesigned\nfans\nhearts\nhighest\nmanages\npayout\npick\nrice\nunderstood\nvillage\nasking\ncurious\ndome\nindependent\nnaked\noscar\nrestructuring\ntears\ntrial\nappropriate\nbankers\ncrisis\nengaged\nmarry\nmaterials\nmetal\nsam\nsettled\ntherein\nwars\nabroad\natmosphere\nattitude\nconsiderable\nfancy\nheat\nlevites\nprincipal\nreligious\nsterling\nunlike\ngates\ngather\nload\nlouisa\npolicies\ntaught\napart\nclicking\nfrancisco\nfucking\nadam\nbeneath\ncontracts\ngrave\nnewspaper\npath\nphilistines\nsimon\nsoldiers\nsupplies\nthriller\nwholly\nagricultural\nelement\nlift\nofficers\nwrath\nburn\njim\nloose\nreflect\ntariffs\nattractive\nfavour\ninnocent\nproposals\npulled\nryan\nsexual\nshipping\nstability\nbell\ndare\ndust\nelectric\nholders\nsheep\ngentlemen\ngrant\nhenry\nimprove\nlabor\nmanufacturing\npalm\nutterly\ncombined\ndeparted\nrejected\nshop\nstubb\nbenefit\nbird\nborder\ndecent\nexporters\nfalse\nice\nintelligent\npartner\nprophets\nwished\nbecoming\nchurchill\ncommitted\nexisting\ninheritance\nlimit\nquoted\nwaves\nactivities\nafrican\nbeach\nbrilliant\ndashwood\ndisciples\nhence\nnorthern\nreaction\nrelatively\nsperm\nupper\nbag\nbrain\nexpressed\nfairfax\nfiling\ngreatly\nhoped\npointed\nwheel\nfighting\nghost\ninhabitants\ninterview\nobliged\nqueequeg\nvision\nwin\nconvinced\ndelegates\nintelligence\nmethod\nprograms\nthomas\nturnover\nunlikely\nwedding\nboost\nfled\ninstance\nitaly\nshore\nsilly\nwatched\naspect\nbuster\nchris\ncontinues\ncrown\neddie\ngencorp\nlisten\nvisual\nbob\ndull\nfly\ntrip\nvote\napparent\ncarefully\ncarrying\ncars\ncheck\nearned\nfool\nimprovement\nmike\npassage\nproved\nshadow\nshell\nsmote\nstronger\nbelieves\nfolder\nharry\nindian\nlaughs\nlegs\nmajority\npale\npride\nproperly\nwoods\nyellow\ncaesar\ndriven\ndumb\nflowers\nhospital\nthence\nwhenever\nadvanced\nappointed\nconstant\nlion\nsamuel\nstructure\ntough\nyounger\nyourselves\nanimal\ncompetition\ndisclosed\ndwelt\ngranted\nnights\nperiods\nresolution\nscale\nslight\ncharges\nconclusion\nexplained\nfriendly\nimportance\nleaders\nminimum\nourselves\nparties\nplane\npound\npretax\nteach\napartment\ncable\ncalm\ndiscovered\nfears\ngatt\nkorea\nmorgan\nshipments\nsmaller\nsuspense\nwalls\narise\nhide\ninvestor\nnuclear\nsuffered\nboats\ncheap\ndreams\nindonesia\nobserved\nowns\nphone\nregion\nrelations\naliens\narose\nashamed\ndefinitely\nexpectations\njennings\nlabour\nlaughed\nonto\nparent\ntired\ndecides\ndevelop\nexistence\nscott\nsmoke\nteacher\ntelephone\ntuesday\nancient\nextent\nkeeps\nrealized\ntension\nelders\nharvest\njoshua\nreligion\nappeal\ncoat\nprint\nsan\nsparrow\nvia\nawful\nclay\ndangerous\nex\nfinish\nheaded\nowner\nreign\nroll\ntreatment\nacquaintance\nlegal\nlying\npair\nprecious\nrated\nviewer\namazing\nbones\nfarther\ngrade\npipeline\nschools\nshots\ntypical\nbeloved\nbunch\nconstantly\nlands\nleg\nprofessional\nworship\nbegat\ncontact\ncontext\neating\nfavorite\nreference\nrefused\ntea\naccident\narmed\ndivided\nexciting\nfault\nmaize\nmass\nmedium\nok\nrent\nbegun\nbonds\ncharged\ncharming\ndispute\nexercise\nfrequently\nintent\nrepurchase\nreturns\naffairs\nanimated\nbodies\nbull\ncivil\ncommunications\ncook\ndetermine\ndiscuss\nindicated\njoke\noutlook\npatient\nrejoice\nsituations\nweb\naccess\naffair\naffection\nconsumption\npages\nsisters\nthousands\nraising\nspite\ntask\ntraining\nwarning\nadvance\nassure\nexpansion\nlake\noccasion\npremise\nshareholder\nsins\nsuggested\nlending\nputs\nrevenue\nslew\naye\nburning\ncarriage\ncontains\ncounsel\nframe\nhandsome\nhipster\nicon\nsubstance\ntim\nwherein\nacres\nanybody\napplied\ndeveloping\nfacilities\nfan\nintense\nmarked\nmines\nminor\nmistake\nnarrow\nscheme\nshoot\nspanish\nwentworth\nyo\nannouncement\nasian\nbay\ncustomers\ndestruction\ndetail\ndisaster\nexpand\nsalvation\nspare\nvessel\nwings\naccounts\naltogether\nboston\nbridge\nbusinesses\nchair\nclouds\nconsideration\nextra\nheavily\nlawyer\nliberty\nmethods\nnetwork\npackage\npartnership\nreasonable\nsequel\ntypes\nweekend\nwhatsoever\nbirth\nconsumers\necuador\nexpression\nimpression\nplants\nsurprisingly\nultimately\nwilloughby\nain\nanimals\nattorney\ndamage\nflash\nobtained\nromance\nuncle\nauthorities\nbless\nbreakfast\ncountenance\ndec\ndetective\nexpenses\nmaximum\nacts\narabia\nconcept\ndiluted\ndistant\nexception\nfaced\nfactor\nfifth\nhandle\nimagination\niranian\npurchased\npurposes\nrecommend\nrequirements\nshoulder\nstable\ntravel\nbitter\nburied\nconduct\ncubits\nexist\ntroubled\nundisclosed\nbeasts\ncard\nct\ndamn\ndick\ndifficulty\ndriver\nexternal\nlamb\nlucky\noccasionally\nring\nsmiling\ntin\nbreaking\nclaim\nfate\nformula\nhilarious\nloading\nnumerous\noccurred\noriginally\nslain\nwaited\naimed\nburst\neastern\nfriendship\nlynch\nmilk\nnoble\ntemporary\ntraditional\narcher\narrived\ncapable\ndancing\nextreme\nremarks\nselected\nsomebody\ntheory\ntouching\nvoices\nwoe\nadmit\nbirds\nfox\nhidden\nnegative\nprospects\nprovisions\nsaving\nannoying\neve\nheavens\nmaker\npopulation\nridiculous\nrush\nunemployment\nuniverse\nwarner\nbrazilian\ncharm\nchristmas\ncontrols\ncrops\ndriving\nsells\nshortly\nsuffering\nthemes\nal\nii\njobs\nluck\nnaturally\nprojects\nresolved\nsail\ntouched\nwednesday\ncombination\ncontrast\ncooperation\ndiscover\nemployees\nequivalent\nflight\ngoal\nhorrible\nlawrence\nprofile\nsubtle\nsuspect\ntis\nwriters\nbatman\ndivine\njohnson\nknife\nmess\nsafety\nunclean\nag\nbarley\ncyclops\ndealer\ndogs\ndying\nflick\nhang\njavascript\njonathan\nkilling\npoet\npossession\nrequires\nsignal\nth\nyours\nactress\nchanging\nenjoyed\nforever\nheight\nlegislation\nlikewise\nmidnight\nrapidly\nsaturday\nsecure\nstarbuck\ntrend\nwear\nattend\nbags\nbone\nbranches\ncopy\nliquidity\nnay\noils\npity\nretail\nvariety\nwinds\ncomparison\ncontinually\ndaniel\ndesperate\neternal\nfingers\nhung\nmodel\npassion\nreturning\nstorm\ntalents\nadvice\nallen\nbus\ncompanion\nfuel\nhid\nhoney\nhurry\nmaid\nmonster\nmultiple\nmurphy\npause\nraw\nstudio\ntrack\nartist\ncampaign\ndeclare\nhanging\nlikes\nmixed\nresponsible\nsalt\nsatan\nseasonally\nspain\nwash\nwearing\ncinema\ncircle\nconfusion\ndenied\nitem\nlinks\nproof\nroot\ntreated\nupward\nconfused\ncorporate\ndistrict\nestablish\nfunction\nmanage\nmanaged\nnewly\nreflected\nbenjamin\nbranch\nchain\nclosely\ncompletion\nere\nfilmmakers\nico\ninstantly\nnigh\npattern\nrisen\nsouls\nsufficient\nasks\natlantic\ncomfortable\ncreatures\nelection\nmysterious\nordered\nrolled\nsand\nspiritual\nswiss\nunique\nvillain\nwives\naffect\namounts\ncontrolled\neager\nfond\nfought\nnicely\npicked\npocket\npredictable\npush\nrare\nreigned\nseeks\nsoybeans\nturner\nassociated\nbates\nbonus\nfranklin\ngenerations\nposted\npounds\npractice\nprepare\nrecovery\nseventh\nshipment\nswear\nterror\ntight\ntwa\nwhosoever\nwilson\nbusy\ncarter\ncovering\ncuriosity\ndiscussion\nemployment\nfinger\ninstitutions\nminds\nstuck\nuniversal\nallied\nanti\nanywhere\nblame\ncom\ndesired\npaying\npossess\npublished\nsorrow\nstretch\nsuggest\nweapons\nbruce\nburned\nconflict\nmile\npercentage\nprayer\nproceeds\npushed\nrepresentative\nstruggle\nwave\nbilly\nentering\nexcess\nfacts\nindependence\nmood\noperate\nrealistic\nscientific\nstarring\ntaxes\nwet\namericans\nbrass\ncomments\ncute\njump\npersonality\nrevealed\nsettle\nshift\nstrongly\nacquisitions\narts\nbehavior\ncompetitive\ndan\neasier\nem\ngasoline\ngift\nkiss\nmonthly\npassword\nprotection\nsmell\nunusual\ncontrary\ncore\nexplanation\noccur\nrating\nrooms\nseas\naudiences\nbasket\ncritical\nfeared\nfeast\nneighbour\nore\nplanted\npreferences\nscary\nsevere\nbath\nbulk\ncommandment\ndiscussions\nenjoyable\nhughes\nplatform\nspecies\ntradition\nyeutter\ncecilia\nconscience\ndesolate\ndisease\ndressed\nobserve\nshock\ntonight\nvirtually\nwit\ncage\ndepart\nemployed\nexclaimed\nfavor\nfifteen\ngained\nkindness\nmanners\nweekly\nchest\ncousin\ncreating\ndemocratic\neconomist\nephraim\nlawson\nlover\nmedia\nounces\npop\nquietly\nreply\nrussian\nviews\nwasted\napproximately\ncommandments\nconsequence\ndevice\ndisappointed\nexact\nfiled\nguilty\nmeasured\noverseas\nproceed\nshoulders\nthrew\nassume\nburden\nbuttons\ncollection\nford\nheroes\nmail\nmars\nsoldier\nstatements\nthreat\nvisible\ncat\ncertificates\nfaithful\ngenuine\nmexico\nrome\nthursday\ntruman\nachieved\nanimation\ncatholic\ncontained\njackson\nlaughter\ntables\nasia\ndelightful\ndifficulties\ndrilling\nemotion\nessential\nforgive\ngradually\nguinea\nloves\nnick\nrefinery\nshoes\nsmiled\nstated\nstretched\ntail\nzero\nbenefits\nbp\ncarpenter\ncloser\ncoal\ndemands\nescaped\nfoolish\npequod\nshortage\nthoroughly\nbloody\ncareful\ncasting\ncastle\nconvincing\nculture\ndepend\nelectronic\netc\nhonor\nkennedy\nmagic\nmeetings\nphilip\npilot\npredicted\npresently\nroman\ntemper\nyards\nbarely\nctrl\nforecasts\ngentle\nglance\ngrounds\nidentity\ninvestigation\norange\nprimarily\nresulting\nsheet\nspoil\nsum\nsuspended\nultimate\nurged\nvanity\nvoyage\nwarned\nabsence\nbreaks\nchamber\ncompanions\ncorrect\ndealing\ndelay\nentry\ninvolves\nleague\nmax\naspects\nbadly\nblank\ncampbell\nchurches\ncritics\ncurse\ngray\ninner\ninternal\nmoab\nobjects\nrandom\nstayed\ntestimony\ntools\ntransport\nuh\nwitch\nages\nboyfriend\ncontinental\ncup\ner\ngreek\nhundreds\nintellectual\nliterature\nloving\nrivers\nrolling\nsettlement\nshearson\nton\ntotalled\nwalks\nweird\nadds\nassociates\naward\nbrandon\ncameron\ndiscovery\nexpensive\ninvestments\nopposition\nprotect\nproviding\nswift\nwhence\nwillis\namusing\nauto\nbuyout\ndeny\ndirty\ndiscussed\nelaborate\nenormous\nlights\nlistening\nmarine\nmistress\nopposed\nrapid\nruling\nshook\nsteve\nstriking\nsupper\nthither\nviewers\nbelief\ncompletes\ndeals\neditor\nentrance\nexpecting\nheathen\niraq\nliterally\ntied\nversus\nachieve\ncalendar\neaten\nencourage\ngnp\nintention\njerry\njudgments\nmodest\nnative\nnecessarily\noffset\nremarkable\nreward\nshewed\nsixth\nstandards\nargument\nbeard\nbent\nblade\nconfirmed\ndifferences\nemotions\nevident\nfoundation\nholes\nhoping\nimported\nmeal\npoems\nrod\nseconds\nshooting\nstudies\ntaylor\ntransactions\nvoting\nadequate\nbrutus\ncolour\nguilders\npoured\nreceiving\nrepresentatives\nrocks\nscarcely\nsinger\nvpon\nwoody\nbureau\nclock\nconcerns\ndrag\nhal\nharris\nhistorical\nmemorable\npiedro\nrecorded\nscattered\nseemingly\nshake\nsupported\ntalented\ntruck\nturkey\nugly\nups\naccounting\nbitch\nceiling\ncitizens\ndidst\nfloating\nfrightened\nhartfield\ninstall\nlimits\nmate\nmistaken\nnotion\npalmer\npurolator\nsanta\nstring\nsurprising\nvirgin\nattacks\nbigger\nchose\nconsolidated\ndesert\ndividends\nelectronics\neverywhere\nhearken\nhumanity\nhumour\njewish\nkuwait\nmanhattan\nmissed\nrescue\nscroll\nthroat\ntrek\nzion\nadventure\napply\nawake\nbuildings\ncaptains\ncontain\nconvertible\ncottage\ncrowns\ndrugs\nharm\nhint\nkitchen\nmast\nprojected\nresponsibility\nstrangers\nstrikes\ntemperature\nwooden\nbars\nchemistry\ncontaining\ndecade\ndouglas\ndreadful\nelegant\nengagement\nexpense\nfierce\nguns\nindicate\nmovements\npermit\npit\nsmooth\nsurvey\nwake\nweakness\nanxious\nboss\nchristopher\ndeposit\nfury\nhated\nhousehold\nhutton\nintensity\njeremiah\nlyng\nmoscow\nobjective\nplayer\npositions\npreliminary\nprivately\nrevenge\nspeculation\nstops\nsubstantially\nsuburbs\ntiny\ntraded\nweapon\nwrought\nalternative\nassured\ndetailed\ndevelopments\nfrederick\ninformed\nlos\novercome\npolitics\npressed\nproves\nrecommended\nreform\nsadly\nunderlying\nvalued\nbold\ncease\nchrysler\nconfident\ncourage\ndecisions\ndeeper\nflock\nhunt\nlatin\nmotor\nmutual\nnowhere\npatch\npeculiar\nphilosophy\nregulatory\nsanctuary\nsleeping\ntransfer\nvictim\nwhither\nzealand\naircraft\nallows\nbore\nbru\ncaesars\nconcluded\nconductor\ndescribe\ndiamond\nincredible\npatience\nplayers\npresents\nsatisfaction\nsidebar\nuseful\nwage\nwing\nwondering\nassistant\ndefinitive\ndeserves\ndixons\nendless\nghetto\ngovernments\nhudson\nhumans\nisaac\nknight\nmakers\nnearer\nopportunities\npalace\nprocessing\nranging\nrarely\nsci\nsteven\nsubjects\ntent\ntransportation\nwinning\naccomplished\nanalysis\nauthor\nbids\nbug\ncabin\ndisappointment\nengineering\nhollow\nindividuals\nlearning\nliberal\nmachinery\nmankind\nmature\nmoore\nperform\nrepresents\nroof\nsole\nstress\nwore\nadopted\nallowing\namid\nangeles\nauthorized\ncommodities\ndies\nfame\nhorizon\nhttp\npopup\nruled\nstairs\ntraffic\nutter\nvictory\naccent\nborg\ncreation\nhomes\nhunting\nmalaysia\nmortal\nmortgage\nnumbered\nsoil\nsore\nstatutes\nsupreme\ntribes\narrival\nbowed\nchan\ncruel\nduties\nfelix\nfi\nflorida\ngoodness\nhealthy\nhousing\ninstrument\njudged\njulia\nlame\nnegro\npointing\nshouldn\nsoundtrack\ntaft\nwishes\nworry\nbehaviour\nbullock\ncharlie\ncircumstance\ndelayed\ndistress\nhamlet\nincense\ninstruments\ninterior\nintroduction\nlocated\nmanasseh\nmillions\nrage\nrecords\nsavage\nthreatened\nvenezuela\nwickedness\nalas\nasleep\nbarbara\ncreates\ncriminal\ndim\ndisplayed\nenable\ngames\nhither\njay\nmanufacturers\nnearby\nobtain\npainful\nrepublic\nroberts\nsabbath\nsarah\nstorage\nstream\nunfortunate\nverily\nwanting\nwound\nattached\nbearing\nbelong\nchicken\ncode\ncolombia\ncomponents\ncrying\ndozen\nduke\nhungry\ninevitable\ninspired\njoab\njumped\nlacking\nlowered\nnoticed\nohio\npot\nray\nrecognize\nseamen\nsingapore\nsnake\nsubsidies\nterrific\nviewing\nvital\nacted\nadjustment\nadult\ncubic\nevan\nexcessive\nflame\nformal\ngang\nguide\nhaste\nillinois\ninvited\njar\nmiddleton\npurple\nratio\nrival\nsemiconductor\nserves\nsignificantly\nslept\ntower\ntrailer\nvirginia\nwonders\nagreeable\nappreciate\narticle\ncounter\ndelighted\nflood\nhits\nincreasingly\njean\nmar\noffices\npractical\nselfe\nshirt\ntitanic\nworker\nafford\ndebate\ndeeply\nelsewhere\nfoods\nforgot\nincredibly\ninitially\nknees\nlouis\nlouvre\nmix\npardon\npractices\nquest\nrefuse\nregarded\nrepresented\nsending\nshining\nstrategy\nagrees\napprove\ncaptivity\ncinematography\ncommunication\ncraft\ndominion\ngrows\ninch\nlad\nlane\nlosing\nmerge\noecd\npanel\nperry\nplague\nsec\nselect\nsolution\nthunder\nweary\nautocomplete\nbancorp\ncenters\nclimax\ndirecting\ndrove\neffectively\nentitled\nfacility\nfaint\nfrozen\nlegend\nmiller\nnormally\nprey\nquarters\nreaching\nrecognized\nrestaurant\nscreenwriter\nsept\nsports\ntheatre\nthrust\nccc\ncolors\nconnected\ndescription\ngenerated\ngenius\nhardy\ninches\ninterrupted\nregarding\nseparated\nshakespeare\ntwist\nangle\nattempting\nexperienced\nfleet\ngregory\nhunter\nideal\nidle\nlaunch\nlewis\nreducing\nrestore\nretaliation\nrough\nsailor\nsentence\nslaughter\nsooner\ntargets\nthrowing\nunexpected\nurban\nwarrants\nanswers\nassembly\ncargo\ndelivers\nguests\nhanded\nhappening\nicons\nlovers\nmacb\npreference\nprinciples\nprospect\nreplaced\nstaring\nstern\nstudying\nswitch\ntelecommunications\ntend\ntreat\nunhappy\nadams\nalan\narrow\ncinematic\nconscious\ndoe\nfoster\ngodzilla\ngoeth\nhelping\nivory\nlean\nmild\nmineral\nmoderate\nnavy\npapers\nperish\npoetry\nprecisely\npursue\nrelationships\nrelative\nrequirement\nrestrictions\nrob\nroger\nstephen\nteenage\nthief\nuniform\nvegetable\nwealth\nanticipated\narab\nboards\nbride\nchallenge\ncommit\ncommunist\nconsumed\ndignity\nfreight\ngdp\nheere\ninterpretation\njersey\nkate\nlaunched\nmills\npapa\nrachel\nresulted\nvirtue\nvisited\nblessing\nborne\ncursed\ndeadly\ndean\ndennis\ndepressed\nexceedingly\nexit\nextensions\nhandling\nhasn\nlowest\nmental\nmonkey\nphase\npulp\nrecover\nregistered\nroutine\nsinned\nstations\nsteadily\nsteal\nsuccessfully\nsuperb\ntechniques\nunnecessary\nwhereas\nwondered\naim\nbrooks\nconventional\ncrack\ncrystal\ndelicate\ndeputy\nenvironment\nexcitement\nhangs\nhen\nmassive\nopera\npalate\npersuaded\npipe\nreveal\nsatisfactory\nsean\nsensitive\nshouted\nsurvive\nwanna\nwells\nwhaling\namongst\nanderson\nbalanced\nbeer\nbrave\nbreast\ncares\nextend\nfantastic\nfisher\ngentiles\ngospel\ngotten\njackal\nknock\nmaketh\nmerrill\nounce\nrank\nsentiment\nsympathetic\nuser\nvehicle\nwhilst\nyields\nabsent\nabsolute\nbelievable\nbible\nbuyers\ndrops\nencounter\nglorious\nicco\nimposed\njail\nloaded\nloses\nmill\nparadise\nphil\nprovisional\nqualities\nrenewed\nresolve\nslay\nsub\ntoy\ntragedy\nacceptable\nchildhood\ndefend\ndepends\ndisturbing\nexceed\nexclude\nferrars\nflag\nflambeau\ngarments\ngibbs\nglobal\ngrains\nho\nmaintained\nmayest\nmusgrove\nnecessity\nowners\nownership\nparker\npatrick\nslave\nsmite\nstepped\nteaching\nupright\nwidow\nalike\nassigned\nattachment\nattended\nbrian\nclasses\nconfess\ncontributed\nconviction\ncorps\ncreative\ncuba\nearn\nengine\nfare\nfaster\nfix\nhired\nlacks\nlearns\nmagazine\nmob\noccasional\npie\npulling\npursued\nsanctions\nsucceeded\ntalbot\ntorn\nacademy\nacreage\napproached\ncarrey\neverlasting\ngiveth\nhearted\nhezekiah\nintentions\ninvisible\nmachines\nnervous\npressures\nprofitable\nreproach\nrope\nsensible\nstolen\nsubmit\ntarzan\ntriumph\nussr\nvampire\nwashed\narnold\nassumed\nbirthday\nessentially\nfavourite\nflour\njet\nlately\nleadership\nliquid\nlocked\nmiyazawa\npractically\nreed\nreserved\nroots\nshade\nsymbol\num\nunfair\nworldwide\nwounded\nyard\naunt\ncumulative\ndisappointing\ndropping\nemergency\nera\nfascinating\nflee\nflower\nfrequent\ngore\ngrowers\njem\njr\nkinds\nlandlord\nlinen\nmaturity\nparticipation\npending\npermanent\npiedmont\nquit\nrhode\nriches\nsaints\nsemi\nskill\nsolemn\nthreatening\nzinc\nacquainted\naluminium\nenjoyment\nenterprises\nfolks\nfurniture\nglobe\nhighbury\nintends\njustified\nmaintenance\nmatthew\noxen\npink\npromising\nrabbit\nrestated\nrevolution\nspielberg\nsuper\nwidely\narrangement\nbabe\nborrowings\nbrooklyn\ndanny\ndart\ndealt\nediting\nempire\nfederation\nfired\nislands\njazz\njohnny\nkick\nlesson\nmisery\npeak\nperceived\npitch\npork\npour\nremote\nresume\nsamaria\nshallow\nthailand\ntwists\nalex\nassyria\nbizarre\ncane\ncole\ncops\necus\nemperor\nexists\nforehead\nguest\nirish\njason\nmotors\nphantom\npregnant\npunishment\nrefined\nreviews\nsmoking\nuncertain\nward\nattempted\nbaseball\ncalculated\ncap\ncarries\ncorrectly\ndallas\ndevoted\ned\nemphasis\nhelps\nidentified\njury\nlightning\nnakasone\nnonsense\nopinions\npossessed\nprincess\nresist\nsacred\nspoiled\nstudied\ntool\nworried\nanxiety\nchariots\ncheerful\nclayton\ncolumbia\ndesk\ndisplays\ndownward\nepic\nflaws\nfootball\nfundamental\nlambs\nlively\nlonely\nproxy\nrecall\nstrip\ntarantino\nvolcker\naccused\nbarton\nborrowing\ncompare\nconceived\nconsent\ncrow\ndeserve\ndiscovers\ndu\neagerly\nearnest\nexpectation\nexperiences\nfulfilled\nheavenly\nheed\nidentify\njunior\nknowest\nmemories\npainting\nprofession\nram\nreflecting\nreflection\nregional\nretired\nrumors\nsignificance\nstaying\nusage\nwitty\nabandoned\nabide\naccounted\nadvised\nbomb\ncards\ncontemporary\ncontribution\ndefined\ndisappeared\nflask\nflew\nfruits\nhandled\nloue\nmenace\nobey\nperformed\npitched\npreparation\npreserve\nreminded\nreverse\nrocky\nsafely\nscreaming\nseated\nspeake\nstanley\nstrategic\ntheresa\ntire\ntrick\ntroops\nachievement\naged\naj\narmies\nbeg\nbeheld\nbreadth\nbutter\nchip\ncomposed\nconsiderably\ncontribute\ndebut\nfake\ngiue\nhorn\nhouston\njulie\noffshore\npreview\nprize\nradiation\nrepresent\nruin\nstockholders\nsubcommittee\nsuspicion\ntony\ntravolta\nafterward\nappealing\narrive\nchances\ncommitment\nfats\nlisted\nlistened\novernight\npoorly\nprocedure\nrepresenting\nriding\nselection\nstrictly\nsubplot\nvaluable\nannounce\napple\nassembled\nchampion\nconsistent\ncourier\ncriticism\ncrossed\ndrought\nexperiment\nfreeze\nheadquarters\nhenrietta\nhoward\ninstances\nmetals\norigin\npersonally\npsychological\nrecommendation\nreflects\nreplace\nrev\nslipped\nsounded\nsucceed\nswung\ntowns\nvisiting\nwherewith\nacceptance\nasset\ncoach\nfantasy\nfirmly\nfirstborn\ngeorgia\nhumorous\njeroboam\njew\njungle\nlucas\nmessenger\nnarrative\npermitted\npushing\nsatisfy\nshine\nsink\nsites\nskills\nsmallest\ntexaco\nthereby\nupdate\narranged\nbelly\nconsists\ndeeds\ndegrees\ndevices\ndocument\ndread\nfolly\nimperial\ninnocence\nknights\nmerchant\nparliament\npartially\npathetic\nperceive\npig\nrecovered\nrelation\nshadows\nsupplied\nsympathy\ntenth\ntie\ntour\nvengeance\nabundance\nagencies\narrangements\nburton\nchambers\ncolumn\ncompromise\ndawn\ndebentures\ndisposition\negyptians\nemployee\nexceeding\ninput\nintend\nleonora\nliterary\nlouisiana\nmerit\nnegotiate\norganisation\nreporting\nretain\nshouting\ntests\ntossed\ntrumpet\nvegas\nwheels\ncaptured\nconverted\ndefence\ndistinct\ndrunken\nencouraging\nengaging\nenterprise\nepisode\nfiery\ngap\ngenerous\ngibson\ngraphic\nlibrary\nmargaret\noak\noperator\npersonnel\nplainly\npoehl\nrespectable\nrestored\nripe\nwarrant\naccompanied\nairlines\namen\nanymore\naveraged\nblair\ncells\ncertificate\ncloth\ncure\ndetermination\ndoctrine\nexamine\nexcited\nfamine\nfashioned\nfetch\nholiday\nidols\njaw\nlock\nmyers\nouter\npainted\npleasing\nproceedings\nrand\nrepublican\nsigh\nsubsidiaries\nsuggests\nvacation\nvehicles\nviewed\nvoted\nwages\nzone\nadults\nalert\ncompass\ncompassion\ncomplicated\nconvince\nfishing\ngathering\nhurried\nleaning\nletting\nlit\nmembership\nmiserable\nnurse\noptimistic\npaint\npenny\npressing\nrid\nsorts\nspeaks\nstrict\ntreasure\ntrembling\nutmost\nadmiration\nalarm\nbeating\nbelgian\nblonde\ncartoon\ncommitments\ncomplaint\nconsequences\nconservative\ncontrived\ncruise\ncustom\ndespair\ndisposed\nemployers\nextensive\nfacing\nflowing\nharder\nhectares\nhor\nincident\ninfinite\ninstaller\ninventory\njennifer\nlamp\nprotest\nprovidence\nstoryline\nstrangely\nstruggling\nswords\nweep\nabsalom\nadmitted\nadvances\nanointed\nappearing\napplications\nautomatically\nautumn\nbored\ncentre\ncompares\nconducted\ncrucial\ndairy\nfee\nfinest\nfoul\nhabit\nile\nimf\njeff\njimmy\njoel\njonah\njudges\nlarry\nlend\nmock\nmode\nprefer\nprisoner\nreadily\nsacrifices\nscientist\nshed\nsheer\nsumita\ntrader\nveteran\nwept\nworn\nadmiral\naffliction\nalmighty\naltered\nastonishment\nbelongs\nblocks\ncarl\ncassi\nclark\nconfusing\ndesperately\ndried\nfactory\nfilmed\nhostile\ninvitation\nminerals\nmissiles\nrains\nroads\nsoftware\nspectacular\nstartup\ntheaters\ntobacco\nurge\nvillages\nabsurd\nagents\nbbl\nblows\nbushels\ncabinet\ncanaan\ncow\ndemanded\ndeserved\ndimensional\ndragon\neleven\nendure\nexecuted\nfatal\nfbi\nfootage\ngaf\ngifts\ngrades\ninclined\nlaura\nleviathan\nminority\nmissile\nmississippi\nnoon\nnoting\noath\noccupied\npasses\npersuade\npole\nrailroad\nrear\nregret\nrespond\nretained\nrushed\nsenses\nserpent\nspends\nspy\nstead\nstrengthen\nstunning\nsubsidy\nsurrounding\ntommy\ntwisted\nvincent\nwonderfully\nassist\nbrand\ncapture\nclothed\nconcert\ncrap\ncustoms\ndavis\ndecree\ndirt\nelijah\nfort\nhanover\nharper\nimagined\ninstalled\niv\nkelly\nkills\nknoweth\nlbs\nmel\nms\nmulti\nnatured\nnorway\noccurs\noffended\npa\nprisoners\nprovince\nresumed\nruler\nsecondary\nserving\nshout\nsoftly\nstared\ntragic\ntrail\nwarmth\napproaching\nattracted\nattributed\nbanker\nblown\nbuilds\ncake\nconsciousness\ncunning\ndepending\ndost\nexcluding\nexpert\nfrightening\ngently\ngoats\nguilt\nhappily\nhtml\nimpose\nisabella\nmadam\nmasterpiece\npaced\npip\nports\npremium\npromote\nredeem\nrendered\nrural\nspots\nswann\nswimming\ntents\nwayne\nwoo\naboard\nandrew\nasa\nastonished\nattacked\nballs\nbeaten\nberlin\nbrokers\nbrow\ncollected\ncongressional\nconsequently\ndeclining\neccentric\nformerly\ngreece\ninevitably\nlets\nmerchants\nmerry\nnasty\nnegotiating\nours\npar\npreparing\nranks\nremoval\nresistance\nrings\nroute\nsailing\nsegment\nsilently\nstoltenberg\nteachers\nterribly\ntribute\nwildly\nartistic\nattending\nbacked\nbutler\ncape\nceased\nesau\nfairy\nfe\ngags\ngesture\nhip\ninstitution\nmercer\nmurderer\nnippon\npillars\nreputation\nrequested\nseldom\nshared\nshield\nspecifically\nsprang\nsubmitted\nsubsequent\ntear\nwhereof\nanthony\nbaldwin\nbet\nbobby\nboxes\nbriefly\nbrook\nchemicals\nconcentration\ncooper\ncountless\ncrossing\ndiplomats\ndonald\nencouraged\nexamples\nexxon\nfranc\nfreely\ngarment\ngilead\nglasses\nhail\nheap\nhints\ninn\ninternet\njava\nlauncelot\nmatrix\nmatt\npack\npile\npoison\nprevented\nprocedures\npursuit\nrecognition\nsatire\nsectors\nsimultaneously\nslaves\nsolve\nstroke\nvineyard\nweren\nwhoever\nwomb\nwow\nadventures\nargue\nbehalf\nbeings\nbench\ncoins\ncreepy\ncritic\ncsr\ndamned\nfinale\ngreatness\nhorns\njacket\nnantucket\noperates\noutcome\npat\nperfection\npoliceman\nprecise\nregardless\nregions\nrender\nreynolds\nsexy\nshocking\nsosnoff\nspice\nterminal\ntremendous\nwandering\nwitnesses\nwright\nanchor\nawkward\nconspiracy\ncookie\ncourts\ncpc\nearthquake\nexpanded\nguarantees\nhenceforth\nhers\nhiding\nignored\nlinked\nnamely\nneat\noffensive\nperforming\nperu\nphrase\npriced\nregulations\nremnant\nrepeatedly\nrulers\nsearching\nsecrets\nshaking\nshekels\nshepherd\nslim\nspear\nsteep\nstuart\nsufficiently\nsuits\ntotaled\nunderground\nwholesale\nabruptly\nalfred\nallegheny\naloud\nashes\nbreasts\nbuddy\ncaptive\ncharacteristic\nchariot\ncoarse\nconcentrated\nconvenient\ncorrupt\ndistinguished\ndwelling\nfilling\nfilmmaking\ngabriel\nhalt\nhammer\nignorant\nindignation\ninitiative\nintriguing\njustify\nlogic\nobservation\npaths\nproceeded\nretirement\nslide\nsorghum\nspell\nsucceeds\ntrusted\nvisits\nvp\nwheeler\nwrapped\nab\nalexander\nauction\nay\ncameo\ncausing\nclimbed\ncoffin\ncomparable\ncostumes\ncovers\ncrowded\ndistributed\nestablishment\nexperts\nexplains\nfailing\ngotta\nhealed\nhumble\ninstinct\njaws\njealous\nmartial\nmasters\nmounted\nmulan\noperators\nperspective\npossibilities\nsailors\nscientists\nstages\ntwilight\naffecting\nbaldrige\nbass\nbat\nboom\nborders\ncleared\ncliches\ncourses\ndeclines\ndeed\ndestination\ndoeth\neggs\nfaculty\nflames\nfloat\nfountain\ngrateful\ngrief\nheading\nhook\nhopkins\nimmortal\nimpressed\nimproving\nindifferent\nkeen\nlevy\nliveth\nmischief\nnewspapers\noperated\nphiladelphia\nporch\nposts\nprophesy\nshelter\nspeaker\ntechnique\ntendency\ntune\nvictims\nwatson\nwherever\nartists\naustin\nbacon\nbathroom\nchains\nclearing\ncorners\ndistinction\ndominant\nfred\nimpatient\nkansas\nlighting\norganized\noverly\npants\nphilippines\npoem\npointless\nprofound\npromises\nremainder\nseats\nshapes\nstimulate\nsuicide\nsurrounded\nswallow\ntouches\nvirus\nwarren\nwondrous\nadaptation\nadmired\naluminum\nbuyer\nchannel\ncharter\ncheek\ncited\nclerk\ncombat\ncontinual\ncurb\ndelicious\ndependent\ndoubts\nentertain\nflocks\ngary\ninspector\nintermediate\ninvolve\nlease\nlehman\nlighted\nmaintaining\nmenus\nnaval\noft\nparody\npennsylvania\nporn\nportrayal\nprinting\npronounced\nseeds\nseventy\nshopping\nstir\nsummit\nsunk\nswiftly\ntextile\nthreescore\ntodd\nuncertainty\nunseen\nabode\nadmire\namy\nassignment\nbands\nbland\ncenturies\nclothing\ncookies\ncult\ndedicated\ndressing\nengage\nexpanding\nfortunately\ngardens\ngorgeous\nhandful\nintervals\ninvest\nknocked\nkuwaiti\nleather\nlightly\npains\npakistan\npension\nprecision\nremembrance\nroughly\nrussia\nsenator\nsends\nsits\ntheirs\nunderneath\nvictor\nwinner\nwrites\naccomplish\nacquiring\nadjustments\naffleck\nalleged\nambitious\nammon\napes\narc\narrows\nartificial\nassumption\natonement\nawarded\nbarriers\nbreakdown\nbye\ncaution\ncave\ncompelling\ncontinuous\ncultural\ndel\ndevils\ndoubtful\nelectrical\nerrors\nevidently\nflung\nfuneral\nhonourable\nhuh\nignorance\nintroduce\nisolated\nkeys\nlazy\nlords\nlunch\nmalaysian\nmessengers\nnightmare\nparallel\nplanting\npowder\npretend\nproportion\npropose\nranges\nreceives\nreferred\nremake\nsettings\nsuggestion\nsupposedly\nted\ntiger\ntiming\ntroopers\nvolumes\nwealthy\nwines\naloft\nassurance\nblowing\ncategory\nchancellor\nchaos\nchemlawn\nchiefly\nchips\nchocolate\ncomedies\ndefeat\ndefinition\ndesirable\ndivide\ndoom\nexposed\nfits\nguarantee\nhanks\nharcourt\nhighway\njoan\nlumber\nmanagers\nmargins\nmerchandise\nmitchell\nopenly\npacing\npercent\nprayed\nprotectionist\nreluctant\nrude\nsoap\nsolitary\nsticks\nstomach\nsuitable\nswept\ntoned\ntroubles\nuseless\nutility\nvague\nalternatives\namusement\nbreathing\nburlington\ncostume\ndepreciation\ndining\ndisposal\neconomies\nexecution\nexpenditure\neyed\nfoe\ngratitude\nhelen\nheritage\nlance\nlb\nlifting\nmelancholy\nmickey\nneighbours\npainfully\nplains\npresidential\nproduces\nprompt\nrandalls\nredeemed\nrefuses\nrepeat\nrespective\nsatisfying\nseasons\nsecretly\nsections\nsmiles\nspokeswoman\nstiff\nstored\nsuck\nteenagers\nthai\nthompson\ntrained\nunpleasant\nvintage\nadvertising\nappreciation\nbacks\nbend\ncatching\ncollapse\ndecades\ndefinite\ndumping\ndvd\neden\nelephant\nfeaturing\ngmt\ngrove\nhaunting\nheare\ninvestigate\nkeyboard\nknee\nleap\nmac\nmanaging\nmask\nnetherlands\nportrayed\nprobable\npunch\nschedule\nseeming\nshower\nsimplicity\nsunset\nsupermarkets\ntape\ntendered\nturkish\nunfunny\nvisually\nwhispered\nwww\nabilities\nacknowledged\nample\narrives\nbears\nbelt\ncomedic\ndirections\ndocumentary\ndownloads\ndragged\nemotionally\nexalted\nexported\nfoam\nguessed\nholmes\nhonestly\ninquiry\njuice\nkissed\nlesser\nliquor\nmadness\nmichigan\nminded\nmiti\nmodels\nnest\norganizations\nplate\nprominent\nquantity\nrational\nreaches\nrecession\nreferring\nregister\nremarkably\nrory\nsmelter\nspawn\nsplendid\nstrongest\nsupernatural\nswim\nsyria\ntales\ntoken\ntrespass\nundoubtedly\nunions\nvampires\nvaried\nwalker\nwretched\naccidentally\naccurate\nairline\nalbert\namendment\namiable\nautomatic\nbush\ncab\nclaire\ncoconut\ncontempt\ncorresponding\ncounted\ncox\ndamme\nenjoying\nfurthermore\ngordon\nhabits\nhastily\nimplement\nireland\nlloyd\nmarshall\nmassachusetts\nmexican\nmoby\nmothers\nmourning\nnearest\npacked\npg\npharisees\npresumably\nrefining\nremark\nreorganization\nshipped\nsinking\nsmitten\nspin\nsteam\nsweden\nswitching\ntops\ntrunk\nvotes\naids\nappearances\nautomobile\nblast\nbroadcasting\ncanst\ncassius\ncontroversial\ndecrease\ndepths\ndespised\ndrill\ndrives\nedom\nensure\nexamined\nfeare\nfights\nforming\ngrandmother\nhire\nindication\nliabilities\nmama\nmaurice\nmotive\nmurdered\nneutral\nnotable\nnotably\npan\nparted\npearl\npope\nreasonably\nrestraint\nrifle\nseal\nsecured\nsmells\nsoviets\nstabilise\nstabilize\nstressed\nsurprises\ntariff\ntrap\ntrash\nunity\nwire\nacknowledge\nacquires\nad\nairport\nandy\nann\napt\narray\navenue\nbeautifully\nbeet\nbrake\ncatherine\nchecked\ncheese\ncirculation\ncommander\ncomputers\nconcrete\nconfirm\neep\neighth\nfestival\nforsaken\nfreeman\ngalahad\ngrapes\nillegal\nindifference\nloveit\nmurray\nneighborhood\nnominal\nnorthwest\nos\npresentation\nprobability\nprotected\npulls\nsang\nsantos\nseized\nselecting\nshoe\nsingers\nsuspected\ntempted\ntrace\ntricks\nuncomfortable\nwears\nasses\nbattles\nbedroom\nbelonged\nbidding\nblocked\nboots\nbosom\ncharity\ncircles\ncoasts\nconsistently\ndebts\ndisk\nfavourable\nforgiven\ngreg\nhee\nhitting\niii\nindiana\ninjury\ninterim\njehoshaphat\njericho\nkenneth\nlandlady\nleaned\nlebanon\nlicense\nmuseum\noppose\nparade\npays\npicking\nprogressive\nprotagonist\nproven\nreferences\nregularly\nroar\nscared\nsincere\nslasher\nsober\nsounding\nsouthwest\nstays\nswedish\ntag\ntankers\nticket\nvillains\nwaiter\nweeping\nabomination\nalter\nannie\nanswering\nattraction\nbalances\nbankruptcy\nbother\nbroadcast\nbroadly\ncloses\nconcentrate\ncream\ndamaged\ndeclares\ndirectory\ndisappear\nearnestly\nedition\nefficiency\nexpenditures\nexplosion\nfolk\nhearkened\njudging\nkindly\nmarquis\nmouths\nobligations\noddly\noliver\nox\npaused\npermission\npesos\nportrait\nquestioned\nrailway\nreader\nrefuge\nrelate\nsaint\nshocked\nsidney\nsimilarly\nsixteen\nties\ntimber\nvine\nwithdraw\naccepts\nadvantages\nambition\nbetty\nbows\ndevour\ndragging\nel\nelections\nenabled\nexeunt\nexposure\nflicks\ngoals\ngrim\nharbor\nharpooneer\ninfo\ninsisted\nintervene\nintervened\ninventories\nlooke\nmagnificent\nmirror\nmm\nmonstrous\nneighbors\npiano\npraised\nqualified\nreuter\nsharing\nslightest\nstatue\nstopping\nsuspension\nun\nvisuals\nvoiced\nwee\naccepting\naccordingly\nadministrative\naffiliate\nbackward\nbasin\nbegged\nbeseech\nbildad\nbrokerage\ncautious\nchimney\ncivilization\nclimb\ncolours\ndislike\ndrain\neducational\neligible\nexperiments\nformation\nfundamentals\ngracious\nguaranteed\nhotels\ninstalling\nintimate\njedi\nlocks\nmediocre\npassengers\npeleg\nplacing\npostings\nprocesses\nprovoking\nrepent\nreporter\nreveals\nsails\nshaped\nslower\nstarship\nstartled\nsubordinated\nsuspects\ntoilet\nafar\nafflicted\naggressive\nambassador\nantony\nbind\nbleak\nblew\nbusinessmen\ncoloured\ncomrade\nconsume\ndeliberately\ndisabled\neldest\nemerge\nexamination\nfewer\nflows\nflynt\nforcing\nfourteen\nfrankly\ngangster\nglimpse\nguards\nharp\nhereafter\nhood\ninadequate\njoys\nlasting\nlicences\nmajesty\nmayor\norchestra\npassenger\npatterns\npeaceful\nperformers\npine\npioneer\nporter\npreceding\npurely\nredemption\nrejoiced\nreuben\nrolls\nscope\nshark\nstole\nsubway\nterritory\nthinke\ntreasures\nvarying\nwelfare\nwishing\nabbey\nargentina\nate\nattitudes\nban\nbaptized\nbits\nbringeth\nbrush\nbrutal\nbullet\ncandidate\ncharacterization\nchin\nchoices\ncoin\ncommunism\ncompete\nconstructed\ncreator\ndisturbed\ndivisions\nelder\nexchanges\nexpire\nflies\nfunniest\ngoofy\nhank\nindonesian\ninsane\ninsight\ninstruction\ninsult\nlaying\nlikable\nlinda\nlivestock\nmixture\nmurders\nnodded\nnomination\nodds\noutward\npatients\npicks\nplots\npoets\nprayers\nquarrel\nrams\nrealm\nreeves\nrip\nsample\nscenery\nscrolling\nsemiconductors\nshaken\nspencer\nstewart\nstrain\nswallowed\nsworn\ntheatrical\nthrows\ntide\ntoys\ntween\ntwins\nwagner\nwreck\nadvancing\nanode\napples\napproaches\nbeds\nblanket\nbrains\ncargoes\nciticorp\nclaimed\nclimate\ncontest\ncorruption\ncries\ncurve\nderived\ndigital\ndoctors\neh\neighteen\nenhancement\nenvy\nexplaining\nfees\nfires\nflaw\nfounded\nfunctions\nhart\nhatred\nincorrect\nindicates\ninferior\nintegration\nkorean\nlikeness\nlincoln\nmaggie\nmalcolm\nmechanical\nmetropolitan\nmobile\nmomentum\nmotives\nnavigation\nnonetheless\noccasions\npanic\nphillips\npistol\nranged\nresidents\nrode\nsandler\nseasonal\nselfish\nserial\nstrengthened\nsware\ntwentieth\nurges\nwast\nwhereby\nabominations\nant\nargentine\nawards\nbeams\nbilateral\nburns\ncherry\ncontents\nconvey\ncrooked\ndeceived\ndeclaration\ndevelops\ndisclose\ndoubted\ndownloading\neagle\nelected\nensemble\nexpressions\nfarewell\nfavorable\nfilmmaker\ngenuinely\nhalfway\nharpoon\nharsh\nheating\nheels\nherd\ninherit\ninjured\nkindled\nlimbs\nliners\nlinux\nloins\nmantle\nmanufacturer\nmarrying\nmeantime\nmerits\nmud\nnelson\nnoah\nnorton\nobsessed\noffence\npassionate\npassover\npasture\npreached\nprevailed\nrealism\nrealizes\nsailed\nsank\nscarlet\nsessions\nsheriff\nsights\nsolely\nstirred\nstraw\nsulphur\nsustain\ntemptation\nthieves\ntoronto\ntransition\ntrapped\nuppercross\nvocational\nwhisper\nwidespread\nwritedown\naide\nargued\nassociate\nassuming\nbelieving\nbite\nblues\nbursal\ncandy\ncannibal\ncarolina\ncircuit\ncreditors\ndamon\ndates\ndeparture\ndesires\ndestined\nelderly\neleazar\neliminate\nenthusiasm\nestablishing\net\nexecutives\nfeeding\nflexible\nfools\nforbid\ngeneric\nhelpless\nhitherto\nimmense\ninterference\njealousy\nlandscape\nlaughable\nlighter\nmales\nmessages\nnerves\nobjection\nobservations\nperpetual\nplastics\npromotion\npublicly\npuzzled\nrape\nrejects\nremoving\nrepair\nrows\nroy\nseagal\nseparation\nstealing\nsteals\nsurpluses\nsuspicious\ntemporarily\nthankfully\nthug\ntracks\ntrends\nturtle\ntwin\nuk\nvaguely\nvisions\nworshipped\nallowance\namazed\nanna\nape\nbarn\nbarry\nbeans\nbeware\nbowels\nbroker\nbutcher\ncaring\nceremony\ncheesy\ncomplexity\ncontrolling\ncowboy\ndancer\ndated\ndesigns\ndestroying\nfairchild\nfurious\nharville\nholder\nillness\nimprovements\ninvested\njon\nleaf\nlessons\nlodge\nninety\nninth\nnorrington\nnudity\nolive\npartial\npenn\npricing\npurse\nrefreshing\nrestless\nselah\nsetup\nshores\nslapstick\nswing\nunadjusted\nweaker\nwebsite\nacid\nadvise\naffectionate\nagaine\nalongside\nbutt\ncalmly\nclad\nconceal\nconversion\ncooking\ncoupled\ncousins\ncustomize\ndared\ndaylight\ndefiled\ndesigner\ndiscussing\negg\neric\nfearful\nfocused\nforemost\nfrost\ngad\ngalilee\nguidance\nhonesty\ninstallation\nironic\njesse\njoining\nlas\nlawyers\nli\nloads\nmamma\nmildly\nmusicians\nnoir\nphilippine\nplugin\npublication\nreception\nrestricted\nrico\nshouldest\nsings\nsixty\nslip\nsophisticated\nsour\nspeaketh\nsuffers\nsupports\nsweeping\ntaketh\ntense\ntransferred\nui\nvalid\nviacom\nvisitors\nwashing\nyr\namc\namorites\natlanta\nbales\nbowl\nbreathe\ncancel\ncomprehend\nconfounded\nconfrontation\ncongo\ncroft\ndictionary\ndig\ndraft\nexceptions\nexplore\nfaults\nfence\nfowls\nframed\nfugitive\ngaze\nhaunted\nhebron\nhello\nhopeless\nhunger\nignore\ninterval\nkellynch\nkicked\nmargery\nmiami\nofficially\norleans\npen\npencil\nphenomenon\nplastic\npleasures\npoland\npreach\npro\nprovinces\nreact\nreplacement\nrespects\nrevelation\nrobinson\nruined\nscare\nshelf\nslavery\nspirited\nacademic\nactively\nalgeria\nassault\nboogie\nbury\ncinematographer\nclich\ncolorful\ncomplain\ncompliment\nconclude\ncooperate\ndeficiency\ndepressing\ndespise\ndestiny\ndifferently\nefficient\nembarrassing\nemerged\nexceptional\nexclusive\nexporting\nextending\nfarms\nfortunate\ngraham\nhans\nidentical\nie\ninquiries\ninterstate\nleisure\nlevi\nluckily\nmartha\nmiracle\nmist\nni\nnigga\npeoples\npredict\nprovoke\npursuing\nrebel\nreductions\nreliable\nshortcut\nsleepy\nsown\nsphere\nstare\ntechnologies\nventures\nwax\nwelcomed\nwhalemen\nwilliamson\nyoke\nali\nalliance\nalternate\narmageddon\nattendant\nbelgium\nbelonging\nblockbuster\nbottles\ncanal\ncannon\ncart\ncliche\nclicked\nclue\ncommenting\ncon\nconstitution\nconvenience\nconvention\ncrush\ncyacq\ndemanding\nderek\ndoings\nexchequer\nfeatured\nfellows\nfever\nforests\ngag\ngigantic\ngoat\ngoodman\nhadn\nhedge\ninclination\nishmael\nlabel\nlesbian\nmap\nminers\nmotions\nmultiply\nnarration\noct\noffend\noutrageous\nparticipate\nplug\nportland\npoverty\nprimitive\nreactions\nremarked\nrendering\nresidential\nresurrection\nrio\nrounded\nsalary\nsealed\nshy\nspreading\nsteele\nsuited\nterminated\nupset\naddressed\nadopt\naims\nannually\nattract\nbastard\nbenwick\nbuilders\ncandle\ncitizen\ncleveland\ncommonly\ncomparisons\ndaddy\ndaring\ndave\ndependence\ndifferentials\ndot\ndow\ndownright\neconomics\nencounters\nesther\nexpired\ngrandfather\nharold\nhorsemen\njake\njolly\nkim\nlanding\nlocations\nlogical\nluc\nmagnitude\nmuscle\nneil\nnuts\nobserving\npermits\npoultry\npreserved\nrally\nreminds\nreminiscent\nrepaired\nresponding\nrigid\nsanctify\nscorsese\nscribe\nsoutheast\nspecialty\nstem\nsubdued\ntestament\ntongues\nvenice\nvirtual\nwatches\nworlds\nyoungest\nadapted\nallies\narrange\narrested\nassociations\nbang\nbeam\nbroadway\nbugs\nbuzz\ncancer\nchased\ncheer\nclaude\nclients\ncliff\nclooney\ncomplaints\ncomrades\ncope\ncusack\ndances\ndepended\ndesolation\ndisappears\ndixon\ndrank\neased\neastward\nelevator\nems\nfigured\nfir\nfolders\nfrancis\nfunding\ngenerate\nghosts\nhalloween\nindicator\nlamps\nlanguages\nlap\nlions\nluke\nmacbeth\nmargin\nmedicine\nmerged\nnails\nnathan\nobedience\notter\npetition\npigeon\nportions\npotentially\nprudent\nrushing\nschwarzenegger\nscribes\nseth\nshortfall\nsignals\nslowed\nsluggish\nstrings\nsuburban\nsunlight\nsweep\ntech\nthoughtful\ntidings\ntrailers\ntrilogy\nunjust\nvicious\nvoluntary\nwagon\nwounds\nwrestling\nabandon\napparel\napprovals\nbethel\nbrace\ncedar\ncharacteristics\ncoastal\ncomprised\nconfined\ncontroversy\ncorpse\ncorrected\ncourtroom\ndamascus\ndecidedly\ndew\ndivorce\ndowns\ndreamed\nencountered\nethan\nfishery\nflashbacks\nfob\nhardened\nhelm\nhopefully\nibc\ninspiration\ninward\nkeaton\nkhrushchev\nkinda\nlip\nlowering\nloyal\nmart\nmeals\nmelvin\nmemorial\nmidland\nmingled\nneighbourhood\nnicholson\nobeyed\nplunged\npuerto\nreaders\nreads\nrestaurants\nsalute\nscreenwriters\nseverely\nsharks\nsprings\nstretching\nsurvivors\ntailor\ntemperatures\nthereon\ntrades\nunconscious\nwhip\nworm\nalaska\nanticipation\narch\narguments\nawaiting\nawe\nbedevere\nblemish\nbrad\nbridges\nbullets\nbursting\nchasing\ncleaning\nconsiders\ncontinent\ndowntown\negyptian\nesteem\neugene\nexisted\nfargo\ngene\nglenn\nglorified\ngraven\nhappier\nherds\nhideous\nhomer\nindirectly\njointly\nkay\nlambert\nlyme\nmagical\nminus\nnarrator\nneighbor\norgan\nperception\npet\nplacement\nprinted\nprolonged\npulse\nrebellious\nrecommendations\nrely\nremind\nripley\nroared\nseparately\nshifts\nspeculative\nstallone\nstartling\nstrife\nsynopsis\ntanker\ntesting\ntrio\nusers\nvaliant\nwarfare\nwarn\nwarriors\nabimelech\nadvisory\naerospace\nannouncing\narticles\nbetrayed\ncared\ncarlo\nchaldeans\ncliched\ncommanding\ncommunique\nconditioned\nconservation\ncorporations\ncurtain\ndavy\ndeadline\ndeemed\ndi\ndiplomatic\ndisc\ndocuments\ndowne\nelegance\nenergetic\nengines\nfanny\nfro\nfuckin\ngravity\nhabitation\nhears\nheroic\ninduced\nirony\njumping\nladder\nlifetime\nlog\nlone\nlou\nmansion\nmobil\nmonitor\nmonsters\nnegroes\nnortheast\nowen\nparticulars\npintel\npleasantly\npond\nprevail\nprovoked\npurchasing\nransom\nrealization\nrecurring\nsammy\nsanctified\nsciences\nsincerity\nsquad\nsticking\nstrait\nstricken\nsung\nsweetness\ntechnically\ntedious\nterry\nthirds\nverhoeven\nviolently\nvivid\nvows\nvulnerable\nwander\nwider\nwithdrawn\nabuse\nacidity\nalec\nbaal\nbitterness\nbuck\nbusinessman\ncertainty\ncheeks\ncherubims\nchronicles\nclient\ncommunicate\ncompact\ncompetitiveness\ncruelty\ndelaware\ndemocrats\ndillon\nembassy\nengineer\nfactories\nferruzzi\nferry\nfurnace\nguided\nillusion\nindirect\nirritating\njournal\nkingdoms\nlire\nloveth\nmarginal\nmissouri\nnakedness\npanels\nplantings\npsycho\nqu\nrail\nrebate\nrep\nrestrained\nrichards\nross\nsa\nscorn\nspout\nstaged\nswinging\nswitzerland\ntarry\ntends\ntested\nthirteen\ntransformation\ntread\ntreats\ntrumpets\nunbelievable\nunusually\nunwilling\nabner\nabsorbed\napostles\navoided\nbases\nbeckett\nboosted\nbreed\nbud\nchoosing\ncolony\nconfession\ncritique\ncss\ndeaf\ndismal\ndismissed\ndrinks\ndynamic\nenters\nexpressing\ngallery\ngradual\ngrasp\ngraves\ngrip\nharmless\nheauen\nheroine\nhomage\nhowbeit\nidiot\ninspection\ninteraction\nlaos\nlists\nmoisture\nmorality\nnightingale\nniro\nnotwithstanding\nordained\noriginality\nphotography\npolish\npopularity\nproceeding\npromptly\npump\nreasoning\nrecreation\nregistration\nrelating\nretaliate\nsands\nshamrock\nshechem\nsheets\nsized\nspeeches\nstylish\ntip\ntooth\ntransparent\nupstairs\nvoid\nwaking\nwins\nwireless\nworkforce\nyielded\nadmirable\nalbeit\namazement\nangles\nappointment\natom\nbaked\nbalaam\nbald\nbanner\nbinding\nborrow\nbounds\ncalif\ncheaper\ncigarette\nclimactic\nconceive\nconfirmation\ncooperative\ndash\nden\nedges\nemploy\nessence\nexplored\nexploring\nfeeble\nfidelity\nforsake\nframes\nfranchise\ngrieved\nheave\nhusbands\nian\ninability\niowa\nirving\njudgement\nkicking\nmates\nmeaningful\nobjections\noppressed\npledge\npriority\nprosper\nrecollect\nrelieved\nrestart\nscrewed\nshrek\nskull\nspecified\nspectacle\nsport\nstripped\nstunts\nsurge\nthrillers\ntones\nunleavened\nutilities\nvon\nwarrior\nxml\nzambia\naccuracy\nadverse\nagitation\nanguish\nbonn\nbrilliantly\ncandidates\ncoke\ncollect\ncommentary\ncomponent\ncondemned\ncuriously\ndating\ndearest\ndeliveries\nexecute\nexpose\nfancied\nfowl\nfright\nfuller\ngaining\ngloom\nhandles\nharvard\nheir\nhi\nidol\nincentives\nintroduces\nisles\njacques\njs\nlanded\nleigh\nlme\nmasses\nmeg\nmordecai\nmultiplied\nnarrowed\noptimism\noverhead\nowed\npioneers\npitt\nplanes\npolitically\npreaching\nprompted\npussy\nreceipt\nresidence\nreviewed\nrevlon\nroaring\nsaves\nsinister\nsockets\nstakes\nstructured\nsuspenseful\nsyrians\ntarlton\ntenders\nthorns\nthread\nthrills\ntrials\nuneasy\nvanished\nvariation\nwisely\nzedekiah\nabram\nadvocate\nalcohol\nanyhow\napostle\nappeals\narquette\narriving\nauthentic\nbacklog\nballet\nbeneficial\nblocking\nbodily\nbreeze\ncandles\ncarryforward\ncarved\nclumsy\ncolleagues\ncommunities\ncompensation\ncontainer\nconvert\ncreek\ncrimes\ncromwell\ncurtains\ncutler\ndanish\ndemonstrated\ndepression\ndescend\ndevoured\ndilemma\ndonnell\nemploys\nexplicit\nfluid\nfragrant\nfreezes\ngale\ngarbage\ngingerbread\ngoddard\nhorribly\nhush\nimplications\nindicators\ninfluenced\ninherent\nintegrity\ninvariably\njeffrey\njumps\nlawn\nmanifest\nmarty\nminimal\nminnesota\nnbsp\nobjectives\noutright\npillar\nproductive\nraiment\nralph\nrat\nrefer\nreiterated\nreliance\nrepay\nresponded\nrevealing\nrisks\nsentimental\nskip\nsomers\nspark\nstepping\ntasted\nterrorist\ntopic\ntrump\nuninteresting\nupwards\nusx\nwhites\nwillingly\nadmission\namstutz\naudio\nawesome\nbarren\nbee\nbethlehem\nbulworth\nbushel\ncarol\ncereals\ncharlotte\nclassics\nclosure\ncollective\ncommands\nconsisting\ndelegation\nechoes\nelisha\nenquire\nerotic\nexpires\nextends\nfaded\nformally\nfortnight\nfu\ngiants\ngovernors\ngravely\nhawk\nherbert\nhunters\nimpatience\nimportantly\nindians\ninstructions\nintimacy\nlaboratory\nlaer\nleaue\nliking\nloser\nloudly\nmaintains\nmercury\nnebuchadnezzar\nnotch\nobnoxious\noilseeds\nonset\nowne\nparable\nparlour\nparting\npike\npizza\nplates\nportfolio\nprev\nprogresses\nprophesied\nproposes\nraces\nragetti\nrainbow\nrainfall\nreject\nresemblance\nresort\nrick\nrig\nshades\nsiege\nsinners\nslid\nsliding\nsly\nsometime\nstiller\nstreams\nsucked\nsummary\nsymbolic\nthreats\ntitles\nwont\nairplane\nalarmed\naltars\namused\napi\nasher\nastonishing\nbashan\nbliss\nboast\nbombs\nboot\nbowling\nbroderick\ncamps\ncarriages\ncasino\ncelestial\nchant\nchristians\nclubs\ncomfortably\ncompeting\nconfidential\nconsiderations\nconversations\ncostly\ncursor\ndelivering\ndemonstrate\ndescended\ndescribes\ndeserted\ndiscipline\neagerness\nedelman\nembarrassment\nendureth\nentertained\nfellowship\nfitted\nflaming\nfoundations\nfurnished\ngillette\ngloomy\ngoogle\ngraduate\nguido\nhatter\nhighlight\nhk\nhoffman\ninformal\ninquired\ninterviews\njehu\nkaren\nkeeper\nlaban\nleo\nlieth\nlifeless\nlofty\nlogin\nlungs\nlust\nmanufactured\nmarble\nmistakes\nmold\nmorse\nnigel\nobliging\npatent\nphilosophical\nphysically\nportugal\npublicity\nquaid\nraging\nremotely\nromeo\nron\nscrew\nshaw\nshifting\nsingular\nspan\nspectacles\nspinning\nstructural\nstudios\nsubstitute\nswap\nswitched\ntextiles\nthreaten\ntrans\ntraveling\ntucker\nunnamed\nurgent\nusa\nverse\nwarmly\nwestminster\nwillingness\nyielding\naccompanying\namoco\namounted\napplause\nappoint\narrest\nbats\nbeverly\nbuddies\ncereal\ncock\nconfronted\ncredibility\ndenmark\ndepartments\ndiaz\ndraws\ndropdown\nduck\nduvall\ndwelleth\nelect\nelectricity\nemerging\nen\nencouragement\nenjoys\nevaluation\nexquisite\nflexibility\nfrequency\ngladness\nglow\nhaired\nhalted\nhinted\nhurricane\nicahn\nimporters\niniquities\ninstitutional\ninstructed\ninterpreted\nkillers\nleonard\nlisa\nmacd\nmagnetic\nmatches\nmeasuring\nmorris\nnaive\nneedless\nnewest\nnicholas\nnorman\nobscure\noklahoma\nperil\npersonalities\nplanets\npont\npotent\nprofitability\nproportions\nprosperity\nprotestant\nrealizing\nregistrations\nrequiring\nreviewing\nsavour\nseventeen\nshells\nshone\nshorter\nsickness\nskies\nsoup\nspared\nstab\nsubjected\nsubplots\nsuffice\nsuggestions\nsuite\nsweat\nterminator\nthickness\nthorough\ntoolbars\ntransformed\ntremble\ntube\nupside\nurging\nvariable\nvow\nwan\nwaving\nwithdrew\nwolf\nwoolworth\nworthwhile\nabrupt\nabyss\naccurately\nagony\nanaconda\nantonio\navoiding\nbabies\nbarrymore\nblend\nbrands\ncasual\nchampagne\ncommissioner\ncomposer\nconnor\ncos\ncoverage\ndense\ndisable\ndisbelief\ndish\ndiverse\ndreary\nemery\nenthusiastic\nequipped\nfin\nfog\nfold\ngloves\nharmony\nheartily\nhull\nhum\nibm\nimbalances\ninventive\nkeanu\nkilos\nlegendary\nleveraged\nlieutenant\nmeasurements\nmillionaire\nmurmured\nmyth\nnewman\nnotions\nobligatory\nontario\noverboard\npete\npilate\npockets\nprairie\nprevailing\nprivacy\nquebec\nreaffirmed\nrecollection\nreleases\nresorts\nrested\nsally\nscarce\nscatter\nschumacher\nscreening\nseest\nsequels\nsergeant\nsovereign\nstrained\nsucks\nsunrise\nsurvival\nsurviving\nsymbols\ntashtego\nthrice\ntolerable\ntotalling\ntravels\ntropical\nunsuccessful\nuttered\nvein\nverbal\nvigorous\nwallace\nwithdrawal\nworkmen\nyearly\nadoption\naegean\naggregate\nanniversary\nappetite\napplying\nbasement\nbasketball\nbehaved\nborrowed\nbreach\nbrightness\nbroader\nbubble\nbucks\ncalf\ncapsule\ncats\nchallenging\nchorus\nclown\ncommonwealth\nconcepts\nconclusions\nconsulted\nconvicted\ncriminals\ndazzling\ndeaths\ndeficits\ndefine\ndenying\ndetermining\ndispleased\ndisputes\ndoomed\ndrawings\nduel\neateth\neditorial\nembrace\nenforcement\nexamining\nexclusively\nexplosions\nflawed\ngambling\ngeneva\ngryphon\nharpooneers\nharvey\nheck\nherrington\nidiotic\ninjustice\ninland\ninra\nirresistible\njosiah\njournalists\nlebowski\nlloyds\nmechanism\nmerciful\nmiriam\nmommy\nmourn\nmystical\nna\nneglected\nnova\nnv\noccupation\noccurrence\nophe\npdvsa\npin\nplatinum\npositively\nquirky\nrebuke\nreforms\nrental\nrupees\nsandra\nsepulchre\nshillings\nsnare\nspade\nspecially\nstature\nstaves\nstraightway\nstrive\nstupidity\nsunny\nsustained\nteams\ntelecom\ntelegraph\nthirst\nthrilling\ntransgression\ntrigger\ntunes\nupcoming\nvalour\nvile\nvirtues\nalt\nattentions\naviation\naxe\nberries\ncache\ncanaanites\ncarrier\nchart\ncoats\ncollar\ncolonial\ncommented\ncompensate\ncomplained\nconsolation\ncontributions\ncycle\ndamsel\ndarted\ndemocrat\ndetroit\ndiscourse\ndynamics\neats\neducated\nembarrassed\nentity\nexcessively\nfig\nfinn\nfitting\nfluctuations\nfocuses\nforbidden\nfrantic\ngrease\nhats\nheavier\nhitchcock\nhype\nillustrated\ninfinitely\ninsects\ninvolvement\njessica\nkung\nlantern\nleaped\nmakeup\nmarching\nmaryland\nmiguel\nnazi\nparticipants\nperpetually\npersuasion\npoetic\npredecessor\npremier\nprogramme\nprotein\npublishing\npunish\nqtrly\nrang\nrapeseed\nrecording\nreese\nrespected\nretreat\nrevolutionary\nrichardson\nrigs\nringgit\nsegments\nsensation\nsighed\nslope\nsow\nsri\nstall\nsuperficial\ntalb\ntastes\ntempered\ntore\ntowers\nual\nvalleys\nvexed\nwhoso\nwitnessed\nwoke\nwti\nya\nyahoo\nzeal\nabsorb\nabstract\nace\naddressing\nadvisers\naforementioned\naided\namidst\nbargain\nbehave\nbondage\nbuilded\ncameras\ncareless\ncarryforwards\nchartered\nchases\ncolorado\ncombine\ncomparatively\ncomprehensive\nconnecticut\ncooling\ncounties\ncreeping\ncuban\nda\ndemocracy\ndenver\ndescribing\ndoubled\ndrowned\ndrums\nearliest\nearthly\nengineers\nenhance\nepisodes\nevaluate\nexpedition\nfenced\nfishes\nflashback\nforeigners\nfurnish\ngazing\ngrab\ngrandma\nhaman\nhebrew\nidentification\nimagery\nimpressions\nindications\njacobs\nladen\nlengths\nlitigation\nlobby\nlodged\nluxury\nmainstream\nmason\nmentally\nmiracles\nmorton\nmtv\nneuer\nnude\nongoing\noutline\npaintings\nparking\npee\npenis\nphysics\npops\npotato\nprostitute\npublications\nquestioning\nradical\nrefresh\nresource\nretire\nrevolves\nrobbed\nrobe\nsaviour\nseeth\nshoots\nshultz\nsketch\nslender\nsocieties\nstatute\ntackle\ntermination\nthereafter\ntickets\ntransgressions\nunexpectedly\nutilization\nvendor\nvineyards\naffiliated\naging\nambiguous\namended\napr\nashore\nbetray\nbleeding\nboiling\ncarbon\ncd\ncheated\ncheating\nclaiming\nconsist\ncouch\ncpu\ncrab\ncrosses\ncrushed\ndangers\ndelete\ndestinations\ndiet\ndivers\ndough\ndrift\ndrum\nellie\nerect\nescapes\nevils\nevolution\nexcluded\nexperimental\nfeedgrains\nfishermen\nfulfill\ngown\ngrin\nhowl\nironically\njoins\njurassic\nlaunching\nlegislative\nmeek\nmeyer\nmichelle\nnephew\nnorland\nominous\nowing\noxford\npestilence\nplead\npolished\npossesses\nprocessors\nprotectionism\nrejoicing\nrelevant\nrenault\nrepurchases\nrevision\nrosamond\nroses\nrotterdam\nrussians\nscreams\nsentiments\nshines\nshops\nsidekick\nslack\nsnap\nsparks\nspoilers\nstance\ntap\nteens\nthanksgiving\nthrill\nthumb\ntrains\ntranscanada\ntriangle\ntypically\nvienna\nvulgar\nwhereon\nzadok\nacre\nadviser\natomic\naxis\nballadur\nbean\nbin\nbitterly\nblacky\nbloom\nboulnois\ncakes\ncamels\ncampus\ncashier\ncategories\ncgi\nchuck\ncigar\nclassical\ncloset\ncolored\ncompetent\ncomplexion\ncomprising\nconception\nconsulting\nconsuming\ncontacts\ncontracted\ncrashed\ndamages\ndamp\ndeceive\ndenial\ndiameter\ndine\ndistinctly\ndistricts\ndomain\ndoubtless\neffectiveness\neliminated\nentries\nephod\nest\neuery\nexercised\nexhibit\nfastened\nfighter\nfisherman\nfloated\nfolded\nfriction\ngermans\nglowing\ngrants\nhanged\nhanson\nheareth\nhearst\nheated\nheights\nhorrid\ninept\ninfluences\ninstallment\nitc\njehoiada\njunk\nmounting\nnail\nneedle\nneedy\nnineteenth\noffspring\norganic\npavement\npepper\npill\npledged\npluck\nplucked\npod\npolicemen\nprocession\nprojections\npropaganda\nquaker\nrecapitalization\nrefrain\nrefusal\nresigned\nrevive\nrevolving\nropes\nruth\nsitcom\nsolutions\nsonny\nspacey\nspecialist\nsprinkled\nstark\nstems\nstorytelling\nstraightforward\nsums\nsuspend\nswell\ntactics\nupdated\nurls\nvacant\nvary\nvictoria\nwaitress\nwarns\nweaver\nwig\nyonder\nactresses\naddresses\nads\nadultery\naffects\naffiliates\nalicia\nanxiously\narabian\nascend\nattain\nauthors\nawfully\nbacking\nblamed\nbred\nbrowsing\ncarpet\ncask\nchrome\nconsecutive\nconsortium\nconveyed\ncostner\ncounting\ncraven\ncrazed\ncredited\ncrowds\ncynical\ndarker\ndeepest\ndelhi\ndiana\ndimension\ndistributor\ndozens\ndusk\nedit\nedited\neisenhower\nexotic\nfantasies\nfiber\nfinancially\nframework\nfruitful\ngresham\nharvested\ninconsistent\ninfamous\ninflationary\ninserted\ninvasion\ninvented\ninvite\njoyful\njudd\nmafia\nmaple\nmarie\nmarvellous\nmaturing\nmenacing\nmentioning\nmuscles\nmuttered\nnightly\nobligation\noctane\nopposing\nowe\npail\npatiently\npetrobras\nphrases\npierce\npouring\nproclaim\npuzzle\nracing\nrecalled\nrepeating\nresentment\nrobbery\nruins\nsachs\nsalomon\nschemes\nscotland\nsideways\nsilk\nsimeon\nskirt\nsodom\nspaces\nspotlight\nsprung\nstained\nstruggles\nsuperiority\ntenderness\ntoes\ntorture\nveil\nwatery\nweinberger\nwes\nwidth\nwinston\nwiped\nwong\nwroth\nagenda\nalabama\nallocation\namateur\napplies\narguing\nash\nbahrain\nbeatty\nbesought\nbesson\nbestowed\nblond\nboldly\nbubbles\nbushes\ncandlestick\ncatches\ncauldron\nchallenged\nchooses\ncolt\ncolumns\ncomet\nconnections\nconsult\ncord\ncorkscrew\ncorny\ncourtesy\ndashed\ndebit\ndepp\ndescending\ndirectorial\ndiscovering\ndiscretion\ndiseases\ndisgusting\ndistinguish\ndiversified\ndrags\nellen\nendearing\neternity\neuen\nfist\nformulaic\ngem\ngoldman\ngraceful\ngratuitous\nhog\nholden\nhomeless\nhoneywell\nhousekeeper\nhunted\nimpatiently\nimpulse\nincentive\ninfant\ningredients\ninhabited\ninsists\nisle\nlakes\nlawsuit\nloyalty\nmeadows\nmetro\nmilton\nmoonlight\nmorn\nnaphtali\nnicolas\nnigeria\nnyu\noats\noxygen\npam\nperfume\nphilistine\npiled\npol\npots\nprinze\nredeeming\nrehoboam\nremembering\nrequests\nresembles\nridge\nrobot\nroth\nsane\nserver\nsharon\nshowers\nsleeps\nsporting\nstereotypes\nstranded\nsuccession\ntennessee\ntissue\ntitled\ntravelling\ntrite\ntyler\nunderwater\nvertical\nvillager\nvince\nwhispering\nwisconsin\nyarn\nafg\nannounces\narizona\nassessment\nattentive\naug\nazariah\nbells\nboxing\nbrooding\ncaterpillar\ncatholics\nchairs\nchannels\nchecking\ncigarettes\ncivility\nclarity\ncomdata\ncomforted\ncompliments\ncomposure\nconnect\ncontinuously\ncrimson\ncrucified\ncurbs\ndelegate\ndelicacy\ndesktop\ndetectives\ndisastrous\ndll\ndoest\ndonwell\ndrexel\nduly\nendured\nexporter\nfable\nflashy\nfoes\nfraud\nfrustrated\ngalaxy\ngardener\ngear\ngestures\ngibeah\ngm\ngoest\ngrievous\nguilder\nhay\nheal\nhearty\nhelpful\nholiness\nintegrated\niraqi\njeopardy\njoash\nkarl\nkentucky\nkilo\nkm\nlaboratories\nlace\nlacked\nleaping\nlegends\nlethal\nliar\nlined\nmadison\nmanchester\nmeasurement\nmercantile\nmoody\nmotionless\nmuscari\nnah\nnigger\noppression\nordell\norderly\noutlined\npassions\npaxton\npotter\nprevents\npurity\nraymond\nrealities\nrealty\nrelies\nresidue\nresponses\nricher\nrosse\nscenario\nsnakes\nspa\nspecify\nspeculated\nspotted\nsqueeze\nstale\nstout\nstrengthening\nsubsequently\nsue\nsuggesting\ntensions\nterrifying\ntheories\nthreatens\ntiresome\ntrembled\nwaits\nwang\nweed\nwendy\nwinding\nwk\nyankee\nadjust\naffections\napprobation\nappropriately\nasshole\nassumes\naught\nawhile\nbachelor\nbarney\nbattlefield\nbeare\nbeliefs\nbristol\nclearer\nclueless\ncoincidence\ncominco\nconcealed\ncrafted\ncrawl\ncriteria\ndanced\ndancers\ndefended\ndefending\ndefensive\ndiligently\ndisco\ndisplaying\neasing\nensues\neveryday\nexchanged\nfreak\ngloria\ngraphics\ngreeted\nguardian\nguineas\nguinness\nhernandez\nherod\nhistorian\nimaginative\nimplied\ninnumerable\ninsist\ninsulting\ninvestigating\nirrelevant\nissuing\njardine\nkilmer\nknocking\nlanka\nlengthy\nliability\nlikeable\nlonged\nmanufacture\nmatching\nmediterranean\nmelted\nmemphis\nmocking\nmusician\nmute\nmystic\nnatasha\nneglect\nniece\nnod\nnominated\nnoranda\nnought\noregon\noverwhelming\npackaging\npeaks\npersona\nplatforms\npoker\npreacher\npref\nproclaimed\nproductivity\nprophecy\nprotagonists\nproving\npumping\nquote\nrebellion\nrebels\nrefusing\nretaliatory\nrider\nripped\nsacrificed\nsamples\nsauce\nseattle\nshields\nshifted\nskilled\nsolitude\nsponsored\nspoon\nspray\nstirring\nstorms\nsynagogue\nthanked\nthreshold\ntightly\ntrucks\ntunnel\nunspecified\nusher\nvagina\nvail\nvegetables\nvolatile\nwaxed\nweighed\nwestward\nyelling\naccumulated\nalberta\nalcan\nanonymous\nappealed\narchitect\nasylum\nattributable\nbelieveth\nbishop\nbridget\nbulletin\ncanvas\ncaptives\nchristianity\ncitibank\nclosest\ncondemn\nconflicts\ncracked\ncredible\ndemonstrates\ndicaprio\ndimensions\ndisguise\ndismayed\ndismiss\ndistillate\ndistracting\ndramatically\ndreaded\nedged\neerie\nenglishman\nexhausted\nfabrics\nfatherless\nfiennes\nfinanced\nfindings\nflags\nflourish\nfreddie\nfrontier\nfucked\nge\ngolf\ngrail\nguessing\nhailed\nhapless\nharlot\nharrelson\nhates\nheh\nhides\nhop\nimbalance\nimmensely\nimposing\nimpress\nincorrectly\nindustrialized\ninterbank\njolie\njudas\nlocking\nludicrous\nmarc\nmeadow\nmeanings\nneeson\nnewmont\nnorwegian\nnowadays\nnursery\noriented\npacino\npalaces\nparcel\npentagon\nperformer\nperverse\nplanks\npoliteness\nportrays\npraises\npreventing\npronounce\nprospective\nproverb\npursuant\nrandy\nreap\nrefineries\nreluctantly\nrepayment\nresting\nrumours\nsaudis\nsearched\nsensibility\nsettling\nshear\nshouts\nskeleton\nslick\nsnapped\nsouthward\nspur\nstereotypical\nstoned\nsullivan\nswitches\ntempt\ntended\nthirteenth\nuncover\nvietnam\nwaist\nwarships\nweigh\nwhaleman\nyuppie\nalligator\namanda\nanarchist\narmour\nartery\nashley\nbally\nbangladesh\nbending\nbestow\nblush\nbrahmin\nbranagh\nbreathtaking\nbrick\nbullocks\ncarrie\ncharisma\nchildish\nciting\ncommercials\ncompassed\ncomply\ncomposition\nconstitute\ncouples\ncoward\ncracking\ncrudes\ncubit\ndarling\ndauster\ndeceit\ndeferred\ndeliverance\ndensity\ndes\ndiscoveries\nditch\ndonkey\ndove\ndrastic\nedwards\neli\nenhanced\nenvelope\nequation\nesque\nevans\nexploit\nfiend\nfilming\nfincher\nfiring\nfirmer\nfixing\nfoil\nforum\nfujitsu\ngallons\nglanced\ngory\ngroves\nhandmaid\nhenley\nhesitated\nhistoric\nhopeful\nicy\nimitation\nincapable\nindicating\ninstitutes\ninsurrection\nintercourse\ninvention\njewels\nkeepeth\nknives\nkubrick\nlawful\nlinear\nloop\nluis\nmalice\nmarines\nmercies\nmolten\nmontreal\nnaples\nneatly\nneve\nnovels\noars\nobserver\noral\noutdoor\nowes\npaltrow\nphoto\nplantation\npratt\npresumed\nprivilege\nprofane\npupil\nracial\nrelieve\nrenew\nrepresentation\nreverend\nritual\nroyalty\nsackcloth\nsayest\nschlesinger\nscreamed\nsecrecy\nsophy\nsouthmark\nspun\nsuppliers\ntame\ntargeted\ntasks\ntaxi\ntexture\nthigh\ntrademark\ntrout\nturmoil\nuruguay\nvariations\nvelvet\nvowed\nwallis\nwebpage\nwhore\nxp\nyell\nabundantly\naccordance\naccuse\nallowances\nanalyze\nantics\nappreciated\napproves\narrogant\nattribute\navailability\nbarge\nbeau\nbhp\nburnham\nburs\ncelebrity\ncentered\ncombining\ncommunists\nconnery\ncraig\ncrowe\ncrowned\ncurtis\ndealings\ndelta\ndeparting\ndoo\ndubious\necho\nexertion\nfirmed\nfloods\nflubber\nfollowers\nfont\nformidable\nfuriously\ngallon\ngoodly\nharlem\nharrison\nhenstridge\nimmortality\nincidentally\nindustrialised\ninsured\ninter\ninvestigations\ninviting\njournalist\njurisdiction\nken\nlessen\nlid\nlingering\nloosely\nmelodramatic\nmelt\nmt\nnixon\nnov\nobsession\noilseed\nol\nopponent\noriental\notto\noutset\npacking\nparticipating\npdf\nperils\npilots\npipelines\npoignant\npostponed\npreparations\npresenting\nproudly\nquinn\nrebelled\nrecovering\nrefiners\nribs\nrigging\nrobocop\nsatellite\nscandal\nscholar\nscholarship\nshaft\nshanghai\nspices\nstatistical\nstove\nstructures\nstumble\nstyles\nsuccessive\nsupplication\nsurgeon\nsutherland\ntattle\ntestify\ntia\ntimothy\ntoll\ntumbled\nunanimously\nuncommon\nunnatural\nvenezuelan\nyouthful\nzebulun\naccursed\naccustomed\nadvisor\nahaz\narranging\nassisted\naveraging\nawareness\nbanderas\nbattery\nbegging\nblossoms\nbolivia\nboosting\nbustle\ncameos\ncargill\ncastro\nchat\nchill\ncircumcision\ncleansed\nclimbing\nclues\ncolleges\ncommittees\ncomparative\ncompleting\ncompliance\nconceit\nconsisted\ncontend\ncopies\ncrashing\ndayton\ndefile\ndelays\ndeleted\ndescent\ndestructive\ndetached\ndevised\ndiane\ndip\ndive\ndominated\ndrying\neighteenth\nestimation\neuer\nexe\nfavorites\nfearing\nflowed\nfonda\nforgets\nforgiveness\nfulfil\ngauge\ngirdle\nglaring\ngriffith\nhannah\nhare\nharvesting\nheel\nherald\nhesitation\nhooks\nhopelessly\nhoratio\nhysterical\nimplementation\nincurred\nintricate\nintroducing\nissachar\njerk\njudaea\njuvenile\nkidnapped\nkindred\nldp\nleaps\nliner\nliue\nlonging\nmalkovich\nmarvelous\nmirth\nmoderately\nmorrison\nmurderous\nnameless\nnazis\nnegotiated\nnickel\nobi\nobstacles\npainter\npassages\nplotting\npolite\npoliticians\npolluted\npomfret\npoore\npresume\npretentious\nprodigious\nprosperous\npublish\nqualify\nreadiness\nreduces\nregime\nrepublicans\nrests\nreversed\nruthless\nsaddle\nsamson\nscent\nscholars\nseeketh\nseize\nshattered\nshekel\nshepherds\nshilling\nshowdown\nsleepe\nslips\nslowing\nspears\nspit\nspoof\nsprinkle\nsubtlety\nsupplier\nsurreal\nsurrender\nswore\ntank\ntempest\nterrors\ntestified\nthurman\ntimely\ntonnage\ntownsend\ntraditions\ntrim\ntrips\ntwister\nunaware\nuneven\nunrealistic\nwahlberg\nwhirlwind\nwool\nworms\nworries\naccompany\nannoyed\narising\nastronaut\nathletic\nattach\nautomotive\nbalak\nbankamerica\nbarnes\nbathing\nbecor\nblake\nbraveheart\nbullish\nbundle\ncafe\ncaleb\ncapabilities\ncareers\ncelebrated\ncoals\ncoating\ncollecting\ncommonplace\ncompelled\ncompetitors\nconnexion\nconrac\ncoordination\ncorpses\ncups\ndaisy\ndarkened\ndecisive\ndecreased\ndefeated\ndenise\ndirects\ndodge\ndogma\nduchess\ndurable\ndutchman\nedmund\neighty\nelbow\nelias\nenvironmental\nescort\nexcellence\nexceptionally\nfeathers\nfills\nflights\nforasmuch\nformat\nfounder\nfrankfurt\ngavin\ngeoffrey\nglittering\ngrotesque\nguts\nhackman\nhairs\nhenderson\nherb\nhermit\nhike\nhimselfe\nhiram\nholidays\nholland\nholocaust\nhorner\nhorrors\nhostage\nhovering\nhungary\nimporting\ninject\ninsure\njamie\njefferson\njustification\nkenya\nkidnapping\nkiichi\nlads\nlament\nle\nlent\nlikelihood\nliver\nlocals\nmagazines\nmarriages\nmatched\nmisfortune\nmolly\nmoss\nmuse\nned\nneill\nneo\nnevada\nnorthward\nnostalgia\nnoticeable\noffs\noldest\noperational\nowens\npalma\nparticles\npaste\npc\npermanently\npetrol\nphenomena\npierre\npillow\npitcher\nplight\npose\npraying\nprincipally\nprocessed\npropriety\nprudential\npsychotic\npunished\nracist\nrd\nreel\nrefund\nrelatives\nrifles\nrobbers\nromans\nrosin\nsalesman\nscrap\nsherman\nsims\nsinai\nsitteth\nslice\nsolved\nsorrows\nstunt\nsubmarine\nsuspicions\nsymphony\ntannins\ntehran\ntemples\ntherapy\ntightening\ntomb\ntriggered\ntroy\ntulip\nuncircumcised\nund\nutah\nvelocity\nvines\nviolet\nvolcano\nwalsh\nwary\nwelles\nabel\nadministrator\nadmittedly\nafforded\nai\naltman\nascending\nassassin\nbackwards\nbarber\nbeats\nbenaiah\nbenevolent\nbrandy\nbuffalo\nbulwarks\nburdens\ncapitol\ncement\nchoked\ncircumcised\ncontinuation\ncrushing\ncustomary\ndam\ndeclaring\ndedication\ndeutsche\ndiesel\ndisclosure\ndishes\ndownturn\nelimination\nentities\nequals\nethical\nexaggerated\nexceeded\nexpiration\nexplosive\nfabulous\nfigs\nfinishing\nflair\nflashes\nflawless\nfootsteps\nforthwith\nfrankenstein\nfreed\ngallant\ngarage\ngere\ngilbert\nglancing\nglen\ngoings\ngrape\nhan\nhasty\nhaughty\nhazard\nhemisphere\nhugh\nhydrogen\nid\nimminent\ninane\ninform\nint\nisaiah\nisolation\njoints\nkicks\nkissing\nlayer\nlouder\nmaine\nmarshal\nmarvel\nmathematical\nmermaid\nmidwest\nmilling\nmini\nmint\nmonk\nmortgages\nmurderers\nnewer\nnun\nobtaining\nordinance\nparagraph\nparliamentary\npesch\nphony\npittsburgh\nplausible\nplaza\npretending\nproductions\npromoted\nprotective\npublisher\nqueene\nquentin\nresemble\nresponsibilities\nrestrain\nsaga\nscores\nscripture\nseller\nsensations\nshimei\nsnipes\nsocialist\nsojourn\nsparkling\nspontaneous\nspreads\nsteering\nstrains\nsunshine\nsupplying\nswelling\nteaches\ntechnological\ntentative\ntransmission\nversions\nvisitor\nwalketh\nwaved\nwebb\nweighted\nwholesome\nwrap\nabsorbing\nabundant\nachieving\nadequately\naft\nallotment\namazingly\nascended\natoms\nbancroft\nbanquet\nbearded\nblunt\nboliden\nbra\nbrenner\nburial\nbuscemi\ncaliber\ncampy\ncaps\ncaptures\ncarcase\ncasey\ncautiously\ncavalry\ncellar\nchapel\ncharismatic\ncheerfulness\nchickens\nclash\ncongressman\nconventions\nconvict\ncourtney\ncrawling\ncrisp\ncruising\ndante\ndeliberate\ndevilish\ndiagnostic\ndifferential\ndistressed\ndoll\ndominican\ndoorway\ndrinkable\ndrivers\ndrown\ndug\nemily\nenquired\nephah\nexpressive\neyeing\nfetched\nfictional\nfinde\nforgetting\nfortress\nfrog\nfrustration\ngattaca\ngenerosity\nghana\ngilgal\ngladly\ngoodyear\ngreedy\ngrinned\nhappiest\nhark\nhateful\nheightened\nheller\nhorizontal\nhospitality\nincessant\ninflow\ninquire\ninsider\ninvalid\ninvestigator\njap\njude\nkeepers\nkisses\nlawmakers\nlecture\nleprosy\nlifestyle\nlimitations\nliteral\nlousy\nlp\nmaria\nmeaningless\nmidday\nmisses\nmotel\nmusgroves\nmustard\nnarrowly\nnatalie\nnorstar\nnursing\nouts\noverheard\noverlaid\npersistent\npipes\npirates\nprestige\nprudence\npty\npuppy\npushes\nquaint\nqueens\nquitted\nradiant\nranch\nregiment\nrelax\nrevived\nrobbie\nsakes\nsara\nscreens\nscrollbar\nsexuality\nshady\nshemaiah\nshrink\nskins\nslump\nsmc\nsoule\nspeedily\nstatic\nsteak\nsteer\nstray\nstumbles\nsumitomo\nsupposing\nsurvived\nswam\nsympathize\ntakeovers\ntar\ntighten\ntormented\ntossing\ntransit\ntreaty\ntub\nunavailable\nuncleanness\nunderstands\nunemployed\nunreasonable\nwandered\nwannabe\nwidened\nwilkinson\nwitches\nwitherspoon\nyasuhiro\nyelled\nzeta\nzones\nabound\nadversaries\nadversary\naires\namaziah\nantz\napparatus\narbitrary\narkansas\natheist\nattacking\nbalcony\nbark\nbartender\nbees\nbenson\nbernard\nbrink\nbrood\nbruno\nbuenos\nbuilder\ncain\ncamel\ncathedral\ncharacterized\ncircus\nclap\ncomparing\ncomposite\ncompound\nconsensus\ncoolly\ndale\ndat\ndesegregation\ndesignated\ndeterioration\ndevotion\ndiffer\ndismay\ndistinctive\ndormouse\nduplicate\nearning\neia\nelevated\nelite\nengagements\nescaping\neventual\nfarming\nfearless\nflattered\nflukes\ngothic\ngoverning\ngreenland\nhandkerchief\nhokey\nhomepage\nindispensable\nindulge\ninfernal\ningenious\ninhabitant\nirene\njourneyed\njustly\nkatie\nkudrow\nlasted\nlegislature\nlegitimate\nlenders\nliam\nlibraries\nloaves\nmanipulative\nmariners\nmatheson\nmechanics\nmelodrama\nministered\nnerve\nnewcomer\noakly\norg\noutfit\npalms\npolar\npolitely\npreceded\npredictions\nprofanity\nrap\nreckon\nrelish\nrepentance\nrescued\nrestrict\nreunion\nrobbins\nroosevelt\nrousing\nrudy\nrugged\nrumor\nschneider\nscripts\nsentences\nshelves\nsincerely\nsinise\nskinny\nsloppy\nsolicitude\nsomerville\nsovereignty\nstaining\nsteelkilt\nstubborn\nstumbled\nsubsidized\nsullen\nsurfaces\ntherewith\nthoughtfully\ntoss\ntoucheth\ntowering\ntrailing\ntransgressed\nundertaken\nuninspired\nuniversities\nunrelated\nunsolicited\nventured\nviolation\nvitality\nwakes\nwarehouse\nwarnings\nwipe\nwithal\nwouldest\nzechariah\naggressively\nalteration\nantique\napology\nbackdrop\nballoon\nbaptist\nblazing\nblossom\nboil\nboiled\nbrutally\nbrute\ncardboard\ncardinal\nceaseless\nchevron\ncivilian\nclinical\nclop\ncomical\ncompatible\nconcluding\ncontinuity\ncreep\ndakota\ndefy\ndevise\ndiplomat\ndisciple\ndispose\ndistracted\ndistribute\ndisturb\ndom\ndual\neaster\nedible\nemployer\nenlarged\nequality\nerrand\nflavor\nfore\ngenerale\ngideon\nhairy\nhaply\nhaunt\nhelper\nhiss\njobless\nles\nlinking\nmedieval\nmiserably\nmonty\nmorals\nnewport\nnineteen\nodor\nodyssey\nonward\norb\nparish\npatrol\npaulie\npenetration\npersian\nphilosopher\nphysician\npostman\nquestionnaire\nrebecca\nreopen\nreservoir\nrichness\nrum\nsalvage\nscotty\nseriousness\nsidewalk\nsignify\nsleazy\nsnatched\nspectra\nstride\nsucceeding\nthermal\ntoil\ntraditionally\ntug\ntyre\nuncovered\nunderstandable\nunstable\nurgency\nuttermost\nvocal\nwalt\nzimbabwe\nabominable\naccomplishment\nafflict\nally\nangela\nangrily\nassemble\nbegotten\nbeverage\nbidder\nblaze\nbolt\nbreeding\nbrut\ncalmness\ncheerfully\ncherub\nchi\ncircular\ncleanse\nconsolidation\ncontradiction\ncorrespondence\ncrept\ndemonstration\ndevaluation\ndisguised\ndolores\ndrifting\ndripping\ndung\nearl\neconomical\nego\nendurance\nethereal\nextravagant\nfornication\nfraction\ngin\ngreed\ngroan\nguarded\nhammock\nhealing\nhighlander\nhistorically\nhopper\nillustration\nincomprehensible\ninterfere\nirrational\nirregular\nkeel\nlocate\nmajestic\nmanly\nmindless\nmo\nmomentary\nmunicipal\nnationwide\nnegotiation\norchard\noverdone\npalpable\npanting\npetty\npoised\npseudo\npsychologist\nquestionable\nregulation\nrehabilitation\nreload\nreluctance\nrepetition\nreportedly\nrestrictive\nricky\nridden\nringing\nronald\nrustic\nsanity\nscratch\nse\nseymour\nshadowy\nsheen\nslap\nsmoothly\nsnuff\nsorrowful\nspacious\nstarred\nstereotype\nsteward\nstriving\nstuffed\nsubmission\nthyroid\ntimed\ntoast\ntransported\ntreacherous\ntroop\ntyrant\nunaccountable\nunderway\nunprecedented\nvanish\nvibrant\nvilla\nvirginity\nwardrobe\nanoint\napollo\nassert\nastray\nbarred\nbathe\nberry\nbiting\nbronx\nbrushed\nbrussels\nbunny\nburgundy\ncalculating\ncelebrate\nchaise\nchandler\nchuckle\nclinging\ncrane\ncritically\ndame\ndose\ndownstairs\nemission\nenforced\nepistle\nerr\nexcepting\nfashionable\nfelicity\nfilthy\nfinland\nflashing\nforecastle\nfork\nfrat\nfrightful\nfunctional\nfur\ngadget\ngodfather\ngrocery\nheaps\nhorny\nindulgence\ninfluential\ninjunction\ninsistence\nintact\ninterpret\njoyous\nkitty\nlibby\nmisleading\nmonotonous\nmyra\nnationalism\nneighboring\nnewton\nobstacle\nouting\noverthrow\npamela\npassive\npenalty\nperished\nplagued\nportman\nposture\nprologue\nrazor\nreckless\nrecollected\nrector\nreins\nrejection\nreverence\nrevival\nrevolt\nrichmond\nrightly\nriot\nrumble\nsack\nsaddled\nsatirical\nsaturated\nscales\nscored\nscottish\nsen\nsenseless\nshabby\nshave\nshorts\nslater\nsmoker\nspike\nspine\nsplash\nstripper\nstumbling\nsuave\nsunflower\ntending\nthrift\ntranslation\ntreasurer\ntreating\ntrifle\ntriumphant\nugh\nultra\nundersecretary\nviolin\nvolatility\nwag\nwhipped\nwildlife\nwrinkled\nzen\naccelerated\naccessible\naccidental\nadvertisement\nanon\napprehension\naspiring\nbinomial\nbirch\nbloc\nblubber\nbowls\nbu\ncelebration\ncivilized\nclassification\ncolombian\ncomedian\nconfront\ncounselor\ncradle\ncreditor\ncrises\ndelightfully\ndemon\nderive\ndesperation\ndire\ndisagreeable\ndischarge\ndividing\ndoc\ndora\nfalsehood\nfeasibility\nfourscore\nfreezing\nfried\ngiles\ngon\ngovernmental\ngranger\nguitar\nhamilton\nhereby\nhusky\nimaginary\ninexplicable\ninsect\ninsert\ninsufficient\nintellect\nivy\njerome\nkeith\nlamentation\nlatent\nlester\nlovable\nmanifold\nmaris\nmontana\nmorocco\nmotivation\nmulder\nnorm\noar\noccupy\noperative\northodox\npetrochemical\nplank\nprejudice\nprocurement\nrhythm\nrisky\nrubbed\nruss\nshowcase\nskeptical\nslash\nslumber\nsmoked\nsolemnly\nsparked\nstalked\nstrawberry\nsuccessor\nsucking\nswamp\nsyllable\ntherapist\ntheron\ntoe\ntorment\ntranslate\ntwelfth\ntwisting\numbrella\nunclear\nunpredictable\nupturn\nvinegar\nwacky\nweave\nwickedly\nworldly\naddicted\nadjoining\nanarchy\nappalling\napplicable\narches\narctic\nartillery\nbarrier\nblasted\ncathay\ncaw\ncharging\nchlorine\ncluster\ncomplement\nconjunction\nconrad\ncosta\ncurt\ndawson\ndearly\ndeceased\ndeer\ndefiance\ndickens\ndigging\ndipped\ndiscern\ndisgrace\ndisorder\nduo\ndylan\nemphasize\nethiopia\neverett\nexploitation\nfading\nfavored\nflush\nfolklore\nforecasting\nforge\nfortitude\nfreddy\ngal\ngifted\nglorify\ngrandeur\nguild\ngus\nhaul\nhavoc\nheadache\nheather\nheroin\nhooked\nhowling\nimply\ninfectious\njuliet\nkathy\nlounge\nmaxwell\nmimic\nmink\nmonica\nmonument\nmutually\nnancy\nnotorious\nobedient\noblation\noven\noverbearing\noverflow\npagan\nparamount\nparanoid\nparlor\npatty\npeculiarly\npeking\npious\nplunge\npopcorn\nportuguese\nposting\nprojecting\nprone\nproprietor\npuzzling\nrack\nramsey\nrepetitive\nresonance\nridiculously\nrosy\nrot\nrunner\nscrutiny\nsensitivity\nshane\nshiloh\nspeeding\nstamp\nsting\nstormy\nsurround\ntangible\ntheodore\nthunderbird\ntimid\ntolerably\ntraveller\ntwain\nunconvincing\nungodly\nunwelcome\nunworthy\nvastly\nwarp\nwatered\nwindsor\nwink\nwiser\nwithered\nwizard\nwoven\naccelerate\nadolescent\naiming\nalienation\nasaph\nattendance\navenge\nbaltimore\nbaptism\nbarring\nbreathed\nbully\nchilling\nchristina\ncindy\nclone\ncoherent\nconsole\nconsultation\ncontented\ncorrection\ncreamy\ndenis\ndeserving\ndesirous\ndevoid\ndistrust\ndock\ndoesnt\ndonnie\ndreadfully\nelectron\nequitable\nethics\nexert\nfeat\nfirmament\ngaiety\nginger\ngoose\ngravel\ngreet\ngrounded\ngum\nhack\nhardship\nhercules\nhoarse\ninappropriate\nincessantly\ninconvenience\ninjection\ninsignificant\ninspiring\njenny\njess\njose\njuan\njudith\nleah\nleapt\nlearnt\nlimb\nlowly\nlump\nluncheon\nmadonna\nmasterful\nmelting\nmouthed\nmuscular\nnodding\noccidental\noxidation\nparadox\npathology\npatricia\nperadventure\nplacid\nplea\npolled\nproposition\nprotecting\nragged\nreceipts\nremedy\nrevaluation\nreversal\nrobust\nrocking\nrooted\nrunaway\nsadness\nsaline\nscan\nsexually\nshrewd\nshrill\nshutdown\nsid\nsighing\nslate\nspecimen\nspeechless\nspouting\nstaggering\nstaple\nstately\nstrode\nsuperfluous\ntan\ntaxation\ntriple\ntrivial\ntrodden\nundertake\nunderworld\nunite\nutopia\nvacuum\nvenerable\nvoluntarily\nweaving\nwedge\nwhisky\nworkshop\nwrist\nzip\nadventurous\nalcoholic\nalley\nassess\nastronomy\nasunder\nawoke\nawry\nbade\nbayou\nbearish\nblah\nboiler\nbooked\nbooty\nboredom\nbridegroom\nbrisk\nbuoyant\ncellular\nchoke\nchristine\ncitrus\nclaret\nclassified\ncleave\nclinton\ncocktail\ncombustion\nconceivable\nconveniently\ncopyright\ncorridor\ndandy\ndecay\ndeceitful\ndemise\ndevonshire\ndiligence\ndistraction\ndump\nduncan\nduration\neminent\nexalt\nexhibition\nfalsely\nfarce\nfeminine\nflooded\nflooding\nfourteenth\nfrighten\nfringe\nfuturistic\ngenerating\ngorilla\ngreenwich\ngrimly\ngripping\ngritty\nhampshire\nharbour\nheinz\nherman\nhin\nholly\nhump\nindustrious\nintegral\nintelligible\ninterminable\njeep\nkent\nknot\nkodak\nleak\nlemon\nleslie\nliable\nlimiting\nliquidation\nloneliness\nmandatory\nmarathon\nmat\nmelody\nmicrowave\nmisguided\nnoisy\nnoteworthy\nnutty\noptimal\noracle\npad\npanama\nparole\npence\npickup\npilgrim\npirate\nplaster\nplatt\npolitician\nportray\nprojection\nprow\npsychic\npunk\npython\nradar\nraid\nraspberry\nreconciliation\nrelaxed\nrenewal\nresident\nresolute\nretarded\nrevolver\nriddle\nroach\nroast\nroommate\nrounding\nscratching\nserene\nsitter\nsituated\nsolar\nsoothing\nstrove\nsturdy\nsublime\nsuperbly\nsway\nsyndrome\ntaller\nthereto\nthirsty\ntraveled\ntroublesome\nvigorously\nvulnerability\nwasting\nweakening\nweir\nwhiteness\nwinged\nworthless\nabolish\nadversely\naesthetic\nafloat\nagreeing\nassertion\nbeholding\nbesieged\nbewildered\nbiological\nblindness\nblooming\nbrutality\nbust\ncaroline\ncasualty\nchow\ncondemnation\nconvoluted\ncooler\ncough\ncurled\ncynthia\ncyrus\ndagger\ndashing\ndeveloper\ndiscrimination\ndistorted\neileen\neleventh\nelisabeth\neloquent\nendlessly\nenduring\nengrossing\nernie\nexcite\nexercisable\nexplorer\nfabric\nfacial\nfamiliarity\nfascinated\nflattering\nfreshness\nfrock\ngerard\ngershon\nghastly\ngird\ngrading\ngreyhound\nheader\nhinder\nhut\nillustrate\nimplicit\nincomplete\ninfantry\ninhabit\ninterrupt\njeremy\njoker\nkin\nkit\nleasing\nleila\nlizard\nlucifer\nlunatic\nmaiden\nmathematics\nmicah\nmice\nmidway\nmonopoly\nmould\nmumble\nmuttering\nneurotic\nnut\nointment\norbit\novertake\npayroll\npeasant\npeg\npendragon\npessimistic\npetitioner\npicturesque\npiercing\nponderous\npremature\npreposterous\npsychiatrist\nracism\nrecompense\nrefrigerator\nregain\nrenaissance\nrenowned\nrogue\nrosetta\nrubbing\nrug\nsage\nsecondly\nseizing\nselective\nshannon\nshiny\nshittim\nsickly\nsimpler\nslipping\nspeedy\nspoiler\nsprint\nsqueak\nstadium\nstandpoint\nsteed\nstimulus\nstoop\nstump\nsupplement\nthankful\ntheft\ntournament\ntravail\nunfamiliar\nunforgettable\nunintentionally\nunlimited\nuranium\nvisage\nwarlike\nwatchable\nwearied\nwhereupon\nwhirling\nwithstand\nacceleration\nadorable\nahmed\napprentice\narched\narlene\narmor\natlas\naustere\nbanana\nbeaming\nblatant\nbrent\nbyron\ncalculation\ncaptivating\ncaricature\ncasually\nchad\ncholesterol\nchop\nclint\ncolleague\ncollins\ncolossal\ncompetitor\ncomprise\nconsistency\ncorning\ncorrupted\ncreativity\ncrest\ncustody\ndarting\ndemeanor\ndeuce\ndimly\ndissatisfied\ndominate\ndownhill\ndurst\ndynamite\nearthy\necstatic\nenlightened\nexclamation\nextracted\nfascination\nfiercely\nfilter\nfitness\nflux\nforesee\nfrenzy\ngaping\ngeek\ngriffin\nhandy\nhesitate\nhoot\nhumiliation\nhurting\nincline\nindebted\nindividually\ninduce\ningenuity\nink\njawbreaker\njosh\njupiter\nknit\nlackluster\nlightweight\nlisting\nliz\nlung\nmanic\nmarking\nmeditation\nmetaphor\nmoist\nmonologue\nmuffled\nnifty\noblige\nophelia\npensive\npharmaceutical\npitiful\nplum\npoll\npotatoes\npredictably\nprevention\nprocure\nproverbial\npun\nrebound\nresidual\nresignation\nrookie\nrub\nsappy\nscrape\nsewage\nsinner\nsmelling\nsocially\nsouthwestern\nstaid\nstreak\nsuperman\nsymbolism\nsynthetic\ntearing\nterminate\ntravelled\ntrillion\ntriton\nunbearable\nuniversally\nunrest\nval\nvexation\nwhistle\nwithheld\nyugoslav\nabsurdity\naccrual\nadherence\nadmirably\nafore\nanticipate\narticulate\nastern\nathens\nbail\nboarding\nbrilliance\nbrim\nbruise\nbrunswick\nbuff\ncalves\ncapel\ncarbide\ncarmel\ncartel\ncatastrophe\ncensus\ncheat\nclassy\nconformity\nconstitutional\nconstructive\ncontingent\ncontraction\ncounterpart\ncum\ncurly\ndarius\ndaytime\ndebtor\ndefer\ndeliciously\ndice\ndignified\ndisagree\ndisdain\ndispleasure\ndusty\nedgy\nfaithfully\nflatter\nflora\nforgettable\ngall\ngladiator\nglued\ngranite\nguaranty\nguile\nhallowed\nhuzza\nineffective\ninsanity\ninstinctively\ninvent\njamaica\njoey\njuicy\nlab\nleon\nlick\nlucius\nluxurious\nmailed\nmario\nmartian\nmechanically\nminimize\nmister\nmummy\nparsee\nparticle\npatriot\npivotal\nplentiful\nponder\npopulous\npresidency\npsychology\npulpit\nquake\nrabbi\nrash\nrattling\nrebekah\nredundant\nreminder\nrepose\nriyal\nsadistic\nsalad\nsampling\nsaxon\nscarf\nscotch\nseaman\nsherry\nshipbuilding\nsnowy\nsponsor\nstein\nstillness\nstimulation\nsubjective\nsuicidal\nsurveillance\ntad\ntango\ntheological\ntortured\nuneasiness\nunfold\nunwillingness\nupland\nvalentine\nvane\nverdict\nveto\nvicinity\nvictorious\nviewpoint\nwen\nwitted\nwoodruff\nyearning\nadditionally\nakin\napologize\narchitecture\nartificially\nawait\nba\nbab\nbard\nbarnabas\nbeatrice\nbefall\nbeget\nbetrayal\nbiblical\nblatantly\nbronchial\nbucket\ncalamity\ncenturion\nchatterer\nchauffeur\nchef\nchile\nclang\ncloak\ncloudy\ncoalition\ncod\ncollision\ncommend\nconquest\nconspicuous\nconsultant\ncoupon\ncourageous\ndevout\ndisappearing\ndisgust\ndispersed\ndiversion\ndrafting\ndreamy\ndropt\neconomically\necumenical\nelaine\nembracing\nevermore\nexempt\nexorcist\nexposition\nezra\nfade\nfinely\nflip\nfootman\nfrenchman\nfruity\nfundamentally\nglistening\ngooding\ngrinding\ngrinning\nhatch\nhorseback\nhose\ninclusion\nincoming\ninnovative\ninspire\nintensive\ninterruption\ninwards\njam\nlambeau\nlaser\nleeward\nlily\nlinger\nlush\nlye\nmagistrate\nmaniac\nmarginally\nmaterially\nmyriad\nnaomi\nnether\nnewsletter\nnotification\noblivious\noman\npalmetto\nperilous\npier\npierced\nposter\npraising\npropane\nprose\npurge\nrend\nsandy\nsao\nsignature\nsleeper\nslowdown\nsmoky\nsneak\nsoaked\nsquall\nstandstill\nsupervision\nsurroundings\ntheology\nthrusting\ntitus\ntow\ntract\nturnaround\ntwas\nundercover\nundermine\nunderwear\nuproar\nvault\nvermont\nweighty\naccommodate\namuse\nanalogy\nastounding\nbalancing\nbaltic\nbetwixt\nbilling\nblackness\nboating\nboycott\nbreastplate\nbronze\nbrunette\ncanoe\ncarlos\ncatchy\ncemetery\ncharitable\ncherish\nchinatown\nclung\ncohen\ncol\ncommons\ncommotion\ncomprehension\nconcession\nconditional\nconflicting\nconfound\nconvincingly\ncork\ncosmic\ncrosby\ndares\ndarn\ndental\ndetect\ndrab\ndresser\ndrooping\ndungeon\necstasy\nensue\nentangled\nentirety\nexcellency\nexploratory\nextract\nfasting\nfifteenth\nfluff\nfoolishness\nforbear\nfragile\nfrivolous\ngarth\ngeological\ngilt\ngliding\ngossip\nhasten\nhaze\nhover\nhue\nideological\nidly\nimpending\nind\nindefinitely\nindignant\ninhuman\ninsightful\nintensely\nintently\nintrigue\nissuance\njakob\njohnnie\njove\nkathleen\nladyship\nlama\nlavish\nlevite\nlimp\nluminous\nmalicious\nmastery\nmayhem\nmetaphysical\nminnie\nmohr\nmontage\nmultilateral\nmundane\nnaught\noptical\npained\npenetrate\npenetrating\nphases\nphotograph\npianoforte\npimp\npitching\nplayful\npollock\npolynomial\nportable\npossessing\nprimal\nprofessed\nprofoundly\nprovincial\nprovisionally\npuff\npulmonary\nrake\nrequisite\nrespectability\nridicule\nrotten\nshaved\nshotgun\nsilas\nsire\nsmash\nsofa\nspaceship\nspeculate\nspider\nstellar\nstereo\nstockpile\nstony\nsweaty\ntangent\ntannic\ntempting\ntenant\ntopped\ntractor\ntreason\ntrousers\ntumbling\nturf\nunfolded\nunsettling\nunspeakable\nuplifting\nuriah\nvernon\nwarming\nweaken\nwerewolf\nwhiskey\nwhistling\nwhithersoever\nworrying\nyang\nabiding\nacute\naddict\nadjacent\nadobe\namends\napparition\natrocious\navert\nbache\nballroom\nbaruch\nbearer\nbedford\nbeforehand\nblockade\nblot\nbolster\nbounce\nbrewing\ncincinnati\nclarify\nclause\nclover\ncocaine\ncompassionate\nconsciously\ncontradict\ndebris\ndiminish\ndiplomacy\ndisappoint\ndivest\ndiving\ndizzy\ndole\ndomestically\ndoug\ndrawer\ndudley\ndune\ndye\nelementary\nelliott\neruption\nestella\nextraordinarily\nfaintly\nfei\nfragrance\nfrantically\ngait\ngoldsmith\ngratified\ngym\nheartfelt\nheaving\nhelicopter\nhissing\nhittite\nhogan\nhomosexual\nhorrific\nhospitable\nhugo\nilliterate\nincompetent\ning\nintentionally\nintolerable\nintuition\njewel\njo\njudy\njulian\nkorah\nlaurence\nleaden\nleaven\nlime\nlira\nlocally\nlodging\nlola\nlordship\nmanipulation\nmarijuana\nmasculine\nmessiah\nmetallic\nmurky\nne\nneedles\nnemesis\nnope\nnovelty\norphan\noxide\npaw\npeaked\npeer\npennant\npersist\npertinent\nphotographer\npik\npiss\npremiere\nprovocative\nquery\nrapidity\nregal\nreid\nresponsive\nrib\nrubbish\nrustling\nsalma\nsarcastic\nseer\nseverance\nslayer\nsleeve\nslows\nsoaring\nsouthland\nsped\nstatutory\nstoner\nsuperstition\nsurgery\nswayed\nswine\nsylvester\nteddy\nterritorial\ntolerate\ntortoise\ntrance\ntray\ntribune\ntumultuous\ntyranny\nunconsciously\nundefined\nunfairly\nuniformly\nunleaded\nunmistakable\nunveiled\nurethane\nvaluation\nvex\nwaistcoat\nwallet\nwally\nwarden\nwatering\nwhereunto\nwhichever\nzany\nabigail\nabusive\nadore\naggression\nairy\nalloy\nalright\nalway\namiss\nammunition\nannette\nantitrust\narsenal\natmospheric\nattic\naudit\nautistic\naw\nbaggage\nbake\nbaking\nballad\nbankrupt\nbarbaric\nboone\nbower\nbroth\nbullion\nbutterfly\ncalculate\ncanyon\ncapitalize\ncarling\ncarnival\ncatcher\ncensure\nchamberlain\nchap\nchucky\nclan\nclerical\ncleverly\ncollaboration\ncollector\ncompetence\nconfinement\ncoolness\ndecency\ndeduction\ndeficient\ndepict\ndepiction\ndepletion\nderision\nderivative\ndetergent\ndevote\ndisappearance\ndiscomfort\ndiscourage\ndiversity\ndunne\nearnestness\neasiest\neffortlessly\nembark\nenchanting\nenormously\nernest\nexistent\nexterior\nfacade\nfain\nfairness\nfatigue\nfeather\nflank\nflax\nfrail\nfrowning\nfulfillment\ngallantry\ngasp\ngent\ngentleness\ngreenwood\ngroaning\ngruesome\ngyro\nhandicapped\nharden\nhardware\nherring\nhoneymoon\nhooker\nhumility\nhypothesis\nideology\nillustrious\nincest\nindefinite\nindescribable\nindies\ninfancy\nintellectually\nisraeli\njanet\nkeener\nkidder\nkurt\nlear\nlocker\nlooming\nlore\nmal\nmanhood\nmare\nmarital\nmarvin\nmassacre\nmeasureless\nmodernization\nmonsieur\nmuddy\nmurdering\nmurmur\nnegligible\nnostalgic\nnovelist\nnull\noftentimes\nordinarily\nornament\noutgoing\noutlandish\nowl\npalfrey\npartisan\npeddler\npeep\npeninsula\npersecute\nphillip\npiazza\npint\nplanetary\nplenteous\nplough\nplunging\npointer\nposing\npounding\npreservation\nproclamation\nrename\nrestraining\nretrieve\nrevise\nrex\nrobber\nrocket\nroller\nscena\nscum\nscuttle\nseasoned\nseaway\nshan\nsheath\nshirley\nsilkworm\nslippery\nsmelled\nspecialized\nspouse\nstain\nstandout\nstrung\nsubdue\nsubjection\nsupermarket\nswelled\nsyndicate\ntallow\ntate\nthorn\ntransform\ntrophy\ntrot\nuncommonly\nunidentified\nunwanted\nunwittingly\nvale\nwarmed\nwaterway\nweighing\nwillie\nwilly\nwindlass\nwithdrawing\nyale\nyorker\nadhere\nadmiring\nanatomy\nangular\naustrian\navail\nbanter\nblacksmith\nblasphemy\nblinded\nbo\nbout\ncal\ncaribbean\ncarnage\ncarving\ncaspar\ncivic\ncoincide\ncompose\nconfiguration\ncongratulate\nconstruct\ncontemptuous\ncountryside\ncringe\ncrotch\ncue\ndaryl\ndeception\ndentist\ndetain\ndevastating\ndiffusion\ndime\ndin\ndisobedience\ndisplacement\ndissatisfaction\ndistract\ndrained\ndrastically\neva\nevoke\nfaithfulness\nfeasible\nfernando\nfolding\nfoolishly\ngentile\nglamorous\nglue\ngrind\nhackneyed\nhomicide\nhumane\nhypocrisy\nhypocrite\nimplausible\nimporter\nincoherent\njournalism\nkidnap\nkiki\nknack\nkneeling\nkraken\nlaced\nlag\nlances\nlatitude\nlegally\nlimitation\nlimitless\nloathing\nluggage\nmadman\nmammy\nmanila\nmariner\nmaritime\nmaternal\nmaximize\nmaximus\nmiraculously\nmiscast\nmisunderstood\nmodify\nmoronic\nmorsel\nmuster\nnaughty\nogre\noppress\noutlet\npayoff\npenance\nperceiving\npertaining\nplymouth\nplywood\npomp\nporpoise\npostal\npostpone\npromotional\nprotocol\npurposely\nrag\nrampant\nresent\nresisting\nrespectful\nribbon\nrichly\nscornful\nseduction\nshaky\nshriek\nsimilitude\nsixpence\nsizes\nslimy\nsnatch\nsobbing\nsoles\nsolo\nsomeday\nsorely\nspectrum\nspiral\nsprawling\nstardom\nstarry\nsticky\nstigmata\nstreaming\nsubtly\nsuitably\nsuitcase\nsultry\nsuperhero\nsurvivor\nsweeper\nsweetly\nsystematic\nteeming\nterrorism\nthane\ntheoretical\ntrait\ntreacherously\ntribulation\ntriumphantly\ntumult\ntying\nunaffected\nundone\nunprofitable\nutilize\nutterance\nveronica\nvisitation\nwarmer\nwitter\nyacht\nabhor\nafternoons\nailing\nala\nallan\nalpha\nanew\napocalypse\narbitration\nardent\nassassination\naudrey\naxes\nbanco\nbathtub\nbeset\nbitten\nblest\nbombay\nbouncing\nboundary\nbreakthrough\nbreakup\nburke\ncant\ncapability\ncarelessly\ncarver\ncathy\nchampionship\nchanting\ncharade\nchester\nchew\nchord\ncider\ncommendable\nconquer\nconscientious\ncopied\ncube\ncurved\ncynicism\ndarren\ndazed\ndecreasing\ndepress\ndiner\ndisagreement\ndisgusted\ndisrupt\ndoubling\ndrunkard\neel\nelusive\nempirical\nenlarge\nenrollment\nentreat\nessay\nexchangeable\nexploded\nflop\nfloral\nforlorn\nfounding\nfuzzy\ngeared\ngen\ngenetically\ngiddy\ngoddess\ngraduated\ngreasy\nhaggard\nharrowing\nhawaiian\nhawker\nhearth\nidleness\nincorporated\nindicative\ninquiring\ninsipid\ninstrumental\ninteract\ninvade\nira\njarring\nkaiser\nloaf\nlodgings\nlure\nmadame\nmagma\nmanifested\nmeaty\nmechanic\nmentor\nmillennium\nmindful\nmischievous\nmissionary\nmorale\nmorbid\nmyrrh\nneal\nniagara\nnorfolk\nnumberless\nodious\nolein\nopium\norientation\norion\noutbreak\noutsider\noverflowing\npane\npersecution\npicard\npoking\npondering\npreferably\nprominently\npromoter\nprop\npsyche\nquivering\nraving\nrecorder\nreef\nregulated\nrelentless\nremorse\nreproof\nrespecting\nretailer\nrhetoric\nroland\nromero\nryder\nsacrificing\nseamless\nselfishness\nshapeless\nshivering\nshovel\nshudder\nsinful\nsixteenth\nski\nsleepless\nsolace\nsorted\nspader\nsquirrel\nstaircase\nstarboard\nsternly\nstooping\nstylistic\nsubmerged\nsummons\nswan\nswire\ntennis\nthatcher\ntibet\ntracy\ntraps\ntravis\ntremendously\ntrustee\nturbulent\nunacceptable\nunintentional\nunnecessarily\nunquestionably\nunsatisfactory\nunsure\nusury\nutopian\nverge\nvertex\nvigor\nviolate\nwanton\nwarped\nwarwick\nwatchman\nwoof\nyawn\nyemen\nyuan\nabandonment\nabortion\nabstraction\naccusation\naddiction\nadolescence\nalarming\nalgerian\namber\nambiguity\nami\nammonites\namorous\nangst\nassuring\nasteroid\naudacity\nbarbed\nbaron\nbelial\nbleed\nblocker\nboasting\nbobbie\nbooker\nbooth\nbowing\nboxer\nbriefing\nbrowning\nbryan\nbuoy\ncasper\nchang\ncharger\nchoking\nchronic\ncinque\nclapping\nclarence\ncleavage\ncommune\ncompulsive\nconcerted\nconfederate\nconstable\ncontention\ncontinuance\ncontractual\nconverse\ncorrespond\ncoupling\ncovert\ncrouched\ndesigning\ndictate\ndiego\ndinah\ndiversify\ndomination\nelvis\nenrolled\nequatorial\nethnic\nexemption\nexpedient\nfacilitate\nfarthest\nfeverish\nfiancee\nfiji\nfirmness\nflattery\nflown\nforthcoming\nforwards\nfunctionality\ngallows\ngateway\ngif\ngimmick\nglare\nglover\ngoodwill\ngoth\ngovern\ngrassy\ngreeting\ngrieving\nguarding\ngunwale\nhandler\nheartless\nhelena\nhelmet\nheretofore\nherpes\nhilariously\nhorseman\nhug\nhumming\nhungarian\nhurled\nhysteria\nilluminated\nimpersonal\nimpertinent\nimproper\ninactive\nincarnation\ninexplicably\ninfected\nintentional\nintersection\ninvoluntarily\njanitor\njeanne\njezebel\njock\njoyce\njustin\nlebanese\nlibrarian\nlilac\nlovingly\nlull\nlusty\nmadden\nmadly\nmagnify\nmagnum\nmann\nmasked\nmasse\nmib\nmigration\nmime\nministerial\nmizpah\nmornings\nmortar\nmortification\nmurmuring\nmysteriously\nnarrower\nneeding\nnervously\noffbeat\noily\nomnipotent\noptional\norator\norient\nottawa\noutrage\nparanoia\nparrot\npeel\nperiodic\nperiodically\nperipheral\nperplexity\nplow\nposterity\nprivileged\nprohibition\nprovocation\nquiz\nrealistically\nrecipe\nrecognizable\nrefiner\nrented\nresign\nresize\nrestoration\nriveting\nscant\nscruple\nsebastian\nseduce\nseparating\nsermon\nshattering\nsighted\nslashed\nslut\nsoar\nsoda\nsolidarity\nspontaneously\nstalk\nstink\nstraining\nstrata\nstrikingly\nstubble\nsubordinate\nsubstrate\nsudan\nsuperstitious\nsuspiciously\nswarm\nsweetheart\nsyrian\nsystematically\nterrace\nterrestrial\nthrobber\nthwart\ntraitor\ntramp\ntranquil\ntumble\nturbulence\nunavoidable\nunborn\nundesirable\nunlocked\nunsuccessfully\nupheld\nuplifted\nvarsity\nvista\nwelsh\nwhisperer\nwilder\nwindward\nwithhold\nyon\nabu\naccommodation\nadapt\naisle\nallegedly\nallusion\naloof\nambush\nanastasia\nangelina\nankle\napplaud\naptly\narena\narresting\narrogance\nassent\nassented\nassyrian\nauthentication\navast\nballistic\nbanal\nbeck\nbelievability\nbermuda\nblameless\nbleached\nbootstrap\nbordering\nbottomless\nbreakwater\nburbank\ncanned\ncarney\ncathode\ncertified\ncheering\nchoppy\nclam\nclassroom\nclaw\ncoated\nconcubine\nconstrained\ncreed\ncutter\ndana\ndarryl\ndecorated\ndiabolical\ndiarrhea\ndigest\ndisadvantage\ndiscreet\ndispatch\ndissolution\ndistressing\ndocumentation\ndrawers\ndurham\ndustin\nekron\nelectro\nelle\nelm\nelsa\nentitle\nenvied\nequilibrium\nexaggeration\nfanciful\nfaulty\nfervent\nfleeting\nforeseeable\nframing\nfroward\nfuss\ngamy\ngarner\ngarrison\ngeographical\ngeography\ngiggle\ngodly\ngracefully\ngraduation\ngrandson\ngroom\nguerrilla\ngunpowder\ngut\nhalfpenny\nheadless\nhefty\nhemp\nhomely\nhonorable\nhotter\nhugely\nhumbly\nhurley\nhustler\nhypothalamic\niceberg\nimposition\nindependently\ningredient\ninsomuch\ninstability\ninterface\ninternationally\nintreat\nirritation\nirwin\nivan\njamaican\njerky\njonas\njoyfully\nkindle\nkingpin\nlaundry\nlava\nlazarus\nlens\nlistener\nlucrative\nmae\nmanna\nmanual\nmanuel\nmarrow\nmaul\nmellon\nmend\nmetropolis\nmi\nmicro\nmilitia\nming\nmisunderstanding\nmodesty\nmolecular\nmotley\nmovable\nmutton\nnabal\nnationally\nnaw\nnicky\nnora\nobsessive\noedipus\nog\noutflow\noverblown\noverlong\noverlook\npartiality\npedestrian\npent\nphysiological\nplayhouse\npleading\npracticable\nprecedent\npriceless\nprick\nprobe\npsychologically\nquits\nraider\nrandomly\nrapt\nreactionary\nrecruit\nreindeer\nrepeal\nretiring\nrita\nroebuck\nrosemary\nsandwich\nsant\nsavannah\nscar\nsensual\nseventeenth\nshakespearean\nshrubbery\nshu\nsilvery\nsimplistic\nskillful\nskillfully\nslime\nsmashing\nsoothe\nspelling\nspooky\nstarved\nsterile\nsummed\nsumptuous\nsurpass\nswarming\nswaying\ntangle\ntease\ntentatively\nthesis\ntier\ntorch\ntoro\ntransgress\ntransom\ntsunami\ntuned\nundergo\nundertook\nundeveloped\nunified\nunimportant\nunreal\nunresolved\nunsatisfying\nuphold\nuprightness\nusefulness\nvent\nversatile\nvisibly\nvocabulary\nwager\nwharf\nwhomsoever\nwhoredom\nwiden\nabsorption\nacclaim\naccumulation\naerial\naffirm\nallowable\namend\napocalyptic\napron\nariel\narisen\nauthenticity\nauthorization\nawkwardly\nbackbone\nbauxite\nberger\nbewilderment\nbias\nbilled\nblended\nblindly\nbookseller\nbookstore\nboundless\nbudding\nbuffet\nbuildup\nbunk\ncafeteria\ncaper\ncapitalism\ncelanese\ncircled\ncircling\nclaudia\ncleansing\nclergyman\nclothe\nclouded\ncohesive\ncola\ncoldness\ncomeback\ncomely\ncomforting\ncommercially\ncommunicating\nconceded\nconcord\nconjecture\ncontradictory\ncovetousness\ncrouching\ncultivated\ndangling\ndar\ndaresay\ndarkly\ndazzle\ndebenture\ndecked\ndeity\ndemented\ndependency\ndepot\nderanged\ndessert\ndetestable\ndial\ndiscernible\ndisinterested\ndismissal\ndisposable\ndisregard\ndoubloon\ndrinker\nelemental\nelkanah\nenigmatic\nessex\nexcel\nexclaiming\nfasten\nfest\nfleece\nfondly\nfooting\nforbearance\nforbidding\nforged\nforgiving\nfrances\nfunded\ngardening\ngarland\ngenetic\ngiovanni\ngoo\ngratification\ngruff\nguise\nhalting\nhewn\nhilarity\nhoofs\nimpetus\ninaccurate\nincorporate\ninherently\ninterpreter\njasper\nkernel\nkettle\nkirk\nkish\nkremlin\nkudos\nlabyrinth\nlandau\nlapse\nlaughably\nlayout\nleisurely\nlighthearted\nlima\nloathsome\nlurid\nmall\nmania\nmans\nmarketable\nmath\nmemorandum\nmeteor\nmidwestern\nminiature\nmire\nmoderation\nmodestly\nmolding\nmontem\nmortality\nmortified\nmule\nneon\nnobleman\nnumerical\nobadiah\noppressive\noptimum\norgasm\noutdoors\noverlay\npadding\npassionately\npatriotic\npaula\npeck\nperch\nperfected\nperseverance\nphotographic\npinnacle\nplacer\nplotted\nplump\npodger\npoise\npoke\npolonius\npornography\npowered\nprediction\nprelude\npriesthood\nproclaiming\nprolong\nprops\nquartet\nradically\nrainy\nreasoned\nreborn\nreconsider\nredeemer\nrelaxation\nrelevance\nreprove\nresolutely\nresumption\nreviewer\nrhine\nrite\nrouse\nrowing\nrudolph\nrust\nrusty\nsafeguard\nscented\nsensational\nsentry\nsera\nshaven\nsilky\nsizable\nsmack\nsnapping\nsolemnity\nspar\nspat\nspicy\nstalking\nstilted\nstockholder\nstrapped\nsuburb\nsuitor\nsupplementary\nsupportive\nswollen\ntaut\ntemperate\ntenderly\nthrowaway\ntil\ntile\ntipped\ntomahawk\ntrifling\ntrusting\nturnpike\nuncanny\nundeniable\nundertaking\nunfolding\nunfriendly\nunhappiness\nunilateral\nunoriginal\nunrighteousness\nupbeat\nupgrade\nviable\nvicarage\nvisa\nvomit\nwarranted\nwither\nworkman\naides\nalbany\nale\nalternately\nalvite\nangelo\nangus\nannihilation\narithmetic\nassay\nassign\nautonomy\nave\nbadness\nbaht\nbarrage\nbattered\nberth\nblasting\nbluntly\nbracelet\nbraces\nbrimstone\nbrotherhood\nbrutish\nbum\nbump\nburly\nbusily\ncaravan\ncarmen\ncarnal\ncetus\nchestnut\nchilled\nchore\nchoreography\ncleaner\nclinic\nclips\ncocky\ncoil\ncommence\ncommunion\ncommuter\nconcealment\ncondescending\nconfederation\nconform\nconfuse\nconsequent\ncontemptible\ncopious\ncoral\ncorpus\ncourteous\ncrafty\ncurling\ncushion\ncylinder\ndamnation\ndarts\ndaybreak\ndeacon\ndeadlock\ndeborah\ndefect\ndespicable\ndetection\ndewey\ndilution\ndisengaged\ndisjointed\ndisruption\ndissuade\ndistinguishing\ndisturbance\ndodo\ndormant\nebb\nelastic\nenforce\nenmity\nenquiry\nensign\nerosion\nexcursion\nexplicitly\nexplode\nextremity\nfated\nfateful\nfatness\nfavorably\nfeudal\nfiance\nfleming\nfletcher\nfondness\nforeboding\nforenoon\nfranco\nfrown\nfry\ngamble\ngat\ngee\ngenerall\ngenteel\ngerald\ngertrude\nglimmer\ngnome\ngoverness\ngrammar\ngraph\ngrate\ngrudge\nheath\nheifer\nhem\nhind\nhoof\nhub\nimpossibility\ninaccessible\nindolent\nindulgent\ninfection\ninsecure\ninspect\ninstantaneous\nintelligently\ninterchange\ninterestingly\niodine\niso\njagged\nkyle\nlagoon\nlatex\nleper\nletch\nlever\nlimbo\nlindo\nlobster\nlocust\nlombard\nloom\nluther\nmagnolia\nmarlin\nmatron\nmaxim\nmaze\nmeter\nmightily\nmilky\nmimi\nmiscellaneous\nmitch\nmobster\nmole\nmomentous\nmona\nnaming\nnegotiator\nnewt\nnicaragua\nnina\nnoiseless\nobscurity\noutboard\novertime\npal\npastor\npeaceable\npeanut\npeeled\npegged\nperplexed\npianist\nplatoon\nposse\npowdered\nprinter\npullman\nquarterback\nquo\nraucous\nreciprocal\nregistry\nrehash\nrespiratory\nretreating\nrewarding\nrhyme\nrim\nroderick\nrotating\nrousseau\nruddy\nsanguine\nsatisfactorily\nschoolboy\nsecular\nsemblance\nsentimentality\nsewing\nsham\nshockingly\nsided\nsilenced\nsingularly\nsneaking\nsocialism\nsoften\nsomerset\nsophistication\nsqueezing\nstaging\nstool\nstud\nsubstituted\nsunken\nsuperintendent\nsuppressed\nsurf\nsweater\nsymbion\ntasteless\ntavern\ntaxed\ntaxing\nteck\nthud\ntimeless\ntorrent\ntracing\ntrashy\ntraveler\ntribunal\ntumor\ntwelvemonth\ntwinkling\nunarmed\nunconventional\nundergoing\nunderwriting\nundue\nunfit\nungrateful\nunheard\nunlucky\nunmoved\nunnoticed\nuntouched\nuppermost\nvalerie\nvaughn\nvega\nvulcan\nwrongly\nzealous\nzoo\naccompaniment\nactuality\nada\nado\nadvancement\nangie\napex\napothecary\narango\nascertain\nassortment\nassuredly\nastonishingly\nathlete\natop\nattentively\naudible\naugmented\navery\nbale\nbatting\nbenevolence\nbeth\nbetting\nbike\nbiography\nbloated\nbloodshed\nblurred\nbooming\nboris\nbough\nbrainless\nbreathless\nbribe\nbrooke\nburglar\nburt\ncatholicism\ncelluloid\nchaotic\nchaste\ncheered\nchopping\ncisco\nclapped\nclifford\nclip\nclutch\ncoldly\ncologne\ncomplacency\nconfirming\nconglomerate\nconstancy\nconsternation\nconvocation\ncordial\ncorrelation\ncowardly\ncrib\ncrocodile\ncrusade\ndemographic\ndevouring\ndiary\ndiligent\ndinosaur\ndisapproval\ndonna\ndownfall\ndraught\ndud\neclectic\nedwin\nenraged\nerie\nexpiring\nfa\nfeeder\nfertile\nfetching\nfiat\nfiner\nflatly\nfoaming\nfodder\nfoliage\nfootstool\nforefront\nforeman\nforetold\nforte\nfreewill\nfusion\ngaming\ngender\nglee\ngoody\ngratefully\ngratifying\ngrating\ngrope\nhabitat\nharmonious\nhearse\nhelion\nhelium\nherein\nhockey\nhomeward\nhormone\nhurriedly\nhymn\nhyper\nhypothalamus\nimaginable\nimmigration\nimpart\nimplication\nimprobable\nimprudence\nincumbent\ninsensible\ninsolence\ninstructor\ninsufferable\nintegrate\ninternally\nirrigation\nislamic\njeans\njewelry\njill\njosie\njudicial\njules\nkerosene\nkinsman\nknelt\nkraft\nlanguid\nleaded\nlegged\nlex\nlin\nlounging\nlyrical\nmanipulate\nmarion\nmaureen\nmeditate\nmeekness\nmentality\nmichel\nminstrel\nmomentarily\nmon\nmonarch\nmyrtle\nnavigator\nnestle\nnickname\nnominee\nnonspecific\nnotified\nnutrition\nobsolete\nolson\nomen\noneself\nopenness\nordeal\norganize\noversight\novert\noverweight\npallid\npalsy\npartake\npatron\npear\npeggy\nperennial\npeso\npicnic\npiles\npinch\nplummer\npolaroid\npoop\npowerless\npredictability\nprocessor\nprodigy\nprogressively\nprophetic\nproportionate\nprosecution\nprowess\npudding\nquicken\nrailing\nranger\nrea\nreactivity\nreceiver\nreckoning\nreconcile\nrendition\nrenegade\nrenown\nresale\nresina\nretention\nreversing\nroam\nrobbing\nroberta\nromp\nsalmon\nsaloon\nsamurai\nscheming\nscourge\nscreened\nsculpture\nseam\nseedy\nselfsame\nsensed\nserum\nservile\nsewer\nshawl\nshrinking\nshroud\nsizeable\nslang\nslanting\nsloan\nsnug\nsoftness\nsooth\nspermaceti\nspoiling\nsquire\nstamping\nsteadiness\nstiffly\nstoppage\nstrand\nsubscribe\nsuckling\nsufficiency\nsurging\nsurrogate\ntandem\ntapering\ntetrachloride\ntextbook\nthump\nthundering\ntidy\ntimidly\ntrench\ntrinity\ntruer\ntutor\nunawares\nunbelief\nunbroken\nunconditional\nunequal\nunspoken\nunused\nuri\nvainly\nvector\nveritable\nvest\nvillainous\nvirtuous\nvividly\nvocation\nwalnut\nwelcoming\nwhaler\nwhiz\nwhoa\nwilled\nwrit\nyeasty\nacrobat\nadieu\nadversity\naffable\naffectionately\naffrighted\naha\nalignment\nallegory\nalumina\namateurish\namaze\namazon\nanalyses\nanalytic\nanton\nappease\narchangel\narchbishop\nasahel\nauspices\nbarb\nbarbecue\nbeacon\nbeetle\nbela\nbert\nberyl\nbirmingham\nblinking\nbluff\nbon\nbonnet\nbonnie\nbony\nborrower\nbounded\nbounty\nboyish\nbravely\nbridgekeeper\nbrightly\nbrit\nbubby\nbulky\nbutane\ncallous\ncarbuncle\ncatalogue\ncavity\nchalk\ncharcoal\nchurning\nclearance\ncleverness\ncling\ncoca\ncoincidentally\ncollage\ncoma\ncompilation\nconcede\ncone\nconfessing\ncontemplate\ncontemplation\ncontingency\ncopra\ncordiality\ncordoba\ncorona\ncorrespondent\ncosting\ncounterpoint\ncoyote\ndeadpan\ndetract\ndeviation\ndingo\ndiversification\ndiverting\ndivestiture\ndominance\ndotted\ndoubtfully\ndoubting\ndoyle\ndrunkenness\ndusky\nefficiently\neffluent\nelmer\nemerald\nendorse\nenlist\nevolve\nextinct\nextraneous\nexultation\nfantasia\nfatty\nfend\nfinancier\nfling\nflotation\nfluttering\nfrancois\nfrankfurter\nfrankincense\nfreeing\nfreer\nfreshman\ngeometric\ngleam\ngloriously\nglove\ngrasping\ngrisly\ngump\nheadlong\nheartbreaking\nheaviness\nhew\nhezron\nhighland\nholm\nhousewife\nhuff\nhymen\nideally\nimmature\nimpassioned\nimpassive\nimperative\nimperfect\nimprisonment\ninasmuch\nincurable\ninferiority\ninsolent\ninterfering\nintimately\nintoxicated\ninvincible\njester\nkinetic\nlamented\nlandmark\nlastly\nliberalism\nliberality\nlicensed\nlieu\nlitter\nlottery\nlouise\nloveless\nlynn\nlyric\nmaidservant\nmandarin\nmannered\nmanor\nmanually\nmarkedly\nmartyr\nmer\nmercenary\nmetaphysics\nmin\nmiraculous\nmod\nmorally\nmotto\nmound\nmythological\nmythology\nnagging\nnecklace\nnervousness\nnitrogen\nnobility\noblivion\noffense\nonion\nonshore\nostensible\noverdue\noverhaul\npageant\npakistani\nparadoxically\npassport\npatriotism\npedro\npep\nperfunctory\nphenomenal\npoetical\npoked\npollution\npompous\npotency\npredator\npredicament\npregnancy\nprevalent\nprivy\nproblematic\nproration\npry\npurify\nqualification\nquench\nranked\nrebuild\nreconstruction\nrefrigeration\nregression\nreinforce\nrelentlessly\nrepulsive\nreservation\nreset\nrestriction\nrhodes\nriotous\nrodman\nrotation\nrout\nsanction\nschoolmaster\nscraped\nscraping\nseaweed\nsemester\nser\nserenity\nshaping\nshea\nsherlock\nshewbread\nshipmate\nshuttle\nsickening\nsimultaneous\nskeletal\nskit\nsling\nslothful\nslug\nsmuggling\nsnail\nsnatching\nsociological\nsocket\nsolidly\nsoy\nspiritually\nspringer\nspringing\nsquid\nstabilization\nstack\nstagnant\nstarch\nstrenuous\nstung\nsupremacy\nsurveying\nsusceptible\nsynthesis\nsyrup\ntart\ntasting\ntaxpayer\ntelescope\nterrence\ntertiary\nthematic\ntheorem\nthickly\nthrong\ntit\ntomato\ntongs\ntwinkle\ntypewriter\nunanimous\nunanswered\nunchecked\nunkind\nunofficial\nunsuspecting\nuntimely\nunwatchable\nvanessa\nvapor\nvictuals\nvisceral\nvoltage\nwasteful\nwheeled\nwhit\nwinterkill\nwrongfully\nyep\nabolition\naccelerometer\naching\nacrylic\nadept\nalacrity\nalain\nalbum\nalleviate\namply\nancestor\nannoyance\nantagonist\nappliance\nappraisal\napproximate\nariadne\naspire\nattire\naudacious\nauditorium\naurora\nawkwardness\nbaffling\nbait\nbalao\nbandstand\nbarker\nbarter\nbianca\nblending\nblissful\nblooded\nblunder\nbod\nbor\nbourse\nbowler\nbrash\nbravado\nbrendan\nbrewery\nbroaden\nburying\nbusted\nchaff\nchapman\nchen\ncherubim\nchien\ncloven\ncockpit\ncomb\ncommodore\ncompressed\ncondensate\ncongregational\nconnie\nconquering\nconsiderate\nconsolidate\ncorked\ncreaky\ncrossroads\ncurbing\ndaggers\ndampen\ndawning\ndecius\ndecoration\ndeem\ndelicately\ndemi\ndey\ndiffused\ndinar\ndis\ndisagreed\ndiscord\ndisobedient\ndisperse\ndissolve\ndistilled\ndonovan\ndont\ndorn\ndoubly\ndownside\ndrake\ndrawback\ndroll\neducate\neloquence\nembodiment\nempathy\nemptiness\nenactment\nendeavor\nendorsed\nengrossed\nenigma\nepidemic\nerased\nerratic\nethylene\nevelyn\nexaminer\nexcise\nexhilarating\nexhort\nfairer\nfarmhouse\nfertilizer\nfizz\nflamboyant\nflirting\nflowering\nfluke\nflurry\nfolio\nfootwear\nforceful\nformulation\nfriendliness\nfrigid\nfruitless\nfumbling\nfuse\nfutile\nga\ngalactic\ngaunt\ngenetics\ngenial\ngleaming\nglossy\ngosh\ngraciously\ngroping\ngunfire\nhacking\nhallow\nhardness\nharmful\nharness\nhavana\nhellish\nheroism\nhobby\nhoe\nhomeland\nhomeric\nhorned\nhound\nhumidity\niceland\nidyllic\niliad\nillogical\nimitate\nimpeccable\nincompatible\nindecent\ninexperienced\ninformally\ninitiate\ninscrutable\ninseparable\ninstruct\nintangible\nintern\ninterviewer\ninvoke\ninvoluntary\njinn\njorge\njuggling\njulius\nkern\nkersey\nkosher\nlam\nlao\nledge\nlegion\nleveling\nlewdness\nliaison\nliege\nlizzie\nlogically\nmadagascar\nmadrid\nmagdalene\nmandingo\nmanservant\nmating\nmatrimony\nmattress\nmayo\nmeanness\nmelodious\nmerrily\nmessy\nmileage\nmilitant\nmillie\nmiranda\nmisty\nmogul\nmusket\nmusketeer\nnaaman\nnahor\nnam\nnassau\nnighttime\nnikko\nnoel\nnourish\nobservant\nolivia\nopaque\norgy\noutcast\noverlap\npaddy\npalette\npantry\nparameter\npassable\npeerless\npenchant\npervert\nphilosophic\npilgrimage\nplayboy\nplodding\nplowing\npoisoning\npopulace\nportal\npottery\nprecaution\npredominantly\nprematurely\npretended\npreventive\nprostitution\npuppet\nquasi\nquell\nradish\nrapport\nraven\nreassuring\nrecourse\nreddy\nredress\nrefreshingly\nrenegotiation\nresin\nreverie\nrufus\nrupert\nrye\nsabotage\nsalted\nsap\nsavior\nscam\nscandinavia\nscotchman\nscout\nseductive\nseparator\nsey\nshad\nshadowed\nshaggy\nsharper\nsheltered\nshopkeeper\nshrouded\nshun\nsimilarity\nsingled\nskipping\nslab\nslam\nslapping\nslighted\nsmug\nsociology\nsoever\nsovran\nsparkle\nspill\nsplendor\nsplitting\nsporadic\nspurred\nsquarely\nstacy\nstagger\nstan\nstartlingly\nstave\nstephane\nstereotyped\nstoic\nstrewn\nstroll\nsuggestive\nsupervisory\nswarthy\nswiftness\nsyd\ntalkative\ntally\ntandy\ntapping\nterrain\nthankless\nthyroglobulin\ntingle\ntitular\ntoad\ntopless\ntruce\ntuna\nunbelievably\nuncircumcision\nunderstatement\nundo\nunfeeling\nunhappily\nuniquely\nunpaid\nunprepared\nurine\nvalidity\nvanilla\nvanishing\nvegetarian\nvengeful\nvesuvius\nvictorian\nvigilance\nwade\nwatchful\nwavering\nwaxen\nweirdness\nwerner\nwert\nwhiles\nwhipping\nwidowed\nwired\nwreath\nwry\nyawning\nyoungster\nzenith\nzombie\nzoom\naa\nabnormal\nacquiescence\nacquit\nadvantageous\nalarum\nalaskan\nallocate\nalluring\namoral\nanatomical\nandrea\nandreas\nanita\nannoy\nantenna\nantidote\napiece\narchitectural\naright\naristocracy\naristocratic\nascent\nassessed\nastronomer\naugment\nausterity\nautobiographical\navoidance\nbacteria\nbacterial\nbagel\nbagged\nballot\nbani\nbarefoot\nbateman\nbeaver\nbelligerent\nbenefactor\nbertha\nbetimes\nbewildering\nbinnacle\nblackberry\nblinding\nblinked\nboldness\nbooze\nbottomed\nbraced\nbreasted\nbridle\nbrigand\nbubbling\nbuckle\ncairo\ncalmer\ncapra\ncarefree\ncarrot\ncheerleader\ncheery\nchloe\nclearness\nclout\ncoaster\ncolder\ncollateral\ncompetitively\ncompulsion\ncondensed\nconqueror\nconsummate\ncontractor\ncorky\ncornelius\ncosmos\ncounterfeit\ncoup\ncrouch\ncrucify\ncurriculum\ndainty\ndalton\ndane\ndauphin\ndearth\ndeceiver\ndeft\ndespairing\ndictatorship\ndieter\ndisordered\ndrainage\ndrivel\ndross\nedgar\nefficacy\nencamp\nenrich\nenthusiastically\nentrepreneur\nepitome\nequator\nethanol\nethel\nexhausting\nexile\nexistential\nexperimentation\nexuberant\nfarthing\nfascist\nfeedback\nfeigned\nfeminist\nfierceness\nfilings\nfilthiness\nflare\nflaunt\nfluctuate\nforcibly\nforego\nforgetful\nforme\nfreaky\nfrieze\nfutility\ngaily\ngalore\ngel\ngenealogy\nghostly\ngloomily\ngodliness\ngoshen\ngrieve\ngrossly\ngrumpy\ngwen\nhabitual\nhacked\nhandwriting\nharshly\nheater\nhectic\nhedging\nhelmed\nhelmsman\nhilary\nhindu\nhoppity\nhourly\nhowe\nhundredth\nhuron\nhurrah\nidealistic\nillegally\nimpenetrable\nimprudent\ninconvenient\nindignantly\nindividuality\ninfidel\ninfirmity\ninnovation\nintending\nirresponsible\nisolate\njaguar\nkite\nknotted\nlaborious\nlafayette\nlain\nlash\nlatch\nlaurie\nleant\nlender\nlengthwise\nletdown\nliberation\nlied\nlinotype\nliv\nlonesome\nlongboat\nlongitude\nloosen\nlucinda\nmarilyn\nmarina\nmats\nmelissa\nmelon\nmeridian\nmethodical\nmildness\nmilestone\nminer\nmitre\nmockery\nmonotony\nmoratorium\nmoth\nmotorcycle\nmournful\nmouthful\nmumbling\nmushroom\nmythical\nnap\nnapoleon\nnash\nnat\nneedlessly\nnegligent\nnonrecurring\nnonsensical\nnorthwestern\noffing\nonyx\nopener\noperand\nostensibly\noutlaw\nparochial\npastoral\npate\npaternal\npersistence\npeseta\nplaister\nplumbing\npoisonous\npollack\npolyester\npony\npopularly\nportia\npracticed\nprank\nprecinct\npreferable\npreoccupied\npreparatory\nprestigious\nprof\nprofitably\nprosaic\npsychopath\nquantum\nquarry\nquietness\nquill\nrabid\nradius\nrancher\nrattle\nrecipient\nrecreate\nredirect\nreminiscence\nrendezvous\nreplete\nresistant\nreubenites\nrevolve\nrevulsion\nrewrite\nrhythmic\nroadside\nrodney\nrosario\nrotting\nruby\nrue\nsafari\nsaffron\nsans\nsatin\nsaunders\nsausage\nsavvy\nscaled\nscrupulous\nsecluded\nseclusion\nseverity\nsexton\nshaded\nshadrach\nshrine\nshuffling\nsigma\nsilliness\nslade\nsleet\nsmartly\nsneer\nsoaking\nsordid\nsoutheastern\nsoya\nstalwart\nstreetcar\nstubbornly\nsulky\nsundry\nsuperhuman\nsurmise\nsustainable\nsustaining\nsuzanne\nsymposium\nta\ntattered\ntee\ntenure\ntherapeutic\nthinker\nthoughtless\ntithe\ntolerance\ntorrid\ntory\ntowel\ntranquillity\ntransporting\ntri\ntricky\ntrod\ntrooper\ntun\ntwopence\nultraviolet\nunappealing\nuncompromising\nunderstandably\nunearthly\nunfinished\nunlikable\nunlock\nunorthodox\nunsatisfied\nunsettled\nunsympathetic\nvacancy\nverbally\nvial\nvigil\nviola\nvogue\nwallow\nwallpaper\nwaning\nweariness\nwebster\nwhereto\nwhim\nwhimsical\nwinchester\nwonderland\nwooded\nwrapping\nabby\nabounding\naccountant\nacme\nadrenaline\naimless\nalma\nalms\nalthea\nambrose\namish\namos\nana\nanalytical\nanchored\nandre\nandromeda\nanecdote\napprehend\naskew\nauntie\nawakening\nawfulness\nax\nbailey\nbalk\nbamboo\nbeek\nbeliever\nbenny\nbetsy\nblackmail\nblink\nblushing\nboulevard\nbounding\nboyd\nbradley\nbranded\nbrat\nbrazen\nbriskly\nbrotherly\nbuckler\nbumper\nburr\ncam\ncameraman\ncanaanite\ncannery\ncarelessness\ncerebral\ncertify\nchained\nchatter\nchattering\nchic\nclarification\nclergy\ncolin\ncomically\ncompasses\ncompile\nconceited\nconceivably\ncondemning\nconduit\nconfidently\ncongenial\nconsecrated\nconsort\nconspicuously\ncontender\ncontentment\ncontroller\ncoping\ncrook\ncrust\ncurate\ndaphne\ndecisively\ndeference\ndeliverer\ndenouement\ndenounce\ndestitute\ndetachment\ndeter\ndiagnosis\ndill\ndirective\ndiscerning\ndivination\ndivinity\ndownstream\ndriveway\nelicit\nemancipation\nenact\nenlisted\nepilogue\nes\nethiopian\neugenia\nexaggerate\nexasperated\nexasperation\nexcitedly\nexclaim\nexclusion\nexhaust\nexpansive\nexpressly\nextraction\nextraterrestrial\neyesight\nfaction\nfalcon\nfaltering\nfantastically\nfathom\nfetish\nfiduciary\nfilth\nfinite\nfireplace\nflimsy\nflint\nflowery\nfoothill\nforefinger\nforegoing\nforeigner\nforesight\nforked\nfraught\nfray\nfrenzied\nfret\nfrontal\ngaudy\ngazette\ngibraltar\ngillian\nglean\ngradient\ngrill\ngrinch\ngusto\nhalcyon\nhale\nhamburger\nhamper\nhandsomely\nharmon\nhazardous\nheadline\nheadsman\nhectare\nhierarchy\nhispanic\nhousekeeping\nhunch\nhydro\nhyperactive\nhypocritical\nidaho\nimpartial\nimpious\nimpromptu\nincongruous\nincorporation\nindictment\nindividualism\nindulging\nindy\nineffectual\ninefficient\ninkpot\ninnocently\ninstantaneously\ninterlude\nintermittent\ninterrupting\nintrepid\nintrusion\ninventor\nire\njingle\njuncture\nkang\nkat\nknitting\nlard\nlark\nlaver\nlawless\nlegacy\nlena\nleopard\nlifelong\nlighten\nloath\nloft\nlouie\nlunacy\nluscious\nlustrous\nlyon\nmagician\nmahogany\nmalt\nmandate\nmanifestation\nmatchmaker\nmaterialism\nmeddle\nmediator\nmellow\nmercifully\nmethinks\nmishap\nmotif\nmuriel\nnavigate\nnegligence\nness\nniche\nnile\nnoticeably\noarsman\nobservance\nobstinate\nolympic\nomar\nomit\nosmosis\noutdated\noval\noverwrought\noxy\npaired\npatronage\npeat\nperceptive\npermian\nperverted\nphoo\npiper\npiquant\npivot\nplasma\npresbyterian\nprivily\nprofess\nproportional\npurchaser\npyramid\nquack\nquieter\nquot\nra\nrambling\nrapture\nrascal\nrecklessly\nreclaim\nredhead\nreformed\nrepel\nrespectfully\nresplendent\nrestatement\nresurgence\nretribution\nretrospect\nroaming\nrocker\nroper\nrupiah\nsalmonella\nsalutation\nscaffold\nscotcher\nscotia\nscrub\nseaside\nsect\nshack\nshadowing\nshoemaker\nshowmanship\nshred\nsimpleton\nsion\nsioux\nslaying\nsmirk\nsoftening\nsoftwood\nsolicit\nsophia\nspacing\nspirituality\nsplashed\nsplendidly\nsplinter\nsportsman\nsprinkling\nspunky\nstemming\nstupidly\nsubsistence\nsumatra\nsummon\nsunlit\nsuppression\nsurety\nsustenance\nsweating\nsweetener\nsweetie\nsymbolize\nsync\ntappet\ntattoo\ntaunt\ntaxable\ntenor\ntepid\nterminally\ntete\nthenceforth\ntiller\ntobiah\ntoddler\ntoledo\ntopping\ntrainer\ntreachery\ntremulous\ntrivia\ntroubling\ntruncated\nturk\ntycoon\ntyphoon\nugliness\nunbeknownst\nunconcerned\nundeniably\nunimaginative\nunknowingly\nunmarried\nunwed\nunwell\nvat\nveiled\nvenus\nvibrating\nvolunteer\nwarbling\nwart\nwartime\nwheeling\nwhereabouts\nwhiny\nwidower\nwillow\nwindy\nworsen\nwreak\nwrestle\nabe\nablaze\nache\nacorn\nadamant\nadoration\nadrian\nadvisable\naffectation\naffinity\naffirmative\nafterthought\naimlessly\nalmond\nalternatively\namorite\nanthropologist\nantwerp\nanvil\nanyways\napplicant\naqueous\narouse\nartie\nautobiography\nava\naverted\nawaken\nbackwoods\nbalm\nbari\nbarking\nbarlow\nbaronet\nbaroque\nbatch\nbeelzebub\nbeggar\nbellows\nbelshazzar\nbeowulf\nbess\nbeta\nbillboard\nbleating\nblizzard\nblockhead\nbodied\nbomber\nboo\nborderline\nbotched\nbottling\nboulder\nbowie\nbrenda\nbrett\nbriggs\nbrowse\nbrushing\nbulb\nbuzzing\nca\ncanary\ncapstan\ncarve\ncatastrophic\ncentrally\nchaplain\nchess\nchevy\nchoir\nchubby\nchunk\ncircumference\nclave\nclockwork\nclyde\ncollectively\ncolon\ncompanionship\ncompel\ncomplementary\nconciliatory\nconditioner\ncondor\nconfine\nconger\ncongolese\nconjure\nconsecrate\nconsummation\ncontemptuously\ncounteract\ncredulous\ncrewman\ncricket\ncrucible\ndarby\ndeathless\ndebacle\ndecently\ndecomposition\ndecorative\ndecorum\ndefendant\ndegradation\ndelusion\ndependable\ndepraved\ndepravity\ndestroyer\ndevon\ndigit\ndigs\ndilute\ndingy\ndisarmament\ndiscontented\ndiscrepancy\ndishonest\ndissimilar\ndistaste\nditto\ndolphin\ndonate\ndoorstep\ndreamer\ndryness\ndwayne\ndwight\nelectoral\neliza\nelizabethan\nelude\nelwood\nemergence\nenvious\neveryman\nexcruciatingly\nexmoor\nexpansionary\nexquisitely\nextensively\nfabled\nfalter\nfastidious\nfern\nferocity\nfertility\nfervor\nfictitious\nfinch\nfirstling\nflannel\nfledgling\nflitting\nfluctuation\nfluffy\nfocal\nforay\nforbade\nformless\nfragmentary\nfrigate\ngallop\ngarlic\ngasping\ngecko\ngeneralized\ngenerator\ngenerously\ngershom\ngig\nglam\nglaze\nglazed\ngleefully\nglide\nglitter\ngodmother\ngotham\ngrainy\ngranny\ngrazing\ngregg\ngros\ngroundwork\ngrowl\nguernsey\nguiltless\nhaircut\nhallmark\nhalves\nhammy\nheartbreak\nhenchman\nhereditary\nhesitant\nhickory\nhideously\nhillside\nhoary\nhoist\nhomicidal\nhomosexuality\nhonied\nhopped\nhora\nhunky\nidiom\nillumination\nimpressively\nimpudent\nincalculable\nincidental\nincur\nindoors\ninexperience\ninference\ninfidelity\ninfrared\ninjure\ninning\ninquirer\ninsoluble\ninspirational\ninteractive\nintermission\nintrusive\ninvaluable\nironical\njaded\njared\njebusite\njessie\njig\nkeenly\nkilter\nkitten\nkneel\nknitted\nlabored\nlair\nlandslide\nleverage\nlevity\nlinguist\nlivery\nlocale\nlockout\nlogging\nloosing\nludgate\nlukewarm\nlunar\nlurk\nmacabre\nmaddening\nmane\nmarco\nmasonry\nmaverick\nmead\nmediocrity\nmending\nmerciless\nmethodist\nmetric\nmettle\nmicroscopic\nmigrator\nmilan\nmilled\nmistakenly\nmoaning\nmonotone\nmoron\nmosque\nmultinational\nmum\nmusing\nmustache\nmutiny\nmuzzle\nnewfoundland\nnigerian\nnonexistent\nnotify\nnumbing\nonwards\noppressor\nopus\nordain\noutwardly\noverpowering\noverwhelmingly\npall\npanther\nparsonage\npartition\npasted\npatriarch\npatrolman\npeaceably\npeacemaker\npeach\nperky\nperpendicular\nperuvian\npicket\npiety\npineapple\npiping\npooh\nporous\nposs\npowerfully\nprecarious\nprecipitation\npreface\npresumption\nprobation\nprofessionally\nprogeny\npropensity\nproportionately\nprospectus\nprotracted\npsalm\npuffing\npunta\npurport\nquilt\nquint\nradioactive\nrais\nrandall\nrapist\nratification\nrave\nrecapture\nrecital\nrecruitment\nreddish\nrefinement\nrelic\nrepressed\nrequiem\nrespite\nresultant\nretorted\nretrieval\nrotary\nroving\nrung\nsanford\nsanitation\nsapphire\nscall\nscenic\nschizophrenic\nschoolroom\nscolding\nscreeching\nscrewing\nseashore\nselena\nseminar\nseminary\nsensory\nserviceable\nsetback\nsh\nshameful\nshameless\nsheaf\nshove\nshowy\nshutting\nsickle\nsignet\nsimplify\nsleek\nsloping\nslum\nslumbering\nsmelt\nsmiting\nsomber\nsoprano\nsoundly\nspontaneity\nspree\nsquared\nstatesman\nsteeple\nstew\nstreep\nstripping\nsubmissive\nsundown\nsuperficially\nsupervisor\nsuppress\nsurname\nsurrealistic\nsymptom\ntabor\ntanner\ntaunting\ntawny\ntechnician\ntele\ntempestuous\nteri\nthinly\ntightness\ntimetable\ntiring\ntolerant\ntornado\ntowing\ntoxic\ntransparency\ntransplant\ntreading\ntriangular\ntribal\ntripe\ntrough\ntrusty\ntwere\nunattended\nunbalanced\nundermining\nunexplained\nunfaithful\nunhealthy\nunholy\nuniqueness\nunison\nunmatched\nunobtrusive\nunreliable\nunrequited\nunscrupulous\nunusable\nupstream\nvehement\nvenetian\nverify\nvigilant\nvoodoo\nvouchsafe\nvulture\nwaiver\nwearily\nwedded\nwhiff\nwid\nwindfall\nwinona\nwistful\nwithstood\nworkmanship\nwretchedness\nwrithing\nwronged\nzach\nzest\nably\naccomplice\nadmirer\nadulterous\naffront\naftermath\nallegiance\nambergris\namortization\namplitude\nancestry\nanime\nantibody\nantigen\napartheid\naperture\napologetically\nappendix\napprehensive\narming\nasiatic\nathabascan\naviary\navocado\nbackspace\nbane\nbanging\nbanish\nbashful\nbaton\nbeckoning\nbedside\nberg\nbikini\nbillie\nbirthright\nblaine\nbodyguard\nboisterous\nbolivian\nbooby\nboyhood\nbradford\nbravery\nbrew\nbrushes\nbuddhism\nbun\nburdensome\nbureaucracy\ncalcium\ncandid\ncapricious\ncaret\ncary\ncasework\ncastor\ncatalyst\ncenser\nchapiter\ncharmingly\nchasm\ncheaply\ncheng\nchronicle\nchronological\nchurchyard\nclique\ncloying\ncoachman\ncocked\ncommendation\ncommunicative\ncompulsory\ncompute\nconcerto\nconclusive\nconfederacy\nconn\nconspirator\nconvoy\nconvulsive\ncorrecting\ncovetous\ncraftsmanship\ncraving\ncreatively\ncriterion\ncurry\ncurtail\ncurtailed\ncypress\ndangerously\ndebating\ndecadent\ndeductible\ndefective\ndeplorable\ndern\ndeterrent\ndewy\ndialect\ndialysis\ndictator\ndirk\ndisconcerting\ndiscontent\ndiseased\ndisparity\ndispense\ndissent\ndissipated\ndistraught\ndoer\ndolly\ndonated\ndonation\ndope\ndubbing\ndunstable\nduplication\ndwarf\nedging\neducator\neffectual\neffeminate\neleanor\nelegantly\neligibility\nelves\neminence\neminently\nemulate\nencompass\nendanger\nenlightening\nenoch\nepiphany\nerection\nether\nevenly\nexcerpt\nexecutioner\nexpanse\nexpectant\nextinction\nfamilial\nfanatic\nfanatical\nferguson\nfiligree\nfiller\nfinnish\nflabby\nflanked\nflutter\nfootprint\nforerunner\nformality\nformulate\nfragmented\nfreeway\nfrolic\nfrosty\nfroze\nfrustrate\ngail\ngaribaldi\ngeographic\nglamour\nglimmering\nglut\ngram\ngripe\ngrunt\ngymnastics\nhag\nhatchet\nhatchway\nheadstrong\nhector\nhesitating\nhesperus\nhilt\nhitch\nhoisting\nhomestead\nhooded\nhorrendous\nhostess\nhostility\nhugging\nhumiliating\nhumorously\nhunk\nhygiene\nhypnotic\nhypothetical\nimagines\nimpalpable\nimpetuous\nimpotent\nimproperly\nimputation\nincestuous\nincomparable\nincredulous\nindelible\nindisposition\ninexcusable\ninfallible\ninitiation\ninnate\ninquisition\ninsanely\ninsee\ninsulation\ninsurer\nintensify\nintercept\ninterconnect\ninterplay\nintrospective\ninvariant\nironside\nirritable\njenna\njun\njunction\nkan\nkappa\nkhan\nkip\nknoll\nknowingly\nkohl\nlacrosse\nlayered\nleafy\nlees\nlen\nleto\nlettuce\nliken\nlim\nlisbon\nlowell\nmagnet\nmaimed\nmalevolent\nmalformed\nmammoth\nmanuscript\nmarkka\nmarvelously\nmassage\nmatinee\nmedal\nmercilessly\nmerriment\nmerton\nmidsummer\nmir\nmira\nmistrust\nmodal\nmojo\nmonomaniac\nmug\nmull\nmultiplicity\nmutant\nnaphtha\nnationality\nnativity\nnell\nnightfall\nnightmarish\nninja\nnondescript\nnonperforming\nnosed\nnotoriety\nnuclei\nnucleus\nnudge\nobtainable\noccupational\noersted\nofftake\nomnibus\nooze\nope\noutspoken\novertly\npacket\nparamagnetic\nparchment\npathos\npatsy\npave\nperceptible\nperfumed\npessimism\npharisee\nphosphor\npi\nping\npitiable\npitiless\nplayground\nplumb\nportentous\npositioned\npostwar\nprecept\npreferential\npreoccupation\nprocedural\nprosecutor\npsaltery\npub\npuffed\npulley\npurification\nquickness\nquiver\nrameses\nraphael\nrationale\nravenous\nrealignment\nrecount\nrecurrent\nredeemable\nreformer\nregent\nregulate\nrein\nrelinquish\nrelocate\nreside\nresourceful\nrestitution\nretaining\nretread\nretroactive\nrevered\nrevolting\nrightful\nrigidly\nrivalry\nroberto\nrockies\nrouge\nroxbury\nsagging\nsanitary\nsaracen\nsarcasm\nsassy\nsaucy\nscoop\nscoring\nscornfully\nscoundrel\nscratches\nsegregation\nseismic\nseizure\nsemen\nsequestered\nserendipity\nsesame\nseton\nsew\nshamed\nshaving\nshearing\nshiver\nshutter\nskiff\nslacker\nslogan\nslutty\nsmothered\nsnack\nsnaps\nsneering\nsoak\nsoberly\nsodium\nsomeplace\nsophomore\nsorcerer\nsorority\nsoulless\nsoutherner\nspaced\nspaniard\nspasm\nspeckled\nsponge\nstag\nsteadfast\nsteaming\nstoryteller\nstrangeness\nstreamlined\nstu\nstyrene\nsubconscious\nsubsection\nsubstituting\nsurpassing\nsussex\ntabloid\ntact\ntaint\ntambourine\ntanaka\ntapioca\ntaps\ntelegram\ntemperance\ntempo\ntempter\nterri\nthereupon\nthermo\nthermometer\nthinner\nthreesome\ntibetan\ntidal\ntinted\ntoiling\ntownspeople\ntrimming\ntroupe\ntrundle\ntruthful\ntruthfully\nunattractive\nunbreakable\nundercut\nunderwood\nunderwriter\nundulating\nunfeigned\nuniformed\nuniformity\nunimaginable\nunload\nunpunished\nunrecognizable\nunrighteous\nunruly\nunscathed\nunsuitable\nunsuspected\nuntold\nupsetting\nuriel\nvacuous\nvaginal\nvalet\nverification\nvivacious\nvivacity\nvu\nvulgarity\nwail\nwalled\nwaltz\nwasteland\nwaterfront\nwayside\nweakly\nwed\nwhine\nwhirl\nwhirled\nwhirlpool\nwilhelm\nwinded\nwinking\nwist\nwitchcraft\nwring\nyun\nabject\nabreast\nabstain\nabsurdly\nabysmal\naccosted\nacutely\nadjective\nadmissible\nadorn\nadrift\nadvent\nadvertise\naffiliation\naga\naladdin\nalehouse\nalienate\nambulance\namnesia\namoskeag\namt\nanalogous\nanglican\nantiquity\narbitrager\narchaeology\nartful\nasp\nassorted\naugusta\nauthorize\navenger\naxle\nazure\nbabcock\nbac\nbae\nbarbarous\nbartlett\nbatter\nbayonet\nbeguiling\nbel\nbellow\nbesiege\nbespoke\nbethink\nbetrothed\nbiscuit\nbivouac\nbloodthirsty\nbog\nbogus\nbonding\nbotrytis\nbranching\nbrawny\nbreeches\nbreezy\nbrigade\nbrimming\nbuddha\nbudge\nbudgetary\nbuffy\nbugger\nbuoyancy\nburgess\nbutch\ncalvin\ncancellation\ncappy\ncarcass\ncarnegie\ncaro\ncascade\ncaul\ncecil\nceltic\nchilean\nchivalry\nchock\nchowder\ncivilly\nclassmate\nclinch\nclipped\ncockney\ncohesion\ncoiled\ncomer\ncomforter\ncompartment\ncompensatory\ncomplaisance\nconfidentiality\nconservatism\nconstantine\ncontour\nconversely\ncorrectness\ncorruptible\ncourtship\ncovet\ncreditable\ncrucifix\ncruelly\ncryptic\ncubism\ncud\ncutback\ncutlass\ncylindrical\ndarkening\ndarned\ndebbie\ndeceitfully\ndeceptive\ndedicate\ndeduct\ndelaying\ndeliberation\ndella\ndelphine\ndeluge\ndenote\ndexterity\ndiagram\ndiction\ndiffuse\ndilapidated\ndischarging\ndiscouraging\ndiscriminatory\ndistort\ndopey\ndosage\ndram\ndusting\necclesiastical\neerily\neffectually\nenclosure\nenlargement\nenticing\nentrapment\nenvelop\nenvirons\nenvoy\nerase\nescapist\neternally\nevade\nexcellently\nexcruciating\nexplanatory\nextinguished\nextinguishment\nfactual\nfang\nfanning\nfarina\nfearfully\nfeathertop\nfeebly\nfeisty\nfencing\nferocious\nfireside\nfitful\nflavour\nflex\nflicker\nflorence\nflourishing\nflu\nfluorescence\nflushing\nforeskin\nfortify\nfrankness\nfrenetic\nfreshly\nfunky\nfused\ngamut\ngentility\ngit\ngnawing\ngodhead\ngog\ngoliath\ngraveyard\ngraze\ngretchen\ngrower\ngrudgingly\ngull\ngunplay\nguru\nhallway\nhansel\nharem\nhattie\nhazy\nhelplessly\nheterosexual\nhetman\nhumphrey\nhurling\nhyssop\nidentifiable\nidiocy\nimmaculate\nimmigrant\nimpair\nimpossibly\nimpudence\ninaction\ninadvertently\ninconsequential\nindistinguishable\nineffable\ninexpensive\ninfatuation\ninfinity\ninflict\ningot\ningratitude\ninimitable\ninmate\ninnermost\ninnocuous\ninorganic\ninquisitive\nintensification\nintercom\nintonation\nintrinsic\ninure\nirishman\nirradiation\njehovah\njoanna\njolt\njoss\njoyously\njudicious\njug\njustifiable\njustifying\nkedar\nkindergarten\nknave\nknuckle\nlapsed\nliberally\nlibyan\nlightness\nlipstick\nlivid\nlockup\nmack\nmadeira\nmagellan\nmagically\nmagnetism\nmagnification\nmanagerial\nmanxman\nmarker\nmarsh\nmartinez\nmasterfully\nmastermind\nmathematician\nmatty\nmeddling\nmemento\nmerited\nmerlin\nmeta\nmeteorite\nmimesis\nmisconduct\nmisled\nmistaking\nmonumental\nmortally\nmountainous\nmultiplying\nmunich\nmysticism\nnanny\nnapkin\nnegatively\nneptune\nnilpotent\nnimble\nnoonday\nnotebook\nnovo\noblong\nobscene\noctavo\nodin\nomission\noptic\norlando\noutweigh\noverride\noverture\noyster\nparalysis\npasse\npathetically\npathological\npea\npeachy\npenelope\nperchance\nperdition\npersisting\npersuasive\npervading\npewter\npiling\npindarus\npinpoint\npitying\nplaywright\npomegranate\npornographic\nposeidon\npragmatic\nprecedence\npreclude\nprescription\npresumptuous\nprogression\nprominence\npromissory\nproprietary\nprostrate\nproximity\nptolemaic\npunching\npuritan\nputrid\nquantitative\nquickie\nquotation\nrant\nrarity\nration\nreaffirmation\nrecess\nrecoverable\nredundancy\nrefine\nrefugee\nrepast\nrepaying\nreproduce\nresounding\nriesling\nrightfully\nrigorous\nriley\nripening\nripping\nriverside\nrobbin\nrustle\nsag\nsahara\nsalaam\nsalty\nsanctity\nsaturn\nsauntering\nscalp\nscanty\nscarface\nschoolhouse\nscorched\nscorner\nscots\nscrip\nsculptor\nseating\nsecant\nsecretariat\nseethe\nseparates\nseraphim\nshamelessly\nshears\nshoddy\nshoo\nshrimp\nsi\nsimplified\nsmarmy\nsneezing\nsniff\nsnobbish\nsnort\nsnowball\nsoiled\nsolicitous\nspanking\nsparse\nspatial\nspeck\nspherical\nspied\nspindle\nspitting\nspruce\nsquat\nstationary\nstint\nstockade\nstorehouse\nstupor\nsubscription\nsubversive\nsuffocating\nsullenly\nsup\nsupplemental\nsupremely\nswerve\nswitchback\nsymmetry\ntactic\ntactical\ntagged\ntalker\ntedium\ntenement\ntentacle\nterence\nthaw\nthrottle\ntinder\ntoiled\ntomas\ntophet\ntoughen\ntouring\ntownsfolk\ntracked\ntranscend\ntransferor\ntransforming\ntransient\ntraumatic\ntuition\ntuning\ntut\ntweed\nubiquitous\nunabated\nuncomfortably\nuncut\nundaunted\nundercurrent\nundergraduate\nunexciting\nunfavorable\nunfocused\nunfounded\nunluckily\nunquoted\nunreasonably\nunwarranted\nuprightly\nuprising\nurgently\nurinal\nvantage\nvehemence\nvehemently\nvenison\nverdant\nverdure\nvertically\nvesture\nviability\nviking\nvindictive\nviner\nvisionary\nvodka\nvolley\nvoter\nwading\nwakeful\nwebber\nwellington\nwheresoever\nwintry\nwonted\nwoodside\nwording\nworkable\nwormwood\nwreckage\nyeast\nyorkshire\naccession\nadelaide\nadulthood\naerator\naero\nafoot\nafresh\naggravate\naka\nalign\nallure\nalternating\nalumni\nambivalent\namusingly\nananias\nantagonism\napathy\nar\naristocrat\narmagnac\narmored\nartistically\nascii\nastonied\nauditor\naura\nauthoritarian\nauthoritative\nautonomic\navenging\nbabel\nbaldness\nbaleen\nbaring\nbeforetime\nbene\nbenediction\nbenign\nbequeath\nbewitching\nbinary\nbiologist\nblackout\nblaming\nblaspheme\nbogart\nbooking\nbottled\nbracing\nbrag\nbrawn\nbrilliancy\nbrittle\nbroom\nbuckhorn\nbuggy\ncabman\ncannibalism\ncanterbury\ncapitalist\ncaption\ncass\ncassis\ncaste\ncatharsis\ncensorship\nceramic\nceremonial\nchambermaid\nchaps\ncharacteristically\ncharley\nchastise\nchatting\ncherokee\ncheshire\ncheyenne\nchildless\nchildlike\nchilly\nchisel\nchristie\ncinematically\ncirca\ncite\nclamorous\nclank\ncleft\nclime\nclumsily\ncoaching\ncob\ncoexistence\ncommencement\ncommute\ncomposedly\ncompost\ncompounding\nconcurrent\ncondescend\nconfide\ncongruence\ncontagion\ncontagious\ncontentious\ncontributor\ncostuming\ncote\ncredo\ncringing\ncripple\ncrone\ncruet\ncrystalline\nculmination\ncultivation\nculturally\ncurl\ncurricle\nczar\ndanielle\ndecayed\ndedan\ndefiant\ndefuse\ndelirium\ndelve\ndenomination\ndent\ndeplore\ndeprive\ndetour\ndetriment\ndevastation\ndiaphragm\ndigger\nding\ndipping\ndirectorate\ndireful\ndisability\ndispel\ndistortion\ndivert\ndivinely\ndorothy\ndoted\ndover\ndreamt\ndrest\ndrier\ndunst\neasygoing\nedifice\neduardo\nelaborately\nelevate\nelihu\nembarrassingly\nempyreal\nenlighten\nenterprising\nentourage\nentrails\nentreaty\nenvision\nernst\neroded\nerroneous\nevacuate\nexcusable\nexpertly\nexploitative\nexportable\nexpressway\nextravagance\nfad\nfascism\nfatality\nfatally\nfeathered\nferrara\nfie\nfilial\nfinery\nfingered\nfingernail\nfireman\nfirstly\nflap\nflaring\nflatness\nfleshed\nfooling\nfooted\nfoothold\nforestall\nforfeit\nfreighter\nfritz\nfruition\nfurnishing\nfurrow\ngable\ngainst\ngallium\ngarb\ngenesis\ngentlemanlike\ngeometry\ngermanic\ngigolo\ngiver\ngland\nglassy\ngluck\ngorge\ngourd\ngout\ngrammatical\ngrandiose\ngrandpa\ngrasshopper\ngravy\ngypsy\nhannibal\nhansom\nhap\nhasidic\nhatcher\nhatching\nhaw\nhazel\nhedgehog\nhet\nhon\nhoneycomb\nhoop\nhorizontally\nhostler\nhumanitarian\nhunchback\nhybrid\nhysterically\nhysterics\nimmovable\nimmunity\nimpediment\nimperfection\nimpersonation\nimplicitly\nimpregnable\nimpropriety\nincarnate\nincompetence\nincongruity\ninconsistency\nindefatigable\nindisposed\ninducement\ninexhaustible\ninfallibly\ninflated\ninflux\ninfringement\ninjurious\ninmost\ninnkeeper\ninordinate\ninscription\ninsecurity\ninsomnia\nintercontinental\nintersect\nintuitive\ninured\nionic\niscariot\njapheth\njelly\njeopardize\njethro\njocund\njot\njovial\nkafka\nkaraoke\nkathryn\nkennel\nkeystone\nkidney\nkristen\nlac\nlagging\nlaurel\nlavender\nledger\nlengthen\nlicking\nlien\nlifo\nlimber\nling\nlinseed\nlithe\nlivelihood\nliveliness\nloggia\nlongs\nlunged\nmahayana\nmainmast\nmainstay\nmalaise\nmaneuver\nmanning\nmanure\nmao\nmarksman\nmaterialistic\nmaw\nmembrane\nmercedes\nmethought\nmeticulous\nmeticulously\nmigrant\nmim\nmisfire\nmobility\nmodeling\nmonstrosity\nmoran\nnary\nnavel\nneapolitan\nnocturnal\nnorma\nnourishment\nnuisance\nnumb\nnuptial\noblique\noddity\nodeon\noffender\nofficious\nomaha\norson\noutrun\novercast\novershadow\npac\npallor\npanache\npanties\nparalytic\nparenthood\nparley\nparsley\npartaker\nparticipant\npartridge\npatrice\npavilion\npeacefully\npedestal\npedigree\npeeling\npensacola\npenthouse\nperiphery\nphyllis\npic\npictured\npinched\npituitary\nplanner\nplumber\npo\npoe\npoignancy\npollen\npollute\nporky\nposey\nprecipitated\npredatory\nprejudiced\npretense\nproficient\nprotestantism\nradiance\nramble\nrampage\nrandolph\nrattled\nravens\nreassurance\nreceptionist\nrecite\nrecreational\nreeled\nreflective\nreflectively\nregency\nregrettably\nreintroduction\nrekindle\nrelieving\nremission\nreplenish\nreputable\nretort\nretrospective\nreviving\nrhea\nrheumatic\nriff\nrivet\nrounder\nsable\nsac\nsadie\nsash\nsavagely\nscabbard\nscarred\nscholarly\nschooling\nscissors\nscramble\nscrambling\nscrewball\nsecurely\nsenile\nserenely\nservitude\nsever\nsha\nshading\nshedding\nshorten\nshrank\nshuffle\nshuttlecock\nsibling\nsilicon\nskiing\nskimpy\nslashing\nslicker\nslit\nslung\nsnappy\nsoccer\nsocietal\nsod\nsojourner\nsolicited\nsoluble\nsower\nsowing\nspecificity\nspectacularly\nspectator\nspectral\nspinal\nsporadically\nspotty\nsquadron\nstair\nstalker\nstarvation\nstealer\nstealth\nsteamship\nstemmed\nstitch\nstraighten\nstraitly\nstrategically\nstunningly\nsubdivision\nsucculent\nsucker\nsuds\nsupernova\nsuperpower\nsurfer\nswifter\nsylvia\nsyntax\ntaboo\ntack\nteaming\nteman\ntenuous\nterrier\ntexan\ntheoretically\nthicket\nthoughtfulness\nthroughput\nthumping\ntick\ntinker\ntireless\ntonner\ntopmost\ntransducer\ntransvestite\ntraverse\ntremor\ntrumpeter\ntwitch\nunceasing\nunconquerable\nuncouth\nunctuous\nundecided\nunderdog\nundertone\nunduly\nuneasily\nunexplored\nunfathomable\nunforeseen\nungracious\nunicorn\nunintelligible\nuninterrupted\nunpardonable\nunravel\nunremarkable\nunstoppable\nunsung\nunwise\nvaliantly\nvalor\nvariously\nvatican\nvending\nvenom\nveranda\nveterinary\nvibration\nvic\nvietnamese\nvindication\nvinyl\nviscosity\nvolition\nvomiting\nvoyager\nwaive\nware\nwarsaw\nwayward\nwhalebone\nwhitehead\nwhodunit\nwichita\nwily\nwishful\nwoefully\nwoodward\nwot\nwrecking\nwrest\nwrestler\nxi\nabdomen\naberdeen\naboriginal\nabrasive\nabsently\naccommodating\nadar\nadditive\nadequacy\nadjourn\naffluence\nalbumin\nalchemy\nalibi\nallergic\namalgamation\nambrosial\namicable\nammonite\nanimate\nanionic\nannoyingly\nantelope\nanthropology\nantiseptic\nantithesis\napricot\naptitude\narable\narchaeological\narchery\nartifice\nartistry\nartless\nascribe\naspiration\nassertive\nastride\naswell\nattacker\nattainment\naudition\naugustus\nautopsy\nauxiliary\navaricious\navid\nbadge\nbandit\nbangkok\nbarnard\nbarouche\nbaseless\nbeak\nbearable\nbeauteous\nbedchamber\nbefriend\nbella\nbethuel\nbiology\nblasphemous\nblissfully\nblithe\nblob\nbois\nbonfire\nbong\nbordeaux\nbowsprit\nbrawl\nbrewer\nbritannia\nbrodie\nbrothel\nbuckskin\nbuddhist\nbustling\ncalibre\ncanning\ncanon\ncanopy\ncapes\ncaprice\ncarolyn\ncatalytic\ncate\ncellulose\ncentennial\ncentigrade\ncetology\nchancery\ncharacterize\nchastity\nchecker\nchili\nchloride\nchopped\nchristendom\nchromatic\ncinderella\ncircumcise\ncistern\ncleric\nclustering\ncoherence\ncomplication\nconant\nconcurrence\ncondescension\ncongestion\ncongratulatory\nconjugate\nconsecration\nconstraint\ncontending\ncontrive\nconverting\ncopycat\ncornerstone\ncoronation\ncorporeal\ncosy\ncourageously\ncourtier\ncourtyard\ncracker\ncrackers\ncredulity\ncrepe\ncrescent\ncrested\ncriticize\ncruiser\ncrutch\nculprit\ncultured\ncuteness\ndank\ndeathbed\ndeepening\ndefraud\ndeftly\ndeliverable\ndenominator\ndescriptive\ndesi\ndesignate\ndesperado\ndevelopmental\ndifferentiation\ndigress\ndilated\ndirectional\ndirge\ndisapprove\ndisclaimer\ndisconnected\ndiscontinue\ndiscredit\ndiscriminating\ndisillusionment\ndisorderly\ndistemper\ndiurnal\ndiva\ndivergent\ndomine\ndomineering\ndominic\ndonor\ndorm\ndramatics\ndraughts\ndroop\ndrowsy\ndrugstore\ndrummer\nduane\ndueling\nearthen\nebony\neclipse\nedifying\nelasticity\nelectrostatic\nelk\nembankment\nembargo\nembattled\nemblem\nemotionless\nenjoin\nenthusiast\nentice\nenvying\nequate\neraser\nerik\nevangelism\nevangelist\nevolutionary\newe\nexhortation\nextant\nfabrication\nfag\nfainter\nfaithless\nfarcical\nfastening\nfaultless\nfiasco\nfiberglas\nfiddle\nfife\nfinesse\nfishy\nflagging\nflashlight\nfleshy\nflores\nflute\nfoggy\nforensic\nfoursquare\nfraternity\nfresco\nfringed\nfrothy\nfructose\ngala\ngalley\ngander\ngarish\ngarret\ngeographically\ngermanium\ngilded\nglisten\ngoblin\ngottlieb\ngranddaughter\ngrecian\ngrenade\ngrievance\ngrimace\ngrizzled\ngrouped\ngrouping\ngruel\ngrunting\ngush\nhacker\nhalfback\nhammering\nhandicap\nhawkeye\nheady\nhelpfully\nhemlock\nhesitatingly\nhic\nhick\nhoarsely\nholster\nholt\nhulk\nhurdle\nhusbandry\nillegitimate\nillicit\nilluminate\nimmediacy\nimmoral\nimmune\nimpartiality\ninanimate\ninaudible\ninauguration\ninception\nincorruptible\nindecision\nindices\nindifferently\nineptitude\ninert\ninertia\ninescapable\ninexorable\ninferno\ninflamed\ninformative\ninfrastructure\ninfusion\ninhibit\ninoffensive\ninsensitive\nintentioned\ninteragency\nintercession\nintermittently\nintricately\ninvariable\ninvolution\niota\niris\niroquois\nirvin\nisis\nita\nitch\nitching\njargon\njasmine\njavan\njavelin\njawed\njewess\njing\njittery\njumbo\njute\nkeelson\nketchup\nkeyhole\nknop\nlaborer\nlacy\nlampoon\nlarboard\nlave\nleicester\nlicensee\nlimping\nlinden\nlindsay\nlinguistic\nlining\nlionel\nloathe\nlogged\nlogistics\nlois\nlookout\nloophole\nloot\nloral\nlotus\nloveliness\nlucia\nlucid\nlydia\nmadhouse\nmagnificence\nmagnificently\nmakeshift\nmantra\nmarcos\nmarquee\nmasquerade\nmatchless\nmaudlin\nmayer\nmeager\nmesa\nmesh\nmethodically\nmicroscope\nmidget\nmilder\nmildew\nmilla\nmillstone\nmingle\nmirrored\nmiser\nmisstep\nmistook\nmisuse\nmodification\nmono\nmont\nmorgue\nmosaic\nmottled\nmoulin\nmouthing\nmultiplex\nnailing\nnecessitate\nneedlework\nnitro\nnook\nnorsk\nnortheastern\nnothingness\nnu\nnutshell\nobliquely\noccult\nomniscient\nonslaught\norganism\noutrageously\novercoat\novergrown\noverhang\noverproduction\noverrun\noversee\noverseer\noverwhelm\npacker\npackthread\npalatable\npang\npanorama\npant\npaolo\nparadigm\npascal\npasting\npawn\npeculiarity\npenguin\nperishing\npernicious\nperpendicularly\nperpetrator\nperplexing\npert\npertain\nperturbation\nperversely\nperverseness\npharmacy\nphilharmonic\nphilippe\nphoebe\nphonologic\npickle\npiped\nplacidly\nplaid\nplateau\nplayfully\npleasingly\nplush\npolaris\npolo\nportly\npotash\npout\nprecocious\nprentice\npretext\nprocreation\nprohibit\nprolific\npromenade\npromontory\nprovident\npsychopathic\npunctual\npuny\npursuer\npyrrhus\nquintessential\nracket\nrafael\nraft\nramon\nrampart\nrapier\nrationality\nrationally\nreactor\nrealtor\nreappearance\nrecede\nreceivables\nrecoil\nreconnaissance\nrectangle\nrecur\nredder\nreformation\nregulus\nreiner\nreinsurance\nremorseless\nrenovation\nreprehensible\nreproduction\nrequite\nrestorative\nreuel\nreverent\nric\nringed\nrinse\nripple\nromantically\nrover\nrowdy\nrudd\nrumbling\nrunway\nrusk\nsaccharine\nsalon\nsamantha\nsanballat\nsatiate\nsavor\nsavoy\nsawmill\nscaffolding\nscandinavian\nscanning\nscathing\nscholastic\nsecede\nselina\nsemolina\nsensuality\nserpentine\nshagged\nshale\nshawn\nshifty\nshipwreck\nshocker\nshod\nshortening\nshowboat\nshrug\nshyness\nsingly\nskeet\nslob\nsloop\nsmeared\nsmoother\nsnob\nsnoring\nsoggy\nsolvent\nsonar\nspecialization\nspiked\nsplashing\nsporty\nsqualid\nstampede\nstarve\nstillman\nstolidly\nstork\nstrathspey\nstripe\nstylist\nsubterranean\nsunrising\nsupple\nsymbolically\nsymptomatic\ntablet\ntanned\ntanning\ntaper\ntapestry\ntara\ntaunton\ntechnicolor\ntelesis\ntemp\ntemperament\ntenebrae\nterrify\nterrorize\ntestosterone\ntheatrics\nthematically\nthereunto\ntheta\nthirtieth\nthriving\nticking\ntickle\ntickled\ntimidity\ntinged\ntingling\ntinkling\ntitan\ntoffee\ntonal\ntormenting\ntotalitarian\ntownship\ntransatlantic\ntransferring\ntransitional\ntrauma\ntrepidation\ntrickle\ntrig\ntropic\ntrucking\ntrustworthy\ntuberculosis\ntyrannical\nuncaring\nuncompetitive\nuncontrollable\nuncredited\nundiscovered\nunforgivable\nunification\nunimpressed\nunissued\nunitarian\nunleashed\nunpopular\nunquestionable\nunreserve\nunsecured\nunsold\nunwritten\nuptown\nusable\nvagabond\nvalidly\nvanguard\nvase\nventilation\nvera\nvertigo\nvet\nvibrancy\nviciously\nvigilante\nvillainy\nvirtuoso\nvis\nvita\nvoluptuous\nwaged\nweirdly\nwendell\nwhereat\nwhiting\nwildness\nwindmill\nwindshield\nwiry\nwistfully\nwoeful\nwolfgang\nwomanhood\nworkmanlike\nworsted\nworthiest\nwouldst\nwounding\nwreathen\nwrench\nwretch\nyin\nzorro\nabstinence\naccelerator\naccountable\nactivation\nadlai\nadmittance\naery\naffirmation\nagile\nagility\nagrarian\naground\nahem\nahoy\nailment\nalbatross\nalbino\nalcoholism\nalertness\nalison\nallah\naltitude\nalveolar\nalvin\namity\nanarchic\nanarchism\nangelic\nangola\nanimosity\nanonymity\nantarctic\nantichrist\nanticlimactic\nantiquated\napace\naplomb\napologetic\napportionment\naquarium\narabic\narbiter\narmpit\naromatic\narticulation\nasbestos\nassimilation\nastonish\nastral\nathletics\natrocity\nattainable\natypical\nbaken\nbalmy\nbanc\nbanister\nbaptize\nbartholomew\nbash\nbasil\nbaxter\nbazaar\nbeaux\nbeech\nbeehive\nbeguile\nbelated\nbereft\nbezaleel\nbicycle\nbiwa\nblanc\nbloat\nbloodless\nblueprint\nboarder\nbondman\nboon\nborough\nbotch\nbottoming\nbouquet\nbourbon\nbourgeois\nbrevity\nbridal\nbrine\nbrobdingnag\nbroking\nbrunt\nbugle\nbulge\nbullying\nburglary\nburgundian\nburnside\nbutyrate\nbuxom\ncanton\ncanvass\ncapped\ncaramel\ncaress\ncaressing\ncatatonia\ncautionary\ncentrale\ncepe\ncertification\nceylon\ncharacterful\nchesapeake\nchilde\nchildishness\nchiseled\nchoreographer\nchristiana\nchromatography\ncirculate\ncitadel\nclaiborne\nclaimant\nclaudio\ncleanup\nclit\nclump\ncoax\ncollide\ncoloring\ncomplacent\ncompromising\ncondensation\nconfidentially\nconjugal\nconsonantal\ncontrite\ncontrivance\nconvent\ncordially\ncornered\ncornet\ncouched\ncranky\ncrass\ncrater\ncraze\ncriminally\ncroquet\ncrumb\ncrumpled\ncruse\ncuckoo\ncuddly\ncupboard\ncuracy\ncuring\ncyclical\ndalliance\ndapper\ndeafening\ndecanter\ndecease\ndeceiving\ndecipher\ndeclarative\ndee\ndeflator\ndeformed\ndelectable\ndell\ndemure\ndenominational\ndeservedly\ndeteriorate\ndetest\ndetonation\ndeviate\ndevious\ndewdrop\ndexterous\ndiadem\ndigestion\ndisarmed\ndisarming\ndiscreetly\ndisliking\ndistal\ndistasteful\ndixie\ndocile\ndogged\ndogmatic\ndoorman\ndorian\ndoting\ndowncast\ndowntrodden\ndraper\ndrawdown\ndrawl\ndregs\ndriller\ndrip\ndrumlin\ndullness\ndummy\ndunghill\nduodecimo\ndupe\ndyke\neater\neffortless\nelated\nelectrolytic\nenchanter\nenchantment\nengraved\nenroll\nequinox\neradication\nespionage\nethyl\neunuch\nevacuation\nexpediency\nextol\neyebrow\nfainting\nfamiliarly\nfarouk\nfatherly\nfathomless\nfatter\nfawning\nfelon\nferociously\nferrous\nfestive\nfeverishly\nfigurative\nfilly\nflea\nfluent\nflyer\nfo\nfootpath\nforeknowledge\nforint\nforties\nfragment\nfretting\nfrontage\nfungus\nfurry\ngalloping\ngeez\ngileadite\ngirlish\ngirt\ngiuseppe\nglib\ngloss\ngloucester\ngodlike\ngoldeneye\ngoldie\ngoofiness\ngrad\ngraded\ngraduating\ngrapefruit\ngratify\ngratis\ngreedily\ngreenish\ngregarious\ngrievously\ngrit\ngroove\ngruffly\ngummy\nhanoverian\nhaphazard\nhawthorn\nheedless\nheighten\nheinous\nhenceforward\nherby\nhereunto\nheron\nhertz\nhireling\nhist\nhive\nhivite\nhobbling\nhodgepodge\nhokum\nhomemade\nhomogeneous\nhookers\nhubby\nhuddle\nhumbug\nhumid\nhydraulic\nida\nidiosyncratic\nignite\nignorantly\nike\nilluminating\nimmeasurable\nimmemorial\nimmorality\nimperious\nimpute\nincidence\ninclusive\ninconsiderable\ninconstancy\nindebtedness\nindigenous\nindignity\ninexorably\ninflexible\ninfuse\ninky\ninnuendo\ninro\ninsistent\ninstinctive\ninstrumentation\ninsulated\ninsurmountable\ninterstellar\nintimidation\ninverted\ninvisibly\nion\nirreparable\nirrepressible\nirresolute\nirritably\nissuer\njaime\nkarate\nkensington\nkhalifa\nkilometer\nkinky\nlamentable\nlamenting\nlandsman\nlax\nlazily\nleaky\nleaner\nlecturer\nlegislator\nlemonade\nlesbianism\nlettering\nlevers\nlewd\nliberalization\nlimey\nlint\nlite\nlori\nlotion\nlucian\nlullaby\nlunge\nlux\nmacduff\nmacon\nmagnate\nmagpie\nmalady\nmalay\nmarcia\nmaroon\nmassy\nmeasles\nment\nmes\nmesopotamia\nmetaphorical\nmethuselah\nmilieu\nmilliner\nmincing\nminding\nmisconception\nmodernity\nmoloch\nmoniker\nmoonlit\nmooring\nmoose\nmop\nmorphophonemics\nmortify\nmortifying\nmote\nmousy\nmuller\nmutilation\nmutter\nnazarite\nnebulous\nneedful\nnehemiah\nnetting\nnibble\nnicaraguan\nnihilistic\nnipple\nnobly\nnominally\nnonstop\nnovice\nnoxious\nnugget\nnumbingly\nobeisance\nobjectionable\nobjectivity\nobstinacy\nodorous\nole\nolga\nomega\nominously\nontological\noperatic\nopportune\nopulent\noriginate\nornamental\northodontic\northodontist\notherworldly\noversized\now\npaddle\npalatability\npaling\npalladium\npanamanian\npantomime\nparisian\nparson\npastern\npatently\npayed\npeacock\npenner\npenniless\nperiodical\npermissive\nperpetuate\npest\nphalanx\npigment\npinned\nplanter\nplatter\nplume\nplummet\npointedly\npong\nposh\nprecipice\nprerequisite\nprettily\nprimeval\nprimrose\npriscilla\nprofessionalism\nprofundity\npromptitude\npronged\nproprietorship\npropulsion\nprussian\nptolemy\npul\npunctually\npunitive\npurer\npurposefully\nquantify\nquart\nquarto\nquirk\nquixote\nraillery\nramp\nrationalize\nraul\nreadable\nreassure\nreceivable\nreceptive\nreconsideration\nrefinance\nrefreshment\nregrettable\nregularity\nremedial\nrepugnant\nreputed\nresearcher\nretard\nretelling\nrevalue\nreversion\nrevisionist\nribbed\nringleader\nrococo\nrollicking\nromulus\nroxy\nrudimentary\nruinous\nsagacious\nsalter\nsamba\nsantiago\nscape\nscarcity\nscepter\nschooner\nscooped\nscowling\nseething\nsenegal\nsensibly\nservo\nsewed\nshavings\nshee\nshoal\nshopgirl\nshouldered\nsidelong\nsierra\nsil\nsilken\nsill\nsimulation\nsis\nskepticism\nskye\nslot\nsmacking\nsmelly\nsmit\nsniper\nsob\nsolicitor\nsoloist\nsonata\nsophomoric\nspaghetti\nspank\nspecter\nspiced\nspire\nsplice\nspoilt\nspotless\nspotting\nsprite\nsprouting\nsqueaking\nsqueaky\nstaccato\nstarlet\nstash\nstaunch\nsteamer\nsteeper\nsteeply\nsteersman\nstewardess\nstifling\nstimulative\nstoicism\nstoker\nstroller\nstronghold\nsubsidize\nsubstantive\nsuddenness\nsultan\nsunder\nsuperimposed\nsupposition\nsur\nsurcharge\nsurfaced\nsurinam\nsurmised\nswimmer\ntacky\ntahiti\ntalky\ntane\ntantamount\ntass\nterminology\nthespian\nthimble\nthistle\nthrob\nthunderous\ntilt\ntina\ntipsy\ntitillating\ntoothpick\ntote\ntouchy\ntoughness\ntragically\ntrample\ntran\ntranscendent\ntranscendental\ntransmit\ntreacle\ntrent\ntripping\ntubing\ntwill\ntwine\ntwixt\ntypecast\nugandan\nunaccountably\nunafraid\nunanswerable\nunassuming\nunbearably\nuncaught\nundefiled\nunderestimate\nunderfoot\nunderline\nundetermined\nundistinguished\nundying\nuneducated\nunequivocally\nunflattering\nunimpressive\nunjustified\nunjustly\nunlikeable\nunloaded\nunmistakably\nunrestrained\nunsinkable\nunspectacular\nunwholesome\nunwitting\nvapid\nvariant\nvegetal\nveneer\nveracity\nvertebrae\nvicar\nvinny\nviolinist\nvisibility\nvitally\nvoiceless\nvying\nwaif\nwand\nwane\nwarble\nwaterfall\nwaver\nweaponry\nweld\nwhew\nwholeheartedly\nwicker\nwicket\nwield\nwigwam\nwildcat\nwince\nwolverine\nwoodland\nwoodpecker\nwoolly\nwrenched\nwrung\nyearn\nzealously\nzing\nabashed\nabo\naborigine\nabstracted\naccessory\naccumulate\nacerbic\nacetate\nactivate\nactivist\nadage\nadder\nadhesive\nadmonition\nadoniram\nadullam\naerosol\nafterlife\nagag\naggravating\naggravation\naghast\nalbania\nalejandro\nalfa\nalgae\nalias\nalight\namnesty\namylum\nandroid\nanemic\nanimating\nannals\nannouncer\nante\nappreciable\nappreciably\napproachable\narbitrarily\narchive\narduous\nargo\narid\narterial\nartfully\naslant\nassailant\nassiduous\nastronomical\natheism\nathirst\nathwart\naussie\nautopilot\navarice\nbabble\nbach\nbackside\nbailiff\nbala\nbanca\nbandage\nbanded\nbarricade\nbecker\nbelgrade\nbellboy\nbenjamite\nbequest\nberliner\nbernie\nbeseeching\nbetters\nbillet\nbilliard\nbiographical\nbisexual\nbismuth\nblacker\nboa\nbobbing\nbondwoman\nbothersome\nbounteous\nbountiful\nbram\nbran\nbravo\nbravura\nbreakout\nbuckwheat\nbumpy\nbureaucratic\nbursar\nbuttoned\ncabaret\ncadence\ncalais\ncaldron\ncapillary\ncappie\ncardiovascular\ncareering\ncarolin\ncasket\ncater\ncavern\ncentering\ncenterpiece\nchablis\nchagrin\nchandelier\nchangeable\ncharmer\nchide\nchiefest\nchimpanzee\ncinnamon\ncipher\ncitric\ncivilizational\nclara\nclasp\nclasping\nclustered\ncoaxing\ncobalt\ncobra\ncocoon\ncoiling\ncolorless\ncolumnist\ncomatose\ncomplicity\ncompression\ncomputation\nconcessional\nconfectioner\nconspire\ncontemplative\ncontinuum\nconvulsively\ncopernican\ncorey\ncorporal\ncorrupting\ncounterbalance\ncountess\ncountryman\ncove\ncowardice\ncrackling\ncrippling\ncroc\ncrumble\ncrummy\ncrusader\ncrux\ncursory\ncustomarily\ncutthroat\ncyclist\ndab\ndade\ndag\ndauntless\ndecadence\ndegenerate\ndegraded\ndegrading\ndejection\ndelia\ndelilah\ndelinquent\ndeluxe\ndemonic\ndeodorant\ndeplored\nderby\nderrick\ndetectable\ndevalue\ndiametrically\ndigested\ndilate\ndildo\ndiminutive\ndisappointingly\ndisastrously\ndisgustingly\ndispensation\ndisplace\ndistillation\ndistrustful\ndoleful\ndorado\ndowngrade\ndragnet\ndrone\ndrumming\ndryly\nducking\nduff\ndyer\ndynamiter\ndynasty\neccentricity\neffusion\negotistical\nelevation\nembody\nemphatic\nemphatically\nencryption\nenergetically\nenjoyably\nenos\nenviable\nequine\neroticism\nescalate\nescapism\nescrow\nethic\nevangelical\nevince\nevocative\nexam\nexhale\nexpeditiously\nexpel\nexperimentally\nfaceless\nfacet\nfacetious\nfanaticism\nfeelingly\nfibrosis\nfickle\nfiftieth\nfiguratively\nfiltering\nfinder\nfink\nflickering\nflirt\nflirtation\nfloundering\nfootstep\nfoppish\nforgetfulness\nforgivable\nfowler\nfreedman\nfrighteningly\nfronting\nfunk\nfurlong\ngash\ngetaway\ngirth\ngittite\ngiveaway\ngleeful\ngodless\ngoer\ngolly\ngong\ngrapple\ngrappling\ngravitation\ngroin\ngrowling\nguillermo\ngulp\ngunman\ngunnar\ngunshot\ngynecologist\nhaitian\nhandgun\nhanna\nhardening\nhaughtiness\nheartbeat\nheavyweight\nheedful\nheiress\nheraldic\nhex\nheyday\nhighness\nhindrance\nhock\nhomo\nhooper\nhumorless\nhumped\nhun\nidealist\nillustrative\nimbecile\nimpeccably\nimplacable\nimplant\nimportation\nimprovise\nimpunity\ninaugural\nincredulity\nindisputable\nindoor\ninedible\nineligible\ninexpressible\ninfirm\ninfluenza\ningratiating\ninhibition\ninitialize\ninsidious\ninsofar\ninterdependent\ninterlink\ninterlobular\ninterrogation\nintroductory\ninvestigative\ninvigorating\niodide\nirreconcilable\nirregularly\nirreverent\njackass\njacoby\njade\njanice\njannock\njed\njerahmeel\njezreelite\njourneying\njudiciously\njumble\nkatharine\nkerry\nkingly\nkinship\nknowledgeable\nlabrador\nlars\nlawman\nlayoff\nleash\nleer\nleftover\nlenny\nlethargy\nliberia\nliman\nlimpid\nliterate\nlordly\nlucre\nmachinist\nmaddeningly\nmaestro\nmaki\nmalignant\nmallet\nmammon\nmaniacal\nmanifestly\nmanny\nmano\nmanslaughter\nmarbles\nmarketer\nmasturbation\nmaterialize\nmaternity\nmatin\nmeagre\nmede\nmeditating\nmeekly\nmem\nmeshech\nmethyl\nmichaelmas\nmicrofilm\nmigrate\nmince\nmisogynistic\nmodernize\nmoe\nmolasses\nmoll\nmonsoon\nmonte\nmorose\nmorpheus\nmotherly\nmournfully\nmulberry\nmused\nnaivete\nnapa\nnastiness\nnationalist\nnaturalistic\nnefarious\nneutralist\nnewcastle\nnicodemus\nnob\nnomenclature\nnortherner\nnotched\nnotoriously\nnourishing\nnutmeg\noat\nobese\nobligingly\nobsequious\noii\nomer\nonan\nostentatious\nottoman\noutback\noutcry\noutspread\noutworld\noverdose\noverload\novershoot\nozone\npainstaking\npainstakingly\npales\npaltry\npanhandle\npansy\nparasympathetic\npare\nparthenon\npenal\npercussive\npervasive\npesky\npetite\npetrie\npetrified\nphonemic\nphysicist\nphysiology\nphysique\npimple\npiston\npitchfork\npiteous\npitted\nplanking\nplatted\npliny\nplumage\npoetics\npolyethylene\npopulate\npossum\nposterior\npotted\npotty\nprating\npredominant\npremonition\nprep\npricked\nprima\nproliferation\npromiscuous\npropagation\nprophetess\nprying\npseudonym\npshaw\npsychotherapy\npumpkin\npurgatory\npurposeful\nquadrant\nquartermaster\nquibble\nquicksand\nquirt\nrad\nrainstorm\nraja\nraping\nrapping\nrata\nravening\nreassess\nreassured\nrebut\nrecitative\nrectangular\nrefill\nreg\nreimburse\nrel\nrenounce\nrepertoire\nrepress\nrepression\nreprieve\nrepute\nresentful\nresistless\nrespondent\nrestlessness\nretracted\nreunite\nrevel\nrevert\nrevisit\nrife\nrighteously\nrippling\nroe\nroulette\nroutinely\nrowed\nrubble\nrupture\nsalaried\nsanders\nsatchel\nsavory\nscab\nscalding\nscallop\nscantily\nscapegoat\nschilling\nschoolmistress\nschoolteacher\nscientifically\nscorching\nscrabble\nscrolled\nscud\nsculptured\nseaboard\nsealing\nsemantic\nsemicircle\nsensuous\nseraph\nsevenfold\nsevenpence\nshamefully\nshampoo\nshapely\nshatter\nsheik\nsheila\nshelly\nsherri\nshimmering\nshin\nshingle\nshooter\nshortsighted\nshrew\nshunammite\nsiamese\nsicilian\nsicken\nsiding\nsilhouette\nsimmer\nsimulate\nsinewy\nsingles\nsiren\nskating\nskewed\nskipper\nskirmish\nsledge\nsliced\nsludge\nsmallness\nsmoothness\nsnails\nsnobbery\nsnorting\nsnot\nsnowstorm\nsnubbed\nsnugly\nsobriety\nsock\nsodden\nsoliciting\nsombre\nsonorous\nsoot\nsorcery\nsparking\nsparring\nspewing\nspiteful\nspoilage\nsquabble\nsquaring\nsquash\nsquatting\nsquaw\nsqueal\nsquirm\nstacey\nstallion\nstamina\nstandardized\nstank\nsteely\nstepmother\nstiffening\nstifle\nstinker\nstinking\nstockbroker\nstrap\nstringy\nstriped\nstroking\nstudious\nstun\nstylishly\nsubconsciously\nsubservient\nsubstantiate\nsuburbia\nsuccessively\nsufferer\nsugary\nsunbeam\nsuperlative\nsurly\nsurrealism\nswagger\nswart\nsynonymous\ntacit\ntactual\ntaffrail\ntam\ntang\ntapered\ntartar\ntaurus\ntechnologically\ntediously\nteller\ntemporal\nterrifically\ntheatrically\ntherefrom\nthoroughfare\nthreefold\nthrush\nthyroxine\nti\ntiffany\ntimer\ntinge\ntoby\ntoller\ntorso\ntorturous\ntraversed\ntrey\ntriad\ntrickery\ntrode\ntubal\ntumbler\ntungsten\nturban\ntussle\nulcer\nultrasonic\nunbounded\nuncivil\nunconnected\nunderside\nundisputed\nundressed\nunemotional\nunexceptionable\nunharmed\nuninhibited\nuninitiated\nunmanageable\nunobserved\nunpublished\nunqualified\nunrelenting\nunsafe\nunsavory\nunthinkable\nuntie\nuntried\nuntrue\nunwinding\nupkeep\nupstate\nurbanization\nvaulted\nveer\nviceroy\nvicki\nvignette\nvinous\nvirility\nvortex\nwaken\nwalrus\nwearisome\nweasel\nwedged\nwedlock\nwei\nwhimpering\nwhist\nwight\nwinnings\nwis\nwomanizer\nworded\nwordless\nworkbench\nworkout\nwrapper\nwrongdoing\nwynn\nyank\naback\nabased\nabeyance\nabiezer\nabnormally\nabortive\nabruptness\naccommodative\naccreditation\nacquaint\nacquittal\nadamantine\nadjunct\nadventurer\naeration\naesthetically\naforetime\nafoul\nafterglow\nagreeably\nalabaster\nalphabet\nambivalence\nancestral\nanchorage\nandrena\nanguished\nanimator\nantagonistic\nappellation\napproximation\narchetypal\narching\narchway\nargon\nargyll\narticulated\nashman\nasinine\nassassinate\nastute\nattest\nauburn\naurelius\naverse\nbabbling\nbacklash\nbaggy\nbam\nbanality\nbanjo\nbarbarian\nbaritone\nbarolo\nbashaw\nbask\nbeastly\nbecky\nbedfellow\nbedtime\nbeebread\nbeetroot\nbefitting\nbeholder\nbelcher\nbelle\nbended\nbengal\nbereave\nberne\nbespeak\nbestial\nbevy\nbewail\nbicker\nbile\nbirdy\nbison\nbittersweet\nblackmailer\nblanca\nblandness\nblasphemer\nblighted\nblindfolded\nblip\nblister\nbluer\nblur\nbombastic\nbombed\nbonanza\nbondsman\nbonny\nboorish\nbordered\nborealis\nbountifully\nbowman\nbrahma\nbrainy\nbrandi\nbrandywine\nbraver\nbreathlessly\nbrewster\nbrier\nbrigadier\nbrighten\nbrock\nbuffoon\nbulwark\nbunker\nbur\nburrow\nbushy\nbutchery\nbyword\ncabbage\ncad\ncadmium\ncaged\ncamembert\ncandlelight\ncaph\ncarbine\ncarefulness\ncaretaker\ncarrion\ncartridge\ncassandra\ncatatonic\ncatharine\ncavendish\nceaselessly\ncelibacy\ncellist\nchamp\ncharmless\ncharting\nchastisement\nche\ncheerless\nchemically\nchieftain\nching\nchipped\nchipping\nchunky\ncircumspection\ncitation\nclamor\nclatter\nclaudius\ncleanly\nclimatic\nclive\ncoarseness\ncockroach\ncollaborator\ncombed\ncomeuppance\ncommando\ncommensurate\ncommittal\ncommoner\ncommunicator\ncompetently\ncompiler\ncomplicate\ncomplimentary\ncompress\nconclusively\nconcoction\nconjugated\nconnotation\nconsenting\nconserve\nconsoling\nconstrictor\ncontamination\ncontiguous\ncontraption\ncontrition\nconverge\nconvergent\nconversational\nconvex\nconveyance\nconvivial\ncoos\ncorinth\ncornfield\ncornucopia\ncoronary\ncoroner\ncortex\ncot\ncounterpane\ncourteously\ncourtesan\ncrackle\ncraggy\ncrave\ncrete\ncrosse\ncrowing\ncrunch\ncryogenic\ncubist\ncush\ndaft\ndalmatian\ndamning\ndarken\ndas\ndavenport\ndebauchery\ndebonair\ndebutante\ndeceptively\ndeduce\ndefinable\ndefunct\ndelinquency\ndelirious\ndeliriously\ndemoniac\ndepositary\ndespotism\ndeterministic\ndetrimental\ndialectic\ndiatribe\ndichotomy\ndiffident\ndiffraction\ndigestive\ndigitally\ndint\ndisapprobation\ndiscard\ndiscomposed\ndisconcerted\ndiscouragement\ndiscrete\ndisdainful\ndisheartening\ndisinclination\ndisintegration\ndisinterest\ndisobey\ndisparate\ndisquieted\ndisrespect\ndisrespectful\ndissension\ndissolving\ndistinguishable\ndivan\ndivisive\ndivulge\ndominique\ndomino\ndor\ndormancy\ndour\ndownbeat\ndoze\ndugout\ndwindle\nedith\negotism\neidolon\nelector\neliot\nelon\nelongated\neloquently\nembarrass\nembezzlement\nemirate\nempathize\nempyrean\nemulous\nencroachment\nendowment\nenlightenment\nennui\nenrichment\nentail\nenthralling\nenzyme\nepiscopal\nepitaph\nepoch\neradicate\nerecting\nerewhile\nerrant\nerupt\netiquette\nevergreen\nexacting\nexaggerating\nexecutable\nexodus\nexpedited\nexpound\nexpressionless\nexpulsion\nexterminate\nextricate\nezekiel\nfacile\nfallow\nfanfare\nfaraway\nfavoring\nfeebleness\nfervently\nfibrous\nfielder\nfinalize\nfingal\nfingerprint\nfirearm\nfirepower\nfished\nfission\nfitly\nfixture\nflail\nflamingo\nflatulence\nflemish\nflooring\nfloyd\nfoal\nfoo\nforbearing\nforeground\nforeshadow\nforthright\nfossil\nfostering\nfoundry\nfractional\nfrasier\nfreakish\nfrightfully\nfrothing\ngabby\ngaelic\ngam\ngamaliel\ngambler\ngangway\ngantry\ngarnished\ngashes\ngator\ngaz\ngearing\ngena\ngeneralize\ngentlewoman\ngerm\ngibby\ngiggling\ngist\nglaringly\nglint\nglorying\nglycerine\ngnaw\ngoatee\ngoddam\ngodfrey\ngomer\ngoop\ngraciousness\ngraff\ngraver\ngreener\ngrinder\ngroundnut\ngruesomely\ngrumble\ngrumbling\ngubernatorial\nguttural\nhadden\nhah\nhairdresser\nhalved\nhandbook\nhanger\nharrow\nheadway\nhealthful\nhearer\nheathenish\nhebephrenic\nhempen\nheresy\nhermes\nhillbilly\nhoax\nhomogeneity\nhoneysuckle\nhoodlum\nhopelessness\nhorde\nhortense\nhosanna\nhotly\nhough\nhousetop\nhousework\nhovel\nhubert\nhumanist\nhumankind\nhumiliate\nhumph\nhundredfold\nhurl\nhusbandman\nhusk\nhy\nhyena\nhygienic\niced\nich\niguana\nimpacted\nimpertinence\nimpervious\nimpotence\nimpulsive\ninattentive\ninbred\ninclement\nindecipherable\nindecisive\nindemnity\nindeterminate\nindubitable\ninduction\nindustrialist\ninequality\ninfamy\ninfantile\ninfer\ninfield\ninflame\ninformant\ningenuous\ninglorious\ninhale\ninkling\ninlaid\ninlet\ninsatiable\ninsincere\ninsincerity\ninsinuating\ninsubstantial\ninsular\nintake\ninterrelated\nintolerably\nintolerance\nintrinsically\nintrude\ninvisibility\ninwardly\nione\nirksome\nirrespective\nirrevocable\nisabelle\nist\nisthmus\njib\njiffy\njingling\njockey\njoiner\njuniper\njunket\njustifiably\nkeg\nkiel\nkirsten\nko\nkokan\nkris\nlaboring\nlaboriously\nlambent\nlamplight\nlanguish\nlanguishing\nlank\nlapping\nlarch\nlasso\nlattice\nlaurentian\nlawgiver\nleech\nleeway\nlemma\nlemony\nliberalize\nliberate\nliberian\nlifeboat\nlila\nlilian\nlimousine\nlocality\nlocalization\nlocomotive\nloin\nlop\nlopsided\nloren\nlorraine\nlory\nlubricant\nlumbering\nly\nmabel\nmacaroni\nmadeline\nmaelstrom\nmagnanimous\nmaladjustment\nmalpractice\nmaltese\nmantel\nmargarine\nmarmalade\nmarseilles\nmarxist\nmathematically\nmaximization\nmayfair\nmeasurable\nmeditative\nmelamed\nmelodic\nmenage\nmenial\nmeteoritic\nmicroscopically\nmiddling\nmidmorning\nministration\nminty\nminutely\nminutiae\nmisunderstand\nmite\nmoan\nmodifier\nmodular\nmonastery\nmonastic\nmoonshine\nmorass\nmores\nmorphophonemic\nmou\nmountainside\nmouthpiece\nmozambique\nmuck\nmulligan\nmultiplication\nmurk\nmusically\nnab\nnathanael\nnaturalness\nnautical\nnectar\nneedham\nnestling\nnetted\nneuroses\nnihilist\nnimbly\nnip\nnonchalant\nnoodle\nnormalcy\noaken\nobesity\nobservable\nobstruct\node\noffal\noffshoot\noiled\nomnipotence\nopportunistic\nopt\noptics\noration\noratory\norbic\norchestral\nordnance\norville\nostentatiously\nouch\noutburst\noutdo\noutnumber\noutturn\noveralls\noverhand\noverland\noversea\noversold\noverturn\npaddock\npampered\npaneling\npapal\nparadoxical\nparaphrase\nparental\nparkway\npastime\npatchwork\npatterned\npaulina\npeacetime\npeal\npeavey\npecked\npedal\npeddling\npendant\nperceptual\npercy\nperemptory\nperfidious\nperilously\npersevere\npersistently\npersuasively\nperusal\npestilent\nphilanthropic\nphosphate\nphotochemical\nphotogenic\nphysiognomy\npicker\npicky\npictorial\npiglet\npining\npinioned\nplaintiff\nplaintive\nplausibility\nplaymate\nplying\npolarization\npolymerization\npompey\nporing\npositivist\npossessor\npotboiler\npottage\npouty\nprepayment\npresuming\nprevalence\npricking\nprimate\nproctor\nprofessedly\nproficiency\nprofuse\nprofusion\nprogrammer\npropitious\nprotege\nprototype\nprotozoa\nprovender\nprowling\nprune\npsychiatric\npsychoanalytic\npsychosis\npuberty\npublicist\npunctuality\nputt\nquadric\nquicksilver\nradial\nraking\nreaffirm\nreaper\nreappear\nrebuilt\nrecluse\nredcoat\nreferral\nrehearing\nrehearsal\nreinforcement\nreinstate\nreintroduce\nreissue\nreligiously\nrepartee\nreplica\nreprobate\nreptile\nreptilian\nreputedly\nresonant\nretender\nrethink\nreticent\nretractable\nrevelry\nrevenger\nreversible\nrheumatism\nrhinoceros\nrimmed\nrinsing\nriotously\nripen\nriper\nripper\nroaster\nrooker\nrooster\nrooter\nrosa\nrosewood\nrotated\nrowan\nrudeness\nrump\nrupee\nsaba\nsabella\nsabine\nsacked\nsacrificial\nsacrilegious\nsade\nsailboat\nsalesmanship\nsallow\nsalutary\nsameness\nsarcastically\nsatiric\nsaver\nsax\nsaxophone\nscamper\nscandalous\nscold\nscorned\nscorpion\nscoured\nscrawny\nscruffy\nscull\nscummy\nseamlessly\nseaport\nsecretive\nsedentary\nsedition\nseducing\nsergio\nserra\nshakily\nshang\nshaul\nshelled\nshielded\nshorn\nshortstop\nshrunk\nshure\nshylock\nsiam\nsic\nsieve\nsift\nsighting\nsilicone\nsinged\nskater\nsketching\nskimming\nslander\nslinky\nsluggard\nslunk\nsmother\nsnaky\nsneeze\nsnowfall\nsnuffers\nsociable\nsolidity\nspeciality\nsphinx\nspilt\nspiracle\nspleen\nsponsorship\nsportswear\nspouter\nspringtime\nsprout\nspunk\nsputtering\nstabbing\nstaggers\nstagnation\nstainless\nstairway\nstammering\nsteadfastly\nsteadier\nsteamboat\nstrapping\nstreaked\nstrew\nstringent\nstrutting\nsubside\nsubspace\nsubstitution\nsubtilty\nsuburbanite\nsuccumb\nsuffrage\nsuffused\nsulphurous\nsummarize\nsumner\nsunburnt\nsupervise\nsurveyor\nswashbuckling\nswipe\nswordsman\nsycamore\nsymmetric\nsympathetically\nsymphonic\nsynod\ntabled\ntaciturn\ntallyho\ntamara\ntammany\ntankard\ntarantula\ntarsus\ntasty\ntawdry\ntectonic\ntemptress\ntenfold\ntequila\nteresa\ntetrarch\ntextual\nthats\nthieving\nthirdly\nthrifty\nthunderbolt\ntiered\ntiled\ntint\ntipping\ntirelessly\ntod\ntoilsome\ntombstone\ntooling\ntoothbrush\ntopography\ntortuous\ntost\ntottering\ntouchstone\ntourette\ntourism\ntraceable\ntrajectory\ntranquility\ntranscending\ntranslator\ntransverse\ntreatise\ntrenton\ntrident\ntriumphal\ntrolley\ntuft\ntugging\nturret\ntwang\ntweedy\ntwig\ntwisty\ntwofold\nulysses\nunauthorized\nunbar\nunbelieving\nuncharted\nuncontrollably\nundead\nundoing\nundress\nunearthed\nuneconomic\nuneconomical\nunequivocal\nunerringly\nuneventful\nunflinching\nungainly\nunheeded\nunilaterally\nuniting\nunkempt\nunkindness\nunlisted\nunmeaning\nunmindful\nunnaturally\nunneeded\nunoccupied";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The correction engine, shared by the host half and its tests.
|
|
17
|
+
*
|
|
18
|
+
* Pure functions and plain data only: no fs, no DOM, no network. The host loads
|
|
19
|
+
* the word list from disk once and hands it to `createEngine`; the browser half
|
|
20
|
+
* does all of its matching against the arrays this file produces.
|
|
21
|
+
*
|
|
22
|
+
* WHY A RANKED LIST AND NOT A BIG UNORDERED SET
|
|
23
|
+
*
|
|
24
|
+
* A set answers "is this a word", which is half the job. The other half is
|
|
25
|
+
* "which word did they mean", and that is decided almost entirely by how common
|
|
26
|
+
* the candidate is: `theh` sits one edit from `the`, `teh`, `eth` and a dozen
|
|
27
|
+
* rare tokens, and only frequency ordering puts `the` on top where a Tab press
|
|
28
|
+
* will accept it.
|
|
29
|
+
*
|
|
30
|
+
* @module dsh-spell-check/engine
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Misspellings frequent enough to answer without any edit-distance search.
|
|
35
|
+
*
|
|
36
|
+
* Kept separate from the ranked list on purpose: these are the corrections a
|
|
37
|
+
* user expects to be instant and unambiguous, and several of them (`wont`,
|
|
38
|
+
* `cant`, `dont`) are only misspellings in the aphetic sense — the apostrophe
|
|
39
|
+
* is missing, not a letter.
|
|
40
|
+
*/
|
|
41
|
+
const TYPO_MAP = {
|
|
42
|
+
teh: 'the',
|
|
43
|
+
hte: 'the',
|
|
44
|
+
th: 'the',
|
|
45
|
+
theh: 'the',
|
|
46
|
+
rhe: 'the',
|
|
47
|
+
tthe: 'the',
|
|
48
|
+
adn: 'and',
|
|
49
|
+
nad: 'and',
|
|
50
|
+
anc: 'and',
|
|
51
|
+
ahev: 'have',
|
|
52
|
+
hvae: 'have',
|
|
53
|
+
jsut: 'just',
|
|
54
|
+
juts: 'just',
|
|
55
|
+
taht: 'that',
|
|
56
|
+
thta: 'that',
|
|
57
|
+
thsi: 'this',
|
|
58
|
+
tihs: 'this',
|
|
59
|
+
wiht: 'with',
|
|
60
|
+
waht: 'what',
|
|
61
|
+
hwat: 'what',
|
|
62
|
+
yuo: 'you',
|
|
63
|
+
yuor: 'your',
|
|
64
|
+
fro: 'for',
|
|
65
|
+
ofr: 'for',
|
|
66
|
+
fomr: 'from',
|
|
67
|
+
from: 'from',
|
|
68
|
+
ot: 'to',
|
|
69
|
+
nto: 'not',
|
|
70
|
+
ntoe: 'note',
|
|
71
|
+
woudl: 'would',
|
|
72
|
+
wuold: 'would',
|
|
73
|
+
coudl: 'could',
|
|
74
|
+
shoudl: 'should',
|
|
75
|
+
shuold: 'should',
|
|
76
|
+
abotu: 'about',
|
|
77
|
+
baout: 'about',
|
|
78
|
+
whcih: 'which',
|
|
79
|
+
wich: 'which',
|
|
80
|
+
hwihc: 'which',
|
|
81
|
+
becuase: 'because',
|
|
82
|
+
becasue: 'because',
|
|
83
|
+
beacuse: 'because',
|
|
84
|
+
becouse: 'because',
|
|
85
|
+
ther: 'there',
|
|
86
|
+
thier: 'their',
|
|
87
|
+
thier: 'their',
|
|
88
|
+
tehre: 'there',
|
|
89
|
+
thre: 'there',
|
|
90
|
+
recieve: 'receive',
|
|
91
|
+
recieved: 'received',
|
|
92
|
+
recieving: 'receiving',
|
|
93
|
+
beleive: 'believe',
|
|
94
|
+
belive: 'believe',
|
|
95
|
+
wieght: 'weight',
|
|
96
|
+
freind: 'friend',
|
|
97
|
+
freinds: 'friends',
|
|
98
|
+
feild: 'field',
|
|
99
|
+
gard: 'guard',
|
|
100
|
+
huose: 'house',
|
|
101
|
+
seperate: 'separate',
|
|
102
|
+
seperated: 'separated',
|
|
103
|
+
seperately: 'separately',
|
|
104
|
+
definately: 'definitely',
|
|
105
|
+
definatly: 'definitely',
|
|
106
|
+
defintely: 'definitely',
|
|
107
|
+
occured: 'occurred',
|
|
108
|
+
occuring: 'occurring',
|
|
109
|
+
ocurred: 'occurred',
|
|
110
|
+
succesful: 'successful',
|
|
111
|
+
successfull: 'successful',
|
|
112
|
+
sucessful: 'successful',
|
|
113
|
+
neccessary: 'necessary',
|
|
114
|
+
necesary: 'necessary',
|
|
115
|
+
neccessarily: 'necessarily',
|
|
116
|
+
accomodate: 'accommodate',
|
|
117
|
+
acommodate: 'accommodate',
|
|
118
|
+
adress: 'address',
|
|
119
|
+
adres: 'address',
|
|
120
|
+
arguement: 'argument',
|
|
121
|
+
begining: 'beginning',
|
|
122
|
+
begining: 'beginning',
|
|
123
|
+
calender: 'calendar',
|
|
124
|
+
commited: 'committed',
|
|
125
|
+
comming: 'coming',
|
|
126
|
+
completly: 'completely',
|
|
127
|
+
concious: 'conscious',
|
|
128
|
+
curiousity: 'curiosity',
|
|
129
|
+
exsistance: 'existence',
|
|
130
|
+
existance: 'existence',
|
|
131
|
+
familar: 'familiar',
|
|
132
|
+
finaly: 'finally',
|
|
133
|
+
foriegn: 'foreign',
|
|
134
|
+
gaurd: 'guard',
|
|
135
|
+
goverment: 'government',
|
|
136
|
+
guarentee: 'guarantee',
|
|
137
|
+
happend: 'happened',
|
|
138
|
+
hieght: 'height',
|
|
139
|
+
immediatly: 'immediately',
|
|
140
|
+
independant: 'independent',
|
|
141
|
+
intresting: 'interesting',
|
|
142
|
+
knowlege: 'knowledge',
|
|
143
|
+
liesure: 'leisure',
|
|
144
|
+
maintainance: 'maintenance',
|
|
145
|
+
milisecond: 'millisecond',
|
|
146
|
+
miliseconds: 'milliseconds',
|
|
147
|
+
millisecond: 'millisecond',
|
|
148
|
+
neice: 'niece',
|
|
149
|
+
noticable: 'noticeable',
|
|
150
|
+
occassion: 'occasion',
|
|
151
|
+
ocassion: 'occasion',
|
|
152
|
+
oppurtunity: 'opportunity',
|
|
153
|
+
oportunity: 'opportunity',
|
|
154
|
+
paralel: 'parallel',
|
|
155
|
+
parliment: 'parliament',
|
|
156
|
+
perseverence: 'perseverance',
|
|
157
|
+
posession: 'possession',
|
|
158
|
+
prefered: 'preferred',
|
|
159
|
+
priviledge: 'privilege',
|
|
160
|
+
probaly: 'probably',
|
|
161
|
+
probally: 'probably',
|
|
162
|
+
proccess: 'process',
|
|
163
|
+
proces: 'process',
|
|
164
|
+
pronounciation: 'pronunciation',
|
|
165
|
+
publically: 'publicly',
|
|
166
|
+
questionaire: 'questionnaire',
|
|
167
|
+
reccomend: 'recommend',
|
|
168
|
+
recomend: 'recommend',
|
|
169
|
+
refered: 'referred',
|
|
170
|
+
relevent: 'relevant',
|
|
171
|
+
religous: 'religious',
|
|
172
|
+
rember: 'remember',
|
|
173
|
+
rememberance: 'remembrance',
|
|
174
|
+
resistence: 'resistance',
|
|
175
|
+
responsability: 'responsibility',
|
|
176
|
+
rythm: 'rhythm',
|
|
177
|
+
scedule: 'schedule',
|
|
178
|
+
shedule: 'schedule',
|
|
179
|
+
schedual: 'schedule',
|
|
180
|
+
sieze: 'seize',
|
|
181
|
+
similiar: 'similar',
|
|
182
|
+
sincerly: 'sincerely',
|
|
183
|
+
speach: 'speech',
|
|
184
|
+
strentgh: 'strength',
|
|
185
|
+
succesfully: 'successfully',
|
|
186
|
+
suprise: 'surprise',
|
|
187
|
+
supress: 'suppress',
|
|
188
|
+
temperture: 'temperature',
|
|
189
|
+
tendancy: 'tendency',
|
|
190
|
+
threshhold: 'threshold',
|
|
191
|
+
tommorow: 'tomorrow',
|
|
192
|
+
tomorow: 'tomorrow',
|
|
193
|
+
tounge: 'tongue',
|
|
194
|
+
truely: 'truly',
|
|
195
|
+
twelth: 'twelfth',
|
|
196
|
+
tyrany: 'tyranny',
|
|
197
|
+
unecessary: 'unnecessary',
|
|
198
|
+
unfortunatly: 'unfortunately',
|
|
199
|
+
untill: 'until',
|
|
200
|
+
useable: 'usable',
|
|
201
|
+
vaccum: 'vacuum',
|
|
202
|
+
vehical: 'vehicle',
|
|
203
|
+
visable: 'visible',
|
|
204
|
+
wether: 'whether',
|
|
205
|
+
wheter: 'whether',
|
|
206
|
+
wierd: 'weird',
|
|
207
|
+
wihch: 'which',
|
|
208
|
+
writting: 'writing',
|
|
209
|
+
writen: 'written',
|
|
210
|
+
yeild: 'yield',
|
|
211
|
+
// Keyboard-adjacency and transposition slips common when typing fast.
|
|
212
|
+
atuo: 'auto',
|
|
213
|
+
autp: 'auto',
|
|
214
|
+
auot: 'auto',
|
|
215
|
+
conntextion: 'connection',
|
|
216
|
+
connecton: 'connection',
|
|
217
|
+
conection: 'connection',
|
|
218
|
+
connetion: 'connection',
|
|
219
|
+
contection: 'connection',
|
|
220
|
+
trype: 'type',
|
|
221
|
+
tyep: 'type',
|
|
222
|
+
tpye: 'type',
|
|
223
|
+
yuor: 'your',
|
|
224
|
+
foce: 'force',
|
|
225
|
+
focre: 'force',
|
|
226
|
+
foramtting: 'formatting',
|
|
227
|
+
formating: 'formatting',
|
|
228
|
+
compnent: 'component',
|
|
229
|
+
componet: 'component',
|
|
230
|
+
compnents: 'components',
|
|
231
|
+
compont: 'component',
|
|
232
|
+
modle: 'model',
|
|
233
|
+
modul: 'module',
|
|
234
|
+
moduels: 'modules',
|
|
235
|
+
fitler: 'filter',
|
|
236
|
+
filtet: 'filter',
|
|
237
|
+
seach: 'search',
|
|
238
|
+
serach: 'search',
|
|
239
|
+
sarach: 'search',
|
|
240
|
+
sesion: 'session',
|
|
241
|
+
sesssion: 'session',
|
|
242
|
+
settngs: 'settings',
|
|
243
|
+
setings: 'settings',
|
|
244
|
+
writng: 'writing',
|
|
245
|
+
renderng: 'rendering',
|
|
246
|
+
bulid: 'build',
|
|
247
|
+
buidl: 'build',
|
|
248
|
+
updatng: 'updating',
|
|
249
|
+
instaled: 'installed',
|
|
250
|
+
instal: 'install',
|
|
251
|
+
plugn: 'plugin',
|
|
252
|
+
plugni: 'plugin',
|
|
253
|
+
plguin: 'plugin',
|
|
254
|
+
pkg: 'package',
|
|
255
|
+
pakage: 'package',
|
|
256
|
+
packge: 'package',
|
|
257
|
+
importat: 'important',
|
|
258
|
+
importnat: 'important',
|
|
259
|
+
definintion: 'definition',
|
|
260
|
+
defualt: 'default',
|
|
261
|
+
defualts: 'defaults',
|
|
262
|
+
defalut: 'default',
|
|
263
|
+
retrun: 'return',
|
|
264
|
+
reutrn: 'return',
|
|
265
|
+
retun: 'return',
|
|
266
|
+
funciton: 'function',
|
|
267
|
+
fucntion: 'function',
|
|
268
|
+
functoin: 'function',
|
|
269
|
+
paramter: 'parameter',
|
|
270
|
+
paramaters: 'parameters',
|
|
271
|
+
paramters: 'parameters',
|
|
272
|
+
vlaue: 'value',
|
|
273
|
+
vaule: 'value',
|
|
274
|
+
vaue: 'value',
|
|
275
|
+
strign: 'string',
|
|
276
|
+
stirng: 'string',
|
|
277
|
+
strng: 'string',
|
|
278
|
+
arary: 'array',
|
|
279
|
+
arrya: 'array',
|
|
280
|
+
ojbect: 'object',
|
|
281
|
+
objetc: 'object',
|
|
282
|
+
oject: 'object',
|
|
283
|
+
prpoerty: 'property',
|
|
284
|
+
proprty: 'property',
|
|
285
|
+
porperty: 'property',
|
|
286
|
+
evnet: 'event',
|
|
287
|
+
evet: 'event',
|
|
288
|
+
keyboad: 'keyboard',
|
|
289
|
+
keybaord: 'keyboard',
|
|
290
|
+
defualty: 'default',
|
|
291
|
+
resposne: 'response',
|
|
292
|
+
reponse: 'response',
|
|
293
|
+
reqeust: 'request',
|
|
294
|
+
requets: 'request',
|
|
295
|
+
reqest: 'request',
|
|
296
|
+
errror: 'error',
|
|
297
|
+
erro: 'error',
|
|
298
|
+
excpetion: 'exception',
|
|
299
|
+
exeption: 'exception',
|
|
300
|
+
acount: 'account',
|
|
301
|
+
achive: 'archive',
|
|
302
|
+
alos: 'also',
|
|
303
|
+
alwyas: 'always',
|
|
304
|
+
awlays: 'always',
|
|
305
|
+
alywas: 'always',
|
|
306
|
+
aroudn: 'around',
|
|
307
|
+
aroud: 'around',
|
|
308
|
+
bacause: 'because',
|
|
309
|
+
bceause: 'because',
|
|
310
|
+
begn: 'begin',
|
|
311
|
+
belwo: 'below',
|
|
312
|
+
betwen: 'between',
|
|
313
|
+
betweeen: 'between',
|
|
314
|
+
bufery: 'buffer',
|
|
315
|
+
bufffer: 'buffer',
|
|
316
|
+
becnh: 'bench',
|
|
317
|
+
cetner: 'center',
|
|
318
|
+
chekc: 'check',
|
|
319
|
+
chek: 'check',
|
|
320
|
+
chiuld: 'child',
|
|
321
|
+
chidl: 'child',
|
|
322
|
+
cleaer: 'clear',
|
|
323
|
+
cler: 'clear',
|
|
324
|
+
cnahge: 'change',
|
|
325
|
+
chagne: 'change',
|
|
326
|
+
chnaged: 'changed',
|
|
327
|
+
cofnig: 'config',
|
|
328
|
+
cofig: 'config',
|
|
329
|
+
configg: 'config',
|
|
330
|
+
confg: 'config',
|
|
331
|
+
consdier: 'consider',
|
|
332
|
+
cosnole: 'console',
|
|
333
|
+
consoel: 'console',
|
|
334
|
+
contorl: 'control',
|
|
335
|
+
cotnrol: 'control',
|
|
336
|
+
contro: 'control',
|
|
337
|
+
coords: 'coords',
|
|
338
|
+
covearge: 'coverage',
|
|
339
|
+
cuase: 'cause',
|
|
340
|
+
cuases: 'causes',
|
|
341
|
+
curent: 'current',
|
|
342
|
+
cuurrent: 'current',
|
|
343
|
+
curren: 'current',
|
|
344
|
+
curretn: 'current',
|
|
345
|
+
daat: 'data',
|
|
346
|
+
datsa: 'data',
|
|
347
|
+
datat: 'data',
|
|
348
|
+
deatil: 'detail',
|
|
349
|
+
datail: 'detail',
|
|
350
|
+
detials: 'details',
|
|
351
|
+
dfeault: 'default',
|
|
352
|
+
diffrent: 'different',
|
|
353
|
+
differnt: 'different',
|
|
354
|
+
diffrently: 'differently',
|
|
355
|
+
dircetory: 'directory',
|
|
356
|
+
direcotry: 'directory',
|
|
357
|
+
direcory: 'directory',
|
|
358
|
+
documnet: 'document',
|
|
359
|
+
documet: 'document',
|
|
360
|
+
docuent: 'document',
|
|
361
|
+
doesnot: 'does not',
|
|
362
|
+
doesnt: "doesn't",
|
|
363
|
+
dont: "don't",
|
|
364
|
+
didnt: "didn't",
|
|
365
|
+
cant: "can't",
|
|
366
|
+
wont: "won't",
|
|
367
|
+
isnt: "isn't",
|
|
368
|
+
arent: "aren't",
|
|
369
|
+
wasnt: "wasn't",
|
|
370
|
+
werent: "weren't",
|
|
371
|
+
wouldnt: "wouldn't",
|
|
372
|
+
couldnt: "couldn't",
|
|
373
|
+
shouldnt: "shouldn't",
|
|
374
|
+
hasnt: "hasn't",
|
|
375
|
+
havent: "haven't",
|
|
376
|
+
im: "I'm",
|
|
377
|
+
ive: "I've",
|
|
378
|
+
thats: "that's",
|
|
379
|
+
ivee: "I've",
|
|
380
|
+
eeven: 'even',
|
|
381
|
+
enbale: 'enable',
|
|
382
|
+
enalbe: 'enable',
|
|
383
|
+
encodng: 'encoding',
|
|
384
|
+
entyr: 'entry',
|
|
385
|
+
enty: 'entry',
|
|
386
|
+
enviornment: 'environment',
|
|
387
|
+
enviroment: 'environment',
|
|
388
|
+
envirnoment: 'environment',
|
|
389
|
+
epxect: 'expect',
|
|
390
|
+
exect: 'expect',
|
|
391
|
+
exaple: 'example',
|
|
392
|
+
examle: 'example',
|
|
393
|
+
exmaple: 'example',
|
|
394
|
+
exsit: 'exist',
|
|
395
|
+
exsits: 'exists',
|
|
396
|
+
explict: 'explicit',
|
|
397
|
+
expresion: 'expression',
|
|
398
|
+
expresions: 'expressions',
|
|
399
|
+
extenison: 'extension',
|
|
400
|
+
extnesion: 'extension',
|
|
401
|
+
failre: 'failure',
|
|
402
|
+
falure: 'failure',
|
|
403
|
+
failuer: 'failure',
|
|
404
|
+
featre: 'feature',
|
|
405
|
+
feture: 'feature',
|
|
406
|
+
feautre: 'feature',
|
|
407
|
+
filel: 'file',
|
|
408
|
+
filse: 'files',
|
|
409
|
+
fiels: 'fields',
|
|
410
|
+
feilds: 'fields',
|
|
411
|
+
foucs: 'focus',
|
|
412
|
+
focsu: 'focus',
|
|
413
|
+
follw: 'follow',
|
|
414
|
+
folow: 'follow',
|
|
415
|
+
forgeting: 'forgetting',
|
|
416
|
+
forn: 'from',
|
|
417
|
+
frst: 'first',
|
|
418
|
+
frist: 'first',
|
|
419
|
+
fucntionality: 'functionality',
|
|
420
|
+
fucntion: 'function',
|
|
421
|
+
gaem: 'game',
|
|
422
|
+
genrate: 'generate',
|
|
423
|
+
genereate: 'generate',
|
|
424
|
+
genral: 'general',
|
|
425
|
+
generall: 'general',
|
|
426
|
+
givenn: 'given',
|
|
427
|
+
gloabl: 'global',
|
|
428
|
+
gorup: 'group',
|
|
429
|
+
gropu: 'group',
|
|
430
|
+
gruop: 'group',
|
|
431
|
+
haders: 'headers',
|
|
432
|
+
heades: 'headers',
|
|
433
|
+
heigth: 'height',
|
|
434
|
+
hiddne: 'hidden',
|
|
435
|
+
hidde: 'hidden',
|
|
436
|
+
hierachy: 'hierarchy',
|
|
437
|
+
hiearchy: 'hierarchy',
|
|
438
|
+
higer: 'higher',
|
|
439
|
+
higest: 'highest',
|
|
440
|
+
hwo: 'how',
|
|
441
|
+
hwoever: 'however',
|
|
442
|
+
howver: 'however',
|
|
443
|
+
hoever: 'however',
|
|
444
|
+
iamge: 'image',
|
|
445
|
+
imag: 'image',
|
|
446
|
+
impelment: 'implement',
|
|
447
|
+
implment: 'implement',
|
|
448
|
+
implemenation: 'implementation',
|
|
449
|
+
implementaiton: 'implementation',
|
|
450
|
+
implemention: 'implementation',
|
|
451
|
+
inlcude: 'include',
|
|
452
|
+
incldue: 'include',
|
|
453
|
+
inclued: 'include',
|
|
454
|
+
indedx: 'index',
|
|
455
|
+
inde: 'index',
|
|
456
|
+
inflateed: 'inflated',
|
|
457
|
+
informaiton: 'information',
|
|
458
|
+
infomation: 'information',
|
|
459
|
+
inforamtion: 'information',
|
|
460
|
+
inheritence: 'inheritance',
|
|
461
|
+
inital: 'initial',
|
|
462
|
+
intial: 'initial',
|
|
463
|
+
initail: 'initial',
|
|
464
|
+
initialise: 'initialize',
|
|
465
|
+
initilize: 'initialize',
|
|
466
|
+
initialzied: 'initialized',
|
|
467
|
+
inptu: 'input',
|
|
468
|
+
inptu: 'input',
|
|
469
|
+
inpout: 'input',
|
|
470
|
+
instaed: 'instead',
|
|
471
|
+
insted: 'instead',
|
|
472
|
+
instrcution: 'instruction',
|
|
473
|
+
instructon: 'instruction',
|
|
474
|
+
intead: 'instead',
|
|
475
|
+
interace: 'interface',
|
|
476
|
+
interfaec: 'interface',
|
|
477
|
+
intput: 'input',
|
|
478
|
+
inupt: 'input',
|
|
479
|
+
inver: 'invert',
|
|
480
|
+
isnpect: 'inspect',
|
|
481
|
+
isseu: 'issue',
|
|
482
|
+
issus: 'issues',
|
|
483
|
+
itesm: 'items',
|
|
484
|
+
itmes: 'items',
|
|
485
|
+
jsut: 'just',
|
|
486
|
+
juyst: 'just',
|
|
487
|
+
knwo: 'know',
|
|
488
|
+
kown: 'known',
|
|
489
|
+
lanugage: 'language',
|
|
490
|
+
langauge: 'language',
|
|
491
|
+
languge: 'language',
|
|
492
|
+
lauch: 'launch',
|
|
493
|
+
lciense: 'license',
|
|
494
|
+
licnce: 'license',
|
|
495
|
+
liek: 'like',
|
|
496
|
+
lke: 'like',
|
|
497
|
+
lnik: 'link',
|
|
498
|
+
lniked: 'linked',
|
|
499
|
+
lisence: 'license',
|
|
500
|
+
lst: 'list',
|
|
501
|
+
liist: 'list',
|
|
502
|
+
liset: 'list',
|
|
503
|
+
loadng: 'loading',
|
|
504
|
+
lamnguage: 'language',
|
|
505
|
+
loggin: 'logging',
|
|
506
|
+
lookng: 'looking',
|
|
507
|
+
maina: 'main',
|
|
508
|
+
mainain: 'maintain',
|
|
509
|
+
manully: 'manually',
|
|
510
|
+
maunal: 'manual',
|
|
511
|
+
maunally: 'manually',
|
|
512
|
+
mehtod: 'method',
|
|
513
|
+
methdo: 'method',
|
|
514
|
+
metohd: 'method',
|
|
515
|
+
mehtods: 'methods',
|
|
516
|
+
methdos: 'methods',
|
|
517
|
+
midle: 'middle',
|
|
518
|
+
moel: 'model',
|
|
519
|
+
moudle: 'module',
|
|
520
|
+
moudles: 'modules',
|
|
521
|
+
msut: 'must',
|
|
522
|
+
mutliple: 'multiple',
|
|
523
|
+
multipe: 'multiple',
|
|
524
|
+
mulitple: 'multiple',
|
|
525
|
+
mroe: 'more',
|
|
526
|
+
mpore: 'more',
|
|
527
|
+
nmae: 'name',
|
|
528
|
+
nmaes: 'names',
|
|
529
|
+
namse: 'names',
|
|
530
|
+
naem: 'name',
|
|
531
|
+
neeed: 'need',
|
|
532
|
+
ned: 'need',
|
|
533
|
+
nescessary: 'necessary',
|
|
534
|
+
newever: 'newer',
|
|
535
|
+
nex: 'next',
|
|
536
|
+
nto: 'not',
|
|
537
|
+
nubmer: 'number',
|
|
538
|
+
numebr: 'number',
|
|
539
|
+
numbr: 'number',
|
|
540
|
+
numer: 'number',
|
|
541
|
+
ofset: 'offset',
|
|
542
|
+
offest: 'offset',
|
|
543
|
+
olny: 'only',
|
|
544
|
+
onyl: 'only',
|
|
545
|
+
ony: 'only',
|
|
546
|
+
opne: 'open',
|
|
547
|
+
oepn: 'open',
|
|
548
|
+
opiton: 'option',
|
|
549
|
+
optioanl: 'optional',
|
|
550
|
+
oprtion: 'option',
|
|
551
|
+
optios: 'options',
|
|
552
|
+
optons: 'options',
|
|
553
|
+
ordr: 'order',
|
|
554
|
+
orignal: 'original',
|
|
555
|
+
orginal: 'original',
|
|
556
|
+
orignal: 'original',
|
|
557
|
+
outptu: 'output',
|
|
558
|
+
ouput: 'output',
|
|
559
|
+
ovew: 'overview',
|
|
560
|
+
overide: 'override',
|
|
561
|
+
overide: 'override',
|
|
562
|
+
pakcage: 'package',
|
|
563
|
+
paragrpah: 'paragraph',
|
|
564
|
+
parrameter: 'parameter',
|
|
565
|
+
patth: 'path',
|
|
566
|
+
pah: 'path',
|
|
567
|
+
phsical: 'physical',
|
|
568
|
+
peice: 'piece',
|
|
569
|
+
pices: 'pieces',
|
|
570
|
+
platfrom: 'platform',
|
|
571
|
+
platfom: 'platform',
|
|
572
|
+
plese: 'please',
|
|
573
|
+
pleae: 'please',
|
|
574
|
+
pleas: 'please',
|
|
575
|
+
plugn: 'plugin',
|
|
576
|
+
portt: 'port',
|
|
577
|
+
posible: 'possible',
|
|
578
|
+
possibel: 'possible',
|
|
579
|
+
prit: 'print',
|
|
580
|
+
pritn: 'print',
|
|
581
|
+
privte: 'private',
|
|
582
|
+
priavte: 'private',
|
|
583
|
+
procecss: 'process',
|
|
584
|
+
proejct: 'project',
|
|
585
|
+
progect: 'project',
|
|
586
|
+
porject: 'project',
|
|
587
|
+
propblem: 'problem',
|
|
588
|
+
problme: 'problem',
|
|
589
|
+
problem: 'problem',
|
|
590
|
+
provde: 'provide',
|
|
591
|
+
provied: 'provided',
|
|
592
|
+
provder: 'provider',
|
|
593
|
+
puplic: 'public',
|
|
594
|
+
qeueu: 'queue',
|
|
595
|
+
querey: 'query',
|
|
596
|
+
queery: 'query',
|
|
597
|
+
queryy: 'query',
|
|
598
|
+
raelly: 'really',
|
|
599
|
+
realy: 'really',
|
|
600
|
+
reead: 'read',
|
|
601
|
+
recrod: 'record',
|
|
602
|
+
referece: 'reference',
|
|
603
|
+
refrence: 'reference',
|
|
604
|
+
refrences: 'references',
|
|
605
|
+
regsiter: 'register',
|
|
606
|
+
registr: 'register',
|
|
607
|
+
registred: 'registered',
|
|
608
|
+
relaod: 'reload',
|
|
609
|
+
realod: 'reload',
|
|
610
|
+
relase: 'release',
|
|
611
|
+
relaese: 'release',
|
|
612
|
+
remaing: 'remaining',
|
|
613
|
+
remvoed: 'removed',
|
|
614
|
+
remvoe: 'remove',
|
|
615
|
+
repetion: 'repetition',
|
|
616
|
+
repalce: 'replace',
|
|
617
|
+
replce: 'replace',
|
|
618
|
+
replcaed: 'replaced',
|
|
619
|
+
requried: 'required',
|
|
620
|
+
requred: 'required',
|
|
621
|
+
reqired: 'required',
|
|
622
|
+
requirment: 'requirement',
|
|
623
|
+
requriement: 'requirement',
|
|
624
|
+
resouce: 'resource',
|
|
625
|
+
reosurce: 'resource',
|
|
626
|
+
resrouce: 'resource',
|
|
627
|
+
reuslt: 'result',
|
|
628
|
+
resul: 'result',
|
|
629
|
+
reslut: 'result',
|
|
630
|
+
resulst: 'results',
|
|
631
|
+
reuslts: 'results',
|
|
632
|
+
retrived: 'retrieved',
|
|
633
|
+
reveiw: 'review',
|
|
634
|
+
reviw: 'review',
|
|
635
|
+
rewritting: 'rewriting',
|
|
636
|
+
rigth: 'right',
|
|
637
|
+
rigt: 'right',
|
|
638
|
+
rnu: 'run',
|
|
639
|
+
runnign: 'running',
|
|
640
|
+
runing: 'running',
|
|
641
|
+
safly: 'safely',
|
|
642
|
+
samll: 'small',
|
|
643
|
+
smal: 'small',
|
|
644
|
+
scehduler: 'scheduler',
|
|
645
|
+
scheduelr: 'scheduler',
|
|
646
|
+
sceen: 'screen',
|
|
647
|
+
scrren: 'screen',
|
|
648
|
+
seale: 'scale',
|
|
649
|
+
seatle: 'settle',
|
|
650
|
+
secion: 'section',
|
|
651
|
+
seciton: 'section',
|
|
652
|
+
secton: 'section',
|
|
653
|
+
seelct: 'select',
|
|
654
|
+
selct: 'select',
|
|
655
|
+
selecet: 'select',
|
|
656
|
+
selecft: 'select',
|
|
657
|
+
sems: 'seems',
|
|
658
|
+
sentance: 'sentence',
|
|
659
|
+
sepcific: 'specific',
|
|
660
|
+
specifc: 'specific',
|
|
661
|
+
specfic: 'specific',
|
|
662
|
+
sepcify: 'specify',
|
|
663
|
+
serivce: 'service',
|
|
664
|
+
servce: 'service',
|
|
665
|
+
serivces: 'services',
|
|
666
|
+
shoud: 'should',
|
|
667
|
+
shuold: 'should',
|
|
668
|
+
shwo: 'show',
|
|
669
|
+
showd: 'showed',
|
|
670
|
+
shwon: 'shown',
|
|
671
|
+
sice: 'since',
|
|
672
|
+
sigin: 'signin',
|
|
673
|
+
signle: 'single',
|
|
674
|
+
sngle: 'single',
|
|
675
|
+
simplifed: 'simplified',
|
|
676
|
+
sitll: 'still',
|
|
677
|
+
slaot: 'slot',
|
|
678
|
+
slto: 'slot',
|
|
679
|
+
soem: 'some',
|
|
680
|
+
soemthing: 'something',
|
|
681
|
+
somthing: 'something',
|
|
682
|
+
soruce: 'source',
|
|
683
|
+
srouce: 'source',
|
|
684
|
+
souce: 'source',
|
|
685
|
+
specfic: 'specific',
|
|
686
|
+
spped: 'speed',
|
|
687
|
+
spce: 'space',
|
|
688
|
+
spcae: 'space',
|
|
689
|
+
spliting: 'splitting',
|
|
690
|
+
srping: 'spring',
|
|
691
|
+
stadard: 'standard',
|
|
692
|
+
standad: 'standard',
|
|
693
|
+
strcutre: 'structure',
|
|
694
|
+
strucutre: 'structure',
|
|
695
|
+
structre: 'structure',
|
|
696
|
+
stauts: 'status',
|
|
697
|
+
stataus: 'status',
|
|
698
|
+
stlye: 'style',
|
|
699
|
+
syte: 'style',
|
|
700
|
+
sucess: 'success',
|
|
701
|
+
succese: 'success',
|
|
702
|
+
suport: 'support',
|
|
703
|
+
supprot: 'support',
|
|
704
|
+
suppord: 'support',
|
|
705
|
+
suprt: 'support',
|
|
706
|
+
symobl: 'symbol',
|
|
707
|
+
symol: 'symbol',
|
|
708
|
+
syantx: 'syntax',
|
|
709
|
+
syste: 'system',
|
|
710
|
+
sytem: 'system',
|
|
711
|
+
systme: 'system',
|
|
712
|
+
tabel: 'table',
|
|
713
|
+
tabe: 'table',
|
|
714
|
+
tagerts: 'targets',
|
|
715
|
+
tahn: 'than',
|
|
716
|
+
thna: 'than',
|
|
717
|
+
taht: 'that',
|
|
718
|
+
theat: 'that',
|
|
719
|
+
therfore: 'therefore',
|
|
720
|
+
theree: 'there',
|
|
721
|
+
thigns: 'things',
|
|
722
|
+
thigs: 'things',
|
|
723
|
+
thnik: 'think',
|
|
724
|
+
thikn: 'think',
|
|
725
|
+
thniking: 'thinking',
|
|
726
|
+
though: 'though',
|
|
727
|
+
tihng: 'thing',
|
|
728
|
+
timne: 'time',
|
|
729
|
+
tmie: 'time',
|
|
730
|
+
tpoic: 'topic',
|
|
731
|
+
topci: 'topic',
|
|
732
|
+
trz: 'try',
|
|
733
|
+
trry: 'try',
|
|
734
|
+
tuen: 'tune',
|
|
735
|
+
turnng: 'turning',
|
|
736
|
+
twise: 'twice',
|
|
737
|
+
typcial: 'typical',
|
|
738
|
+
typcail: 'typical',
|
|
739
|
+
udner: 'under',
|
|
740
|
+
uner: 'under',
|
|
741
|
+
understnad: 'understand',
|
|
742
|
+
unfortunatley: 'unfortunately',
|
|
743
|
+
unqiue: 'unique',
|
|
744
|
+
unqie: 'unique',
|
|
745
|
+
unti: 'until',
|
|
746
|
+
upate: 'update',
|
|
747
|
+
upadte: 'update',
|
|
748
|
+
updte: 'update',
|
|
749
|
+
uesd: 'used',
|
|
750
|
+
usd: 'used',
|
|
751
|
+
useing: 'using',
|
|
752
|
+
usign: 'using',
|
|
753
|
+
usin: 'using',
|
|
754
|
+
usally: 'usually',
|
|
755
|
+
usuall: 'usually',
|
|
756
|
+
usualy: 'usually',
|
|
757
|
+
valdiate: 'validate',
|
|
758
|
+
valiate: 'validate',
|
|
759
|
+
vaule: 'value',
|
|
760
|
+
vaue: 'value',
|
|
761
|
+
vedio: 'video',
|
|
762
|
+
viev: 'view',
|
|
763
|
+
veiw: 'view',
|
|
764
|
+
vido: 'video',
|
|
765
|
+
wnat: 'want',
|
|
766
|
+
warining: 'warning',
|
|
767
|
+
warnig: 'warning',
|
|
768
|
+
warnign: 'warning',
|
|
769
|
+
watn: 'want',
|
|
770
|
+
wehn: 'when',
|
|
771
|
+
whne: 'when',
|
|
772
|
+
whne: 'when',
|
|
773
|
+
wehre: 'where',
|
|
774
|
+
whre: 'where',
|
|
775
|
+
wher: 'where',
|
|
776
|
+
whle: 'while',
|
|
777
|
+
whil: 'while',
|
|
778
|
+
wihtout: 'without',
|
|
779
|
+
wihtout: 'without',
|
|
780
|
+
witout: 'without',
|
|
781
|
+
wkith: 'with',
|
|
782
|
+
wokr: 'work',
|
|
783
|
+
wroking: 'working',
|
|
784
|
+
wrok: 'work',
|
|
785
|
+
wroks: 'works',
|
|
786
|
+
wrold: 'world',
|
|
787
|
+
wordl: 'world',
|
|
788
|
+
woud: 'would',
|
|
789
|
+
wuold: 'would',
|
|
790
|
+
woudl: 'would',
|
|
791
|
+
writting: 'writing',
|
|
792
|
+
wrapepr: 'wrapper',
|
|
793
|
+
wraper: 'wrapper',
|
|
794
|
+
wrriten: 'written',
|
|
795
|
+
yoru: 'your',
|
|
796
|
+
yuo: 'you',
|
|
797
|
+
yuor: 'your',
|
|
798
|
+
zeor: 'zero',
|
|
799
|
+
zreo: 'zero',
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
/** The largest edit distance worth showing. Beyond two, suggestions are noise. */
|
|
803
|
+
const MAX_DISTANCE = 2
|
|
804
|
+
|
|
805
|
+
/** Below this length a "correction" is a different word, not a typo. */
|
|
806
|
+
const MIN_LENGTH = 3
|
|
807
|
+
|
|
808
|
+
/** Learned words rank after the whole shipped list, never above it. */
|
|
809
|
+
const LEARNED_RANK_BASE = 1_000_000
|
|
810
|
+
|
|
811
|
+
/**
|
|
812
|
+
* Optimal-string-alignment Damerau-Levenshtein, with an early exit.
|
|
813
|
+
*
|
|
814
|
+
* Straight Levenshtein would not explain the most common fast-typing slip of
|
|
815
|
+
* all — two adjacent letters swapped (`atuo`, `teh`, `recieve`) — which costs it
|
|
816
|
+
* two edits and would fall outside a distance-2 budget on longer words.
|
|
817
|
+
*
|
|
818
|
+
* Returns `limit + 1` as soon as a row's best score exceeds the budget, so a
|
|
819
|
+
* hopeless candidate is abandoned without finishing the matrix.
|
|
820
|
+
*/
|
|
821
|
+
function distance(a, b, limit = MAX_DISTANCE) {
|
|
822
|
+
const al = a.length
|
|
823
|
+
const bl = b.length
|
|
824
|
+
const ceiling = limit + 1
|
|
825
|
+
if (Math.abs(al - bl) > limit) return ceiling
|
|
826
|
+
if (a === b) return 0
|
|
827
|
+
|
|
828
|
+
// Three rows, rotated: `prev` is row i-1, `prev2` is row i-2 (transpositions
|
|
829
|
+
// need the row before that one), `curr` is scratch for row i.
|
|
830
|
+
let prev2 = new Array(bl + 1)
|
|
831
|
+
let prev = new Array(bl + 1)
|
|
832
|
+
let curr = new Array(bl + 1)
|
|
833
|
+
for (let j = 0; j <= bl; j += 1) {
|
|
834
|
+
prev[j] = j
|
|
835
|
+
prev2[j] = j
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
for (let i = 1; i <= al; i += 1) {
|
|
839
|
+
curr[0] = i
|
|
840
|
+
let rowBest = i
|
|
841
|
+
const ca = a.charCodeAt(i - 1)
|
|
842
|
+
for (let j = 1; j <= bl; j += 1) {
|
|
843
|
+
const cost = ca === b.charCodeAt(j - 1) ? 0 : 1
|
|
844
|
+
let v = prev[j] + 1
|
|
845
|
+
const insertion = curr[j - 1] + 1
|
|
846
|
+
if (insertion < v) v = insertion
|
|
847
|
+
const substitution = prev[j - 1] + cost
|
|
848
|
+
if (substitution < v) v = substitution
|
|
849
|
+
if (
|
|
850
|
+
i > 1 &&
|
|
851
|
+
j > 1 &&
|
|
852
|
+
ca === b.charCodeAt(j - 2) &&
|
|
853
|
+
a.charCodeAt(i - 2) === b.charCodeAt(j - 1)
|
|
854
|
+
) {
|
|
855
|
+
const transposition = prev2[j - 2] + 1
|
|
856
|
+
if (transposition < v) v = transposition
|
|
857
|
+
}
|
|
858
|
+
curr[j] = v
|
|
859
|
+
if (v < rowBest) rowBest = v
|
|
860
|
+
}
|
|
861
|
+
// No cell on this row can be within budget any more: abandon the candidate.
|
|
862
|
+
if (rowBest > limit) return ceiling
|
|
863
|
+
const recycled = prev2
|
|
864
|
+
prev2 = prev
|
|
865
|
+
prev = curr
|
|
866
|
+
curr = recycled
|
|
867
|
+
}
|
|
868
|
+
return prev[bl]
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
/** Title-case the first letter only, so `Teh` corrects to `The`. */
|
|
872
|
+
function matchCase(original, replacement) {
|
|
873
|
+
if (original.length === 0) return replacement
|
|
874
|
+
const first = original[0]
|
|
875
|
+
if (first !== first.toUpperCase() || first === first.toLowerCase()) return replacement
|
|
876
|
+
const rest = original.slice(1)
|
|
877
|
+
// An all-caps token is an acronym, not a typo — leave it alone.
|
|
878
|
+
if (rest === rest.toUpperCase() && rest !== rest.toLowerCase()) return replacement
|
|
879
|
+
return replacement[0].toUpperCase() + replacement.slice(1)
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
/**
|
|
883
|
+
* Build the suggestion index over a frequency-ranked word list.
|
|
884
|
+
*
|
|
885
|
+
* @param words - Most common first. Index in this array IS the frequency rank.
|
|
886
|
+
* @param typoMap - Exact misspelling → correction pairs, answered instantly.
|
|
887
|
+
*/
|
|
888
|
+
function createEngine(words, typoMap = TYPO_MAP) {
|
|
889
|
+
const rank = new Map()
|
|
890
|
+
/** Bucket key `first letter + length` → candidate words, for a bounded scan. */
|
|
891
|
+
const buckets = new Map()
|
|
892
|
+
|
|
893
|
+
const list = Array.isArray(words) ? words : []
|
|
894
|
+
for (let i = 0; i < list.length; i += 1) {
|
|
895
|
+
const w = list[i]
|
|
896
|
+
if (typeof w !== 'string' || w.length === 0) continue
|
|
897
|
+
if (rank.has(w)) continue
|
|
898
|
+
rank.set(w, i)
|
|
899
|
+
for (let len = Math.max(MIN_LENGTH, w.length - MAX_DISTANCE); len <= w.length + MAX_DISTANCE; len += 1) {
|
|
900
|
+
const key = w[0] + ':' + len
|
|
901
|
+
const bucket = buckets.get(key)
|
|
902
|
+
if (bucket === undefined) buckets.set(key, [w])
|
|
903
|
+
else bucket.push(w)
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
/** Correct spellings the user has taught us; always treated as valid. */
|
|
908
|
+
const learned = new Set()
|
|
909
|
+
|
|
910
|
+
function isWord(word) {
|
|
911
|
+
return rank.has(word) || learned.has(word)
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
function addWord(word) {
|
|
915
|
+
const w = String(word ?? '').trim().toLowerCase()
|
|
916
|
+
if (!/^[a-z][a-z'-]*$/.test(w)) return false
|
|
917
|
+
if (rank.has(w)) return true
|
|
918
|
+
learned.add(w)
|
|
919
|
+
// Learned words are indexed too, at the very bottom of the ranking: a word
|
|
920
|
+
// the user taught us must still be able to WIN a correction (`courtkeyne`
|
|
921
|
+
// → `courtkeynet`), it just should not outrank everyday vocabulary.
|
|
922
|
+
rank.set(w, rank.size + LEARNED_RANK_BASE)
|
|
923
|
+
for (let len = Math.max(MIN_LENGTH, w.length - MAX_DISTANCE); len <= w.length + MAX_DISTANCE; len += 1) {
|
|
924
|
+
const key = w[0] + ':' + len
|
|
925
|
+
const bucket = buckets.get(key)
|
|
926
|
+
if (bucket === undefined) buckets.set(key, [w])
|
|
927
|
+
else bucket.push(w)
|
|
928
|
+
}
|
|
929
|
+
return true
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
/**
|
|
933
|
+
* Ranked corrections for one typed token, best first.
|
|
934
|
+
*
|
|
935
|
+
* Answers `[]` for anything already spelled correctly — correcting a real
|
|
936
|
+
* word is Chrome's most annoying behaviour (`hoe` → `how`), and the ranked
|
|
937
|
+
* list is what makes that check meaningful.
|
|
938
|
+
*/
|
|
939
|
+
function suggest(word, options = {}) {
|
|
940
|
+
const raw = String(word ?? '')
|
|
941
|
+
if (raw.length < MIN_LENGTH) return []
|
|
942
|
+
if (!/^[A-Za-z][A-Za-z'’-]*$/.test(raw)) return []
|
|
943
|
+
// A fully upper-case token is an acronym (API, DSH, PDF), never a typo.
|
|
944
|
+
if (raw.length > 1 && raw === raw.toUpperCase()) return []
|
|
945
|
+
|
|
946
|
+
const lower = raw.toLowerCase()
|
|
947
|
+
const limit = Number.isInteger(options.limit) ? options.limit : 3
|
|
948
|
+
const cap = Number.isInteger(options.maxDistance) ? options.maxDistance : MAX_DISTANCE
|
|
949
|
+
|
|
950
|
+
const out = []
|
|
951
|
+
const seen = new Set()
|
|
952
|
+
|
|
953
|
+
const direct = typoMap?.[lower]
|
|
954
|
+
if (typeof direct === 'string' && direct !== lower) {
|
|
955
|
+
out.push({ word: matchCase(raw, direct), distance: 0, source: 'typo-map' })
|
|
956
|
+
seen.add(direct)
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
if (isWord(lower)) return out.slice(0, limit)
|
|
960
|
+
|
|
961
|
+
const firstBuckets = []
|
|
962
|
+
for (let len = Math.max(MIN_LENGTH, lower.length - cap); len <= lower.length + cap; len += 1) {
|
|
963
|
+
const bucket = buckets.get(lower[0] + ':' + len)
|
|
964
|
+
if (bucket !== undefined) firstBuckets.push(bucket)
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
const hits = []
|
|
968
|
+
/** A word is filed in several length buckets, so it can be met more than once. */
|
|
969
|
+
const counted = new Set()
|
|
970
|
+
for (const bucket of firstBuckets) {
|
|
971
|
+
for (const candidate of bucket) {
|
|
972
|
+
if (seen.has(candidate) || counted.has(candidate)) continue
|
|
973
|
+
const d = distance(lower, candidate, cap)
|
|
974
|
+
if (d > cap) continue
|
|
975
|
+
counted.add(candidate)
|
|
976
|
+
hits.push({ word: candidate, distance: d, rank: rank.get(candidate) ?? Infinity })
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
// Distance first: one edit away always beats two, however rare. Among
|
|
981
|
+
// equally distant candidates the commoner word wins, which is what puts
|
|
982
|
+
// `the` above `eth` for `theh`.
|
|
983
|
+
hits.sort((a, b) => a.distance - b.distance || a.rank - b.rank)
|
|
984
|
+
|
|
985
|
+
for (const hit of hits) {
|
|
986
|
+
if (out.length >= limit) break
|
|
987
|
+
out.push({ word: matchCase(raw, hit.word), distance: hit.distance, source: 'distance' })
|
|
988
|
+
}
|
|
989
|
+
return out
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
return { suggest, isWord, addWord, learned: () => [...learned], size: rank.size }
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
|
|
996
|
+
/* The one engine instance this page uses. */
|
|
997
|
+
const ENGINE = createEngine(WORD_LIST.split("\n").filter(Boolean), TYPO_MAP);
|
|
998
|
+
|
|
999
|
+
/* <<< GENERATED ENGINE BLOCK <<< */
|
|
1000
|
+
|
|
1001
|
+
/* ================================================================== *
|
|
1002
|
+
* dsh-spell-check — the browser half.
|
|
1003
|
+
*
|
|
1004
|
+
* WHAT THIS IS
|
|
1005
|
+
*
|
|
1006
|
+
* The composer's own spell checker, in the shape Chrome gives you: the
|
|
1007
|
+
* word under the caret is checked as it is typed, and when it is wrong a
|
|
1008
|
+
* strip appears directly above the caret offering the correction.
|
|
1009
|
+
*
|
|
1010
|
+
* THREE WAYS TO ACCEPT IT, because one is not enough:
|
|
1011
|
+
*
|
|
1012
|
+
* 1. TAB — the keyboard path, exactly as in Chrome.
|
|
1013
|
+
* 2. HOVER + CLICK the strip — the pointer path. The strip stays put
|
|
1014
|
+
* while the pointer is over it and while the caret is still in the
|
|
1015
|
+
* word, so it can actually be reached and hit.
|
|
1016
|
+
* 3. CLICK THE CHIP — the composer's own "spell" chip turns into
|
|
1017
|
+
* `theh → the` whenever a correction is available. It lives in the
|
|
1018
|
+
* composer bar rather than floating, so it is reachable even when the
|
|
1019
|
+
* caret has moved or the strip has been dismissed.
|
|
1020
|
+
*
|
|
1021
|
+
* WHY THE DICTIONARY IS EMBEDDED HERE
|
|
1022
|
+
*
|
|
1023
|
+
* Earlier this half asked the host for suggestions. That made the whole
|
|
1024
|
+
* feature depend on the host process having been restarted, which is
|
|
1025
|
+
* invisible and infuriating: the plugin says "Running" and corrects
|
|
1026
|
+
* nothing. The engine and word list are now generated INTO this bundle by
|
|
1027
|
+
* scripts/build-client.mjs from src/engine.js — the same source the host
|
|
1028
|
+
* imports — so corrections work the moment this file loads, and the two
|
|
1029
|
+
* copies cannot drift because there is only one source.
|
|
1030
|
+
*
|
|
1031
|
+
* The host half is still used, for one thing only: persisting words the
|
|
1032
|
+
* user teaches the dictionary.
|
|
1033
|
+
* ================================================================== */
|
|
1034
|
+
|
|
1035
|
+
const EMPTY = { word: "", suggestions: [], active: 0, status: "" };
|
|
1036
|
+
|
|
1037
|
+
/* ------------------------------------------------------------------ *
|
|
1038
|
+
* Styles
|
|
1039
|
+
* ------------------------------------------------------------------ */
|
|
1040
|
+
|
|
1041
|
+
function styles() {
|
|
1042
|
+
return [
|
|
1043
|
+
".sp-strip{position:fixed;z-index:2147483000;display:flex;align-items:stretch;",
|
|
1044
|
+
"gap:2px;padding:3px;border-radius:9px;",
|
|
1045
|
+
"border:1px solid var(--dsw-alias-border-l2,rgba(128,128,128,.32));",
|
|
1046
|
+
"background:var(--dsw-alias-bg-layer-2,#1b1b1e);",
|
|
1047
|
+
"box-shadow:0 6px 22px rgba(0,0,0,.34);",
|
|
1048
|
+
"font:12px/1.2 ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;",
|
|
1049
|
+
"color:var(--dsw-alias-label-primary,inherit);white-space:nowrap;",
|
|
1050
|
+
"opacity:0;transform:translateY(3px);transition:opacity .11s ease-out,transform .11s ease-out;",
|
|
1051
|
+
"pointer-events:none}",
|
|
1052
|
+
".sp-strip.sp-open{opacity:1;transform:none;pointer-events:auto}",
|
|
1053
|
+
// A transparent band above the strip. The pointer crosses open space on
|
|
1054
|
+
// its way up from the caret, and without this the strip can be lost
|
|
1055
|
+
// mid-reach; the band makes the whole trip one continuous hover.
|
|
1056
|
+
".sp-strip::before{content:'';position:absolute;left:0;right:0;top:-10px;height:10px}",
|
|
1057
|
+
".sp-item{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 8px;",
|
|
1058
|
+
"border:0;border-radius:6px;background:transparent;color:inherit;",
|
|
1059
|
+
"font:inherit;cursor:pointer;max-width:230px}",
|
|
1060
|
+
".sp-item:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(128,128,128,.16))}",
|
|
1061
|
+
".sp-item.sp-active{background:var(--dsw-alias-interactive-bg-hover,rgba(128,128,128,.2))}",
|
|
1062
|
+
".sp-wrong{text-decoration:line-through;opacity:.45;font-weight:400;cursor:default}",
|
|
1063
|
+
".sp-item.sp-echo{cursor:default}",
|
|
1064
|
+
".sp-item.sp-echo:hover{background:transparent}",
|
|
1065
|
+
".sp-word{overflow:hidden;text-overflow:ellipsis;font-weight:600}",
|
|
1066
|
+
".sp-arrow{opacity:.4}",
|
|
1067
|
+
".sp-key{margin-left:2px;padding:1px 4px;border-radius:4px;font-size:10px;font-weight:700;",
|
|
1068
|
+
"letter-spacing:.02em;opacity:.7;",
|
|
1069
|
+
"border:1px solid var(--dsw-alias-border-l2,rgba(128,128,128,.32))}",
|
|
1070
|
+
// The right-click menu. Vertical, like Chromium's own spelling menu —
|
|
1071
|
+
// a horizontal strip is right for a caret and wrong for a pointer.
|
|
1072
|
+
".sp-underline{position:fixed;left:0;top:0;z-index:2147482900;pointer-events:none}",
|
|
1073
|
+
".sp-menu{position:fixed;z-index:2147483001;min-width:184px;max-width:280px;",
|
|
1074
|
+
"max-height:280px;overflow-y:auto;padding:4px;border-radius:10px;",
|
|
1075
|
+
"border:1px solid var(--dsw-alias-border-l2,rgba(128,128,128,.32));",
|
|
1076
|
+
"background:var(--dsw-alias-bg-layer-2,#1b1b1e);",
|
|
1077
|
+
"box-shadow:0 10px 30px rgba(0,0,0,.42);",
|
|
1078
|
+
"font:12.5px/1.35 ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;",
|
|
1079
|
+
"color:var(--dsw-alias-label-primary,inherit);",
|
|
1080
|
+
"opacity:0;transform:translateY(-3px);transition:opacity .1s ease-out,transform .1s ease-out;",
|
|
1081
|
+
"pointer-events:none}",
|
|
1082
|
+
".sp-menu.sp-open{opacity:1;transform:none;pointer-events:auto}",
|
|
1083
|
+
".sp-menu-item{display:block;width:100%;text-align:left;padding:5px 9px;border:0;border-radius:6px;",
|
|
1084
|
+
"background:transparent;color:inherit;font:inherit;cursor:pointer;",
|
|
1085
|
+
"overflow:hidden;text-overflow:ellipsis;white-space:nowrap}",
|
|
1086
|
+
".sp-menu-item:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(128,128,128,.18))}",
|
|
1087
|
+
".sp-menu-head{padding:4px 9px 6px;font-size:11px;opacity:.55;",
|
|
1088
|
+
"border-bottom:1px solid var(--dsw-alias-border-l1,rgba(128,128,128,.2));margin-bottom:4px;",
|
|
1089
|
+
"overflow:hidden;text-overflow:ellipsis;white-space:nowrap}",
|
|
1090
|
+
".sp-menu-learn{color:var(--dsw-alias-label-secondary,inherit);opacity:.9}",
|
|
1091
|
+
".sp-menu-sep{height:1px;margin:4px 6px;background:var(--dsw-alias-border-l1,rgba(128,128,128,.2))}",
|
|
1092
|
+
"@media (prefers-reduced-motion:reduce){.sp-strip{transition:none}}",
|
|
1093
|
+
].join("");
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
function injectStyles() {
|
|
1097
|
+
const id = "dsh-spell-check-styles";
|
|
1098
|
+
// REPLACED, never skipped.
|
|
1099
|
+
//
|
|
1100
|
+
// This used to early-return when the tag existed, which was right for a
|
|
1101
|
+
// page that loads the bundle once and wrong for every hot-reload after
|
|
1102
|
+
// it: the FIRST stylesheet stayed in the page forever, so rules added
|
|
1103
|
+
// later simply did not exist. That is why the right-click menu mounted,
|
|
1104
|
+
// reported itself open, and rendered as unstyled text at the bottom of
|
|
1105
|
+
// the document — invisible.
|
|
1106
|
+
const existing = document.getElementById(id);
|
|
1107
|
+
if (existing !== null) existing.remove();
|
|
1108
|
+
const tag = document.createElement("style");
|
|
1109
|
+
tag.id = id;
|
|
1110
|
+
tag.textContent = styles();
|
|
1111
|
+
document.head.appendChild(tag);
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
/* ------------------------------------------------------------------ *
|
|
1115
|
+
* The composer
|
|
1116
|
+
* ------------------------------------------------------------------ */
|
|
1117
|
+
|
|
1118
|
+
/** The composer's Lexical editor, when it is on screen and editable. */
|
|
1119
|
+
function findEditor() {
|
|
1120
|
+
return document.querySelector('[data-lexical-editor="true"][contenteditable="true"]');
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
/**
|
|
1124
|
+
* The editor that actually received this event.
|
|
1125
|
+
*
|
|
1126
|
+
* `document.querySelector` finds the FIRST composer in the page, which is
|
|
1127
|
+
* the wrong one the moment a second composer is mounted. The event target
|
|
1128
|
+
* names the right one, so it is preferred.
|
|
1129
|
+
*/
|
|
1130
|
+
function editorFromEvent(event) {
|
|
1131
|
+
const target = event?.target;
|
|
1132
|
+
if (target instanceof Element) {
|
|
1133
|
+
const lexical = target.closest('[data-lexical-editor="true"]');
|
|
1134
|
+
if (lexical !== null) return lexical;
|
|
1135
|
+
const editable = target.closest('[contenteditable="true"]');
|
|
1136
|
+
if (editable !== null) return editable;
|
|
1137
|
+
}
|
|
1138
|
+
return findEditor();
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
/**
|
|
1142
|
+
* The token the caret is sitting at the end of, plus where it starts.
|
|
1143
|
+
*
|
|
1144
|
+
* Only a collapsed caret inside a text node counts: a selection is
|
|
1145
|
+
* "replace these words", not "spell this word".
|
|
1146
|
+
*/
|
|
1147
|
+
function tokenAtCaret(editor) {
|
|
1148
|
+
const selection = window.getSelection();
|
|
1149
|
+
if (selection === null || selection.rangeCount === 0 || !selection.isCollapsed) return null;
|
|
1150
|
+
const range = selection.getRangeAt(0);
|
|
1151
|
+
const node = range.startContainer;
|
|
1152
|
+
if (node.nodeType !== 3) return null; // a text node, not an element
|
|
1153
|
+
if (!editor.contains(node)) return null;
|
|
1154
|
+
const offset = range.startOffset;
|
|
1155
|
+
const before = node.data.slice(0, offset);
|
|
1156
|
+
// A trailing apostrophe or dash is part of the word (dont, well-known),
|
|
1157
|
+
// but the token must START with a letter, so @mentions and /commands are
|
|
1158
|
+
// never treated as words.
|
|
1159
|
+
const match = /([A-Za-z][A-Za-z'\u2019-]*)$/.exec(before);
|
|
1160
|
+
if (match === null) return null;
|
|
1161
|
+
return {
|
|
1162
|
+
text: match[1],
|
|
1163
|
+
startOffset: offset - match[1].length,
|
|
1164
|
+
endOffset: offset,
|
|
1165
|
+
node,
|
|
1166
|
+
range,
|
|
1167
|
+
};
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
/**
|
|
1171
|
+
* The whole word at a POINTER position, with its bounds in its text node.
|
|
1172
|
+
*
|
|
1173
|
+
* Right-clicking is about the word under the cursor, not the word behind
|
|
1174
|
+
* the caret, so this maps the point to a text offset first and then grows
|
|
1175
|
+
* outwards from it. Chromium's `caretRangeFromPoint` is the only reliable
|
|
1176
|
+
* way to do that in a rendered document.
|
|
1177
|
+
*/
|
|
1178
|
+
function wordAtPoint(editor, x, y, doc = document) {
|
|
1179
|
+
let range = null;
|
|
1180
|
+
if (typeof doc.caretRangeFromPoint === "function") range = doc.caretRangeFromPoint(x, y);
|
|
1181
|
+
else if (typeof doc.caretPositionFromPoint === "function") {
|
|
1182
|
+
const position = doc.caretPositionFromPoint(x, y);
|
|
1183
|
+
if (position !== null) {
|
|
1184
|
+
range = doc.createRange();
|
|
1185
|
+
range.setStart(position.offsetNode, position.offset);
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
if (range === null) return null;
|
|
1189
|
+
const node = range.startContainer;
|
|
1190
|
+
if (node.nodeType !== 3) return null; // need a text node
|
|
1191
|
+
if (!editor.contains(node)) return null;
|
|
1192
|
+
const data = node.data;
|
|
1193
|
+
const offset = range.startOffset;
|
|
1194
|
+
const isWordChar = (index) => /[A-Za-z'\u2019-]/.test(data[index] ?? "");
|
|
1195
|
+
let start = offset;
|
|
1196
|
+
let end = offset;
|
|
1197
|
+
while (start > 0 && isWordChar(start - 1)) start -= 1;
|
|
1198
|
+
while (end < data.length && isWordChar(end)) end += 1;
|
|
1199
|
+
if (start === end) return null;
|
|
1200
|
+
const text = data.slice(start, end);
|
|
1201
|
+
if (!/^[A-Za-z]/.test(text)) return null;
|
|
1202
|
+
return { text, start, end, node };
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
/**
|
|
1206
|
+
* Whether the caret is inside a fenced code block of the draft.
|
|
1207
|
+
*
|
|
1208
|
+
* Code is not prose and must not be corrected. Only the text BEFORE the
|
|
1209
|
+
* caret is examined, so a fence opened later cannot retroactively silence
|
|
1210
|
+
* an earlier word.
|
|
1211
|
+
*/
|
|
1212
|
+
function insideCodeFence(editor, range) {
|
|
1213
|
+
try {
|
|
1214
|
+
const lead = document.createRange();
|
|
1215
|
+
lead.selectNodeContents(editor);
|
|
1216
|
+
lead.setEnd(range.startContainer, range.startOffset);
|
|
1217
|
+
const text = lead.toString();
|
|
1218
|
+
let fences = 0;
|
|
1219
|
+
let index = text.indexOf("```");
|
|
1220
|
+
while (index !== -1) {
|
|
1221
|
+
fences += 1;
|
|
1222
|
+
index = text.indexOf("```", index + 3);
|
|
1223
|
+
}
|
|
1224
|
+
return fences % 2 === 1;
|
|
1225
|
+
} catch {
|
|
1226
|
+
return false;
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
/**
|
|
1231
|
+
* Replace one token, and leave the caret after the replacement.
|
|
1232
|
+
*
|
|
1233
|
+
* `insertText` goes through the browser's editing command so Lexical sees
|
|
1234
|
+
* the change as user input. The manual splice is only the fallback for a
|
|
1235
|
+
* browser that refuses the command; without it the strip would look like it
|
|
1236
|
+
* worked while the text stayed wrong.
|
|
1237
|
+
*/
|
|
1238
|
+
function replaceToken(token, replacement) {
|
|
1239
|
+
const selection = window.getSelection();
|
|
1240
|
+
if (selection === null) return false;
|
|
1241
|
+
const range = document.createRange();
|
|
1242
|
+
try {
|
|
1243
|
+
range.setStart(token.node, token.startOffset);
|
|
1244
|
+
range.setEnd(token.node, token.endOffset);
|
|
1245
|
+
} catch {
|
|
1246
|
+
return false;
|
|
1247
|
+
}
|
|
1248
|
+
selection.removeAllRanges();
|
|
1249
|
+
selection.addRange(range);
|
|
1250
|
+
let applied = false;
|
|
1251
|
+
try {
|
|
1252
|
+
applied = document.execCommand("insertText", false, replacement);
|
|
1253
|
+
} catch {
|
|
1254
|
+
applied = false;
|
|
1255
|
+
}
|
|
1256
|
+
if (applied) return true;
|
|
1257
|
+
|
|
1258
|
+
try {
|
|
1259
|
+
const data = token.node.data;
|
|
1260
|
+
token.node.data = data.slice(0, token.startOffset) + replacement + data.slice(token.endOffset);
|
|
1261
|
+
const caret = document.createRange();
|
|
1262
|
+
caret.setStart(token.node, token.startOffset + replacement.length);
|
|
1263
|
+
caret.collapse(true);
|
|
1264
|
+
selection.removeAllRanges();
|
|
1265
|
+
selection.addRange(caret);
|
|
1266
|
+
const editor = token.node.parentElement;
|
|
1267
|
+
editor?.dispatchEvent(
|
|
1268
|
+
new InputEvent("input", {
|
|
1269
|
+
bubbles: true,
|
|
1270
|
+
inputType: "insertReplacementText",
|
|
1271
|
+
data: replacement,
|
|
1272
|
+
}),
|
|
1273
|
+
);
|
|
1274
|
+
return true;
|
|
1275
|
+
} catch {
|
|
1276
|
+
return false;
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
/**
|
|
1281
|
+
* A word's absolute character offset inside the editor's text.
|
|
1282
|
+
*
|
|
1283
|
+
* Neither a text node nor a DOM Range survives here: Lexical re-creates
|
|
1284
|
+
* nodes, and the selection collapses when focus moves to the menu. A
|
|
1285
|
+
* character offset into the draft does survive — the text itself has not
|
|
1286
|
+
* changed between opening the menu and clicking an item.
|
|
1287
|
+
*/
|
|
1288
|
+
function offsetInEditor(editor, node, offset) {
|
|
1289
|
+
try {
|
|
1290
|
+
const walker = document.createTreeWalker(editor, NodeFilter.SHOW_TEXT);
|
|
1291
|
+
let total = 0;
|
|
1292
|
+
for (let current = walker.nextNode(); current !== null; current = walker.nextNode()) {
|
|
1293
|
+
if (current === node) return total + offset;
|
|
1294
|
+
total += current.data.length;
|
|
1295
|
+
}
|
|
1296
|
+
} catch {
|
|
1297
|
+
// No TreeWalker support, or a node that is already gone.
|
|
1298
|
+
}
|
|
1299
|
+
return -1;
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
|
|
1303
|
+
|
|
1304
|
+
/**
|
|
1305
|
+
* Unwrap a snapshot, which may be a getter, a value holder, or a plain value.
|
|
1306
|
+
*
|
|
1307
|
+
* The composer exposes its state as a snapshot object rather than plain
|
|
1308
|
+
* data; Cite Lens unwraps it the same way before reading `draft`.
|
|
1309
|
+
*/
|
|
1310
|
+
function snapshotValue(source) {
|
|
1311
|
+
if (source === null || source === undefined) return undefined;
|
|
1312
|
+
if (typeof source.getSnapshot === "function") return source.getSnapshot();
|
|
1313
|
+
if (typeof source.get === "function") return source.get();
|
|
1314
|
+
if (source.value !== undefined) return source.value;
|
|
1315
|
+
if (source.current !== undefined) return source.current;
|
|
1316
|
+
return source;
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
/**
|
|
1320
|
+
* The composer write path.
|
|
1321
|
+
*
|
|
1322
|
+
* `execCommand` cannot be trusted in this editor: Lexical applies edits
|
|
1323
|
+
* against its OWN selection, so a DOM range set by the page loses and the
|
|
1324
|
+
* insert lands at the start of the draft. This goes through the composer's
|
|
1325
|
+
* public surface instead — the same call Cite Lens uses to fill the message
|
|
1326
|
+
* box — which sets the draft model directly, with no selection to disagree
|
|
1327
|
+
* about.
|
|
1328
|
+
*/
|
|
1329
|
+
function createCommitter(ctx, sessionId) {
|
|
1330
|
+
|
|
1331
|
+
function box() {
|
|
1332
|
+
try {
|
|
1333
|
+
// Client services are direct context properties.
|
|
1334
|
+
const conversation = ctx.conversation ?? ctx.get?.("conversation");
|
|
1335
|
+
const sessions = ctx.sessions ?? ctx.get?.("sessions");
|
|
1336
|
+
if (conversation === undefined || conversation === null) return null;
|
|
1337
|
+
if (sessions === undefined || sessions === null) return null;
|
|
1338
|
+
const scope = sessions.scope?.(sessionId);
|
|
1339
|
+
if (scope === undefined || scope === null) return null;
|
|
1340
|
+
return conversation.input.for(scope) ?? null;
|
|
1341
|
+
} catch {
|
|
1342
|
+
return null;
|
|
1343
|
+
}
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
/** Read the current draft, or undefined. */
|
|
1347
|
+
function draft() {
|
|
1348
|
+
const target = box();
|
|
1349
|
+
if (target === null) return undefined;
|
|
1350
|
+
try {
|
|
1351
|
+
const state = snapshotValue(target.state);
|
|
1352
|
+
const value = state?.draft;
|
|
1353
|
+
return typeof value === "string" ? value : undefined;
|
|
1354
|
+
} catch {
|
|
1355
|
+
return undefined;
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
/**
|
|
1360
|
+
* Replace `word` with `replacement`, and confirm it landed.
|
|
1361
|
+
*
|
|
1362
|
+
* Returns false rather than guessing when the word is not in the draft, so
|
|
1363
|
+
* a stale menu can never edit the wrong place.
|
|
1364
|
+
*/
|
|
1365
|
+
function commit(word, replacement) {
|
|
1366
|
+
const target = box();
|
|
1367
|
+
if (target === null || typeof target.setDraft !== "function") return false;
|
|
1368
|
+
const current = draft();
|
|
1369
|
+
if (typeof current !== "string") return false;
|
|
1370
|
+
const index = current.lastIndexOf(word);
|
|
1371
|
+
if (index < 0) return false;
|
|
1372
|
+
const next = current.slice(0, index) + replacement + current.slice(index + word.length);
|
|
1373
|
+
try {
|
|
1374
|
+
target.setDraft(next);
|
|
1375
|
+
} catch {
|
|
1376
|
+
return false;
|
|
1377
|
+
}
|
|
1378
|
+
return true;
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
return { commit, draft, available: () => box() !== null };
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
/**
|
|
1385
|
+
* Turn OFF the browser's own spellchecker on the composer.
|
|
1386
|
+
*
|
|
1387
|
+
* Chromium draws red squiggles on a contenteditable by itself, so it was
|
|
1388
|
+
* marking words underneath our own marking — two spellcheckers with two
|
|
1389
|
+
* dictionaries, disagreeing in public. Ours replaces it, so the native one
|
|
1390
|
+
* is silenced. Lexical re-applies attributes when it re-renders, which is
|
|
1391
|
+
* why this is asserted on every pass rather than once.
|
|
1392
|
+
*/
|
|
1393
|
+
function silenceNativeSpellcheck(editor) {
|
|
1394
|
+
if (editor === null || editor === undefined) return;
|
|
1395
|
+
try {
|
|
1396
|
+
if (editor.getAttribute("spellcheck") !== "false") {
|
|
1397
|
+
editor.setAttribute("spellcheck", "false");
|
|
1398
|
+
}
|
|
1399
|
+
} catch {
|
|
1400
|
+
// A detached node; nothing to silence.
|
|
1401
|
+
}
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
/**
|
|
1405
|
+
* The blue wavy underlines, drawn on a canvas over the composer.
|
|
1406
|
+
*
|
|
1407
|
+
* WHY A CANVAS AND NOT CSS
|
|
1408
|
+
*
|
|
1409
|
+
* Marking a word inside a Lexical editor means decorating a Range, and a
|
|
1410
|
+
* Range cannot carry a style without wrapping the text in an element —
|
|
1411
|
+
* which means mutating the editor's own DOM and fighting its reconciler.
|
|
1412
|
+
* A canvas floating over the text draws exactly where the glyphs are and
|
|
1413
|
+
* never touches the model.
|
|
1414
|
+
*
|
|
1415
|
+
* Geometry comes from `Range.getClientRects()`, so wrapped lines, zoom and
|
|
1416
|
+
* theme changes all land correctly.
|
|
1417
|
+
*/
|
|
1418
|
+
function createUnderliner() {
|
|
1419
|
+
const canvas = document.createElement("canvas");
|
|
1420
|
+
canvas.className = "sp-underline";
|
|
1421
|
+
canvas.setAttribute("aria-hidden", "true");
|
|
1422
|
+
let timer = null;
|
|
1423
|
+
// The canvas is fixed and full-window, and every mark is painted at an
|
|
1424
|
+
// absolute viewport coordinate. That means it is only correct at the
|
|
1425
|
+
// instant it is painted: the moment the editor's text or geometry changes
|
|
1426
|
+
// without a repaint, the old marks hang in the air like an imprint.
|
|
1427
|
+
//
|
|
1428
|
+
// Keyboard and selection events are NOT enough to keep it correct. Sending
|
|
1429
|
+
// a message clears the draft programmatically and usually moves focus out
|
|
1430
|
+
// of the composer, so no `keyup`/`selectionchange` fires a repaint — the
|
|
1431
|
+
// exact "underline stays after I press Enter" bug. These observers watch
|
|
1432
|
+
// the DOM and the box directly, so a clear or a resize repaints regardless
|
|
1433
|
+
// of where focus went.
|
|
1434
|
+
let mutationObserver = null;
|
|
1435
|
+
let resizeObserver = null;
|
|
1436
|
+
let observedEditor = null;
|
|
1437
|
+
let lastSignature = "";
|
|
1438
|
+
let healTimer = null;
|
|
1439
|
+
|
|
1440
|
+
const EDITOR_SELECTOR = '[data-lexical-editor="true"][contenteditable="true"]';
|
|
1441
|
+
|
|
1442
|
+
/** A cheap fingerprint of "what the canvas should currently show". */
|
|
1443
|
+
function signature(editor) {
|
|
1444
|
+
if (editor === null || editor === undefined) return "";
|
|
1445
|
+
let rect = null;
|
|
1446
|
+
try {
|
|
1447
|
+
rect = editor.getBoundingClientRect();
|
|
1448
|
+
} catch {
|
|
1449
|
+
rect = null;
|
|
1450
|
+
}
|
|
1451
|
+
const box = rect
|
|
1452
|
+
? Math.round(rect.left) + "," + Math.round(rect.top) + "," + Math.round(rect.width) + "," + Math.round(rect.height)
|
|
1453
|
+
: "0";
|
|
1454
|
+
// Length, not the whole string: a clear (→0), an edit, a remount or a
|
|
1455
|
+
// resize all change it, and it stays O(1) to compare on every heal tick.
|
|
1456
|
+
return (editor.textContent ?? "").length + ":" + box;
|
|
1457
|
+
}
|
|
1458
|
+
|
|
1459
|
+
/** Keep the observers pointed at the live editor, even across remounts. */
|
|
1460
|
+
function observe(editor) {
|
|
1461
|
+
if (editor === observedEditor) return;
|
|
1462
|
+
observedEditor = editor;
|
|
1463
|
+
if (mutationObserver !== null) {
|
|
1464
|
+
mutationObserver.disconnect();
|
|
1465
|
+
mutationObserver = null;
|
|
1466
|
+
}
|
|
1467
|
+
if (resizeObserver !== null) {
|
|
1468
|
+
resizeObserver.disconnect();
|
|
1469
|
+
resizeObserver = null;
|
|
1470
|
+
}
|
|
1471
|
+
if (editor === null || editor === undefined) return;
|
|
1472
|
+
if (typeof MutationObserver !== "undefined") {
|
|
1473
|
+
mutationObserver = new MutationObserver(() => schedule(50));
|
|
1474
|
+
mutationObserver.observe(editor, { childList: true, characterData: true, subtree: true });
|
|
1475
|
+
}
|
|
1476
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
1477
|
+
resizeObserver = new ResizeObserver(() => schedule(50));
|
|
1478
|
+
resizeObserver.observe(editor);
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
function ensure() {
|
|
1483
|
+
if (canvas.parentNode === null) document.body.appendChild(canvas);
|
|
1484
|
+
const ratio = window.devicePixelRatio || 1;
|
|
1485
|
+
const width = window.innerWidth;
|
|
1486
|
+
const height = window.innerHeight;
|
|
1487
|
+
if (canvas.width !== Math.round(width * ratio) || canvas.height !== Math.round(height * ratio)) {
|
|
1488
|
+
canvas.width = Math.round(width * ratio);
|
|
1489
|
+
canvas.height = Math.round(height * ratio);
|
|
1490
|
+
canvas.style.width = width + "px";
|
|
1491
|
+
canvas.style.height = height + "px";
|
|
1492
|
+
}
|
|
1493
|
+
return ratio;
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
function wave(context, from, to, baseline) {
|
|
1497
|
+
const amplitude = 1.5;
|
|
1498
|
+
const period = 5;
|
|
1499
|
+
context.beginPath();
|
|
1500
|
+
context.moveTo(from, baseline);
|
|
1501
|
+
let up = true;
|
|
1502
|
+
for (let x = from; x + period / 2 <= to; x += period / 2) {
|
|
1503
|
+
const controlY = baseline + (up ? -amplitude : amplitude);
|
|
1504
|
+
context.quadraticCurveTo(x + period / 4, controlY, x + period / 2, baseline);
|
|
1505
|
+
up = !up;
|
|
1506
|
+
}
|
|
1507
|
+
context.stroke();
|
|
1508
|
+
}
|
|
1509
|
+
|
|
1510
|
+
/** Repaint every misspelled word currently laid out in the editor. */
|
|
1511
|
+
function paint() {
|
|
1512
|
+
const editor = document.querySelector(EDITOR_SELECTOR);
|
|
1513
|
+
observe(editor);
|
|
1514
|
+
lastSignature = signature(editor);
|
|
1515
|
+
const ratio = ensure();
|
|
1516
|
+
const context = canvas.getContext("2d");
|
|
1517
|
+
if (context === null) return;
|
|
1518
|
+
context.setTransform(ratio, 0, 0, ratio, 0, 0);
|
|
1519
|
+
context.clearRect(0, 0, canvas.width, canvas.height);
|
|
1520
|
+
if (editor === null) return;
|
|
1521
|
+
|
|
1522
|
+
// Fenced code is not prose; find its spans up front so marks never
|
|
1523
|
+
// appear on code. Offsets are absolute within the editor.
|
|
1524
|
+
const text = editor.textContent ?? "";
|
|
1525
|
+
const fences = [];
|
|
1526
|
+
let fence = text.indexOf("```");
|
|
1527
|
+
while (fence !== -1) {
|
|
1528
|
+
const close = text.indexOf("```", fence + 3);
|
|
1529
|
+
if (close === -1) break;
|
|
1530
|
+
fences.push([fence, close + 3]);
|
|
1531
|
+
fence = text.indexOf("```", close + 3);
|
|
1532
|
+
}
|
|
1533
|
+
const inFence = (offset) => fences.some(([a, b]) => offset >= a && offset < b);
|
|
1534
|
+
|
|
1535
|
+
const bounds = editor.getBoundingClientRect();
|
|
1536
|
+
context.strokeStyle = "rgba(96, 150, 232, 0.95)";
|
|
1537
|
+
context.lineWidth = 1.35;
|
|
1538
|
+
context.lineCap = "round";
|
|
1539
|
+
|
|
1540
|
+
let walker;
|
|
1541
|
+
try {
|
|
1542
|
+
walker = document.createTreeWalker(editor, NodeFilter.SHOW_TEXT);
|
|
1543
|
+
} catch {
|
|
1544
|
+
return;
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
let absolute = 0;
|
|
1548
|
+
for (let node = walker.nextNode(); node !== null; node = walker.nextNode()) {
|
|
1549
|
+
const data = node.data;
|
|
1550
|
+
const pattern = /[A-Za-z][A-Za-z'\u2019-]*/g;
|
|
1551
|
+
let match;
|
|
1552
|
+
while ((match = pattern.exec(data)) !== null) {
|
|
1553
|
+
const word = match[0];
|
|
1554
|
+
if (word.length < 3) continue;
|
|
1555
|
+
if (word === word.toUpperCase()) continue; // acronym
|
|
1556
|
+
if (inFence(absolute + match.index)) continue;
|
|
1557
|
+
let wrong = false;
|
|
1558
|
+
try {
|
|
1559
|
+
wrong = ENGINE.suggest(word).length > 0;
|
|
1560
|
+
} catch {
|
|
1561
|
+
wrong = false;
|
|
1562
|
+
}
|
|
1563
|
+
if (!wrong) continue;
|
|
1564
|
+
|
|
1565
|
+
let range;
|
|
1566
|
+
try {
|
|
1567
|
+
range = document.createRange();
|
|
1568
|
+
range.setStart(node, match.index);
|
|
1569
|
+
range.setEnd(node, match.index + word.length);
|
|
1570
|
+
} catch {
|
|
1571
|
+
continue;
|
|
1572
|
+
}
|
|
1573
|
+
for (const rect of range.getClientRects()) {
|
|
1574
|
+
if (rect.bottom < bounds.top - 40 || rect.top > bounds.bottom + 40) continue;
|
|
1575
|
+
if (rect.width < 4) continue;
|
|
1576
|
+
wave(context, rect.left, rect.right, rect.bottom - 1.5);
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1579
|
+
absolute += data.length;
|
|
1580
|
+
}
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
function schedule(delay = 110) {
|
|
1584
|
+
window.clearTimeout(timer);
|
|
1585
|
+
timer = window.setTimeout(paint, delay);
|
|
1586
|
+
}
|
|
1587
|
+
|
|
1588
|
+
/**
|
|
1589
|
+
* Safety net for any change no event announced.
|
|
1590
|
+
*
|
|
1591
|
+
* The observers above catch the common cases immediately; this catches the
|
|
1592
|
+
* rest — an editor remounted onto a new node, a programmatic clear that
|
|
1593
|
+
* raced focus, a layout shift — by comparing a cheap fingerprint and
|
|
1594
|
+
* repainting only when it actually changed. Without it, a single missed
|
|
1595
|
+
* event left a permanent imprint until the next unrelated repaint.
|
|
1596
|
+
*/
|
|
1597
|
+
function heal() {
|
|
1598
|
+
const editor = document.querySelector(EDITOR_SELECTOR);
|
|
1599
|
+
if (signature(editor) !== lastSignature) paint();
|
|
1600
|
+
}
|
|
1601
|
+
|
|
1602
|
+
return {
|
|
1603
|
+
schedule,
|
|
1604
|
+
paint,
|
|
1605
|
+
observe,
|
|
1606
|
+
attach() {
|
|
1607
|
+
ensure();
|
|
1608
|
+
schedule(0);
|
|
1609
|
+
if (typeof window.setInterval === "function") {
|
|
1610
|
+
healTimer = window.setInterval(heal, 400);
|
|
1611
|
+
}
|
|
1612
|
+
return () => {
|
|
1613
|
+
window.clearTimeout(timer);
|
|
1614
|
+
if (healTimer !== null && typeof window.clearInterval === "function") {
|
|
1615
|
+
window.clearInterval(healTimer);
|
|
1616
|
+
healTimer = null;
|
|
1617
|
+
}
|
|
1618
|
+
if (mutationObserver !== null) mutationObserver.disconnect();
|
|
1619
|
+
if (resizeObserver !== null) resizeObserver.disconnect();
|
|
1620
|
+
observedEditor = null;
|
|
1621
|
+
canvas.remove();
|
|
1622
|
+
};
|
|
1623
|
+
},
|
|
1624
|
+
};
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1627
|
+
/* ------------------------------------------------------------------ *
|
|
1628
|
+
* The controller
|
|
1629
|
+
* ------------------------------------------------------------------ */
|
|
1630
|
+
|
|
1631
|
+
/**
|
|
1632
|
+
* One controller per mounted composer seat.
|
|
1633
|
+
*
|
|
1634
|
+
* It owns the floating strip, the stored token, and the state the composer
|
|
1635
|
+
* chip renders from. Everything it listens to is on `document`, because the
|
|
1636
|
+
* editor is re-created by React whenever the composer remounts; binding to
|
|
1637
|
+
* the element itself would go deaf at exactly that moment.
|
|
1638
|
+
*/
|
|
1639
|
+
function createController(ctx, sessionId, committer) {
|
|
1640
|
+
const underliner = createUnderliner();
|
|
1641
|
+
const subscribers = new Set();
|
|
1642
|
+
let state = EMPTY;
|
|
1643
|
+
let token = null;
|
|
1644
|
+
let debounce = null;
|
|
1645
|
+
let visible = false;
|
|
1646
|
+
let pointerInside = false;
|
|
1647
|
+
let current = null;
|
|
1648
|
+
|
|
1649
|
+
const strip = document.createElement("div");
|
|
1650
|
+
strip.className = "sp-strip";
|
|
1651
|
+
strip.setAttribute("role", "listbox");
|
|
1652
|
+
strip.setAttribute("aria-label", "Spelling suggestions");
|
|
1653
|
+
// The composer's own blur/focus handlers must not steal the click that
|
|
1654
|
+
// accepts a suggestion, and hovering must not move the caret.
|
|
1655
|
+
strip.addEventListener("mousedown", (event) => event.preventDefault());
|
|
1656
|
+
strip.addEventListener("mouseenter", () => {
|
|
1657
|
+
pointerInside = true;
|
|
1658
|
+
});
|
|
1659
|
+
strip.addEventListener("mouseleave", () => {
|
|
1660
|
+
pointerInside = false;
|
|
1661
|
+
});
|
|
1662
|
+
|
|
1663
|
+
/**
|
|
1664
|
+
* The right-click menu, built once and reused.
|
|
1665
|
+
*
|
|
1666
|
+
* It replaces Chromium's native menu ONLY on a misspelled word that we
|
|
1667
|
+
* have suggestions for. Everywhere else — correct words, links, plain
|
|
1668
|
+
* text — the native menu still opens, so Cut/Copy/Paste are never taken
|
|
1669
|
+
* away from the user.
|
|
1670
|
+
*/
|
|
1671
|
+
const menu = document.createElement("div");
|
|
1672
|
+
menu.className = "sp-menu";
|
|
1673
|
+
menu.setAttribute("role", "menu");
|
|
1674
|
+
menu.addEventListener("mousedown", (event) => event.preventDefault());
|
|
1675
|
+
let menuToken = null;
|
|
1676
|
+
let menuOpen = false;
|
|
1677
|
+
|
|
1678
|
+
function publish(patch) {
|
|
1679
|
+
state = { ...state, ...patch };
|
|
1680
|
+
for (const listener of subscribers) listener(state);
|
|
1681
|
+
}
|
|
1682
|
+
|
|
1683
|
+
function subscribe(listener) {
|
|
1684
|
+
subscribers.add(listener);
|
|
1685
|
+
listener(state);
|
|
1686
|
+
return () => subscribers.delete(listener);
|
|
1687
|
+
}
|
|
1688
|
+
|
|
1689
|
+
/* --- suggesting ------------------------------------------------- */
|
|
1690
|
+
|
|
1691
|
+
function check(at) {
|
|
1692
|
+
token = at;
|
|
1693
|
+
let list;
|
|
1694
|
+
try {
|
|
1695
|
+
list = ENGINE.suggest(at.text);
|
|
1696
|
+
} catch (error) {
|
|
1697
|
+
publish({ word: at.text, suggestions: [], active: 0, status: "ERR " + String(error?.message ?? error) });
|
|
1698
|
+
return hide();
|
|
1699
|
+
}
|
|
1700
|
+
publish({ word: at.text, suggestions: list, active: 0, status: "ok " + at.text });
|
|
1701
|
+
if (list.length === 0) hide();
|
|
1702
|
+
else show();
|
|
1703
|
+
}
|
|
1704
|
+
|
|
1705
|
+
function schedule() {
|
|
1706
|
+
const editor = current ?? findEditor();
|
|
1707
|
+
if (editor === null) {
|
|
1708
|
+
publish({ status: "no editor" });
|
|
1709
|
+
return hide();
|
|
1710
|
+
}
|
|
1711
|
+
// The underlines follow every keystroke; the strip follows only the
|
|
1712
|
+
// word under the caret.
|
|
1713
|
+
silenceNativeSpellcheck(editor);
|
|
1714
|
+
underliner.observe(editor);
|
|
1715
|
+
underliner.schedule();
|
|
1716
|
+
const at = tokenAtCaret(editor);
|
|
1717
|
+
if (at === null) {
|
|
1718
|
+
token = null;
|
|
1719
|
+
publish({ word: "", suggestions: [], active: 0, status: "no caret" });
|
|
1720
|
+
return hide();
|
|
1721
|
+
}
|
|
1722
|
+
if (insideCodeFence(editor, at.range)) {
|
|
1723
|
+
token = null;
|
|
1724
|
+
publish({ word: "", suggestions: [], active: 0, status: "in fence" });
|
|
1725
|
+
return hide();
|
|
1726
|
+
}
|
|
1727
|
+
// A right-click menu owns the surface while it is open.
|
|
1728
|
+
if (menuOpen) return;
|
|
1729
|
+
window.clearTimeout(debounce);
|
|
1730
|
+
// Short enough to feel immediate, long enough that a burst of typing
|
|
1731
|
+
// is one check rather than one per character.
|
|
1732
|
+
debounce = window.setTimeout(() => check(at), 90);
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
/* --- drawing ---------------------------------------------------- */
|
|
1736
|
+
|
|
1737
|
+
function position() {
|
|
1738
|
+
if (token === null) return;
|
|
1739
|
+
let rect;
|
|
1740
|
+
try {
|
|
1741
|
+
rect = token.range.getBoundingClientRect();
|
|
1742
|
+
} catch {
|
|
1743
|
+
return;
|
|
1744
|
+
}
|
|
1745
|
+
if (rect === undefined || (rect.top === 0 && rect.left === 0 && rect.width === 0 && rect.height === 0)) {
|
|
1746
|
+
return;
|
|
1747
|
+
}
|
|
1748
|
+
strip.style.left = "0px";
|
|
1749
|
+
strip.style.bottom = "0px";
|
|
1750
|
+
const width = strip.offsetWidth || 160;
|
|
1751
|
+
const left = Math.max(8, Math.min(rect.left, window.innerWidth - width - 8));
|
|
1752
|
+
strip.style.left = left + "px";
|
|
1753
|
+
// Measured from the viewport bottom, and the strip sits ABOVE the caret
|
|
1754
|
+
// line — the Chrome position, never over the word being typed.
|
|
1755
|
+
strip.style.bottom = Math.max(8, window.innerHeight - rect.top + 7) + "px";
|
|
1756
|
+
}
|
|
1757
|
+
|
|
1758
|
+
function paint() {
|
|
1759
|
+
while (strip.firstChild !== null) strip.removeChild(strip.firstChild);
|
|
1760
|
+
|
|
1761
|
+
const echo = document.createElement("span");
|
|
1762
|
+
echo.className = "sp-item sp-echo";
|
|
1763
|
+
const wrong = document.createElement("span");
|
|
1764
|
+
wrong.className = "sp-wrong";
|
|
1765
|
+
wrong.textContent = state.word;
|
|
1766
|
+
echo.appendChild(wrong);
|
|
1767
|
+
strip.appendChild(echo);
|
|
1768
|
+
|
|
1769
|
+
state.suggestions.forEach((suggestion, index) => {
|
|
1770
|
+
const item = document.createElement("button");
|
|
1771
|
+
item.type = "button";
|
|
1772
|
+
item.className = "sp-item" + (index === state.active ? " sp-active" : "");
|
|
1773
|
+
item.setAttribute("role", "option");
|
|
1774
|
+
item.setAttribute("aria-selected", index === state.active ? "true" : "false");
|
|
1775
|
+
|
|
1776
|
+
const arrow = document.createElement("span");
|
|
1777
|
+
arrow.className = "sp-arrow";
|
|
1778
|
+
arrow.textContent = "\u2192";
|
|
1779
|
+
const word = document.createElement("span");
|
|
1780
|
+
word.className = "sp-word";
|
|
1781
|
+
word.textContent = suggestion.word;
|
|
1782
|
+
item.appendChild(arrow);
|
|
1783
|
+
item.appendChild(word);
|
|
1784
|
+
|
|
1785
|
+
if (index === 0) {
|
|
1786
|
+
const key = document.createElement("span");
|
|
1787
|
+
key.className = "sp-key";
|
|
1788
|
+
key.textContent = "Tab";
|
|
1789
|
+
item.appendChild(key);
|
|
1790
|
+
}
|
|
1791
|
+
item.addEventListener("mousedown", (event) => event.preventDefault());
|
|
1792
|
+
item.addEventListener("click", (event) => {
|
|
1793
|
+
event.preventDefault();
|
|
1794
|
+
event.stopPropagation();
|
|
1795
|
+
accept(index);
|
|
1796
|
+
});
|
|
1797
|
+
strip.appendChild(item);
|
|
1798
|
+
});
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
function show() {
|
|
1802
|
+
// The menu and the strip are two answers to the same question. Showing
|
|
1803
|
+
// both put a horizontal pill underneath a vertical menu; one at a time.
|
|
1804
|
+
if (menuOpen) return;
|
|
1805
|
+
if (state.suggestions.length === 0) return hide();
|
|
1806
|
+
paint();
|
|
1807
|
+
if (strip.parentNode === null) document.body.appendChild(strip);
|
|
1808
|
+
position();
|
|
1809
|
+
strip.classList.add("sp-open");
|
|
1810
|
+
visible = true;
|
|
1811
|
+
}
|
|
1812
|
+
|
|
1813
|
+
function hide() {
|
|
1814
|
+
// Unconditional: an early return here left an orphaned strip on screen
|
|
1815
|
+
// whenever `visible` and the DOM had drifted apart (a hot-reload
|
|
1816
|
+
// replacing the module while its strip stayed in <body>).
|
|
1817
|
+
visible = false;
|
|
1818
|
+
strip.classList.remove("sp-open");
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1821
|
+
/* --- accepting --------------------------------------------------- */
|
|
1822
|
+
|
|
1823
|
+
function accept(index) {
|
|
1824
|
+
const chosen = state.suggestions[index];
|
|
1825
|
+
const target = token;
|
|
1826
|
+
if (chosen === undefined || target === null) return false;
|
|
1827
|
+
hide();
|
|
1828
|
+
publish({ word: "", suggestions: [], active: 0 });
|
|
1829
|
+
token = null;
|
|
1830
|
+
// The composer's draft API first — it cannot desync from the editor.
|
|
1831
|
+
// The DOM command is only the fallback for a profile without it.
|
|
1832
|
+
let ok = false;
|
|
1833
|
+
if (typeof target.text === "string" && target.text !== "") {
|
|
1834
|
+
ok = committer.commit(target.text, chosen.word);
|
|
1835
|
+
}
|
|
1836
|
+
if (!ok) ok = replaceToken(target, chosen.word);
|
|
1837
|
+
// The caret lands after the replacement, so a second Tab corrects the
|
|
1838
|
+
// NEXT word rather than repeating this one.
|
|
1839
|
+
window.setTimeout(() => {
|
|
1840
|
+
const editor = findEditor();
|
|
1841
|
+
if (editor !== null) editor.focus();
|
|
1842
|
+
schedule();
|
|
1843
|
+
}, 0);
|
|
1844
|
+
return ok;
|
|
1845
|
+
}
|
|
1846
|
+
|
|
1847
|
+
|
|
1848
|
+
function cycle(delta) {
|
|
1849
|
+
if (state.suggestions.length < 2) return;
|
|
1850
|
+
const next = (state.active + delta + state.suggestions.length) % state.suggestions.length;
|
|
1851
|
+
publish({ active: next });
|
|
1852
|
+
paint();
|
|
1853
|
+
position();
|
|
1854
|
+
}
|
|
1855
|
+
|
|
1856
|
+
/* --- events ------------------------------------------------------ */
|
|
1857
|
+
|
|
1858
|
+
function onKeyDown(event) {
|
|
1859
|
+
if (menuOpen && event.key === "Escape") {
|
|
1860
|
+
event.preventDefault();
|
|
1861
|
+
event.stopPropagation();
|
|
1862
|
+
closeMenu();
|
|
1863
|
+
return;
|
|
1864
|
+
}
|
|
1865
|
+
if (!visible || state.suggestions.length === 0) return;
|
|
1866
|
+
if (event.key === "Tab" && !event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {
|
|
1867
|
+
event.preventDefault();
|
|
1868
|
+
event.stopPropagation();
|
|
1869
|
+
accept(state.active);
|
|
1870
|
+
return;
|
|
1871
|
+
}
|
|
1872
|
+
if (event.key === "Escape") {
|
|
1873
|
+
event.preventDefault();
|
|
1874
|
+
event.stopPropagation();
|
|
1875
|
+
hide();
|
|
1876
|
+
return;
|
|
1877
|
+
}
|
|
1878
|
+
if (event.key === "ArrowDown") {
|
|
1879
|
+
event.preventDefault();
|
|
1880
|
+
event.stopPropagation();
|
|
1881
|
+
cycle(1);
|
|
1882
|
+
return;
|
|
1883
|
+
}
|
|
1884
|
+
if (event.key === "ArrowUp") {
|
|
1885
|
+
event.preventDefault();
|
|
1886
|
+
event.stopPropagation();
|
|
1887
|
+
cycle(-1);
|
|
1888
|
+
return;
|
|
1889
|
+
}
|
|
1890
|
+
if (/^[1-9]$/.test(event.key)) {
|
|
1891
|
+
const index = Number(event.key) - 1;
|
|
1892
|
+
if (index < state.suggestions.length) {
|
|
1893
|
+
event.preventDefault();
|
|
1894
|
+
event.stopPropagation();
|
|
1895
|
+
accept(index);
|
|
1896
|
+
}
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
1899
|
+
|
|
1900
|
+
function onInput(event) {
|
|
1901
|
+
const editor = editorFromEvent(event);
|
|
1902
|
+
if (editor === null) return;
|
|
1903
|
+
current = editor;
|
|
1904
|
+
if (!editor.contains(event.target) && event.target !== editor) return;
|
|
1905
|
+
schedule();
|
|
1906
|
+
}
|
|
1907
|
+
|
|
1908
|
+
/**
|
|
1909
|
+
* The caret moved — which, in a Lexical editor, is what TYPING does.
|
|
1910
|
+
*
|
|
1911
|
+
* This is the load-bearing signal, not `input`: Lexical calls
|
|
1912
|
+
* `preventDefault()` on `beforeinput` and applies the edit itself, so the
|
|
1913
|
+
* browser never emits an `input` event for ordinary typing. Listening for
|
|
1914
|
+
* `input` alone made the checker silently deaf in exactly the editor it
|
|
1915
|
+
* targets.
|
|
1916
|
+
*/
|
|
1917
|
+
function onSelectionChange() {
|
|
1918
|
+
// A right-click moves the caret, and the menu owns that interaction.
|
|
1919
|
+
if (menuOpen) return;
|
|
1920
|
+
const editor = current ?? findEditor();
|
|
1921
|
+
if (editor === null) return;
|
|
1922
|
+
// Ignore selection churn elsewhere in the page.
|
|
1923
|
+
const selection = window.getSelection();
|
|
1924
|
+
if (selection === null || selection.rangeCount === 0) return;
|
|
1925
|
+
const node = selection.getRangeAt(0).startContainer;
|
|
1926
|
+
if (!editor.contains(node)) {
|
|
1927
|
+
if (visible && !pointerInside) hide();
|
|
1928
|
+
return;
|
|
1929
|
+
}
|
|
1930
|
+
schedule();
|
|
1931
|
+
}
|
|
1932
|
+
|
|
1933
|
+
/** Fires before Lexical applies an edit; the caret is still the old one. */
|
|
1934
|
+
function onBeforeInput(event) {
|
|
1935
|
+
const editor = editorFromEvent(event);
|
|
1936
|
+
if (editor === null) return;
|
|
1937
|
+
current = editor;
|
|
1938
|
+
// Debounced, so by the time this runs the editor's DOM holds the new
|
|
1939
|
+
// text and the caret sits after it.
|
|
1940
|
+
schedule();
|
|
1941
|
+
}
|
|
1942
|
+
|
|
1943
|
+
/**
|
|
1944
|
+
* A click outside the strip, the chip and the composer dismisses the
|
|
1945
|
+
* offer. A click INSIDE the composer is a caret move, handled above.
|
|
1946
|
+
*/
|
|
1947
|
+
/** Typing also announces itself here, for editors that re-render late. */
|
|
1948
|
+
function onKeyUp(event) {
|
|
1949
|
+
if (event.key === "Tab" || event.key === "Escape") return;
|
|
1950
|
+
const editor = editorFromEvent(event);
|
|
1951
|
+
if (editor === null) return;
|
|
1952
|
+
current = editor;
|
|
1953
|
+
schedule();
|
|
1954
|
+
}
|
|
1955
|
+
|
|
1956
|
+
/* --- the right-click menu --------------------------------------- */
|
|
1957
|
+
|
|
1958
|
+
function closeMenu() {
|
|
1959
|
+
if (!menuOpen) return;
|
|
1960
|
+
menuOpen = false;
|
|
1961
|
+
menu.classList.remove("sp-open");
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
function openMenu(editor, tokenAt, suggestions, x, y) {
|
|
1965
|
+
menuToken = tokenAt;
|
|
1966
|
+
while (menu.firstChild !== null) menu.removeChild(menu.firstChild);
|
|
1967
|
+
|
|
1968
|
+
const head = document.createElement("div");
|
|
1969
|
+
head.className = "sp-menu-head";
|
|
1970
|
+
head.textContent = tokenAt.text + " \u2014 Tab applies";
|
|
1971
|
+
menu.appendChild(head);
|
|
1972
|
+
|
|
1973
|
+
suggestions.forEach((suggestion) => {
|
|
1974
|
+
const item = document.createElement("button");
|
|
1975
|
+
item.type = "button";
|
|
1976
|
+
item.className = "sp-menu-item";
|
|
1977
|
+
item.setAttribute("role", "menuitem");
|
|
1978
|
+
item.textContent = suggestion.word;
|
|
1979
|
+
item.addEventListener("mousedown", (event) => event.preventDefault());
|
|
1980
|
+
item.addEventListener("click", (event) => {
|
|
1981
|
+
event.preventDefault();
|
|
1982
|
+
event.stopPropagation();
|
|
1983
|
+
const expected = menuToken === null ? null : menuToken.text;
|
|
1984
|
+
closeMenu();
|
|
1985
|
+
if (expected === null) return;
|
|
1986
|
+
// Through the composer's own draft API. This is the only path that
|
|
1987
|
+
// replaces the clicked word instead of inserting at the start of
|
|
1988
|
+
// the draft.
|
|
1989
|
+
committer.commit(expected, suggestion.word);
|
|
1990
|
+
hide();
|
|
1991
|
+
});
|
|
1992
|
+
menu.appendChild(item);
|
|
1993
|
+
});
|
|
1994
|
+
|
|
1995
|
+
const separator = document.createElement("div");
|
|
1996
|
+
separator.className = "sp-menu-sep";
|
|
1997
|
+
menu.appendChild(separator);
|
|
1998
|
+
|
|
1999
|
+
const learn = document.createElement("button");
|
|
2000
|
+
learn.type = "button";
|
|
2001
|
+
learn.className = "sp-menu-item sp-menu-learn";
|
|
2002
|
+
learn.textContent = "Add \u201c" + tokenAt.text + "\u201d to dictionary";
|
|
2003
|
+
learn.addEventListener("mousedown", (event) => event.preventDefault());
|
|
2004
|
+
learn.addEventListener("click", (event) => {
|
|
2005
|
+
event.preventDefault();
|
|
2006
|
+
event.stopPropagation();
|
|
2007
|
+
const word = menuToken?.text;
|
|
2008
|
+
closeMenu();
|
|
2009
|
+
if (typeof word === "string" && word !== "") learnWord(ctx, word);
|
|
2010
|
+
});
|
|
2011
|
+
menu.appendChild(learn);
|
|
2012
|
+
|
|
2013
|
+
if (menu.parentNode === null) document.body.appendChild(menu);
|
|
2014
|
+
// Measured before showing, so the clamp uses the real size.
|
|
2015
|
+
menu.style.left = "0px";
|
|
2016
|
+
menu.style.top = "0px";
|
|
2017
|
+
const width = menu.offsetWidth || 190;
|
|
2018
|
+
const height = menu.offsetHeight || 160;
|
|
2019
|
+
menu.style.left = Math.max(8, Math.min(x, window.innerWidth - width - 8)) + "px";
|
|
2020
|
+
menu.style.top = Math.max(8, Math.min(y, window.innerHeight - height - 8)) + "px";
|
|
2021
|
+
menu.classList.add("sp-open");
|
|
2022
|
+
menuOpen = true;
|
|
2023
|
+
}
|
|
2024
|
+
|
|
2025
|
+
function onContextMenu(event) {
|
|
2026
|
+
try {
|
|
2027
|
+
const editor = editorFromEvent(event);
|
|
2028
|
+
if (editor === null) {
|
|
2029
|
+
publish({ status: "ctx:no-editor" });
|
|
2030
|
+
return;
|
|
2031
|
+
}
|
|
2032
|
+
// The event's own editor, not a document query: caching it here is
|
|
2033
|
+
// what makes the menu's offsets resolvable when an item is clicked.
|
|
2034
|
+
current = editor;
|
|
2035
|
+
const at = wordAtPoint(editor, event.clientX, event.clientY);
|
|
2036
|
+
if (at === null) {
|
|
2037
|
+
publish({ status: "ctx:no-word" });
|
|
2038
|
+
return; // not a word: let the native menu open
|
|
2039
|
+
}
|
|
2040
|
+
let list;
|
|
2041
|
+
try {
|
|
2042
|
+
list = ENGINE.suggest(at.text);
|
|
2043
|
+
} catch (error) {
|
|
2044
|
+
publish({ status: "ctx:err " + String(error?.message ?? error) });
|
|
2045
|
+
return;
|
|
2046
|
+
}
|
|
2047
|
+
if (list.length === 0) {
|
|
2048
|
+
publish({ status: "ctx:ok " + at.text });
|
|
2049
|
+
return; // spelled correctly: native menu
|
|
2050
|
+
}
|
|
2051
|
+
event.preventDefault();
|
|
2052
|
+
event.stopPropagation();
|
|
2053
|
+
hide();
|
|
2054
|
+
openMenu(editor, at, list, event.clientX, event.clientY);
|
|
2055
|
+
publish({ status: "ctx:menu " + at.text + "/" + list.length });
|
|
2056
|
+
} catch (error) {
|
|
2057
|
+
publish({ status: "ctx:throw " + String(error?.message ?? error) });
|
|
2058
|
+
}
|
|
2059
|
+
}
|
|
2060
|
+
|
|
2061
|
+
function onPointerDown(event) {
|
|
2062
|
+
if (menuOpen) {
|
|
2063
|
+
const target = event.target;
|
|
2064
|
+
if (!(target instanceof Node && menu.contains(target))) closeMenu();
|
|
2065
|
+
}
|
|
2066
|
+
if (!visible) return;
|
|
2067
|
+
const target = event.target;
|
|
2068
|
+
if (target instanceof Node && strip.contains(target)) return;
|
|
2069
|
+
if (target instanceof Element && target.closest('[contenteditable="true"]') !== null) return;
|
|
2070
|
+
hide();
|
|
2071
|
+
}
|
|
2072
|
+
|
|
2073
|
+
function onViewportChange() {
|
|
2074
|
+
// The underline canvas is fixed and full-window with marks at absolute
|
|
2075
|
+
// viewport coordinates, so a scroll or resize detaches every mark from
|
|
2076
|
+
// its word until it is repainted. Repaint unconditionally, not only when
|
|
2077
|
+
// the strip happens to be visible.
|
|
2078
|
+
underliner.schedule();
|
|
2079
|
+
if (visible) position();
|
|
2080
|
+
}
|
|
2081
|
+
|
|
2082
|
+
function attach() {
|
|
2083
|
+
// Only one controller may be live at a time.
|
|
2084
|
+
//
|
|
2085
|
+
// A hot-reload evaluates this module again, which mounts a second seat
|
|
2086
|
+
// with its own strip and its own listeners. Both then listen, both
|
|
2087
|
+
// suggest, and the one that is NOT underneath the click keeps drawing
|
|
2088
|
+
// its strip — two identical pills on screen, one of which ignores every
|
|
2089
|
+
// click. Claiming a window-level singleton disposes the previous
|
|
2090
|
+
// instance, which is also the correct behaviour if the seat remounts.
|
|
2091
|
+
const previous = window.__dshSpellCheck;
|
|
2092
|
+
if (previous !== undefined && previous !== null && previous.controller !== api) {
|
|
2093
|
+
try {
|
|
2094
|
+
previous.dispose();
|
|
2095
|
+
} catch {
|
|
2096
|
+
// A previous instance that fails to tear down must not block this one.
|
|
2097
|
+
}
|
|
2098
|
+
}
|
|
2099
|
+
|
|
2100
|
+
// Sweep strips left behind by an earlier instance that never ran its
|
|
2101
|
+
// teardown: they live in <body>, outside any component that could
|
|
2102
|
+
// remove them.
|
|
2103
|
+
for (const orphan of document.querySelectorAll(".sp-strip")) orphan.remove();
|
|
2104
|
+
for (const orphan of document.querySelectorAll(".sp-menu")) orphan.remove();
|
|
2105
|
+
for (const orphan of document.querySelectorAll(".sp-underline")) orphan.remove();
|
|
2106
|
+
// Left behind by a build that is no longer running (the diagnostic
|
|
2107
|
+
// panel); nothing will ever remove it except a page reload, so clean it
|
|
2108
|
+
// up here rather than leave text stuck across the top of the window.
|
|
2109
|
+
silenceNativeSpellcheck(findEditor());
|
|
2110
|
+
const releaseUnderlines = underliner.attach();
|
|
2111
|
+
const stale = document.getElementById("sp-diag");
|
|
2112
|
+
if (stale !== null) stale.remove();
|
|
2113
|
+
document.addEventListener("input", onInput, true);
|
|
2114
|
+
document.addEventListener("contextmenu", onContextMenu, true);
|
|
2115
|
+
// The signals that actually fire in a Lexical composer. `input` is kept
|
|
2116
|
+
// for other editors, but selectionchange is the one that works here.
|
|
2117
|
+
document.addEventListener("beforeinput", onBeforeInput, true);
|
|
2118
|
+
document.addEventListener("keyup", onKeyUp, true);
|
|
2119
|
+
document.addEventListener("keydown", onKeyDown, true);
|
|
2120
|
+
document.addEventListener("selectionchange", onSelectionChange);
|
|
2121
|
+
document.addEventListener("mousedown", onPointerDown, true);
|
|
2122
|
+
window.addEventListener("resize", onViewportChange);
|
|
2123
|
+
window.addEventListener("scroll", onViewportChange, true);
|
|
2124
|
+
function detach() {
|
|
2125
|
+
document.removeEventListener("input", onInput, true);
|
|
2126
|
+
document.removeEventListener("contextmenu", onContextMenu, true);
|
|
2127
|
+
closeMenu();
|
|
2128
|
+
if (menu.parentNode !== null) menu.remove();
|
|
2129
|
+
document.removeEventListener("beforeinput", onBeforeInput, true);
|
|
2130
|
+
document.removeEventListener("keyup", onKeyUp, true);
|
|
2131
|
+
document.removeEventListener("keydown", onKeyDown, true);
|
|
2132
|
+
document.removeEventListener("selectionchange", onSelectionChange);
|
|
2133
|
+
document.removeEventListener("mousedown", onPointerDown, true);
|
|
2134
|
+
window.removeEventListener("resize", onViewportChange);
|
|
2135
|
+
window.removeEventListener("scroll", onViewportChange, true);
|
|
2136
|
+
window.clearTimeout(debounce);
|
|
2137
|
+
releaseUnderlines();
|
|
2138
|
+
if (strip.parentNode !== null) strip.remove();
|
|
2139
|
+
const claimed = window.__dshSpellCheck;
|
|
2140
|
+
if (claimed?.controller === api) window.__dshSpellCheck = undefined;
|
|
2141
|
+
}
|
|
2142
|
+
|
|
2143
|
+
window.__dshSpellCheck = { dispose: detach, controller: api };
|
|
2144
|
+
return detach;
|
|
2145
|
+
}
|
|
2146
|
+
|
|
2147
|
+
const api = { attach, subscribe, check };
|
|
2148
|
+
return api;
|
|
2149
|
+
}
|
|
2150
|
+
|
|
2151
|
+
/* ------------------------------------------------------------------ *
|
|
2152
|
+
* The composer seat
|
|
2153
|
+
* ------------------------------------------------------------------ */
|
|
2154
|
+
|
|
2155
|
+
/**
|
|
2156
|
+
* The chip, and the controller that drives it.
|
|
2157
|
+
*
|
|
2158
|
+
* One registration on purpose: this slot is proven to be populated, and a
|
|
2159
|
+
* second seat in another slot would silently never mount if that slot were
|
|
2160
|
+
* absent — leaving a chip with nothing behind it.
|
|
2161
|
+
*/
|
|
2162
|
+
function makeSeat(ctx) {
|
|
2163
|
+
return function SpellCheckSeat(props) {
|
|
2164
|
+
const controllerRef = React.useRef(null);
|
|
2165
|
+
const [state, setState] = React.useState(EMPTY);
|
|
2166
|
+
|
|
2167
|
+
React.useEffect(() => {
|
|
2168
|
+
const committer = createCommitter(ctx, props?.sessionId);
|
|
2169
|
+
const controller = createController(ctx, props?.sessionId, committer);
|
|
2170
|
+
controllerRef.current = controller;
|
|
2171
|
+
const unsubscribe = controller.subscribe(setState);
|
|
2172
|
+
const detach = controller.attach();
|
|
2173
|
+
return () => {
|
|
2174
|
+
unsubscribe();
|
|
2175
|
+
detach();
|
|
2176
|
+
controllerRef.current = null;
|
|
2177
|
+
};
|
|
2178
|
+
}, []);
|
|
2179
|
+
|
|
2180
|
+
// Renders NOTHING.
|
|
2181
|
+
//
|
|
2182
|
+
// The seat exists only to mount the controller that owns the strip and
|
|
2183
|
+
// the right-click menu. An earlier version put a "spell" chip in the
|
|
2184
|
+
// composer row as visible proof it was mounted; that is clutter in a
|
|
2185
|
+
// bar the user reads constantly, so the feedback now lives only where
|
|
2186
|
+
// it is needed — above the caret, on the word itself.
|
|
2187
|
+
return null;
|
|
2188
|
+
};
|
|
2189
|
+
}
|
|
2190
|
+
|
|
2191
|
+
/* ------------------------------------------------------------------ *
|
|
2192
|
+
* Optional host link — persistence for learned words only
|
|
2193
|
+
* ------------------------------------------------------------------ */
|
|
2194
|
+
|
|
2195
|
+
const identity = (value) => value;
|
|
2196
|
+
|
|
2197
|
+
/*
|
|
2198
|
+
* Pass-through codec carrying both codec shapes: dsh 0.2's typert validator
|
|
2199
|
+
* requires a strict codec to expose a `create()` factory, while older hosts
|
|
2200
|
+
* read `schema` directly.
|
|
2201
|
+
*/
|
|
2202
|
+
const IDENTITY_SCHEMA = { parse: identity };
|
|
2203
|
+
const CODEC = {
|
|
2204
|
+
mode: "strict",
|
|
2205
|
+
typeSymbol: "dsh-spell-check/json",
|
|
2206
|
+
schema: IDENTITY_SCHEMA,
|
|
2207
|
+
create: () => IDENTITY_SCHEMA,
|
|
2208
|
+
};
|
|
2209
|
+
|
|
2210
|
+
const descriptor = (method, names) => ({
|
|
2211
|
+
id: "dsh-spell-check#spellCheck/" + method,
|
|
2212
|
+
service: "spellCheck",
|
|
2213
|
+
namespace: "spellCheck",
|
|
2214
|
+
method,
|
|
2215
|
+
invocation: { kind: "direct" },
|
|
2216
|
+
parameters: names.map((name) => ({ name, wire: name, source: "json", codec: CODEC })),
|
|
2217
|
+
result: CODEC,
|
|
2218
|
+
sourceLocation: { file: "dsh-spell-check/client.js", line: 1, column: 1 },
|
|
2219
|
+
});
|
|
2220
|
+
|
|
2221
|
+
const CONTRIBUTION = {
|
|
2222
|
+
package: "dsh-spell-check",
|
|
2223
|
+
descriptors: [
|
|
2224
|
+
descriptor("suggest", ["word"]),
|
|
2225
|
+
descriptor("check", ["word"]),
|
|
2226
|
+
descriptor("learn", ["word"]),
|
|
2227
|
+
],
|
|
2228
|
+
};
|
|
2229
|
+
|
|
2230
|
+
/**
|
|
2231
|
+
* Mount the host link, and survive it being absent.
|
|
2232
|
+
*
|
|
2233
|
+
* Nothing about correcting depends on this: a profile whose host half is
|
|
2234
|
+
* stale, absent or broken still gets the strip, the chip and Tab.
|
|
2235
|
+
*/
|
|
2236
|
+
function mountRemote(ctx) {
|
|
2237
|
+
const accept = (dispose) => {
|
|
2238
|
+
if (typeof dispose === "function" && typeof ctx.effect === "function") {
|
|
2239
|
+
ctx.effect(() => dispose, "dsh-spell-check: remote contribution");
|
|
2240
|
+
}
|
|
2241
|
+
};
|
|
2242
|
+
const attempt = (scope) => {
|
|
2243
|
+
try {
|
|
2244
|
+
const remote = scope?.remote ?? ctx.remote;
|
|
2245
|
+
if (remote === undefined || remote === null || typeof remote.$mount !== "function") return;
|
|
2246
|
+
Promise.resolve(remote.$mount(CONTRIBUTION)).then(accept, (error) => {
|
|
2247
|
+
console.warn("[dsh-spell-check] host link unavailable:", error);
|
|
2248
|
+
});
|
|
2249
|
+
} catch (error) {
|
|
2250
|
+
console.warn("[dsh-spell-check] host link unavailable:", error);
|
|
2251
|
+
}
|
|
2252
|
+
};
|
|
2253
|
+
try {
|
|
2254
|
+
if (typeof ctx.inject === "function") ctx.inject(["remote"], attempt);
|
|
2255
|
+
else attempt(ctx);
|
|
2256
|
+
} catch (error) {
|
|
2257
|
+
// An optional convenience must never take the checker down with it.
|
|
2258
|
+
console.warn("[dsh-spell-check] host link unavailable:", error);
|
|
2259
|
+
}
|
|
2260
|
+
}
|
|
2261
|
+
|
|
2262
|
+
/**
|
|
2263
|
+
* Teach the dictionary a word.
|
|
2264
|
+
*
|
|
2265
|
+
* Applied to the local engine first and always — that is the copy actually
|
|
2266
|
+
* answering suggestions. The host is asked afterwards, only so the word
|
|
2267
|
+
* survives a restart; if the host half is stale or absent, the word still
|
|
2268
|
+
* works for this session rather than the action silently doing nothing.
|
|
2269
|
+
*/
|
|
2270
|
+
function learnWord(ctx, word) {
|
|
2271
|
+
try {
|
|
2272
|
+
ENGINE.addWord(word);
|
|
2273
|
+
} catch {
|
|
2274
|
+
// A failed insert is not worth breaking the menu over.
|
|
2275
|
+
}
|
|
2276
|
+
try {
|
|
2277
|
+
const service = ctx.get?.("remote.spellCheck");
|
|
2278
|
+
if (service !== undefined && service !== null && typeof service.learn === "function") {
|
|
2279
|
+
Promise.resolve(service.learn(word)).catch(() => {});
|
|
2280
|
+
}
|
|
2281
|
+
} catch {
|
|
2282
|
+
// Host link is best-effort by design.
|
|
2283
|
+
}
|
|
2284
|
+
}
|
|
2285
|
+
|
|
2286
|
+
/* ------------------------------------------------------------------ *
|
|
2287
|
+
* Wiring
|
|
2288
|
+
* ------------------------------------------------------------------ */
|
|
2289
|
+
|
|
2290
|
+
// `slots` renders the chip; `conversation` and `sessions` are what the
|
|
2291
|
+
// commit path needs. Reading `ctx.conversation` WITHOUT declaring it here
|
|
2292
|
+
// throws "cannot get property conversation without inject" — which is why
|
|
2293
|
+
// the right-click menu silently did nothing while Tab (falling back to a
|
|
2294
|
+
// DOM command) still worked.
|
|
2295
|
+
const inject = ["slots", "conversation", "sessions"];
|
|
2296
|
+
|
|
2297
|
+
function apply(ctx) {
|
|
2298
|
+
injectStyles();
|
|
2299
|
+
|
|
2300
|
+
ctx.slots.inject("conversation.input.right", () =>
|
|
2301
|
+
ctx.slots.register(
|
|
2302
|
+
{
|
|
2303
|
+
name: "conversation.input.right",
|
|
2304
|
+
id: "spell-check",
|
|
2305
|
+
order: 25,
|
|
2306
|
+
label: "spell",
|
|
2307
|
+
// The session id is the handle the composer API needs to reach the
|
|
2308
|
+
// right draft; without it the menu can only use DOM commands.
|
|
2309
|
+
inject: (sessionId) => ({ sessionId }),
|
|
2310
|
+
},
|
|
2311
|
+
makeSeat(ctx),
|
|
2312
|
+
),
|
|
2313
|
+
);
|
|
2314
|
+
|
|
2315
|
+
mountRemote(ctx);
|
|
2316
|
+
}
|
|
2317
|
+
|
|
2318
|
+
exports.apply = apply;
|
|
2319
|
+
exports.inject = inject;
|
|
2320
|
+
// Exported for the test harness only; never read by dsh.
|
|
2321
|
+
exports.engine = ENGINE;
|
|
2322
|
+
exports.createController = createController;
|
|
2323
|
+
exports.createUnderliner = createUnderliner;
|
|
2324
|
+
|
|
2325
|
+
return module.exports;
|
|
2326
|
+
},
|
|
2327
|
+
});
|