From 9cb05f5f444d7135806ea3c3506879f7fdf4033b Mon Sep 17 00:00:00 2001 From: Brian Fertig Date: Fri, 5 Jun 2026 23:24:11 -0600 Subject: [PATCH] Crossword Changes and added Tectonic --- public/assets/images/game-icons.png | Bin 157488 -> 161347 bytes public/assets/images/game-icons.psd | Bin 423082 -> 433125 bytes .../games/minicrossword/MiniCrosswordGame.js | 64 +- public/src/games/tectonic/TectonicGame.js | 645 + public/src/games/tectonic/TectonicLogic.js | 28 + public/src/main.js | 2 + public/src/scenes/GameRoomScene.js | 2 +- server/data/crosswords/_generated.json | 2722 +++ server/data/crosswords/minicrossword.json | 347 +- server/data/wordlists/common.txt | 16164 ++++++++++++++++ server/games/registry.js | 1 + server/scripts/buildCommonWords.js | 54 + server/scripts/genMiniCrossword.js | 339 + server/words/miniCrosswordEngine.js | 48 +- server/words/tectonicEngine.js | 317 + server/words/wordRoutes.js | 15 +- 16 files changed, 20492 insertions(+), 256 deletions(-) create mode 100644 public/src/games/tectonic/TectonicGame.js create mode 100644 public/src/games/tectonic/TectonicLogic.js create mode 100644 server/data/crosswords/_generated.json create mode 100644 server/data/wordlists/common.txt create mode 100644 server/scripts/buildCommonWords.js create mode 100644 server/scripts/genMiniCrossword.js create mode 100644 server/words/tectonicEngine.js diff --git a/public/assets/images/game-icons.png b/public/assets/images/game-icons.png index 6f37990fa02a4f36cbb0f951b6fbd87be443b58b..1bce16747520237e288fd802aea1f117094ac33d 100644 GIT binary patch delta 73312 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 JEc#g1{{{P-0}KEF delta 8951 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 diff --git a/public/src/games/minicrossword/MiniCrosswordGame.js b/public/src/games/minicrossword/MiniCrosswordGame.js index 4c2c6b4..fc34e6d 100644 --- a/public/src/games/minicrossword/MiniCrosswordGame.js +++ b/public/src/games/minicrossword/MiniCrosswordGame.js @@ -24,9 +24,13 @@ const TITLE_GOLD = '#d4a017'; const DEPTH = { bg: 0, panel: 2, cell: 8, cellTxt: 10, ui: 20, overlay: 40, overlayUI: 42 }; // ── Grid geometry ──────────────────────────────────────────────────────────────── -const CELL_SIZE = 116; -const GRID_LEFT = 300; -const GRID_TOP = 300; +// The grid is sized to fit the left region (clue panel lives on the right at +// x>=1010), so 5x5 / 6x6 / 7x7 all fit without overlap. Cell size, position and +// font sizes are derived per-puzzle in computeGeometry(). +const GRID_AREA = 680; // target pixel extent of the larger grid dimension +const GRID_LEFT_X = 90; // left edge of the region the grid is centered within +const GRID_REGION = 880; // width of that region +const GRID_TOP = 280; export default class MiniCrosswordGame extends Phaser.Scene { constructor() { super('MiniCrosswordGame'); } @@ -91,21 +95,25 @@ export default class MiniCrosswordGame extends Phaser.Scene { }).setOrigin(0.5).setDepth(DEPTH.ui)); this.startObjs.push(this.add.text(cx, cy - 90, - 'Fill the 5×5 grid so every across and down answer\nmatches its clue. Click a cell or clue to start typing.', { + 'Fill the grid so every across and down answer matches\nits clue. Bigger grid, bigger challenge. Click a cell or\nclue to start typing.', { fontFamily: '"Julius Sans One"', fontSize: '28px', color: COLORS.mutedHex, align: 'center', lineSpacing: 8, }).setOrigin(0.5).setDepth(DEPTH.ui)); - this.startObjs.push(this.add.text(cx, cy + 10, 'Choose difficulty', { + this.startObjs.push(this.add.text(cx, cy + 10, 'Choose a grid size', { fontFamily: 'Righteous', fontSize: '36px', color: COLORS.textHex, }).setOrigin(0.5).setDepth(DEPTH.ui)); - [['Easy', 'easy'], ['Medium', 'medium'], ['Hard', 'hard']].forEach(([label, id], i) => { - const b = new Button(this, cx - 270 + i * 270, cy + 110, label, + [['Easy', '5×5', 'easy'], ['Medium', '6×6', 'medium'], ['Hard', '7×7', 'hard']].forEach(([label, size, id], i) => { + const x = cx - 270 + i * 270; + const b = new Button(this, x, cy + 110, label, () => this.startPuzzle(id), { width: 230, height: 68, fontSize: 28, bgHover: GOLD }); b.setDepth(DEPTH.ui); this.startObjs.push(b); + this.startObjs.push(this.add.text(x, cy + 168, size, { + fontFamily: '"Julius Sans One"', fontSize: '26px', color: COLORS.mutedHex, + }).setOrigin(0.5).setDepth(DEPTH.ui)); }); } @@ -136,7 +144,21 @@ export default class MiniCrosswordGame extends Phaser.Scene { // ── Board ────────────────────────────────────────────────────────────────────── + // Derive cell size, grid origin and font sizes from the puzzle dimensions so + // every grid size fits the left region and stays clear of the clue panel. + computeGeometry() { + const cols = this.grid[0].length; + const rows = this.grid.length; + this.cellSize = Math.max(88, Math.min(128, Math.floor(GRID_AREA / Math.max(rows, cols)))); + const gridW = cols * this.cellSize; + this.gridLeft = GRID_LEFT_X + (GRID_REGION - gridW) / 2; + this.gridTop = GRID_TOP; + this.letterFont = Math.round(this.cellSize * 0.5); + this.numberFont = Math.round(this.cellSize * 0.19); + } + buildBoard() { + this.computeGeometry(); this.buildClueBanner(); this.buildGrid(); this.buildCluePanel(); @@ -154,8 +176,8 @@ export default class MiniCrosswordGame extends Phaser.Scene { cellCenter(r, c) { return { - x: GRID_LEFT + c * CELL_SIZE + CELL_SIZE / 2, - y: GRID_TOP + r * CELL_SIZE + CELL_SIZE / 2, + x: this.gridLeft + c * this.cellSize + this.cellSize / 2, + y: this.gridTop + r * this.cellSize + this.cellSize / 2, }; } @@ -165,7 +187,7 @@ export default class MiniCrosswordGame extends Phaser.Scene { const { x, y } = this.cellCenter(r, c); const block = this.grid[r][c] === '#'; - const rect = this.add.rectangle(x, y, CELL_SIZE - 4, CELL_SIZE - 4, + const rect = this.add.rectangle(x, y, this.cellSize - 4, this.cellSize - 4, block ? BLOCK_FILL : CELL).setStrokeStyle(3, EDGE).setDepth(DEPTH.cell); if (block) continue; @@ -173,13 +195,13 @@ export default class MiniCrosswordGame extends Phaser.Scene { rect.on('pointerdown', () => this.onCellClick(r, c)); const txt = this.add.text(x, y + 6, '', { - fontFamily: 'Righteous', fontSize: '58px', color: INK_DARK, + fontFamily: 'Righteous', fontSize: `${this.letterFont}px`, color: INK_DARK, }).setOrigin(0.5).setDepth(DEPTH.cellTxt); const num = this.numbers[`${r},${c}`]; if (num) { - this.add.text(x - CELL_SIZE / 2 + 12, y - CELL_SIZE / 2 + 8, String(num), { - fontFamily: '"Julius Sans One"', fontSize: '22px', color: INK_DARK, + this.add.text(x - this.cellSize / 2 + 10, y - this.cellSize / 2 + 6, String(num), { + fontFamily: '"Julius Sans One"', fontSize: `${this.numberFont}px`, color: INK_DARK, }).setOrigin(0, 0).setDepth(DEPTH.cellTxt); } @@ -189,8 +211,8 @@ export default class MiniCrosswordGame extends Phaser.Scene { } buildClueBanner() { - const gridW = this.grid[0].length * CELL_SIZE; - this.banner = this.add.text(GRID_LEFT + gridW / 2, GRID_TOP - 70, '', { + const gridW = this.grid[0].length * this.cellSize; + this.banner = this.add.text(this.gridLeft + gridW / 2, this.gridTop - 70, '', { fontFamily: 'Righteous', fontSize: '34px', color: TITLE_GOLD, align: 'center', wordWrap: { width: gridW + 40 }, }).setOrigin(0.5, 1).setDepth(DEPTH.ui); @@ -211,13 +233,17 @@ export default class MiniCrosswordGame extends Phaser.Scene { { title: 'DOWN', dir: 'down', slots: this.down, x: PX + 440 }, ]; + // Space clues to fit the tallest column (up to 8 entries for a 7x7). + const maxRows = Math.max(this.across.length, this.down.length, 1); + const step = Math.min(76, Math.floor((PH - 130) / maxRows)); + for (const col of columns) { this.add.text(col.x, PY + 36, col.title, { fontFamily: 'Righteous', fontSize: '34px', color: TITLE_GOLD, }).setDepth(DEPTH.cellTxt); col.slots.forEach((slot, i) => { - const y = PY + 100 + i * 76; + const y = PY + 100 + i * step; const t = this.add.text(col.x, y, `${slot.number}. ${slot.clue}`, { fontFamily: '"Julius Sans One"', fontSize: '24px', color: COLORS.textHex, wordWrap: { width: 360 }, @@ -230,10 +256,10 @@ export default class MiniCrosswordGame extends Phaser.Scene { } buildControls() { - const y = GRID_TOP + this.grid.length * CELL_SIZE + 70; - this.checkBtn = new Button(this, GRID_LEFT + 120, y, 'Check', + const y = this.gridTop + this.grid.length * this.cellSize + 70; + this.checkBtn = new Button(this, this.gridLeft + 120, y, 'Check', () => this.checkGrid(), { width: 200, height: 60, fontSize: 24 }); - this.revealBtn = new Button(this, GRID_LEFT + 350, y, 'Reveal Word', + this.revealBtn = new Button(this, this.gridLeft + 350, y, 'Reveal Word', () => this.revealWord(), { width: 220, height: 60, fontSize: 24, bgHover: GOLD }); [this.checkBtn, this.revealBtn].forEach((b) => b.setDepth(DEPTH.ui)); diff --git a/public/src/games/tectonic/TectonicGame.js b/public/src/games/tectonic/TectonicGame.js new file mode 100644 index 0000000..7b98ad6 --- /dev/null +++ b/public/src/games/tectonic/TectonicGame.js @@ -0,0 +1,645 @@ +import * as Phaser from 'phaser'; +import { GAME_WIDTH, GAME_HEIGHT, COLORS } from '../../config.js'; +import { api } from '../../services/api.js'; +import { Button } from '../../ui/Button.js'; +import { MusicPlayer } from '../../ui/MusicPlayer.js'; +import { playSound, SFX } from '../../ui/Sounds.js'; +import { HINT_LIMITS, DIFFICULTY_SCORES, isBoardComplete, getHintCell } from './TectonicLogic.js'; + +// ── Palette (graph-paper notebook) ───────────────────────────────────────────── +const PAPER = 0xFCFEFF; // bright graph-paper white +const PAPER_EDGE = 0xD9E4EC; +const GRAPH_BLUE = 0x9DC4E6; // fine printed grid lines +const CELL_BLUE = 0x6FA3CF; // puzzle cell separators +const REGION_INK = 0x223547; // bold cage outlines +const INK = '#21303f'; // given numbers (ink) +const INK_N = 0x21303f; +const FADED = '#8aa6bd'; +const TITLE_BLUE = '#27506e'; +const RED_MARK = 0xc0392b; +const PLAYER_INK = '#1c6fb0'; // player-entered numbers (blue pen) + +const DEPTH = { + bg: 0, paper: 1, graph: 2, cell: 3, cellLines: 4, region: 5, + number: 6, selector: 7, hit: 10, ui: 20, overlay: 40, +}; + +// ── Layout ────────────────────────────────────────────────────────────────── +const CX = GAME_WIDTH / 2; +const CY = GAME_HEIGHT / 2; + +// Paper sheet +const PX = 60, PY = 40, PW = 1800, PH = 1000; +const GRAPH_PITCH = 45; + +// Grid (8×8, centered in the left panel) +const N = 8; +const CELL = 90; +const GRID_W = N * CELL; // 720 +const GRID_H = N * CELL; // 720 +const TITLE_CX = 540; // centre of the left panel +const GRID_X = TITLE_CX - GRID_W / 2; // 180 +const GRID_Y = 200; + +// Right-panel number selector (1–5 + eraser) +const NUM_X = 1440; +const NUM_START_Y = 282; +const NUM_STEP = 108; +const ERASER_CY = NUM_START_Y + 5 * NUM_STEP + 6; // below the "5" +const HINT_BTN_Y = ERASER_CY + 86; +const BTN_Y = PY + PH - 48; + +const DIFF_LABELS = { easy: 'Easy', medium: 'Medium', hard: 'Hard' }; + +export default class TectonicGame extends Phaser.Scene { + constructor() { super('TectonicGame'); } + + init(data) { + this._initData = { ...data }; + this.gameDef = data.game; + + this.grid = null; + this.solution = null; + this.regions = null; + this.regionSize = null; // 2D: size of the region each cell belongs to + this.neededFor = null; // neededFor[v] = how many regions hold value v + this.difficulty = ''; + this.selectedNum = 1; + this.hintsLeft = null; + this.hintsUsed = 0; + this.gameEnded = false; + this.hoveredCell = null; + + this.givenCells = []; + this.cellState = []; // 0=empty, 1=correct, 2=wrong + this.cellBgObjs = []; + this.cellTextObjs = []; + this.cellHitObjs = []; + + this.numCircleGfx = null; + this.numStrikeGfx = null; + this.numTextObjs = {}; + this.numHitObjs = {}; + this.hintBtn = null; + this.startObjs = []; + this.revealed = false; + } + + async create() { + const music = this.cache.json.get('music'); + if (music?.tracks) new MusicPlayer(this, music.tracks); + + this.add.rectangle(CX, CY, GAME_WIDTH, GAME_HEIGHT, COLORS.bg).setDepth(DEPTH.bg); + + await this.showStartPanel(); + } + + // ── Start panel ─────────────────────────────────────────────────────────────── + + async showStartPanel() { + const cx = CX, cy = CY; + + const sheet = this.add.graphics().setDepth(DEPTH.paper); + sheet.postFX.addShadow(0, 6, 0.02, 1.2, 0x000000, 10, 0.6); + sheet.fillStyle(PAPER, 1); + sheet.fillRoundedRect(cx - 600, cy - 320, 1200, 640, 18); + sheet.lineStyle(3, PAPER_EDGE, 1); + sheet.strokeRoundedRect(cx - 600, cy - 320, 1200, 640, 18); + this.startObjs.push(sheet); + + // graph lines inside the start sheet + const g = this.add.graphics().setDepth(DEPTH.graph); + g.lineStyle(1, GRAPH_BLUE, 0.4); + for (let x = cx - 600 + GRAPH_PITCH; x < cx + 600; x += GRAPH_PITCH) + g.lineBetween(x, cy - 320, x, cy + 320); + for (let y = cy - 320 + GRAPH_PITCH; y < cy + 320; y += GRAPH_PITCH) + g.lineBetween(cx - 600, y, cx + 600, y); + this.startObjs.push(g); + + this.startObjs.push( + this.add.text(cx, cy - 226, 'Tectonic', { + fontFamily: 'YummyCupcakes', fontSize: '104px', color: TITLE_BLUE, + }).setOrigin(0.5).setDepth(DEPTH.ui), + ); + + this.startObjs.push( + this.add.text(cx, cy - 118, 'Fill each cage 1–N · no touching twins', { + fontFamily: 'YummyCupcakes', fontSize: '34px', color: '#5a7a92', + }).setOrigin(0.5).setDepth(DEPTH.ui), + ); + + this.startObjs.push( + this.add.text(cx, cy - 44, 'Choose difficulty', { + fontFamily: 'YummyCupcakes', fontSize: '44px', color: INK, + }).setOrigin(0.5).setDepth(DEPTH.ui), + ); + + const diffs = [['Easy', 'easy'], ['Medium', 'medium'], ['Hard', 'hard']]; + diffs.forEach(([label, id], i) => { + const b = new Button(this, cx + (i - 1) * 260, cy + 70, label, + () => this.startGame(id), { width: 230, height: 70, fontSize: 26 }); + b.setDepth(DEPTH.ui); + this.startObjs.push(b); + }); + + const leave = new Button(this, cx, cy + 210, 'Leave', + () => this.scene.start('GameMenu'), + { variant: 'ghost', width: 200, height: 50, fontSize: 22 }); + leave.setDepth(DEPTH.ui); + this.startObjs.push(leave); + } + + destroyStart() { + this.startObjs.forEach(o => o.destroy()); + this.startObjs = []; + } + + // ── Game start ──────────────────────────────────────────────────────────────── + + async startGame(difficulty) { + this.destroyStart(); + playSound(this, SFX.PIECE_CLICK); + + let data; + try { + data = await api.get(`/words/tectonic/start?difficulty=${difficulty}`); + } catch (err) { + console.error('[tectonic] failed to fetch puzzle:', err); + await this.showStartPanel(); + return; + } + + this.grid = data.grid.map(row => [...row]); + this.solution = data.solution; + this.regions = data.regions; + this.difficulty = difficulty; + this.selectedNum = 1; + this.hintsLeft = HINT_LIMITS[difficulty] ?? 0; + this.hintsUsed = 0; + this.gameEnded = false; + this.hoveredCell = null; + this.revealed = false; + + this.computeRegionMeta(); + + this.givenCells = this.grid.map(row => row.map(v => v !== 0)); + this.cellState = Array.from({ length: N }, () => Array(N).fill(0)); + + this.buildPaper(); + this.buildTitle(); + this.buildCellLines(); + this.buildRegionBorders(); + this.buildCells(); + this.buildSelector(); + if (this.hintsLeft > 0) this.buildHintBtn(); + this.buildControls(); + this.refreshSelector(); + this.updateCompletedNums(); + } + + // Region size per cell + how many regions contain each value 1..5. + computeRegionMeta() { + const counts = {}; + for (let r = 0; r < N; r++) + for (let c = 0; c < N; c++) { + const id = this.regions[r][c]; + counts[id] = (counts[id] || 0) + 1; + } + this.regionSize = this.regions.map(row => row.map(id => counts[id])); + this.neededFor = [0, 0, 0, 0, 0, 0]; + for (const id in counts) { + const size = counts[id]; + for (let v = 1; v <= size; v++) this.neededFor[v]++; + } + } + + // ── Paper & graph lines ───────────────────────────────────────────────────── + + buildPaper() { + const g = this.add.graphics().setDepth(DEPTH.paper); + g.postFX.addShadow(0, 8, 0.02, 1.2, 0x000000, 14, 0.55); + g.fillStyle(PAPER, 1); + g.fillRoundedRect(PX, PY, PW, PH, 16); + g.lineStyle(2, PAPER_EDGE, 1); + g.strokeRoundedRect(PX, PY, PW, PH, 16); + + // Printed graph-paper grid across the whole sheet. + const gl = this.add.graphics().setDepth(DEPTH.graph); + gl.lineStyle(1, GRAPH_BLUE, 0.45); + for (let x = PX + GRAPH_PITCH; x < PX + PW; x += GRAPH_PITCH) + gl.lineBetween(x, PY + 6, x, PY + PH - 6); + for (let y = PY + GRAPH_PITCH; y < PY + PH; y += GRAPH_PITCH) + gl.lineBetween(PX + 6, y, PX + PW - 6, y); + } + + buildTitle() { + const titleTxt = this.add.text(TITLE_CX, 116, 'Tectonic', { + fontFamily: 'YummyCupcakes', fontSize: '84px', color: TITLE_BLUE, + }).setOrigin(0.5).setDepth(DEPTH.ui); + + this.add.text(titleTxt.x + titleTxt.width / 2 + 24, titleTxt.y + 14, + DIFF_LABELS[this.difficulty] ?? this.difficulty, { + fontFamily: 'YummyCupcakes', fontSize: '36px', color: FADED, + }).setOrigin(0, 0.5).setDepth(DEPTH.ui); + } + + // ── Grid lines & cage borders ──────────────────────────────────────────────── + + buildCellLines() { + const gfx = this.add.graphics().setDepth(DEPTH.cellLines); + gfx.lineStyle(1.5, CELL_BLUE, 0.5); + for (let i = 1; i < N; i++) { + gfx.lineBetween(GRID_X + i * CELL, GRID_Y, GRID_X + i * CELL, GRID_Y + GRID_H); + gfx.lineBetween(GRID_X, GRID_Y + i * CELL, GRID_X + GRID_W, GRID_Y + i * CELL); + } + } + + buildRegionBorders() { + const gfx = this.add.graphics().setDepth(DEPTH.region); + gfx.lineStyle(5, REGION_INK, 0.92); + + const idAt = (r, c) => (r < 0 || r >= N || c < 0 || c >= N) ? -1 : this.regions[r][c]; + + for (let r = 0; r < N; r++) { + for (let c = 0; c < N; c++) { + const id = this.regions[r][c]; + const x = GRID_X + c * CELL; + const y = GRID_Y + r * CELL; + if (idAt(r - 1, c) !== id) gfx.lineBetween(x, y, x + CELL, y); + if (idAt(r, c - 1) !== id) gfx.lineBetween(x, y, x, y + CELL); + if (idAt(r + 1, c) !== id) gfx.lineBetween(x, y + CELL, x + CELL, y + CELL); + if (idAt(r, c + 1) !== id) gfx.lineBetween(x + CELL, y, x + CELL, y + CELL); + } + } + } + + // ── Cells ───────────────────────────────────────────────────────────────────── + + buildCells() { + this.cellBgObjs = []; + this.cellTextObjs = []; + this.cellHitObjs = []; + + for (let r = 0; r < N; r++) { + this.cellBgObjs.push([]); + this.cellTextObjs.push([]); + this.cellHitObjs.push([]); + + for (let c = 0; c < N; c++) { + const cx = GRID_X + c * CELL + CELL / 2; + const cy = GRID_Y + r * CELL + CELL / 2; + const given = this.givenCells[r][c]; + const val = this.grid[r][c]; + + const bg = this.add.graphics().setDepth(DEPTH.cell); + this.cellBgObjs[r].push(bg); + + const txt = this.add.text(cx, cy, given ? String(val) : '', { + fontFamily: given ? 'Righteous' : 'YummyCupcakes', + fontSize: given ? '46px' : '50px', + color: given ? INK : PLAYER_INK, + }).setOrigin(0.5).setDepth(DEPTH.number); + this.cellTextObjs[r].push(txt); + + if (given) { + this.cellHitObjs[r].push(null); + } else { + const hit = this.add.rectangle(cx, cy, CELL - 2, CELL - 2, 0xffffff, 0.001) + .setDepth(DEPTH.hit) + .setInteractive({ useHandCursor: true }); + hit.on('pointerover', () => this.onCellHover(r, c, true)); + hit.on('pointerout', () => this.onCellHover(r, c, false)); + hit.on('pointerdown', () => this.onCellClick(r, c)); + this.cellHitObjs[r].push(hit); + } + } + } + } + + // ── Number selector ─────────────────────────────────────────────────────────── + + buildSelector() { + this.numCircleGfx = this.add.graphics().setDepth(DEPTH.selector); + this.numStrikeGfx = this.add.graphics().setDepth(DEPTH.selector + 2); + this.numHitObjs = {}; + this.numTextObjs = {}; + + for (let n = 1; n <= 5; n++) { + const ny = NUM_START_Y + (n - 1) * NUM_STEP; + + const numTxt = this.add.text(NUM_X, ny, String(n), { + fontFamily: '"Julius Sans One"', fontSize: '74px', color: INK, + }).setOrigin(0.5).setDepth(DEPTH.number + 1); + this.numTextObjs[n] = numTxt; + + const hit = this.add.rectangle(NUM_X, ny, 220, NUM_STEP - 4, 0xffffff, 0.001) + .setDepth(DEPTH.hit + 1) + .setInteractive({ useHandCursor: true }); + hit.on('pointerdown', () => this.selectNum(n)); + this.numHitObjs[n] = hit; + } + + // Eraser × + this.add.text(NUM_X, ERASER_CY, '×', { + fontFamily: '"Julius Sans One"', fontSize: '60px', color: FADED, + }).setOrigin(0.5).setDepth(DEPTH.number + 1); + + const eraserHit = this.add.rectangle(NUM_X, ERASER_CY, 220, NUM_STEP - 4, 0xffffff, 0.001) + .setDepth(DEPTH.hit + 1) + .setInteractive({ useHandCursor: true }); + eraserHit.on('pointerdown', () => this.selectNum(0)); + this.numHitObjs[0] = eraserHit; + } + + refreshSelector() { + const gfx = this.numCircleGfx; + if (!gfx) return; + gfx.clear(); + + let cy; + if (this.selectedNum >= 1 && this.selectedNum <= 5) { + cy = NUM_START_Y + (this.selectedNum - 1) * NUM_STEP; + } else if (this.selectedNum === 0) { + cy = ERASER_CY; + } else { + return; + } + this.drawHandCircle(gfx, NUM_X, cy); + } + + drawHandCircle(gfx, cx, cy) { + gfx.lineStyle(3, RED_MARK, 0.88); + gfx.strokeEllipse(cx, cy, 92, 80); + gfx.lineStyle(2, RED_MARK, 0.28); + gfx.strokeEllipse(cx + 3, cy - 2, 96, 84); + } + + updateCompletedNums() { + const gfx = this.numStrikeGfx; + if (!gfx) return; + gfx.clear(); + + for (let n = 1; n <= 5; n++) { + let count = 0; + for (let r = 0; r < N; r++) + for (let c = 0; c < N; c++) + if (this.grid[r][c] === n) count++; + + const txt = this.numTextObjs[n]; + if (!txt) continue; + + if (count >= this.neededFor[n]) { + txt.setColor('#9bb0c2'); + const ny = NUM_START_Y + (n - 1) * NUM_STEP; + gfx.lineStyle(3, 0x7a92a6, 0.8); + gfx.lineBetween(NUM_X - 38, ny - 6, NUM_X + 38, ny - 6); + } else { + txt.setColor(INK); + } + } + } + + // ── Hint button ─────────────────────────────────────────────────────────────── + + buildHintBtn() { + const isLimited = isFinite(this.hintsLeft); + const label = isLimited ? `Hint (${this.hintsLeft} left)` : 'Hint'; + + this.hintBtn = new Button(this, NUM_X, HINT_BTN_Y, label, + () => this.useHint(), { width: 240, height: 56, fontSize: 22 }); + this.hintBtn.setDepth(DEPTH.ui); + } + + updateHintBtn() { + if (!this.hintBtn) return; + const isLimited = isFinite(this.hintsLeft); + this.hintBtn.setLabel(isLimited ? `Hint (${this.hintsLeft} left)` : 'Hint'); + if (this.hintsLeft === 0) this.hintBtn.setEnabled(false); + } + + // ── Controls ────────────────────────────────────────────────────────────────── + + buildControls() { + new Button(this, PX + 160, BTN_Y, 'New puzzle', + () => this.scene.restart(this._initData), + { variant: 'ghost', width: 230, height: 50, fontSize: 22 }).setDepth(DEPTH.ui); + + new Button(this, PX + PW - 130, BTN_Y, 'Leave', + () => this.scene.start('GameMenu'), + { variant: 'ghost', width: 200, height: 50, fontSize: 22 }).setDepth(DEPTH.ui); + } + + // ── Input ───────────────────────────────────────────────────────────────────── + + selectNum(num) { + this.selectedNum = num; + this.refreshSelector(); + playSound(this, SFX.PIECE_CLICK); + } + + onCellHover(r, c, entering) { + this.hoveredCell = entering ? { r, c } : null; + this.drawCellBg(r, c, entering); + } + + onCellClick(r, c) { + if (this.gameEnded || this.givenCells[r][c]) return; + playSound(this, SFX.PIECE_CLICK); + + if (this.selectedNum === 0) { + this.clearCell(r, c); + } else if (this.grid[r][c] === this.selectedNum) { + this.clearCell(r, c); + } else { + this.placeNum(r, c, this.selectedNum); + } + } + + placeNum(r, c, num) { + this.grid[r][c] = num; + this.cellTextObjs[r][c].setText(String(num)); + + const hovered = this.hoveredCell?.r === r && this.hoveredCell?.c === c; + + if (this.isEasyMode() || this.revealed) { + const correct = (num === this.solution[r][c]); + this.cellState[r][c] = correct ? 1 : 2; + this.drawCellBg(r, c, hovered); + + if (correct && isBoardComplete(this.grid, this.solution)) { + this.time.delayedCall(300, () => this.handleWin()); + } + } else { + this.cellState[r][c] = 0; + this.drawCellBg(r, c, hovered); + + if (this.isAllFilled()) { + this.time.delayedCall(200, () => this.revealAll()); + } + } + + this.updateCompletedNums(); + } + + isEasyMode() { + return this.difficulty === 'easy'; + } + + isAllFilled() { + for (let r = 0; r < N; r++) + for (let c = 0; c < N; c++) + if (!this.givenCells[r][c] && this.grid[r][c] === 0) return false; + return true; + } + + revealAll() { + this.revealed = true; + let allCorrect = true; + + for (let r = 0; r < N; r++) { + for (let c = 0; c < N; c++) { + if (this.givenCells[r][c]) continue; + const correct = this.grid[r][c] === this.solution[r][c]; + if (!correct) allCorrect = false; + this.cellState[r][c] = correct ? 1 : 2; + this.drawCellBg(r, c, false); + } + } + + this.updateCompletedNums(); + + if (allCorrect) { + this.time.delayedCall(300, () => this.handleWin()); + } + } + + clearCell(r, c) { + if (this.givenCells[r][c]) return; + this.grid[r][c] = 0; + this.cellTextObjs[r][c].setText(''); + this.cellState[r][c] = 0; + const hovered = this.hoveredCell?.r === r && this.hoveredCell?.c === c; + this.drawCellBg(r, c, hovered); + this.updateCompletedNums(); + } + + drawCellBg(r, c, isHovered) { + const bg = this.cellBgObjs[r][c]; + if (!bg) return; + bg.clear(); + + const x = GRID_X + c * CELL + 1; + const y = GRID_Y + r * CELL + 1; + const sz = CELL - 2; + + const state = this.cellState[r][c]; + + if (state === 1) { + bg.fillStyle(0x3c8a4e, isHovered ? 0.30 : 0.20); + bg.fillRect(x, y, sz, sz); + } else if (state === 2) { + bg.fillStyle(0xb03a2e, isHovered ? 0.27 : 0.16); + bg.fillRect(x, y, sz, sz); + } else if (isHovered) { + bg.fillStyle(INK_N, 0.07); + bg.fillRect(x, y, sz, sz); + } + } + + // ── Hint ────────────────────────────────────────────────────────────────────── + + useHint() { + if (this.gameEnded) return; + if (isFinite(this.hintsLeft) && this.hintsLeft <= 0) return; + + const cell = getHintCell(this.grid); + if (!cell) return; + + const { r, c } = cell; + + const bg = this.cellBgObjs[r][c]; + bg.clear(); + bg.fillStyle(0xd4a017, 0.5); + bg.fillRect(GRID_X + c * CELL + 1, GRID_Y + r * CELL + 1, CELL - 2, CELL - 2); + + this.time.delayedCall(550, () => { + this.grid[r][c] = this.solution[r][c]; + this.cellTextObjs[r][c].setText(String(this.solution[r][c])); + this.cellState[r][c] = 1; + this.drawCellBg(r, c, false); + this.updateCompletedNums(); + + if (isBoardComplete(this.grid, this.solution)) { + this.time.delayedCall(200, () => this.handleWin()); + } + }); + + if (isFinite(this.hintsLeft)) { + this.hintsLeft--; + this.hintsUsed++; + this.updateHintBtn(); + } + } + + // ── Win ─────────────────────────────────────────────────────────────────────── + + handleWin() { + if (this.gameEnded) return; + this.gameEnded = true; + this.recordResult(); + this.showWin(); + } + + showWin() { + const cx = CX, cy = CY; + + this.add.rectangle(cx, cy, GAME_WIDTH, GAME_HEIGHT, 0x000000, 0.42) + .setDepth(DEPTH.overlay); + + const panel = this.add.graphics().setDepth(DEPTH.overlay + 1); + panel.postFX.addShadow(0, 6, 0.02, 1.2, 0x000000, 10, 0.55); + panel.fillStyle(PAPER, 1); + panel.fillRoundedRect(cx - 460, cy - 230, 920, 460, 18); + panel.lineStyle(3, PAPER_EDGE, 1); + panel.strokeRoundedRect(cx - 460, cy - 230, 920, 460, 18); + + this.add.text(cx, cy - 130, 'Puzzle Solved!', { + fontFamily: 'YummyCupcakes', fontSize: '88px', color: '#3c8a4e', + }).setOrigin(0.5).setDepth(DEPTH.overlay + 2); + + const diffLabel = DIFF_LABELS[this.difficulty] ?? this.difficulty; + const score = this.calcScore(); + + this.add.text(cx, cy - 26, `${diffLabel} · ${score} pts`, { + fontFamily: 'YummyCupcakes', fontSize: '44px', color: TITLE_BLUE, + }).setOrigin(0.5).setDepth(DEPTH.overlay + 2); + + if (this.hintsUsed > 0) { + this.add.text(cx, cy + 28, `${this.hintsUsed} hint${this.hintsUsed > 1 ? 's' : ''} used`, { + fontFamily: 'YummyCupcakes', fontSize: '32px', color: FADED, + }).setOrigin(0.5).setDepth(DEPTH.overlay + 2); + } + + new Button(this, cx - 175, cy + 130, 'New puzzle', + () => this.scene.restart(this._initData), + { width: 280, height: 58, fontSize: 26 }).setDepth(DEPTH.overlay + 3); + + new Button(this, cx + 175, cy + 130, 'Leave', + () => this.scene.start('GameMenu'), + { variant: 'ghost', width: 280, height: 58, fontSize: 26 }).setDepth(DEPTH.overlay + 3); + } + + calcScore() { + const base = DIFFICULTY_SCORES[this.difficulty] ?? 10; + const hintPenalty = this.difficulty === 'medium' ? this.hintsUsed * 4 : 0; + return Math.max(0, base - hintPenalty); + } + + async recordResult() { + try { + await api.post('/history/single-player', { + slug: 'tectonic', score: this.calcScore(), opponentScores: [], result: 'win', + }); + } catch { /* best effort */ } + } +} diff --git a/public/src/games/tectonic/TectonicLogic.js b/public/src/games/tectonic/TectonicLogic.js new file mode 100644 index 0000000..6d6aefb --- /dev/null +++ b/public/src/games/tectonic/TectonicLogic.js @@ -0,0 +1,28 @@ +export const HINT_LIMITS = { + easy: Infinity, + medium: 5, + hard: 0, +}; + +export const DIFFICULTY_SCORES = { + easy: 20, + medium: 50, + hard: 90, +}; + +export function isBoardComplete(grid, solution) { + for (let r = 0; r < grid.length; r++) + for (let c = 0; c < grid[r].length; c++) + if (grid[r][c] !== solution[r][c]) return false; + return true; +} + +// Returns a random empty cell that still needs filling, or null. +export function getHintCell(grid) { + const empties = []; + for (let r = 0; r < grid.length; r++) + for (let c = 0; c < grid[r].length; c++) + if (grid[r][c] === 0) empties.push({ r, c }); + if (empties.length === 0) return null; + return empties[Math.floor(Math.random() * empties.length)]; +} diff --git a/public/src/main.js b/public/src/main.js index 9870503..88598d8 100644 --- a/public/src/main.js +++ b/public/src/main.js @@ -52,6 +52,7 @@ import MiniCrosswordGame from './games/minicrossword/MiniCrosswordGame.js'; import ForbiddenIslandGame from './games/forbiddenisland/ForbiddenIslandGame.js'; import SolitaireTourGame from './games/solitairetour/SolitaireTourGame.js'; import SplendorGame from './games/splendor/SplendorGame.js'; +import TectonicGame from './games/tectonic/TectonicGame.js'; const config = { type: Phaser.AUTO, @@ -117,6 +118,7 @@ const config = { ForbiddenIslandGame, SolitaireTourGame, SplendorGame, + TectonicGame, ], }; diff --git a/public/src/scenes/GameRoomScene.js b/public/src/scenes/GameRoomScene.js index a125306..0bceab3 100644 --- a/public/src/scenes/GameRoomScene.js +++ b/public/src/scenes/GameRoomScene.js @@ -22,7 +22,7 @@ export default class GameRoomScene extends Phaser.Scene { } create() { - const slugDispatch = { backgammon: 'Backgammon', holdem: 'HoldemGame', blackjack: 'BlackjackGame', parchisi: 'ParchisiGame', yatzi: 'YatziGame', skipbo: 'SkipBoGame', phase10: 'Phase10Game', chinesecheckers: 'ChineseCheckersGame', gofish: 'GoFishGame', uno: 'UnoGame', craps: 'CrapsGame', roulette: 'RouletteGame', mexicantrain: 'MexicanTrainGame', hearts: 'HeartsGame', catan: 'CatanGame', tickettoride: 'TicketToRideGame', nerts: 'NertsGame', bingo: 'BingoGame', baccarat: 'BaccaratGame', dominion: 'DominionGame', checkers: 'CheckersGame', chess: 'ChessGame', wordle: 'WordleGame', scrabble: 'ScrabbleGame', ghost: 'GhostGame', wordladder: 'WordLadderGame', wordsearch: 'WordSearchGame', hangman: 'HangmanGame', sudoku: 'SudokuGame', othello: 'OthelloGame', go: 'GoGame', battleship: 'BattleshipGame', mastermind: 'MastermindGame', connect4: 'Connect4Game', boggle: 'BoggleGame', oldmaid: 'OldMaidGame', blokus: 'BlokusGame', spellingbee: 'SpellingBeeGame', minicrossword: 'MiniCrosswordGame', forbiddenisland: 'ForbiddenIslandGame', solitairetour: 'SolitaireTourGame', splendor: 'SplendorGame' }; + const slugDispatch = { backgammon: 'Backgammon', holdem: 'HoldemGame', blackjack: 'BlackjackGame', parchisi: 'ParchisiGame', yatzi: 'YatziGame', skipbo: 'SkipBoGame', phase10: 'Phase10Game', chinesecheckers: 'ChineseCheckersGame', gofish: 'GoFishGame', uno: 'UnoGame', craps: 'CrapsGame', roulette: 'RouletteGame', mexicantrain: 'MexicanTrainGame', hearts: 'HeartsGame', catan: 'CatanGame', tickettoride: 'TicketToRideGame', nerts: 'NertsGame', bingo: 'BingoGame', baccarat: 'BaccaratGame', dominion: 'DominionGame', checkers: 'CheckersGame', chess: 'ChessGame', wordle: 'WordleGame', scrabble: 'ScrabbleGame', ghost: 'GhostGame', wordladder: 'WordLadderGame', wordsearch: 'WordSearchGame', hangman: 'HangmanGame', sudoku: 'SudokuGame', othello: 'OthelloGame', go: 'GoGame', battleship: 'BattleshipGame', mastermind: 'MastermindGame', connect4: 'Connect4Game', boggle: 'BoggleGame', oldmaid: 'OldMaidGame', blokus: 'BlokusGame', spellingbee: 'SpellingBeeGame', minicrossword: 'MiniCrosswordGame', forbiddenisland: 'ForbiddenIslandGame', solitairetour: 'SolitaireTourGame', splendor: 'SplendorGame', tectonic: 'TectonicGame' }; if (slugDispatch[this.game.slug]) { this.scene.start(slugDispatch[this.game.slug], { game: this.game, diff --git a/server/data/crosswords/_generated.json b/server/data/crosswords/_generated.json new file mode 100644 index 0000000..34c1afc --- /dev/null +++ b/server/data/crosswords/_generated.json @@ -0,0 +1,2722 @@ +[ + { + "id": "easy-001", + "difficulty": "easy", + "grid": [ + "#BLAH", + "SLAVE", + "CANAL", + "AMEND", + "REST#" + ], + "_answersAcross": [ + "1. BLAH", + "5. SLAVE", + "6. CANAL", + "7. AMEND", + "8. REST" + ], + "_answersDown": [ + "1. BLAME", + "2. LANES", + "3. AVANT", + "4. HELD", + "5. SCAR" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-002", + "difficulty": "easy", + "grid": [ + "HABIT", + "AMINO", + "RISEN", + "SCORE", + "HINTS" + ], + "_answersAcross": [ + "1. HABIT", + "6. AMINO", + "7. RISEN", + "8. SCORE", + "9. HINTS" + ], + "_answersDown": [ + "1. HARSH", + "2. AMICI", + "3. BISON", + "4. INERT", + "5. TONES" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-003", + "difficulty": "easy", + "grid": [ + "#BULL", + "LANAI", + "ELITE", + "SLOTS", + "TYNE#" + ], + "_answersAcross": [ + "1. BULL", + "5. LANAI", + "6. ELITE", + "7. SLOTS", + "8. TYNE" + ], + "_answersDown": [ + "1. BALLY", + "2. UNION", + "3. LATTE", + "4. LIES", + "5. LEST" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-004", + "difficulty": "easy", + "grid": [ + "GUESS", + "ENROL", + "AMINO", + "RECAP", + "STARE" + ], + "_answersAcross": [ + "1. GUESS", + "6. ENROL", + "7. AMINO", + "8. RECAP", + "9. STARE" + ], + "_answersDown": [ + "1. GEARS", + "2. UNMET", + "3. ERICA", + "4. SONAR", + "5. SLOPE" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-005", + "difficulty": "easy", + "grid": [ + "#SEEN", + "HALLO", + "OLIVE", + "MOTEL", + "ONES#" + ], + "_answersAcross": [ + "1. SEEN", + "5. HALLO", + "6. OLIVE", + "7. MOTEL", + "8. ONES" + ], + "_answersDown": [ + "1. SALON", + "2. ELITE", + "3. ELVES", + "4. NOEL", + "5. HOMO" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-006", + "difficulty": "easy", + "grid": [ + "SILKS", + "AMINO", + "LABEL", + "AGREE", + "DEALS" + ], + "_answersAcross": [ + "1. SILKS", + "6. AMINO", + "7. LABEL", + "8. AGREE", + "9. DEALS" + ], + "_answersDown": [ + "1. SALAD", + "2. IMAGE", + "3. LIBRA", + "4. KNEEL", + "5. SOLES" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-007", + "difficulty": "easy", + "grid": [ + "#NEWS", + "RADII", + "USING", + "LATCH", + "ELSE#" + ], + "_answersAcross": [ + "1. NEWS", + "5. RADII", + "6. USING", + "7. LATCH", + "8. ELSE" + ], + "_answersDown": [ + "1. NASAL", + "2. EDITS", + "3. WINCE", + "4. SIGH", + "5. RULE" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-008", + "difficulty": "easy", + "grid": [ + "WATCH", + "AWARE", + "SABER", + "PILED", + "STEPS" + ], + "_answersAcross": [ + "1. WATCH", + "6. AWARE", + "7. SABER", + "8. PILED", + "9. STEPS" + ], + "_answersDown": [ + "1. WASPS", + "2. AWAIT", + "3. TABLE", + "4. CREEP", + "5. HERDS" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-009", + "difficulty": "easy", + "grid": [ + "#TONE", + "PERIL", + "URGES", + "BRACE", + "SANE#" + ], + "_answersAcross": [ + "1. TONE", + "5. PERIL", + "6. URGES", + "7. BRACE", + "8. SANE" + ], + "_answersDown": [ + "1. TERRA", + "2. ORGAN", + "3. NIECE", + "4. ELSE", + "5. PUBS" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-010", + "difficulty": "easy", + "grid": [ + "#PEER", + "SHAVE", + "HAVEN", + "AGENT", + "WEST#" + ], + "_answersAcross": [ + "1. PEER", + "5. SHAVE", + "6. HAVEN", + "7. AGENT", + "8. WEST" + ], + "_answersDown": [ + "1. PHAGE", + "2. EAVES", + "3. EVENT", + "4. RENT", + "5. SHAW" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-011", + "difficulty": "easy", + "grid": [ + "ARLES", + "BELLE", + "BLADE", + "AIMED", + "SCARS" + ], + "_answersAcross": [ + "1. ARLES", + "6. BELLE", + "7. BLADE", + "8. AIMED", + "9. SCARS" + ], + "_answersDown": [ + "1. ABBAS", + "2. RELIC", + "3. LLAMA", + "4. ELDER", + "5. SEEDS" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-012", + "difficulty": "easy", + "grid": [ + "#HELL", + "POLIO", + "AGENT", + "PACES", + "ANTS#" + ], + "_answersAcross": [ + "1. HELL", + "5. POLIO", + "6. AGENT", + "7. PACES", + "8. ANTS" + ], + "_answersDown": [ + "1. HOGAN", + "2. ELECT", + "3. LINES", + "4. LOTS", + "5. PAPA" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-013", + "difficulty": "easy", + "grid": [ + "LACKS", + "ALONE", + "TONIC", + "THEFT", + "EASES" + ], + "_answersAcross": [ + "1. LACKS", + "6. ALONE", + "7. TONIC", + "8. THEFT", + "9. EASES" + ], + "_answersDown": [ + "1. LATTE", + "2. ALOHA", + "3. CONES", + "4. KNIFE", + "5. SECTS" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-014", + "difficulty": "easy", + "grid": [ + "#PULP", + "CANAL", + "UNITE", + "BETTA", + "ELSE#" + ], + "_answersAcross": [ + "1. PULP", + "5. CANAL", + "6. UNITE", + "7. BETTA", + "8. ELSE" + ], + "_answersDown": [ + "1. PANEL", + "2. UNITS", + "3. LATTE", + "4. PLEA", + "5. CUBE" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-015", + "difficulty": "easy", + "grid": [ + "BLOOD", + "LARVA", + "ANGER", + "SCART", + "TENTS" + ], + "_answersAcross": [ + "1. BLOOD", + "6. LARVA", + "7. ANGER", + "8. SCART", + "9. TENTS" + ], + "_answersDown": [ + "1. BLAST", + "2. LANCE", + "3. ORGAN", + "4. OVERT", + "5. DARTS" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-016", + "difficulty": "easy", + "grid": [ + "#HACK", + "SOLON", + "PRIMO", + "ASKEW", + "SEES#" + ], + "_answersAcross": [ + "1. HACK", + "5. SOLON", + "6. PRIMO", + "7. ASKEW", + "8. SEES" + ], + "_answersDown": [ + "1. HORSE", + "2. ALIKE", + "3. COMES", + "4. KNOW", + "5. SPAS" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-017", + "difficulty": "easy", + "grid": [ + "SAGES", + "CRUDE", + "AMIGA", + "LOSER", + "PRESS" + ], + "_answersAcross": [ + "1. SAGES", + "6. CRUDE", + "7. AMIGA", + "8. LOSER", + "9. PRESS" + ], + "_answersDown": [ + "1. SCALP", + "2. ARMOR", + "3. GUISE", + "4. EDGES", + "5. SEARS" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-018", + "difficulty": "easy", + "grid": [ + "#FIRE", + "COCOA", + "ALIAS", + "LINDY", + "LOGS#" + ], + "_answersAcross": [ + "1. FIRE", + "5. COCOA", + "6. ALIAS", + "7. LINDY", + "8. LOGS" + ], + "_answersDown": [ + "1. FOLIO", + "2. ICING", + "3. ROADS", + "4. EASY", + "5. CALL" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-019", + "difficulty": "easy", + "grid": [ + "SLASH", + "TANTO", + "AUGER", + "GREEN", + "EARLY" + ], + "_answersAcross": [ + "1. SLASH", + "6. TANTO", + "7. AUGER", + "8. GREEN", + "9. EARLY" + ], + "_answersDown": [ + "1. STAGE", + "2. LAURA", + "3. ANGER", + "4. STEEL", + "5. HORNY" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "easy-020", + "difficulty": "easy", + "grid": [ + "#PILE", + "GENOA", + "RADAR", + "ACIDS", + "BEES#" + ], + "_answersAcross": [ + "1. PILE", + "5. GENOA", + "6. RADAR", + "7. ACIDS", + "8. BEES" + ], + "_answersDown": [ + "1. PEACE", + "2. INDIE", + "3. LOADS", + "4. EARS", + "5. GRAB" + ], + "across": [ + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-001", + "difficulty": "medium", + "grid": [ + "#FISH#", + "CANTOR", + "ALCOVE", + "SCORED", + "HOMERS", + "#NESS#" + ], + "_answersAcross": [ + "1. FISH", + "5. CANTOR", + "7. ALCOVE", + "8. SCORED", + "9. HOMERS", + "10. NESS" + ], + "_answersDown": [ + "1. FALCON", + "2. INCOME", + "3. STORES", + "4. HOVERS", + "5. CASH", + "6. REDS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-002", + "difficulty": "medium", + "grid": [ + "#GOLF#", + "RECALL", + "UNTRUE", + "GRADES", + "SEVENS", + "#SORT#" + ], + "_answersAcross": [ + "1. GOLF", + "5. RECALL", + "7. UNTRUE", + "8. GRADES", + "9. SEVENS", + "10. SORT" + ], + "_answersDown": [ + "1. GENRES", + "2. OCTAVO", + "3. LARDER", + "4. FLUENT", + "5. RUGS", + "6. LESS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-003", + "difficulty": "medium", + "grid": [ + "#TAPS#", + "THROAT", + "ARISTO", + "TESTIS", + "ESTERS", + "#HARE#" + ], + "_answersAcross": [ + "1. TAPS", + "5. THROAT", + "7. ARISTO", + "8. TESTIS", + "9. ESTERS", + "10. HARE" + ], + "_answersDown": [ + "1. THRESH", + "2. ARISTA", + "3. POSTER", + "4. SATIRE", + "5. TATE", + "6. TOSS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-004", + "difficulty": "medium", + "grid": [ + "#WEST#", + "MISHAP", + "ATTIRE", + "CHARGE", + "SETTER", + "#REST#" + ], + "_answersAcross": [ + "1. WEST", + "5. MISHAP", + "7. ATTIRE", + "8. CHARGE", + "9. SETTER", + "10. REST" + ], + "_answersDown": [ + "1. WITHER", + "2. ESTATE", + "3. SHIRTS", + "4. TARGET", + "5. MACS", + "6. PEER" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-005", + "difficulty": "medium", + "grid": [ + "#SKIP#", + "TIARAS", + "ARROYO", + "LEANER", + "ENTIRE", + "#SECS#" + ], + "_answersAcross": [ + "1. SKIP", + "5. TIARAS", + "7. ARROYO", + "8. LEANER", + "9. ENTIRE", + "10. SECS" + ], + "_answersDown": [ + "1. SIRENS", + "2. KARATE", + "3. IRONIC", + "4. PAYERS", + "5. TALE", + "6. SORE" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-006", + "difficulty": "medium", + "grid": [ + "#WIGS#", + "CANOES", + "ASSURE", + "STARVE", + "TENDED", + "#DEED#" + ], + "_answersAcross": [ + "1. WIGS", + "5. CANOES", + "7. ASSURE", + "8. STARVE", + "9. TENDED", + "10. DEED" + ], + "_answersDown": [ + "1. WASTED", + "2. INSANE", + "3. GOURDE", + "4. SERVED", + "5. CAST", + "6. SEED" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-007", + "difficulty": "medium", + "grid": [ + "#WOOL#", + "PIPPIN", + "ALPINE", + "CLOAKS", + "TESTES", + "#DEED#" + ], + "_answersAcross": [ + "1. WOOL", + "5. PIPPIN", + "7. ALPINE", + "8. CLOAKS", + "9. TESTES", + "10. DEED" + ], + "_answersDown": [ + "1. WILLED", + "2. OPPOSE", + "3. OPIATE", + "4. LINKED", + "5. PACT", + "6. NESS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-008", + "difficulty": "medium", + "grid": [ + "#SEAL#", + "MIRROR", + "ARRIVE", + "LEASED", + "ENTERS", + "#SANS#" + ], + "_answersAcross": [ + "1. SEAL", + "5. MIRROR", + "7. ARRIVE", + "8. LEASED", + "9. ENTERS", + "10. SANS" + ], + "_answersDown": [ + "1. SIRENS", + "2. ERRATA", + "3. ARISEN", + "4. LOVERS", + "5. MALE", + "6. REDS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-009", + "difficulty": "medium", + "grid": [ + "#HARE#", + "PARENT", + "ARCADE", + "CRAVEN", + "TONERS", + "#WARS#" + ], + "_answersAcross": [ + "1. HARE", + "5. PARENT", + "7. ARCADE", + "8. CRAVEN", + "9. TONERS", + "10. WARS" + ], + "_answersDown": [ + "1. HARROW", + "2. ARCANA", + "3. REAVER", + "4. ENDERS", + "5. PACT", + "6. TENS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-010", + "difficulty": "medium", + "grid": [ + "#WAVE#", + "BARING", + "ALCOVE", + "SLALOM", + "HONEYS", + "#PETS#" + ], + "_answersAcross": [ + "1. WAVE", + "5. BARING", + "7. ALCOVE", + "8. SLALOM", + "9. HONEYS", + "10. PETS" + ], + "_answersDown": [ + "1. WALLOP", + "2. ARCANE", + "3. VIOLET", + "4. ENVOYS", + "5. BASH", + "6. GEMS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-011", + "difficulty": "medium", + "grid": [ + "#JEEP#", + "MENTAL", + "ASTUTE", + "GUIDES", + "SIRENS", + "#TEST#" + ], + "_answersAcross": [ + "1. JEEP", + "5. MENTAL", + "7. ASTUTE", + "8. GUIDES", + "9. SIRENS", + "10. TEST" + ], + "_answersDown": [ + "1. JESUIT", + "2. ENTIRE", + "3. ETUDES", + "4. PATENT", + "5. MAGS", + "6. LESS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-012", + "difficulty": "medium", + "grid": [ + "#ROOT#", + "COUPON", + "ATTIRE", + "PALAIS", + "STATES", + "#EYES#" + ], + "_answersAcross": [ + "1. ROOT", + "5. COUPON", + "7. ATTIRE", + "8. PALAIS", + "9. STATES", + "10. EYES" + ], + "_answersDown": [ + "1. ROTATE", + "2. OUTLAY", + "3. OPIATE", + "4. TORIES", + "5. CAPS", + "6. NESS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-013", + "difficulty": "medium", + "grid": [ + "#SAKE#", + "SERINE", + "ARISTA", + "MISSES", + "EATERY", + "#LOSS#" + ], + "_answersAcross": [ + "1. SAKE", + "5. SERINE", + "7. ARISTA", + "8. MISSES", + "9. EATERY", + "10. LOSS" + ], + "_answersDown": [ + "1. SERIAL", + "2. ARISTO", + "3. KISSES", + "4. ENTERS", + "5. SAME", + "6. EASY" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-014", + "difficulty": "medium", + "grid": [ + "#PINE#", + "LINENS", + "UPDATE", + "SPIRIT", + "TIGERS", + "#NODE#" + ], + "_answersAcross": [ + "1. PINE", + "5. LINENS", + "7. UPDATE", + "8. SPIRIT", + "9. TIGERS", + "10. NODE" + ], + "_answersDown": [ + "1. PIPPIN", + "2. INDIGO", + "3. NEARED", + "4. ENTIRE", + "5. LUST", + "6. SETS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-015", + "difficulty": "medium", + "grid": [ + "#RODS#", + "HEROES", + "ORACLE", + "PENILE", + "EAGLES", + "#DEER#" + ], + "_answersAcross": [ + "1. RODS", + "5. HEROES", + "7. ORACLE", + "8. PENILE", + "9. EAGLES", + "10. DEER" + ], + "_answersDown": [ + "1. REREAD", + "2. ORANGE", + "3. DOCILE", + "4. SELLER", + "5. HOPE", + "6. SEES" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-016", + "difficulty": "medium", + "grid": [ + "#WEBS#", + "LINEAR", + "ATTIRE", + "SHINES", + "TARGET", + "#LESS#" + ], + "_answersAcross": [ + "1. WEBS", + "5. LINEAR", + "7. ATTIRE", + "8. SHINES", + "9. TARGET", + "10. LESS" + ], + "_answersDown": [ + "1. WITHAL", + "2. ENTIRE", + "3. BEINGS", + "4. SAREES", + "5. LAST", + "6. REST" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-017", + "difficulty": "medium", + "grid": [ + "#SAYS#", + "HERETO", + "EXILED", + "MISLED", + "PETERS", + "#RODS#" + ], + "_answersAcross": [ + "1. SAYS", + "5. HERETO", + "7. EXILED", + "8. MISLED", + "9. PETERS", + "10. RODS" + ], + "_answersDown": [ + "1. SEXIER", + "2. ARISTO", + "3. YELLED", + "4. STEERS", + "5. HEMP", + "6. ODDS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-018", + "difficulty": "medium", + "grid": [ + "#BASE#", + "BURLAP", + "ERRATA", + "EDITED", + "FEVERS", + "#NESS#" + ], + "_answersAcross": [ + "1. BASE", + "5. BURLAP", + "7. ERRATA", + "8. EDITED", + "9. FEVERS", + "10. NESS" + ], + "_answersDown": [ + "1. BURDEN", + "2. ARRIVE", + "3. SLATES", + "4. EATERS", + "5. BEEF", + "6. PADS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-019", + "difficulty": "medium", + "grid": [ + "#ROLE#", + "REPEAL", + "ARISTA", + "TEASER", + "EATERS", + "#DENY#" + ], + "_answersAcross": [ + "1. ROLE", + "5. REPEAL", + "7. ARISTA", + "8. TEASER", + "9. EATERS", + "10. DENY" + ], + "_answersDown": [ + "1. REREAD", + "2. OPIATE", + "3. LESSEN", + "4. EATERY", + "5. RATE", + "6. LARS" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "medium-020", + "difficulty": "medium", + "grid": [ + "#BLEW#", + "PRISON", + "RATTLE", + "OCTAVE", + "MELTED", + "#SEES#" + ], + "_answersAcross": [ + "1. BLEW", + "5. PRISON", + "7. RATTLE", + "8. OCTAVE", + "9. MELTED", + "10. SEES" + ], + "_answersDown": [ + "1. BRACES", + "2. LITTLE", + "3. ESTATE", + "4. WOLVES", + "5. PROM", + "6. NEED" + ], + "across": [ + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-001", + "difficulty": "hard", + "grid": [ + "##CAP##", + "#FADES#", + "CANDLES", + "ART#LIE", + "REAGENT", + "#STATE#", + "##ASS##" + ], + "_answersAcross": [ + "1. CAP", + "4. FADES", + "6. CANDLES", + "8. ART", + "9. LIE", + "10. REAGENT", + "12. STATE", + "13. ASS" + ], + "_answersDown": [ + "1. CANTATA", + "2. ADD", + "3. PELLETS", + "4. FARES", + "5. SEINE", + "6. CAR", + "7. SET", + "11. GAS" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-002", + "difficulty": "hard", + "grid": [ + "##TWO##", + "#POEMS#", + "TIDBITS", + "AND#TEA", + "BELATED", + "#SEVER#", + "##RED##" + ], + "_answersAcross": [ + "1. TWO", + "4. POEMS", + "6. TIDBITS", + "8. AND", + "9. TEA", + "10. BELATED", + "12. SEVER", + "13. RED" + ], + "_answersDown": [ + "1. TODDLER", + "2. WEB", + "3. OMITTED", + "4. PINES", + "5. STEER", + "6. TAB", + "7. SAD", + "11. AVE" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-003", + "difficulty": "hard", + "grid": [ + "##GNU##", + "#BOOTH#", + "HEARTED", + "ALL#ERA", + "STIRRED", + "#SEALS#", + "##SPY##" + ], + "_answersAcross": [ + "1. GNU", + "4. BOOTH", + "6. HEARTED", + "8. ALL", + "9. ERA", + "10. STIRRED", + "12. SEALS", + "13. SPY" + ], + "_answersDown": [ + "1. GOALIES", + "2. NOR", + "3. UTTERLY", + "4. BELTS", + "5. HERES", + "6. HAS", + "7. DAD", + "11. RAP" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-004", + "difficulty": "hard", + "grid": [ + "##TOP##", + "#CHAOS#", + "PARKWAY", + "AGO#DIE", + "REAGENT", + "#START#", + "##SPY##" + ], + "_answersAcross": [ + "1. TOP", + "4. CHAOS", + "6. PARKWAY", + "8. AGO", + "9. DIE", + "10. REAGENT", + "12. START", + "13. SPY" + ], + "_answersDown": [ + "1. THROATS", + "2. OAK", + "3. POWDERY", + "4. CAGES", + "5. SAINT", + "6. PAR", + "7. YET", + "11. GAP" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-005", + "difficulty": "hard", + "grid": [ + "##THE##", + "#HEIRS#", + "LETTUCE", + "ERA#DEN", + "TENDING", + "#SUITE#", + "##SEE##" + ], + "_answersAcross": [ + "1. THE", + "4. HEIRS", + "6. LETTUCE", + "8. ERA", + "9. DEN", + "10. TENDING", + "12. SUITE", + "13. SEE" + ], + "_answersDown": [ + "1. TETANUS", + "2. HIT", + "3. ERUDITE", + "4. HERES", + "5. SCENE", + "6. LET", + "7. ENG", + "11. DIE" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-006", + "difficulty": "hard", + "grid": [ + "##ROB##", + "#TENOR#", + "RIPENED", + "ALL#FAR", + "WEARILY", + "#SCARS#", + "##EYE##" + ], + "_answersAcross": [ + "1. ROB", + "4. TENOR", + "6. RIPENED", + "8. ALL", + "9. FAR", + "10. WEARILY", + "12. SCARS", + "13. EYE" + ], + "_answersDown": [ + "1. REPLACE", + "2. ONE", + "3. BONFIRE", + "4. TILES", + "5. REALS", + "6. RAW", + "7. DRY", + "11. RAY" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-007", + "difficulty": "hard", + "grid": [ + "##WAS##", + "#FILMS#", + "RECLAME", + "OAK#RAY", + "BRISTLE", + "#SNELL#", + "##GAY##" + ], + "_answersAcross": [ + "1. WAS", + "4. FILMS", + "6. RECLAME", + "8. OAK", + "9. RAY", + "10. BRISTLE", + "12. SNELL", + "13. GAY" + ], + "_answersDown": [ + "1. WICKING", + "2. ALL", + "3. SMARTLY", + "4. FEARS", + "5. SMALL", + "6. ROB", + "7. EYE", + "11. SEA" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-008", + "difficulty": "hard", + "grid": [ + "##DOS##", + "#BEAMS#", + "ROCKING", + "EAR#TEA", + "GREATLY", + "#DEVEL#", + "##DEN##" + ], + "_answersAcross": [ + "1. DOS", + "4. BEAMS", + "6. ROCKING", + "8. EAR", + "9. TEA", + "10. GREATLY", + "12. DEVEL", + "13. DEN" + ], + "_answersDown": [ + "1. DECREED", + "2. OAK", + "3. SMITTEN", + "4. BOARD", + "5. SNELL", + "6. REG", + "7. GAY", + "11. AVE" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-009", + "difficulty": "hard", + "grid": [ + "##SUE##", + "#SUPRA#", + "MARSALA", + "OFF#SEC", + "MEASURE", + "#SCART#", + "##EYE##" + ], + "_answersAcross": [ + "1. SUE", + "4. SUPRA", + "6. MARSALA", + "8. OFF", + "9. SEC", + "10. MEASURE", + "12. SCART", + "13. EYE" + ], + "_answersDown": [ + "1. SURFACE", + "2. UPS", + "3. ERASURE", + "4. SAFES", + "5. ALERT", + "6. MOM", + "7. ACE", + "11. SAY" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-010", + "difficulty": "hard", + "grid": [ + "##BIZ##", + "#RULED#", + "PARLORS", + "EVE#LEE", + "REALIST", + "#SUITS#", + "##SEE##" + ], + "_answersAcross": [ + "1. BIZ", + "4. RULED", + "6. PARLORS", + "8. EVE", + "9. LEE", + "10. REALIST", + "12. SUITS", + "13. SEE" + ], + "_answersDown": [ + "1. BUREAUS", + "2. ILL", + "3. ZEOLITE", + "4. RAVES", + "5. DRESS", + "6. PER", + "7. SET", + "11. LIE" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-011", + "difficulty": "hard", + "grid": [ + "##SUN##", + "#CAPES#", + "TRUSTEE", + "OUT#TIN", + "MEETING", + "#LEONE#", + "##DOG##" + ], + "_answersAcross": [ + "1. SUN", + "4. CAPES", + "6. TRUSTEE", + "8. OUT", + "9. TIN", + "10. MEETING", + "12. LEONE", + "13. DOG" + ], + "_answersDown": [ + "1. SAUTEED", + "2. UPS", + "3. NETTING", + "4. CRUEL", + "5. SEINE", + "6. TOM", + "7. ENG", + "11. TOO" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-012", + "difficulty": "hard", + "grid": [ + "##JOE##", + "#POPPY#", + "BASTION", + "ARE#SUE", + "RAPPORT", + "#SHEDS#", + "##SEE##" + ], + "_answersAcross": [ + "1. JOE", + "4. POPPY", + "6. BASTION", + "8. ARE", + "9. SUE", + "10. RAPPORT", + "12. SHEDS", + "13. SEE" + ], + "_answersDown": [ + "1. JOSEPHS", + "2. OPT", + "3. EPISODE", + "4. PARAS", + "5. YOURS", + "6. BAR", + "7. NET", + "11. PEE" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-013", + "difficulty": "hard", + "grid": [ + "##DOS##", + "#DIALS#", + "LUCKILY", + "ACT#DIE", + "STATICS", + "#STINK#", + "##ENG##" + ], + "_answersAcross": [ + "1. DOS", + "4. DIALS", + "6. LUCKILY", + "8. ACT", + "9. DIE", + "10. STATICS", + "12. STINK", + "13. ENG" + ], + "_answersDown": [ + "1. DICTATE", + "2. OAK", + "3. SLIDING", + "4. DUCTS", + "5. SLICK", + "6. LAS", + "7. YES", + "11. TIN" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-014", + "difficulty": "hard", + "grid": [ + "##PIN##", + "#PACED#", + "FORESEE", + "ART#TAG", + "TEASING", + "#SKINS#", + "##ENG##" + ], + "_answersAcross": [ + "1. PIN", + "4. PACED", + "6. FORESEE", + "8. ART", + "9. TAG", + "10. TEASING", + "12. SKINS", + "13. ENG" + ], + "_answersDown": [ + "1. PARTAKE", + "2. ICE", + "3. NESTING", + "4. PORES", + "5. DEANS", + "6. FAT", + "7. EGG", + "11. SIN" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-015", + "difficulty": "hard", + "grid": [ + "##TEE##", + "#NAVAL#", + "METERED", + "EAT#TWO", + "TROPHIC", + "#SORES#", + "##SON##" + ], + "_answersAcross": [ + "1. TEE", + "4. NAVAL", + "6. METERED", + "8. EAT", + "9. TWO", + "10. TROPHIC", + "12. SORES", + "13. SON" + ], + "_answersDown": [ + "1. TATTOOS", + "2. EVE", + "3. EARTHEN", + "4. NEARS", + "5. LEWIS", + "6. MET", + "7. DOC", + "11. PRO" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-016", + "difficulty": "hard", + "grid": [ + "##NOR##", + "#SONAR#", + "VINEGAR", + "ADS#TIE", + "RETAINS", + "#DORMS#", + "##PEE##" + ], + "_answersAcross": [ + "1. NOR", + "4. SONAR", + "6. VINEGAR", + "8. ADS", + "9. TIE", + "10. RETAINS", + "12. DORMS", + "13. PEE" + ], + "_answersDown": [ + "1. NONSTOP", + "2. ONE", + "3. RAGTIME", + "4. SIDED", + "5. RAINS", + "6. VAR", + "7. RES", + "11. ARE" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-017", + "difficulty": "hard", + "grid": [ + "##ICE##", + "#SNORT#", + "PLENARY", + "EAR#SUE", + "ENTRUST", + "#TIERS#", + "##AGE##" + ], + "_answersAcross": [ + "1. ICE", + "4. SNORT", + "6. PLENARY", + "8. EAR", + "9. SUE", + "10. ENTRUST", + "12. TIERS", + "13. AGE" + ], + "_answersDown": [ + "1. INERTIA", + "2. CON", + "3. ERASURE", + "4. SLANT", + "5. TRUSS", + "6. PEE", + "7. YET", + "11. REG" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-018", + "difficulty": "hard", + "grid": [ + "##CHI##", + "#POEMS#", + "COURIER", + "ASP#TEE", + "RELOADS", + "#RENTS#", + "##SEE##" + ], + "_answersAcross": [ + "1. CHI", + "4. POEMS", + "6. COURIER", + "8. ASP", + "9. TEE", + "10. RELOADS", + "12. RENTS", + "13. SEE" + ], + "_answersDown": [ + "1. COUPLES", + "2. HER", + "3. IMITATE", + "4. POSER", + "5. SEEDS", + "6. CAR", + "7. RES", + "11. ONE" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-019", + "difficulty": "hard", + "grid": [ + "##CAP##", + "#DONOR#", + "MANDREL", + "ART#TEA", + "CERTIFY", + "#DOWNS#", + "##LOG##" + ], + "_answersAcross": [ + "1. CAP", + "4. DONOR", + "6. MANDREL", + "8. ART", + "9. TEA", + "10. CERTIFY", + "12. DOWNS", + "13. LOG" + ], + "_answersDown": [ + "1. CONTROL", + "2. AND", + "3. PORTING", + "4. DARED", + "5. REEFS", + "6. MAC", + "7. LAY", + "11. TWO" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + { + "id": "hard-020", + "difficulty": "hard", + "grid": [ + "##WEB##", + "#MINER#", + "RIDDLED", + "ENG#AGO", + "FIESTAS", + "#STEEL#", + "##SAD##" + ], + "_answersAcross": [ + "1. WEB", + "4. MINER", + "6. RIDDLED", + "8. ENG", + "9. AGO", + "10. FIESTAS", + "12. STEEL", + "13. SAD" + ], + "_answersDown": [ + "1. WIDGETS", + "2. END", + "3. BELATED", + "4. MINIS", + "5. REGAL", + "6. REF", + "7. DOS", + "11. SEA" + ], + "across": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "down": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + } +] \ No newline at end of file diff --git a/server/data/crosswords/minicrossword.json b/server/data/crosswords/minicrossword.json index 19d48c0..dd892d0 100644 --- a/server/data/crosswords/minicrossword.json +++ b/server/data/crosswords/minicrossword.json @@ -2,286 +2,209 @@ { "id": "easy-001", "difficulty": "easy", - "grid": ["APART", "POWER", "AWARE", "RERUN", "TREND"], + "grid": ["#BLAH", "SLAVE", "CANAL", "AMEND", "REST#"], "across": [ - "Separated, as two people", - "Electrical energy", - "Conscious of; in the know", - "TV episode shown again", - "Current fashion or direction" + "Dull and uninspiring", + "One forced to work for no pay", + "Panama waterway", + "Change, as a law", + "Take a break" ], "down": [ - "Not together", - "Strength or might", - "Mindful", - "Summer TV staple", - "What goes viral, perhaps" + "Point the finger at", + "Bowling alley divisions", + "___-garde (cutting-edge)", + "Gripped tightly", + "Mark left by a healed wound" ] }, { - "id": "easy-002", + "id": "easy-008", "difficulty": "easy", - "grid": ["SMART", "POLAR", "OLIVE", "RAVEN", "TREND"], + "grid": ["WATCH", "AWARE", "SABER", "PILED", "STEPS"], "across": [ - "Clever", - "Like a bear at the North Pole", - "Green martini garnish", - "Edgar Allan Poe's black bird", - "Hot new fashion" + "Wrist timepiece", + "In the know", + "Fencing sword", + "Stacked up", + "Stairs, individually" ], "down": [ - "Baseball or soccer, e.g.", - "Back tooth", - "Living and breathing", - "Glossy black bird", - "Topic that's taking off online" + "Stinging insects", + "Wait for", + "Dining room furniture", + "Move slowly and stealthily", + "Cattle groups" ] }, { - "id": "easy-003", + "id": "easy-009", "difficulty": "easy", - "grid": ["START", "THROW", "ARGUE", "ROUTE", "TWEED"], + "grid": ["#TONE", "PERIL", "URGES", "BRACE", "SANE#"], "across": [ - "Begin", - "Toss a ball", - "Quarrel", - "Path a bus takes", - "Rough wool fabric for jackets" + "Muscle firmness, or vocal quality", + "Grave danger", + "Strongly encourages", + "Support for a sprained joint", + "Of sound mind" ], "down": [ - "A race's beginning", - "Pitch, as a baseball", - "Bicker", - "Mail carrier's territory", - "Tweedy jacket cloth" + "___ firma (solid ground)", + "Church keyboard instrument", + "Your sibling's daughter", + "Or ___ (otherwise)", + "Spots for a pint" ] }, { - "id": "easy-004", + "id": "easy-018", "difficulty": "easy", - "grid": ["CLOSE", "LLAMA", "OASIS", "SMILE", "EASEL"], + "grid": ["#FIRE", "COCOA", "ALIAS", "LINDY", "LOGS#"], "across": [ - "Shut, as a door", - "Andean pack animal", - "Green spot in the desert", - "Happy expression", - "Painter's stand" + "Campsite blaze", + "Hot ___ (cozy winter drink)", + "Assumed name", + "___ Hop (jazz-era swing dance)", + "Firewood pieces" ], "down": [ - "Nearby", - "Spitting Andean beast", - "Desert refuge", - "What a camera asks you to do", - "Stand for a canvas" + "Large book-page size", + "Sugary cake topping", + "Routes for cars", + "Not difficult", + "Ring up on the phone" ] }, { - "id": "easy-005", + "id": "easy-020", "difficulty": "easy", - "grid": ["MAPLE", "AGAIN", "PAINT", "LINER", "ENTRY"], + "grid": ["#PILE", "GENOA", "RADAR", "ACIDS", "BEES#"], "across": [ - "Syrup-producing tree", - "Once more", - "What an artist applies", - "Big cruise ship", - "Doorway, or a diary post" + "Big heap", + "Italian port city", + "Speed-gun technology", + "Bases' chemical opposites", + "Hive dwellers" ], "down": [ - "Tree on Canada's flag", - "Time and time ___", - "Wall color in a can", - "Ocean-crossing vessel", - "Way in" + "Opposite of war", + "Like non-mainstream music", + "Tons; a whole lot", + "Corn units, or hearing organs", + "Snatch quickly" ] }, { - "id": "medium-001", + "id": "medium-020", "difficulty": "medium", - "grid": ["DROVE", "RAVEN", "OVERT", "VERVE", "ENTER"], + "grid": ["#BLEW#", "PRISON", "RATTLE", "OCTAVE", "MELTED", "#SEES#"], "across": [ - "Operated the car; also, a herd", - "Bird that quoth 'Nevermore'", - "Out in the open, not hidden", - "Energy and enthusiasm", - "Key pressed to confirm" + "Past tense of \"blow\"", + "Place for inmates", + "Baby's shaking toy", + "Span of eight musical notes", + "Turned to liquid, as ice", + "Lays eyes on" ], "down": [ - "Chauffeured", - "Corvid in a Poe poem", - "Undisguised", - "Pep and flair", - "Go in" + "Teeth straighteners", + "Not much; small", + "Large property with a mansion", + "Pack animals that howl", + "High school spring dance", + "Require" ] }, { - "id": "medium-002", + "id": "medium-008", "difficulty": "medium", - "grid": ["GRASP", "RUMOR", "AMPLE", "SOLVE", "PREEN"], + "grid": ["#SEAL#", "MIRROR", "ARRIVE", "LEASED", "ENTERS", "#SANS#"], "across": [ - "Grip firmly; comprehend", - "Unverified bit of gossip", - "More than enough", - "Crack, as a puzzle", - "Groom feathers, as a bird does" + "Whiskered arctic swimmer", + "Bathroom reflector", + "Reach a destination", + "Rented out", + "Goes inside", + "Without, in French" ], "down": [ - "Get a handle on", - "Word on the street", - "Plentiful", - "Figure out", - "Primp" - ] - }, - { - "id": "medium-003", - "difficulty": "medium", - "grid": ["SHADE", "HELIX", "ALIVE", "RIVER", "EXERT"], - "across": [ - "Shadow cast by a tree", - "DNA's spiral shape", - "Not dead", - "The Nile or the Amazon", - "Put forth, as effort" - ], - "down": [ - "Portion; or post online", - "Double ___ (DNA structure)", - "Kicking, so to speak", - "One leaping off a board", - "Apply, as force" + "Ambulance wailers", + "List of printed errors", + "Gotten up out of bed", + "Romantic partners", + "Not female", + "Crimson shades" ] }, { "id": "medium-004", "difficulty": "medium", - "grid": ["CRANE", "RESIN", "ASSET", "NIECE", "ENTER"], + "grid": ["#WEST#", "MISHAP", "ATTIRE", "CHARGE", "SETTER", "#REST#"], "across": [ - "Construction lifting machine; or a tall bird", - "Sticky secretion that becomes amber", - "Valuable item on a balance sheet", - "Your sibling's daughter", - "Type in, as data" + "Sunset direction", + "Minor accident", + "Clothing; an outfit", + "Put on a credit card", + "Irish ___ (long-haired dog)", + "The remainder" ], "down": [ - "Stretch the neck to see", - "Pine-tree ooze", - "A plus on the books", - "Nephew's sister", - "Walk into a room" - ] - }, - { - "id": "medium-005", - "difficulty": "medium", - "grid": ["EVADE", "VEGAN", "AGENT", "DANCE", "ENTER"], - "across": [ - "Dodge, as a question", - "One who eats no animal products", - "Spy, or an actor's rep", - "Waltz or tango", - "Sign up for, as a contest" - ], - "down": [ - "Slip away from", - "Plant-based eater", - "007, for one", - "Boogie", - "Join, as a race" - ] - }, - { - "id": "hard-001", - "difficulty": "hard", - "grid": ["CRONE", "RIVAL", "OVOID", "NAIVE", "ELDER"], - "across": [ - "Witchy old woman of folklore", - "Competitor to beat", - "Egg-shaped", - "Innocently unworldly", - "Respected senior; also a berry bush" - ], - "down": [ - "Hag of fairy tales", - "Archnemesis", - "Like an egg's outline", - "Wet behind the ears", - "Tribal sage" + "Shrivel and dry up", + "Inherited property", + "Closet hang-ups", + "Bullseye holder", + "Apple computers", + "Look closely" ] }, { "id": "hard-002", "difficulty": "hard", - "grid": ["GRUFF", "RIVER", "UVULA", "FELON", "FRANK"], + "grid": ["##TWO##", "#POEMS#", "TIDBITS", "AND#TEA", "BELATED", "#SEVER#", "##RED##"], "across": [ - "Brusque and surly", - "The Mississippi, for one", - "Dangly bit at the back of the throat", - "Convicted criminal", - "Candidly blunt; or a hot dog" + "Number after one", + "Verses by Emily Dickinson", + "Small, tasty morsels", + "Plus", + "Afternoon British drink", + "Late, as a birthday card", + "Cut off completely", + "Stop sign's color" ], "down": [ - "Hoarse and curt", - "Flowing waterway", - "Throat's little hanging punching bag", - "One with a rap sheet", - "Straight-talking; ballpark sausage" + "Child just learning to walk", + "Spider's silken trap", + "Left out", + "Evergreen trees", + "Guide a car", + "Bar bill", + "Feeling blue", + "Street: Abbr." ] }, { - "id": "hard-003", + "id": "hard-014", "difficulty": "hard", - "grid": ["PLUMB", "LUNAR", "UNTIE", "MAIZE", "BREED"], + "grid": ["##PIN##", "#PACED#", "FORESEE", "ART#TAG", "TEASING", "#SKINS#", "##ENG##"], "across": [ - "Measure the depth of; dead vertical", - "Of the moon", - "Loosen, as shoelaces", - "Corn, by another name", - "Raise animals; a dog variety" + "Bowling target", + "Walked back and forth nervously", + "Predict in advance", + "Museum display", + "Playground chasing game", + "Good-natured ribbing", + "Potato jackets", + "English: Abbr." ], "down": [ - "Perfectly upright", - "___ eclipse", - "Undo a knot", - "Native American staple grain", - "Labrador or poodle, e.g." - ] - }, - { - "id": "hard-004", - "difficulty": "hard", - "grid": ["SARGE", "ACORN", "ROBOT", "GROVE", "ENTER"], - "across": [ - "Nickname for a drill instructor", - "Oak tree's nut", - "Automaton like R2-D2", - "Small cluster of trees", - "Make an entrance" - ], - "down": [ - "Boot-camp boss, informally", - "Squirrel's buried snack", - "Mechanical worker", - "Orange ___ in Florida", - "Step inside" - ] - }, - { - "id": "hard-005", - "difficulty": "hard", - "grid": ["SHALE", "HELIX", "ALIVE", "LIVER", "EXERT"], - "across": [ - "Rock that yields oil and gas", - "Spiral, as of DNA", - "Full of life", - "Organ that filters toxins", - "Bring to bear, as influence" - ], - "down": [ - "Sedimentary fracking rock", - "Corkscrew shape", - "Among the living", - "Onions' classic skillet partner", - "Wield, as pressure" + "Join in; participate", + "Frozen water", + "What birds do in spring", + "Tiny skin openings", + "College administrators", + "Not lean", + "Breakfast protein source", + "Commandment breaker" ] } ] diff --git a/server/data/wordlists/common.txt b/server/data/wordlists/common.txt new file mode 100644 index 0000000..2d9ba38 --- /dev/null +++ b/server/data/wordlists/common.txt @@ -0,0 +1,16164 @@ +THE +AND +FOR +THAT +THIS +WITH +YOU +NOT +ARE +FROM +YOUR +ALL +HAVE +NEW +MORE +WAS +WILL +HOME +CAN +ABOUT +PAGE +HAS +SEARCH +FREE +BUT +OUR +ONE +OTHER +TIME +THEY +SITE +MAY +WHAT +WHICH +THEIR +NEWS +OUT +USE +ANY +THERE +SEE +ONLY +HIS +WHEN +CONTACT +HERE +WHO +WEB +ALSO +NOW +HELP +GET +VIEW +FIRST +BEEN +WOULD +HOW +WERE +SOME +THESE +CLICK +ITS +LIKE +SERVICE +THAN +FIND +PRICE +DATE +BACK +TOP +PEOPLE +HAD +LIST +NAME +JUST +OVER +STATE +YEAR +DAY +INTO +TWO +HEALTH +WORLD +NEXT +USED +WORK +LAST +MOST +MUSIC +BUY +DATA +MAKE +THEM +SHOULD +PRODUCT +SYSTEM +POST +HER +CITY +ADD +POLICY +NUMBER +SUCH +PLEASE +SUPPORT +MESSAGE +AFTER +BEST +THEN +GOOD +VIDEO +WELL +WHERE +INFO +RIGHTS +PUBLIC +BOOKS +HIGH +SCHOOL +THROUGH +EACH +LINKS +SHE +REVIEW +YEARS +ORDER +VERY +PRIVACY +BOOK +ITEMS +COMPANY +READ +GROUP +SEX +NEED +MANY +USER +SAID +DOES +SET +UNDER +GENERAL +MAIL +FULL +MAP +REVIEWS +PROGRAM +LIFE +KNOW +GAMES +WAY +DAYS +PART +COULD +GREAT +UNITED +HOTEL +REAL +ITEM +CENTER +MUST +STORE +TRAVEL +MADE +REPORT +OFF +MEMBER +DETAILS +LINE +TERMS +BEFORE +HOTELS +DID +SEND +RIGHT +TYPE +BECAUSE +LOCAL +THOSE +USING +RESULTS +OFFICE +CAR +DESIGN +TAKE +POSTED +ADDRESS +WITHIN +STATES +AREA +WANT +PHONE +SUBJECT +BETWEEN +FORUM +FAMILY +LONG +BASED +CODE +SHOW +EVEN +BLACK +CHECK +SPECIAL +PRICES +INDEX +BEING +WOMEN +MUCH +SIGN +FILE +LINK +OPEN +TODAY +SOUTH +CASE +PROJECT +SAME +PAGES +VERSION +SECTION +OWN +FOUND +SPORTS +HOUSE +RELATED +BOTH +COUNTY +PHOTO +GAME +MEMBERS +POWER +WHILE +CARE +NETWORK +DOWN +SYSTEMS +THREE +TOTAL +PLACE +END +HIM +WITHOUT +PER +ACCESS +THINK +NORTH +CURRENT +POSTS +BIG +MEDIA +LAW +CONTROL +WATER +HISTORY +SIZE +ART +SINCE +GUIDE +SHOP +BOARD +CHANGE +WHITE +TEXT +SMALL +RATING +RATE +DURING +RETURN +ACCOUNT +TIMES +SITES +LEVEL +DIGITAL +PROFILE +FORM +EVENTS +LOVE +OLD +JOHN +MAIN +CALL +HOURS +IMAGE +TITLE +ANOTHER +WHY +SHALL +CLASS +STILL +MONEY +QUALITY +EVERY +LISTING +CONTENT +COUNTRY +PRIVATE +LITTLE +VISIT +SAVE +TOOLS +LOW +REPLY +COMPARE +MOVIES +INCLUDE +COLLEGE +VALUE +ARTICLE +MAN +CARD +JOBS +PROVIDE +FOOD +SOURCE +AUTHOR +PRESS +LEARN +SALE +AROUND +PRINT +COURSE +JOB +PROCESS +TEEN +ROOM +STOCK +TOO +CREDIT +POINT +JOIN +SCIENCE +MEN +WEST +SALES +LOOK +ENGLISH +LEFT +TEAM +ESTATE +BOX +SELECT +WINDOWS +PHOTOS +GAY +THREAD +WEEK +NOTE +LIVE +LARGE +GALLERY +TABLE +HOWEVER +MARKET +LIBRARY +REALLY +ACTION +START +SERIES +MODEL +AIR +PLAN +HUMAN +YES +SECOND +HOT +COST +MOVIE +FORUMS +MARCH +BETTER +SAY +YAHOO +GOING +MEDICAL +TEST +FRIEND +COME +SERVER +STUDY +CART +STAFF +AGAIN +PLAY +LOOKING +ISSUES +NEVER +USERS +STREET +TOPIC +COMMENT +THINGS +WORKING +AGAINST +TAX +PERSON +BELOW +MOBILE +LESS +GOT +PARTY +PAYMENT +STUDENT +LET +OFFERS +LEGAL +ABOVE +RECENT +PARK +STORES +SIDE +ACT +PROBLEM +RED +GIVE +MEMORY +SOCIAL +AUGUST +QUOTE +STORY +SELL +OPTIONS +RATES +CREATE +KEY +BODY +YOUNG +FIELD +FEW +EAST +PAPER +SINGLE +AGE +CLUB +EXAMPLE +GIRLS +LATEST +ROAD +GIFT +CHANGES +NIGHT +HARD +TEXAS +PAY +FOUR +POKER +STATUS +BROWSE +ISSUE +RANGE +SELLER +COURT +ALWAYS +RESULT +AUDIO +LIGHT +WRITE +WAR +OFFER +BLUE +GROUPS +EASY +GIVEN +FILES +EVENT +RELEASE +REQUEST +FAX +CHINA +MAKING +PICTURE +NEEDS +MIGHT +YET +MONTH +MAJOR +STAR +AREAS +FUTURE +SPACE +HAND +SUN +CARDS +MEETING +BECOME +CHILD +KEEP +ENTER +PORN +SHARE +SIMILAR +GARDEN +SCHOOLS +MILLION +ADDED +LISTED +BABY +ENERGY +RUN +NET +POPULAR +TERM +FILM +STORIES +PUT +JOURNAL +REPORTS +TRY +WELCOME +CENTRAL +IMAGES +NOTICE +GOD +HEAD +RADIO +UNTIL +CELL +COLOR +SELF +COUNCIL +AWAY +TRACK +ARCHIVE +ONCE +OTHERS +FORMAT +LEAST +SOCIETY +MONTHS +LOG +SAFETY +FRIENDS +SURE +TRADE +EDITION +CARS +TELL +FURTHER +UPDATED +ABLE +HAVING +FUN +ALREADY +GREEN +STUDIES +CLOSE +COMMON +DRIVE +SEVERAL +GOLD +LIVING +CALLED +SHORT +ARTS +LOT +ASK +DISPLAY +LIMITED +POWERED +MEANS +DAILY +BEACH +PAST +NATURAL +WHETHER +DUE +FIVE +UPON +PERIOD +SAYS +WEATHER +MAR +LAND +AVERAGE +DONE +WINDOW +PRO +REGION +ISLAND +RECORD +DIRECT +RECORDS +COSTS +STYLE +FRONT +UPDATE +PARTS +EVER +EARLY +MILES +SOUND +PRESENT +EITHER +AGO +WORD +WORKS +BILL +WRITTEN +TALK +FEDERAL +HOSTING +RULES +FINAL +ADULT +TICKETS +THING +CENTRE +VIA +CHEAP +NUDE +KIDS +FINANCE +TRUE +MINUTES +ELSE +MARK +THIRD +ROCK +GIFTS +READING +TOPICS +BAD +TIPS +PLUS +AUTO +COVER +USUALLY +EDIT +VIDEOS +PERCENT +FAST +FACT +UNIT +GETTING +GLOBAL +MEET +FAR +PLAYER +LYRICS +OFTEN +SUBMIT +AMOUNT +WATCH +FEEL +THOUGH +BANK +RISK +THANKS +DEALS +VARIOUS +WORDS +WEIGHT +TOWN +HEART +CHOOSE +POINTS +ERROR +CAMERA +JUN +GIRL +TOYS +CLEAR +GOLF +RECEIVE +DOMAIN +METHODS +CHAPTER +MAKES +LOAN +WIDE +BEAUTY +MANAGER +TAKEN +SORT +MODELS +KNOWN +HALF +CASES +STEP +SIMPLE +QUICK +NONE +LICENSE +LAKE +WHOLE +ANNUAL +LATER +BASIC +SHOWS +CHURCH +METHOD +ACTIVE +FIGURE +FIRE +HOLIDAY +CHAT +ENOUGH +ALONG +AMONG +DEATH +WRITING +SPEED +LOSS +FACE +BRAND +HIGHER +EFFECTS +CREATED +OIL +BIT +YELLOW +KINGDOM +BASE +NEAR +THOUGHT +STUFF +FRENCH +STORAGE +JAPAN +DOING +LOANS +SHOES +ENTRY +STAY +NATURE +ORDERS +SUMMARY +TURN +MEAN +GROWTH +NOTES +AGENCY +KING +COPY +DRUG +PICS +WESTERN +INCOME +FORCE +CASH +OVERALL +BAY +RIVER +PACKAGE +SEEN +PLAYERS +ENGINE +PORT +ALBUM +STOP +STARTED +BAR +VIEWS +PLANS +DOUBLE +DOG +BUILD +SCREEN +TYPES +SOON +LINES +ACROSS +NEEDED +SEASON +APPLY +SOMEONE +HELD +PRINTER +BELIEVE +EFFECT +ASKED +MIND +CASINO +LOST +TOUR +MENU +VOLUME +CROSS +ANYONE +HOPE +SILVER +WISH +INSIDE +MATURE +ROLE +RATHER +WEEKS +CAME +SUPPLY +NOTHING +CERTAIN +RUNNING +LOWER +UNION +JEWELRY +MON +FINE +NAMES +HOUR +GAS +SKILLS +SIX +BUSH +ISLANDS +ADVICE +CAREER +RENTAL +LEAVE +TEENS +HUGE +SAT +WOMAN +ZIP +BID +KIND +SELLERS +MIDDLE +MOVE +CABLE +TAKING +VALUES +COMING +OBJECT +LESBIAN +MACHINE +LOGO +LENGTH +NICE +SCORE +CLIENT +RETURNS +CAPITAL +FOLLOW +SAMPLE +SENT +SHOWN +CULTURE +BAND +FLASH +LEAD +CHOICE +WENT +COURSES +AIRPORT +FOREIGN +ARTIST +OUTSIDE +LEVELS +CHANNEL +LETTER +MODE +PHONES +IDEAS +FUND +SUMMER +ALLOW +DEGREE +BUTTON +WED +HOMES +SUPER +MALE +MATTER +CUSTOM +ALMOST +TOOK +LOCATED +EDITOR +INN +CAUSE +SONG +FOCUS +LATE +FALL +IDEA +ROOMS +FEMALE +WIN +PRIMARY +CANCER +NUMBERS +REASON +TOOL +BROWSER +SPRING +ANSWER +VOICE +PURPOSE +FEATURE +BED +COMES +POLICE +CAMERAS +BROWN +HILL +MAPS +DEAL +HOLD +RATINGS +FORMS +GLASS +HAPPY +SMITH +WANTED +THANK +SAFE +UNIQUE +SURVEY +PRIOR +SPORT +READY +FEED +ANIMAL +SOURCES +REGULAR +SECURE +ASS +SIMPLY +STATION +ROUND +OPTION +MASTER +VALLEY +RENTALS +SEA +BUILT +BLOOD +CUT +IMPROVE +HALL +LARGER +ANTI +EARTH +PARENTS +IMPACT +KITCHEN +STRONG +TEL +WEDDING +GROUND +SHIP +OWNERS +DISEASE +PAID +PERFECT +HAIR +KIT +CLASSIC +BASIS +COMMAND +CITIES +EXPRESS +ANAL +AWARD +TREE +PETER +ENSURE +THUS +WALL +EXTRA +PUSSY +BUDGET +RATED +GUIDES +SUCCESS +MAXIMUM +QUITE +BOY +AMAZON +WARNING +WINE +HORSE +VOTE +FORWARD +FLOWERS +STARS +LISTS +OWNER +RETAIL +ANIMALS +USEFUL +WAYS +SON +RULE +MAC +HOUSING +TAKES +BRING +CATALOG +MAX +TRYING +MOTHER +TOLD +TRAFFIC +JOINED +INPUT +FEET +AGENT +VALID +BIN +MODERN +SENIOR +SEXY +DOOR +GRAND +TESTING +TRIAL +CHARGE +UNITS +INSTEAD +COOL +NORMAL +WROTE +SHIPS +ENTIRE +LEADING +METAL +FITNESS +OPINION +USES +OUTPUT +FUNDS +GREATER +LIKELY +DEVELOP +ARTISTS +JAVA +GUEST +SEEMS +PASS +TRUST +VAN +SESSION +FEES +CENTURY +SKIN +ADS +RING +GRADE +DATING +PACIFIC +POP +FILTER +MAILING +VEHICLE +LONGER +BEHIND +PANEL +FLOOR +GERMAN +BUYING +MATCH +DEFAULT +REQUIRE +BOYS +OUTDOOR +DEEP +MORNING +ALLOWS +REST +PROTEIN +PLANT +HIT +POOL +MINI +PARTNER +AUTHORS +BOARDS +FACULTY +PARTIES +FISH +MISSION +EYE +STRING +SENSE +PACK +STAGE +GOODS +BORN +UNLESS +RACE +TARGET +EXCEPT +ABILITY +MAYBE +MOVING +BRANDS +PLACES +PRETTY +WINTER +RAPE +BATTERY +YOUTH +BOSTON +INCEST +DEBT +MEDIUM +CORE +BREAK +SETS +DANCE +WOOD +ITSELF +DEFINED +PAPERS +PLAYING +AWARDS +FEE +STUDIO +READER +VIRTUAL +DEVICE +ANSWERS +RENT +LAS +REMOTE +DARK +APPLE +OFFERED +THEORY +ENJOY +REMOVE +AID +SURFACE +MINIMUM +VISUAL +HOST +VARIETY +MARTIN +MANUAL +BLOCK +AGENTS +REPAIR +FAIR +CIVIL +STEEL +SONGS +FIXED +WRONG +HANDS +FINALLY +UPDATES +DESKTOP +CLASSES +PARIS +GETS +SECTOR +JERSEY +FAT +FULLY +FATHER +SAW +QUOTES +OFFICER +DRIVER +DEAD +RESPECT +UNKNOWN +MIKE +TRIP +WORTH +POOR +TEACHER +EYES +WORKERS +FARM +FUCKING +PEACE +CAMPUS +TOM +SHOWING +COAST +BENEFIT +FUNDING +DEVICES +LORD +GRANT +SUB +AGREE +FICTION +HEAR +WATCHES +CAREERS +BEYOND +GOES +LED +MUSEUM +FAN +WIFE +FORMER +TEN +HITS +ZONE +COMPLEX +CAT +DIE +JACK +FLAT +FLOW +PARENT +SETTING +SCALE +STAND +ECONOMY +HIGHEST +HELPFUL +MONTHLY +FRAME +MUSICAL +PATH +CHIEF +GIVES +BOTTOM +DETAIL +LAWS +CHANGED +PET +HEARD +BEGIN +ROYAL +CLEAN +SWITCH +LARGEST +GUY +TITLES +JUSTICE +CONNECT +BIBLE +DEV +CUP +BASKET +APPLIED +WEEKLY +DEMAND +SUITE +SQUARE +ADVANCE +SKIP +DIET +ARMY +AUCTION +GEAR +LEE +ALLOWED +CORRECT +NATION +SELLING +LOTS +PIECE +SHEET +FIRM +SEVEN +OLDER +SPECIES +JUMP +CELLS +MODULE +RESORT +RANDOM +PRICING +MOTION +LOOKS +FASHION +MONITOR +TRADING +FOREST +CALLS +WHOSE +COUPLE +GIVING +CHANCE +VISION +BALL +ENDING +CLIENTS +ACTIONS +LISTEN +DISCUSS +ACCEPT +NAKED +GOAL +SOLD +WIND +MARKETS +LOWEST +HIGHLY +APPEAR +LIVES +LEATHER +PALM +PATIENT +ACTUAL +STONE +BOB +PERHAPS +PERSONS +FIT +TESTS +VILLAGE +AMATEUR +MET +PAIN +FACTORS +COFFEE +CUM +BUYER +EASILY +ORAL +FORD +POSTER +EDGE +ROOT +CLOSED +ICE +PINK +BALANCE +REPLIES +SHOT +INITIAL +LABEL +SEC +CANON +LEAGUE +WASTE +MINUTE +BUS +COLD +CHAIR +FISHING +EFFORT +PHASE +FIELDS +BAG +FANTASY +LETTERS +MOTOR +CONTEXT +INSTALL +SHIRT +APPAREL +FOOT +MASS +CRIME +COUNT +BREAST +QUICKLY +DOLLARS +CLAIM +DRIVING +SURGERY +PATCH +HEAT +WILD +MISS +DOCTOR +TASK +REDUCE +BROUGHT +HIMSELF +NOR +ENABLE +BUG +MID +LEADER +DIAMOND +SOFT +SERVERS +ALONE +SECONDS +JONES +KEYWORD +FLIGHT +FUEL +WALK +FUCK +WAIT +POCKET +SAINT +ROSE +FREEDOM +DRUGS +JOINT +PREMIUM +FRESH +UPGRADE +FACTOR +GROWING +STREAM +PICK +HEARING +EASTERN +THERAPY +ENTRIES +DATES +SIGNED +UPPER +SERIOUS +PRIME +LIMIT +BEGAN +LOUIS +STEPS +ERRORS +SHOPS +BONDAGE +DEL +EFFORTS +CREEK +WORKED +URBAN +SORTED +MYSELF +TOURS +LOAD +LABOR +NURSING +DEFENSE +TAGS +HEAVY +COVERED +JOE +GUYS +COCK +EXPERT +PROTECT +DROP +SOLID +BECAME +ORANGE +PREVENT +THEME +RICH +MARINE +GUITAR +FINDING +SAYING +SPIRIT +CLAIMS +PORNO +SEEM +AFFAIRS +TOUCH +TOWARDS +GOALS +HIRE +SUGGEST +BRANCH +CHARGES +SERVE +REASONS +MAGIC +MOUNT +SMART +TALKING +GAVE +ONES +TITS +AVOID +MANAGE +CORNER +RANK +ELEMENT +BIRTH +VIRUS +ABUSE +QUARTER +TABLES +DEFINE +RACING +FACTS +COLUMN +PLANTS +FAITH +CHAIN +AVENUE +MISSING +DIED +MOVED +REACH +MENTAL +VIEWED +MOMENT +INCH +ATTACK +SORRY +CENTERS +OPENING +DAMAGE +LAB +RESERVE +RECIPES +GAMMA +PLASTIC +PRODUCE +SNOW +PLACED +TRUTH +COUNTER +FAILURE +FOLLOWS +WEEKEND +DOLLAR +CAMP +FILMS +BRIDGE +NATIVE +FILL +OWNED +DRAFT +CHART +PLAYED +READERS +CLUBS +EQUAL +SHIRTS +PROFIT +LEADERS +POSTERS +AVE +EXPECT +PARKING +GONE +CODES +KINDS +GOLDEN +TEAMS +FORT +SENATE +FORCES +FUNNY +BROTHER +GENE +TURNED +TRIED +DISC +PATTERN +BOAT +NAMED +THEATRE +LASER +EARLIER +SPONSOR +ICON +HARRY +OBJECTS +ENDS +DELETE +EVENING +NUCLEAR +TAXES +MOUSE +SIGNAL +ISSUED +BRAIN +SEXUAL +DREAM +FALSE +CAST +FLOWER +FELT +PASSED +FALLS +PIC +SOUL +AIDS +PROMOTE +STATED +STATS +APPEARS +CARRY +FLAG +DECIDED +COVERS +HELLO +DESIGNS +TOURISM +ADULTS +CLIPS +SAVINGS +GRAPHIC +ATOM +BINDING +BRIEF +ENDED +WINNING +EIGHT +IRON +SCRIPT +SERVED +WANTS +VOID +DINING +ALERT +TAG +MIX +DISK +QUEEN +CREDITS +CLEARLY +FIX +HANDLE +SWEET +DESK +HONG +VICE +TRUCK +ENLARGE +RAY +REVENUE +MEASURE +VOTES +DUTY +LOOKED +BEAR +GAIN +OCEAN +FLIGHTS +EXPERTS +SIGNS +LACK +DEPTH +LOGGED +LAPTOP +VINTAGE +TRAIN +EXACTLY +DRY +EXPLORE +SPA +CONCEPT +NEARLY +REALITY +FORGOT +ORIGIN +KNEW +GAMING +FEEDS +BILLION +FASTER +BOUGHT +CON +UPS +NATIONS +ROUTE +BROKEN +FRANK +ALASKA +ZOOM +BLOW +BATTLE +ANIME +SPEAK +QUERY +CLIP +EQUITY +SPEECH +WIRE +RURAL +SHARED +SOUNDS +TAPE +JUDGE +ACID +BYTES +CENT +FORCED +FIGHT +HEIGHT +NULL +ZERO +SPEAKER +FILED +OBTAIN +OFFICES +REMAIN +MANAGED +FAILED +ROLL +BANKS +SECRET +BATH +KELLY +LEADS +THEATER +SPRINGS +VAR +PERFORM +HEALTHY +FONT +ASSETS +INJURY +JOSEPH +DRIVERS +LAWYER +FIGURES +MARRIED +SHARING +PORTAL +WAITING +BETA +FAIL +GRATIS +BANKING +TOWARD +WON +ASSIST +CONDUCT +CALLING +JAZZ +SERVING +BAGS +COMICS +MATTERS +HOUSES +DOC +POSTAL +WEAR +WALES +MINOR +FINISH +NOTED +MOM +REDUCED +PHYSICS +RARE +SPENT +EXTREME +SAMPLES +BARS +ROW +REMOVED +HELPS +SINGLES +CYCLE +AMOUNTS +CONTAIN +DUAL +RISE +SLEEP +BIRD +BRAZIL +STATIC +SCENE +HUNTER +LADY +CRYSTAL +FAMOUS +WRITER +FANS +DRINK +ACADEMY +DYNAMIC +GENDER +EAT +DELL +SEAT +COLOUR +VENDOR +AIM +BIDS +REGIONS +JUNIOR +TOLL +CAPE +RINGS +MEANING +TIP +MINE +LADIES +HENRY +TICKET +GUESS +AGREED +WHOM +SKI +SOCCER +MATH +IMPORT +POSTING +INSTANT +VIEWING +DOGS +ASPECTS +AHEAD +MOON +SCHEME +UTILITY +PREVIEW +FLY +MANNER +MATRIX +DEVEL +DESPITE +TURKEY +PROPER +DEGREES +DELTA +FEAR +SEEKING +INCHES +PHOENIX +SHARES +VOYEUR +COMFORT +COLORS +WARS +CISCO +KEPT +ALPHA +APPEAL +CRUISE +BONUS +HEY +BEAT +ADOBE +SMOKING +BECOMES +DRIVES +ARMS +TEA +TREES +ACHIEVE +DRESS +DEALER +SKY +NEARBY +ROM +CARRIED +HAPPEN +HIDE +REFER +MILLER +CLOTHES +CAUSED +LUXURY +BABES +FRAMES +INDEED +TOY +CIRCUIT +LAYER +PRINTED +SLOW +REMOVAL +EASIER +HIP +NINE +ADDING +MOSTLY +SPOT +PRINTS +SPEND +FACTORY +REVISED +GROW +OPTICAL +AMAZING +CLOCK +DOT +SUITES +FEELING +HIDDEN +SERIAL +RELIEF +RATIO +RAIN +ONTO +PLANET +COPIES +RECIPE +PERMIT +SEEING +PROOF +TENNIS +BASS +BEDROOM +EMPTY +HOLE +PETS +RIDE +BUREAU +PAIR +IDEAL +SPECS +DON +PIECES +PARKS +DINNER +LAWYERS +STRESS +CREAM +RUNS +TRENDS +YEAH +BOXES +HILLS +FOURTH +ADVISOR +EVIL +AWARE +SHAPE +REMAINS +FIRMS +EURO +GENERIC +USAGE +CAP +INK +CHARTS +MIXED +CENSUS +PEAK +EXIST +WHEEL +TRANSIT +DICK +SALT +COMPACT +POETRY +LIGHTS +ANGEL +BELL +KEEPING +ATTEMPT +MATCHES +WIDTH +NOISE +ENGINES +FORGET +ARRAY +CLIMATE +PIN +ALCOHOL +GREEK +SISTER +RAW +WALKING +EXPLAIN +SMALLER +NEWEST +GNU +EXTENT +SHARP +BEN +LANE +KILL +EXPORT +MODULES +OCCUR +KNOWS +CONCERN +BACKUP +HOLDING +TROUBLE +SPREAD +COACH +EXPAND +JORDAN +AGES +PLUG +COOK +AFFECT +VIRGIN +RAISED +HAT +DEALERS +HELPING +LIB +BIKE +TOTALLY +PLATE +BLONDE +LOSE +ORGANIC +SEEK +ALBUMS +CHEATS +GUESTS +HOSTED +TONY +KITS +AGENDA +ANYWAY +TRACKS +CAM +LOGIC +PRINCE +CIRCLE +SOIL +GRANTS +WET +RAM +LEAVING +MATT +COOKING +FOX +RESPOND +SIZES +PLAIN +EXIT +ENTERED +ARM +KEYS +LAUNCH +WAVE +COSTA +HOLY +ACTS +MESH +TRAIL +SYMBOL +CRAFTS +HIGHWAY +BUDDY +DEAN +SETUP +POLL +BOOKING +FISCAL +STYLES +FILLED +BOND +NOTIFY +BLUES +PUB +PORTION +SCOPE +CABLES +COTTON +BIOLOGY +DENTAL +KILLED +BORDER +ANCIENT +DEBATE +STARTS +CAUSES +LEISURE +LEARNED +OPENED +HUSBAND +CRAZY +CONCERT +SCORES +COMEDY +ADOPTED +LINEAR +BEARS +JEAN +HOP +CARRIER +EDITED +VISA +MOUTH +METER +LINKED +GUN +REFLECT +PURE +DELIVER +WONDER +HELL +LESSONS +FRUIT +BEGINS +REFORM +LENS +ALERTS +TREATED +DRAW +ASSUME +CONFIRM +WARM +NEITHER +LEWIS +LEAVES +REPLACE +SUCK +BABE +CHECKS +REACHED +BLOWJOB +SAFARI +SUGAR +CREW +LEGS +STICK +ENABLED +GENRE +SLIDE +TESTED +REAR +ENHANCE +EXACT +BOUND +ADAPTER +NODE +FORMAL +LOCK +HOCKEY +STORM +MICRO +LAPTOPS +MILE +SHOWED +EDITORS +THREADS +BOWL +SUPREME +REF +TANK +DOLLS +NAVY +KID +CANCEL +LIMITS +WEAPONS +PAINT +DELAY +PILOT +OUTLET +NOVEL +PAN +ULTRA +WINNER +EPISODE +POTTER +DISH +PLAYS +MODIFY +OXFORD +TRULY +PATENT +SLOT +EATING +PLANNED +LODGE +MIRROR +KERNEL +BOOBS +STOCKS +BUYERS +GRAY +CHARGED +BROAD +CHOSEN +DEMO +SWISS +LABOUR +HATE +NIGHTS +BEHALF +LIQUID +RICE +LOOP +SALARY +FOODS +GOURMET +GUARD +SAVING +EMPIRE +RESUME +TWENTY +NEWLY +RAISE +PREPARE +AVATAR +ILLEGAL +VARY +HELPED +PREMIER +MILK +DECIDE +CONSENT +DRAMA +CONTEST +BANDS +BOOT +LUNCH +DILDO +AUDIT +PUSH +CHAMBER +GUINEA +MUSCLE +POLLS +TYPICAL +TOWER +YOURS +SUM +CHICKEN +ATTEND +SHOWER +ALAN +SENDING +TONIGHT +DEAR +SHELL +OAK +VAT +BEER +SEEMED +FORMULA +SOLAR +CATCH +JANE +SIR +DOUBT +EARN +FINDER +UNABLE +PERIODS +TASKS +ATTACKS +DOORS +RESORTS +BIGGEST +VISITOR +TWIN +FORTH +INSERT +GATEWAY +ALUMNI +DRAWING +ORDERED +HAPPENS +SPY +ROMANCE +SPLIT +THEMES +POWERS +HEAVEN +BITS +TWICE +FOCUSED +BARGAIN +ASKING +BLOCKS +HUNTING +SUIT +SHIFT +CHIP +RES +SIT +BODIES +CUTTING +WOW +WRITERS +MARKS +LOVED +MAPPING +BIRDS +CHAR +INDEXED +SAVED +PAYING +CARTOON +SHOTS +GRANTED +CHOICES +CARBON +CRISIS +OUTLOOK +MASSIVE +BRIGHT +TREAT +HEADER +POVERTY +FORMED +PIANO +ECHO +GRID +SHEETS +PLASMA +MYSTERY +JOURNEY +BIDDING +RISKS +BANNER +CHARTER +FIG +PORTS +DREAMS +STANDS +TEACH +RAPID +PULL +HAIRY +REVERSE +DEPOSIT +SEMINAR +WHEELS +SPECIFY +DUTCH +FORMATS +TAB +DEPENDS +BOOTS +HOLDS +ROUTER +EDITING +FOLDER +UPLOAD +PULSE +VOTING +COURTS +NOTICES +METRO +STRIP +PEARL +NICK +PLOT +AIRLINE +REGARD +PUMP +EXISTS +SMOOTH +STRIKE +NARROW +THREAT +SURVEYS +SITTING +PUTTING +PENIS +TRAILER +CASTLE +GARDENS +MISSED +ANTIQUE +LABELS +WILLING +BIO +ACTING +HEADS +STORED +EXAM +LOGOS +DENSITY +HUNDRED +STRANGE +BEDS +BREASTS +MENTION +GREY +HONDA +AMENDED +OPERATE +BILLS +BOLD +STABLE +OPERA +DOCTORS +LESSON +CINEMA +ASSET +SCAN +BLANK +SEVERE +DELUXE +HUMOR +AGED +LIVED +BULK +FABRIC +VISITS +TIGHT +DOMAINS +FLYING +SIN +BERLIN +CUTE +PARA +SIEMENS +MEANT +CAPTURE +POUNDS +BUFFALO +PLANE +SEED +DESIRE +CAMPING +MEETS +WELFARE +PEER +CAUGHT +MARKED +DRIVEN +BOTTLE +MASSAGE +RUBBER +CLOSING +MEAT +LEGEND +GRACE +PYTHON +MONSTER +BANG +VILLA +BONE +COLUMNS +BUGS +COOKIES +INNER +MED +ENTITY +CRUISES +GATE +HOLDER +ROMAN +DUTIES +EROTIC +TONE +ETHICS +FOREVER +DRAGON +BUSY +CAPTAIN +IMAGINE +BRINGS +HEATING +LEG +NECK +WING +SCRIPTS +STEREO +TASTE +DEALING +COMMIT +TINY +RAIL +LIBERAL +JAY +TRIPS +GAP +SIDES +TUBE +TURNS +CACHE +BELT +JACKET +ORACLE +LEASE +HOBBIES +PROUD +EXCESS +CONSOLE +GIANT +SHIPPED +SEATS +BIZ +ALARM +VOLTAGE +USUAL +LOADING +STAMPS +ANGLE +ROB +VINYL +MINING +ONGOING +WORST +IMAGING +BETTING +LIBERTY +ERA +CONVERT +ANALYST +GARAGE +THONGS +MORGAN +DERIVED +HONOR +ASP +EAGLE +PANTS +NURSE +PRAYER +QUIET +LUCK +POSTAGE +DIAL +CHEESE +COMIC +JET +CROWN +PAR +MAKER +CRACK +PICKS +GANG +FETISH +APPLIES +CASINOS +SMOKE +APACHE +FILTERS +CRAFT +CAKE +APART +FELLOW +BLIND +LOUNGE +MAD +SEMI +COINS +GROSS +CAFE +KEN +HORROR +CAPABLE +TILL +PEN +SHOE +ELECTED +VICTORY +SAND +JOY +MAINLY +ETHNIC +RAN +ACTOR +FINDS +SEAL +FIFTH +CITIZEN +PRIZE +OCCURS +ANYTIME +LIES +PIPE +LECTURE +LAYOUT +ILL +LAY +HORSES +DIRTY +DECK +DONATE +TAUGHT +WORKER +ALIVE +TEMPLE +PROVE +WINGS +BREAKS +GENETIC +WATERS +PROMISE +THIN +PREFER +RIDGE +CABINET +MODEM +SICK +DOSE +TIFFANY +COLLECT +BET +STREETS +VECTOR +SHAVED +TURNING +BUFFER +PURPLE +LETS +MUTUAL +SYNTAX +PRISON +SKILL +CHAIRS +MOVES +INQUIRY +CHECKED +EXHIBIT +THROW +TREND +SIERRA +VISIBLE +CATS +DESERT +OLDEST +BUSTY +MERCURY +WORSE +SUMMIT +VICTIMS +SPACES +BURNING +ESCAPE +COUPONS +BOATS +GLANCE +ARCADE +TELLS +OBVIOUS +FIBER +GRAPH +TALKS +FILING +FOSTER +PASSING +AWARDED +TRIALS +TISSUE +MASTERS +BONDS +FOLK +COMMONS +FRAUD +ARRIVAL +OKAY +POTTERY +ROGER +ASPECT +AWESOME +COUNTS +PRICED +HIST +CRASH +LIFT +DESIRED +INTER +CLOSER +ASSUMES +HEIGHTS +SHADOW +RIDING +EXPENSE +GROVE +VENTURE +CLINIC +HEALING +MALL +PACKET +SPRAY +STUDIOS +DAD +BUTTONS +FUNDED +WINNERS +EXTEND +ROADS +PAT +ROLLING +FELL +YARD +NELSON +ARRIVED +CREATES +FACES +TOURIST +COCKS +MAYOR +MURDER +SENATOR +YIELD +GRADES +POUR +DIGEST +REG +LODGING +DUST +HENCE +RADAR +RESCUE +LOSSES +COMBAT +STOPPED +LAKES +BUTT +CLOSELY +DIARY +KINGS +KENT +ADDS +EAR +FLAGS +BAKER +SHOCK +WALLS +ABROAD +EBONY +TIE +WARD +DRAWN +VISITED +ROOF +WALKER +KISS +BEAST +TARGETS +DODGE +COUNSEL +PIZZA +INVITED +YARDS +MOD +FARMERS +QUERIES +RUSH +ABSENCE +NEAREST +CLUSTER +VENDORS +WHEREAS +YOGA +SERVES +WOODS +LAMP +PARTIAL +COUPLES +RANKING +JOKES +SUBLIME +PALACE +GLAD +WINS +VERIFY +GLOBE +TRUSTED +COPPER +RACK +REP +KERRY +RECEIPT +NOBODY +GHOST +BOSS +PRIDE +KNOWING +CLOUDY +CHILE +ANNA +PLENTY +SOLO +THROAT +IGNORE +MARIA +UNIFORM +WEALTH +TALL +VACUUM +DANCING +BRASS +WRITES +PLAZA +QUEST +PUBLISH +SRI +TOE +TRANS +NOVA +PIONEER +BOOTY +ACROBAT +PLATES +ACRES +VENUE +THERMAL +ESSAYS +VITAL +TELLING +FAIRLY +COASTAL +CHARITY +EXCEL +MODES +WAKE +STUPID +HARBOR +SEGMENT +REALIZE +ENEMY +PUZZLE +RISING +WELLS +OPENS +INSIGHT +SHIT +SECRETS +LUCKY +LATTER +THICK +REPEAT +PENALTY +DRUM +GLASSES +ENABLES +BUILDER +VISTA +CHIPS +TERRY +FLOOD +EASE +ORGY +ARENA +PUPILS +TABS +OUTCOME +CASUAL +GROWN +POLISH +LOVELY +EXTRAS +CENTRES +JERRY +CLAUSE +SMILE +LANDS +TROOPS +INDOOR +ARMED +BROKER +CHARGER +PINE +COOLING +TEND +GULF +RICK +TRUCKS +DIVORCE +LAURA +SHOPPER +PARTLY +CANDY +PILLS +TIGER +FOLKS +SENSOR +EXPOSED +HUNT +ANGELS +DEPUTY +SEALED +LOADED +SCENES +BALLS +BOOST +MILL +FOUNDED +CHRONIC +ICONS +MORAL +DEN +FINGER +KEEPS +POUND +LOCATE +TRAINED +BURN +ROSES +LABS +BREAD +TOBACCO +WOODEN +MOTORS +TOUGH +LIE +CHEST +PENSION +BILLY +WORSHIP +HERSELF +DAMAGES +SOLVE +SHORTS +DIVERSE +AMP +JOHNNY +SOLE +FACING +NANCY +TONES +PASSION +SIGHT +LAID +CLAY +DEFENCE +PATCHES +WEAK +REFUND +TOWNS +DIVIDED +WISE +CYPRUS +ODDS +INSIDER +MAKERS +HEARTS +WORRY +EVE +CARTER +LEGACY +MARC +PLEASED +DANGER +VITAMIN +WIDELY +PHRASE +GENUINE +RAISING +HYBRID +READS +ROLES +SONS +LEAF +PAD +GLORY +BIGGER +BILLING +DIESEL +VERSUS +COMBINE +EXCEED +ROD +FAULT +SILK +BABIES +EXAMINE +JIMMY +GRAHAM +BRISTOL +SAD +WOLF +SLOWLY +RUGBY +INFANT +SECTORS +FLUID +GROUNDS +FITS +KICK +REGARDS +MEAL +HURT +UNLIKE +BASKETS +POT +WRIGHT +PROVEN +CACHED +WARREN +SLIP +STUDIED +PROFITS +DEVIL +GRASS +COMPLY +FLORIST +CHERRY +CUTS +FUNERAL +ENJOYED +PEE +CHARLIE +NIPPLES +MARS +SIZED +NOTICED +SOCKET +SILENT +EGG +SIGNALS +CAPS +PILL +THEFT +SWING +SYMBOLS +LAT +META +HUMANS +ANALOG +FACIAL +TALENT +DATED +SEEKER +WISDOM +SHOOT +MINT +OFFSET +PAYDAY +ELITE +SPIN +HOLDERS +POEMS +ROBOT +WITNESS +COLLINS +STAGES +WINDS +POWDER +ASSESS +WASH +STONES +GNOME +ROOTS +LOSING +GADGETS +NOBLE +IMPACTS +REV +GOSPEL +SHORE +LOVES +INDUCED +KNIGHT +LOOSE +AIMS +LINKING +APPEALS +EARNED +ILLNESS +PENDING +PARKER +TEENAGE +SOAP +TRIPLE +COOPER +JAM +SECURED +UNUSUAL +SLOTS +ROUTINE +ROCKS +TITANS +WEARING +AXIS +SOUGHT +GENES +MOUNTED +HABITAT +MEDIAN +GUNS +SCANNER +HEREIN +HORNY +HERO +INTEGER +ENGAGED +FALLING +BASICS +CARPET +LENSES +BINARY +PUNK +DROPPED +DUKE +PACE +BESIDES +WAGE +ARC +HOSTS +MOMENTS +ATLAS +STRINGS +DAWN +FEELS +TORTURE +CARL +DELETED +COAT +RALPH +WARNER +INKJET +WIZARD +CORPS +ACTORS +LIVER +LIABLE +MORRIS +RECALL +ANTENNA +PICKED +ASSUMED +BELIEF +KILLING +BIKINI +DECOR +LOOKUP +TEXTS +BROKERS +ION +DOLL +TIT +SEASONS +REFINE +BIDDER +SINGER +HERALD +FAILS +AGING +PISSING +FED +DIVING +INVITE +SUPPOSE +REED +INVOLVE +TERROR +YOUNGER +THIRTY +MICE +RAPIDLY +BAN +TEMP +INTRO +FISTING +CLERK +VAST +MILLS +OUTLINE +HOLLAND +JEANS +FONTS +ODD +WRAP +REFERS +MOOD +FAVOR +QUIZ +SIGMA +VICTIM +DEMANDS +CAREFUL +BEAM +ARRIVE +SUNSET +TRACKED +MINIMAL +LOTTERY +TOPS +FRAMED +ASIDE +LICENCE +ESSAY +CAMPS +TRACE +SHUT +PACKS +THOU +CONSULT +GREATLY +MASK +CYCLING +INFORM +COAL +CRY +QUANTUM +INTENT +ZOO +LARGELY +SPOKE +ARROW +ROUGH +WEIRD +TEE +LION +HOLES +BLADE +OXYGEN +COOKIE +MEALS +CANYON +METERS +MERELY +PASSES +POINTER +STRETCH +PERMITS +SLEEVE +CLEANER +CRICKET +BEEF +FEEDING +STROKE +CAD +HATS +ROBIN +STRAP +CROWD +SURF +CUSTOMS +RAINBOW +HOOK +DECLINE +GLOVES +CORD +SKIING +CLOUD +VALVE +PROCEED +KNIFE +SHELF +TIMING +LIKED +ADOPT +DENIED +FUCKED +OUTER +CROP +DEATHS +RIVERS +TALES +NODES +THUMBS +SEEDS +CITED +LITE +HUB +TWELVE +FOUNDER +DECADE +DISPUTE +TIRED +ADVERSE +EXCERPT +ENG +STEAM +DRINKS +ACE +VOICES +ACUTE +STOOD +SING +TONS +PERFUME +CAROL +HONEST +RESTORE +STACK +SUE +HANG +CURVE +CREATOR +AMBER +MUSEUMS +CODING +TRACKER +PASSAGE +TRUNK +HIKING +DAMN +HEADSET +WAVES +CAMEL +LAMPS +HOOD +SUICIDE +CHI +JUICE +CHASE +LOGICAL +SAUCE +FAME +EXTRACT +PANAMA +PAYABLE +JUDGES +RETIRED +REMARKS +DECADES +WALKED +ARISING +INS +EGGS +AFRAID +RAILWAY +POINTED +CAUSING +MISTAKE +LOCKED +FUSION +MINERAL +RUBY +BEADS +FORTUNE +CANVAS +PARISH +CLAIMED +SCREENS +PLANNER +FLOWS +STADIUM +FEWER +COUPON +NURSES +STEM +PROXY +OPT +DREW +FLU +COSTUME +TAGGED +VOTED +KILLER +BIKES +GATES +RAP +TUNE +BISHOP +PULLED +CORN +SHAPED +FARMER +PUTS +GREW +TIN +SLAVE +TREK +HEROES +PAINTED +ARTWORK +ETHICAL +FLORAL +TIES +SCHEMES +NEUTRAL +FISHER +RAT +SPEARS +DILDOS +BEDDING +JOINING +HEADING +EQUALLY +BEARING +BRAD +COMBO +SENIORS +WORLDS +GUILTY +HAVEN +TABLET +JURY +DOS +TAIL +CHARM +LAWN +VIOLENT +BASIN +SOUP +RANCH +COTTAGE +DRUNK +CRIMES +BYTE +TONER +NOSE +LATEX +ANYMORE +ALIEN +LOCATOR +BROKE +RESOLVE +COD +THESIS +THRU +JEWS +NYLON +DISCS +ROCKY +TRIM +CEILING +PIXELS +ANYBODY +FLEET +BUNCH +TOTALS +SINGING +AFFORD +OPTIMAL +QUIT +LUNG +TURNER +SUCKING +CENTS +SPOKEN +OMEGA +STAYED +CIVIC +MANUALS +SEES +WATCHED +SAVER +THEREOF +GRILL +REDEEM +ROGERS +GRAIN +REGIME +WISHES +BULL +DEPEND +DIFFER +RANGING +REPAIRS +BREATH +COLE +MART +CANDLE +HANGING +COLORED +TALE +SEEKS +HERBAL +LOVING +ROUTING +DOCS +ELEGANT +GAINS +RENEWAL +OPPOSED +DEEMED +SCORING +PANTIES +SISTERS +CRITICS +SPOTS +HACKER +MARGIN +COIN +SOLELY +FAKE +SALON +TURBO +HEADED +VOTERS +CURE +MADONNA +ARCH +MURPHY +THINKS +SOLDIER +AIMED +BOMB +HARM +MIRRORS +TRICKS +RESET +BRUSH +PANELS +ASSAULT +SPARE +DEER +TONGUE +BOWLING +DANISH +MONKEY +SKIRT +INVEST +HONEY +LOVERS +ATOMIC +ARABIC +GAUGE +FACED +SOLVING +OVEN +CHAINS +SIXTH +ENGAGE +DEVIANT +NOON +QUOTED +FARMS +IMPORTS +CHEAT +BRONZE +SANDY +SUSPECT +MACRO +SENDER +CRUCIAL +TUITION +SPOUSE +EXOTIC +VIEWER +THREATS +PUZZLES +DAMAGED +CAMS +PISS +LAUGH +DESTROY +PITCH +AUTOS +PERRY +PROVED +DOZEN +TEETH +CLOTH +STAMP +LOTUS +SALMON +CARGO +MATE +STARTER +LIKES +BUTTER +PEPPER +WEAPON +LUGGAGE +BURDEN +CHEF +TAPES +ZONES +RACES +ISLE +STYLISH +SLIM +MAPLE +GROCERY +DEPOT +COMP +BLEND +SPEC +FINEST +REALTY +AUTUMN +PROBE +MIDI +TOILET +RANKED +JACKETS +ROUTES +PACKED +EXCITED +RECOVER +TIED +TIMELY +TALKED +DEBUG +DELAYED +CHUCK +DALE +VILLAS +BOOB +EXCLUDE +PEEING +BROOKS +NEWTON +OILS +SEPT +ANXIETY +BINGO +WHILST +SPATIAL +UNTO +CERAMIC +PROMPT +MINDS +PAYS +FINGERS +SUNNY +CEDAR +LANG +STUD +FOLD +QUALIFY +HOPES +MASON +DIAGRAM +BURNS +PUMPS +SLUT +PEOPLES +VICTOR +ATTACH +ADVISED +SPIDER +RANGES +PAIRS +TRAILS +INTERIM +DIVINE +APPROVE +CHOSE +DIALOG +VENUES +BLAST +CALCIUM +POLE +SHIELD +HARVEST +LOCALLY +PICKUP +MOTHERS +CANDLES +BEND +SAILING +MOMS +SACRED +MOROCCO +CHROME +TOMMY +REFUSED +BRAKE +ECOLOGY +CONGO +GLEN +DELAYS +OLIVE +SCORED +CLONE +DICKS +LAMBDA +RELAY +TEARS +OASIS +ANGRY +SILICON +COMPETE +LOVER +BELONG +LIPS +ESCORT +POND +ROLLS +DADDY +FERRY +RABBIT +SEATING +EXPORTS +TIRE +CHAD +LOADS +HEATHER +MOTEL +UNIONS +WARRANT +FROZEN +JOSH +ROYALTY +SCALES +RALLY +STRAIN +DRAG +SOMEHOW +RIPE +RELY +GAINED +DYING +LAUNDRY +STUCK +PLACING +STOPS +ADJUST +FILLING +IMPOSED +SILENCE +FOCUSES +SOVIET +TREATY +VOCAL +TRAINER +ORGAN +VOLUMES +LEMON +TOXIC +NUTS +NAIL +IMPLIED +SPAN +JOKE +PACKING +STATUTE +SATISFY +SHELTER +CHAPEL +LAYERS +GUIDED +MIXTURE +BENCH +RIDER +RADIUS +LOGGING +BORDERS +PADS +BUTTS +INNS +BOBBY +SHEEP +WINES +NURSERY +HARDER +CUPS +SALAD +TENDER +FOAM +PASTE +CLOUDS +POEM +STAYING +EASTER +PRAISE +VETERAN +STREAMS +LANDING +SIGNING +ASKS +RELAX +HARDLY +PRAIRIE +REUNION +BEAN +SWORD +ABSENT +SELLS +HOPING +SPIRITS +CORAL +PIXEL +FLOAT +COLIN +BIAS +PATHS +BUBBLE +ACQUIRE +TRIBUNE +VESSEL +ACIDS +VIRUSES +CHEAPER +DAIRY +ADMIT +FANCY +LEASING +BELIEFS +SQUAD +ANALYZE +SCROLL +RELATE +SWIM +WAGES +SUFFER +FORESTS +INVALID +MARTIAL +MALES +RETAIN +COLOURS +EXECUTE +TUNNEL +GENRES +PATENTS +CHAOS +WHEAT +BEAVER +EAGLES +BASES +ACCUSED +UNITY +LOUD +BRIDE +RATS +DEFINES +BEGUN +PACKETS +ANCHOR +SOCKS +PARADE +STAT +TRIGGER +BEACHES +FOLDERS +ROUTERS +PENDANT +DRESSES +BAPTIST +HIRING +CLOCKS +BIOS +FEMALES +FEVER +CUISINE +SURELY +THEOREM +THEE +RUTH +PRAY +STYLUS +POPE +DRUMS +TOPLESS +JEEP +CHICKS +BARE +HUNG +CATTLE +RADICAL +ROVER +RELOAD +FLAME +TANKS +ELDERLY +MONO +TILE +BOLIVIA +SPELL +HOTTEST +ALLEGED +COMPILE +WEBSTER +STRUCK +BRIDAL +ANNEX +TRIBAL +CURIOUS +FREIGHT +REBATE +ECLIPSE +SHUTTLE +CYCLES +AFFECTS +DETECT +SLUTS +CIAO +KNEE +PREP +FASTEST +BUTLER +INJURED +PAYROLL +COURIER +HINTS +PROS +TRIBUTE +WIRED +IMMUNE +CANT +RARELY +GENESIS +BARRIER +ARGUE +TRAINS +METALS +BICYCLE +LETTING +ARISE +THEREBY +ADVISE +BOTTLES +BOXING +BANGKOK +BITCH +CHESS +SURVIVE +MENUS +DUCK +REVEAL +CANAL +AMINO +HERBS +CLINICS +LYING +STRICT +DIVE +DRILL +OFFENSE +PROTEST +HOBBY +TRIES +WASHING +TRICK +ENQUIRY +CLOSURE +RAID +TIMBER +VOLT +INTENSE +SHOWERS +RULING +STEADY +DIRT +DROPS +WIDER +SENSORS +SCREW +HOURLY +BLAME +GENEVA +HANDED +INTAKE +HEAVILY +FIFTY +HEADERS +GEEK +UNCLE +SINK +ASSURE +DEVOTED +SODIUM +RANDY +HORMONE +TIMOTHY +BRICK +GRIP +NAVAL +BRIDGES +WATT +DECENT +CASTING +SHORTLY +PINS +DONNA +WARRIOR +DIPLOMA +CABIN +POLO +COPYING +HORN +FIRED +TRIVIA +FROG +GRAMMAR +TIRES +LOGS +HAZARD +RETRO +ANGER +SUITS +CHANCES +SNAP +BIZARRE +FRUITS +RIBBON +STARTUP +KISSING +HANDY +SWAP +EXEMPT +CROPS +REDUCES +FLIP +GUILD +CAPITOL +DISHES +NERVOUS +REFUSE +EXTENDS +REPLICA +TRIBE +TRADES +SUPERB +BUZZ +NUKE +TRINITY +HANDLED +LEGENDS +BOOM +CALM +FLOORS +EXHAUST +SPEAKS +BURTON +COPIED +SCOTIA +FARMING +GIBSON +FORK +TROY +ROLLER +BATCH +ALTER +LATINO +EDGES +MIXING +HANDLES +SKILLED +FITTED +HARMONY +ASTHMA +TWINS +AMEND +REWARD +SPRINT +CHICK +SIMS +TRAY +INPUTS +GENOME +ESCORTS +THONG +MEDAL +COACHES +VESSELS +HARBOUR +WALKS +SUCKS +SAGE +KNIVES +ARRANGE +HONORS +BOOTH +INDIE +UNIFIED +BONES +BREED +IGNORED +POLAR +FALLEN +PRECISE +INVOICE +GATHER +BACKED +MOTELS +FORMING +EMBASSY +CAVE +SLIGHT +AMONGST +WOOL +ARREST +HORIZON +DEEPLY +TOOLBOX +MARINA +PRIZES +PATIO +SURFING +OPTICS +PURSUE +EYED +GRAB +ATTRACT +BEANS +DISABLE +SNAKE +SUCCEED +LENDING +OOPS +NIPPLE +PLAINS +KARAOKE +TRAP +LONELY +FOOL +HEREBY +OBSERVE +BERRY +COLLAR +RACIAL +MOBILES +DIES +TERRACE +REPLIED +SEAFOOD +NOVELS +PLAYBOY +OUGHT +JAIL +SAFELY +FINITE +KIDNEY +FIXES +SENDS +DURABLE +ALLIED +THROWS +ROSTER +SPENCER +TIMER +TABLETS +TUNING +GOTTEN +FUTURES +VERSE +HIGHS +WANTING +CUSTODY +SCRATCH +ROCKET +BULLET +TOWERS +RACKS +LACE +NASTY +TUMOR +UGLY +WATTS +HART +FORTY +TUBES +PRIEST +QUEUE +TRANCE +LOCALE +BUNDLE +HAMMER +RUNNER +ROWS +NOTION +SKINS +MAILED +ARCTIC +EXAMS +REWARDS +BENEATH +DEFEND +SEVENTH +GODS +WELSH +BELLY +STOLEN +SOONEST +POLY +EARS +FIST +LENDERS +FITTING +MERE +AGREES +CONS +SURPLUS +ELDER +SONIC +CHEERS +TAXI +ZONING +GRAVITY +THUMB +GUITARS +ESSENCE +MIGHTY +GALAXY +CARING +WORN +SHAW +EXPO +TWIST +STOMACH +BURIED +RANKS +DEBUT +DENY +ANATOMY +TRIO +CUBE +DEFECTS +MARKER +CLARITY +RUGS +SETTLED +FOLDING +AIRFARE +VACCINE +CRAP +FATE +PENNY +ROBUST +PORTER +JUNGLE +IVORY +ALPINE +REMIX +ALIAS +NEWER +SPICE +OVAL +IMPLIES +SOMA +COOLER +DONOR +TENSION +TRASH +SHAPES +TIER +EARL +MANOR +BREEDS +RAPIDS +DISCO +BAILEY +ETERNAL +CITE +METRIC +MINUS +VARIED +CLOSEST +ACTRESS +MESS +ASSIGN +TIGERS +AURORA +SLIDES +LENDER +SHADE +CHORUS +RHYTHM +DIGIT +ARGUED +DIETARY +SUDDEN +LIONS +POOLS +LYRIC +SPEEDS +MATCHED +ROPE +DUMP +WARMING +VOCALS +CHUBBY +GRAVE +BURNER +GENTLE +DEEPER +HOSE +FOOTAGE +WORTHY +REVEALS +SAINTS +CARRIES +DEVON +SAVES +LOBBY +PUNCH +COWBOY +KARMA +CONSIST +QUEENS +PUBS +TRIBES +DEFEAT +CLICKS +NAUGHTY +HAZARDS +INSURED +HARPER +TENANT +TATTOO +SHAKE +ALGEBRA +SHADOWS +HOLLY +SILLY +MERCY +FREELY +SUNRISE +MILD +BELONGS +READILY +FENCE +NUDIST +ENSURES +CLAN +LEGALLY +SHAME +SYNC +MESA +FATAL +REMEDY +BRIEFLY +GENIUS +FIGHTER +FLESH +RETREAT +ADAPTED +BARELY +ESTATES +BOROUGH +FAILING +MARBLE +JESSE +HULL +SURREY +MODULAR +GIANTS +SHED +BALLOON +MEMO +SOLVED +TIDE +FUNK +MAGNET +CAYMAN +JAGUAR +REEL +SHEER +POSING +BIND +RAND +URGENT +INFANTS +GOTHIC +WITCH +BUCK +PUPPY +ACRE +GRAPHS +REVENGE +EXPIRES +ENEMIES +LOWS +AQUA +ACCEPTS +PATROL +SMELL +PEST +ROUGHLY +STICKER +REEF +DIVIDE +SATIN +DESERVE +PROMO +WORRIED +TUNES +GARBAGE +BETH +PHRASES +BORING +JILL +REACHES +SCHEMA +SOFA +QUIZZES +PREFIX +BARREL +TYPING +NERVE +PLANETS +DEFICIT +BOULDER +RENEW +COUPLED +FLOPPY +TEXTURE +THUNDER +TENT +CAUTION +LOCKS +NAMELY +HACK +DARE +EUROS +PIRATES +AERIAL +HAWK +REBEL +ORIGINS +HIRED +MAKEUP +TEXTILE +LAMB +INDEXES +LICKING +MARKERS +WEIGHTS +LASTING +WICKED +KILLS +PUSHED +JUNK +SLOPE +REGGAE +POET +SURNAME +NAILS +EVIDENT +WHATS +RIDES +REHAB +EPIC +ALLERGY +SAKE +TWISTED +MERIT +ENZYME +PLANES +TACKLE +DISKS +CONDO +SANS +FAIRY +BUILDS +SHAFT +LEAN +KITTY +DUDE +DRAIN +MONTE +FIRES +BLESSED +FAVORS +POTATO +PANIC +STICKS +LEONE +EXCUSE +REFORMS +ONION +STRAND +LAWSUIT +ALTO +CHEQUE +BANNERS +REJECT +CIRCLES +ITALIC +BEATS +MERRY +SCUBA +GORE +CULT +DASH +PASSIVE +VALUED +CAGE +COURAGE +GAZETTE +BATMAN +JAKE +PING +DRIED +SETTLE +KNIGHTS +PALMER +FLUX +DERBY +ALTERED +SCENIC +SEWING +CELEBS +PROPOSE +LIGHTER +RAGE +TACTICS +TRUSTS +PILLOW +SHORTER +RELYING +FINALS +STEAL +PARCEL +REFINED +FIFTEEN +FEARS +PREDICT +ACRYLIC +ROLLED +TUNER +RAYS +TODDLER +FLAVOR +ALIKE +HUNGRY +ACNE +BLOCKED +LIBS +UNDO +HALO +STRIKES +LESSER +GAYS +DRESSED +SCOUT +EXEC +DEALT +CHARMS +TRADER +BUCKS +DENIAL +THROWN +PREPAID +RAISES +ELECTRO +BADGE +WRIST +HEATH +BALLOT +VARYING +TRUSTEE +SQUIRT +REALM +JENNY +HELMET +TSUNAMI +SCHOLAR +NICKEL +BUSES +GEOLOGY +COATING +WALLET +CLEARED +BOATING +CORNERS +BROADER +ROUGE +YEAST +COATED +INTEND +DOOM +HITTING +BEINGS +BITE +AQUATIC +HABITS +MYTH +GILBERT +BROOK +OUTPUTS +INSULIN +ASSURED +WEED +ACCENT +ELEVEN +WIVES +AMBIENT +UTILIZE +MILEAGE +ADAPTOR +AUBURN +UNLOCK +PLEDGE +VAMPIRE +RELATES +XEROX +DICE +MERGER +QUAD +DOCK +MODS +FRAMING +SORTS +HINT +ARMOR +RIDERS +REMARK +DOZENS +VARIES +PICKING +GUARDS +BUYS +NUDITY +POCKETS +GRANNY +PORK +VIRAL +INQUIRE +PIPES +LADEN +MERGE +CHASSIS +BARN +PUSHING +FLEECE +FARE +PIERCE +SPERM +BALD +CRAPS +FUJI +FROST +MOLD +DAME +SALLY +YACHT +PREFERS +HERB +BREACH +WHALE +IDLE +MUSTANG +WIRING +PASTOR +SHARK +PHASES +EMERALD +GROWS +CLIFF +TRACT +BALLET +BUMPER +GARLIC +HOSTELS +SHINE +BANNED +BRIEFS +COVE +OZONE +CASA +RADIOS +TARIFF +PASTA +MUSCLES +SERUM +WRAPPED +SWIFT +FOCAL +VAGINA +DISTANT +DECIMAL +SAMBA +HOSTEL +EMPLOY +PENGUIN +MAGICAL +MIRACLE +REPRINT +FLEX +YEARLY +WOUND +BELLE +HASH +HAMBURG +LAZY +FATHERS +CARB +MARVEL +LINED +PETITE +TERRAIN +PENS +STRIPS +GOSSIP +RANGERS +ROTARY +WORM +BOXED +CUBIC +DEAF +KINASE +SKIRTS +MATS +LABELED +MARKING +SHERIFF +GRIFFIN +SPIES +BLAH +MIME +ELECT +DEADLY +CUNT +BUNNY +CHEVY +ROUNDS +LONGEST +KEEN +FLYER +PEAS +DOSAGE +BAKING +NEEDLE +BATHS +BRAKES +NIRVANA +OWNS +STICKY +DESTINY +MADNESS +CLIMB +BLOWING +HEATED +CARDIAC +BRUTAL +TOKEN +ZINC +SEEKERS +GURU +YIELDS +LEVY +SUITED +NUMERIC +SKATING +EMPEROR +GRAD +BRAS +BELTS +BLACKS +REBATES +BURKE +PROUDLY +PULLING +OBESITY +CURVES +TOURING +VERTEX +TOMATO +EXPIRED +TRAVELS +FLUSH +WAIVER +PALE +DELIGHT +COUNTED +DECLARE +JOHNS +VALVES +GAPS +DONORS +TEAR +JEWEL +TEDDY +TEACHES +TRAGEDY +NEST +DRYER +PAINFUL +VELVET +RULED +PRAYERS +FUNKY +NOWHERE +GALE +JOINS +LATELY +SCARY +BANANA +CAKES +IDOL +BLOODY +MIXER +REMIND +TOOTH +STAYS +AFFAIR +DROVE +WASHER +UPSET +BESIDE +MINES +REBOUND +LOGAN +MENTOR +FOUGHT +METRES +PENCIL +FREEZE +TITLED +SPHERE +MOSS +RATIOS +CONCORD +WALNUT +LANCE +LADDER +CORK +WORKOUT +COLON +LANES +PURSE +STATING +DOME +ALIGN +BLESS +CREST +TRIUMPH +WELDING +ORGASM +HEEL +ALLOY +CONDOS +PLOTS +YANG +GENTLY +LOCKING +DRAWS +FRIDGE +BLANKET +BLOOM +JUSTIFY +BLADES +LOOPS +SURGE +TRAUMA +ADVERT +POSSESS +VANILLA +PICNIC +SOULS +SPANK +DUMB +HOLLOW +VAULT +GROOVE +PURSUIT +WIRES +MAILS +BACKING +SLEEPS +ENDLESS +FIGURED +ORBIT +BACON +HEATER +COLONY +CANNON +CIRCUS +SPINE +TROUT +FEAT +COOKED +FATTY +PRESSED +SCANNED +HUNGER +SURGEON +CEMENT +MISSILE +CLOSES +ASSISTS +GLOW +AUDITOR +VIOLIN +PROPHET +BRACKET +OXIDE +OAKS +MODEMS +HARMFUL +GLUCOSE +PHANTOM +NORM +TURTLE +WARNED +NEURAL +WARE +FOSSIL +BADLY +APOLLO +ROBOTS +JADE +SCOOP +FOUL +KENO +EARNING +MAILMAN +NESTED +MOVERS +VERBAL +BLINK +SEAS +NOVELTY +TILES +POSE +FUZZY +GRAMS +BUDGETS +GOAT +RENDER +CARMEN +EROTICA +SAIL +FORGE +DENSE +BRAVE +AWFUL +IMPOSE +VIEWERS +ENTERS +SAVAGE +WILLOW +RESUMES +BOLT +GAGE +EXISTED +WHORE +WAGON +FAVOUR +KNOCK +URGE +PEERS +OPTIMUM +NEON +QUILT +OURS +MOUNTS +LONE +REFRESH +SUBTLE +STRIPES +COPE +CRADLE +MAMBO +LIME +KIRK +FLOUR +CHOIR +BLOND +EXPECTS +JUMPING +FABRICS +POLYMER +HYGIENE +POULTRY +VIRTUE +BURST +BOUQUET +MANDATE +SPAS +CORPUS +FIBRE +SHADES +JETS +INDICES +DAISY +CURSOR +DONATED +STUFFED +INSECTS +CRUDE +MAIDEN +VIKING +MYRTLE +BORED +CLEANUP +YARN +KNIT +BOTHER +MATING +COMPUTE +REDHEAD +ARRIVES +TRACTOR +UNWRAP +FARES +RESIST +HOPED +PIKE +SAFER +TOUCHED +COLOGNE +WISHING +RANGER +MARSH +SCARED +THETA +BENT +ASYLUM +STAKE +OUTLETS +ARBOR +POISON +COSTLY +STITCH +RIFLE +NOTABLE +WARFARE +MAMA +INLAND +RACISM +ACCORD +MODEST +GAMERS +SORTING +LIAISON +UNUSED +BULBS +SANDALS +INSURE +CLARIFY +WAIST +FATIGUE +PATRIOT +SEWER +TREATS +EXCEEDS +GALLON +COIL +BATTLES +TRADERS +BITTER +BURNED +DRAGONS +ROMEO +TURKS +DEMOS +SIDED +DEPART +GRADING +TENANTS +LILY +MINDED +RESIN +ALLIES +CROSSED +LINEN +SEALS +NOMINAL +DECAY +QUARTZ +EIGHTH +USHER +BUFFET +SKATE +JOEY +HACKERS +TILT +GRANITE +LYNCH +MASSES +ATHLETE +FRANC +BEAD +ENFORCE +LEAK +ADVISER +FLATS +BOOKLET +HEELS +VOTER +URINE +TOWEL +GINGER +SUBURBS +IMAGERY +SEARS +FLIES +CRYING +CRANE +ROTTEN +GARNET +HABIT +BULB +HONOUR +USELESS +IRIS +COUPE +BACH +MANAGES +EROSION +KHAN +PETERS +CLEVER +PRIMER +LORDS +TENDS +HANDBAG +BYPASS +SIXTY +EXPLOIT +ORGIES +HOGTIED +SPARK +PATHWAY +SHALLOW +STIR +SPIKE +PLATED +DRAWER +SPECTRA +LIFTING +CURTAIN +DAVIES +PILOTS +MAILBOX +PILE +HUMOUR +CALLER +TONGA +IMPRINT +GOODBYE +VIABLE +EMERGED +DEFECT +POORLY +GODDESS +BACKS +MAGNETS +ARGUES +WADE +SOILS +CHAPMAN +ORGANS +LOYALTY +BELOVED +BEATING +HUNKS +OFFENCE +EXPANDS +LITHIUM +SEDAN +PONY +LEAP +SWAN +FACIALS +AIRWAYS +REFILL +SAILOR +LINING +BANQUET +CARES +FLORA +STATUE +EQUALS +HARDY +JUMPER +CARAVAN +HARNESS +MAJORS +BELLS +FREEMAN +DENIM +SCAT +PUPPIES +TROPHY +EMOTION +NETS +SIGHTS +LIQUOR +WOUNDED +BASH +DOSES +EDUCATE +BAKED +GLOVE +SPINAL +SOONER +ENACTED +TENURE +PLUSH +WEBER +BIOTECH +NELLY +FULFILL +URGED +BRENT +GAINING +SHIFTS +ADAPT +THEREIN +FUELS +GREENS +NEAT +NAMING +STERN +SHAWN +SLAVES +DENTIST +CRAFTED +TUTOR +IDIOT +MICKEY +DEBIT +ALIENS +DOMINO +EDITS +RAVEN +STRAINS +SLICE +TANNING +GAMBIA +ASPEN +LACKING +ANGLES +LEMMA +SENSING +BUMP +COWBOYS +FLAMES +HALLS +PAUSE +RELAXED +DEMON +HANDLER +AUNT +CROW +DECIDES +CAPTION +TOLEDO +ASSES +COMPASS +CLOSET +COUCH +EVOLVED +DOWNS +ROGUE +UNFAIR +REBUILD +VACANT +FIXING +GRAM +HIDING +SITS +SHELVES +TOES +CLEANED +HONORED +OPTIC +INSECT +DIARIES +CHILI +GRIEF +SWEAT +DOLPHIN +WONDERS +MASKS +CELEB +BUST +LATERAL +QUAKE +ALLEY +SANDERS +REFUNDS +COLA +TWAIN +BREEZE +DEBATES +GEMS +BUFFY +OUTS +SNACKS +BOOSTER +TAXABLE +SADDLE +MALARIA +LOYAL +TORRENT +RENAL +FEDORA +ODYSSEY +SPITE +CAPITA +IMPLY +FREEZER +WHOLLY +CHILL +EMBRACE +LINER +MANILA +PURELY +LIFTS +VIVID +ENROLL +DAEMON +FOIL +BUDDIES +ALARMS +HUNTERS +CRASHES +STAIRS +ACTED +HOTLINE +AMPS +SKULL +SERVANT +FALCON +JOINTLY +AVOIDED +TICK +TERRIER +RENEWED +VARIANT +RILEY +CRITIC +SQUARES +NINJA +VANS +VOUCHER +GLUE +CONE +MARGINS +SANDS +BUCKET +STEAK +COMMITS +COBRA +SUBSET +THREW +ZOMBIE +RECRUIT +GALS +BIDDERS +WHEREIN +DESSERT +NINTH +MUTANT +MARRY +BOUNCE +SPIRAL +WILLS +ATOMS +TISSUES +DRAKE +OLDS +RAMP +NICELY +LAUREL +RAILS +FRIED +TRADED +MALLS +SHRIMP +CHORDS +SCOOTER +DESIRES +WOODY +CRIED +PSYCHIC +CRACKS +LOTION +BEATEN +VISIONS +TOPICAL +COCAINE +TUCKER +PLUGS +CODED +SUPRA +OMITTED +MOLLY +PEAR +CHIEFS +PARKWAY +CLUE +SCANDAL +DUFF +LODGES +DANGERS +BONUSES +SCAM +SCREAM +BIKING +PIRATE +TIMEOUT +SENSES +REPEATS +RIVAL +SLOWER +BECK +BEIGE +RESTART +ROUNDED +VANITY +TOME +PROF +HOMER +GASES +DIOXIDE +GENUS +CUTTER +ROOFING +ELASTIC +MELODY +SINS +COUSIN +HATH +TORQUE +RECALLS +DEBTS +RENTING +BURIAL +BALCONY +PROP +MYTHS +KNEES +NEGLECT +EMERGE +CLUTCH +POETS +WOVEN +PEDRO +MAID +TOWELS +BARBER +RIGID +HAHA +SALSA +BLOWN +BATON +RODS +ABBEY +PIGS +JERSEYS +REFUGEE +STRAPS +MAYA +STAINED +MARITAL +SLAVERY +EVITE +ROMANS +SHORES +FLOWING +DIETS +DEED +SAUNA +SUSTAIN +BOWLS +COSMIC +LENGTHS +BEACON +QUARTET +CRUEL +CONFORM +HELMETS +FIRING +EAGER +VACANCY +PAPA +CHANG +GLORIA +PUPIL +FEAST +CANTON +WARN +BONNIE +LAYING +COPS +STRIVE +SHELLS +PAINTER +COOKER +ANKLE +PESO +LEAGUES +MONKEYS +DIGITS +BANKER +EASIEST +BORROW +BAMBOO +DENOTES +VECTORS +DECKS +STEPPED +VENT +BLUNT +REACT +RISES +ISSUING +HEATERS +ACCENTS +INSANE +VOYAGE +COLONEL +SKETCH +NIGHTLY +DANCER +COATS +FIRMLY +DOTS +MUGS +WASHED +MOSAIC +FIESTA +VASE +FILINGS +FORCING +FAIRS +FLUTE +SIZING +MEADOWS +HARSH +OUTFIT +CEASE +ABOARD +JOINTS +POLES +BOUNDS +VERA +DEVILS +DIGNITY +SLIDING +HOMO +PIER +NAZI +COTE +ARRAYS +FELLOWS +IDEALLY +SPLASH +EQUIP +SAGA +GRAN +HEDGE +FENDER +VIOLET +DANCERS +HANDSET +MAXWELL +CURRY +OBLIQUE +PEARLS +WORMS +APPLES +POUCH +ADVENT +HOOKS +SINGERS +MAYO +MANSION +ARSENAL +SCREWS +PYRAMID +ENJOYS +HACKING +STRIPE +PEAKS +LISP +KEYNOTE +PLANTED +SPOON +BOMBS +NICHE +CIGAR +CHIN +LOCKER +SQUASH +SPOTTED +CURSE +COCONUT +WONT +REMOVES +TITAN +TUMORS +BOOKED +LUMBER +PILLOWS +PORTALS +ASLEEP +SHOUT +NUDES +HUBS +WHOEVER +SUBWAY +STRAW +LIFTED +MANKIND +CITRUS +UPRIGHT +REUSE +SHOCKED +BAKERY +ORCHID +LOSES +WIDGET +SUEDE +SODA +WAITED +PEACH +BREATHE +DIAPER +SMILING +OUNCES +UNCUT +INTACT +NOTING +SAMURAI +DUPLEX +LIGHTLY +RUNNERS +STOVE +TALENTS +REFUGE +CARVED +FREAK +BLUFF +JASPER +NEWBORN +SADLY +LAUGHED +AVAIL +ORCHARD +DEPLOY +HATCH +TOMB +REGINA +STEIN +SPILL +DRIFT +AUTISM +FULLER +BOMBING +METRICS +CRISP +PROM +SCANS +KEEPER +SPELLS +VAGINAL +ROOKIE +ENVIRON +BIRTHS +CUBS +WHEELER +RITUAL +PULP +ONSET +ENZYMES +ASSAY +POTS +PARSER +SLAM +TENTS +PLAQUE +LOWE +BEAVERS +CRIB +STYLING +SNACK +PULLS +QUIETLY +SCENERY +COCA +DRYING +NOUN +LEARNER +SWALLOW +SQUID +MARINES +PROVES +TRILOGY +CRAB +MAXIM +HIKE +BORE +COWS +SLATE +PEEL +DEBRIS +PAGAN +CHOPPED +WIDOW +SLEEVES +VIBRANT +SWEATER +SKIES +BURNERS +KICKS +CANOE +REMINDS +CORRUPT +DROUGHT +BAKE +SYMPTOM +AUDITS +SCALING +JUICY +FAVE +MOODY +GRAINS +THYROID +HEAL +WIZARDS +PEDAL +STORING +TOTE +JUMPED +TUNED +ALFA +STAPLES +SOUR +RENAME +MARKUP +SCRAP +BLONDES +SOCK +COPIER +TERRA +LITERAL +GUIDING +VAPOR +BEWARE +ALOUD +OVERLAP +BAIL +GOOSE +CRUISER +GIFTED +ESTEEM +CASCADE +ENDORSE +STROKES +LANDED +NUCLEUS +TEES +SCOUTS +WARSAW +MIST +VERB +CHIC +HYDRO +PLAYA +NOISY +ABIDE +VEST +REGRET +STAKES +BRIGADE +MOVABLE +DOUBLES +BLISS +TENS +LITTER +PARSE +RUGGED +JELLY +PUMA +APPOINT +HUMBLE +PETROL +MIDWAY +MANIA +FLYERS +HOSTILE +WHITES +RANT +TRAPPED +BOLTS +LOCALS +FRINGE +TYPED +GILL +TATTOOS +RUDE +SANG +CITING +PEPTIDE +HASSLE +REGENTS +DOCKET +NORDIC +CURL +THIRDS +DELI +INTERN +DARLING +OPPOSE +CHEER +CLUTTER +VINE +VALE +WHEREBY +SPARKS +SIMPLER +CLAMP +MAMMALS +GRAPE +CLONING +MADDEN +PEPPERS +DEEDS +LIVELY +TRIPOD +ALRIGHT +LAGUNA +LIMO +ALIGNED +RUST +TRAPS +SHUFFLE +RACER +GUILT +SWEEP +AVID +BLADDER +BETS +DUCKS +SHOOTER +PAINTS +CARR +FADE +TASTES +STORMS +SMILED +LUNAR +SHIELDS +INSERTS +POSED +TASTING +EXPOSE +ARISES +BRANDED +MANNING +FORKS +MONK +BOXER +SHINING +WEIGH +RODEO +VOYAGER +SAMPLER +MOOSE +CHECKER +CRUSH +MYSTIC +POOH +SHAPING +AFGHAN +INSPIRE +TORN +PUMPING +REVIVAL +LEVER +REGENCY +TASTY +MIDLAND +HECK +RANTS +TAROT +BARK +CARTS +WASTED +COCOA +INVITES +CUSHION +LYNX +FOOTER +PANTHER +MIXES +GRAVES +GHETTO +MEADOW +PANTY +FEEDER +MERCER +ROMS +GOODMAN +SUBUNIT +KANE +BULLS +HURRY +ODOR +REACTOR +WASTES +CLASH +BIKER +PARKED +FLEW +PEANUT +HOLDEN +TRUMPET +KAISER +NEURONS +RETIRE +RUMORS +APEX +CRIMSON +NEEDING +STAIN +WISHED +KICKED +CURB +GADGET +REIGN +TRIVIAL +DECO +TICKER +COKE +CLAUSES +BARON +REMOVER +BATES +BRASIL +WEBS +THRUST +PROVING +PROD +NOVICE +CANE +FURY +STIFF +ENCODED +WORE +TRACES +RABBI +SUSHI +PUFFY +ELBOW +FIGHTS +STARK +PADDED +CIRCA +REVISE +URANIUM +HONOURS +ANTIGEN +REFUSAL +LIMA +WEAVER +SECULAR +MACROS +MAJESTY +FISHERY +DUES +PEWTER +PUMPKIN +NOTABLY +INTENDS +GARMENT +RAZOR +COUGH +GRANDMA +GIGS +OCEANS +ARROWS +EUREKA +PLEA +BUNDLES +ISLES +OVENS +PRIESTS +PREY +ZODIAC +TUBING +FENCING +ARTERY +INLET +VIOLATE +REALISE +FLUIDS +LICK +STEALTH +NESS +CANOPY +GLOSS +PANDA +WHIP +PORCH +CONCISE +FIBERS +HANDFUL +BRAINS +EATEN +INDIGO +MOTIONS +SHAMPOO +EXCITE +REBELS +PSEUDO +QUOTING +SINKS +STEEP +DINAR +DYNASTY +CREED +CARAT +RAIDERS +SPREADS +SENSORY +DUMMIES +THRONE +SLOPES +SEIZED +ROUNDUP +LEASES +FAXES +PLUMP +MEMOIRS +EXPIRE +MIDST +METHYL +BORNE +FORGIVE +USABLE +TEMPO +ALMANAC +DENOTE +SLAYER +PROG +TESTER +POLLING +BINS +RELIES +SELECTS +TORCH +HAUNTED +SPARES +BOUT +ADVERTS +SALONS +HANK +UNCLEAR +HELPER +RANCHO +HACKS +ATTIC +PIPER +WEALTHY +SKINNY +SEWAGE +WRETCH +STEMS +RACIST +CONVEY +GOVERN +FEATHER +FOND +SORE +FIAT +REBOOT +SIXTEEN +BLINDS +TRAITS +TIGHTLY +GRADED +NOEL +CANS +ABUSED +BILLED +TOONS +BRUSHES +TENTH +SMILES +MERGED +DESKS +CAPSULE +AIDED +RELIED +SUSPEND +AIDE +KINDLY +CUTIE +SHARKS +NOTCH +MINORS +DANCES +MAPPED +LIEU +DECREE +LACKS +DAYTIME +CONTOUR +GAMBLE +DESCENT +GRAVEL +ANALYSE +JUDGED +SHUTTER +RESIDUE +REDS +ASSERT +GOODIES +INSPECT +THRICE +MUSINGS +POSES +NOIR +LAYOUTS +SCENT +SEQUEL +TITANIC +KNOB +WOLVES +HERPES +UPWARD +JUDGING +KICKING +FINES +GRASP +STREAK +OUNCE +TRAGIC +TOAST +HAPPILY +HOOKED +SHRINK +STANCE +BEADED +EXODUS +KINKY +DOVE +DERIVE +PRETEND +AMNESTY +NEEDLES +QUOTA +MACK +SUNG +OPENER +CHOOSES +JIGSAW +JUMBO +CROWDED +TURBINE +UNREAL +WOUNDS +MATHS +PROBES +FLINT +DUMMY +AWAKE +SWIVEL +ALLY +VARSITY +INSURER +BURNT +ALMA +INVERSE +HOLT +VERDICT +NOMINEE +MEDALS +PROTON +LISTER +STUDS +INCUBUS +IMPULSE +DULL +CABINS +LINENS +BEETLE +ROAST +TESTERS +HUMMER +HATRED +PETTY +BEHAVE +GETAWAY +BEES +ROBBINS +SHINY +ENCORE +SMASH +UNSURE +SOCKETS +AMPLE +ABUSIVE +MERITS +SCARF +GARLAND +RIVIERA +OBSCURE +GLAMOUR +HATED +SIGH +TROLLEY +SPICY +BLOCKER +FRANKLY +FOOLS +BEARD +LINKAGE +WEDGE +MOCK +BATS +RUINS +SHEILA +RIPPER +CHATEAU +BURGER +CHANGER +MELT +HYPER +CYPRESS +CITES +GAMER +TAILOR +FAUX +SAVVY +PASCAL +UPLOADS +PANT +GALLONS +NORMS +HYPE +FAULTS +SILVA +GREASE +URINARY +CAIRNS +PREMISE +PRIMA +CONDOMS +RITE +ALBA +FETAL +PALMS +SEATED +LATTICE +DONG +CHORD +TURF +ASPHALT +REPLAY +FLAVORS +DILEMMA +SHIFTED +SMOKED +HAWKS +PLACEBO +IRONS +COMET +BERG +MUSE +PROBING +TYNE +LOTTO +FOWLER +SYRUP +WARMTH +LUST +VERSES +SOLVENT +TOGGLE +LUNA +SPACING +BARKER +SOLIDS +MERGERS +CERTIFY +DEMONS +COPING +CURVED +ERASE +LIEN +BITES +PROSE +ARGUING +VEIN +HALE +SWEAR +CLOWN +SUMMERS +TABOO +WETLAND +CONSUME +AMAZED +VOLCANO +SOMEDAY +SOUNDED +HONESTY +DWARF +SHOCKS +KILLERS +LASERS +CANDID +CAESAR +SAVERS +PINES +STELLAR +FUCKS +PUSSIES +URGES +TIFF +DECKER +BAIT +EXTERN +BADGES +KITTEN +CODEC +BRIDES +DENT +BULLETS +GLOSSY +HAIRED +LETHAL +CAVITY +MOLDED +PROBATE +DECALS +BEAMS +PROPS +INCENSE +DOUGH +STOOL +MACS +TOWING +WELCH +SEISMIC +HORDE +MOMMY +NANNY +SUBURB +SMOKERS +COHORT +SUMS +LINEUP +GLACIER +PUEBLO +GIGABIT +RELIEVE +ROACH +CLARION +LAME +SQUEEZE +ASHES +NYLONS +NATAL +LOCUS +MISSES +FACTUAL +PURITY +SHAKING +CELLAR +PRONE +FUSE +LOBSTER +POPS +AMID +ONIONS +PRETEEN +BONDING +CROSSES +ISSUER +FURNACE +DOUBLED +CLUES +RABBITS +CREWS +ANXIOUS +TARIFFS +BAPTISM +CUTLERY +KNOT +ACTA +SWORDS +TIMED +EVOLVE +YUAN +DIFFERS +LEASED +TATE +BREWING +COOP +BLOSSOM +SCARE +LOWERED +KRIS +THIEF +PRISONS +GRABBED +ROCKING +REGS +SWEETS +EMPLOYS +BUBBLES +PITCHER +STANDBY +MOTIF +PLUM +SALOON +LOFT +UNISEX +WALLETS +HURTS +ETHANOL +FOLDED +LUMP +HALT +UNPAID +GHOSTS +DOUBTS +WORRIES +REJECTS +SPEAR +REFEREE +SWINGER +BROADLY +AERO +PARSONS +BURY +BOUNDED +INSIST +BIRCH +SLASH +RESALE +MIKES +SCALAR +SESAME +DUCT +TOUCHES +PURSUED +LEND +YACHTS +MISUSE +HELIX +COSMOS +PANS +LEGION +BIOMASS +LESIONS +SHOOK +SAUSAGE +ADDICT +MATTE +PISTOL +JUNIORS +ROCKETS +ZEBRA +RUNWAY +ADMITS +BUCKLE +FETCH +IONS +ASSHOLE +DIVERS +UPSIDE +ADMIRAL +PATRON +BOILER +INDUCE +PADDING +POPCORN +ESPANOL +UNITE +CRACKED +DEBTOR +SHEAR +MORTAL +RAMS +GENOMIC +GOWN +PONDS +ARCHERY +REFUSES +SABBATH +RUIN +TRUMP +ESCAPED +MATES +AVIAN +STELLA +VISAS +ANYWAYS +CEREAL +DRILLS +CHAMP +HOSPICE +RENTED +BRUSHED +OTTO +ANNUITY +RECAP +OPENLY +CRAWL +JABBER +ROTATE +FLAWS +TRACING +INCOMES +FRAGILE +SAPIENS +RUSHING +BEHOLD +TRAINEE +TUNA +HAZEL +WIPE +LEDGER +SCARLET +CRUSHED +LAUGHS +STATUES +DEPTHS +SPICES +LOADER +LATENCY +THEMED +MESSY +RUPEE +SUBSIDY +FELONY +LUNGS +GROWERS +HAUL +DULY +ROASTED +TENDERS +MICK +GENTOO +MUSTARD +STRAIT +OBEY +DONKEY +JACKS +BOASTS +PRAYING +RADIAL +MARE +STOLE +ARMOUR +SHAVING +BISHOPS +KITE +TONNES +CORONA +HEAP +BYLAWS +QUASI +RIBBONS +EXILE +RESIDE +CASHIER +EATS +KNOTS +FLEA +PALS +HAIL +KAPPA +BLENDER +JUMPS +BLASTER +WASTING +DECODER +SELDOM +MORROW +GLITTER +SIDEBAR +LASTED +SNOOP +AWHILE +WINERY +SCALED +PHOTON +VAGUE +OVERLAY +WRAPS +RUSTY +HERD +WARNS +BITCHES +STING +BRAVO +TRIVIUM +RESTING +COARSE +LITER +CARPETS +ARCHER +WARMER +DRYERS +CALF +BASIL +PACED +GROUPED +ORIENT +CONTRA +BOILING +PARSING +ABANDON +RAVE +CIGARS +CINEMAS +ENCODER +MAROON +DRAFTS +JERK +SHACK +MARROW +TAVERN +BATHING +LAMBERT +GOGGLES +UNHAPPY +CLONES +SLEEK +RUNOFF +ARIEL +CAFES +JUKEBOX +HITCH +NEXUS +CANCERS +TANGO +MELTING +GARNER +BUSTER +FLAP +KARATE +SINGS +SORROW +CARTE +CANNED +QUEER +PAINS +WRAPPER +DRUMMER +COMMA +GEEKS +AVANT +SUPPER +HOODED +UNRATED +DIVA +LENGTHY +SONATA +STOOLS +AGENDAS +TORAH +STACKS +OWNING +BIPOLAR +SERMON +TAPS +THRILL +LAGOON +INBOUND +REGIMES +OATH +PIGEON +RIVALS +FREED +BINDER +PARROT +MAGNUM +INVOKED +GALA +CHEEK +UTTERLY +LASTS +KINETIC +GLIMPSE +QUICKER +SMARTER +ATTAIN +CALORIE +TANG +FARTHER +BOWEL +CHATS +MAFIA +RIOT +FATS +DUNGEON +GERMANS +SHIRE +KASHMIR +SKYLINE +SULFUR +SCAMS +LIPID +CORPSE +SPEEDY +RITZ +LUSH +BARRELS +CABLING +STILLS +BIASED +PLAYOFF +BREWER +PAYLOAD +ADHERE +GRILLED +ENQUIRE +TOILETS +MAINS +WHALES +MISTY +PARITY +GRIM +REWRITE +VENDING +PRISM +CHASING +FLOP +BATTING +RESTS +TOSS +GRAPES +WINDING +RIPPED +VEGAN +COBALT +PITY +SYNERGY +ASPIRE +GROOM +JEWELS +DOUGHTY +BONDED +WEEDS +BEERS +FIXTURE +CANARY +WOKE +FILLS +GRIPS +CLERGY +KAYAK +ALTAR +SALVAGE +GEARS +ORBITAL +CUFF +EMPIRES +REPS +OYSTER +STURDY +UNDERGO +RISEN +BLENDED +RHINO +DIGGING +LANTERN +CATCHES +RULER +TOKENS +KIDDING +PIPING +SWEPT +AIRMAIL +STARING +SEVENTY +TROOP +AROSE +ELDERS +HEROIN +HOGAN +WHISTLE +SULFATE +OLDIES +EDDY +PAROLE +SPOUSES +SLIPS +NINETY +TRAYS +CUES +KISSES +FLOCK +SUBPART +BENDING +DENYING +RECYCLE +SHAVE +COLT +FURNISH +RUBBISH +KNOCKED +SWAMP +TORNADO +TURTLES +OFFS +LEARNS +HICKORY +INMATES +SLICES +DAMNED +FAINT +REBUILT +FIERCE +JARS +HIPS +GLAND +WIGS +STRIPED +BLENDS +HUNK +CHAP +BLOWS +TELE +STOKE +GRILLS +HARP +PHAT +ESCROW +ANTHEM +TACK +SACK +SURFERS +ABUSES +JOCKEY +PEEK +MONARCH +HOUSED +NASAL +COSTING +RANGED +SPRUCE +PARADOX +NITRO +JACKPOT +HALFWAY +CORTEX +LOSER +SECS +MIXERS +BRAVES +SUED +SHOOTS +CLOVER +NEUTRON +DIRECTS +JOLLY +SNAKES +FEMME +RESIDES +WORDING +OBLIGED +SIEGE +TRUTHS +REDWOOD +THERETO +TYRES +ENAMEL +TOBY +RADIANT +VIRGINS +FIRSTLY +MARTINI +BUTTE +BOMBER +REEVES +BASTARD +COASTER +SPENDS +HICKS +ALMOND +CHALK +AXLE +PUPPET +GRAZING +PILLAR +MIRAGE +SEASIDE +RENAMED +COBB +SOLUBLE +PIRACY +ROWING +SIDING +HARDEST +FREEWAY +WRATH +OPAL +PATRONS +TOON +LARS +GRIND +ALBEIT +BANKERS +FREAKS +SAMPLED +SINCERE +BLITZ +TENDED +CACTUS +VIVA +BLEW +HOWE +LAVA +SUCKED +BRONCOS +COOKS +SHARPLY +RAINY +REGENT +VINEGAR +RAFTING +VAIL +MISERY +SAFARIS +ENVY +MAILER +PREFACE +LINERS +UNREAD +PENCILS +QUINTA +FORGED +BISTRO +VIOLA +VOODOO +CACHING +RUSTIC +RUMOR +SHAH +VOLTS +RUSHED +BOTS +WEIGHS +DIVER +CASTLES +NOTIONS +PLATEAU +DEXTER +RINGER +ZIPPER +PALETTE +BLAZE +WRECK +ONBOARD +ROBBERY +JASMINE +CROCHET +BROCK +CROWDS +HOOPS +MACON +STAMPED +UPTAKE +GEARED +IDEALS +TYCOON +DISMISS +LAWFUL +STAG +RASH +HORNS +PRESSES +TANDEM +BOIL +GAGGED +BARLEY +POTENT +AMUSING +NERVES +RETAINS +DOCKING +CHIMNEY +PACKERS +RISKY +CARVING +SLIPPED +REALISM +SHERRY +INDIES +TULIP +MADAME +VAIN +DALTON +BOLOGNA +MAZE +RODE +AMEN +OWING +WARP +IMPLANT +DENIES +BUFFERS +DRAPER +BOWMAN +ZETA +BENNY +SPIRES +MASONRY +ACCRUED +TEMPLES +INDOORS +CHAMPS +SALADS +EIGHTY +STAGING +SCARCE +ROPES +SPIDERS +PLAGUE +DILUTED +CANINE +GLADLY +BREWERY +LINEAGE +BREW +KERN +COUP +MORSE +PISTON +CORDS +SEALING +TOPPED +DESPAIR +FORE +ABSORB +ALPS +DUMPING +MAGENTA +TAGGING +DITCH +FEARED +PRELUDE +SLICK +OVERLY +CHUNK +REELS +SLEPT +DRAFTED +CHALET +LAYERED +HOPPER +SUBS +FILLER +SMILEY +ZENITH +BROWNS +WAITS +TENOR +COPIERS +OVARIAN +SOFTLY +PLENARY +SCRUB +LIMB +CELLO +SUFFERS +OCCUPY +MIDTOWN +CAVES +IMMENSE +MERLIN +COCOS +AIMING +SEIZURE +LIMP +MUTE +BEANIE +METRE +TRICKY +SPACED +TOPAZ +SOAPS +DART +PSYCHO +WROUGHT +ROBE +TUTORS +CAPTIVE +KETTLE +BAGGAGE +DUSTY +PATTY +SATIRE +VIKINGS +CRATE +HUMANE +MAST +CARED +SWORN +VICIOUS +COZY +HAYWARD +COMB +LIQUIDS +BEECH +FROGS +EXPAT +RAIDER +TIMERS +MINERS +ROCKER +ALAS +SAWYER +TENSE +COOLED +MIGRANT +INVOKE +LEANING +PADDLE +CHOP +EYEWEAR +ROOTED +ONYX +BENCHES +FOOLISH +FINALE +WEAKER +DECAL +COMPOSE +NAUSEA +HOOP +TEMPS +CLEARER +FLOODS +FRITZ +MOVER +MODELED +ERICA +DIOCESE +THISTLE +SLEEPY +NOPE +SHRINE +ASPIRIN +DIRE +GULL +MEMOIR +FAUNA +CLIFFS +SMELLS +DISPOSE +DETOX +WAKING +REFLEX +FALCONS +SPURS +ORTHO +CRASHED +URGENCY +FLASHES +BRIT +CARERS +RIMS +DARTS +SHIN +KEYPAD +FLAW +TAILS +BIBLES +HANGS +QUARK +DOLCE +PANE +ANGULAR +VEINS +FOLDS +GRINDER +SNEAK +OCTET +SAUCES +CONQUER +VIBE +CREOLE +METH +TRENDY +TEAS +FILMING +BADGER +IMPRESS +WILLY +ANON +EMINENT +RIBS +QUILTS +AGEING +SPLITS +CHEQUES +ALIASES +SCREWED +TOMCAT +TIDAL +BALLOTS +TESTIFY +BOYCOTT +CLERKS +CRUST +DOLLY +PISSED +NITE +BARB +HUNS +MINER +GENITAL +ANALOGY +AURA +SPONGE +SECT +DINER +WINTERS +NOUS +MOUND +SNATCH +MOLE +OWED +ORGASMS +KISSED +BUFF +BUTCHER +PSALMS +CHEFS +HAMLET +CLAD +GRANGE +FLED +BRANDY +SWINGS +SCION +VORTEX +PURSES +BODILY +HOODS +EQUINE +BROS +LIZARD +WEARS +REGAL +CABBAGE +ARRESTS +SIGNAGE +ENCODE +SLICED +BREAKER +CURLY +COLLAGE +ACES +JEALOUS +LEARNT +HOUND +GAUGES +WHARF +RHYTHMS +FLICK +DATUM +SHOTGUN +LANGLEY +MAIZE +UNAWARE +PSALM +SCENTED +GOWNS +SPYING +LIED +SANDBOX +BLOC +LEAKS +SWELL +KOSHER +MANTLE +CHICO +IRONY +GESTURE +ARMIES +HUGS +SANTOS +OWLS +CUTTERS +CAMPER +CEASED +MERGING +PLAQUES +BREADTH +MAMMOTH +INNINGS +PARCELS +PASTRY +MANNERS +LEVIN +AMIGA +VIPER +GYPSY +THIEVES +PIMP +REPEAL +GIMP +HEMP +PELICAN +CYCLIC +COUSINS +CONDOM +ADMIRE +DODGERS +LITRE +POURED +BINDS +TEXTUAL +SUFFIX +SPINDLE +HEAVENS +INKS +WINK +MISTER +FLARE +WIGHT +COUTURE +FOLIAGE +FIFE +CRANK +GOATS +STUB +CREAMY +RAINS +TORT +BRACE +BACKUPS +MAYHEM +WASHERS +OCTAVE +STRUTS +DAMS +PROOFS +GARTH +ALLOYS +MACH +CONN +ARGUS +MANGO +SPUR +JUBILEE +POLITE +SITH +THIGH +PAVING +CYCLONE +MEATS +BULLDOG +GRADUAL +SKIS +PACT +LULU +WINDY +ALAMO +MASTERY +VITA +STEER +NESTING +VOGUE +AIRED +OUTWARD +WHISPER +BOOGIE +VODKA +MOLDING +ZAIRE +BRICKS +LEOPARD +JINGLE +BOUNTY +ARCADIA +FISHES +RINGING +KNOBS +WHISKEY +ABSURD +STOVES +EARRING +EMBRYO +SALTS +FURIOUS +UNSAFE +REFILLS +IBIS +SOUPS +MOIST +DRAINED +COED +MULE +SHEIKH +KIWI +APPEND +MOTIVE +PESTS +ACREAGE +DUEL +STOCKED +BETHEL +MOTIVES +PROVOST +STOKES +LAKERS +MEAD +STEROID +GONG +RESETS +ISOLATE +BAYS +ACRONYM +VERITAS +FAULTY +MESSIAH +BRUNCH +PUNDIT +MUTANTS +EXPIRY +SENSUAL +PETIT +BURGESS +INNING +GAZE +FRIES +FRESHLY +FOUNDRY +MONIES +ACETATE +POINTE +STALL +MARCEL +HULK +CYAN +CORY +PORTAGE +SERIF +ALAMEDA +AEROSOL +HOSTAGE +CRACKER +MONKS +STOREY +SCOTCH +SERMONS +COOLERS +AUDITED +ADJUNCT +GALORE +ALOHA +AXES +POSTFIX +HAZE +PITS +UTTER +BOTTLED +ANTS +GASTRIC +RENTS +CHRISTY +THEIRS +TODAYS +TOASTER +CATER +COLTS +TUCK +SLAB +LURE +KART +LING +EMBLEM +ROADWAY +SERIALS +DUNES +MURDERS +BOTTOMS +TUBS +MEDINA +SNIPER +PINCH +SCOPES +BRACES +TROLL +FILTH +WIDGETS +MAGS +KRAFT +CHOPPER +NITRATE +PINBALL +SKATES +HERS +GRIN +TUNNELS +CRISES +HEAVIER +SPIT +DARKER +GLOBES +ALGAE +DISSENT +MAXIMAL +CHORAL +EDIBLE +ANARCHY +CLICKED +DRAWERS +ACME +LEAKAGE +SHADY +CHEMIST +EVENLY +ROVE +PROPANE +PRAISED +RHYMES +ERECT +VESTS +COYOTE +BREEDER +CHOW +POLLEN +DRUNKEN +VALET +SPOILER +SHRUBS +BAROQUE +BARROW +JIHAD +RIFLES +ARIA +EXCISE +POETIC +MORTAR +BLAMED +INMATE +DIRK +POSTURE +THEREON +VALLEYS +SEPTIC +ARMADA +WRENCH +THANKED +SCAR +APOLOGY +RAPED +COLLARS +PUDDING +FLAWED +DORM +SQUARED +PIES +TAXIS +HATES +FENCES +COOKERS +LUCKILY +LIGHTED +ERECTED +DIALING +MIGRATE +CARTON +MENTORS +AMMONIA +OUTLAW +TAMMY +SAWS +BOVINE +DISLIKE +MADAM +TIGHTS +SOYBEAN +BREWERS +TEASE +MOTLEY +AROMA +PIERCED +CAIN +COCO +PUNISH +CAUSAL +ROWAN +DWELL +HACKED +AWKWARD +WEAVING +STAIR +DINE +CLASSY +LOOKOUT +IRONING +SLAP +JAWS +ENTROPY +SNOOKER +SALINE +SONNY +STERILE +ORIOLES +BOTANY +ROTOR +QUART +THERES +BISON +ALLEGRO +FUNGI +DREAMY +SCROLLS +FAIRIES +GREED +SPARKLE +GASKET +REFRAIN +LASTLY +WANDER +FIREARM +ANTE +MICRON +BUNDLED +PANTIE +BOMBERS +COVERT +CRATER +FAVORED +BRED +THENCE +BLEED +SHEA +GOBLET +FRONTS +INCUR +CORES +NODDED +NIFTY +UNVEILS +PEACOCK +UTMOST +INFOS +HELPERS +ELAPSED +ANTHRAX +TOUT +HOPEFUL +SPINACH +CHEEKS +HARE +BEASTS +PLANAR +PEANUTS +DISCARD +CAVALRY +QUORUM +PLAT +DUKES +TRIMMED +FERRIES +MULLER +MOSQUE +FUDGE +VESTED +EARNEST +TORY +SANDER +CLIMAX +WEAVE +EXITS +PARDON +OUTBACK +TELLER +BIOPSY +VEIL +PECK +QUARRY +SENECA +OCEANIC +HELM +FESTIVE +HUSTLER +JESS +INSULT +SCRAPS +WAIVED +CURED +BUGGY +RECON +KENNEL +DRILLED +ROYALS +SLACK +PASTEL +JAYS +PILGRIM +VINES +GORGE +CARROT +OPAQUE +SAUL +FLAMING +EMPOWER +LIENS +HURLEY +PEDALS +CHEW +TEAK +PREVAIL +CAGES +METHANE +PAGER +BANJO +SHAKER +NATIVES +STOUT +DEEPEST +SANE +CLIMBED +RELAYS +FADING +ROAMING +SIBLING +WEIGHED +ASHAMED +GORILLA +ENDURE +INHIBIT +DICKENS +JUNIPER +DUNE +CURSED +BLOWOUT +YOUTHS +TUMBLE +OVERSEE +STARE +MISSY +FLAIR +HELIUM +CLEMENT +FINELY +ROBOTIC +MANA +LEST +FILMED +SMOKER +BENIGN +AISLE +BLUR +LIMBS +PUNT +SLUDGE +CRYPTO +TANNED +BUNKER +PAVED +PASTURE +RICHEST +CRUELTY +SCOTS +PLUGGED +MARSHAL +RITUALS +SEIZE +SPAWN +BLANKS +EPOXY +SAILORS +STONY +ANNALS +SADNESS +LOSERS +FLAVOUR +CRYPT +ONWARDS +BOGUS +PROMPTS +WITCHES +BARRED +SKINNER +NOUVEAU +FEEDERS +URGING +FADED +TYING +DIODE +MELTED +WHORES +MOTTO +SINGLED +STAPLE +RULERS +CENTRIC +MILITIA +BANANAS +GOLFING +GRILLE +PUSHES +KITTENS +DETER +FURRY +CUBES +SCARVES +RINSE +OUTFITS +ULSTER +TIDES +VENOM +TAILED +PUPPETS +TAPPING +EXPLODE +ESCAPES +BERRIES +HAPPIER +MUMMY +STACKED +WINGED +CRIES +RUINED +CATCHER +SANITY +ETHER +SUCTION +CRUSADE +RUMBLE +HEROIC +SHEDS +BONSAI +SPHERES +ASSIGNS +SOFAS +BOING +WHIPPED +DINNERS +SELFISH +FAUCET +MIDGET +BOILED +HAUTE +HERRING +WACKY +ANEMIA +BITING +IDIOTS +MUDDY +SAVANNA +PAGING +NUDISTS +SPIKES +KEELING +YIELDED +LATENT +SHALT +SPARROW +POOREST +HECTOR +MILLING +SINKING +SULPHUR +WICKER +NEPHEW +CONFESS +CHAOTIC +VISOR +TRACED +MYRIAD +STAINS +SANDAL +RUBBING +NAIVE +DETECTS +HANGER +DRAGGED +FOREMAN +HIRES +CONDUIT +ECHOES +LADDERS +PRUDENT +GLOWING +BLAZER +ALCHEMY +LINDEN +AUDIBLE +FOLIO +COLLEEN +LEXICON +DUMPED +BARRE +FIERY +CONVEX +RICHER +SURFER +DIAPERS +PAIRED +FAKES +VAULTS +YOGURT +TOSSED +CAUCUS +PILLARS +SALUTE +SHOPPE +PARODY +LACKED +PISTONS +ACORN +BOSSES +CATION +THRIVE +RIGHTLY +PARAGON +BASAL +TURNOUT +BRUINS +PERSIST +CLAMPS +ILLICIT +FIREFLY +PLEDGED +CURLING +SMOKY +FLIRT +SLANG +PRINCES +FINCH +LARGO +PLURAL +SKIPPED +TALLY +TEMPTED +CREEP +SHADED +PLASTER +HEARTED +AGILITY +UPSCALE +AGILE +SACKS +KIOSK +IONIC +STRAY +RUNAWAY +SLOWING +HOODIE +PAYOUT +POPPY +FRENZY +JARGON +SLEEPER +UNNAMED +JERKING +BAZAAR +SHARPER +GREEDY +TERMED +COOLEST +DOWNING +BASQUE +HALOGEN +DORADO +DARING +REALMS +MAESTRO +FORTE +COAXIAL +TIPPING +HOLSTER +FIDDLE +CRUNCH +FAUCETS +PAYOUTS +CALIBER +APOSTLE +PLAYFUL +STYLED +WAIVE +SOPRANO +MARQUIS +LOGGER +GREET +ACCLAIM +BIRDING +LYMPH +ROLLERS +PUMPED +WEEKDAY +REVOKED +LATCH +VERBS +DRANK +GROWER +OUTPOST +LITRES +CHATTER +SANTO +LETTUCE +RAGING +ASSAYS +TORSO +OCCULT +HOOKER +LILIES +AEROBIC +ECSTASY +FULFIL +LUCENT +STRANDS +COMPOST +GRABS +MARLIN +PULSES +THESES +FLOODED +CORSAIR +IRONIC +WARDS +HINGE +ULTIMA +COCKPIT +CARROTS +RESUMED +STUNT +MAVEN +EXCUSES +COMMUTE +STAGED +VITAE +HUSTLE +STIMULI +UPWARDS +WITTY +LOOSELY +ANCHORS +HERTZ +ATHEIST +CAPPED +LIKING +FUCKERS +BLOWER +FLOWN +DUBBED +SILKY +GROOVY +GRIZZLY +CHAIRED +REPAY +HURTING +AWAIT +SPARSE +FOSSILS +FETUS +CIDER +CROOKED +GANGS +REMAKE +BRAILLE +LILAC +SINUS +CHARMED +HEARS +CLEARS +PIVOT +SOARING +VIRTUES +BANNING +GLIDE +BLOOMS +JACKING +SLOGAN +BISCUIT +CREME +SUBMITS +WALTZ +MENACE +EMERGES +BLUSH +LEAFLET +MONDE +INFORMS +DRAMAS +GEISHA +UNSEEN +SILICA +MODAL +WIDEST +MEDLEY +CADET +TEMPER +ASSERTS +CARBS +MARINER +COLLIER +ARTISAN +AQUEOUS +JUICES +MORALE +MORALES +SOLDER +TRENCH +OPTED +LODGED +REVOLT +RENDERS +SHINES +REGAIN +RESIZE +TWEAK +TRAIT +POPPED +BUSTED +BASINS +OTTOMAN +GRADERS +EATER +TUNERS +UTOPIA +SLIDER +INSISTS +POURING +HIDES +MANURE +SAVIOR +SECRECY +DREAMED +FERTILE +HINGES +CREEPY +SYNTH +FILTHY +LAYUP +PIAZZA +DENOTED +NAZIS +ONESELF +PILES +VAGINAS +STROLL +ANOMALY +THIGHS +INFECT +BEZEL +AVATARS +DOTTED +FRONTAL +HAVOC +ARSENIC +SYNONYM +DOOMED +FRANCS +BALLAD +SLING +DEVISED +BILLIE +RAVENS +OBSCENE +UPTIME +NUCLEI +TUMMY +AXIAL +SLOWED +OUTING +BURGERS +CAMPERS +AFFIRM +SPELLED +EPOCH +PLAID +FABLE +RESCUED +PADRES +SCARS +WHISKY +UPTOWN +BATTER +RECTAL +NUGGETS +PESOS +SHAKES +EMBRYOS +SPANS +PALLET +PISTOLS +GARAGES +TANNER +AVENUES +UROLOGY +OBESE +SOBER +TREAD +ZOOLOGY +STEALS +WIGAN +PADDY +HUSKIES +PLUNGE +CHASER +VANTAGE +DIFFUSE +BOREDOM +CROSSE +MONDO +FLATBED +SPADES +COFFIN +OTTER +GOLFERS +EARNS +RECESS +SHOUTED +STARED +SASSY +VASES +ADVISES +COWARD +TEAMED +PRESET +DRESSER +RICHES +RESIGN +RAMPS +TACKLES +POISED +BARKING +DREAD +TACTIC +SERPENT +TAPPED +PITCHED +WISELY +STEAKS +TOXINS +CASTS +TUBULAR +AVOIDS +LARVAE +KERNELS +FUNGAL +LIGAND +RIDDLE +FAINTER +CABARET +AWAITED +NOZZLE +NEEDY +WHEELED +NOODLES +DINERS +CORNING +ARMORED +WEARY +TWEED +SNOWY +PIANIST +PIGMENT +FACTION +GENIE +CHARS +RULINGS +SLATER +ORPHAN +LINKER +CARVER +SHOUTS +EPSILON +ANNOYED +STALLS +FINED +INWARD +GREETED +STARCH +APRON +GLAZING +TYRANNY +REGIMEN +FLUFFY +SLENDER +BENDER +AIDES +GLAZED +DASHED +BULLOCK +YUMMY +MOMMA +MERMAID +SEXES +WILDER +CENTRED +UNCOVER +HUSKY +BLAND +ROUTED +ABIGAIL +SHAVER +SAILS +PORTED +ROBES +FUNGUS +CHUNKS +BOURNE +REVERT +IGNORES +POPPING +PANDORA +ENIGMA +GLANDS +LATINOS +INFERNO +ARENAS +OUTSET +CONFUSE +ADEPT +LOUNGES +TRUNKS +STRATA +SOLVER +HYBRIDS +KUDOS +CREAMS +ENSURED +CEREALS +OUTRAGE +SCRUBS +KRONA +DEVOTE +FACETS +NOISES +BOOTHS +ELUSIVE +MADEIRA +HALLWAY +RIPPING +POLYGON +ESTER +SERVO +HAMPERS +SNAIL +CURATOR +DEMISE +GROOVES +SUTRA +MOWER +SWINE +FAXING +QUICKEN +HERON +GRAFT +DERRICK +ENVOY +STENCIL +DOORWAY +REDDING +WARDEN +CLANS +NOTARY +ABORT +INDENT +BARLOW +EDGED +DUVET +SPADE +GLARE +DECODE +LOONEY +PLEDGES +SULTAN +MASKED +CASING +PLOTTED +GRIDS +SPACER +SPILLS +REAPER +BROADEN +BEGGING +HANDOUT +BUSHES +CONTEND +HAIKU +PAISLEY +CUTOFF +GIBBONS +NITRIC +VISUALS +BREADS +GLOVER +UNICORN +FLOATS +ORDERLY +WAFER +STASH +ROOFS +REEFS +SEMEN +HOVER +MOLDS +FLANGE +CHILLED +CITADEL +WRINKLE +INDULGE +HEARTH +MELODIC +GENOA +STRIDE +LEAFS +BLEACH +FERRET +AGONY +TALLER +ENRICH +RAFFLE +MASCOT +PRIMERS +LACEY +PREACH +CONES +LUPUS +TAXED +PETALS +GATOR +HELLER +WALLA +REMIXES +TAPED +DOCKS +BULLY +VALIANT +BANGING +VERTIGO +FLUENT +RHYME +RENTER +SUFFICE +DEBATED +WALKERS +BOOKER +KEEPERS +ORANGES +SNORT +AIRWAY +COMMAS +ANYHOW +OBTAINS +PRIMAL +STRAITS +UPHELD +SUBSETS +BLAZERS +TRIAD +FITCH +ENDOWED +ALAMOS +CAMEO +ATTIRE +LEACH +FANNY +MILKY +COMBS +UPLAND +OUTAGE +CHUNKY +ADOPTS +RAPTOR +COULTER +SNAPS +DEFENDS +DEPICTS +GLUTEN +SPANKED +HURST +ASCENT +NOTEPAD +TEDIOUS +CRAPPY +GOLFER +CHEWING +WELDED +CIRQUE +DEPICT +COILS +CALLERS +NAVEL +INTERNS +QUOTAS +SUCKER +BUMPS +BIKINIS +WILDLY +SABLE +ADDICTS +NEATLY +SPANIEL +SPOOL +ROVERS +VOICED +ANNOY +GRANDPA +GUESSED +KENNELS +TOXIN +AXIOM +STAMINA +ABOUND +CURING +CONFER +VENTS +MATER +CROWNED +CRANES +ROOSTER +PROCTOR +HUMPS +DICTATE +JOKER +TRIMMER +HIKES +KICKOFF +WIPED +ABDOMEN +FRACTAL +PRAYED +HEIRS +TWILL +CURES +KICKER +FASTING +LOUDLY +RACERS +RECITAL +PAIRING +BEDTIME +RAPPORT +CATFISH +BRINK +TRUSS +PEACHES +SKIPPER +DRAINS +MAXIMA +PINOT +KHAKI +SLOUGH +PRODIGY +MOULD +BLASTS +POORER +SHAKERS +BOURBON +RUBBED +LEXICAL +UTERUS +TRASHY +CHIMES +GIMME +PLATTER +SHAMAN +CROFT +PENAL +PAGEANT +PLYWOOD +BINDERS +TRACTS +MORALLY +HOSIERY +REPTILE +OVERDUE +RIOTS +SHOWBIZ +TEASING +UNBOUND +NESTLE +BOXERS +LAPSE +WALLY +HEPATIC +SHRUB +KINDRED +AQUIFER +CONDEMN +AWAITS +AMENDS +FULLEST +SHAFTS +FINER +MARLINS +BURDENS +SHELLY +EXITING +BROOCH +MOTIFS +SWOLLEN +GRASSES +SCATTER +STEWARD +SMACK +CODEINE +TOUGHER +CLOAK +CLIPPER +CYNICAL +MANIC +ETCHED +CHOKE +TUXEDO +MOUTHS +HALTER +HAMSTER +LUMENS +PACKER +ARROYO +TIPPED +AMIDST +ETCHING +GRAVY +INHERIT +HANDING +PAYER +LABORER +RESINS +WATCHER +ABBAS +MOODS +COUGAR +DOBSON +SURREAL +SOAKED +RASTER +QUIRKY +PALATE +ENCRYPT +PAJAMAS +QUESTS +SAYINGS +PLASMID +UPSTATE +TOPPING +FUELED +GLAZE +PELVIC +PHASED +AIRBUS +SIMPLEX +INFRA +CONDOR +GATED +RASCAL +DIZZY +CRIBS +RELIANT +PSYCH +VERGE +RANSOM +NOMAD +TWELFTH +DAGGER +THORN +SPINS +SOLICIT +ORCHIDS +BUCKETS +SPOIL +LAUDER +PHONO +BLAZING +GRANTEE +ANGLERS +SNAPPED +INVADE +HOSES +STRIVES +PIVOTAL +PLATING +INVENT +EAGERLY +SISSY +TROOPER +HYMNS +PALSY +CUFFS +FAMINE +ORALLY +JOGGING +HORRORS +BEARER +PASTORS +PITCHES +MORALS +INVADED +SPOILED +PICKLE +DIETING +QUAKER +TANGENT +TEMPEST +XENON +WAVING +UNEVEN +ROCKERS +BAYOU +QUEUES +STAFFED +ORPHANS +LOUDER +BOILERS +YELLING +TROUGH +LEANED +TONIC +RESELL +BURNOUT +HARROW +RAINING +PEASANT +EPHEDRA +CITRATE +SNOWMAN +THORPE +SAUCER +CHINOOK +POTTY +SPOOKY +RITES +DEVIOUS +DREAMER +ESTUARY +POUCHES +DITTO +WAITER +ODDLY +TYPHOON +INDUCES +TOOLING +THRIFT +TIDBITS +ADMIRED +STUNTS +CYSTIC +FAIRWAY +EMITTED +SPINNER +BRAKING +WEAKLY +PARSLEY +UNDUE +SETBACK +STUNNED +SMITHS +GROVES +REFLUX +CULVER +ELVES +CHANT +TURNKEY +SPRAYS +RENTERS +TIGHTEN +HUTCH +CROWNS +MATTED +APRICOT +TUFTS +CUCKOLD +PARRY +TONGUES +MANTRA +SOURCED +RAVES +MAMMA +ENTAILS +FOLLY +MURAL +WAGER +TUNDRA +PURGE +SKATER +DISRUPT +RAMPAGE +CAVERN +IMPOSES +COMIX +SOLVES +SPOONS +PERSONA +POSER +PERKY +EXCUSED +FUSED +ROARING +STOPPER +FIBRES +CRESTED +STUMP +SCALP +ACTIN +MELON +SIREN +VASTLY +CLASP +OLIVES +SUMMONS +POROUS +BATHTUB +FREAKY +MERLOT +THIRST +IODINE +PHOEBE +SALINAS +LEGGED +WIPES +KRONE +EXPOSES +AEGIS +NATURES +DERRY +VERBOSE +AMOUR +SUBNET +SAILED +CHALETS +CRAVING +LEAKING +TOTES +MASONIC +FORAGE +THUGS +PAYOFF +SONAR +PEBBLE +FLASHER +STAFFS +PATCHED +LESION +TICKLE +BANDIT +ETHYL +LAMBS +CARAMEL +BLOUSE +OCTOPUS +CHESTS +FELINE +ZOMBIES +ULCER +TITTIES +HORNETS +CANALS +SPANDEX +ZEPHYR +TEARING +MUFFINS +ETHIC +TAXON +COUGARS +ATRIUM +THINE +GENET +NEMESIS +DEVISE +TOYING +TRIPODS +WREATH +PLIGHT +OPIUM +ENEMA +GOALIE +ARCHES +LOWERS +COOKERY +METROS +HANGERS +JURORS +SEAMS +PLEADED +GUTTER +ULCERS +SLOPPY +FLANNEL +JAILED +RIDDEN +BONITA +STEAMER +BARGE +SPARTAN +RUMOURS +FAMED +RESID +LESSEE +RESPITE +TASTED +LICKED +BANGED +SAFEST +DAPHNE +SERINE +POLLOCK +METEOR +SCHEMAS +BOOSTS +VENEER +SLANT +POLLARD +CHOPS +BROOM +PLAINLY +PUNCHES +SNARE +SHANK +UPHOLD +GLIDER +NURTURE +LOTIONS +LEASH +HUNTS +ADRENAL +SIXTIES +BOOTING +ENGAGES +CARBIDE +CUNTS +PULLMAN +KINDER +DEEMS +DEDUCT +TWEAKS +BEAGLE +CADMIUM +SPEEDO +LOCUST +VILLAIN +WAIVERS +SECURES +REJOICE +PLUMPER +UTERINE +BURSTS +HURDLES +GEESE +CANDIES +POLIO +MECCA +REGATTA +RESTED +PAUSED +WIDTHS +BROTH +MARTINS +TELFORD +TOPPLES +NEBULA +CROWS +JUNKIE +TAPER +SUGARS +FALLOUT +ALLURE +STALKER +RECLAIM +PIANOS +EXTINCT +PONDER +MESSED +REVUE +LUNCHES +FOOLED +SMEAR +RIGGING +DERIVES +PRAISES +COMBOS +CLONED +FULHAM +REISSUE +STRIKER +MEMOS +SCREAMS +MASKING +TENSOR +JAGUARS +ASSURES +TRACER +SERGE +CHIEFLY +AUTOPSY +POWDERS +DEBTORS +SLAIN +NEARER +WARTIME +QUAIL +TANKER +MAYAN +FUTON +RECTOR +BALLAST +TAXING +ICING +PINNED +GABLES +BANTAM +RALLIES +EARTHLY +PROXIES +REWIND +POPLAR +ISSUERS +MARTIAN +EQUINOX +HINDER +PRESUME +STRUT +CANDIDA +ADJUSTS +PLUME +PICKUPS +CALYPSO +PANTRY +ITALICS +BILLET +PORTING +HAMMOCK +REVOKE +CHEVRON +SLATED +WAGONS +PLANK +WOLFRAM +BONANZA +LUMBAR +LONGING +OSPREY +ENACT +INERTIA +DEITY +PRUNING +SWIFTLY +CLAWS +MANLY +FEARFUL +POTENCY +PINGS +PERIL +TEASER +NESTLED +HAIRS +DRASTIC +PROMOS +CATERED +GUARDED +NEURON +PULSAR +CELERY +OFFEND +CAVIAR +QUADS +RETINA +MAIDS +BUREAUS +VOYAGES +BOUNCY +RETINAL +SHEATH +LOUIE +DUBIOUS +MAMMAL +LISTENS +SWIRL +EMERY +TWISTS +ALLELE +ECZEMA +DIALECT +FANATIC +RAPTORS +DANCED +REVIVE +COROLLA +VEGGIE +DHARMA +HOOPER +ABODE +SAVOY +KORUNA +COMFY +AMUSED +KNITTED +CAMPO +QUINTET +RAMPANT +FUCKER +POLKA +WIPER +OXIDES +SMOKEY +RITTER +VACUUMS +ATTENDS +NICER +MELLOW +BOAST +GENTS +RAPPER +HOOTERS +TIGHTER +THRIFTY +CANNING +TOTALED +SHIPPER +PERCH +CRAVEN +HOMAGE +UNITARY +ANGST +LITURGY +SURETY +CUTLER +SWEETIE +CRADLES +RESENT +PODIUM +OPPOSES +FACETED +GECKO +TUCKED +TURMOIL +SEEDED +UNJUST +DISTURB +BOUNCED +SADDLES +GUSHING +PICKER +DIALER +ICEBERG +PLUMBER +CODEX +JUDAS +NOODLE +SCENTS +BANGLE +BERTHA +LEVIED +HUMPING +BARNS +RAIDS +INTUIT +SOLOS +FACET +REDNECK +PLANTER +SHAKEN +WARES +RIVALRY +VERVE +CHARLEY +SPREE +EMBED +GURUS +BESPOKE +DROWNED +BRUTE +KIDNEYS +WARBLER +ONWARD +DIPPED +LANCET +SNIPPET +PELLETS +STARRED +DEACON +SWEEPS +BUTCH +SCART +SKILLET +OFFEROR +CHORES +YARNS +GINSENG +GRENADE +RIDDER +ENCLOSE +MOWERS +SINNERS +SIENNA +CALVES +DEFER +LIARS +PHARAOH +ITCHING +ENDEMIC +TOURNEY +SAITH +ASTRAL +YELLED +HAMPER +BLURRED +AORTIC +MARTENS +DEANS +DUALITY +KITES +LIPIDS +CORDOBA +ROMANO +DUMPS +BUCKLES +JOYFUL +HANKS +DOSING +CRAVE +STROBE +WAFFLE +RIPPLE +SWEEPER +MEASLES +UPBEAT +AMENITY +DONUTS +SALTY +RUPEES +ZEROS +SPORTY +HAWKING +TUMOUR +POOLED +DIVIDES +HEALED +VALOR +GATHERS +CEASES +DORSAL +COLLIE +SPLEEN +MESSING +EMPRESS +ORBITS +WHENCE +SLOGANS +SABRE +STIGMA +MINDSET +INJECT +TARTAN +PROLOG +GOOFY +MIMIC +STORMY +RAGLAN +VULGAR +FASCISM +SERENE +CODECS +FORBID +TICKS +ISOTOPE +LOCALES +VIGIL +ROBBED +CRORE +REBIRTH +BANCO +HOTTER +ITCHY +BULKY +PARLOR +SETTER +STIRRED +SUBTYPE +FACADE +BOOZE +WIDEN +BIKERS +CIPHER +ARREARS +HEARTY +TRITON +ADORE +COLDS +THICKER +WEEPING +VENOUS +MONEYS +INFANCY +CLEANS +CLEANSE +CHILLY +ROSTERS +BOLIVAR +CHEDDAR +CORSET +HINGED +GOPHER +DISTAL +CUMMINS +ROBINS +BOOMING +CRAMPS +ATLASES +DIGGER +FLUKE +AVENGED +CACHES +STOMP +GLADE +ACIDIC +BOUNCES +FASCIST +THINNER +LICKS +CASTE +PSYCHE +ERASER +ANGLING +LIBRA +REQUIEM +SIGHED +LURES +SLOWS +HEROINE +OUTSOLE +FLAPS +INSET +CADENCE +FROSTED +OPENERS +RATTLE +INSULTS +OATMEAL +UNREST +DRUID +POODLE +SITTER +COLDER +KELVIN +SWARM +LEDGE +NECTAR +RACEWAY +MONSOON +DROWN +STRIFE +ESPRIT +TREASON +RECKON +PROSPER +MURALS +BANGS +RADON +SINFUL +CHEESES +ABYSS +CODER +NIECE +PLEAS +SOFTER +EMPATHY +TARZAN +FLASK +ARISEN +FEMMES +RIBBED +OMNIBUS +STABLES +HEREOF +UNTOLD +MITZVAH +TULIPS +BASHING +IDOLS +NUGGET +GUSTS +HIPPO +TENANCY +RUPTURE +LYRICAL +BRAIDED +WOODED +BODIED +DUDES +ALTOS +SLEEVED +OVERS +BASSETT +CATHODE +SLAMMED +AVIATOR +PALADIN +NESTS +MARCHED +ROTATED +SIGHTED +HOPPING +ROSARY +PLATOON +PULLEY +REGRETS +TWISTER +SEQUOIA +MARQUEE +DARKEST +BALLADS +SETON +CATCHY +HUGELY +BOBCATS +FRANKS +THINKER +INFLUX +CONVOY +TESLA +KRONER +PHONICS +PADRE +ENDINGS +REAGENT +NAILED +FRANTIC +COCOON +BOWERS +VALANCE +BREEZY +MUNDANE +MATADOR +CLOTHS +DELETES +CLOWNS +BARREN +PLEAD +BEHAVED +EMBARGO +CURRIE +SHEEN +SPECTER +ASSENT +SHADING +WARTS +MEDIC +HARMED +CONCEAL +GRAIL +TABLED +SEINE +FLOWED +SAVIOUR +LAPEL +BOOMERS +YOUNGS +PECAN +TINTED +BENZENE +TOPPER +ACHES +LEAKED +GENERA +SPARKED +IDIOMS +CHIME +SPENCE +CONNER +ARGENT +MILDLY +FORGING +CARIBOU +FOOTING +CHEETAH +REMIT +BONNET +STUMBLE +FRIDGES +UNBORN +HAMMERS +COASTS +CHEESY +CONCUR +EXERT +PINTO +WORLDLY +WEDGES +CORDED +PORTRAY +NAPKINS +BAKERS +PEARS +HEATS +LUCID +SHIVA +TONERS +INFER +UPFRONT +HAULING +QUAINT +DIPPING +REVERE +SOLEMN +CELESTE +GENTRY +CADETS +RAMBLER +DRYWALL +ENDURED +DANDY +MOULIN +SWAPS +LOCKERS +LOOKUPS +LANDER +LANCER +FISHERS +MUFFIN +SYNOD +LOUSY +AMIGO +CADDY +BURROWS +BEDSIDE +HOMOLOG +FRUITY +STRATUS +BUMPERS +SUMMED +CHOPIN +TORCHES +JOINER +PROCURE +SUNSETS +BRITS +PLIERS +KAYAKS +BLEAK +DAMPING +DRUDGE +TRAMP +SALIVA +BOOTLEG +MINIS +LESSEN +SYRINGE +LEFTIST +TEQUILA +GRANGER +GLACIAL +TAPERED +ALLEGES +BLAMING +EMBARK +MANNED +SLUTTY +SPHINX +SPIEGEL +GLITCH +GEARBOX +SONNET +STANG +SPRUNG +HEDGES +TENSILE +SPLICE +CROOKS +HUBBY +QUILTED +WALLED +IMPROV +RELAPSE +DEBUTS +COMMEND +DESCEND +BOLSTER +SAFES +ROCKED +RANCID +MALICE +RACQUET +TRIDENT +STUBS +DENTS +PERKS +CALMING +LINGUAL +PUNTO +VIBES +FUNNEL +MOONS +THIRSTY +LATHE +HIPPIE +SHABBY +PUNCHED +MARBLES +BYLAW +TRIMS +HALVES +LEAPS +TEAPOT +CONVEYS +LENDS +SQUIRE +CROOK +REARING +TYPOS +MELTON +DIVES +POOLING +COYOTES +STALE +LEVERS +PUTTY +REACTED +SUNLESS +PUZZLED +PATSY +GASKETS +ELDEST +CLIMBS +NONSTOP +CORGI +SWANS +TORIES +REMNANT +IMMORAL +MALKIN +UNEQUAL +WEAKEN +CUPID +CLINE +BACKLOG +PIERS +ENSUING +DYKES +REVIVED +HASTE +FLAKES +ALFALFA +ARGYLL +JOKING +PRONG +SIMMER +ATRIAL +REACTS +EXPOS +CHERISH +UNDEAD +BERTH +CRABS +LINGO +BUDDING +HACKNEY +PIGGY +SABER +MIDDAY +INNATE +TUNNING +LEXIS +GLANCED +RAPTURE +SUNBEAM +BEETLES +IMPAIR +BEADING +LAGER +GOBLIN +BLUFFS +RATCHET +PARROTS +ANTHEMS +TIERED +OPTIMA +PHOTONS +EMULATE +ACCUSE +DOGGY +HUNTED +HURDLE +ERRATA +RIDLEY +DIVAS +ZIPPED +BABEL +INSOFAR +PRIMATE +DICKIES +GONZO +REVISIT +CUCKOO +ACACIA +WHITING +NETTING +OFFSETS +FOYER +PALACES +BROOD +AZURE +COMPEL +AIRFLOW +SABINE +SNIFF +GLIDING +DIETER +UNWIND +HALTED +OUTINGS +CROTCH +WAVELET +DIODES +HOSTESS +DIPOLE +POSSE +TANGLED +FRYING +PIXIE +IMPALA +FLICKS +PUNDITS +UNSET +WAXING +SINNER +COLES +MELEE +GRABBER +CRAFTY +LLAMA +PERIDOT +PACERS +VOWEL +FEARING +PARTON +FECAL +DOSSIER +TREBLE +GALLEY +SHOVEL +ENTAIL +MASHED +PACING +FLUXES +FINDERS +DESERTS +MILKING +CICERO +SCRIBE +NELLIE +OUTAGES +SLEIGH +BLISTER +OPACITY +RATION +HUMID +VEGGIES +GUILE +LACQUER +UNFOLD +TUTTI +MINED +FISHNET +THRILLS +SORES +SELVES +TITTY +SPRITE +OXIDASE +ATHEISM +CELLARS +CATERER +TAINTED +PRAXIS +REEDS +ANGLER +MIDTERM +RESEND +AUGMENT +FLARES +GELATIN +SWATCH +BUMPED +CURSORS +CRIPPLE +DIVERT +LOFTY +KANJI +DROPOUT +CROPPED +LOCKOUT +MORON +ABACUS +RICHLY +DOGMA +VAGUELY +WINCH +MELONS +EVILS +LIMOS +ALMONDS +JOCKS +EQUATOR +UNZIP +GUILDS +BLATANT +FLOSS +SARGE +ENDNOTE +RIDGES +OYSTERS +PORNOS +PUBERTY +CRAWLER +ANGLED +SHORTEN +SHAWL +BENDS +GRIMES +UNISON +TABULAR +DORMANT +TROPICS +CROUCH +PENCE +PLACID +NAPKIN +SOAKING +FERROUS +THYME +ZILLION +CHINO +ABUSING +CAVEAT +BEDROCK +BADGERS +GARTER +FOOTED +TOUCHE +OVARY +ACCRUAL +SMASHED +PAYERS +GRITTY +HAILED +HOUNDS +PAROLES +REBORN +BEBOP +DAZZLE +SEEDING +DANGLE +EATERS +BOTANIC +BRONCO +CHASED +MERLE +SAVORY +MURINE +RODENT +RACKET +PUTTER +FLOPS +SICKLE +ATTEST +BASSIST +STATURE +SKATERS +SENTRY +VICES +KARAT +GINNY +TOLLS +BANGLES +STEREOS +FIREMAN +MANIAC +ANTICS +WRONGLY +FALSELY +ABBOT +MAGMA +CONSUL +PLAGUED +AIDING +SUCKERS +CHILLI +CANOES +MATILDA +FODDER +IMPETUS +PEELED +INBRED +WHINING +RABIES +ARSON +MODULUS +BOOSTED +SPRAYED +GEARING +FREEING +REDRESS +SETTLES +ANGINA +GEEKY +COUPLER +SEAMAN +SKULLS +CAYENNE +BALBOA +DEFEATS +MONTAGE +BIASES +SPRAWL +REOPEN +HAUNT +HEDGING +ERASED +INHALED +FUSES +BRITT +COLLIDE +BLINDED +MADRAS +FAITHS +TINKER +ECHOED +GAZING +BRAID +GRAINED +MEDIATE +CUNNING +FISTS +DIVIDER +PENNIES +MINIVAN +CHIMP +GIRAFFE +AWNING +SPILLED +STROUD +LEFTY +HERES +AZIMUTH +VIGOR +CHARIOT +SQUADS +TWEEN +PAYBACK +COOLANT +PARSED +HEALER +WARMERS +GLUED +ALLELES +WEINER +SHUTS +OCULAR +SANDMAN +SCOOPS +ALDER +LULLABY +TRUCKER +LAWNS +CHOKING +CASTOR +STATELY +RACED +DEUCE +RISER +REDUX +EVOKED +STUDDED +CLERIC +SPARED +BROWNIE +QUITS +ENSIGN +NEARING +BURGLAR +WARPED +FREEZES +KNOLL +WILDCAT +INLAY +PARTING +AVOCADO +TORPEDO +OCTETS +MUFFLER +JUMPERS +HERETO +CRAZE +CURACAO +GRATED +PROVOKE +CALVARY +BANDED +INVESTS +ROPER +TOURED +BOBBLE +ADJOURN +WIDOWS +CITRINE +VOLTA +MEDIUMS +CALUMET +PELLET +DISCERN +DOGGIE +INFLOW +FUMES +FUTILE +FENCED +ANIMATE +TOTEM +AGONIST +HARMS +RETHINK +AGGIES +CLOSETS +JUNKIES +CARVE +MUSTER +PERTAIN +MARTYRS +HITTER +APNEA +SYLVAN +SWISH +SHAVERS +ABORTED +ASKER +BOOTIES +ABIDING +CANCELS +RELIC +SLIPPER +CLASHES +ETHOS +ARGYLE +CLING +COMMUNE +SNORING +QUASAR +LITERS +COMETS +GOVERNS +ROOFTOP +TONED +ERRED +DARED +NUDGE +SEEMING +ROSEBUD +DOVES +RUMOUR +INTAKES +SAFFRON +RAGGED +PULSED +IGNITE +HORNET +JESUIT +MOUNDS +DEVOID +PARTED +ELITES +MUNSTER +SKUNK +PLACER +CASTERS +HEAPS +HYDRA +ANVIL +STALK +MAILBAG +INERT +DOPING +POSTWAR +FAVOURS +SMARTY +EJECT +RAYON +SAUNAS +MOCHA +JITTER +BARTER +FRUGAL +STARRY +NOUNS +HOBBIT +EVASION +MAYORS +TONNE +CASTER +GOSPELS +WICKET +GLYCOL +MEDIAL +FAXED +KARTING +BLASTED +TRIPLES +PIXIES +PANCAKE +ACCRUE +VENTED +FIRTH +SLAMS +OUTLAY +DREADED +AIRING +LOOPING +CRATES +UNDATED +EXALTED +CADRE +TABLOID +JAEGER +HATCHER +CODERS +SQUAT +VELOUR +MARTYR +ZONED +PUBIC +NITROUS +TIARA +GENOMES +SKINNED +HIVES +SEMINAL +RODENTS +KOALA +DISCUS +GAPING +ABRUPT +SEXIEST +GAMBLER +FOSTERS +LANDAU +FILLERS +AMIGOS +CROCK +BOLDLY +GAZEBO +COCKER +CLOVES +PRESTO +RETRY +TELEX +BOWED +HARDEN +MOLTEN +AUREUS +REPAID +BELTWAY +WARMLY +PENANG +EYEBROW +LESSOR +KINASES +TROIS +REUSED +HYDROXY +APPLAUD +PRIMO +ABOLISH +UNEASY +SHALOM +BUSIEST +CLOGS +FLANK +SPAWNED +CARTEL +WIENER +SEXTON +WASHES +DEPARTS +MINDFUL +LURKING +LOOMS +SPECTRE +ATOLL +SMOTHER +DUCTS +FROSTY +MARMOT +REMAND +MULES +SPOOF +MOANING +PONIES +PRESETS +BLIGHT +GRADER +DUCHESS +RAINIER +SPOUT +PERISH +SNAPPER +HEFTY +HOIST +CERES +BRAVERY +LIZARDS +FLAGGED +OFFBEAT +RELICS +RELISH +PROTONS +KNOCKS +PRIMES +FLEEING +SAULT +THRASH +TROLLS +FLUENCY +UNITING +BEHAVES +SLABS +AGATE +INCLINE +SCORER +SWAMI +OILERS +LISTERS +ONENESS +CLIMBER +GATORS +CRUCES +LACTOSE +STRIDES +VANISH +LOFTS +FERAL +RINGGIT +ELBOWS +TRUCE +KIOSKS +HOOKING +LAIRD +RESIGNS +ANGUISH +PETAL +BANGERS +HANDGUN +ODORS +CLIPPED +AMICUS +CERVIX +DRIES +GRATING +ELIXIR +MANTIS +PEEPS +ALERTED +INTRON +REMODEL +CARPAL +BUNTING +AVENGER +WAUGH +TIERS +VAPOUR +PLUCK +PRICK +MORBID +RUBBLE +CHEEKY +HERDS +PIRANHA +ADDER +WEAKEST +ASCOT +GERMS +GRAYS +FREES +SALIENT +BEEHIVE +CENSOR +SHORTY +FISSION +WIDOWED +BEGGED +FLUSHED +SCOPING +LAVISH +ROSCOE +VIXEN +WHIPS +MARCHES +BALLY +BUNNIES +OUTFLOW +RESIDED +SCARAB +SKIERS +WEASEL +RAUNCHY +TOASTED +FADES +OCTANE +BULGE +BRITTLE +BANDITS +SOAPBOX +CAROLS +TAPING +SOMATIC +FETCHED +SLUMP +NERDS +HIATUS +ENROL +LOUVRE +GLOOM +AIKIDO +BATCHES +ANGELIC +WAKES +ASHORE +WORKMAN +SWIMMER +UNLOAD +MARGE +JOCKEYS +SEATER +BADNESS +SANDING +VULGATE +STONED +FABLES +ALAND +CRUMBS +COMPS +EDEMA +CAROTID +STINK +CONVENT +SQUISH +ADHERED +JAGGED +OVERT +SQUEAK +HAIRCUT +DEARLY +DIALOGS +GYPSUM +SLIME +BROMIDE +SUMMING +LAMENT +CANYONS +DISGUST +BANKED +DISMAL +RANCHES +COCHIN +ENCODES +WHALING +CIRRUS +PATROLS +SWUNG +OUTLAWS +WAVED +HIJACK +LIBEL +ELLIPSE +ALARMED +FRYER +CAESARS +GREATS +BORON +PHOBIA +RIFFS +APATHY +STALLED +INFUSED +PEAKED +TETRA +BEARDED +GREASY +TACTILE +VOWED +CARNAGE +SKIER +CREEKS +RATTAN +CORONER +TILED +HECTIC +RAISER +SANGER +MULLEN +SNUFF +CONVENE +CALMLY +DILUTE +GASEOUS +GLOOMY +RETIREE +BUCKEYE +MARQUES +DINGHY +CLOTHED +FLIED +TALON +BLOWERS +SORCERY +ABSTAIN +BARRING +CHAKRA +GRASSY +APRONS +CLUMSY +FIELDER +POUNDED +STINT +SARCASM +COLITIS +LIANG +UPHILL +HASSLES +WARMED +PARABLE +AFFORDS +RHODIUM +BUMBLE +SARCOMA +SNIFFER +ELECTS +ALPACA +DEGRADE +FLEMISH +SHRED +MAILERS +TENTED +STEAMED +AROUSED +SIEVE +REDDISH +BINGE +PLEADS +SCISSOR +CAPRICE +HORNED +JAZZY +CATIONS +COHORTS +CENTOS +TORSION +RARITY +LIMBO +SHOVE +SYKES +FLAKE +HATING +SEWERS +SPORES +SHEARS +FLUTES +MINCED +ORNATE +UTILISE +MIDWIFE +ROLLOUT +COVETED +DIRHAM +MOULDED +CONVICT +ALBUMIN +TOSSING +POTABLE +DUMAS +JESTER +RECOUNT +MASCARA +PROLINE +DEAREST +WIPERS +SNOOPY +BOWLER +UNLEASH +WISER +GALLANT +ROTORS +BAGELS +JEWELER +OSTRICH +SPLINE +PALLETS +UPLINK +FLUNG +WARLOCK +BREAKUP +FICHE +JUROR +GOGGLE +RAILING +BANTER +AWAKEN +PIGEONS +SIGNIFY +PROGENY +GRADS +ALTERS +FLEETS +DONUT +LIBIDO +TACKLED +SHOALS +PASEO +CLIQUE +CURRAN +SATANIC +TORMENT +MUSSELS +HILLTOP +TABOR +TENET +ACETYL +BOOMER +CHUTE +BOHEMIA +FONDS +PICKLES +CURSES +MULCH +MARINAS +WHINE +LOOMING +UNDIES +PREPAY +ANKLES +SOULFUL +MOSQUES +FOULS +CANES +ALUMINA +SPIKED +EVOLVES +DUFFEL +STRUNG +HERMIT +LOCATES +DEEPEN +ANALOGS +CREASE +CANTOR +RINGERS +DICED +CARTONS +IMPEDE +CLASPS +TILTED +VICAR +PRANK +REPENT +CENTRUM +KINKS +RIDDLES +PULPIT +MARSHES +BELLIES +AMBUSH +PALAZZO +HEPARIN +BONFIRE +STILES +ELICIT +PLOTTER +SLAPPED +BITTEN +DOODLE +DYNAMO +SUMMON +LINGUA +STACKER +FORFEIT +PADDLES +PLASMAS +BARBELL +LOOSEN +SNEAKY +SMARTS +IMPUTED +COACHED +CHEATED +WILLOWS +DELFT +GRUNGE +CARNEY +FLIPPED +FRIGHT +HARBORS +ADORNED +DECAYS +COWGIRL +EASING +LAYOFFS +PICKET +MATURES +THRONES +SUING +BRINE +SNEAKER +WANING +ARMOIRE +QUEUED +PILED +TWINKLE +FLUFF +SHIFTER +SUPPLE +UNFIT +UTTERED +TENDING +SHAGGY +ORDEAL +HERNIA +FLICKER +MIDSIZE +OPERAS +BEASTIE +ROUSE +APPEL +YUCCA +SPIEL +BRIEFED +CARCASS +GIZMO +SCAMP +REPRISE +ARCANE +PEAVEY +PEBBLES +SACKED +CYSTS +STIPEND +SNORKEL +IRIDIUM +TOPPERS +AMULET +BOMBED +DAISIES +SORROWS +BOOBIES +HELMS +SHERPA +LIGANDS +SORGHUM +GROUSE +PASTED +MOTHS +EVOKE +SLOTTED +DECKING +CYANIDE +MOUSSE +CHIFFON +FANFARE +MAPPER +ARCHAIC +ELEVATE +PALMYRA +FOXES +AFFIXED +TICKING +GULLY +BRILL +WEBBING +THRUSH +BRIBERY +SMOKES +KETTLES +ASCEND +REVERB +NUTMEG +CHAINED +MAGNIFY +GAUSS +TRAVAIL +LIVRES +FIDDLER +WRISTS +SEVERED +MITES +RUBRIC +OPERAND +PUDDLE +AGORA +MACHO +REEVE +WILLFUL +PLOUGH +BUSTING +SMELLY +HANGAR +ANNEXED +UMPIRE +CARLING +BUILDUP +KEYED +ESQUIRE +CRYPTIC +PRIMUS +ENTREES +CORPORA +CHOLERA +JERKS +BULLION +HATEFUL +MOLINE +TAKERS +WALLEYE +LEMONS +BAGEL +STRATUM +WISTS +WALKWAY +CULTS +AMAZE +EASEL +CARER +POTION +OVATION +PADDOCK +GABLE +LACED +QUILL +MARES +CHAPS +LANAI +TENDON +CHIRAL +FERMI +BELLOWS +CUDDLY +DECEIT +JOYOUS +VENTING +PRICEY +SHEKEL +READOUT +GUNNER +DIMES +VERSO +GROSSLY +CRANKY +CLEFT +STABBED +BANDING +ORIGAMI +AWNINGS +DONATES +UNTRUE +HURRIED +VACATED +MANATEE +LARVAL +DRAPES +WOMANS +GROIN +BOOTED +SPROUTS +BOWER +LATTE +SHOPPED +PURITAN +FOREARM +SEAPORT +FLASHED +LONGS +REPRO +DECEIVE +STARVED +SCORERS +SITCOM +HASTILY +INVADER +SWAIN +GRUMPY +SIRENS +MOURN +SOFTEN +CATERS +TROUPE +GIRLY +ORBITER +THIRDLY +KEYLESS +CALICO +WRONGS +PORES +OILED +SHARPEN +BLURB +COINED +MORAY +CAVEATS +BIRDIE +LANYARD +HORST +NOSES +PAGERS +CORRAL +HICKEY +ERODE +PLUNGED +REALS +DEFIANT +TERMITE +BRISK +LYSINE +PONCE +PERJURY +BUSTERS +PRONTO +VISTAS +IMAGER +EERIE +HECTARE +SALAAM +JACKASS +EXITED +CRISPY +PRIORY +COFFEES +SEQUIN +CORPSES +WIPING +HOWLING +NOZZLES +RAISINS +TURKEYS +PASTING +BUTYL +SHALE +VARNA +CALIPER +ANODE +TORTS +SITING +EGRESS +ERODED +CREPE +CONCAVE +HERESY +ARMORY +SNELL +AVERT +GUISE +VOMIT +BONGO +SHAKY +BLOKE +PENNANT +NICEST +SLALOM +NECKS +CALIF +LEVEE +LURKER +CHEWS +HOODIES +PHONY +SOLES +JETTY +LUSTER +OVERRUN +UNDONE +UPLIFT +NUKES +INHABIT +RERUN +PLEATED +DIGESTS +PERILS +JERKY +RESISTS +SUBDUED +CODON +PYLORI +ACIDITY +WELDER +JUICER +ECHELON +NARROWS +SENSED +QUEUING +VALUING +ARGON +HOORAY +BIOTIN +SALTER +MORPH +TANTRA +ACCUSES +CALIBRE +NOBLES +FUMBLE +DISCOS +ROBLES +PROVERB +CLAMS +LEVIES +SPECK +GUTTERS +RUDDER +MICRONS +SCARES +MAHJONG +SURPASS +HIDEOUS +ABREAST +POMPANO +TYRANT +SKEWED +DECENCY +PAPAL +SPRANG +PALAIS +TEAMING +AROMAS +DUETS +GLYCINE +SADISM +PLENUM +AXIOMS +LABIA +SWEATY +MOGUL +VARNISH +ROUNDER +RECTUM +PERCHED +SUNROOF +VIALS +DENSELY +DROIT +RAFFLES +TEENY +BENTHIC +CARLIN +STONER +DECREES +BISQUE +SOLANO +REDLINE +GRIEVE +REIGNS +SOLVERS +LUCERNE +FIASCO +DEACONS +TUMOURS +SLINGS +DWARFS +REINS +MIDGETS +SWEATS +MASSA +HIDALGO +AURAL +LAWLESS +INHUMAN +BIGFOOT +DESPISE +FLOATED +FRESCO +RUNDOWN +AUTEUR +CUSTARD +GIZMOS +MILDEW +TOMBS +FROWN +ACCORDS +STEELS +PRIVY +FEEBLE +GENTILE +LOADERS +TROUSER +ANNUALS +SEPIA +VALENCE +DROITS +BRAVA +UNPACK +HOMBRES +DAMPER +MADMAN +PEERING +SLUMBER +CHIPPED +PELVIS +POTLUCK +CREAMER +FORTS +FLEDGED +GUNMEN +POLLACK +HOYLE +AROUSAL +VANDALS +MAMMARY +GARNISH +PEELING +BLINDLY +HALIBUT +FIFTIES +GOODY +DUGOUT +ALUMNUS +FENDERS +GIGGLE +SEAGULL +POLOS +STREAKS +JAILS +CASKET +DICKEY +DETOUR +VISIBLY +DEFUNCT +DIOXIN +UNVEIL +BRANT +LAYOFF +DECODED +SHITTY +DODGER +KINSHIP +ACUITY +POPPER +BLOUSES +HEMLOCK +UNCANNY +STORK +CONCEDE +CURATED +FALLACY +NOXIOUS +TUNIC +FARCE +CHANTS +LUNATIC +HOWDY +HAGGARD +REORDER +MANGER +CHILLS +WHACK +DRONE +BREEZES +GODLY +SPIRE +EDGING +CYMBALS +SALINA +EMBLEMS +SHROUD +ACHING +STEAD +RECOIL +RAISIN +BOBCAT +JAMMING +POISONS +MUCOSA +MISLED +STONEY +CULPRIT +CANOLA +SLICING +SPICED +NICKS +LIGHTEN +PAMPER +CANTEEN +SHRUG +BOILS +COVEY +DONNE +TABBED +DIALS +OMINOUS +MISFITS +PARLOUR +QUIETER +POKING +BUYOUT +REPLAYS +CALDERA +BASEMAN +TECHIE +TALLEST +WRESTLE +RECTIFY +ASTER +SNAILS +MITTENS +FERNS +CURLS +CRANIAL +WRECKED +WINCE +RUSHES +DEITIES +MELTS +TRICKLE +ERRATIC +CASHING +SPOUSAL +ABUSERS +DRIFTED +MALLARD +AIRMAN +SABRES +CORSETS +WASPS +MITRE +TONNAGE +CORALS +MILLE +HISTONE +OPIOID +GREENER +GRUDGE +HELICAL +FONDUE +WETTING +BOSOM +MANIACS +BALES +RAPES +REMOTES +FASCIA +FRYERS +PICKY +CRITTER +MOORING +EXPATS +BUSTS +LUMEN +PORTERS +JAGGER +FORGERY +SETUPS +JUMBLE +COGNAC +WADING +GAWKER +GAGGING +IMITATE +CYCLIST +MAGNETO +CRUNCHY +SEALANT +THORNS +MOSAICS +PIOUS +BASALT +TONAL +UNFOLDS +BROCADE +ASHTRAY +SEAWEED +VOTIVE +WAFERS +MODULO +ANTLER +TARTS +NANCE +BABBLE +NICHES +HUGGING +POSTMAN +HIKERS +CUTIES +PREHEAT +ROOKIES +FOGGY +SHONE +LEAFY +JARHEAD +MATURED +DOLOR +CAMELS +LOWDOWN +TROVE +EASED +DEPRIVE +KREMLIN +FILER +LUSTY +BUZZING +DAUPHIN +ARIAS +STEED +UNITES +CLEATS +MILLET +INVERT +GRINNED +CARATS +HASTY +DIESES +NIGGER +MACULAR +SCRAPE +PRIZED +HOMBRE +MUNCH +TRAITOR +CLOVE +WIDENED +PREPS +MALLET +LEECH +GIVER +EQUATE +NYMPH +PAJAMA +TONING +FUELING +FRAIL +CRAYONS +TIKES +AWFULLY +ARCHED +CURFEW +ENLIST +CORNEAL +PROFANE +CRUSHER +SWANK +ROBBER +ROVING +DRINKER +MODELER +LINGER +FILLET +CHURN +NIMBUS +MADRE +IMPART +MUTED +FEATS +NONZERO +TOUTED +HANGMAN +BUMPY +ALEPH +SLOPING +MASONS +SURGES +UNLUCKY +DISTORT +KETCHUP +ALIMONY +VISCOUS +LOOSING +PILING +SOLOIST +AMINE +ROBBERS +BURLEY +WOOFER +LOWLAND +SPAKE +AWOKE +PARKA +UNHEARD +PRUNE +SCOUSE +CAIRN +NOMADIC +GALENA +PROLONG +KNITS +KROON +THINLY +WEANING +ARABLE +ALKALI +MOWING +NUTTY +SEVER +MYELOMA +EXPEND +AUNTIE +AFGHANS +BLAMES +VIVIDLY +MERINO +STOOGES +BARIUM +TORIC +LOOTING +HUMMING +SHEARER +EXERTED +TITRE +TUMBLER +ADAGIO +BONNE +FLOCKS +RANTING +ERUPTED +FLING +COMRADE +PICCOLO +HAVENS +BUSHING +RAVING +LINDY +PANZER +SOVIETS +TWEETER +PONCHO +CHOIRS +FAERIE +STINGER +WREATHS +PROJET +ABSORBS +DRIER +BOTHERS +PARADES +CUBICLE +SHOVED +INVOKES +PAPAYA +CANNONS +AUGER +ICONIC +SULFIDE +GAMBIT +DALES +POLLED +EMPTIED +JOGGER +VERITY +TURRET +PRECEDE +JODHPUR +DOMES +TETANUS +CARIBE +EXECS +HIKER +WILDEST +OUTLAYS +ZLOTY +OSMOSIS +PRIMING +VOWELS +SOOTHE +LEARY +SLURRY +TAMPER +BERETTA +HEATHEN +UNDULY +WINGER +RIGGED +FANNING +SPURRED +LOGICS +COEDS +CRUMB +GUILDER +SEALER +SLEAZY +ONSTAGE +PINKY +MINTS +YIKES +GRATE +GRILLES +DEMONIC +DEDUCED +BURIALS +ARMPIT +RATIFY +GINKGO +FIEND +DRAPERY +MUZZLE +ENTRANT +PHASING +LACTATE +SKEPTIC +BACKLIT +SLANDER +BASING +BAITS +ONSHORE +FLORALS +WICKS +TOXICS +POTIONS +SQUIRTS +WATERED +FLEAS +OPTING +HAULED +TAUPE +HOOKUP +RECITE +DISMAY +SMELLED +HEALS +GROOMED +LEAPING +SUNKEN +SLIDERS +REARED +SEDANS +SUNDRY +RUNES +PIQUE +QUICKIE +SWORE +BOREAL +TRIER +FLASHY +PROWESS +DOGWOOD +SIGNET +QWERTY +MANHOOD +NEPHEWS +WILCO +FEUDAL +BASSES +BOARDED +SYLLABI +LIVRE +YONKERS +FATHOM +COOLS +EXTANT +UNMASK +UMPIRES +CHISEL +WAYWARD +LEGIT +REDNESS +WANDS +ERASURE +FISHY +PREAMP +PAUSES +GLIMMER +RADARS +BLOODED +TEDDIES +UPSILON +SIZABLE +FILMY +TIMID +WEAVERS +THYSELF +CHILLER +ROOTING +SUCROSE +MODESTY +BANSHEE +VEILS +CAJON +FISHEYE +WAYSIDE +AERIALS +SUMMITS +STYLIST +SPRAYER +GLIDERS +CORBY +BARBED +LEGIONS +LUSTRE +HADITH +LOBOS +JUICERS +HANGOUT +AMNESIA +BIGOTRY +LEAKY +PAGANS +ACTUATE +DINARS +CAPOTE +MOLAR +AFLOAT +BRUISED +DASHES +IMPEACH +ATROPHY +BULLPEN +MAMAS +EARLS +UTOPIAN +CONFERS +HYPED +DECRYPT +BATIK +ODOUR +FRINGES +FORINT +NUDISM +AFFIRMS +GULCH +HOODY +MOANED +AXLES +DILDOES +TAKEOFF +WIGGLE +HENNA +BRIBE +PROPEL +VERILY +DOPED +ARDENT +HITTERS +WICKETS +SHIMMER +TREMOR +LOANED +VIOLINS +ASTUTE +LOGBOOK +INFLICT +ROTATES +LEGIBLE +TOWED +RESCUES +SALTED +TILING +WAFFLES +DOUBLY +BREWED +ANNEXES +LISLE +FIANCE +VULTURE +MISLEAD +VENTRAL +RETARD +CANTO +WELDERS +SPONGES +REVERED +SHINGLE +TIMBERS +IGUANA +GLARING +CHOKER +TILTING +HARASS +TUNICA +AORTA +DELVE +CRIMP +LUMPS +FISHED +OREGANO +DRIZZLE +BOATERS +BRACING +REMORSE +CLOUT +SPACERS +FECES +FELLA +METERED +HETERO +LUCIFER +UNHOLY +PHAGE +FATTIES +INFLOWS +CAVING +ALKYL +LIVERY +MILIEU +INJURE +ESTERS +MEDUSA +PAGODA +DOSAGES +PRIMED +RECITED +ENSUED +JUSTLY +THROATS +BARRAGE +CURLED +PEEPING +DERMAL +PACES +EARNERS +WALNUTS +LASHES +CONICAL +MOCKING +TRICKED +RACCOON +CHEAPLY +ALLEGE +DRAPED +SUBTLY +CONSORT +SERRANO +NIACIN +GLYPH +PLUMB +TOOLED +MATCHUP +CHUCKLE +UNIFY +BRIAR +SWAPPED +MOULDS +BLOATED +PRANKS +MANTEL +ARMBAND +BELATED +STEMMED +WINDER +JUNTA +SHRUNK +CRAMMED +HATCHET +GROUT +PASTELS +CREEPER +CURIE +FARMED +HOCKING +FEMORAL +ZOOMING +NUANCES +KNUCKLE +TAKER +BASTION +TUPELO +GYPSIES +WATERY +SUBMENU +KWACHA +COILED +SIPPING +JANES +SLEDGE +STEPPER +GILDED +SAGES +TROPIC +REALIST +MIDSOLE +SCORN +WHIRL +PERVERT +RETAILS +CIRCLED +WITHERS +SPROUT +CAMPOS +BUNCHES +BAGGED +DEVIATE +HINDS +STINKY +ATELIER +VENEERS +TIBIA +PENNED +KIDDIE +CONTE +VENTURI +CHEERED +BEANIES +SOLACE +PESKY +MOLES +SALVIA +BEACONS +STUCCO +POSADA +OBITS +SHAMS +SHAWLS +BRUISES +FREEBIE +LOWES +BULIMIA +INTROS +LADYBUG +RUFFLE +BASSOON +KNACK +RIVET +AGGIE +GRUNT +DOUBTED +RAVAGED +AILING +OBEYED +EASES +GHOSTLY +MUTINY +FORESEE +RATIONS +CORNEA +BARWARE +BUFFS +TRIPLET +SONICS +RISKING +INGRESS +BARBERS +RETIRES +DENGUE +SHANKS +ORGANZA +DEDUCE +BOLTED +RABID +PROBED +FUNNIES +CUMIN +HAMLETS +SETTERS +PAYEE +JAMMED +CYMBAL +NOSED +SHOGUN +LOVABLE +QUANTA +SYNAPSE +AIRPLAY +SAWMILL +UPPERS +PITMAN +LACES +MINIMA +HUGGED +FLURRY +WARMEST +CAPPING +HIPSTER +TESTIS +AUNTS +VAPORS +GEMMA +RUPIAH +BULLISH +HIPPY +MUTATED +STREP +ROOST +AMYLOID +TENETS +DIALED +MITTS +NAPPY +FUCHSIA +MUSCAT +QUERIED +CRAYON +ROTTING +SOONERS +MARQUE +DITCHES +EVADE +REWORK +COFFS +SCOURGE +LAPIS +BANDAGE +DETACH +WEBBY +APOGEE +WORSEN +TANKERS +CRAMPED +RACKING +SHUNT +SYNCH +PATTEN +SECTS +ENCLAVE +INGLES +SENDERS +STEAMY +UPDATER +ACETIC +UNARMED +DYEING +TAWNY +SCONCES +LAYMAN +BUNGEE +VELLUM +STALKS +STANZA +MUCUS +MORONS +NOVICES +GRASPED +PHAROS +BEQUEST +BEGGARS +FLORIN +QUIXOTE +CHAISE +RAINED +TIMINGS +MERGES +TRELLIS +MYTHIC +MARRIES +ECHOING +TASKED +FLIPS +APTLY +LIEGE +USEABLE +NIECES +PAPYRUS +WIGGLES +SYNTHS +SHEIK +PINTS +GIRDLE +SIAMESE +VEILED +JAVELIN +BOUNCER +PHENOL +STARES +BYLINE +BEDLAM +ENTREE +DESIST +PIETY +EMBODY +PETITES +CRAWLED +FOLATE +MANITOU +SOILED +GOOFS +FROZE +PLEXUS +DISARM +TACIT +WARING +RALLIED +QUAKERS +PUTTERS +ASTRAY +PATIOS +FIREBOX +HINTED +MODUS +SONATAS +BULLIES +CAUSTIC +EMPORIA +LEMONY +BASSET +LIMITER +EXILED +PRETEXT +WHISK +FLARED +ARTFUL +UNMET +CATAWBA +ORDINAL +CARESS +HAILS +DOWNED +MAUVE +TWITCH +COMBED +SPORE +CREPT +FIBROUS +SWAMPS +EPISTLE +ACETONE +ALANINE +EXILES +FINESSE +NICKELS +QUARKS +REPUTED +SEDUCE +BEARERS +KIMONO +GUESSES +SHARIF +COURANT +CANNA +POTTERS +HANGED +FLATTER +DIMMER +DREDGE +CORDIAL +PUNKS +PATCHY +HATERS +QUARREL +FRITH +REMIXED +HYPOXIA +PENILE +LIQUEUR +SPOKES +PASTIME +PURSUES +BUGLE +HEALERS +FOURS +MULLET +DEVOUT +ACTUARY +LATCHES +EMITTER +PIZZAS +TROTTER +WINDERS +AVION +MORTALS +COMER +TILLAGE +LAGGED +LASAGNA +LANDERS +TAPAS +HAWKER +CALLA +DEBUTED +LAGGING +ROSETTE +SEQUELS +TRUMPS +TWOFOLD +THWART +POTTED +CHANSON +REDOX +GOINGS +CLINCH +LEPROSY +COMETH +FITTER +FASTEN +GODDAMN +BIMBO +DAGGERS +PLEASES +MOORS +TRITIUM +REVOLVE +WAGED +WAXED +CONFINE +JADED +MINGLE +YARDAGE +PURIFY +RADII +CHOKED +WHEREOF +DEFYING +OUTCAST +FARADAY +OBLONG +MACABRE +WEARER +SPOTTER +HEARSAY +ROOMY +HEROS +MATTING +CAPERS +ENTICE +NEARS +LASSO +YONDER +HERETIC +CABANA +DRAUGHT +COMICAL +WAITERS +GASPED +CATWALK +CAVERNS +BOARDER +BLURRY +MINIBUS +BUMPING +GREETS +WAXES +AMPLIFY +BEVEL +CODEN +SEDUCED +DODGY +THYMUS +ANGRILY +BELIVE +CROQUET +VACATE +NEATH +BURRITO +EYELID +BACKERS +TAMING +WARLORD +SNIDER +BARONS +SUCRE +AFFINE +STUFFS +BLURBS +ENDER +CONEY +SHOCKER +SOWING +FRILLS +RUINING +PINION +HAUNTS +BRAWL +HEROISM +OBLAST +SAXONY +DATOS +TOLUENE +TUBAL +POSSUM +TONNEAU +BAYONET +JANITOR +HOLLA +REUNITE +MOHAIR +CHORE +STEERS +JURIES +CRAZED +FONDLY +WHITHER +SIGHS +FLIPPER +EYEBALL +FLASKS +WIFES +PHENYL +BOSSIER +RAIDED +CULVERT +SPANNER +MISES +BATTLED +KARTS +VISORS +EVOKES +SPOILS +SEXIST +STYRENE +ALUMNAE +TRIAGE +PROTEGE +SETTLER +RABBLE +PIPED +SCONCE +OVARIES +DADDIES +FOLLIES +DELLS +LACTIC +CLEANLY +UNCLEAN +SEIZING +BOSON +MILLED +ANIMA +MESHES +FIRSTS +FERRETS +GROTTO +BUZZER +RIVETS +LEVELED +GRACES +TRAMS +ADHERES +RAWHIDE +DOWNERS +KNOTTED +SORTER +MISUSED +OCTAL +BETRAY +FANDOM +DEBACLE +BENNET +UNDRESS +GAUZE +GAZED +SKIPS +SODOMY +MOIRA +TENURED +RUMORED +AMUSE +FIXER +HAVES +GRANTOR +IDIOM +TANGLE +SAGGY +UPSETS +SCEPTRE +MATINEE +PLUNDER +MIDWEEK +RIALTO +BUSTLE +TRAWL +RISERS +GAMUT +INHALER +REFUTE +SPICER +SHUDDER +PARSON +FIREMEN +SLINKY +PEASE +DREARY +TUXEDOS +BATTERS +DUFFLE +HORRID +SCRAPER +DRYNESS +PARAS +GOPHERS +RELIST +DOCKERS +MANTA +COMPO +FILET +INFIDEL +VOLLEY +CARNAL +LARCENY +VERSED +LORRY +RECAPS +BRIDLE +REVAMP +ARISTA +UNRAVEL +ANDROID +GALILEE +TILLER +ORIFICE +RUBELLA +HORDES +SAPPHIC +BERYL +LEUCINE +JOBLESS +CUTOUT +SLASHED +GARVEY +SAUTE +IDYLLIC +SATCHEL +PERUSE +GIGGLES +REVEL +ALLEYS +SUTURE +MADLY +STILLER +LOGGERS +STEEPED +GRIPE +SUMMA +EYELIDS +ARCHERS +FORBIDS +DISDAIN +BRIBES +KIDNAP +FORME +MITRAL +LOWLY +DAEMONS +SCANT +SORELY +ENLACES +FLIER +MASTIFF +DAHLIA +PIRATED +LEAVERS +RAVINE +POURS +NAPALM +AMITY +STARVE +FRONTED +PICNICS +BROILER +LICKERS +ABSCESS +SKIMPY +MEMENTO +TUMBLED +DROOL +SEPSIS +CHOLINE +TRIKES +CASAS +ROUBLE +SWEETER +TALLIED +SAUCERS +KEYING +LUPIN +EIDOS +GONDOLA +SPINES +TRUFFLE +FLUTTER +ACUMEN +HALLO +SHIVER +SHATTER +PICKLED +CHICOS +CLICHE +HADES +ZONAL +CIVICS +CHEMO +NUANCE +ROTATOR +MYOSIN +CARPOOL +HONKY +ARMPITS +LEVEES +SLACKER +MUSES +BANDANA +PADLOCK +CLASSED +FREER +FENNEL +SOLIDLY +WEAVES +CHIMERA +FUTONS +FOAMING +TAILORS +TASSEL +LEANS +FIXINGS +BAFFLED +TRIPOLI +FILLETS +PHONED +DAILIES +FOILS +RETRACT +BUOYS +TINTING +BURNIE +RENOWN +MURKY +TONGS +CYBORG +YANKS +CABAL +BEGGAR +CUDDLE +DOWNER +ABELIAN +MUCOUS +POKED +SLASHES +DWARVES +STINKS +ARTISTE +SLICER +REPOSE +HASTEN +RISQUE +EARTHY +RABBIS +ADORED +CENTAUR +RAPIST +PINHOLE +PASSE +PARTAKE +DOUCHE +SNOOPER +RANCHER +GROCERS +VESTING +PANACHE +GNATS +SOLON +DETRACT +SPARKY +SYSOP +PITTED +WRECKS +DARES +SIESTA +PELAGIC +CYNIC +RUNWAYS +FROWNED +TASKING +TWEAKED +RUBIES +HATCHED +SNAPPY +TRAMPLE +COLONIC +ZIRCON +WATTAGE +BOOMS +SWIPE +UPKEEP +BILIARY +RESIZED +FORGETS +GRAPPLE +INSEAM +FAVES +CLAYS +DENIER +UNCLES +SOARED +NESTOR +FUMBLES +NITRITE +MOUSER +PESTO +WHOOPS +TANTO +VIOLETS +NETHER +HELIOS +MONOMER +NOMADS +RAMBLE +HEXAGON +LUBES +IDIOTIC +TARPON +BOUGH +RADIX +WORKMEN +GRIST +DUSTER +PRONOUN +SIGNER +SLOTH +STEELY +PULLEYS +SUBLETS +FATES +STEWS +TACKY +ANTIWAR +DRAGS +RELIVE +SHADOWY +LIQUORS +ABALONE +CREASES +NOURISH +QUIRKS +GINGHAM +TEASERS +BEVELED +PLOVER +SOLUTE +MUMPS +CHASM +HAGGIS +STYLI +EJECTED +SCRIBES +BROWSED +ACUTELY +PROFESS +RAZORS +MASSE +LEGUMES +INFLATE +WORDED +QUANT +FLESHY +SUNDOWN +RAVEL +DECOY +BALSAM +OUTCRY +PECANS +GRIME +CORDON +WORKDAY +EARED +CUTLASS +RIGOR +GUSTO +MAIDENS +HUMBLY +LANGUE +FOOTY +JOINERY +OCTAGON +EQUATES +AZALEA +TACOS +DWELT +HALIDE +GENDERS +HARMING +INSOLE +HILLY +AISLES +SLACKS +TRUSTY +SAGER +FATALLY +CAGED +RADIUM +PRAWN +PHYLUM +ALGAL +WAGING +PHENIX +ROWDY +POPES +BRAVELY +PUFFIN +SHAPER +CHEATER +LEGER +TORUS +COTTA +CLOGGED +RAPING +LEASHES +SOUNDER +STENCH +CHOCK +CURSING +MESSIER +EMITS +FLANGES +BOWLERS +THEFTS +KEYPADS +REGRESS +SPANNED +POLITY +CELIAC +RAPPERS +CUMULUS +REIGNED +WANTON +AIRMEN +CURIO +HOOKERS +AMALGAM +LOCKET +GANDER +VOILA +SAVOR +DARKLY +PLEURAL +DILATED +ANGERED +CONDONE +THERMOS +GARTERS +ADAMANT +PONTOON +TABLEAU +ANION +NUMERAL +VERNAL +TABBY +THERM +MYELOID +HANTS +FRIGATE +DAZED +HARRIER +SITED +ENTRUST +TRIPLED +PUFFS +BURYING +CHICANO +ERASING +FLEER +DEUCES +CYCLOPS +GUNFIRE +KEENLY +GOURD +GROANED +VOICING +FLIERS +GROUPER +NEGATE +DEFIES +MOPED +BUNKERS +LIGASE +PRECAST +PUREST +BODICE +FORAY +OPIATE +CARITAS +FILLY +RHUBARB +RAGTIME +VULVA +MAYORAL +FORTIS +TIDINGS +HONEYS +SILVERY +CROTON +DEPOTS +NODDING +JASMIN +LIBRI +AMICI +BUBBLY +NODAL +TEMPLAR +CEDARS +ALOFT +MATED +SNOOZE +KESTREL +PRAWNS +RUFFLED +PLUMS +FAIRER +HOPPERS +PRIDES +TRINKET +TELLY +SLURP +WISHFUL +TRAILED +ROGUES +EXPANSE +HIPPIES +PRESIDE +ARLES +OEUVRES +MUSSEL +UNRULY +STAPLER +CUTEST +ENCASED +TEMPT +ETUDES +GURNEY +BATHE +SCARRED +IGNITED +VROUW +CORONAL +TANTRIC +LIFTER +SCROOGE +NAGGING +BELLOW +GIRTH +MILLERS +CLERICS +POPPIES +INLAID +BUSSES +NOTCHED +PULLOUT +REELING +RIMMING +CRESTS +MOLTO +LOAFERS +FUELLED +TOFFEE +SQUIRES +INSURES +SLAYING +MAHATMA +PIPPIN +FRAUDS +LOBES +WINCHES +HOAXES +COALS +SHADER +GRAFTS +MODERNE +CARINA +NECKED +FEASTS +TEACUP +TOQUES +CHAPELS +TRYOUTS +MINIONS +ADAPTS +BRUNT +GLENS +RODMAN +ITERATE +EMBER +VETOED +PROTEUS +SIMIAN +APIECE +GAMMON +ISLET +GANGLIA +HEADWAY +FRIARS +MAPLES +COBBLE +SPODE +BUZZARD +PLUNGER +HALTING +CRANKS +LOWERY +BURROW +VERANDA +CYTOSOL +HYPHEN +HATCHES +TEASED +DETAIN +EYELETS +LEGALS +FLATTEN +SAVANT +LEADED +GULLS +SULTRY +SINNED +BALSA +ENDURO +CAPER +GIVENS +MUCOSAL +LENTILS +QUACK +DRAPE +SHARPS +GROOMS +OTTERS +OUSTED +GROCER +AUBERGE +PAPRIKA +CHASES +MEZZO +NOVELLA +HITHER +DIGGERS +GLANCES +SILOS +TYRANTS +GIDDY +OATHS +RIPPLES +DRUIDS +GRIDDLE +NASCENT +PRECEPT +PATINA +GIBBON +URCHIN +WOODMAN +GRAVELY +ERRANDS +HELLS +CARTES +SPASMS +UPROAR +SAVAGES +CRATERS +MOCKERY +TENTHS +QUENCH +PASSER +BROIL +HURRAH +EPITAPH +TRYPSIN +BURSARY +BARGES +CACTI +BUGABOO +CHOWDER +FREAKED +CURBS +WALRUS +MASCOTS +COMEDIC +APICAL +JOKERS +PIGLET +CRUMBLE +SPATULA +CATES +DRIFTER +NETTED +STARDOM +DISPEL +EXOTICS +JIFFY +IMMERSE +ENVIOUS +COLIC +HIRSUTE +PRELIM +FOOLING +VAULTED +WARMS +ECTOPIC +COULOMB +SAUCY +MASQUE +GLEANED +FLOWERY +SUNBURN +ELECTOR +FIELDED +ASKEW +GROAN +DUSTING +TOUTS +SHRINES +BRIDGED +TOILE +SITCOMS +UKULELE +BRACKEN +COUCHES +GIRLIE +ANTES +ARDUOUS +SLUGGER +CREEPS +STOKER +FULCRUM +GRIPPED +NYMPHS +JURIST +DUCKY +VESTAL +SPRITES +DASHING +SHIPMAN +TIRING +ABATE +VOIDS +BELLIED +DECREED +MOSSY +ADDENDA +KEYHOLE +USAGES +BOWELS +SHIATSU +CORNET +UNPLUG +PORCINE +LODGER +INSHORE +CLOTS +REDUCER +TREMORS +APROPOS +PITIFUL +LININGS +ARBITER +HATER +BUOYANT +AIRTIME +EXPEL +GRYPHON +MINNOW +SWOOP +GUMBO +NEUTER +LATED +MONTERO +VITALLY +MAVIS +CHATTED +LURED +HURLING +BREVITY +EPITOPE +VISAGE +PRICKLY +WHITTLE +ELITIST +BEHELD +MANNA +SOARS +COPYCAT +DENIALS +ADORN +DORMS +PIMPS +PROJETS +BELLES +BAFFLE +PARED +ALBINO +SLUMS +BURNET +ANKLETS +IMPASSE +PILOTED +SEXISM +SQUAW +BOUTS +MURMUR +COTTER +SQUEAKY +ZYDECO +ATTACHE +BULGING +CHEMISE +EPICS +BIONIC +LARVA +CHROMA +GROWL +GORGES +BRASH +CANONS +HYDRATE +DIURNAL +SUBWAYS +FADER +BUGGER +ROEBUCK +TYPHOID +AFGHANI +HAULERS +SLITS +IMAGED +SCALLOP +CRUSTY +CHARD +SINGLET +DRONES +KIDDIES +MINSTER +SULLY +INSTILL +INEPT +CAMPED +FRAUGHT +DROPLET +SLOWEST +REVISES +PARLAY +DIVAN +COEXIST +TRIPPED +STREWN +RUBLES +BELLING +SNARK +COPIOUS +TREMBLE +PAPAS +THUMP +WINING +ALLUDED +SOJOURN +ZIPPERS +DECAF +CALORIC +SLEUTH +SURGING +GREASED +MINAS +WILLED +YOGHURT +BRUIN +MAGPIE +ROBBING +DIMER +DEWAR +DOCKED +CAPES +SALVO +TWIGS +EPITOME +NICOL +DEGAS +JOKED +BREATHS +FARED +FLECK +CLOUGH +UNLINK +FLANKED +HOMERS +PRIMACY +POINTY +EYEING +MISTS +CARMINE +STOVER +WOMBAT +ZIPPY +ODEON +INHALE +DREAMT +GOERS +CHIPPER +FIANCEE +RHYMING +LICHEN +LAPSED +STROKED +GALLOP +BARRIO +BUGGIES +SPEEDUP +CRANIUM +POLITIC +MITOTIC +SLUGS +CARIES +PLEASER +MITER +TALKIE +MINGLED +RAFTS +METAZOA +LONGED +SHELVED +RAMMED +WAILING +SHRUGS +POLYPS +AVAST +MOANS +BUFFETS +EAVES +MARRED +POETICS +ENTITLE +ALIBI +RELAYED +JELLIES +AIRLIFT +HASHES +NODULES +PIKES +TUNABLE +MEAGER +PLUCKED +RIPPERS +DISCORD +INFIELD +PEELS +PRETERM +STANCES +HASHING +THROWER +TRIKE +REREAD +FUNNIER +STORMED +GIFTING +IODIDE +FISTULA +CENSURE +CARBINE +CREDO +FEMUR +BUSHY +GRITS +PORCHES +GLORIFY +LINEMAN +CLEAVER +OVERUSE +HAULAGE +NETTLE +GOLEM +CONIFER +FATEFUL +EYELET +BEESWAX +KITSCH +SPRINTS +INSULAR +LAGOONS +FAKED +BANYAN +AFFIX +QUIRK +BLINKS +SAWING +TELLERS +HERDING +HOPPED +FUNCTOR +HALCYON +BOWING +COGENT +CANTINA +MOLLIE +NAPPIES +SUNDIAL +TUFTED +FLAKY +PREAMPS +GESTALT +CHORALE +TIARAS +FLITE +JAMMER +CYCLASE +ADONIS +DOMED +MORRO +GELDING +PANES +NYMPHO +COOKTOP +MEDICS +DAINTY +BEATER +CRACKLE +TREKS +SPLICES +PLANKS +BELCHER +SPIRALS +PLUMES +BEETS +BETTA +REPEL +EMMET +LUMINA +ONEROUS +LITAS +HAKIM +PUREE +BONNY +HADDOCK +COSINE +PYJAMAS +SWATH +ARGOSY +COPILOT +PHOBIAS +STUMPS +CLOUDED +ROUEN +BIGHORN +GIMMICK +FOULED +WIRETAP +MONIKER +WELLING +PRODS +INCITE +DIVULGE +WARDENS +GUARANI +TAMPON +EASELS +SUBLET +PEAKING +HAREM +FUSSY +SELTZER +DELUGE +GOODIE +FLUTED +VENISON +SHOAL +BASKING +PINGING +SMEARS +EXONS +RESEAL +COOPERS +BIOTA +HEADY +DEPLOYS +CELTS +BATHED +FIVES +HOARD +LADING +CROCUS +CREAMED +MESON +CHERUB +LIEDER +STRAWS +NANNIES +SENNA +LEBEN +SPELT +BARKS +NERDY +DODGING +BROWNED +CRINGE +KAROO +UNEARTH +HOOKUPS +GAZELLE +GAUCHE +MINION +HARPERS +DRIVEL +TENDONS +THRIVES +ROARED +UNWISE +STIFLE +REFUGES +ROUSING +KNELT +DEVOUR +PETTING +GLUES +ROASTER +WARRING +AROUSE +WOBBLE +TICKED +PURGED +FATED +PARSERS +HAULER +HALTS +YERBA +SAYERS +CINCH +CUBED +UPHOLDS +INROADS +DINKY +BOASTED +STIRS +DONKEYS +HONED +SYNCHRO +CHUTNEY +AVERSE +AFIELD +CASEIN +MISHAP +LACKEY +LABORS +NORMALS +SONNETS +SCRUM +MUSING +LOPES +INQUEST +SNIPE +HAPLESS +MIRZA +HITCHES +BEAUX +GUNMAN +SHRINKS +INDEXER +PHONING +SPACEY +LEGATO +AGAROSE +BADASS +SINGLY +FUSING +ABUSER +SEVENS +LITHO +THANE +SALVE +HADRON +GRATES +FISSURE +CURTAIL +TRANSOM +TALKER +VITESSE +WINKS +BESTOW +HULLS +ENRAGED +BLOTTER +SITTERS +CLAMPED +FRIAR +CREASED +TRAPPER +PYGMY +SLANTED +PLAGUES +ADIPOSE +POTTING +PROGS +SURGED +BLUME +NATURED +WOOLLY +BLEMISH +BUSHELS +TAPERS +BOOMBOX +PANSY +EVICTED +TABLA +DINGO +DIGRESS +BEAKER +FETUSES +ARCADES +BAGGY +JEWELED +HEIST +REPAINT +SPASTIC +DICKIE +QUIVER +CUTOUTS +CORONET +TAVERNS +WIELD +ADAGE +GETTER +MIMICS +COOMBS +WETTER +CONJURE +MOREL +ADRIFT +ENABLER +STINGS +BUDGE +HERBALS +SILKS +SEQUINS +CHASERS +FRINGED +LIAISE +CITRIC +GOBLINS +NITRIDE +KNEEL +EXCELS +CAVEMAN +MASTS +GARRET +OTITIS +EATERY +PEONY +CULLED +NUCLEON +HIDEOUT +CALCITE +GUNSHOT +LENSE +BATTY +ZEALOUS +OCARINA +MODULI +PAYOFFS +DEFROST +BONGS +TWINE +METEORS +SAREES +DICTION +HOISTS +REENTRY +GRANOLA +FERRITE +AGAPE +LAMPOON +FIRMING +ANNULAR +DRIFTS +CHALICE +RECODE +PREFECT +SWEETLY +CLEAVE +FLIMSY +KINGPIN +BEDDED +COMTE +GRACED +VERMEIL +ULTIMO +SILAGE +BILGE +MORAINE +SUNBELT +CHEWY +GRINS +CHEWED +BUSBY +CHEEP +PASHA +CORRIE +SCOUR +DUELING +FALLOW +RESHAPE +LEAPT +GAINERS +WIDOWER +RIYAL +TAFFY +PURGING +SCARING +STRIDER +JACKAL +IGNEOUS +RINSED +BOGGED +TEMPERA +LACING +MYSTICS +TEAPOTS +FRESHER +BONEY +BROWS +SKIMMER +TECHNIC +SKETCHY +TIFFIN +PACER +STEERED +BITTY +LAPSES +DWELLS +KAHUNA +SHREWD +MICROS +FLACK +LIDAR +WHATNOT +CRASS +BIOTIC +EUGENIA +CROWDER +MANGLED +STAUNCH +SHAVEN +VISCOSE +MANHUNT +PAVERS +EUCHRE +QUARTS +MITOSIS +YELLS +PAISA +WRAITH +CRORES +NIMBLE +BIGGIE +DURST +SKYLARK +BRAZEN +BRAHMA +PRION +PIPERS +BUTANE +ANGERS +INKED +JIGSAWS +LICHT +BODEGA +DOCKETS +CARLE +OBJET +BUYBACK +GIGOLO +SLIVER +BUMMER +DUNNING +GRINCH +IMPURE +RUMBA +SPUNK +PINNING +RAISERS +STUNG +RETORT +ANEMONE +NINJAS +INCASE +WEEDING +EVASIVE +SYRUPS +SMIRK +CHILES +PAUSING +GRANDS +REPLETE +GLORIES +PRELIMS +PAWNEE +MANDALA +BRISTLE +TERRORS +OBLIGE +NONFARM +ANKLET +PANACEA +VIBRATE +TOADS +DEFLECT +LIBER +CHAKRAS +SAMARA +UNSUNG +LOSSY +MITOGEN +STUMPED +CRAMP +SODOM +TRYOUT +PANDAS +APPEASE +FURLONG +SHOVELS +CONUS +MOUTHED +MOXIE +GILLS +BRAIDS +FUGUE +MILDER +CARMAN +SPEER +LATHES +HOARY +PENNE +CORSE +ANDANTE +OVERTLY +TUBULIN +BEAMED +SCRAPED +CHAGRIN +PANNING +WASABI +TICKLED +SPARING +HEIFERS +WANDERS +SATEEN +RESTFUL +PINCHED +GRANULE +PURPORT +MARTEN +AGELESS +HOWLER +HARDTOP +CARDED +SWAYING +AMBLER +FIRMER +ARCANA +BACKHOE +TRASHED +LOBBIES +COLDEST +PROVISO +BAZOOKA +GERBERA +RESCIND +GLIDES +DIOXINS +GYMNAST +FORCEPS +HURLED +ADJOINT +SPLINT +LLAMAS +TOUCHY +RAFTERS +DECOYS +PARIAH +JORDANS +FRAMERS +HUMBLED +RADIATE +FELLAS +LEAVED +ATTAINS +GALLUS +OOCYTES +FILERS +SCONES +BLUNDER +BELTED +ANTLERS +POWWOWS +REAPING +DUMBEST +PROWLER +SIZZLE +DREDGED +FIFTHS +CARPORT +DUBBING +ZANDER +DAYBED +COBBLER +HEINOUS +KULTUR +MANHOLE +ERODING +SHUTOUT +LOAVES +HEELED +QUIBBLE +CHEERY +CURBING +HARSHLY +FEISTY +ETOILE +MUTTON +BLINKED +SNUGGLE +ZIGZAG +BATTEN +DRAGOON +MERRILY +WETHER +LARYNX +GRIFFON +PERDUE +CEASING +MEEKER +EYELASH +CLICKER +ACADEME +OBEYING +GUNNERS +GOSLING +MISHAPS +FOULING +DUSTED +INLETS +MUTTER +LITTERS +BROTHEL +SHELLED +CHITTY +ATAXIA +PLANING +ABYSMAL +TERMINI +BOURSE +DENTURE +FOURTHS +WAGONER +MINDING +CATNIP +RENEWS +LOWING +BULLIED +BLUISH +PUSHER +TINGLE +GNOSTIC +PARLORS +TYPIST +BRUISE +SCOTTIE +FISTFUL +STAFFER +THITHER +REBUKE +SWAYED +VESICLE +GAUGING +LIPASE +SEAMEN +CENSORS +VOYEURS +BOYHOOD +CAMPION +SCULPT +FERVENT +LIKENED +HYDRIDE +PAUPER +BROOMS +LIVABLE +USHERED +INSTEP +SEPTUM +ESCUDO +PETTER +ADENINE +PASTAS +ALEXIA +CHECKUP +MIGNON +IONIZED +THORAX +WARSHIP +PARSES +RATTLES +TROPHIC +MARVELS +QUETZAL +HOMING +WEEVIL +MORGUE +KICKERS +JUGGLE +YESHIVA +ERRANT +HEIFER +EARTHEN +UPLANDS +OPERON +SURFED +STEINS +SHIVERS +SMITTEN +RAREST +RASHES +AVERTED +EQUATED +CLOCKED +LOOSER +BOOKIE +SKEWERS +LAUDED +STEEPLE +NAILING +PEPTIC +TANNINS +PENANCE +RISKED +BOWLED +PEARLY +KIRSCH +CHARTED +ISLETS +LOOTED +WAGERS +RAVIOLI +WALLING +JOINTED +HEYDAY +TOPSOIL +ISOMERS +LEMANS +BEAMING +CHOOSER +BUGGING +PROTEA +LIPPER +CHESTED +ADOPTEE +LIVERS +PLOWING +GLASSY +RIDDLED +MIMOSA +SHRILL +HALVED +SWEDES +UTENSIL +PULLER +DINNING +MISFIT +ASIDES +RUSTED +BALLON +MISTRAL +ZEROES +ADMIRER +DIVISOR +CANDOR +VIBRIO +SEARING +WIGWAM +BUSTIER +DRUGGED +GNOMES +MARBLED +MOCKED +HOLLER +GUANINE +CRUELLY +TAPIOCA +FURROW +FEWEST +DROWSY +CASHEW +BUSHEL +CYPHER +CURSIVE +FORTIES +EXAMEN +TONGUED +GHASTLY +SUCCUMB +BOLERO +DUMBER +INSOLES +STARLET +EARNER +ZOOMED +GROUPIE +LAMINAR +FORKED +COWARDS +CAMBER +CAPTORS +GUTTED +ARMING +AMASSED +FELONS +DEARTH +TARMAC +DECORS +RICKEY +SWELLS +CHARADE +BOBBIN +DOINGS +DUMPER +SILKEN +ANAGRAM +FOGDOG +SEEPAGE +POPPERS +RAPISTS +SEABED +RECTORY +DIPTERA +LOOPED +MYELIN +HANGUL +CURRANT +ODDITY +APHIDS +PUFFED +CRUSTAL +HACKMAN +SEDUCES +SAWDUST +LEAPED +EMBERS +PESETA +BALLETS +SORDID +SNOWING +BLEEDS +AVENGE +SPORTIF +YARROW +FICKLE +POLICES +DOGGING +ROTUNDA +FAINTLY +ZAPPER +ROPING +DECKED +CHOPPY +VANDAL +ROMPER +DWELLER +BITUMEN +NIMROD +SPLICED +GUNNING +BEARDS +TADPOLE +CANTER +BERSERK +FACILE +COERCED +BILLETS +SNEEZE +SOMBER +SHARDS +ADVICES +WHIMSY +COFFERS +ICEMAN +CLUMPS +PEGGED +DEPOSED +KETONE +GLAZER +FORSAKE +BABOON +SWAMPED +ENSUES +TENUOUS +ELATED +LENTIL +BACKER +ALBEDO +ANGORA +STUFFY +DEPRESS +CLINGS +KITTIES +HUBRIS +WAIVING +SWIRLS +DAMPERS +DAWNED +SEIDEL +BAYARD +FARROW +DINGLE +RELAXES +MALAISE +POSTDOC +BICEPS +HYDRANT +ROCOCO +PRESSER +CHAMOIS +URETHRA +SEARED +TINGED +LEEWARD +AMINES +TUGRIK +FAKING +RISOTTO +ANAEMIA +JUNGLES +SHREDS +BOXCAR +POUNDER +KRONOR +ARCHWAY +OVERSAW +LOUDEST +CINDER +VIADUCT +LAURELS +TREKKER +GLYPHS +ALIGNS +RECOUP +NAUGHT +WARHEAD +PRISMS +COINAGE +ENDGAME +PLANER +DEFRAY +DIMMING +ZEALOTS +WEIGHTY +OEUVRE +GASPING +IDIOCY +REVISOR +PENDENT +KLEZMER +EDIFICE +VERMIN +ISCHIA +INCURS +LOBBIED +GALLIUM +SORBET +STEEPER +TOPIARY +BUTTERY +CRONIES +PIPETTE +SOUNDLY +WICKING +AUSTRAL +WEAKENS +LARIAT +REDRAW +TRIFLE +POOPING +BERTHS +RETAKE +MARENGO +QUICHE +RESALES +MADURO +UNDOING +CASSAVA +GRIPPER +NEGATED +PURVIEW +BOSQUE +EULOGY +BABBITT +GALLOWS +DEVOTEE +FABLED +SMELTER +MANMADE +SAGGING +STATICS +CUPCAKE +DEFIED +ERRAND +YEOMAN +RAGGEDY +COERCE +ANNEXE +SOBBING +MUSLIN +HUGGER +PREQUEL +SHEKELS +THORNY +PONDERS +SEALERS +ERRATUM +FOXTROT +TESTES +ORIOLE +REUSING +SHINER +RHESUS +THRUSTS +GIVERS +FARAWAY +OSTOMY +INGEST +GAZEBOS +SIRLOIN +ABOUNDS +SALUTES +POTASH +LAPPING +WYVERN +MUFFLED +INLAYS +LOCKETS +WHITEY +FOILED +FLOCKED +DIALERS +ROSELLE +TETHER +TOUCAN +PULSING +OBLIGOR +MATCHER +HERALDS +LESSORS +KARATS +AMIABLE +URINAL +HINDERS +TUBERS +CLONER +JERKED +OPULENT +WADERS +SQUALL +CHOKES +CINQUE +BOWERY +OUTLIER +FERVOR +EXOTICA +SCOOPED +REEFER +EXERTS +IDLING +LEPTON +CURSORY +BATSMAN +REFUTED +PENISES +VELVETY +TERNARY +TEEMING +PANTING +COMERS +ROMAINE +LUNACY +SIGNERS +LOATHE +CENTRA +HUDDLE +ADENOMA +TRUANCY +TAXICAB +MIDLIFE +COUGHS +ROOTER +WIDENER +ONETIME +GATING +WIDENS +RINGED +BAGGING +HUDDLED +MALACCA +CARRION +PLANTAR +BRACED +BRAISED +SPIGOT +NAILER +COUPES +POLLUTE +CHARING +PRETZEL +WARPING +PRONGED +BARING +JACKED +TARTAR +REJOIN +SNIPERS +GOSPORT +RUBRICS +HARKEN +CRAWLS +GREAVES +SMUDGE +PATTIES +GAMBIER +SMEARED +HERDER +OUTFALL +PARASOL +CONCURS +FARTING +ATOPIC +CULLING +STINGY +ZEALOT +DEVOTES +SHANTI +VIGOUR +SNARES +MORTARS +DUCTILE +WITHER +SEAMED +CALMED +PISSES +VIPERS +TASTER +ARBORS +PUNTERS +DROPPER +KRYPTON +CHUCKY +BUSHMAN +FOREGO +RICOTTA +HUMIDOR +BROILED +INSIDES +FARINA +CUTAWAY +DEFRAUD +TOOTHED +BYGONE +CLICHES +EXHALE +LIKABLE +ALTARS +STANDUP +FLEXION +KINSMAN +FOOTERS +MUTABLE +SPUTNIK +COFFINS +CASHED +USHERS +BARFLY +ANNOYS +RACKETS +DUCTED +CRISPS +HEIRESS +DRESSY +GODHEAD +SHYNESS +PICKERS +ANGELUS +MOMENTO +FRAYED +WOOLEN +CUTICLE +PIMPLES +SHORTED +SPUNKY +READIES +LITANY +FAIREST +NUTTER +LARDER +SYNCING +OBELISK +CLARET +CANZONI +WOBBLY +DENNING +JESUITS +MOTTLED +LOCKUP +TOSSES +PUBLICS +UNLOCKS +THRONG +RINSING +PREEMPT +SHUNNED +RESOLD +WIPEOUT +TURNIP +CRUSHES +GUSSET +BANISH +PUNTING +SCHISM +TIDBIT +DOGGED +FERMION +PINYIN +MESSES +TOPPLE +PUNGENT +WAIVES +REBOOTS +FANZINE +TECHIES +CANVASS +RADISH +BAITING +SUNSPOT +RETYPE +ELATION +COWBELL +FELLER +TRANCHE +ENMITY +SANCTUM +SOUTER +BOATER +WEIRDO +RACKED +STAPLED +FANCIED +SPOILT +STRODE +GRAINY +GIGGLED +TITULAR +SWEARS +TRAPEZE +EXTENTS +SUNBIRD +PARING +DAMNING +HUMBUG +AILMENT +HOMELY +SHARPIE +CURRIER +TAPROOT +DINERO +SHOVING +MENTHOL +SUBNETS +MENSCH +FROGGY +BAGPIPE +COCKED +DRIBBLE +GOBBLE +MYTHOS +COLLOID +BREECH +OXIDANT +PYRITE +DRUNKS +KIDDER +PARQUET +DAMASK +BATTED +EMOTIVE +PAPACY +THIMBLE +RACISTS +ABLAZE +SPOTTY +THAWED +LOAFER +SKYDIVE +RETINOL +FAIRING +SWISHER +HOTSPUR +FJORDS +COLLATE +INVADES +DIPPER +TALKERS +SOCKEYE +BYWAYS +BECKET +BLUNTLY +ASSAYED +DERAIL +GOBLETS +TOUTING +CRAPPIE +CLONAL +DIGOXIN +DIORAMA +AMAZES +PRATER +ENDERS +GRIPES +SPIFFY +CURIAE +NUANCED +RATTLED +TRAMWAY +SLAYERS +REAPPLY +DAMPEN +SNOWMEN +RHIZOME +IMBUED +BUREAUX +LEOTARD +LOOPER +IMPEDED +POMPOUS +SUBVERT +MUSCLED +CALLAS +TAKINGS +TRIPLEX +MOUTON +CAMEOS +CASINGS +SPARKLY +SPUTUM +MONGOL +PEELER +REPEALS +DUCTING +FANTOM +ALPACAS +POWDERY +DIVERGE +RADIAN +JURIED +GEYSER +UNTAMED +SHODDY +MENDED +NOTCHES +ABJECT +RIVETED +KISMET +DRAFTER +DEEJAY +HOOKAH +PITTING +ETHERS +FITTEST +TARNISH +ISTHMUS +TREADS +MAYDAY +HONING +DEFTLY +RAUCOUS +CURIOS +HAIRPIN +TOASTS +LITMUS +TOOTSIE +BLUSHED +SADDEST +SPOOLS +MEDICO +GRINDS +EXEMPTS +COULEE +BUGGED +RIBOSE +LEFTIES +FAGGOT +BLOOMER +BARROWS +SARONG +LUMPED +SCRIBED +BORROWS +FRIGID +BUTTERS +ARMREST +WOOLLEN +ASHRAM +IMPAIRS +CARAFE +ENTERIC +MARIMBA +PEACHY +WINDED +MYOPIA +RAMBLES +DIATOMS +BLUNTS +INTERNE +DAWNING +CAPLETS +WINGERS +SEMPRE +TRACHEA +NUMBING +COLLET +FLIRTY +OSMOTIC +EGGERS +KNITTER +CLOTHE +SWELLED +BELTING +SNIPES +STAKED +RIGIDLY +SIMILE +PHALANX +SLOPED +BALLER +SIFTING +MEANDER +GROANS +CANKER +KEENER +AUDIOS +BUSILY +POACHED +HAILING +SLUMPED +GLUING +CAPTOR +GRAZED +JOULES +THRIVED +ASCRIBE +STALKED +DELUDED +NITRILE +LABORED +SMACKS +TROUGHS +PISCINE +SKILFUL +BOLDER +ENDURES +XYLENE +GIRDER +BISMUTH +INTENTS +PRUNED +LANTANA +WEDDED +LASHED +SHRIVER +WHALER +SMACKED +TRUSSES +ZOSTER +GROOVED +PLAYAS +INTITLE +ALCOVE +UNGODLY +FELLING +HAZING +MONTES +SKYWAY +BOTCHED +MICROBE +NECKTIE +MATRON +SEAWARD +CIPHERS +NIBBLE +FLEECES +PECKER +ADOPTER +DECAYED +SAUTEED +ODDBALL +HEDGED +MINTER +TAPETA +VICEROY +POWTER +YELLOWS +DRILLER +MUMMIES +PRETEST +TROWEL +BESEECH +HITCHED +BENZYL +STIFFS +ENCHANT +AUSTERE +EARTHS +COWHIDE +PLUMAGE +TENORS +RAPIER +HAUGHTY +OPIATES +SALAMI +CADAVER +YAWNING +PRUNES +REDONE +MALLOW +DURESS +ATTUNED +HERONS +RAIDING +BANGER +KWANZA +DOABLE +RAMMING +REENTER +INBOARD +CABOOSE +QUATRE +FITTERS +STOKED +CEMENTS +BOUDOIR +GLADES +CRUTCH +RIOTING +AMYLASE +UNPAVED +TURNERS +DINETTE +DIMPLES +HESSIAN +ARDOUR +LEVANT +HILLER +PETUNIA +SLEAZE +GREMLIN +SUNDAE +LIFTERS +RHINOS +LEEWAY +OFFENDS +WISEST +SHACKLE +KABUKI +ITEMIZE +SPLINTS +AIRSHIP +CESIUM +YIPPEE +SIPHON +SCANDIC +AVIARY +TRUNDLE +HUSHED +CADRES +COGNATE +MARKKA +FLUSHES +RESTATE +SANDED +BOUVIER +GODLESS +BIRDERS +BRAZING +MEDIAS +HINTING +VENTER +OMICRON +MAGGOT +BAILIFF +HOUSER +INFUSE +DEFACED +PAMPERS +MOORISH +BOBBING +MACHETE +PATHOS +SMARTLY +LAMENTS +MENORAH +ROUSED +CHARRED +VALIDLY +REMATCH +CHUTES +UNSOUND +HATTER +LINSEY +TAKEOUT +BEARISH +SORREL +REVERIE +PHONON +CALLOUS +JINGLES +GAINER +SOFTENS +FLANGED +SINUSES +AMPUTEE +UNDYING +STUBBLE +CADDIES +KNESSET +SPLINES +UPTIGHT +ACTIVES +DOODLES +HATTERS +GRINGO +SOOTHES +BELUGA +COMPELS +DIATOM +BOBSLED +LEGUME +REDIAL +DAMSEL +DECORUM +TAFFETA +LENIENT +RIMMED +HYPHENS +EFFLUX +MEDULLA +MOORED +PEERED +BONITO +ZEOLITE +SCRAPPY +MAXIMS +STROMAL +JEZEBEL +REVERTS +PURINE +FROLIC +CASSIA +LAMINA +TOPPLED +MENDING +RERUNS +PLAZAS +HURTFUL +WITNEY +ROASTS +STRAYER +ERUPTS +SWARMS +CHIVES +ORATORY +SEPTAL +SPRAINS +GROWLED +MASJID +NEBULAE +FISTED +GENTLER +INFECTS +SQUATS +STUBBY +IMPALED +FORAYS +SICKLY +FLANKS +CURBED +RETEST +DIESELS +BANJOS +GEODESY +VALUERS +PITFALL +MINDER +ORATOR +PINATA +MOPEDS +STEPPE +PLOWED +LINGERS +LEMPIRA +RECAST +BURSAR +CHASTE +BESTIAL +RESTOCK +LINEUPS +OOZING +BOOKISH +SUBDUE +RAKING +GILLIES +BOWYER +GROMMET +RUCKUS +WETNESS +BINDERY +TANTRUM +JUICED +FLEXING +TRACERS +AWAKENS +AMOEBA +DUVETS +SORTIE +WITHAL +METHOXY +BARMAN +BROMINE +RAMPART +FACADES +MOURNS +FERRIC +CONCEIT +NEEDFUL +LOCUSTS +THATCH +BAMBINI +EMBOSS +MEIOSIS +GRUNTS +THICKET +PRYING +RASCALS +STOCKER +RUDELY +LACUNA +LUTEIN +BIRDIES +QUEERS +RADIANS +FLARING +YANKED +MINTED +LECTIN +TILAPIA +SLASHER +OXFORDS +GRAFTED +PROPPED +STAKING +BEDOUIN +FANCIES +PEEVES +ACCUSER +ANIMAS +SULTANS +FINCHES +BASQUES +MULLAHS +LOWBALL +CITRON +GROSSES +TACKED +OILSEED +STIFFER +SLATES +ALLELIC +BIRDMAN +LAYETTE +TIMBRE +SCROTUM +CLASPED +PECKING +GRIEVED +TALLIES +SNIPING +ENTERAL +RELIEFS +TASSELS +WHITER +REGALIA +PEERAGE +TABOOS +STORIED +VERBENA +DOUBLET +TYPESET +MOSSES +BONING +SUBSIDE +JARRING +WATTLE +STOLES +GLIOMA +TINSEL +ADVERB +MUMBLED +PRUNUS +LAZILY +CATTERY +JEEPERS +FOLIAR +CUESTA +CANTATA +HAKEEM +NACHOS +HILLIER +SHANDY +DIPLOID +TOGGLES +CALVING +OFFSIDE +CASTES +MASSIF +SHRIKE +DAIRIES +BIOGAS +PLUNGES +SERVOS +ASEPTIC +DARKEN +DEFAMER +SHAPERS +GOUGING +ACYCLIC +FULFILS +RUFIYAA +MITTEN +DALASI +HERIOT +REPRESS +MOIETY +STEEPLY +DARNED +AMPERE +PEEKING +DENSER +LIGNIN +GUSHERS +DEBITS +SKIMMED +LASSIE +SPEWING +ERASERS +LOREAL +PUMICE +STATOR +COMBING +DOVECOT +INDIUM +DEEPENS +BLATHER +HEAPED +ORACLES +UNTIED +QUINCE +HANSEL +DAYLILY +CRANKED +MONTANE +PIECING +QUARTO +HELICES +BRINDLE +CREEDS +OUTRUN +BENDERS +TAURINE +SHANTY +VOIDED +RAPPING +DIEHARD +GEEZER +SWIVELS +BRAVADO +RAVINGS +SADDLED +CRUSTS +TIBIAL +TRAWLER +BIFOCAL +UNSOLD +OPINED +BINNING +FALTER +CHATTY +PATACA +SACHETS +TITRES +SCALPEL +FAERIES +FASCIAS +WEDLOCK +STYLER +OBTUSE +CAUDAL +SEXTET +STERNLY +CHANTED +SAVOUR +LUPINE +GOURDE +GELATO +SOFTEST +SNIFFED +BABBLER +TENSES +SPOOKS +PYRENE +PREFAB +REWROTE +YEASTS +TECHED +BUFFING +SEIZES +APHASIA +COHOSH +ICICLES +FESCUE +FLAMED +GODSEND +DOORMAN +RUBBERS +SWOOSH +SUBSEA +INJURES +PIGTAIL +RELOADS +STRAYS +FOETUS +PUNTER +DOLLIES +INDICIA +EXCISED +DAMPED +FORLORN +WHACKED +METICAL +LEANER +SLIMMER +BATONS +SOCIALS +CALMER +PASSERS +SCREECH +FETCHES +CLOBBER +PALTRY +THREES +TREMOLO +GOULASH +BECKONS +TURBAN +GOONIES +RUFFLES +GAITERS +ZEBRAS +SCOPED +CURVING +ALLIUM +TANKARD +TOASTY +AMOROUS +SHADERS +WEANED +DRYLAND +PECTIN +GRUMBLE +WRONGED +MUSICS +LABOURS +FLATLY +HARSHER +TIPPER +ALIGHT +EPOCHS +GENIAL +LANGUES +SNOWED +CACHET +FORTIFY +CHERUBS +CANZONE +TOLLING +FLEURY +PUMPER +BUCKING +BAFFLES +OBVERSE +INFAMY +DAPPER +BELFRY +ELYSIAN +ODIOUS +WHERES +SUTURES +CYCLED +COBBLED +IMPARTS +JOGGERS +QUILTER +LUMINAL +THAWING +STRANG +HOVERED +STUNTED +PORTICO +BROADS +EXCITES +WEASELS +PLACARD +DEPORT +LEMMAS +SLAMMER +KARMIC +INKING +JITTERS +DOBBINS +PERUSAL +DELVES +BOSONS +CALLAN +CLOAKED +LICHENS +FRESNEL +CARTERS +TITLING +SUNFISH +FACIES +BELLMAN +PLIABLE +BACULA +MANTUA +CHUCKS +RAFTER +DISSECT +HEXANE +BLAZES +OLIVINE +GOODLY +GESTAPO +BRAMBLE +DALLES +HOLLIES +RIMMER +ENACTS +CANASTA +TOOTING +SCALARS +ANTHILL +LATHER +BALDING +QUASARS +STRAYED +QUAKES +GAPPED +PASTES +GERBIL +WEBWORK +PLUCKER +HICCUPS +SILVERS +JURISTS +CLOAKS +GLAZES +FINIAL +POSSES +PERCHES +CANDLER +SCRAPES +WARTHOG +VETTING +GOALIES +JOINERS +MANTRAS +REMADE +GRISLY +FIGURAL +PISCINA +TRAMPS +WINKLE +MESONS +BROGAN +OMELET +QUIRED +FOLIOS +LAZULI +DICTUM +THORIUM +LORRIES +LEDGES +CATLIN +SWINDLE +CANDIED +SCALER +GABBER +FRIEZE +CLUNKY +POODLES +YUPPIE +BARYON +SUNNAH +UNBOXED +WRECKER +SULLEN +UPSTART +REFOCUS +CROUSE +BEEPER +REMAKES +SEQUENT +RETRIES +DONNAS +RALLYE +WAILERS +FORBADE +WOOFERS +PIECED +OOCYTE +ARCHING +GOURDS +WORSTED +ACORNS +ROWERS +VAGRANT +EMPTIES +DOMINOS +DECIBEL +JOSEPHS +MORGEN +DORMER +STASIS +PYTHONS +BARRIOS +PANICS +ARNICA +EMBARKS +TALONS +DUALISM +POUNCE +PANIER +DUALLY +VALOUR +FACTOID +WEENIE +TWEEDY +ARRAYED +STAMPER +HISSING +JOJOBA +OUTCROP +TOPMOST +INTRUDE +OPIOIDS +BEHEST +CHARMER +LIPPED +INFIRM +PONTIFF +QUAGGA +MENAGE +SCABIES +NAPPING +MOMENTA +BOUTON +WINGMAN +DIVEST +ABATED +POPLIN +TINIEST +CASKETS +AURORAL +URINATE +LYCEUM +HARLOT +RAVAGES +UNLINED +HUMANLY +ABIOTIC +PEDDLER +GLARED +ADVERBS +HOBBITS +MIKADO +GUNNED +THROES +CROWBAR +NETTLES +CRUISED +LASHING +THEISM +TABLING +FLOATER +TROIKA +RECLUSE +STONING +BLACKER +ASPIRES +ISOTYPE +BRAINY +PATTED +CLOTURE +CALCULI +VICTORS +REVELS +SUGARY +DROVES +BOOKMAN +PHRASED +PUDDLES +PENNER +PARDONS +DEFUSE +WHISKER +RIGORS +BOOBED +BLOKES +LATCHED +SPAWNS +CRAVERS +CLASHED +HOLDALL +HARPOON +REINING +SOMBRE +HEARSE +ROAMED +FATTER +DEFLATE +CANNERY +MANNOSE +GAUCHO +CHASSE +CREPES +SENILE +COBWEBS +HELLISH +HOMINID +UGLIEST +TRUMPED +GRAVER +KERATIN +TORRID +TILBURY +HUTCHES +ENGRAVE +BAUXITE +BARRACK +GOUACHE +PLUSES +MYOPIC +LYSATES +SNUGLY +FEVERS +MUDDLED +CODONS +EVOKING +HOARSE +CURRIES +SLINGER +CLIQUES +DELVING +MALLETS +FLOORED +HAGGLE +MIDLINE +BEATERS +IMPLODE +PHONIC +STAGGER +CRUSTED +GANTRY +TURRETS +SLITHER +JUGGLER +MOCKUP +WORSENS +STIFLED +URINALS +SAMSARA +TEASES +LIONESS +SCYTHE +HEAVING +HOMILY +PENSIVE +PASCHAL +UPSHOT +SHOWOFF +SIFTED +RUFOUS +COWLING +FERMENT +BUSIER +PHENOM +WARMUP +THINNED +FOODIE +FLAPPER +AIRCREW +SEABIRD +HOISTED +AUTEURS +WASTAGE +DIMMED +MOMMIES +BULGES +SCURRY +GROWTHS +OUTBOX +TOTING +FIENDS +GARBLED +STROKER +TALLOW +ANIONS +TICKERS +INTRONS +DIMMERS +UNKIND +MISREAD +AFFICHE +SPOOFS +PAUCITY +HORSEY +THUMPER +EERILY +SLOUCH +AMULETS +CARGOES +BIOPIC +EYEBEAM +EDDIES +JOISTS +DISOBEY +ALUMNA +CHROMED +SAVOURY +HUMVEE +IRISES +CLEAVED +BLARNEY +NICKLE +MAGNATE +PILLAGE +TEETER +GADFLY +SCRUFFY +BARONY +VIBRATO +CADDIE +EJECTOR +ISOMER +TAMPONS +CURABLE +GUINEAS +SWERVE +PANDIT +LECTOR +BRISKET +CAPRIS +RAMPING +VEGANS +PLUMMET +DEPLETE +CASUALS +BAMBINO +TUBULES +FRAILTY +TANGIER +OUGUIYA +PREWAR +BATEAU +RAGWEED +VETIVER +REOPENS +BOXWOOD +CASSIS +STENTOR +PROVER +BROKING +SACRAL +WILFUL +TWISTY +ERUDITE +WESTER +BITCHY +SPRAIN +PLATEN +CHISELS +PHONEME +ABIDES +SPOOFED +STROVE +TALKIES +STUTTER +RETICLE +COPTER +BONKERS +VERDANT +SECRETE +LOUNGER +BEADLE +COCKNEY +PENNING +GAMMONS +NODULE +PAELLA +HANDOFF +LEECHES +CONVOYS +OSPREYS +SHAPELY +MULLAH +WHEELIE +PREEMIE +SPAYED +REFINER +TOURER +ICICLE +HOOVES +HOTDOG +GALLEON +KETONES +PRIORS +CHAFING +BETRAYS +SUNROOM +INWARDS +REGROUP +SCAMMED +SOILING +JACOBUS +GERMANE +CHIMPS +MOURNED +FRISKY +WOODCUT +RACOON +THICKLY +CISTERN +FIBRIN +PHAETON +PURISTS +CALIPH +SPEEDOS +FUNNELS +CUFFED +TUMULT +CURATE +DONNED +VIXENS +TARSUS +AMAZONS +CANINES +STROBES +BHAKTI +TRUEST +GHOULS +SNITCH +FELLED +TINNED +PATTER +COMMIE +BEANBAG +BOOTIE +SNARKY +BUMMED +SIDECAR +WINTRY +BILAYER +SKEETER +ANEMIC +SHAMED +CARTELS +ELUDED +MILTER +SQUELCH +BANZAI +BEREFT +SEAWAY +VITRIOL +VESTRY +RUMBLES +ASCITES +FEBRILE +MERCIES +MANILLA +GLOBIN +TAILLE +THRALL +BARKED +AIRFOIL +LIGNITE +SCORNED +THICKEN +BLAZED +CUPPED +MAIMED +DERNIER +PETREL +PUFFING +WIELDED +LAVAGE +CASTORS +HYMNAL +FINIALS +TRESTLE +SOUFFLE +SPIKING +AXONAL +VINYLS +MULLING +SIGHING +PERGOLA +SHRANK +CUPPING +PINEAL +EARACHE +BUDGIE +UPPING +KNOLLS +IONIZER +UNWELL +WEDGED +EVADING +DELTAS +STRIPER +REDFISH +CUBISM +SHRIMPS +STIRRUP +FLOPPED +SUBTEXT +LOOTERS +STUFFER +GLUCAN +CURLEW +MINNOWS +SALSAS +COFFRET +THALER +BRISKLY +HUMORAL +SNAZZY +SUBPLOT +INGROWN +HUSKER +AFFRONT +BAILEYS +OUTTURN +VINING +RIPSTOP +MOGULS +MURMURS +GLEANER +LAPPED +RIDINGS +CLAWED +CHOKERS +NABBED +TANAGER +WINSOME +CAPSID +EQUALED +GASSES +EMERITA +LONGBOW +QUILLS +ERASES +SCALPER +TARTANS +GRAYISH +HARING +ETHANE +PUFFER +HOMERED +IOLITE +RECLINE +FLUVIAL +CANDELA +HEEDED +WHAMMY +COLLARD +SACHET +DRAKES +ROUSER +VETTED +TITERS +TYPISTS +LEDGERS +SHRIEK +POSITS +FAECAL +REHABS +DEICIDE +BUNGLE +PROBIT +CROZIER +SOLITON +POKERS +CROPPER +GROPING +CABANAS +TAGGER +SHORING +MEDIANS +MUTATE +ASUNDER +STATIST +QUALMS +SHEAVES +POLEMIC +ARMOURY +HUBCAPS +STILTS +HAPTIC +KNOCKER +ROOFED +STOREYS +SHERBET +INSTAL +VERNIER +CAHIERS +HOTBED +BREADED +GUSHER +HEMMED +MALATE +POMFRET +NIBBLES +CORNICE +MUSKET +TANNERY +BUCKLED +KINDLED +SPINOFF +REPUTE +FAECES +RIMLESS +WISTFUL +ADMIRES +MORONIC +HISSED +TIRADE +SELLOUT +PRONGS +FUMBLED +RATERS +LANCERS +MARSALA +UPSURGE +PEEWEE +CONGER +TUGGING +HECKLER +FISSILE +UNEASE +BARRET +PARKERS +WHIPPET +CHICANE +FEEDLOT +GAMELAN +SATORI +UPTURN +MUDDLE +SHEARED +UNAIDED +BLADED +BAILED +CURRIED +CLAPPED +SQUISHY +BOGGLE +EXUDES +RECEDE +SHAMANS +SWANKY +STEROL +SMOCKED +OBJETS +FAULTED +MASTIC +MAGGOTS +BONGOS +CANING +SNAGGED +DOCENT +MANORS +CARAWAY +EARSHOT +SAILER +BATSMEN +TURBOS +EIGHTS +COUGHED +FILIAL +NIGGERS +THIAMIN +TUGBOAT +BORAGE +SLEWING +DEANERY +KIBBUTZ +REGNUM +MIDRASH +COMMODE +POSERS +SNEAKS +ADORING +TRODDEN +HUSKERS +DEBITED +DIKTAT +REAPED +CICADA +SAGUARO +ENJOIN +BOYISH +NEARED +COBRAS +REAMING +CARVERS +ANILINE +DECODES +GRATER +PEYOTE +RIGOUR +OXALATE +EVINCED +ARISTO +AFRESH +FREESIA +MUSKIE +DUCKED +SITUATE +LOOMED +CLAMOR +DEVISES +DITCHED +RESEDA +WHALERS +WRESTER +SMUGGLE +ACCRUES +GALLET +HICCUP +TITANIA +FLAVIN +PLASMON +NICKLES +STEWED +STOWED +PIDGIN +SQUEAL +DUCKING +SCORCH +CELLIST +RUSTING +SLICKER +BOLLING +HEMMER +FALSIFY +SWAGGER +FLICKED +ARBOUR +HADRONS +HELLCAT +MANDREL +VALINE +ACTINIC +OFFLOAD +PONCHOS +DETOURS +BRAVEST +CREVICE +DIMERS +SKEINS +SEMPLE +HUMMUS +FOXTAIL +FORGES +LOOSED +MADCAP +HYPOXIC +CRABBY +BURLAP +RESCUER +PROPYL +EQUIPS +EPITHET +BLONDS +ELUTION +MONGOLS +CAMPHOR +RUDDOCK +DOZIER +COMINGS +CRINKLE +CAUSEY +EDIBLES +KAMALA +TEARFUL +BETWIXT +PURPURA +MASSED +DYSPNEA +SHIRES +MANTELS +STOMPER +SORTIES +REVIVES +SUITORS +FORKING +WIGGLY +SLEIGHT +TRICOT +SHUTOFF +SKIRTED +KIRKMAN +BIGOTS +DAYBOOK +RECKONS +PUZZLER +FAINTED +FLESHED +WINKING +WALLABY +HOVERS +GROSSED +COTTONS +MULLED +DAZZLED +INBORN +CONSULS +NEWNESS +ASCETIC +KHALIFA +RUSSET +SPECIE +GILDER +PATELLA +REFLOW +MORPHS +SLICERS +METTLE +BULGER +PLACKET +FORMATE +INSETS +LYSATE +BIGOTED +FORMERS +LILACS +LEVYING +BUOYED +MALADY +TAVERNA +TEMPERS +QUININE +OLEFIN +PARKAS +FESTER +RETARDS +SAINTLY +NONFAT +GRUBBY +WOOING +HIPPOS +MOONLIT +MELANGE +HOOPLA +LITHIA +DEMOTED +NULLIFY +REFINES +INFARCT +ABORTS +ENVIED +CORING +REZONE +NURSED +SQUIRM +ALTHEA +TRIPPY +SACKING +CLAPPER +SETTEE +DRIEST +UPSWING +FLAUNT +DASHER +GUNNERY +REAVER +CALLUS +SHIFTY +SNORTED +UPWIND +NYMPHOS +FITMENT +LEMMING +APPENDS +BUTTOCK +ERGODIC +RETRACE +SPLURGE +BOMBARD +MAGPIES +MISSUS +HASHED +SWIRLED +DARTED +WARLIKE +COLONS +FRETTED +BEGONIA +GAUGED +DIETERS +ROACHES +NOUGHT +SINKER +EGGNOG +PULSARS +CORDING +SCEPTER +SCRAPIE +ENTICED +SCHMUCK +EXCLAIM +REHASH +ENLACE +CLAVIER +PURIST +DISHED +CORNED +HONOREE +OCTAVO +BAILOUT +BICOLOR +ANNULUS +NEWTONS +LURING +WHISKED +FLIRTS +WITTED +SIGNORE +COLDLY +ENVOYS +STAVES +GROUCHY +MOBSTER +RIVIERE +AVOWED +OODLES +BRAZIER +ARCHON +DOCILE +CANTONS +WRIGHTS +SUBITO +TANGLES +PARADOR +MEANEST +REFUTES +SEXIER +HOLLOWS +DECILE +MUMBLE +MINIMAX +OPPRESS +COVERUP +VIZIER +NOSTRIL +IMPEDES +ROADIE +SMALLS +SURMISE +BLANCH +MUGGER +CREWED +GROOMER +SALUTED +POLENTA +ANONYM +SABERS +OCTAVES +EMANATE +RUMMAGE +MAKINGS +DUCTAL +ANIMUS +DIMPLE +NOBLEST +SUPINE +SQUINT +VITALS +KHAKIS +BOBBINS +SPLENIC +SCANTY +MARMITE +HEMMING +DEFILED +TRICEPS +NEONATE +LAYMEN +ROOFERS +COMBATS +AQUARIA +DRENCH +LEGIBLY +CUPOLA +CLOSERS +MINUET +SPOUTS +GLIDED +RIPOFF +LARGOS +SOLEUS +DOORMAT +AREOLAS +CELADON +TIMPANI +FANNED +WAGGING +FARRIER +WETTED +BALLERS +GRANARY +WHITISH +MELANIN +WALLOP +LEAVER +BLACKED +DOWSING +BOOKIES +BEFALL +FIGMENT +ANODES +WEARILY +GLAZIER +PLAYPEN +ANCHOVY +MALLEE +EARINGS +HOTSHOT +SUNLAND +LINSEED +TROGON +DODGED +LECTERN +FINNED +LOOSES +BLOODS +ODOURS +MONGREL +HASHISH +MEAGRE +MOPPING +CHINTZ +LINEAL +GAINFUL +ALDRIN +LESSEES +WHIMPER +SPINEL +INCISED +ELICITS +INVENTS +WANTAGE +TENFOLD +BLUEFIN +JAMMERS +SCOURED +PRETAX +BUSHIDO +LAYAWAY +GELDER +PILSNER +KNOTTY +CHANCEL +LAMPREY +WASHOUT +IRONED +BLUESY +DARSHAN +PIGSKIN +RETOLD +PHOTOG +EMBEDS +VOLANT +AIRWAVE +FUSIONS +TAPPER +NAPHTHA +OVERSEA +GIRDLES +SMITHY +BANNOCK +CRATING +FERRULE +IGNITES +ENROLLS +GRATIN +FULNESS +MAJORED +CALKINS +BRONZES +BAYWOOD +STARTLE +SMASHES +ERECTOR +SUITOR +CICHLID +AWARDEE +ROOMING +SPILLER +BEARCAT +CRECHE +EXCIMER +CASHEWS +OPOSSUM +GHIBLI +TICKLES +OUTDRAW +URBANE +LURKERS +SARDINE +MESHING +STUPOR +SEXING +AIMLESS +PARFAIT +PLEATS +ACCEDE +MEASLY +CUDDLES +SORTERS +SANGRIA +TURNIPS +BAHADUR +SEXTANT +STOMPED +SWAMPY +DONNING +PLANERS +LUSTFUL +GRANDAD +REBUKED +BUYOUTS +PHENOLS +PRESAGE +CAMISA +TIDYING +MAYPOLE +LIFTOFF +DATURA +STABLY +LENSING +PIGLETS +LIFERS +MONGERS +GIBSONS +OUSTER +GREASES +AETHER +MORGANS +BOATMAN +SARDAR +NEGATES +SYNCOPE +FRESHEN +TUGGED +OUTDONE +STERNUM +IGUANAS +DETEST +HAMMING +PARADED +SCAPES +INBUILT +NIPPER +WHIRLED +RECLAME +PASSIM +ENLISTS +JOVIAL +BAGGER +NAILERS +BLARING +ENGINED +MEDDLE +TOMBOY +ALIYAH +HEAPING +ORATION +GRUNTED +BENZOYL +WAMPUM +SUTRAS +CANARD +BATCHED +POSITED +WINKED +PENNINE +FIESTAS +SCURVY +WOULDST +LENTEN +COARSER +MARKUPS +PATTIE +GRAMPS +SHIMMY +CHALLIS +ALIQUOT +OUTSELL +REGAINS +LESSENS +WARNERS +TAUNTS +RIPENED +MADRONA +PIVOTS +TOENAIL +GLOWED +WALTZES +SUNLIT +ATTESTS +PARCHED +STANZAS +RIGGER +TONSILS +ASEXUAL +GAGGLE +KINDEST +BONNETS +PANELED +SCIATIC +SHEATHS +CALLOW +EDICTS +JUGULAR +PIMPLE +BEMUSED +HACKSAW +BASHED +SWEETEN +CONFIDE +MACAQUE +TANNIN +PALMERS +CHILIES +BOUGHS +SPENDER +DERMIS +SPRIGS +ANIMES +STYMIE +VIRAGO +CHICORY +SUBSOIL +THRESH +CHABLIS +UNIFIES +SNOOTY +ELITISM +FOETAL +HELICON +CARWASH +HEARKEN +TACHYON +PINOLE +BRALESS +PATTING +CONGAS +NIOBIUM diff --git a/server/games/registry.js b/server/games/registry.js index cbcbeec..ff24bf6 100644 --- a/server/games/registry.js +++ b/server/games/registry.js @@ -64,6 +64,7 @@ registerGame({ slug: 'oldmaid', name: 'Old Maid', category: 'ca registerGame({ slug: 'blokus', name: 'Blokus', category: 'tabletop', minPlayers: 2, maxPlayers: 4, minOpponents: 1, maxOpponents: 3, iconFrame: 36 }); registerGame({ slug: 'spellingbee', name: 'Spelling Bee', category: 'word', minPlayers: 1, maxPlayers: 1, minOpponents: 0, maxOpponents: 0, iconFrame: 37 }); registerGame({ slug: 'minicrossword', name: 'Mini Crossword', category: 'word', minPlayers: 1, maxPlayers: 1, minOpponents: 0, maxOpponents: 0, iconFrame: 38 }); +registerGame({ slug: 'tectonic', name: 'Tectonic', category: 'word', minPlayers: 1, maxPlayers: 1, minOpponents: 0, maxOpponents: 0, iconFrame: 42 }); registerGame({ slug: 'forbiddenisland', name: 'Forbidden Island', category: 'tabletop', minPlayers: 2, maxPlayers: 4, minOpponents: 1, maxOpponents: 3, hasTutorial: false, iconFrame: 39 }); registerGame({ slug: 'solitairetour', name: 'Solitaire Tour', category: 'cards', cardGame: true, minPlayers: 1, maxPlayers: 1, minOpponents: 0, maxOpponents: 0, iconFrame: 40 }); registerGame({ slug: 'splendor', name: 'Splendor', category: 'cards', cardGame: true, minPlayers: 2, maxPlayers: 4, minOpponents: 1, maxOpponents: 3, iconFrame: 41 }); diff --git a/server/scripts/buildCommonWords.js b/server/scripts/buildCommonWords.js new file mode 100644 index 0000000..cdda954 --- /dev/null +++ b/server/scripts/buildCommonWords.js @@ -0,0 +1,54 @@ +// Builds server/data/wordlists/common.txt — the clue-able word subset the Mini +// Crossword generator fills from. It intersects the ENABLE dictionary with the +// Norvig word-frequency list, applying a *tighter rank cutoff for short words*: +// short obscure words (ANI, CESS, SEG) are the worst crossword fill, and the +// truly common short words rank very high, so a low cutoff filters the junk +// while keeping enough vocabulary to fill. +// +// Usage: node server/scripts/buildCommonWords.js +// Caches the 5 MB frequency list at /tmp/count_1w.txt to avoid re-downloading. + +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ENABLE_PATH = path.join(__dirname, '../data/wordlists/enable1.txt'); +const OUT_PATH = path.join(__dirname, '../data/wordlists/common.txt'); +const FREQ_URL = 'https://norvig.com/ngrams/count_1w.txt'; +const FREQ_CACHE = '/tmp/count_1w.txt'; + +// Frequency-rank cutoff per word length. Short words get a much stricter bar. +const CUTOFF = { 3: 6000, 4: 18000, 5: 45000, 6: 70000, 7: 70000 }; + +async function loadFreq() { + if (fs.existsSync(FREQ_CACHE)) return fs.readFileSync(FREQ_CACHE, 'utf8'); + console.log('Downloading frequency list...'); + const text = await (await fetch(FREQ_URL)).text(); + fs.writeFileSync(FREQ_CACHE, text); + return text; +} + +async function main() { + const enable = new Set( + fs.readFileSync(ENABLE_PATH, 'utf8').split('\n').map((w) => w.trim().toUpperCase()), + ); + const ranked = (await loadFreq()) + .split('\n').map((l) => l.split('\t')[0]).filter(Boolean).map((w) => w.toUpperCase()); + + const out = []; + const byLen = {}; + ranked.forEach((w, rank) => { + const len = w.length; + if (!CUTOFF[len] || rank >= CUTOFF[len]) return; + if (!/^[A-Z]+$/.test(w) || !enable.has(w)) return; + out.push(w); + byLen[len] = (byLen[len] || 0) + 1; + }); + + fs.writeFileSync(OUT_PATH, out.join('\n') + '\n'); + console.log(`Wrote ${out.length} common words to ${OUT_PATH}`); + console.log('Per length:', JSON.stringify(byLen)); +} + +main(); diff --git a/server/scripts/genMiniCrossword.js b/server/scripts/genMiniCrossword.js new file mode 100644 index 0000000..208613b --- /dev/null +++ b/server/scripts/genMiniCrossword.js @@ -0,0 +1,339 @@ +// Offline generator for Mini Crossword grids. +// +// Produces *non-symmetric* crossword grids (across words differ from down words) +// at three sizes — easy 5x5, medium 6x6, hard 7x7 — by filling block templates +// against the ENABLE word list with a backtracking solver (MRV slot ordering + +// forward checking). It emits a candidate JSON whose `across`/`down` clue arrays +// are blank placeholders, plus the answers, so clues can be hand-authored after. +// +// Usage: +// node server/scripts/genMiniCrossword.js [perTier] [outFile] +// node server/scripts/genMiniCrossword.js 20 server/data/crosswords/_generated.json +// +// All runs are length >= 3. Templates are rotationally symmetric. Each puzzle +// uses every word at most once. + +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +// Common-word subset (top frequency ∩ ENABLE) so fills stay clue-able rather +// than picking obscure Scrabble words. Built once via buildCommonWords.js. +const WORDLIST_PATH = path.join(__dirname, '../data/wordlists/common.txt'); + +const BLOCK = '#'; +const EMPTY = '.'; + +// ── Block templates ──────────────────────────────────────────────────────────── +// '.' = fillable cell, '#' = black square. Each is rotationally symmetric with no +// run shorter than 3. Blocks make the fill *easier* (shorter, more-flexible runs) +// while giving a real-crossword shape. More than one template per tier yields +// more grid variety. + +const TEMPLATES = { + easy: [ + // Open 5x5: a double word square — 5 across + 5 down, all distinct words. + [ + '.....', + '.....', + '.....', + '.....', + '.....', + ], + // 5x5 with symmetric corner nicks (len-4 corners + len-5 spines). + [ + '#....', + '.....', + '.....', + '.....', + '....#', + ], + ], + medium: [ + // 6x6 corner-cut: len-4 corners, len-6 spines. + [ + '#....#', + '......', + '......', + '......', + '......', + '#....#', + ], + ], + hard: [ + // 7x7 with symmetric corner blocks + center split. Runs of length 3, 5, 7. + [ + '##...##', + '#.....#', + '.......', + '...#...', + '.......', + '#.....#', + '##...##', + ], + ], +}; + +const TIER_SIZE = { easy: 5, medium: 6, hard: 7 }; + +// ── Word list ─────────────────────────────────────────────────────────────────── + +// Returns { byLen: Map, index: Map>>> }. +// The index lets us find words matching a partial pattern by intersecting the +// candidate sets of the already-fixed letter positions. +function loadWords() { + const raw = fs.readFileSync(WORDLIST_PATH, 'utf8'); + const byLen = new Map(); + for (const line of raw.split('\n')) { + const w = line.trim().toUpperCase(); + if (w.length < 3 || w.length > 7 || !/^[A-Z]+$/.test(w)) continue; + if (!byLen.has(w.length)) byLen.set(w.length, []); + byLen.get(w.length).push(w); + } + + const index = new Map(); + const sets = new Map(); + for (const [len, words] of byLen) { + sets.set(len, new Set(words)); + const positions = Array.from({ length: len }, () => new Map()); + words.forEach((w, i) => { + for (let p = 0; p < len; p++) { + const m = positions[p]; + const ch = w[p]; + if (!m.has(ch)) m.set(ch, new Set()); + m.get(ch).add(i); + } + }); + index.set(len, positions); + } + return { byLen, index, sets }; +} + +// Words of `len` whose letters match `pattern` (array of letter|null), excluding +// any already in `used`. Intersects the smallest fixed-position sets first. +function candidates({ byLen, index }, len, pattern, used) { + const fixed = []; + for (let p = 0; p < len; p++) { + if (pattern[p]) fixed.push([p, pattern[p]]); + } + const words = byLen.get(len) || []; + if (!fixed.length) { + return words.filter((w) => !used.has(w)); + } + + const positions = index.get(len); + const sets = fixed.map(([p, ch]) => positions[p].get(ch) || new Set()); + if (sets.some((s) => s.size === 0)) return []; + sets.sort((a, b) => a.size - b.size); + + const out = []; + for (const i of sets[0]) { + let ok = true; + for (let k = 1; k < sets.length; k++) { + if (!sets[k].has(i)) { ok = false; break; } + } + if (!ok) continue; + const w = words[i]; + if (!used.has(w)) out.push(w); + } + return out; +} + +// ── Slot extraction (matches the engine's numbering convention) ───────────────── + +function buildGrid(template) { + return template.map((row) => row.split('')); +} + +function isCell(grid, r, c) { + return r >= 0 && r < grid.length && c >= 0 && c < grid[0].length && grid[r][c] !== BLOCK; +} + +// Returns numbered across/down slots; each slot lists its cells in order. +function deriveSlots(grid) { + const across = []; + const down = []; + let number = 0; + for (let r = 0; r < grid.length; r++) { + for (let c = 0; c < grid[0].length; c++) { + if (!isCell(grid, r, c)) continue; + const startsAcross = !isCell(grid, r, c - 1) && isCell(grid, r, c + 1); + const startsDown = !isCell(grid, r - 1, c) && isCell(grid, r + 1, c); + if (!startsAcross && !startsDown) continue; + number += 1; + if (startsAcross) { + const cells = []; + let cc = c; + while (isCell(grid, r, cc)) { cells.push([r, cc]); cc += 1; } + across.push({ number, row: r, col: c, len: cells.length, cells }); + } + if (startsDown) { + const cells = []; + let rr = r; + while (isCell(grid, rr, c)) { cells.push([rr, c]); rr += 1; } + down.push({ number, row: r, col: c, len: cells.length, cells }); + } + } + } + return [...across, ...down]; // combined slot list for the solver +} + +// ── Backtracking solver ───────────────────────────────────────────────────────── + +function patternFor(grid, slot) { + return slot.cells.map(([r, c]) => (grid[r][c] === EMPTY ? null : grid[r][c])); +} + +function isFilled(grid, slot) { + return slot.cells.every(([r, c]) => grid[r][c] !== EMPTY); +} + +function wordAt(grid, slot) { + return slot.cells.map(([r, c]) => grid[r][c]).join(''); +} + +function placeWord(grid, slot, word) { + const prev = slot.cells.map(([r, c]) => grid[r][c]); + slot.cells.forEach(([r, c], i) => { grid[r][c] = word[i]; }); + return prev; +} + +function unplace(grid, slot, prev) { + slot.cells.forEach(([r, c], i) => { grid[r][c] = prev[i]; }); +} + +// Fills `grid` so every slot is a distinct valid word. Every slot is explicitly +// assigned a candidate word — a slot already fully determined by crossing words +// simply has one candidate (if that spelling is a real word) or zero (if not), so +// invalid crossings are pruned automatically. Mutates grid in place; returns true +// on success. `assigned` tracks resolved slots; `deadline` is an epoch-ms budget. +function solve(grid, slots, words, used, assigned, deadline) { + if (Date.now() > deadline) return false; + + // MRV: assign the unresolved slot with the fewest candidates first. Slots fixed + // by crossings collapse to <=1 candidate and resolve immediately. + let target = null; + let targetCands = null; + for (const slot of slots) { + if (assigned.has(slot)) continue; + const cands = candidates(words, slot.len, patternFor(grid, slot), used); + if (cands.length === 0) return false; + if (!targetCands || cands.length < targetCands.length) { + target = slot; + targetCands = cands; + if (cands.length === 1) break; + } + } + if (!target) return true; // every slot assigned + + shuffle(targetCands); + for (const word of targetCands) { + const prev = placeWord(grid, target, word); + used.add(word); + assigned.add(target); + if (solve(grid, slots, words, used, assigned, deadline)) return true; + assigned.delete(target); + used.delete(word); + unplace(grid, target, prev); + } + return false; +} + +function shuffle(arr) { + for (let i = arr.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [arr[i], arr[j]] = [arr[j], arr[i]]; + } + return arr; +} + +// ── Puzzle assembly ───────────────────────────────────────────────────────────── + +// Re-derive ordered across/down answer lists from a solved grid (numbering order). +function answersFromGrid(grid) { + const across = []; + const down = []; + let number = 0; + for (let r = 0; r < grid.length; r++) { + for (let c = 0; c < grid[0].length; c++) { + if (!isCell(grid, r, c)) continue; + const sa = !isCell(grid, r, c - 1) && isCell(grid, r, c + 1); + const sd = !isCell(grid, r - 1, c) && isCell(grid, r + 1, c); + if (!sa && !sd) continue; + number += 1; + if (sa) { let s = '', cc = c; while (isCell(grid, r, cc)) { s += grid[r][cc]; cc++; } across.push({ number, answer: s }); } + if (sd) { let s = '', rr = r; while (isCell(grid, rr, c)) { s += grid[rr][c]; rr++; } down.push({ number, answer: s }); } + } + } + return { across, down }; +} + +function generateOne(template, words, timeoutMs = 800) { + const grid = buildGrid(template); + const slots = deriveSlots(grid); + const used = new Set(); + const ok = solve(grid, slots, words, used, new Set(), Date.now() + timeoutMs); + if (!ok) return null; + + // Safety net: every across/down answer must be a real common word and unique. + const seen = new Set(); + for (const slot of slots) { + const w = wordAt(grid, slot); + if (!words.sets.get(slot.len)?.has(w) || seen.has(w)) return null; + seen.add(w); + } + return grid.map((row) => row.join('')); +} + +function main() { + const perTier = parseInt(process.argv[2], 10) || 20; + const outFile = process.argv[3] || path.join(__dirname, '../data/crosswords/_generated.json'); + + console.log('Loading ENABLE word list...'); + const words = loadWords(); + console.log(` ${[...words.byLen].map(([l, a]) => `${l}:${a.length}`).join(' ')}`); + + const bank = []; + for (const tier of ['easy', 'medium', 'hard']) { + const templates = TEMPLATES[tier]; + const seen = new Set(); + let made = 0; + let attempts = 0; + const maxAttempts = perTier * 80; + const t0 = Date.now(); + + while (made < perTier && attempts < maxAttempts) { + attempts += 1; + const template = templates[attempts % templates.length]; + const rows = generateOne(template, words); + if (process.env.CW_DEBUG && attempts % 5 === 0) { + console.log(` [${tier}] attempt ${attempts}, made ${made}, ${((Date.now() - t0) / 1000).toFixed(1)}s`); + } + if (!rows) continue; + const key = rows.join('|'); + if (seen.has(key)) continue; + seen.add(key); + + const { across, down } = answersFromGrid(buildGrid(rows)); + bank.push({ + id: `${tier}-${String(made + 1).padStart(3, '0')}`, + difficulty: tier, + grid: rows, + // Reference answers (NOT consumed by the engine) to author clues against: + _answersAcross: across.map((a) => `${a.number}. ${a.answer}`), + _answersDown: down.map((a) => `${a.number}. ${a.answer}`), + across: across.map(() => ''), + down: down.map(() => ''), + }); + made += 1; + } + console.log(`${tier} (${TIER_SIZE[tier]}x${TIER_SIZE[tier]}): ${made}/${perTier} grids in ${attempts} attempts, ${((Date.now() - t0) / 1000).toFixed(1)}s`); + } + + fs.writeFileSync(outFile, JSON.stringify(bank, null, 2)); + console.log(`\nWrote ${bank.length} candidate puzzles to ${outFile}`); + console.log('Fill the empty across/down clue arrays; _answers* fields are references.'); +} + +main(); diff --git a/server/words/miniCrosswordEngine.js b/server/words/miniCrosswordEngine.js index 4889a13..1eabce3 100644 --- a/server/words/miniCrosswordEngine.js +++ b/server/words/miniCrosswordEngine.js @@ -1,10 +1,11 @@ -// Mini Crossword engine: serves curated 5x5 puzzles from a hand-authored bank. +// Mini Crossword engine: serves curated puzzles from a hand-authored bank. // Pure logic — no Express. Loaded once at server start. // -// A puzzle is authored as { id, difficulty, grid:[5 row strings], across:[5], -// down:[5] }. Grids are fixed 5x5; a '#' marks a black square. Across/Down clue -// arrays are ordered by row index / column index respectively. This engine -// derives the standard crossword numbering and pairs each clue with its slot. +// A puzzle is authored as { id, difficulty, grid:[row strings], across:[...], +// down:[...] }. Difficulty sets the grid size: easy 5x5, medium 6x6, hard 7x7. +// A '#' marks a black square. Across/Down clue arrays are ordered by the derived +// crossword numbering (reading order). This engine derives that numbering and +// pairs each clue with its slot. import fs from 'node:fs'; import path from 'node:path'; @@ -13,18 +14,19 @@ import { fileURLToPath } from 'node:url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const PUZZLE_PATH = path.join(__dirname, '../data/crosswords/minicrossword.json'); -const SIZE = 5; const BLOCK = '#'; -const DIFFICULTIES = ['easy', 'medium', 'hard']; +// Difficulty no longer means clue obscurity — it sets the grid size. +const TIER_SIZE = { easy: 5, medium: 6, hard: 7 }; +const DIFFICULTIES = Object.keys(TIER_SIZE); let byDifficulty = { easy: [], medium: [], hard: [] }; let allPuzzles = []; // ── Slot extraction & numbering ─────────────────────────────────────────────── -// Returns true when (r,c) is a letter cell (not a black square). +// Returns true when (r,c) is a letter cell (not a black square) within the grid. function isCell(grid, r, c) { - return r >= 0 && r < SIZE && c >= 0 && c < SIZE && grid[r][c] !== BLOCK; + return r >= 0 && r < grid.length && c >= 0 && c < grid[r].length && grid[r][c] !== BLOCK; } // Walks the grid in reading order and builds the numbered across/down slots. @@ -36,8 +38,8 @@ function deriveSlots(grid) { const down = []; let number = 0; - for (let r = 0; r < SIZE; r++) { - for (let c = 0; c < SIZE; c++) { + for (let r = 0; r < grid.length; r++) { + for (let c = 0; c < grid[r].length; c++) { if (!isCell(grid, r, c)) continue; const startsAcross = !isCell(grid, r, c - 1) && isCell(grid, r, c + 1); @@ -66,12 +68,17 @@ function deriveSlots(grid) { // ── Validation ──────────────────────────────────────────────────────────────── function validatePuzzle(p) { - if (!Array.isArray(p.grid) || p.grid.length !== SIZE) { - throw new Error(`puzzle ${p.id}: grid must have ${SIZE} rows`); + const size = TIER_SIZE[p.difficulty]; + if (!size) { + throw new Error(`puzzle ${p.id}: unknown difficulty '${p.difficulty}'`); } + if (!Array.isArray(p.grid) || p.grid.length !== size) { + throw new Error(`puzzle ${p.id}: ${p.difficulty} grid must have ${size} rows`); + } + const rowRe = new RegExp(`^[A-Z#]{${size}}$`); for (const row of p.grid) { - if (typeof row !== 'string' || row.length !== SIZE || !/^[A-Z#]{5}$/.test(row)) { - throw new Error(`puzzle ${p.id}: each row must be ${SIZE} chars of A-Z or '#'`); + if (typeof row !== 'string' || !rowRe.test(row)) { + throw new Error(`puzzle ${p.id}: each row must be ${size} chars of A-Z or '#'`); } } const { across, down } = deriveSlots(p.grid); @@ -101,8 +108,7 @@ export function initMiniCrosswordPuzzles() { const bank = JSON.parse(raw); for (const p of bank) { validatePuzzle(p); - const diff = DIFFICULTIES.includes(p.difficulty) ? p.difficulty : 'medium'; - byDifficulty[diff].push(p); + byDifficulty[p.difficulty].push(p); allPuzzles.push(p); } return { puzzles: allPuzzles.length }; @@ -112,10 +118,10 @@ export function initMiniCrosswordPuzzles() { // Returns a random puzzle for the requested difficulty, packaged with derived // numbering. Each clue entry carries its number, start cell, length and answer. -export function getPuzzle(difficulty = 'medium') { +export function getPuzzle(difficulty = 'easy') { const bucket = byDifficulty[difficulty]?.length ? byDifficulty[difficulty] : allPuzzles; if (!bucket.length) { - return { id: null, difficulty, rows: SIZE, cols: SIZE, grid: [], across: [], down: [] }; + return { id: null, difficulty, rows: 0, cols: 0, grid: [], across: [], down: [] }; } const p = bucket[Math.floor(Math.random() * bucket.length)]; @@ -124,8 +130,8 @@ export function getPuzzle(difficulty = 'medium') { return { id: p.id, difficulty: p.difficulty, - rows: SIZE, - cols: SIZE, + rows: p.grid.length, + cols: p.grid[0].length, grid: p.grid, across: across.map((slot, i) => ({ ...slot, clue: p.across[i] })), down: down.map((slot, i) => ({ ...slot, clue: p.down[i] })), diff --git a/server/words/tectonicEngine.js b/server/words/tectonicEngine.js new file mode 100644 index 0000000..f1ae71a --- /dev/null +++ b/server/words/tectonicEngine.js @@ -0,0 +1,317 @@ +// Tectonic (a.k.a. Suguru) generator. +// +// Rules: +// • The grid is partitioned into irregular regions ("cages") of 1–5 cells. +// • A region of N cells contains the numbers 1..N (so digits never exceed 5). +// • No two cells that touch orthogonally OR diagonally (king-move / 8-way) +// may hold the same number. +// +// generatePuzzle(difficulty) → { grid, solution, regions, difficulty } +// grid : 8×8, 0 = empty cell the player must fill +// solution : 8×8 fully-solved board +// regions : 8×8 of integer region IDs (which cage each cell belongs to) +// +// Generation: +// 1. Partition the grid into 1–5-cell regions (randomized greedy growth). +// 2. Fill a random valid solution (backtracking on flat Int8Array boards with +// precomputed peer lists and most-constrained-variable ordering). +// 3. Dig holes: remove a cell only while the remaining givens are still +// uniquely solvable *by logic alone* (naked singles + hidden singles in a +// region). Logical solvability proves a unique solution AND guarantees the +// puzzle is human-solvable without guessing. The propagation solver is +// polynomial, so digging is fast and low-variance (unlike brute-force +// solution-counting, which blows up on sparse Tectonic boards). + +const N = 8; +const CELLS = N * N; + +const ORTHO = [[-1, 0], [1, 0], [0, -1], [0, 1]]; +const KING = [ + [-1, -1], [-1, 0], [-1, 1], + [0, -1], [0, 1], + [1, -1], [1, 0], [1, 1], +]; + +function shuffle(arr) { + for (let i = arr.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [arr[i], arr[j]] = [arr[j], arr[i]]; + } + return arr; +} + +function inBounds(r, c) { + return r >= 0 && r < N && c >= 0 && c < N; +} + +function orthoNeighbors(r, c) { + const out = []; + for (const [dr, dc] of ORTHO) { + const nr = r + dr, nc = c + dc; + if (inBounds(nr, nc)) out.push([nr, nc]); + } + return out; +} + +function bitToValue(bit) { + return bit === 1 ? 1 : bit === 2 ? 2 : bit === 4 ? 3 : bit === 8 ? 4 : 5; +} + +// ── Region partition ──────────────────────────────────────────────────────── +// Greedy growth that seeds the most-constrained free cell (fewest free +// neighbours) and grows toward size 5, always extending into the tightest +// pocket. This keeps stranded size-1 regions rare without forbidding them. + +function partition() { + const regions = Array.from({ length: N }, () => Array(N).fill(-1)); + let unassigned = CELLS; + let nextId = 0; + + const freeNeighborCount = (r, c) => { + let cnt = 0; + for (const [nr, nc] of orthoNeighbors(r, c)) + if (regions[nr][nc] === -1) cnt++; + return cnt; + }; + + while (unassigned > 0) { + const free = []; + for (let r = 0; r < N; r++) + for (let c = 0; c < N; c++) + if (regions[r][c] === -1) free.push([r, c]); + shuffle(free); + let seed = free[0], bestSeed = Infinity; + for (const [r, c] of free) { + const u = freeNeighborCount(r, c); + if (u < bestSeed) { bestSeed = u; seed = [r, c]; } + } + + const id = nextId++; + const members = [seed]; + regions[seed[0]][seed[1]] = id; + + while (members.length < 5) { + const frontier = []; + for (const [mr, mc] of members) + for (const [nr, nc] of orthoNeighbors(mr, mc)) + if (regions[nr][nc] === -1) frontier.push([nr, nc]); + if (frontier.length === 0) break; + shuffle(frontier); + let pick = frontier[0], bestPick = Infinity; + for (const [r, c] of frontier) { + const u = freeNeighborCount(r, c); + if (u < bestPick) { bestPick = u; pick = [r, c]; } + } + regions[pick[0]][pick[1]] = id; + members.push(pick); + } + + unassigned -= members.length; + } + + return regions; +} + +// Precompute flat lookup tables from a 2D region grid. +// sizeOf[i] : size of i's region (max value allowed in i) +// peers[i] : Int16Array of region-mates + king-neighbours (excl. self) +// byRegion : Map regionId -> array of cell indices +function buildTables(regions) { + const regionOf = new Int16Array(CELLS); + const byRegion = new Map(); + for (let r = 0; r < N; r++) + for (let c = 0; c < N; c++) { + const i = r * N + c; + const id = regions[r][c]; + regionOf[i] = id; + if (!byRegion.has(id)) byRegion.set(id, []); + byRegion.get(id).push(i); + } + + const sizeOf = new Int8Array(CELLS); + const peers = new Array(CELLS); + for (let r = 0; r < N; r++) + for (let c = 0; c < N; c++) { + const i = r * N + c; + const fellows = byRegion.get(regionOf[i]); + sizeOf[i] = fellows.length; + const set = new Set(); + for (const j of fellows) if (j !== i) set.add(j); + for (const [dr, dc] of KING) { + const nr = r + dr, nc = c + dc; + if (inBounds(nr, nc)) set.add(nr * N + nc); + } + peers[i] = Int16Array.from(set); + } + + return { sizeOf, peers, byRegion }; +} + +// ── Solution fill (backtracking) ────────────────────────────────────────────── + +function valueOk(g, peers, i, v) { + const p = peers[i]; + for (let k = 0; k < p.length; k++) if (g[p[k]] === v) return false; + return true; +} + +// Most-constrained empty cell. Returns { idx, cands } or null when full; +// short-circuits on the first forced (0- or 1-candidate) cell. +function findBestCell(g, sizeOf, peers) { + let bestIdx = -1, bestCands = null, bestLen = 99; + for (let i = 0; i < CELLS; i++) { + if (g[i] !== 0) continue; + const max = sizeOf[i]; + const cands = []; + for (let v = 1; v <= max; v++) if (valueOk(g, peers, i, v)) cands.push(v); + if (cands.length < bestLen) { + bestLen = cands.length; bestIdx = i; bestCands = cands; + if (bestLen <= 1) return { idx: bestIdx, cands: bestCands }; + } + } + return bestIdx === -1 ? null : { idx: bestIdx, cands: bestCands }; +} + +// Fills g in place with one random valid solution. Returns true on success, +// false if unsatisfiable, or null if the node budget was exhausted. +function solveOne(g, sizeOf, peers, budget) { + let nodes = 0; + function rec() { + if (++nodes > budget) return null; + const next = findBestCell(g, sizeOf, peers); + if (!next) return true; + if (next.cands.length === 0) return false; + const { idx } = next; + for (const v of shuffle([...next.cands])) { + g[idx] = v; + const r = rec(); + if (r === true || r === null) return r; + g[idx] = 0; + } + return false; + } + return rec(); +} + +// ── Logic solver (naked + hidden singles) ───────────────────────────────────── +// Returns true iff `given` is fully solvable by propagation alone — which proves +// the solution is unique and the puzzle needs no guessing. + +function logicSolves(given, tables) { + const { sizeOf, peers, byRegion } = tables; + const val = new Int8Array(CELLS); + const cand = new Int8Array(CELLS); + for (let i = 0; i < CELLS; i++) cand[i] = (1 << sizeOf[i]) - 1; + + const assign = (i, v) => { + val[i] = v; + cand[i] = 1 << (v - 1); + const p = peers[i]; + const mask = ~(1 << (v - 1)); + for (let k = 0; k < p.length; k++) + if (val[p[k]] === 0) cand[p[k]] &= mask; + }; + + for (let i = 0; i < CELLS; i++) if (given[i] !== 0) assign(i, given[i]); + + let progress = true; + while (progress) { + progress = false; + + // Naked singles + for (let i = 0; i < CELLS; i++) { + if (val[i] !== 0) continue; + const c = cand[i]; + if (c === 0) return false; // contradiction + if ((c & (c - 1)) === 0) { // exactly one bit + assign(i, bitToValue(c)); + progress = true; + } + } + if (progress) continue; + + // Hidden singles within each region + for (const cells of byRegion.values()) { + const size = cells.length; + for (let v = 1; v <= size; v++) { + const bit = 1 << (v - 1); + let count = 0, where = -1, present = false; + for (const i of cells) { + if (val[i] === v) { present = true; break; } + if (val[i] === 0 && (cand[i] & bit)) { count++; where = i; } + } + if (present) continue; + if (count === 0) return false; // value has nowhere to go + if (count === 1) { assign(where, v); progress = true; } + } + } + } + + for (let i = 0; i < CELLS; i++) if (val[i] === 0) return false; + return true; +} + +// ── Hole digging (logic-guarded) ────────────────────────────────────────────── + +const GIVENS = { easy: 30, medium: 24, hard: 18 }; + +function dig(solution, tables, target) { + const given = Int8Array.from(solution); + const order = shuffle([...Array(CELLS).keys()]); + let givens = CELLS; + for (const i of order) { + if (givens <= target) break; + const saved = given[i]; + given[i] = 0; + if (logicSolves(given, tables)) givens--; + else given[i] = saved; + } + return { given, givens }; +} + +// ── Public API ─────────────────────────────────────────────────────────────── + +function buildSolved(deadline) { + for (let attempt = 0; attempt < 200; attempt++) { + if (Date.now() > deadline) return null; + const regions = partition(); + const tables = buildTables(regions); + const sol = new Int8Array(CELLS); + if (solveOne(sol, tables.sizeOf, tables.peers, 30000) === true) + return { regions, tables, sol }; + } + return null; +} + +function toGrid(flat) { + const out = []; + for (let r = 0; r < N; r++) { + const row = []; + for (let c = 0; c < N; c++) row.push(flat[r * N + c]); + out.push(row); + } + return out; +} + +export function generatePuzzle(difficulty) { + const target = GIVENS[difficulty] ?? GIVENS.medium; + const deadline = Date.now() + 3000; + + let best = null; + while (Date.now() < deadline) { + const built = buildSolved(deadline); + if (!built) break; + const { regions, tables, sol } = built; + const { given, givens } = dig(sol, tables, target); + + if (givens <= target) { + return { grid: toGrid(given), solution: toGrid(sol), regions, difficulty }; + } + if (!best || givens < best.givens) { + best = { grid: toGrid(given), solution: toGrid(sol), regions, givens }; + } + } + + if (!best) throw new Error('tectonic: failed to generate a board'); + return { grid: best.grid, solution: best.solution, regions: best.regions, difficulty }; +} diff --git a/server/words/wordRoutes.js b/server/words/wordRoutes.js index 10826cd..d67e30e 100644 --- a/server/words/wordRoutes.js +++ b/server/words/wordRoutes.js @@ -17,6 +17,7 @@ import { listThemes as wordSearchThemes, } from './wordSearchEngine.js'; import { generatePuzzle as sudokuGenerate } from './sudokuEngine.js'; +import { generatePuzzle as tectonicGenerate } from './tectonicEngine.js'; import { initBoggleDictionary, rollBoard, solveBoard } from './boggleEngine.js'; import { initSpellingBeeDictionary, generatePuzzle as spellingBeeGenerate } from './spellingBeeEngine.js'; import { initMiniCrosswordPuzzles, getPuzzle as miniCrosswordGet } from './miniCrosswordEngine.js'; @@ -156,7 +157,7 @@ function loadWordLists() { const beeStats = initSpellingBeeDictionary(allWords); console.log(`[words] loaded ${beeStats.words} Spelling Bee words (${beeStats.pangrams} pangram sets)`); - // Mini Crossword: curated 5x5 puzzle bank (independent of the ENABLE list). + // Mini Crossword: curated puzzle bank, 5x5/6x6/7x7 by difficulty (independent of the ENABLE list). const crosswordStats = initMiniCrosswordPuzzles(); console.log(`[words] loaded ${crosswordStats.puzzles} Mini Crossword puzzles`); @@ -216,10 +217,11 @@ router.get('/spellingbee/start', (req, res) => { // ── Mini Crossword ──────────────────────────────────────────────────────────── // GET /api/words/minicrossword/start?difficulty=easy|medium|hard -// Returns a curated 5x5 puzzle (grid + numbered across/down clues with answers). +// Difficulty sets the grid size: easy 5x5, medium 6x6, hard 7x7. Returns the +// grid + numbered across/down clues (with answers). router.get('/minicrossword/start', (req, res) => { const VALID = ['easy', 'medium', 'hard']; - const difficulty = VALID.includes(req.query.difficulty) ? req.query.difficulty : 'medium'; + const difficulty = VALID.includes(req.query.difficulty) ? req.query.difficulty : 'easy'; res.json(miniCrosswordGet(difficulty)); }); @@ -425,4 +427,11 @@ router.get('/sudoku/start', (req, res) => { res.json(sudokuGenerate(difficulty)); }); +// GET /api/words/tectonic/start?difficulty=easy|medium|hard +router.get('/tectonic/start', (req, res) => { + const VALID = ['easy', 'medium', 'hard']; + const difficulty = VALID.includes(req.query.difficulty) ? req.query.difficulty : 'medium'; + res.json(tectonicGenerate(difficulty)); +}); + export default router;